]> git.immae.eu Git - perso/Immae/Projets/Cryptomonnaies/BIP39.git/blame - bip39-standalone.html
update compiled standalone.
[perso/Immae/Projets/Cryptomonnaies/BIP39.git] / bip39-standalone.html
CommitLineData
ebd8d4e8
IC
1<!DOCTYPE html>
2<html>
3 <head lang="en">
4 <meta charset="utf-8" />
5 <title>BIP39 - Mnemonic Code</title>
ab78acc6 6 <style>/*!
ebd8d4e8
IC
7 * Bootstrap v3.2.0 (http://getbootstrap.com)
8 * Copyright 2011-2014 Twitter, Inc.
9 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
ab78acc6
IC
10 *//*! normalize.css v3.0.1 | MIT License | git.io/normalize */html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background:0 0}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}@media print{*{color:#000!important;text-shadow:none!important;background:transparent!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100%!important}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}select{background:#fff!important}.navbar{display:none}.table td,.table th{background-color:#fff!important}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table-bordered th,.table-bordered td{border:1px solid #ddd!important}}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\2a"}.glyphicon-plus:before{content:"\2b"}.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:before,:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#428bca;text-decoration:none}a:hover,a:focus{color:#2a6496;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.img-responsive,.thumbnail>img,.thumbnail a>img,.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;width:100% \9;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;width:100% \9;max-width:100%;height:auto;padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small,.h1 small,.h2 small,.h3 small,.h4 small,.h5 small,.h6 small,h1 .small,h2 .small,h3 .small,h4 .small,h5 .small,h6 .small,.h1 .small,.h2 .small,.h3 .small,.h4 .small,.h5 .small,.h6 .small{font-weight:400;line-height:1;color:#777}h1,.h1,h2,.h2,h3,.h3{margin-top:20px;margin-bottom:10px}h1 small,.h1 small,h2 small,.h2 small,h3 small,.h3 small,h1 .small,.h1 .small,h2 .small,.h2 .small,h3 .small,.h3 .small{font-size:65%}h4,.h4,h5,.h5,h6,.h6{margin-top:10px;margin-bottom:10px}h4 small,.h4 small,h5 small,.h5 small,h6 small,.h6 small,h4 .small,.h4 .small,h5 .small,.h5 .small,h6 .small,.h6 .small{font-size:75%}h1,.h1{font-size:36px}h2,.h2{font-size:30px}h3,.h3{font-size:24px}h4,.h4{font-size:18px}h5,.h5{font-size:14px}h6,.h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}small,.small{font-size:85%}cite{font-style:normal}mark,.mark{padding:.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#428bca}a.text-primary:hover{color:#3071a9}.text-success{color:#3c763d}a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#428bca}a.bg-primary:hover{background-color:#3071a9}.bg-success{background-color:#dff0d8}a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ul,ol{margin-top:0;margin-bottom:10px}ul ul,ol ul,ul ol,ol ol{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;margin-left:-5px;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dt,dd{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:0}blockquote footer,blockquote small,blockquote .small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote footer:before,blockquote small:before,blockquote .small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.blockquote-reverse footer:before,blockquote.pull-right footer:before,.blockquote-reverse small:before,blockquote.pull-right small:before,.blockquote-reverse .small:before,blockquote.pull-right .small:before{content:''}.blockquote-reverse footer:after,blockquote.pull-right footer:after,.blockquote-reverse small:after,blockquote.pull-right small:after,.blockquote-reverse .small:after,blockquote.pull-right .small:after{content:'\00A0 \2014'}blockquote:before,blockquote:after{content:""}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.col-xs-1,.col-sm-1,.col-md-1,.col-lg-1,.col-xs-2,.col-sm-2,.col-md-2,.col-lg-2,.col-xs-3,.col-sm-3,.col-md-3,.col-lg-3,.col-xs-4,.col-sm-4,.col-md-4,.col-lg-4,.col-xs-5,.col-sm-5,.col-md-5,.col-lg-5,.col-xs-6,.col-sm-6,.col-md-6,.col-lg-6,.col-xs-7,.col-sm-7,.col-md-7,.col-lg-7,.col-xs-8,.col-sm-8,.col-md-8,.col-lg-8,.col-xs-9,.col-sm-9,.col-md-9,.col-lg-9,.col-xs-10,.col-sm-10,.col-md-10,.col-lg-10,.col-xs-11,.col-sm-11,.col-md-11,.col-lg-11,.col-xs-12,.col-sm-12,.col-md-12,.col-lg-12{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11,.col-xs-12{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>thead>tr>th,.table>tbody>tr>th,.table>tfoot>tr>th,.table>thead>tr>td,.table>tbody>tr>td,.table>tfoot>tr>td{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>th,.table>caption+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>td,.table>thead:first-child>tr:first-child>td{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>thead>tr>th,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>tbody>tr>td,.table-condensed>tfoot>tr>td{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>td{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table-striped>tbody>tr:nth-child(odd)>td,.table-striped>tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.table-hover>tbody>tr:hover>td,.table-hover>tbody>tr:hover>th{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table>thead>tr>td.active,.table>tbody>tr>td.active,.table>tfoot>tr>td.active,.table>thead>tr>th.active,.table>tbody>tr>th.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>tbody>tr.active>td,.table>tfoot>tr.active>td,.table>thead>tr.active>th,.table>tbody>tr.active>th,.table>tfoot>tr.active>th{background-color:#f5f5f5}.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover,.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr.active:hover>th{background-color:#e8e8e8}.table>thead>tr>td.success,.table>tbody>tr>td.success,.table>tfoot>tr>td.success,.table>thead>tr>th.success,.table>tbody>tr>th.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>tbody>tr.success>td,.table>tfoot>tr.success>td,.table>thead>tr.success>th,.table>tbody>tr.success>th,.table>tfoot>tr.success>th{background-color:#dff0d8}.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover,.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr.success:hover>th{background-color:#d0e9c6}.table>thead>tr>td.info,.table>tbody>tr>td.info,.table>tfoot>tr>td.info,.table>thead>tr>th.info,.table>tbody>tr>th.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>tbody>tr.info>td,.table>tfoot>tr.info>td,.table>thead>tr.info>th,.table>tbody>tr.info>th,.table>tfoot>tr.info>th{background-color:#d9edf7}.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover,.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr.info:hover>th{background-color:#c4e3f3}.table>thead>tr>td.warning,.table>tbody>tr>td.warning,.table>tfoot>tr>td.warning,.table>thead>tr>th.warning,.table>tbody>tr>th.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>tbody>tr.warning>td,.table>tfoot>tr.warning>td,.table>thead>tr.warning>th,.table>tbody>tr.warning>th,.table>tfoot>tr.warning>th{background-color:#fcf8e3}.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover,.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr.warning:hover>th{background-color:#faf2cc}.table>thead>tr>td.danger,.table>tbody>tr>td.danger,.table>tfoot>tr>td.danger,.table>thead>tr>th.danger,.table>tbody>tr>th.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>tbody>tr.danger>td,.table>tfoot>tr.danger>td,.table>thead>tr.danger>th,.table>tbody>tr.danger>th,.table>tfoot>tr.danger>th{background-color:#f2dede}.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover,.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr.danger:hover>th{background-color:#ebcccc}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>thead>tr>th,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tfoot>tr>td{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>thead>tr>th:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.table-responsive>.table-bordered>thead>tr>th:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>th,.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=radio],input[type=checkbox]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=radio]:focus,input[type=checkbox]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#777;opacity:1}.form-control:-ms-input-placeholder{color:#777}.form-control::-webkit-input-placeholder{color:#777}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{cursor:not-allowed;background-color:#eee;opacity:1}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}input[type=date],input[type=time],input[type=datetime-local],input[type=month]{line-height:34px;line-height:1.42857143 \0}input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}.form-group{margin-bottom:15px}.radio,.checkbox{position:relative;display:block;min-height:20px;margin-top:10px;margin-bottom:10px}.radio label,.checkbox label{padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.radio input[type=radio],.radio-inline input[type=radio],.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox]{position:absolute;margin-top:4px \9;margin-left:-20px}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}input[type=radio][disabled],input[type=checkbox][disabled],input[type=radio].disabled,input[type=checkbox].disabled,fieldset[disabled] input[type=radio],fieldset[disabled] input[type=checkbox]{cursor:not-allowed}.radio-inline.disabled,.checkbox-inline.disabled,fieldset[disabled] .radio-inline,fieldset[disabled] .checkbox-inline{cursor:not-allowed}.radio.disabled label,.checkbox.disabled label,fieldset[disabled] .radio label,fieldset[disabled] .checkbox label{cursor:not-allowed}.form-control-static{padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm,.form-horizontal .form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}textarea.input-sm,select[multiple].input-sm{height:auto}.input-lg,.form-horizontal .form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-lg{height:46px;line-height:46px}textarea.input-lg,select[multiple].input-lg{height:auto}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:25px;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center}.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn,.form-inline .input-group .form-control{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .radio,.form-inline .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .radio label,.form-inline .checkbox label{padding-left:0}.form-inline .radio input[type=radio],.form-inline .checkbox input[type=checkbox]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .radio,.form-horizontal .checkbox{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{top:0;right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:14.3px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px}.btn:focus,.btn:active:focus,.btn.active:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus{color:#333;text-decoration:none}.btn:active,.btn.active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{pointer-events:none;cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default:hover,.btn-default:focus,.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled,.btn-default[disabled],fieldset[disabled] .btn-default,.btn-default.disabled:hover,.btn-default[disabled]:hover,fieldset[disabled] .btn-default:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,fieldset[disabled] .btn-default:focus,.btn-default.disabled:active,.btn-default[disabled]:active,fieldset[disabled] .btn-default:active,.btn-default.disabled.active,.btn-default[disabled].active,fieldset[disabled] .btn-default.active{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#428bca;border-color:#357ebd}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#3071a9;border-color:#285e8e}.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary[disabled],fieldset[disabled] .btn-primary,.btn-primary.disabled:hover,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary:hover,.btn-primary.disabled:focus,.btn-primary[disabled]:focus,fieldset[disabled] .btn-primary:focus,.btn-primary.disabled:active,.btn-primary[disabled]:active,fieldset[disabled] .btn-primary:active,.btn-primary.disabled.active,.btn-primary[disabled].active,fieldset[disabled] .btn-primary.active{background-color:#428bca;border-color:#357ebd}.btn-primary .badge{color:#428bca;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success[disabled],fieldset[disabled] .btn-success,.btn-success.disabled:hover,.btn-success[disabled]:hover,fieldset[disabled] .btn-success:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,fieldset[disabled] .btn-success:focus,.btn-success.disabled:active,.btn-success[disabled]:active,fieldset[disabled] .btn-success:active,.btn-success.disabled.active,.btn-success[disabled].active,fieldset[disabled] .btn-success.active{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled,.btn-info[disabled],fieldset[disabled] .btn-info,.btn-info.disabled:hover,.btn-info[disabled]:hover,fieldset[disabled] .btn-info:hover,.btn-info.disabled:focus,.btn-info[disabled]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled:active,.btn-info[disabled]:active,fieldset[disabled] .btn-info:active,.btn-info.disabled.active,.btn-info[disabled].active,fieldset[disabled] .btn-info.active{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-warning,.btn-warning.disabled:hover,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,fieldset[disabled] .btn-warning:focus,.btn-warning.disabled:active,.btn-warning[disabled]:active,fieldset[disabled] .btn-warning:active,.btn-warning.disabled.active,.btn-warning[disabled].active,fieldset[disabled] .btn-warning.active{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled,.btn-danger[disabled],fieldset[disabled] .btn-danger,.btn-danger.disabled:hover,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,fieldset[disabled] .btn-danger:focus,.btn-danger.disabled:active,.btn-danger[disabled]:active,fieldset[disabled] .btn-danger:active,.btn-danger.disabled.active,.btn-danger[disabled].active,fieldset[disabled] .btn-danger.active{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#428bca;cursor:pointer;border-radius:0}.btn-link,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#2a6496;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,fieldset[disabled] .btn-link:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:focus{color:#777;text-decoration:none}.btn-lg,.btn-group-lg>.btn{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.btn-sm,.btn-group-sm>.btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-xs,.btn-group-xs>.btn{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=submit].btn-block,input[type=reset].btn-block,input[type=button].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;-o-transition:height .35s ease;transition:height .35s ease}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;background-color:#428bca;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#777}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px solid}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;float:left}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover,.btn-group>.btn:focus,.btn-group-vertical>.btn:focus,.btn-group>.btn:active,.btn-group-vertical>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn.active{z-index:2}.btn-group>.btn:focus,.btn-group-vertical>.btn:focus{outline:0}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child>.btn:last-child,.btn-group>.btn-group:first-child>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn>input[type=radio],[data-toggle=buttons]>.btn>input[type=checkbox]{position:absolute;z-index:-1;filter:alpha(opacity=0);opacity:0}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn,select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn,select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn{height:auto}.input-group-addon,.input-group-btn,.input-group .form-control{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=radio],.input-group-addon input[type=checkbox]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group-btn:last-child>.btn-group:not(:last-child)>.btn{border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:first-child>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:hover,.input-group-btn>.btn:focus,.input-group-btn>.btn:active{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{background-color:#eee;border-color:#428bca}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:hover,.nav-tabs>li.active>a:focus{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{color:#fff;background-color:#428bca}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:340px}@media (max-width:480px) and (orientation:landscape){.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:200px}}.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030;-webkit-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}@media (min-width:768px){.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;height:50px;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu>li>a,.navbar-nav .open .dropdown-menu .dropdown-header{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:hover,.navbar-nav .open .dropdown-menu>li>a:focus{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}.navbar-nav.navbar-right:last-child{margin-right:-15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn,.navbar-form .input-group .form-control{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .radio,.navbar-form .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .radio label,.navbar-form .checkbox label{padding-left:0}.navbar-form .radio input[type=radio],.navbar-form .checkbox input[type=checkbox]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-form.navbar-right:last-child{margin-right:-15px}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}.navbar-text.navbar-right:last-child{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:hover,.navbar-default .navbar-nav>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:hover,.navbar-default .navbar-nav>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:hover,.navbar-default .navbar-nav>.disabled>a:focus{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:hover,.navbar-default .navbar-nav>.open>a:focus{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:hover,.navbar-default .btn-link:focus{color:#333}.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:hover,.navbar-default .btn-link[disabled]:focus,fieldset[disabled] .navbar-default .btn-link:focus{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#777}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#777}.navbar-inverse .navbar-nav>li>a{color:#777}.navbar-inverse .navbar-nav>li>a:hover,.navbar-inverse .navbar-nav>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:hover,.navbar-inverse .navbar-nav>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:hover,.navbar-inverse .navbar-nav>.disabled>a:focus{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:hover,.navbar-inverse .navbar-nav>.open>a:focus{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#777}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#777}.navbar-inverse .btn-link:hover,.navbar-inverse .btn-link:focus{color:#fff}.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:hover,.navbar-inverse .btn-link[disabled]:focus,fieldset[disabled] .navbar-inverse .btn-link:focus{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#428bca;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:hover,.pagination>li>span:hover,.pagination>li>a:focus,.pagination>li>span:focus{color:#2a6496;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>span,.pagination>.active>a:hover,.pagination>.active>span:hover,.pagination>.active>a:focus,.pagination>.active>span:focus{z-index:2;color:#fff;cursor:default;background-color:#428bca;border-color:#428bca}.pagination>.disabled>span,.pagination>.disabled>span:hover,.pagination>.disabled>span:focus,.pagination>.disabled>a,.pagination>.disabled>a:hover,.pagination>.disabled>a:focus{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:hover,a.label:focus{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:hover,.label-default[href]:focus{background-color:#5e5e5e}.label-primary{background-color:#428bca}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#3071a9}.label-success{background-color:#5cb85c}.label-success[href]:hover,.label-success[href]:focus{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:hover,.label-info[href]:focus{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:hover,.label-warning[href]:focus{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:hover,.label-danger[href]:focus{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-xs .badge{top:0;padding:1px 5px}a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}a.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#428bca;background-color:#fff}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron h1,.jumbotron .h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron{border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron{padding-right:60px;padding-left:60px}.jumbotron h1,.jumbotron .h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.thumbnail>img,.thumbnail a>img{margin-right:auto;margin-left:auto}a.thumbnail:hover,a.thumbnail:focus,a.thumbnail.active{border-color:#428bca}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#428bca;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-striped .progress-bar,.progress-bar-striped{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress.active .progress-bar,.progress-bar.active{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar[aria-valuenow="1"],.progress-bar[aria-valuenow="2"]{min-width:30px}.progress-bar[aria-valuenow="0"]{min-width:30px;color:#777;background-color:transparent;background-image:none;-webkit-box-shadow:none;box-shadow:none}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media,.media-body{overflow:hidden;zoom:1}.media,.media .media{margin-top:15px}.media:first-child{margin-top:0}.media-object{display:block}.media-heading{margin:0 0 5px}.media>.pull-left{margin-right:10px}.media>.pull-right{margin-left:10px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}a.list-group-item{color:#555}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item:hover,a.list-group-item:focus{color:#555;text-decoration:none;background-color:#f5f5f5}.list-group-item.disabled,.list-group-item.disabled:hover,.list-group-item.disabled:focus{color:#777;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{z-index:2;color:#fff;background-color:#428bca;border-color:#428bca}.list-group-item.active .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>.small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:hover .list-group-item-text,.list-group-item.active:focus .list-group-item-text{color:#e1edf7}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:hover,a.list-group-item-success:focus{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:hover,a.list-group-item-success.active:focus{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:hover,a.list-group-item-info:focus{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:hover,a.list-group-item-info.active:focus{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:hover,a.list-group-item-warning:focus{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:hover,a.list-group-item-warning.active:focus{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:hover,a.list-group-item-danger:focus{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:hover,a.list-group-item-danger.active:focus{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group{margin-bottom:0}.panel>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.table,.panel>.table-responsive>.table,.panel>.panel-collapse>.table{margin-bottom:0}.panel>.table:first-child,.panel>.table-responsive:first-child>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table:last-child,.panel>.table-responsive:last-child>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child th,.panel>.table>tbody:first-child>tr:first-child td{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#428bca}.panel-primary>.panel-heading{color:#fff;background-color:#428bca;border-color:#428bca}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#428bca}.panel-primary>.panel-heading .badge{color:#428bca;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#428bca}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive iframe,.embed-responsive embed,.embed-responsive object{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate3d(0,-25%,0);-o-transform:translate3d(0,-25%,0);transform:translate3d(0,-25%,0)}.modal.in .modal-dialog{-webkit-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{min-height:16.43px;padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-size:12px;line-height:1.4;visibility:visible;filter:alpha(opacity=0);opacity:0}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{bottom:0;left:5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{right:5px;bottom:0;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;left:5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;right:5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;text-align:left;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2)}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;font-weight:400;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{line-height:1}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:hover,.carousel-control:focus{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9}.carousel-control .icon-prev,.carousel-control .icon-next,.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right{position:absolute;top:50%;z-index:5;display:inline-block}.carousel-control .icon-prev,.carousel-control .glyphicon-chevron-left{left:50%;margin-left:-10px}.carousel-control .icon-next,.carousel-control .glyphicon-chevron-right{right:50%;margin-right:-10px}.carousel-control .icon-prev,.carousel-control .icon-next{width:20px;height:20px;margin-top:-10px;font-family:serif}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000 \9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-prev,.carousel-control .icon-next{width:30px;height:30px;margin-top:-15px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-15px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-15px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.clearfix:before,.clearfix:after,.dl-horizontal dd:before,.dl-horizontal dd:after,.container:before,.container:after,.container-fluid:before,.container-fluid:after,.row:before,.row:after,.form-horizontal .form-group:before,.form-horizontal .form-group:after,.btn-toolbar:before,.btn-toolbar:after,.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after,.nav:before,.nav:after,.navbar:before,.navbar:after,.navbar-header:before,.navbar-header:after,.navbar-collapse:before,.navbar-collapse:after,.pager:before,.pager:after,.panel-body:before,.panel-body:after,.modal-footer:before,.modal-footer:after{display:table;content:" "}.clearfix:after,.dl-horizontal dd:after,.container:after,.container-fluid:after,.row:after,.form-horizontal .form-group:after,.btn-toolbar:after,.btn-group-vertical>.btn-group:after,.nav:after,.navbar:after,.navbar-header:after,.navbar-collapse:after,.pager:after,.panel-body:after,.modal-footer:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important;visibility:hidden!important}.affix{position:fixed;-webkit-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}@-ms-viewport{width:device-width}.visible-xs,.visible-sm,.visible-md,.visible-lg{display:none!important}.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table}tr.visible-xs{display:table-row!important}th.visible-xs,td.visible-xs{display:table-cell!important}}@media (max-width:767px){.visible-xs-block{display:block!important}}@media (max-width:767px){.visible-xs-inline{display:inline!important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table}tr.visible-sm{display:table-row!important}th.visible-sm,td.visible-sm{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table}tr.visible-md{display:table-row!important}th.visible-md,td.visible-md{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table}tr.visible-lg{display:table-row!important}th.visible-lg,td.visible-lg{display:table-cell!important}}@media (min-width:1200px){.visible-lg-block{display:block!important}}@media (min-width:1200px){.visible-lg-inline{display:inline!important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table}tr.visible-print{display:table-row!important}th.visible-print,td.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}}</style>
11 <meta content="Mnemonic code for generating deterministic keys" name="description"/>
12 <meta content="width=device-width, initial-scale=1.0" name="viewport" />
13 <meta content="bitcoin mnemonic converter" name="description" />
b630f83d 14 <meta content="Ian Coleman" name="author" />
18f16009 15 <link type="image/x-icon" rel="icon" href="data:image/x-icon;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQEAYAAABPYyMiAAAABmJLR0T///////8JWPfcAAAACXBIWXMAAABIAAAASABGyWs+AAAAF0lEQVRIx2NgGAWjYBSMglEwCkbBSAcACBAAAeaR9cIAAAAASUVORK5CYII=" />
3af2954a 16
ab78acc6
IC
17 <style>
18 body {
19 padding-bottom: 32px;
20 }
21 .form-control[readonly] {
22 cursor: text;
23 }
24 .feedback-container {
25 position: fixed;
26 top: 0;
27 width: 100%;
28 text-align: center;
29 z-index: 4;
30 }
31 .feedback {
32 display: table;
33 padding: 0.5em 1em;
34 background-color: orange;
35 margin: 0 auto;
36 font-size: 2em;
37 color: #444;
38 border: 2px solid #555;
39 border-top: 0;
40 border-bottom-left-radius: 20px 20px;
41 border-bottom-right-radius: 20px 20px;
42 }
d5dc92fd
IC
43 .no-border {
44 border: 0;
45 box-shadow: inset 0 1px 1px rgba(0,0,0,.0);
46 -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.0);
47 }
0515eeec
IC
48 .phrase {
49 word-break: keep-all;
50 }
2a6dd137 51 .generate-container .strength {
b0818b31
IC
52 /* override mobile width from bootstrap */
53 width: auto!important;
54 display: inline-block;
55 }
ea87f1d3 56 .languages a {
0515eeec
IC
57 padding-left: 10px;
58 }
ea87f1d3
IC
59 .languages a:nth-of-type(1) {
60 margin-left: -12px;
61 padding-left: 0;
62 }
d737abf6
IC
63 .monospace {
64 font-family: monospace;
65 }
2a6dd137
IC
66 .entropy-container .filtered,
67 .entropy-container .binary {
68 word-wrap: break-word;
69 }
70 .entropy-container li {
71 padding-bottom: 5px;
72 }
73 .card-suit {
74 font-size: 19px;
75 line-height: 0;
76 }
77 .card-suit.club {
78 color: #009F00;
79 }
80 .card-suit.diamond {
81 color: #3D5DC4;
82 }
83 .card-suit.heart {
84 color: #F00;
85 }
86 .card-suit.spade {
87 color: #000;
88 }
e00964cc
IC
89 .qr-container {
90 position: fixed;
91 top: 0;
92 right: 0;
93 text-align: center;
94 background-color: #FFF;
95 border: 1px solid #CCC;
96 }
97 .qr-image {
98 margin: 5px;
99 }
52da415f
IC
100 .qr-hint,
101 .qr-warning {
e00964cc 102 padding: 2px;
52da415f
IC
103 max-width: 150px;
104 }
105 .more-info {
106 cursor: help;
107 border-bottom: 1px dashed #000;
108 text-decoration: none;
e00964cc 109 }
ab78acc6
IC
110 </style>
111 </head>
112 <body>
113 <div class="container">
3af2954a 114
ab78acc6
IC
115 <h1 class="text-center">Mnemonic Code Converter</h1>
116 <hr>
117 <div class="row">
118 <div class="col-md-12">
119 <h2>Mnemonic</h2>
120 <form class="form-horizontal" role="form">
ab78acc6 121 <div class="form-group">
c6624d51
IC
122 <div class="col-sm-2"></div>
123 <div class="col-sm-10">
ea87f1d3
IC
124 <p data-translate>You can enter an existing BIP39 mnemonic, or generate a new random one. Typing your own twelve words will probably not work how you expect, since the words require a particular structure (the last word is a checksum).</p>
125 <p data-translate-html>
126 For more info see the
127 <a href="https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki" target="_blank">BIP39 spec</a>.
128 </p>
c6624d51
IC
129 </div>
130 </div>
131 <div class="form-group generate-container">
b0818b31 132 <label class="col-sm-2 control-label"></label>
ab78acc6 133 <div class="col-sm-10">
b0818b31
IC
134 <div class="form-inline">
135 <div class="input-group-inline">
ea87f1d3 136 <span data-translate>Generate a random mnemonic, or enter your own below</span>:
b0818b31 137 <button class="btn generate">Generate</button>
b0818b31
IC
138 <select id="strength" class="strength form-control">
139 <option value="3">3</option>
140 <option value="6">6</option>
141 <option value="9">9</option>
142 <option value="12">12</option>
143 <option value="15" selected>15</option>
144 <option value="18">18</option>
145 <option value="21">21</option>
146 <option value="24">24</option>
147 </select>
ea87f1d3 148 <span data-translate>words</span>
b0818b31
IC
149 </div>
150 </div>
ab78acc6 151 </div>
0515eeec 152 </div>
c6624d51 153 <div class="entropy-container hidden">
2a6dd137 154 <div class="form-group text-danger">
ea87f1d3 155 <label class="col-sm-2 control-label" data-translate>Warning</label>
2a6dd137 156 <div class="col-sm-10 form-control-static">
ea87f1d3
IC
157 <span data-translate>Entropy is an advanced feature. Your mnemonic may be insecure if this feature is used incorrectly.</span>
158 <a href="#entropy-notes" data-translate>Read more</a>
18abe53b
IC
159 </div>
160 </div>
2a6dd137 161 <div class="form-group">
ea87f1d3 162 <label for="entropy" class="col-sm-2 control-label" data-translate>Entropy</label>
2a6dd137 163 <div class="col-sm-7">
ea87f1d3 164 <textarea id="entropy" rows="2" class="entropy form-control" placeholder="Accepts binary, base 6, 6-sided dice, base 10, hexadecimal, cards" data-translate-placeholder></textarea>
95f04905 165 <div class="row">
ea87f1d3 166 <label class="col-sm-3 control-label" data-translate>Strength</label>
95f04905 167 <div class="strength col-sm-3 form-control-static"></div>
ea87f1d3 168 <label class="col-sm-3 control-label" data-translate>Event Count</label>
95f04905
IC
169 <div class="event-count col-sm-3 form-control-static"></div>
170 </div>
171 <div class="row">
ea87f1d3 172 <label class="col-sm-3 control-label" data-translate>Entropy Type</label>
95f04905 173 <div class="type col-sm-3 form-control-static"></div>
ea87f1d3 174 <label class="col-sm-3 control-label" data-translate>Bits Per Event</label>
95f04905
IC
175 <div class="bits-per-event col-sm-3 form-control-static"></div>
176 </div>
177 <div class="row">
ea87f1d3 178 <label class="col-sm-3 control-label" data-translate>Word Count</label>
95f04905 179 <div class="word-count col-sm-3 form-control-static"></div>
52da415f 180 <label class="col-sm-3 control-label" data-translate><span class="more-info" data-translate-title title="Total bits of entropy may be less than indicated if any entropy event uses a weak source.">Total Bits</span></label>
95f04905
IC
181 <div class="bits col-sm-3 form-control-static"></div>
182 </div>
ea87f1d3 183 <label class="col-sm-3 control-label" data-translate>Filtered Entropy</label>
2a6dd137 184 <div class="filtered col-sm-9 form-control-static"></div>
ea87f1d3 185 <label class="col-sm-3 control-label" data-translate>Raw Binary</label>
2a6dd137 186 <div class="binary col-sm-9 form-control-static"></div>
ea87f1d3 187 <label class="col-sm-3 control-label" data-translate>Mnemonic Length</label>
2a6dd137 188 <div class="col-sm-9">
18abe53b 189 <select class="mnemonic-length form-control">
5ed50bd9 190 <option value="raw" selected data-translate>Use Raw Entropy (3 words per 32 bits)</option>
ea87f1d3 191 <option value="12">12 <span data-translate>Words</span></option>
5ed50bd9 192 <option value="15">15 <span data-translate>Words</option>
ea87f1d3
IC
193 <option value="18">18 <span data-translate>Words</span></option>
194 <option value="21">21 <span data-translate>Words</span></option>
195 <option value="24">24 <span data-translate>Words</span></option>
18abe53b 196 </select>
c6624d51 197 </div>
18abe53b 198 </div>
2a6dd137 199 <div class="col-sm-3">
ea87f1d3 200 <p data-translate>Valid entropy values include:</p>
2a6dd137 201 <ul>
ea87f1d3
IC
202 <li><strong data-translate>Binary</strong> [0-1]<br>101010011</li>
203 <li><strong data-translate>Base 6</strong> [0-5]<br>123434014</li>
204 <li><strong data-translate>Dice</strong> [1-6]<br>62535634</li>
205 <li><strong data-translate>Base 10</strong> [0-9]<br>90834528</li>
206 <li><strong data-translate>Hex</strong> [0-9A-F]<br>4187a8bfd9</li>
207 <li><strong data-translate>Card</strong> [A2-9TJQK][CDHS]<br>ahqs9dtc</li>
2a6dd137
IC
208 </ul>
209 </div>
c6624d51
IC
210 </div>
211 </div>
212 <div class="form-group">
213 <div class="col-sm-2"></div>
214 <div class="col-sm-10 checkbox">
215 <label>
216 <input type="checkbox" class="use-entropy">
ea87f1d3 217 <span data-translate>Supply my own source of entropy</span>
c6624d51
IC
218 </label>
219 </div>
220 </div>
221 <div class="form-group">
ea87f1d3 222 <label class="col-sm-2 control-label" data-translate>Mnemonic Language</label>
0515eeec 223 <div class="col-sm-10 languages">
ea87f1d3
IC
224 <div class="form-control no-border">
225 <a href="#english">English</a>
226 <a href="#japanese" title="Japanese">日本語</a>
227 <a href="#spanish" title="Spanish">Español</a>
228 <a href="#chinese_simplified" title="Chinese (Simplified)">中文(简体)</a>
229 <a href="#chinese_traditional" title="Chinese (Traditional)">中文(繁體)</a>
230 <a href="#french" title="French">Français</a>
231 <a href="#italian" title="Italian">Italiano</a>
232 </div>
0515eeec 233 </div>
ab78acc6
IC
234 </div>
235 <div class="form-group">
ea87f1d3 236 <label for="phrase" class="col-sm-2 control-label" data-translate>BIP39 Mnemonic</label>
ab78acc6 237 <div class="col-sm-10">
e00964cc 238 <textarea id="phrase" class="phrase form-control" data-show-qr></textarea>
ab78acc6
IC
239 </div>
240 </div>
241 <div class="form-group">
ea87f1d3 242 <label for="passphrase" class="col-sm-2 control-label" data-translate>BIP39 Passphrase (optional)</label>
ab78acc6
IC
243 <div class="col-sm-10">
244 <textarea id="passphrase" class="passphrase form-control"></textarea>
245 </div>
246 </div>
73161a92 247 <div class="form-group">
ea87f1d3 248 <label for="seed" class="col-sm-2 control-label" data-translate>BIP39 Seed</label>
73161a92 249 <div class="col-sm-10">
e00964cc 250 <textarea id="seed" class="seed form-control" readonly="readonly" data-show-qr></textarea>
73161a92
IC
251 </div>
252 </div>
ab78acc6 253 <div class="form-group">
ea87f1d3 254 <label for="network-phrase" class="col-sm-2 control-label" data-translate>Coin</label>
ab78acc6
IC
255 <div class="col-sm-10">
256 <select id="network-phrase" class="network form-control">
257 <!-- populated by javascript -->
258 </select>
259 </div>
260 </div>
261 <div class="form-group">
ea87f1d3 262 <label for="root-key" class="col-sm-2 control-label" data-translate>BIP32 Root Key</label>
ab78acc6 263 <div class="col-sm-10">
e00964cc 264 <textarea id="root-key" class="root-key form-control" data-show-qr></textarea>
ab78acc6
IC
265 </div>
266 </div>
267 </form>
268 </div>
269 </div>
3af2954a 270
ab78acc6 271 <hr>
3af2954a 272
ab78acc6
IC
273 <div class="row">
274 <div class="col-md-12">
275 <h2>Derivation Path</h2>
276 <ul class="derivation-type nav nav-tabs" role="tablist">
d5dc92fd 277 <li id="bip44-tab" class="active">
ab78acc6
IC
278 <a href="#bip44" role="tab" data-toggle="tab">BIP44</a>
279 </li>
280 <li id="bip32-tab">
281 <a href="#bip32" role="tab" data-toggle="tab">BIP32</a>
282 </li>
283 </ul>
284 <div class="derivation-type tab-content">
d5dc92fd 285 <div id="bip44" class="tab-pane active">
ab78acc6
IC
286 <form class="form-horizontal" role="form">
287 <br>
288 <div class="col-sm-2"></div>
289 <div class="col-sm-10">
ea87f1d3
IC
290 <p data-translate-html>
291 For more info see the
292 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target="_blank">BIP44 spec</a>.
293 </p>
ab78acc6
IC
294 </div>
295 <div class="form-group">
296 <label for="purpose" class="col-sm-2 control-label">
ea87f1d3 297 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#purpose" target="_blank" data-translate>Purpose</a>
ab78acc6
IC
298 </label>
299 <div class="col-sm-10">
300 <input id="purpose" type="text" class="purpose form-control" value="44">
301 </div>
302 </div>
303 <div class="form-group">
304 <label for="coin" class="col-sm-2 control-label">
ea87f1d3 305 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#registered-coin-types" target="_blank" data-translate>Coin</a>
ab78acc6
IC
306 </label>
307 <div class="col-sm-10">
308 <input id="coin" type="text" class="coin form-control" value="0">
309 </div>
310 </div>
311 <div class="form-group">
312 <label for="account" class="col-sm-2 control-label">
ea87f1d3 313 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#account" target="_blank" data-translate>Account</a>
ab78acc6
IC
314 </label>
315 <div class="col-sm-10">
316 <input id="account" type="text" class="account form-control" value="0">
317 </div>
318 </div>
319 <div class="form-group">
320 <label for="change" class="col-sm-2 control-label">
ea87f1d3 321 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#change" target="_blank" data-translate>External / Internal</a>
ab78acc6
IC
322 </label>
323 <div class="col-sm-10">
324 <input id="change" type="text" class="change form-control" value="0">
325 </div>
326 </div>
20083ab9
IC
327 <div class="form-group">
328 <label class="col-sm-2 control-label">
329 </label>
330 <div class="col-sm-10">
f3bfd2a5 331 <p data-translate>The account extended keys can be used for importing to most BIP44 compatible wallets, such as mycelium or electrum.</p>
20083ab9
IC
332 </div>
333 </div>
334 <div class="form-group">
335 <label for="account-xprv" class="col-sm-2 control-label">
336 <span data-translate>Account Extended Private Key</span>
337 </label>
338 <div class="col-sm-10">
339 <textarea id="account-xprv" type="text" class="account-xprv form-control" readonly data-show-qr></textarea>
340 </div>
341 </div>
342 <div class="form-group">
343 <label for="account-xpub" class="col-sm-2 control-label">
344 <span data-translate>Account Extended Public Key</span>
345 </label>
346 <div class="col-sm-10">
347 <textarea id="account-xpub" type="text" class="account-xpub form-control" readonly data-show-qr></textarea>
348 </div>
349 </div>
350 <div class="form-group">
351 <label class="col-sm-2 control-label">
352 </label>
353 <div class="col-sm-10">
354 <p data-translate>The BIP32 derivation path and extended keys are the basis for the derived addresses.</p>
355 </div>
356 </div>
ab78acc6 357 <div class="form-group">
ea87f1d3 358 <label for="bip44-path" class="col-sm-2 control-label" data-translate>BIP32 Derivation Path</label>
ab78acc6
IC
359 <div class="col-sm-10">
360 <input id="bip44-path" type="text" class="path form-control" value="m/44'/0'/0'/0" readonly="readonly">
361 </div>
362 </div>
363 </form>
364 </div>
365 <div id="bip32" class="tab-pane">
366 <form class="form-horizontal" role="form">
367 <br>
368 <div class="col-sm-2"></div>
369 <div class="col-sm-10">
ea87f1d3
IC
370 <p data-translate>
371 For more info see the
372 <a href="https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target="_blank">BIP32 spec</a>
373 </p>
ab78acc6 374 </div>
56530adc
IC
375 <div class="form-group">
376 <label for="bip32-client" class="col-sm-2 control-label" data-translate>Client</label>
377 <div class="col-sm-10">
378 <select id="bip32-client" class="client form-control">
379 <option value="custom">Custom derivation path</option>
380 <!-- populated by javascript -->
381 </select>
382 </div>
383 </div>
ab78acc6 384 <div class="form-group">
ea87f1d3 385 <label for="bip32-path" class="col-sm-2 control-label" data-translate>BIP32 Derivation Path</label>
ab78acc6
IC
386 <div class="col-sm-10">
387 <input id="bip32-path" type="text" class="path form-control" value="m/0">
388 </div>
389 </div>
1975bfbc
IC
390 <div class="form-group">
391 <div class="col-sm-2"></div>
392 <label class="col-sm-10">
393 <input class="hardened-addresses" type="checkbox">
ea87f1d3 394 <span data-translate>Use hardened addresses</span>
1975bfbc
IC
395 </label>
396 </div>
1975bfbc 397 <div class="form-group">
ea87f1d3 398 <label for="core-path" class="col-sm-2 control-label" data-translate>Bitcoin Core</label>
1975bfbc 399 <div class="col-sm-10">
ea87f1d3 400 <p class="form-control no-border" data-translate-html>
1975bfbc 401 Use path <code>m/0'/0'</code> with hardened addresses.
c866242d 402 </p>
ea87f1d3
IC
403 <p class="form-control no-border" data-translate-html>
404 For more info see the
405 <a href="https://github.com/bitcoin/bitcoin/pull/8035" target="_blank">Bitcoin Core BIP32 implementation</a>
1975bfbc
IC
406 </p>
407 </div>
408 </div>
56530adc
IC
409 <div class="form-group">
410 <label for="core-path" class="col-sm-2 control-label" data-translate>Multibit</label>
411 <div class="col-sm-10">
412 <p class="form-control no-border">
413 <span data-translate-html>Use path <code>m/0'/0</code>.</span>
414 </p>
415 <p class="form-control no-border">
416 <span data-translate>For more info see</span>
417 <a href="https://multibit.org/" target="_blank">MultiBit HD</a>
418 </p>
419 </div>
420 </div>
aa51da11 421 <div class="form-group">
ea87f1d3 422 <label class="col-sm-2 control-label" data-translate>Block Explorers</label>
aa51da11
IC
423 <div class="col-sm-10">
424 <p class="form-control no-border">
ea87f1d3
IC
425 <span data-translate-html>Use path <code>m/44'/0'/0'</code>.</span>
426 <span data-translate-html>Only enter the <code>xpub</code> extended key into block explorer search fields, never the <code>xprv</code> key.</span>
c866242d
IC
427 </p>
428 <p class="form-control no-border">
ea87f1d3
IC
429 <span data-translate>Can be used with</span>:
430 <a href="https://blockchain.info/" target="_blank">blockchain.info</a>
aa51da11
IC
431 </p>
432 </div>
433 </div>
ab78acc6
IC
434 </form>
435 </div>
436 </div>
437 <form class="form-horizontal" role="form">
438 <div class="form-group">
20083ab9 439 <label for="extended-priv-key" class="col-sm-2 control-label" data-translate>BIP32 Extended Private Key</label>
ab78acc6 440 <div class="col-sm-10">
e00964cc 441 <textarea id="extended-priv-key" class="extended-priv-key form-control" readonly="readonly" data-show-qr></textarea>
ab78acc6
IC
442 </div>
443 </div>
444 <div class="form-group">
20083ab9 445 <label for="extended-pub-key" class="col-sm-2 control-label" data-translate>BIP32 Extended Public Key</label>
ab78acc6 446 <div class="col-sm-10">
e00964cc 447 <textarea id="extended-pub-key" class="extended-pub-key form-control" readonly="readonly" data-show-qr></textarea>
ab78acc6
IC
448 </div>
449 </div>
450 </form>
451 </div>
452 </div>
3af2954a 453
ab78acc6 454 <hr>
3af2954a 455
ab78acc6
IC
456 <div class="row">
457 <div class="col-md-12">
458 <h2>Derived Addresses</h2>
ea87f1d3 459 <p data-translate>Note these addreses are derived from the BIP32 Extended Key</p>
ab78acc6
IC
460 <table class="table table-striped">
461 <thead>
462 <th>
463 <div class="input-group">
ea87f1d3
IC
464 <span data-translate>Path</span>&nbsp;&nbsp;
465 <button class="index-toggle" data-translate>Toggle</button>
ab78acc6
IC
466 </div>
467 </th>
468 <th>
469 <div class="input-group">
ea87f1d3
IC
470 <span data-translate>Address</span>&nbsp;&nbsp;
471 <button class="address-toggle" data-translate>Toggle</button>
ab78acc6
IC
472 </div>
473 </th>
1b12b2f5
IC
474 <th>
475 <div class="input-group">
ea87f1d3
IC
476 <span data-translate>Public Key</span>&nbsp;&nbsp;
477 <button class="public-key-toggle" data-translate>Toggle</button>
1b12b2f5
IC
478 </div>
479 </th>
ab78acc6
IC
480 <th>
481 <div class="input-group">
ea87f1d3
IC
482 <span data-translate>Private Key</span>&nbsp;&nbsp;
483 <button class="private-key-toggle" data-translate>Toggle</button>
ab78acc6
IC
484 </div>
485 </th>
486 </thead>
d737abf6 487 <tbody class="addresses monospace">
c866242d
IC
488 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
489 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
490 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
491 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
492 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
ab78acc6
IC
493 </tbody>
494 </table>
495 </div>
496 </div>
ea87f1d3 497 <span data-translate>Show more rows</span>:
ab78acc6 498 <input type="number" class="rows-to-add" value="20">
ea87f1d3 499 <button class="more" data-translate>Show</button>
3af2954a 500
ab78acc6 501 <hr>
3af2954a 502
ab78acc6
IC
503 <div class="row">
504 <div class="col-md-12">
ea87f1d3
IC
505 <h2 data-translate>More info</h2>
506 <h3>BIP39 <span class="small" data-translate>Mnemonic code for generating deterministic keys</span></h3>
507 <p data-translate-html>
ab78acc6
IC
508 Read more at the
509 <a href="https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki">official BIP39 spec</a>
510 </p>
ea87f1d3
IC
511 <h3>BIP32 <span class="small" data-translate>Hierarchical Deterministic Wallets</span></h3>
512 <p data-translate-html>
ab78acc6
IC
513 Read more at the
514 <a href="https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target="_blank">official BIP32 spec</a>
ea87f1d3
IC
515 </p>
516 <p data-translate-html>
517 See the demo at
ab78acc6
IC
518 <a href="http://bip32.org/" target="_blank">bip32.org</a>
519 </p>
ea87f1d3
IC
520 <h3>BIP44 <span class="small" data-translate>Multi-Account Hierarchy for Deterministic Wallets</span></h3>
521 <p data-translate-html>
ab78acc6
IC
522 Read more at the
523 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target="_blank">official BIP44 spec</a>
524 </p>
ea87f1d3 525 <h3 data-translate>Private Keys</h3>
ab78acc6 526 <p>
ea87f1d3
IC
527 <span data-translate-html>
528 Use private keys at
529 <a href="https://web.archive.org/web/20150707020924/https://brainwallet.org/" target="_blank">brainwallet.org</a>.
530 </span>
531 <span data-translate>Be careful - it can be easy to make mistakes if you don't know what you're doing.</span>
ab78acc6 532 </p>
ea87f1d3 533 <h3 id="entropy-notes" data-translate>Entropy</h3>
c6624d51 534 <p>
ea87f1d3
IC
535 <span data-translate-html>
536 Entropy values must be sourced from a
537 <a href="https://en.wikipedia.org/wiki/Random_number_generation" target="_blank">strong source of randomness</a>.
538 </span>
539 <span data-translate>This means flipping a fair coin, rolling a fair dice, noise measurements etc.</span>
540 <span data-translate-html>
541 Do <strong>NOT</strong> use phrases from books, lyrics from songs, your birthday or steet address,
542 keyboard mashing, or anything you <i>think</i> is random, because chances are overwhelming it isn't
543 random enough for the needs of this tool.
544 </span>
c6624d51 545 </p>
434caecd
IC
546 <p>
547 <strong><span data-translate>Do not store entropy.</span></strong>
548 </p>
549 <p>
550 <span data-translate>Storing entropy (such as keeping a deck of cards in a specific shuffled order) is unreliable compared to storing a mnemonic.</span>
551 <span data-translate>Instead of storing entropy, store the mnemonic generated from the entropy.</span>
552 <span data-translate-html><a href="https://en.wikipedia.org/wiki/Steganography#Physical" target="_blank">Steganography</a> may be beneficial when storing the mnemonic.</span>
553 </p>
c6624d51 554 <p>
ea87f1d3
IC
555 <span data-translate-html>
556 The random mnemonic generator on this page uses a
557 <a href="https://developer.mozilla.org/en-US/docs/Web/API/RandomSource/getRandomValues" target="_blank">cryptographically secure random number generator</a>.
558 </span>
559 <span data-translate>The built in random generator can generally be trusted more than your own intuition about randomness.</span>
560 <span data-translate>If cryptographic randomness isn't available in your browser, this page will show a warning and the generate button will not work.</span>
561 <span data-translate>In that case you might choose to use your own source of entropy.</span>
c6624d51
IC
562 </p>
563 <p>
ea87f1d3 564 <a href="https://bitcointalk.org/index.php?topic=311000.msg3345309#msg3345309" target="_blank" data-translate>You are not a good source of entropy.</a>
c6624d51 565 </p>
52da415f
IC
566 <h3 data-translate>License</h3>
567 <p>
568 <span data-translate-html>Please refer to <a href="https://github.com/iancoleman/bip39/blob/master/LICENSE" target="_blank">the software license</a> for more detail.
569 </span>
570 </p>
571 <p data-translate>The software is provided "as is", without warranty of any kind, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and noninfringement. In no event shall the authors or copyright holders be liable for any claim, damages or other liability, whether in an action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software.</p>
ab78acc6
IC
572 </div>
573 </div>
3af2954a 574
ab78acc6 575 <hr>
3af2954a 576
ab78acc6
IC
577 <div class="row">
578 <div class="col-md-12">
3af2954a 579
ea87f1d3 580 <h2 data-translate>Offline Usage</h2>
3af2954a 581
ea87f1d3 582 <p data-translate>
ab78acc6
IC
583 You can use this tool without having to be online.
584 </p>
ea87f1d3 585 <p data-translate>
ab78acc6
IC
586 In your browser, select file save-as, and save this page
587 as a file.
588 </p>
ea87f1d3 589 <p data-translate>
ab78acc6
IC
590 Double-click that file to open it in a browser
591 on any offline computer.
592 </p>
593 <p>
ea87f1d3
IC
594 <span data-translate>Alternatively, download the file from the repository</span>
595 -
596 <a href="https://github.com/iancoleman/bip39">https://github.com/iancoleman/bip39</a>
597 </p>
3af2954a 598
ab78acc6
IC
599 </div>
600 </div>
3af2954a 601
ab78acc6 602 <hr>
3af2954a 603
ab78acc6
IC
604 <div class="row">
605 <div class="col-md-12">
3af2954a 606
ea87f1d3 607 <h2 data-translate>This project is 100% open-source code</h2>
3af2954a 608
ab78acc6 609 <p>
ea87f1d3
IC
610 <span data-translate>Get the source code from the repository</span>
611 -
b630f83d
IC
612 <a href="https://github.com/iancoleman/bip39" target="_blank">
613 https://github.com/iancoleman/bip39
ab78acc6
IC
614 </a>
615 </p>
3af2954a 616
ea87f1d3 617 <h3 data-translate>Libraries</h3>
3af2954a 618
ab78acc6
IC
619 <p>
620 <span>BitcoinJS - </span>
621 <a href="https://github.com/bitcoinjs/bitcoinjs-lib" target="_blank">
622 https://github.com/bitcoinjs/bitcoinjs-lib
623 </a>
624 </p>
3af2954a 625
ab78acc6
IC
626 <p>
627 <span>jsBIP39 - </span>
628 <a href="https://github.com/iancoleman/jsbip39" target="_blank">
629 https://github.com/iancoleman/jsbip39
630 </a>
631 </p>
3af2954a 632
ab78acc6
IC
633 <p>
634 <span>sjcl - </span>
635 <a href="https://github.com/bitwiseshiftleft/sjcl" target="_blank">
636 https://github.com/bitwiseshiftleft/sjcl
637 </a>
638 </p>
3af2954a 639
ab78acc6
IC
640 <p>
641 <span>jQuery - </span>
642 <a href="https://jquery.com/" target="_blank">
643 https://jquery.com/
644 </a>
645 </p>
3af2954a 646
ab78acc6
IC
647 <p>
648 <span>Twitter Bootstrap - </span>
649 <a href="http://getbootstrap.com/" target="_blank">
650 http://getbootstrap.com/
651 </a>
652 </p>
3af2954a 653
ab78acc6
IC
654 </div>
655 </div>
3af2954a 656
ab78acc6 657 </div>
3af2954a 658
e00964cc 659 <div class="qr-container hidden">
52da415f
IC
660 <div class="qr-hint bg-primary hidden" data-translate>Click field to hide QR</div>
661 <div class="qr-hint bg-primary" data-translate>Click field to show QR</div>
662 <div class="qr-hider hidden">
663 <div class="qr-image"></div>
664 <div class="qr-warning bg-primary" data-translate>Caution: Scanner may keep history</div>
665 </div>
e00964cc
IC
666 </div>
667
ab78acc6
IC
668 <div class="feedback-container">
669 <div class="feedback">Loading...</div>
670 </div>
3af2954a 671
ab78acc6
IC
672 <script type="text/template" id="address-row-template">
673 <tr>
674 <td class="index"><span></span></td>
e00964cc
IC
675 <td class="address"><span data-show-qr></span></td>
676 <td class="pubkey"><span data-show-qr></span></td>
677 <td class="privkey"><span data-show-qr></span></td>
ab78acc6
IC
678 </tr>
679 </script>
8b095871
IC
680 <script>// From
681// https://raw.githubusercontent.com/inexorabletash/polyfill/a6bc6ced78160c994f76a909b6ff6bbbab3d43de/es6.js
682// Required for ethereumjs-utils.js when run in phantomjs-2.1.1
683// but is not required in any modern browsers.
684// For more information, see
685// https://www.bountysource.com/issues/38485709-error-rendering-plot-with-phantomjs
686
687//----------------------------------------------------------------------
688//
689// ECMAScript 2015 Polyfills
690//
691//----------------------------------------------------------------------
563e401a 692
8b095871
IC
693(function (global) {
694 "use strict";
695
696 // Set this to always override native implementations, for testing
697 // the polyfill in browsers with partial/full ES2015 support.
698 var OVERRIDE_NATIVE_FOR_TESTING = false;
699
700 var undefined = (void 0); // Paranoia
701
702 // Helpers
703
704 function strict(o) {
705 return o === global ? undefined : o;
706 }
707
708 function hook(o, p, f) {
709 var op = o[p];
710 console.assert(typeof op === 'function', 'Hooking a non-function');
711 o[p] = function() {
712 var o = strict(this);
713 var r = f.apply(o, arguments);
714 return r !== undefined ? r : op.apply(o, arguments);
715 };
716 }
717
718 function isSymbol(s) {
719 return (typeof s === 'symbol') || ('Symbol' in global && s instanceof global.Symbol);
720 }
721
722 function getPropertyDescriptor(target, name) {
723 var desc = Object.getOwnPropertyDescriptor(target, name);
724 var proto = Object.getPrototypeOf(target);
725 while (!desc && proto) {
726 desc = Object.getOwnPropertyDescriptor(proto, name);
727 proto = Object.getPrototypeOf(proto);
563e401a 728 }
8b095871
IC
729 return desc;
730 }
563e401a 731
8b095871
IC
732 var enqueue = (function(nativePromise, nativeSetImmediate) {
733 if (nativePromise)
734 return function(job) { nativePromise.resolve().then(function() { job(); }); };
735 if (nativeSetImmediate)
736 return function(job) { nativeSetImmediate(job); };
737 return function(job) { setTimeout(job, 0); };
738 }(global['Promise'], global['setImmediate']));
563e401a 739
8b095871
IC
740 function define(o, p, v, override) {
741 if (p in o && !override && !OVERRIDE_NATIVE_FOR_TESTING)
742 return;
743
744 if (typeof v === 'function') {
745 // Sanity check that functions are appropriately named (where possible)
746 console.assert(isSymbol(p) || !('name' in v) || v.name === p || v.name === p + '_', 'Expected function name "' + p.toString() + '", was "' + v.name + '"');
747 Object.defineProperty(o, p, {
748 value: v,
749 configurable: true,
750 enumerable: false,
751 writable: true
752 });
563e401a 753 } else {
8b095871
IC
754 Object.defineProperty(o, p, {
755 value: v,
756 configurable: false,
757 enumerable: false,
758 writable: false
759 });
563e401a 760 }
8b095871 761 }
563e401a 762
8b095871
IC
763 function set_internal(o, p, v) {
764 Object.defineProperty(o, p, {
765 value: v,
766 configurable: false,
767 enumerable: false,
768 writable: true
769 });
770 }
563e401a 771
8b095871
IC
772 // Snapshot intrinsic functions
773 var $isNaN = global.isNaN,
774 $parseInt = global.parseInt,
775 $parseFloat = global.parseFloat;
776
777 var E = Math.E,
778 LOG10E = Math.LOG10E,
779 LOG2E = Math.LOG2E,
780 abs = Math.abs,
781 ceil = Math.ceil,
782 exp = Math.exp,
783 floor = Math.floor,
784 log = Math.log,
785 max = Math.max,
786 min = Math.min,
787 pow = Math.pow,
788 random = Math.random,
789 sqrt = Math.sqrt;
790
791 var orig_match = String.prototype.match,
792 orig_replace = String.prototype.replace,
793 orig_search = String.prototype.search,
794 orig_split = String.prototype.split;
795
796 // These are used for implementing the polyfills, but not exported.
797
798 // Inspired by https://gist.github.com/1638059
799 /** @constructor */
800 function EphemeronTable() {
801 var secretKey = ObjectCreate(null);
802
803 function conceal(o) {
804 var oValueOf = o.valueOf, secrets = ObjectCreate(null);
805 Object.defineProperty(o, 'valueOf', {
806 value: (function(secretKey) {
807 return function (k) {
808 return (k === secretKey) ? secrets : oValueOf.apply(o, arguments);
809 };
810 }(secretKey)),
811 configurable: true,
812 writeable: true,
813 enumerable: false
814 });
815 return secrets;
816 }
563e401a 817
8b095871
IC
818 function reveal(o) {
819 var v = typeof o.valueOf === 'function' && o.valueOf(secretKey);
820 return v === o ? null : v;
821 }
822
823 return {
824 clear: function() {
825 secretKey = ObjectCreate(null);
826 },
827 remove: function(key) {
828 var secrets = reveal(key);
829 if (secrets && HasOwnProperty(secrets, 'value')) {
830 delete secrets.value;
831 return true;
832 }
833 return false;
834 },
835 get: function(key, defaultValue) {
836 var secrets = reveal(key);
837 return (secrets && HasOwnProperty(secrets, 'value')) ? secrets.value : defaultValue;
838 },
839 has: function(key) {
840 var secrets = reveal(key);
841 return Boolean(secrets && HasOwnProperty(secrets, 'value'));
842 },
843 set: function(key, value) {
844 var secrets = reveal(key) || conceal(key);
845 secrets.value = value;
563e401a 846 }
8b095871
IC
847 };
848 }
563e401a 849
8b095871 850 var empty = Object.create(null);
563e401a 851
8b095871
IC
852 //----------------------------------------------------------------------
853 //
854 // ECMAScript 2015
855 // http://www.ecma-international.org/ecma-262/6.0/
856 //
857 //----------------------------------------------------------------------
563e401a 858
8b095871
IC
859 // ---------------------------------------
860 // 19.4 Symbol Objects
861 // ---------------------------------------
563e401a 862
8b095871
IC
863 // NOTE: Symbols are defined here - out of spec order - since we need the
864 // properties and prototype to be populated for other polyfills.
563e401a 865
8b095871 866 // NOTE: Not secure, nor is obj[$$symbol] hidden from Object.keys()
563e401a 867
8b095871
IC
868 var symbolForKey;
869 (function() {
870 var secret = Object.create(null);
871 var symbolMap = {};
872 symbolForKey = function(k) {
873 return symbolMap[k];
874 };
563e401a 875
8b095871 876 var GlobalSymbolRegistry = [];
563e401a 877
8b095871
IC
878 function unique(bits) {
879 return Array(bits + 1).join('x').replace(/x/g, function() {
880 return random() < 0.5 ? '\u200C' : '\u200D'; // JWNJ / ZWJ
881 });
882 }
563e401a 883
8b095871
IC
884 // 19.4.1 The Symbol Constructor
885 // 19.4.1.1 Symbol ( description=undefined )
886 function Symbol(description) {
887 if (!(this instanceof Symbol)) return new Symbol(description, secret);
888 if (this instanceof Symbol && arguments[1] !== secret) throw TypeError();
563e401a 889
8b095871
IC
890 var descString = description === undefined ? undefined : String(description);
891
892 set_internal(this, '[[SymbolData]]', unique(128));
893 set_internal(this, '[[Description]]', descString);
894
895 symbolMap[this] = this;
896 return this;
897 }
898
899 if (!('Symbol' in global) || OVERRIDE_NATIVE_FOR_TESTING)
900 global.Symbol = Symbol;
901
902 // 19.4.2 Properties of the Symbol Constructor
903
904 // 19.4.2.1 Symbol.for (key)
905 define(Symbol, 'for', function for_(key) {
906 var stringKey = String(key);
907 for (var i = 0; i < GlobalSymbolRegistry.length; ++i) {
908 var e = GlobalSymbolRegistry[i];
909 if (SameValue(e['[[key]]'], stringKey)) return e['[[symbol]]'];
563e401a 910 }
8b095871
IC
911 var newSymbol = Symbol(key);
912 GlobalSymbolRegistry.push({'[[key]]': stringKey, '[[symbol]]': newSymbol});
913 return newSymbol;
914 });
563e401a 915
8b095871
IC
916 // 19.4.2.2 Symbol.hasInstance
917 // 19.4.2.3 Symbol.isConcatSpreadable
563e401a 918
8b095871
IC
919 // 19.4.2.4 Symbol.iterator
920 define(global.Symbol, 'iterator', global.Symbol('Symbol.iterator'));
563e401a 921
8b095871
IC
922 // 19.4.2.5 Symbol.keyFor (sym)
923 define(Symbol, 'keyFor', function keyFor(sym) {
924 if (!(sym instanceof Symbol)) throw TypeError();
925 for (var i = 0; i < GlobalSymbolRegistry.length; ++i) {
926 var e = GlobalSymbolRegistry[i];
927 if (SameValue(e['[[symbol]]'], sym)) return e['[[key]]'];
928 }
929 return undefined;
930 });
563e401a 931
8b095871
IC
932 // 19.4.2.6 Symbol.match
933 define(global.Symbol, 'match', global.Symbol('Symbol.match'));
563e401a 934
8b095871 935 // 19.4.2.7 Symbol.prototype
563e401a 936
8b095871
IC
937 // 19.4.2.8 Symbol.replace
938 define(global.Symbol, 'replace', global.Symbol('Symbol.replace'));
563e401a 939
8b095871
IC
940 // 19.4.2.9 Symbol.search
941 define(global.Symbol, 'search', global.Symbol('Symbol.search'));
563e401a 942
8b095871 943 // 19.4.2.10 Symbol.species
563e401a 944
8b095871
IC
945 // 19.4.2.11 Symbol.search
946 define(global.Symbol, 'split', global.Symbol('Symbol.split'));
563e401a 947
8b095871 948 // 19.4.2.12 Symbol.toPrimitive
563e401a 949
8b095871
IC
950 // 19.4.2.13 Symbol.toStringTag
951 define(global.Symbol, 'toStringTag', global.Symbol('Symbol.toStringTag'));
952
953 // 19.4.2.14 Symbol.unscopables
954
955 // 19.4.3 Properties of the Symbol Prototype Object
956 // 19.4.3.1 Symbol.prototype.constructor
957
958 // 19.4.3.2 Symbol.prototype.toString ( )
959 Object.defineProperty(Symbol.prototype, 'toString', {
960 value: function toString() {
961 var s = strict(this);
962 var desc = s['[[Description]]'];
963 return 'Symbol(' + (desc === undefined ? '' : desc) + s['[[SymbolData]]'] + ')';
964 },
965 configurable: true, writeable: true, enumerable: false });
966
967 // 19.4.3.3 Symbol.prototype.valueOf ( )
968 Object.defineProperty(Symbol.prototype, 'valueOf', {
969 value: function valueOf() {
970 // To prevent automatic string conversion:
971 throw TypeError();
972
973 // Spec has approximately the following:
974 //var s = strict(this);
975 //if (Type(s) === 'symbol') return s;
976 //if (Type(s) !== 'object') throw TypeError();
977 //if (!('[[SymbolData]]' in s)) throw TypeError();
978 //return s['[[SymbolData]]'];
979 },
980 configurable: true, writeable: true, enumerable: false });
981
982 // 19.4.3.4 Symbol.prototype [ @@toStringTag ]
983 // (Done later to polyfill partial implementations)
984
985 // 19.4.4 Properties of Symbol Instances
986 }());
987
988 console.assert(typeof global.Symbol() === 'symbol' || symbolForKey(String(global.Symbol('x'))));
989
990 // Defined here so that other prototypes can reference it
991 // 25.1.2 The %IteratorPrototype% Object
992 var $IteratorPrototype$ = {};
993
994 //----------------------------------------
995 // 6 ECMAScript Data Types and Values
996 //----------------------------------------
997
998 // 6.1 ECMAScript Language Types
999
1000 // "Type(x)" is used as shorthand for "the type of x"...
1001 function Type(v) {
1002 switch (typeof v) {
1003 case 'undefined': return 'undefined';
1004 case 'boolean': return 'boolean';
1005 case 'number': return 'number';
1006 case 'string': return 'string';
1007 case 'symbol': return 'symbol';
1008 default:
1009 if (v === null) return 'null';
1010 if (v instanceof global.Symbol) return 'symbol';
1011 return 'object';
563e401a 1012 }
8b095871 1013 }
563e401a 1014
8b095871
IC
1015 // 6.1.5.1 Well-Known Symbols
1016 var $$iterator = global.Symbol.iterator,
1017 $$match = global.Symbol.match,
1018 $$replace = global.Symbol.replace,
1019 $$search = global.Symbol.search,
1020 $$split = global.Symbol.split,
1021 $$toStringTag = global.Symbol.toStringTag;
563e401a 1022
8b095871
IC
1023 //----------------------------------------
1024 // 7 Abstract Operations
1025 //----------------------------------------
1026
1027 //----------------------------------------
1028 // 7.1 Type Conversion
1029 //----------------------------------------
1030
1031 // 7.1.1 ToPrimitive ( input [, PreferredType] )
1032 // just use valueOf()
1033
1034 // 7.1.2 ToBoolean ( argument )
1035 // just use Boolean()
1036
1037 // 7.1.3 ToNumber ( argument )
1038 // just use Number()
1039
1040 // 7.1.4 ToInteger ( argument )
1041 function ToInteger(n) {
1042 n = Number(n);
1043 if ($isNaN(n)) return 0;
1044 if (n === 0 || n === Infinity || n === -Infinity) return n;
1045 return ((n < 0) ? -1 : 1) * floor(abs(n));
563e401a 1046 }
8b095871
IC
1047
1048 // 7.1.5 ToInt32 ( argument )
1049 function ToInt32(v) { return v >> 0; }
1050
1051 // 7.1.6 ToUint32 ( argument )
1052 function ToUint32(v) { return v >>> 0; }
1053
1054 // 7.1.7 ToInt16 ( argument )
1055 function ToInt16(v) { return (v << 16) >> 16; }
1056
1057 // 7.1.8 ToUint16 ( argument )
1058 function ToUint16(v) { return v & 0xFFFF; }
1059
1060 // 7.1.9 ToInt8 ( argument )
1061 function ToInt8(v) { return (v << 24) >> 24; }
1062
1063 // 7.1.10 ToUint8 ( argument )
1064 function ToUint8(v) { return v & 0xFF; }
1065
1066 // 7.1.11 ToUint8Clamp ( argument )
1067 function ToUint8Clamp(argument) {
1068 var number = Number(argument);
1069 if ($isNaN(number)) return 0;
1070 if (number <= 0) return 0;
1071 if (number >= 255) return 255;
1072 var f = floor(number);
1073 if ((f + 0.5) < number) return f + 1;
1074 if (number < (f + 0.5)) return f;
1075 if (f % 2) return f + 1;
1076 return f;
563e401a 1077 }
8b095871
IC
1078
1079 // 7.1.12 ToString ( argument )
1080 // just use String()
1081
1082 // 7.1.13 ToObject ( argument )
1083 function ToObject(v) {
1084 if (v === null || v === undefined) throw TypeError();
1085 return Object(v);
563e401a 1086 }
563e401a 1087
8b095871
IC
1088 // 7.1.14 ToPropertyKey ( argument )
1089 function ToPropertyKey(v) {
1090 return String(v);
1091 }
3af2954a 1092
8b095871
IC
1093 // 7.1.15 ToLength ( argument )
1094 function ToLength(v) {
1095 var len = ToInteger(v);
1096 if (len <= 0) return 0;
1097 if (len === Infinity) return 0x20000000000000 - 1; // 2^53-1
1098 return min(len, 0x20000000000000 - 1); // 2^53-1
ab78acc6 1099 }
3af2954a 1100
8b095871 1101 // 7.1.16 CanonicalNumericIndexString ( argument )
3af2954a 1102
8b095871
IC
1103 //----------------------------------------
1104 // 7.2 Testing and Comparison Operations
1105 //----------------------------------------
3af2954a 1106
8b095871
IC
1107 // 7.2.1 RequireObjectCoercible ( argument )
1108 // 7.2.2 IsArray ( argument )
3af2954a 1109
8b095871
IC
1110 // 7.2.3 IsCallable ( argument )
1111 function IsCallable(o) { return typeof o === 'function'; }
3af2954a 1112
8b095871
IC
1113 // 7.2.4 IsConstructor ( argument )
1114 function IsConstructor(o) {
1115 // Hacks for Safari 7 TypedArray XXXConstructor objects
1116 if (/Constructor/.test(Object.prototype.toString.call(o))) return true;
1117 if (/Function/.test(Object.prototype.toString.call(o))) return true;
1118 // TODO: Can this be improved on?
1119 return typeof o === 'function';
3af2954a 1120 }
8b095871
IC
1121
1122 // 7.2.5 IsExtensible (O)
1123 // 7.2.6 IsInteger ( argument )
1124
1125 // 7.2.7 IsPropertyKey ( argument )
1126 function IsPropertyKey(argument) {
1127 if (Type(argument) === 'string') return true;
1128 if (Type(argument) === 'symbol') return true;
1129 return false;
3af2954a
IC
1130 }
1131
8b095871
IC
1132 // 7.2.8 IsRegExp ( argument )
1133 // 7.2.5 IsConstructor ( argument )
3af2954a 1134
8b095871
IC
1135 // 7.2.9 SameValue(x, y)
1136 function SameValue(x, y) {
1137 if (typeof x !== typeof y) return false;
1138 switch (typeof x) {
1139 case 'undefined':
1140 return true;
1141 case 'number':
1142 if (x !== x && y !== y) return true;
1143 if (x === 0 && y === 0) return 1/x === 1/y;
1144 return x === y;
1145 case 'boolean':
1146 case 'string':
1147 case 'object':
1148 default:
1149 return x === y;
1150 }
1151 }
3af2954a 1152
8b095871
IC
1153 // 7.2.10 SameValueZero(x, y)
1154 function SameValueZero(x, y) {
1155 if (typeof x !== typeof y) return false;
1156 switch (typeof x) {
1157 case 'undefined':
1158 return true;
1159 case 'number':
1160 if (x !== x && y !== y) return true;
1161 return x === y;
1162 case 'boolean':
1163 case 'string':
1164 case 'object':
1165 default:
1166 return x === y;
1167 }
1168 }
3af2954a 1169
8b095871
IC
1170 //----------------------------------------
1171 // 7.3 Operations on Objects
1172 //----------------------------------------
3af2954a 1173
8b095871
IC
1174 // 7.3.1 Get (O, P)
1175 // - just use o.p or o[p]
3af2954a 1176
8b095871
IC
1177 // 7.3.2 GetV (V, P)
1178 function GetV(v, p) {
1179 var o = ToObject(v);
1180 return o[p];
1181 }
3af2954a 1182
8b095871
IC
1183 // 7.3.3 Set (O, P, V, Throw)
1184 // - just use o.p = v or o[p] = v
3af2954a 1185
3af2954a 1186
3af2954a 1187
3af2954a 1188
8b095871
IC
1189 // 7.3.9 GetMethod (O, P)
1190 function GetMethod(o, p) {
1191 var func = GetV(o, p);
1192 if (func === undefined || func === null) return undefined;
1193 if (!IsCallable(func)) throw TypeError();
1194 return func;
ab78acc6 1195 }
8b095871
IC
1196
1197 // 7.3.10 HasProperty (O, P)
1198 function HasProperty(o, p) {
1199 while (o) {
1200 if (Object.prototype.hasOwnProperty.call(o, p)) return true;
1201 if (Type(o) !== 'object') return false;
1202 o = Object.getPrototypeOf(o);
ab78acc6 1203 }
8b095871 1204 return false;
ab78acc6 1205 }
8b095871
IC
1206
1207 // 7.3.11 HasOwnProperty (O, P)
1208 function HasOwnProperty(o, p) {
1209 return Object.prototype.hasOwnProperty.call(o, p);
ab78acc6 1210 }
3af2954a 1211
8b095871
IC
1212 //----------------------------------------
1213 // 7.4 Operations on Iterator Objects
1214 //----------------------------------------
3af2954a 1215
8b095871
IC
1216 // 7.4.1 GetIterator ( obj, method )
1217 function GetIterator(obj, method) {
1218 if (arguments.length < 2)
1219 method = GetMethod(obj, $$iterator);
1220 var iterator = method.call(obj);
1221 if (Type(iterator) !== 'object') throw TypeError();
1222 return iterator;
3af2954a
IC
1223 }
1224
8b095871
IC
1225 // 7.4.2 IteratorNext ( iterator, value )
1226 function IteratorNext(iterator, value) {
1227 if (arguments.length < 2)
1228 var result = iterator.next();
1229 else
1230 result = iterator.next(value);
1231 if (Type(result) !== 'object') throw TypeError();
1232 return result;
1233 }
3af2954a 1234
8b095871
IC
1235 // 7.4.3 IteratorComplete ( iterResult )
1236 function IteratorComplete(iterResult) {
1237 console.assert(Type(iterResult) === 'object');
1238 return Boolean(iterResult.done);
1239 }
3af2954a 1240
8b095871
IC
1241 // 7.4.4 IteratorValue ( iterResult )
1242 function IteratorValue(iterResult) {
1243 console.assert(Type(iterResult) === 'object');
1244 return iterResult.value;
1245 }
1246
1247 // 7.4.5 IteratorStep ( iterator )
1248 function IteratorStep( iterator, value ) {
1249 var result = IteratorNext(iterator, value);
1250 var done = result['done'];
1251 if (Boolean(done) === true) return false;
1252 return result;
1253 }
1254
1255 // 7.4.6 IteratorClose( iterator, completion )
1256 function IteratorClose( iterator, completion ) {
1257 console.assert(Type(iterator) === 'object');
1258 var _return = GetMethod(iterator, 'return');
1259 if (_return === undefined) return completion;
1260 try {
1261 var innerResult = _return[iterator]();
1262 } catch (result) {
1263 // TODO: If completion.[[type]] is throw, return completion
1264 return result;
1265 }
1266 if (Type(innerResult) !== 'object') throw TypeError();
1267 return completion;
1268 }
1269
1270 // 7.4.7 CreateIterResultObject (value, done)
1271 function CreateIterResultObject(value, done) {
1272 console.assert(Type(done) === 'boolean');
1273 var obj = {};
1274 obj["value"] = value;
1275 obj["done"] = done;
1276 return obj;
1277 }
1278
1279 // 7.4.8 CreateListIterator (list)
1280 // 7.4.8.1 ListIterator next( )
1281 // 7.4.9 CreateCompoundIterator ( iterator1, iterator2 )
1282 // 7.4.9.1 CompoundIterator next( )
1283
1284 //----------------------------------------
1285 // 8 Executable Code and Execution Contexts
1286 //----------------------------------------
1287
1288 //----------------------------------------
1289 // 8.4 Jobs and Job Queues
1290 //----------------------------------------
1291
1292 // 8.4.1 EnqueueJob ( queueName, job, arguments)
1293 function EnqueueJob(queueName, job, args) {
1294 var fn = function() { job.apply(undefined, args); };
1295 enqueue(fn);
1296 }
1297
1298 // 8.4.2 NextJob result
1299 function NextJob(result) {
1300 // no-op
1301 }
1302
1303 //----------------------------------------
1304 // 9 Ordinary and Exotic Objects Behaviors
1305 //----------------------------------------
1306
1307 // 9.1.11 [[Enumerate]] ()
1308 function Enumerate(obj) {
1309 var e = [];
1310 if (Object(obj) !== obj) return e;
1311 var visited = new Set;
1312 while (obj !== null) {
1313 Object.getOwnPropertyNames(obj).forEach(function(name) {
1314 if (!visited.has(name)) {
1315 var desc = Object.getOwnPropertyDescriptor(obj, name);
1316 if (desc) {
1317 visited.add(name);
1318 if (desc.enumerable) e.push(name);
1319 }
1320 }
1321 });
1322 obj = Object.getPrototypeOf(obj);
1323 }
1324 return e[$$iterator]();
1325 }
1326
1327 // 9.1.12 [[OwnPropertyKeys]] ( )
1328 function OwnPropertyKeys(o) {
1329 return Object.getOwnPropertyNames(o);
1330 }
1331
1332 // 9.1.13 ObjectCreate(proto, internalSlotsList)
1333 function ObjectCreate(proto, internalSlotsList) {
1334 return Object.create(proto, internalSlotsList);
1335 }
1336
1337 // ---------------------------------------
1338 // 19 Fundamental Objects
1339 // ---------------------------------------
1340
1341 // ---------------------------------------
1342 // 19.1 Object Objects
1343 // ---------------------------------------
1344
1345 // 19.1.1 The Object Constructor
1346 // 19.1.1.1 Object ( [ value ] )
1347 // 19.1.2 Properties of the Object Constructor
1348 // 19.1.2.1 Object.assign ( target, ...sources )
1349 define(
1350 Object, 'assign',
1351 function assign(target, /*...*/sources) {
1352 var to = ToObject(target);
1353 if (arguments.length < 2) return to;
1354
1355 var sourcesIndex = 1;
1356 while (sourcesIndex < arguments.length) {
1357 var nextSource = arguments[sourcesIndex++];
1358 if (nextSource === undefined || nextSource === null) {
1359 var keys = [];
1360 } else {
1361 var from = ToObject(nextSource);
1362 keys = OwnPropertyKeys(from);
1363 }
1364 for (var keysIndex = 0; keysIndex < keys.length; ++keysIndex) {
1365 var nextKey = keys[keysIndex];
1366 var desc = Object.getOwnPropertyDescriptor(from, nextKey);
1367 if (desc !== undefined && desc.enumerable) {
1368 var propValue = from[nextKey];
1369 to[nextKey] = propValue;
1370 }
1371 }
1372 }
1373 return to;
1374 });
1375
1376 // 19.1.2.2 Object.create ( O [ , Properties ] )
1377 // 19.1.2.3 Object.defineProperties ( O, Properties )
1378 // 19.1.2.4 Object.defineProperty ( O, P, Attributes )
1379 // 19.1.2.5 Object.freeze ( O )
1380 // 19.1.2.6 Object.getOwnPropertyDescriptor ( O, P )
1381
1382 (function() {
1383 var nativeSymbols = (typeof global.Symbol() === 'symbol'),
1384 $getOwnPropertyNames = Object.getOwnPropertyNames,
1385 $keys = Object.keys,
1386 $window_names = (typeof window === 'object' ? $getOwnPropertyNames(window) : []);
1387
1388 function isStringKey(k) { return !symbolForKey(k); }
1389
1390 // 19.1.2.7 Object.getOwnPropertyNames ( O )
1391 define(
1392 Object, 'getOwnPropertyNames',
1393 function getOwnPropertyNames(o) {
1394 if (Object.prototype.toString.call(o) === '[object Window]') {
1395 // Workaround for cross-realm calling by IE itself.
1396 // https://github.com/inexorabletash/polyfill/issues/96
1397 try {
1398 return $getOwnPropertyNames(o).filter(isStringKey);
1399 } catch (_) {
1400 return $window_names.slice();
1401 }
1402 }
1403 return $getOwnPropertyNames(o).filter(isStringKey);
1404 }, !nativeSymbols);
1405
1406 // 19.1.2.8 Object.getOwnPropertySymbols ( O )
1407 define(
1408 Object, 'getOwnPropertySymbols',
1409 function getOwnPropertySymbols(o) {
1410 return $getOwnPropertyNames(o).filter(symbolForKey).map(symbolForKey);
1411 }, !nativeSymbols);
1412
1413 // 19.1.2.14 Object.keys ( O )
1414 define(
1415 Object, 'keys',
1416 function keys(o) {
1417 return $keys(o).filter(isStringKey);
1418 }, !nativeSymbols);
1419 }());
1420
1421 // 19.1.2.9 Object.getPrototypeOf ( O )
1422 // 19.1.2.10 Object.is ( value1, value2 )
1423 define(
1424 Object, 'is',
1425 function is(value1, value2) {
1426 return SameValue(value1, value2);
1427 });
1428
1429 // 19.1.2.11 Object.isExtensible ( O )
1430 // 19.1.2.12 Object.isFrozen ( O )
1431 // 19.1.2.13 Object.isSealed ( O )
1432
1433 // 19.1.2.14 Object.keys ( O )
1434 // see above
1435
1436 // 19.1.2.15 Object.preventExtensions ( O )
1437 // 19.1.2.16 Object.prototype
1438 // 19.1.2.17 Object.seal ( O )
1439
1440 // 19.1.2.18 Object.setPrototypeOf ( O, proto )
1441 define(
1442 Object, 'setPrototypeOf',
1443 function setPrototypeOf(o, proto) {
1444 if (Type(o) !== 'object') throw TypeError();
1445 if (Type(proto) !== 'object' && Type(proto) !== 'null') throw TypeError();
1446 o.__proto__ = proto;
1447 return o;
1448 }
1449 );
1450
1451 // 19.1.3 Properties of the Object Prototype Object
1452 // 19.1.3.1 Object.prototype.constructor
1453 // 19.1.3.2 Object.prototype.hasOwnProperty ( V )
1454 // 19.1.3.3 Object.prototype.isPrototypeOf ( V )
1455 // 19.1.3.4 Object.prototype.propertyIsEnumerable ( V )
1456 // 19.1.3.5 Object.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )
1457 // 19.1.3.6 Object.prototype.toString ( )
1458 hook(Object.prototype, 'toString',
1459 function() {
1460 var o = strict(this);
1461 if (o === Object(o) && $$toStringTag in o) {
1462 return '[object ' + o[$$toStringTag] + ']';
1463 }
1464 return undefined;
1465 });
1466
1467 // 19.1.3.7 Object.prototype.valueOf ( )
1468 // 19.1.4 Properties of Object Instances
1469
1470 // ---------------------------------------
1471 // 19.2 Function Objects
1472 // ---------------------------------------
1473
1474 // 19.2.1 The Function Constructor
1475 // 19.2.1.1 Function ( p1, p2, … , pn, body )
1476 // 19.2.2 Properties of the Function Constructor
1477 // 19.2.2.1 Function.length
1478 // 19.2.2.2 Function.prototype
1479 // 19.2.3 Properties of the Function Prototype Object
1480 // 19.2.3.1 Function.prototype.apply ( thisArg, argArray )
1481 // 19.2.3.2 Function.prototype.bind ( thisArg , ...args)
1482 // 19.2.3.3 Function.prototype.call (thisArg , ...args)
1483 // 19.2.3.4 Function.prototype.constructor
1484 // 19.2.3.5 Function.prototype.toString ( )
1485 // 19.2.3.6 Function.prototype[@@hasInstance] ( V )
1486 // 19.2.4 Function Instances
1487 // 19.2.4.1 length
1488 // 19.2.4.2 name
1489 // 19.2.4.3 prototype
1490
1491 // (No polyfillable changes from ES5)
1492
1493 // ---------------------------------------
1494 // 19.3 Boolean Objects
1495 // ---------------------------------------
1496
1497 // 19.3.1 The Boolean Constructor
1498 // 19.3.1.1 Boolean ( value )
1499 // 19.3.2 Properties of the Boolean Constructor
1500 // 19.3.2.1 Boolean.prototype
1501 // 19.3.3 Properties of the Boolean Prototype Object
1502 // 19.3.3.1 Boolean.prototype.constructor
1503 // 19.3.3.2 Boolean.prototype.toString ( )
1504 // 19.3.3.3 Boolean.prototype.valueOf ( )
1505 // 19.3.4 Properties of Boolean Instances
1506
1507 // (No polyfillable changes from ES5)
1508
1509 // ---------------------------------------
1510 // 19.4 Symbol Objects
1511 // ---------------------------------------
1512
1513 // Moved earlier in this script, so that other polyfills can depend on them.
1514
1515 // 19.4.3.4 Symbol.prototype [ @@toStringTag ]
1516 define(global.Symbol.prototype, global.Symbol.toStringTag, 'Symbol');
1517
1518 // ---------------------------------------
1519 // 19.5 Error Objects
1520 // ---------------------------------------
1521
1522 // 19.5.1 The Error Constructor
1523 // 19.5.1.1 Error ( message )
1524 // 19.5.1.2 new Error( ...argumentsList )
1525 // 19.5.2 Properties of the Error Constructor
1526 // 19.5.2.1 Error.prototype
1527 // 19.5.3 Properties of the Error Prototype Object
1528 // 19.5.3.1 Error.prototype.constructor
1529 // 19.5.3.2 Error.prototype.message
1530 // 19.5.3.3 Error.prototype.name
1531 // 19.5.3.4 Error.prototype.toString ( )
1532 // 19.5.4 Properties of Error Instances
1533 // 19.5.5 Native Error Types Used in This Standard
1534 // 19.5.5.1 EvalError
1535 // 19.5.5.2 RangeError
1536 // 19.5.5.3 ReferenceError
1537 // 19.5.5.4 SyntaxError
1538 // 19.5.5.5 TypeError
1539 // 19.5.5.6 URIError
1540 // 19.5.6 NativeError Object Structure
1541 // 19.5.6.1 NativeError Constructors
1542 // 19.5.6.1.1 NativeError ( message )
1543 // 19.5.6.1.2 new NativeError ( ...argumentsList )
1544 // 19.5.6.2 Properties of the NativeError Constructors
1545 // 19.5.6.2.1 NativeError.prototype
1546 // 19.5.6.3 Properties of the NativeError Prototype Objects
1547 // 19.5.6.4 Properties of NativeError Instances
1548
1549 // (No polyfillable changes from ES5)
1550
1551 // ---------------------------------------
1552 // 20 Numbers and Dates
1553 // ---------------------------------------
1554
1555 // ---------------------------------------
1556 // 20.1 Number Objects
1557 // ---------------------------------------
1558
1559 // 20.1.1 The Number Constructor
1560 // 20.1.1.1 Number ( [ value ] )
1561 // 20.1.1.2 new Number ( ...argumentsList )
1562 // 20.1.2 Properties of the Number Constructor
1563
1564 // 20.1.2.1 Number.EPSILON
1565 define(
1566 Number, 'EPSILON',
1567 (function () {
1568 var next, result;
1569 for (next = 1; 1 + next !== 1; next = next / 2)
1570 result = next;
1571 return result;
1572 }()));
1573
1574 // 20.1.2.2 Number.isFinite ( number )
1575 define(
1576 Number, 'isFinite',
1577 function isFinite(number) {
1578 if (Type(number) !== 'number') return false;
1579 if (number !== number || number === +Infinity || number === -Infinity) return false;
1580 return true;
1581 });
1582
1583 // 20.1.2.3 Number.isInteger ( number )
1584 define(
1585 Number, 'isInteger',
1586 function isInteger(number) {
1587 if (Type(number) !== 'number') return false;
1588 if (number !== number || number === +Infinity || number === -Infinity) return false;
1589 var integer = ToInteger(number);
1590 if (integer !== number) return false;
1591 return true;
1592 });
1593
1594 // 20.1.2.4 Number.isNaN ( number )
1595 define(
1596 Number, 'isNaN',
1597 function isNaN(number) {
1598 if (Type(number) !== 'number') return false;
1599 if (number !== number) return true;
1600 return false;
1601 });
1602
1603 // 20.1.2.5 Number.isSafeInteger ( number )
1604 define(
1605 Number, 'isSafeInteger',
1606 function isSafeInteger(number) {
1607 if (Type(number) !== 'number') return false;
1608 if (number !== number || number === +Infinity || number === -Infinity) return false;
1609 var integer = ToInteger(number);
1610 if (integer !== number) return false;
1611 if (abs(integer) <= (0x20000000000000 - 1)) // 2^53-1
1612 return true;
1613 return false;
1614 });
1615
1616 // 20.1.2.6 Number.MAX_SAFE_INTEGER
1617 define(
1618 Number, 'MAX_SAFE_INTEGER',
1619 9007199254740991); // 2^53-1
1620
1621 // 20.1.2.7 Number.MAX_VALUE
1622
1623 // 20.1.2.8 Number.MIN_SAFE_INTEGER
1624 define(
1625 Number, 'MIN_SAFE_INTEGER',
1626 -9007199254740991); // -2^53+1
1627
1628 // 20.1.2.9 Number.MIN_VALUE
1629 // 20.1.2.10 Number.NaN
1630 // 20.1.2.11 Number.NEGATIVE_INFINITY
1631
1632 // 20.1.2.12 Number.parseFloat ( string )
1633 define(Number, 'parseFloat', $parseFloat);
1634
1635 // 20.1.2.13 Number.parseInt ( string, radix )
1636 define(Number, 'parseInt', $parseInt);
1637
1638 // 20.1.2.14 Number.POSITIVE_INFINITY
1639 // 20.1.2.15 Number.prototype
1640
1641 // 20.1.3 Properties of the Number Prototype Object
1642 // 20.1.3.1 Number.prototype.constructor
1643 // 20.1.3.2 Number.prototype.toExponential ( fractionDigits )
1644 // 20.1.3.3 Number.prototype.toFixed ( fractionDigits )
1645 // 20.1.3.4 Number.prototype.toLocaleString( [ reserved1 [ , reserved2 ] ])
1646 // 20.1.3.5 Number.prototype.toPrecision ( precision )
1647 // 20.1.3.6 Number.prototype.toString ( [ radix ] )
1648 // 20.1.3.7 Number.prototype.valueOf ( )
1649 // 20.1.4 Properties of Number Instances
1650
1651 // ---------------------------------------
1652 // 20.2 The Math Object
1653 // ---------------------------------------
1654
1655 // 20.2.1 Value Properties of the Math Object
1656 // 20.2.1.1 Math.E
1657 // 20.2.1.2 Math.LN10
1658 // 20.2.1.3 Math.LN2
1659 // 20.2.1.4 Math.LOG10E
1660 // 20.2.1.5 Math.LOG2E
1661 // 20.2.1.6 Math.PI
1662 // 20.2.1.7 Math.SQRT1_2
1663 // 20.2.1.8 Math.SQRT2
1664
1665 // 20.2.1.9 Math [ @@toStringTag ]
1666 define(Math, $$toStringTag, 'Math');
1667
1668 // 20.2.2 Function Properties of the Math Object
1669 // 20.2.2.1 Math.abs ( x )
1670 // 20.2.2.2 Math.acos ( x )
1671
1672 // 20.2.2.3 Math.acosh(x)
1673 define(
1674 Math, 'acosh',
1675 function acosh(x) {
1676 x = Number(x);
1677 return log(x + sqrt(x * x - 1));
1678 });
1679
1680 // 20.2.2.4 Math.asin ( x )
1681
1682 // 20.2.2.5 Math.asinh( x )
1683 define(
1684 Math, 'asinh',
1685 function asinh(x) {
1686 x = Number(x);
1687 if (SameValue(x, -0)) {
1688 return x;
1689 }
1690 var s = sqrt(x * x + 1);
1691 return (s === -x) ? log(0) : log(x + s);
1692 });
1693
1694 // 20.2.2.6 Math.atan ( x )
1695
1696 // 20.2.2.7 Math.atanh( x )
1697 define(
1698 Math, 'atanh',
1699 function atanh(x) {
1700 x = Number(x);
1701 return (x === 0) ? x : log((1 + x) / (1 - x)) / 2;
1702 });
1703
1704 // 20.2.2.8 Math.atan2 ( y, x )
1705
1706 // 20.2.2.9 Math.cbrt ( x )
1707 define(
1708 Math, 'cbrt',
1709 function cbrt(x) {
1710 x = Number(x);
1711 if ($isNaN(x/x)) {
1712 return x;
1713 }
1714 var r = pow(abs(x), 1/3);
1715 var t = x/r/r;
1716 return r + (r * (t-r) / (2*r + t));
1717 });
1718
1719 // 20.2.2.10 Math.ceil ( x )
1720
1721 // 20.2.2.11 Math.clz32 ( x )
1722 define(
1723 Math, 'clz32',
1724 function clz32(x) {
1725 function clz8(x) {
1726 return (x & 0xf0) ? (x & 0x80 ? 0 : x & 0x40 ? 1 : x & 0x20 ? 2 : 3) :
1727 (x & 0x08 ? 4 : x & 0x04 ? 5 : x & 0x02 ? 6 : x & 0x01 ? 7 : 8);
1728 }
1729 x = ToUint32(x);
1730 return x & 0xff000000 ? clz8(x >> 24) :
1731 x & 0xff0000 ? clz8(x >> 16) + 8 :
1732 x & 0xff00 ? clz8(x >> 8) + 16 : clz8(x) + 24;
1733 });
1734
1735
1736
1737 // 20.2.2.12 Math.cos ( x )
1738
1739 // 20.2.2.13 Math.cosh ( x )
1740 define(
1741 Math, 'cosh',
1742 function cosh(x) {
1743 x = Number(x);
1744 return (pow(E, x) + pow(E, -x)) / 2;
1745 });
1746
1747 // 20.2.2.14 Math.exp ( x )
1748
1749 // 20.2.2.15 Math.expm1 ( x )
1750 define(
1751 Math, 'expm1',
1752 function expm1(x) {
1753 x = Number(x);
1754 // from: http://www.johndcook.com/cpp_log1p.html
1755 if (SameValue(x, -0)) {
1756 return -0;
1757 } else if (abs(x) < 1e-5) {
1758 return x + 0.5 * x * x; // two terms of Taylor expansion
1759 } else {
1760 return exp(x) - 1;
1761 }
1762 });
1763
1764 // 20.2.2.16 Math.floor ( x )
1765
1766 // 20.2.2.17 Math.fround ( x )
1767 define(
1768 Math, 'fround',
1769 function fround(x) {
1770 if ($isNaN(x)) {
1771 return NaN;
1772 }
1773 if (1/x === +Infinity || 1/x === -Infinity || x === +Infinity || x === -Infinity) {
1774 return x;
1775 }
1776 return (new Float32Array([x]))[0];
1777 });
1778
1779 // 20.2.2.18 Math.hypot ( value1 [, value2 [ ... ] ] )
1780 define(
1781 Math, 'hypot',
1782 function hypot() {
1783 var values = [];
1784 var m = 0, sawNaN = false;
1785 for (var i = 0; i < arguments.length; ++i) {
1786 var n = abs(Number(arguments[i]));
1787 if (n === Infinity) return n;
1788 if (n !== n) sawNaN = true;
1789 if (n > m) m = n;
1790 values[i] = n;
1791 }
1792 if (sawNaN) return NaN;
1793 if (m === 0) return +0;
1794 var sum = +0;
1795 for (i = 0; i < values.length; ++i) {
1796 var r = values[i] / m;
1797 sum = sum + r * r;
1798 }
1799 return m * sqrt(sum);
1800 });
1801
1802 // 20.2.2.19 Math.imul ( x, y )
1803 define(
1804 Math, 'imul',
1805 function imul(x, y) {
1806 var a = ToUint32(x);
1807 var b = ToUint32(y);
1808 // (slow but accurate)
1809 var ah = (a >>> 16) & 0xffff;
1810 var al = a & 0xffff;
1811 var bh = (b >>> 16) & 0xffff;
1812 var bl = b & 0xffff;
1813 return ((al * bl) + (((ah * bl + al * bh) << 16) >>> 0)|0);
1814 }, ('imul' in Math && Math.imul(1, 0x80000000) === 0) // Safari 7 bug
1815 );
1816
1817 // 20.2.2.20 Math.log ( x )
1818
1819 // 20.2.2.21 Math.log1p ( x )
1820 define(
1821 Math, 'log1p',
1822 function log1p(x) {
1823 x = Number(x);
1824 // from: http://www.johndcook.com/cpp_expm1.html
1825 if (x < -1) {
1826 return NaN;
1827 } else if (SameValue(x, -0)) {
1828 return -0;
1829 } else if (abs(x) > 1e-4) {
1830 return log(1 + x);
1831 } else {
1832 return (-0.5 * x + 1) * x;
1833 }
1834 });
1835
1836 // 20.2.2.22 Math.log10 ( x )
1837 define(
1838 Math, 'log10',
1839 function log10(x) {
1840 x = Number(x);
1841 return log(x) * LOG10E;
1842 });
1843
1844 // 20.2.2.23 Math.log2 ( x )
1845 define(
1846 Math, 'log2',
1847 function log2(x) {
1848 x = Number(x);
1849 return log(x) * LOG2E;
1850 });
1851
1852 // 20.2.2.24 Math.max ( value1, value2 , ...values )
1853 // 20.2.2.25 Math.min ( value1, value2 , ...values )
1854 // 20.2.2.26 Math.pow ( x, y )
1855 // 20.2.2.27 Math.random ( )
1856 // 20.2.2.28 Math.round ( x )
1857
1858 // 20.2.2.29 Math.sign(x)
1859 define(
1860 Math, 'sign',
1861 function sign(x) {
1862 x = Number(x);
1863 return x < 0 ? -1 : x > 0 ? 1 : x;
1864 });
1865
1866 // 20.2.2.30 Math.sin ( x )
1867
1868 // 20.2.2.31 Math.sinh( x )
1869 define(
1870 Math, 'sinh',
1871 function sinh(x) {
1872 x = Number(x);
1873 return SameValue(x, -0) ? x : (pow(E, x) - pow(E, -x)) / 2;
1874 });
1875
1876 // 20.2.2.32 Math.sqrt ( x )
1877 // 20.2.2.33 Math.tan ( x )
1878
1879 // 20.2.2.34 Math.tanh ( x )
1880 define(
1881 Math, 'tanh',
1882 function tanh(x) {
1883 x = Number(x);
1884 var n = pow(E, 2 * x) - 1,
1885 d = pow(E, 2 * x) + 1;
1886 if (SameValue(x, -0))
1887 return x;
1888 return (n === d) ? 1 : n / d; // Handle Infinity/Infinity
1889 });
1890
1891 // 20.2.2.35 Math.trunc ( x )
1892 define(
1893 Math, 'trunc',
1894 function trunc(x) {
1895 x = Number(x);
1896 return $isNaN(x) ? NaN :
1897 x < 0 ? ceil(x) : floor(x);
1898 });
1899
1900 // ---------------------------------------
1901 // 20.3 Date Objects
1902 // ---------------------------------------
1903
1904 // 20.3.1 Overview of Date Objects and Definitions of Abstract Operations
1905 // 20.3.1.1 Time Values and Time Range
1906 // 20.3.1.2 Day Number and Time within Day
1907 // 20.3.1.3 Year Number
1908 // 20.3.1.4 Month Number
1909 // 20.3.1.5 Date Number
1910 // 20.3.1.6 Week Day
1911 // 20.3.1.7 Local Time Zone Adjustment
1912 // 20.3.1.8 Daylight Saving Time Adjustment
1913 // 20.3.1.9 Local Time
1914 // 20.3.1.10 Hours, Minutes, Second, and Milliseconds
1915 // 20.3.1.11 MakeTime (hour, min, sec, ms)
1916 // 20.3.1.12 MakeDay (year, month, date)
1917 // 20.3.1.13 MakeDate (day, time)
1918 // 20.3.1.14 TimeClip (time)
1919 // 20.3.1.15 Date Time String Format
1920 // 20.3.1.15.1 Extended years
1921 // 20.3.2 The Date Constructor
1922 // 20.3.2.1 Date ( year, month [, date [ , hours [ , minutes [ , seconds [ , ms ] ] ] ] ] )
1923 // 20.3.2.2 Date ( value )
1924 // 20.3.2.3 Date ( )
1925 // 20.3.3 Properties of the Date Constructor
1926 // 20.3.3.1 Date.now ( )
1927 // 20.3.3.2 Date.parse (string)
1928 // 20.3.3.3 Date.prototype
1929 // 20.3.3.4 Date.UTC ( year, month [ , date [ , hours [ , minutes [ , seconds [ , ms ] ] ] ] ] )
1930 // 20.3.4 Properties of the Date Prototype Object
1931 // 20.3.4.1 Date.prototype.constructor
1932 // 20.3.4.2 Date.prototype.getDate ( )
1933 // 20.3.4.3 Date.prototype.getDay ( )
1934 // 20.3.4.4 Date.prototype.getFullYear ( )
1935 // 20.3.4.5 Date.prototype.getHours ( )
1936 // 20.3.4.6 Date.prototype.getMilliseconds ( )
1937 // 20.3.4.7 Date.prototype.getMinutes ( )
1938 // 20.3.4.8 Date.prototype.getMonth ( )
1939 // 20.3.4.9 Date.prototype.getSeconds ( )
1940 // 20.3.4.10 Date.prototype.getTime ( )
1941 // 20.3.4.11 Date.prototype.getTimezoneOffset ( )
1942 // 20.3.4.12 Date.prototype.getUTCDate ( )
1943 // 20.3.4.13 Date.prototype.getUTCDay ( )
1944 // 20.3.4.14 Date.prototype.getUTCFullYear ( )
1945 // 20.3.4.15 Date.prototype.getUTCHours ( )
1946 // 20.3.4.16 Date.prototype.getUTCMilliseconds ( )
1947 // 20.3.4.17 Date.prototype.getUTCMinutes ( )
1948 // 20.3.4.18 Date.prototype.getUTCMonth ( )
1949 // 20.3.4.19 Date.prototype.getUTCSeconds ( )
1950 // 20.3.4.20 Date.prototype.setDate ( date )
1951 // 20.3.4.21 Date.prototype.setFullYear ( year [ , month [ , date ] ] )
1952 // 20.3.4.22 Date.prototype.setHours ( hour [ , min [ , sec [ , ms ] ] ] )
1953 // 20.3.4.23 Date.prototype.setMilliseconds ( ms )
1954 // 20.3.4.24 Date.prototype.setMinutes ( min [ , sec [ , ms ] ] )
1955 // 20.3.4.25 Date.prototype.setMonth ( month [ , date ] )
1956 // 20.3.4.26 Date.prototype.setSeconds ( sec [ , ms ] )
1957 // 20.3.4.27 Date.prototype.setTime ( time )
1958 // 20.3.4.28 Date.prototype.setUTCDate ( date )
1959 // 20.3.4.29 Date.prototype.setUTCFullYear ( year [ , month [ , date ] ] )
1960 // 20.3.4.30 Date.prototype.setUTCHours ( hour [ , min [ , sec [ , ms ] ] ] )
1961 // 20.3.4.31 Date.prototype.setUTCMilliseconds ( ms )
1962 // 20.3.4.32 Date.prototype.setUTCMinutes ( min [ , sec [, ms ] ] )
1963 // 20.3.4.33 Date.prototype.setUTCMonth ( month [ , date ] )
1964 // 20.3.4.34 Date.prototype.setUTCSeconds ( sec [ , ms ] )
1965 // 20.3.4.35 Date.prototype.toDateString ( )
1966 // 20.3.4.36 Date.prototype.toISOString ( )
1967 // 20.3.4.37 Date.prototype.toJSON ( key )
1968 // 20.3.4.38 Date.prototype.toLocaleDateString ( [ reserved1 [ , reserved2 ] ] )
1969 // 20.3.4.39 Date.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )
1970 // 20.3.4.40 Date.prototype.toLocaleTimeString ( [ reserved1 [ , reserved2 ] ] )
1971 // 20.3.4.41 Date.prototype.toString ( )
1972 // 20.3.4.42 Date.prototype.toTimeString ( )
1973 // 20.3.4.43 Date.prototype.toUTCString ( )
1974 // 20.3.4.44 Date.prototype.valueOf ( )
1975 // 20.3.4.45 Date.prototype [ @@toPrimitive ] ( hint )
1976 // 20.3.5 Properties of Date Instances
1977
1978 // (No polyfillable changes from ES5)
1979
1980 // ---------------------------------------
1981 // 21 Text Processing
1982 // ---------------------------------------
1983
1984 var string_regexp_dispatch = (function() {
1985 var faux = {}, secret = Symbol();
1986 faux[Symbol.match] = function() { return secret; };
1987 return ("").match(faux) === secret;
1988 }());
1989
1990 // 21.1 String Objects
1991 // 21.1.1 The String Constructor
1992 // 21.1.1.1 String ( value )
1993 // 21.1.2 Properties of the String Constructor
1994 // 21.1.2.1 String.fromCharCode ( ...codeUnits )
1995
1996 // 21.1.2.2 String.fromCodePoint ( ...codePoints )
1997 define(
1998 String, 'fromCodePoint',
1999 function fromCodePoint(/*...codePoints*/) {
2000 var codePoints = arguments,
2001 length = codePoints.length,
2002 elements = [],
2003 nextIndex = 0;
2004 while (nextIndex < length) {
2005 var next = codePoints[nextIndex];
2006 var nextCP = Number(next);
2007 if (!SameValue(nextCP, ToInteger(nextCP)) ||
2008 nextCP < 0 || nextCP > 0x10FFFF) {
2009 throw RangeError('Invalid code point ' + nextCP);
2010 }
2011 if (nextCP < 0x10000) {
2012 elements.push(String.fromCharCode(nextCP));
2013 } else {
2014 nextCP -= 0x10000;
2015 elements.push(String.fromCharCode((nextCP >> 10) + 0xD800));
2016 elements.push(String.fromCharCode((nextCP % 0x400) + 0xDC00));
2017 }
2018 nextIndex += 1;
2019 }
2020 return elements.join('');
2021 });
2022
2023 // 21.1.2.3 String.prototype
2024
2025 // 21.1.2.4 String.raw ( template , ...substitutions )
2026 define(
2027 String, 'raw',
2028 function raw(template /*, ...substitutions*/) {
2029 var substitutions = [].slice.call(arguments, 1);
2030
2031 var cooked = Object(template);
2032 var rawValue = cooked['raw'];
2033 var raw = Object(rawValue);
2034 var len = raw['length'];
2035 var literalSegments = ToLength(len);
2036 if (literalSegments <= 0) return '';
2037 var stringElements = [];
2038 var nextIndex = 0;
2039 while (true) {
2040 var next = raw[nextIndex];
2041 var nextSeg = String(next);
2042 stringElements.push(nextSeg);
2043 if (nextIndex + 1 === literalSegments)
2044 return stringElements.join('');
2045 next = substitutions[nextIndex];
2046 var nextSub = String(next);
2047 stringElements.push(nextSub);
2048 nextIndex = nextIndex + 1;
2049 }
2050 });
2051
2052 // See https://githib.com/inexorabletash/uate for a more useful version.
2053
2054 // 21.1.3 Properties of the String Prototype Object
2055 // 21.1.3.1 String.prototype.charAt ( pos )
2056 // 21.1.3.2 String.prototype.charCodeAt ( pos )
2057
2058 // 21.1.3.3 String.prototype.codePointAt ( pos )
2059 define(
2060 String.prototype, 'codePointAt',
2061 function codePointAt(pos) {
2062 var o = strict(this);
2063 var s = String(o);
2064 var position = ToInteger(pos);
2065 var size = s.length;
2066 if (position < 0 || position >= size) return undefined;
2067 var first = s.charCodeAt(position);
2068 if (first < 0xD800 || first > 0xDBFF || position + 1 === size) return first;
2069 var second = s.charCodeAt(position + 1);
2070 if (second < 0xDC00 || second > 0xDFFF) return first;
2071 return ((first - 0xD800) * 1024) + (second - 0xDC00) + 0x10000;
2072 });
2073
2074 // 21.1.3.4 String.prototype.concat ( ...args )
2075 // 21.1.3.5 String.prototype.constructor
2076
2077 // 21.1.3.6 String.prototype.endsWith ( searchString [ , endPosition] )
2078 define(
2079 String.prototype, 'endsWith',
2080 function endsWith(searchString) {
2081 var endPosition = arguments[1];
2082
2083 var o = strict(this);
2084 var s = String(o);
2085 var searchStr = String(searchString);
2086 var len = s.length;
2087 var pos = (endPosition === undefined) ? len : ToInteger(endPosition);
2088 var end = min(max(pos, 0), len);
2089 var searchLength = searchStr.length;
2090 var start = end - searchLength;
2091 if (start < 0) return false;
2092 if (s.substring(start, start + searchLength) === searchStr) return true;
2093 return false;
2094 });
2095
2096 // 21.1.3.7 String.prototype.includes ( searchString [ , position ] )
2097 define(
2098 String.prototype, 'includes',
2099 function includes(searchString) {
2100 var position = arguments[1];
2101
2102 var o = strict(this);
2103 var s = String(o);
2104 var searchStr = String(searchString);
2105 var pos = ToInteger(position);
2106 var len = s.length;
2107 var start = min(max(pos, 0), len);
2108 return s.indexOf(searchStr, start) !== -1;
2109 });
2110
2111 // 21.1.3.8 String.prototype.indexOf ( searchString [ , position ] )
2112 // 21.1.3.9 String.prototype.lastIndexOf ( searchString [ , position ] )
2113 // 21.1.3.10 String.prototype.localeCompare ( that [, reserved1 [ , reserved2 ] ] )
2114 // 21.1.3.11 String.prototype.match ( regexp )
2115 define(
2116 String.prototype, 'match',
2117 function match(regexp) {
2118 var o = strict(this);
2119 var s = String(o);
2120 if (HasProperty(regexp, $$match)) var rx = regexp;
2121 else rx = new RegExp(regexp);
2122 return rx[$$match](s);
2123 }, !string_regexp_dispatch);
2124
2125 // 21.1.3.12 String.prototype.normalize ( [ form ] )
2126
2127 // Not practical due to table sizes; if needed, pull in:
2128 // https://github.com/walling/unorm/
2129
2130 // 21.1.3.13 String.prototype.repeat ( count )
2131 define(
2132 String.prototype, 'repeat',
2133 function repeat(count) {
2134 var o = strict(this);
2135 var s = String(o);
2136 var n = ToInteger(count);
2137 if (n < 0) throw RangeError();
2138 if (n === Infinity) throw RangeError();
2139 var t = new Array(n + 1).join(s);
2140 return t;
2141 });
2142
2143 // 21.1.3.14 String.prototype.replace (searchValue, replaceValue )
2144 define(
2145 String.prototype, 'replace',
2146 function replace(searchValue, replaceValue) {
2147 var o = strict(this);
2148 if (HasProperty(searchValue, $$replace))
2149 return searchValue[$$replace](o, replaceValue);
2150 return orig_replace.call(o, searchValue, replaceValue);
2151 }, !string_regexp_dispatch);
2152
2153 // 21.1.3.15 String.prototype.search ( regexp )
2154 define(
2155 String.prototype, 'search',
2156 function search(regexp) {
2157 var o = strict(this);
2158 var string = String(o);
2159 if (HasProperty(regexp, $$search)) var rx = regexp;
2160 else rx = new RegExp(regexp);
2161 return rx[$$search](string);
2162 }, !string_regexp_dispatch);
2163
2164 // 21.1.3.16 String.prototype.slice ( start, end )
2165 // 21.1.3.17 String.prototype.split ( separator, limit )
2166 define(
2167 String.prototype, 'split',
2168 function split(separator, limit) {
2169 var o = strict(this);
2170 if (HasProperty(separator, $$split))
2171 return separator[$$split](o, limit);
2172 return orig_split.call(o, separator, limit);
2173 }, !string_regexp_dispatch);
2174
2175 // 21.1.3.18 String.prototype.startsWith ( searchString [, position ] )
2176 define(
2177 String.prototype, 'startsWith',
2178 function startsWith(searchString) {
2179 var position = arguments[1];
2180
2181 var o = strict(this);
2182 var s = String(o);
2183 var searchStr = String(searchString);
2184 var pos = ToInteger(position);
2185 var len = s.length;
2186 var start = min(max(pos, 0), len);
2187 var searchLength = searchStr.length;
2188 if (searchLength + start > len) return false;
2189 if (s.substring(start, start + searchLength) === searchStr) return true;
2190 return false;
2191 });
2192
2193 // 21.1.3.19 String.prototype.substring ( start, end )
2194 // 21.1.3.20 String.prototype.toLocaleLowerCase ( [ reserved1 [ , reserved2 ] ] )
2195 // 21.1.3.21 String.prototype.toLocaleUpperCase ([ reserved1 [ , reserved2 ] ] )
2196 // 21.1.3.22 String.prototype.toLowerCase ( )
2197 // 21.1.3.23 String.prototype.toString ( )
2198 // 21.1.3.24 String.prototype.toUpperCase ( )
2199 // 21.1.3.25 String.prototype.trim ( )
2200 // 21.1.3.26 String.prototype.valueOf ( )
2201
2202 // 21.1.3.27 String.prototype [ @@iterator ]( )
2203 define(
2204 String.prototype, $$iterator,
2205 function entries() {
2206 return CreateStringIterator(this, 'value');
2207 });
2208
2209 // 21.1.4 Properties of String Instances
2210 // 21.1.4.1 length
2211
2212 // 21.1.5 String Iterator Objects
2213 /** @constructor */
2214 function StringIterator() {}
2215
2216 // 21.1.5.1 CreateStringIterator Abstract Operation
2217 function CreateStringIterator(string, kind) {
2218 var s = String(string);
2219 var iterator = new StringIterator;
2220 set_internal(iterator, '[[IteratedString]]', s);
2221 set_internal(iterator, '[[StringIteratorNextIndex]]', 0);
2222 set_internal(iterator, '[[StringIterationKind]]', kind);
2223 return iterator;
2224 }
2225
2226 // 21.1.5.2 The %StringIteratorPrototype% Object
2227 var $StringIteratorPrototype$ = Object.create($IteratorPrototype$);
2228 StringIterator.prototype = $StringIteratorPrototype$;
2229
2230 // 21.1.5.2.1 %StringIteratorPrototype%.next ( )
2231 define(
2232 $StringIteratorPrototype$, 'next',
2233 function next() {
2234 var o = ToObject(this);
2235 var s = String(o['[[IteratedString]]']),
2236 index = o['[[StringIteratorNextIndex]]'],
2237 len = s.length;
2238 if (index >= len) {
2239 set_internal(o, '[[StringIteratorNextIndex]]', Infinity);
2240 return CreateIterResultObject(undefined, true);
2241 }
2242 var cp = s.codePointAt(index);
2243 set_internal(o, '[[StringIteratorNextIndex]]', index + (cp > 0xFFFF ? 2 : 1));
2244 return CreateIterResultObject(String.fromCodePoint(cp), false);
2245 });
2246
2247 // 21.1.5.2.2 %StringIteratorPrototype% [ @@toStringTag ]
2248 define($StringIteratorPrototype$, $$toStringTag, 'String Iterator');
2249
2250 // 21.1.5.3 Properties of String Iterator Instances
2251
2252 // ---------------------------------------
2253 // 21.2 RegExp (Regular Expression) Objects
2254 // ---------------------------------------
2255
2256 // 21.2.1 Patterns
2257 // 21.2.2 Pattern Semantics
2258 // 21.2.2.1 Notation
2259 // 21.2.2.2 Pattern
2260 // 21.2.2.3 Disjunction
2261 // 21.2.2.4 Alternative
2262 // 21.2.2.5 Term
2263 // 21.2.2.6 Assertion
2264 // 21.2.2.7 Quantifier
2265 // 21.2.2.8 Atom
2266 // 21.2.2.9 AtomEscape
2267 // 21.2.2.10 CharacterEscape
2268 // 21.2.2.11 DecimalEscape
2269 // 21.2.2.12 CharacterClassEscape
2270 // 21.2.2.13 CharacterClass
2271 // 21.2.2.14 ClassRanges
2272 // 21.2.2.15 NonemptyClassRanges
2273 // 21.2.2.16 NonemptyClassRangesNoDash
2274 // 21.2.2.17 ClassAtom
2275 // 21.2.2.18 ClassAtomNoDash
2276 // 21.2.2.19 ClassEscape
2277 // 21.2.3 The RegExp Constructor
2278 // 21.2.3.1 RegExp ( pattern, flags )
2279 // 21.2.3.2 new RegExp( ...argumentsList )
2280 // 21.2.3.3 Abstract Operations for the RegExp Constructor
2281 // 21.2.4 Properties of the RegExp Constructor
2282 // 21.2.4.1 RegExp.prototype
2283 // 21.2.5 Properties of the RegExp Prototype Object
2284 // 21.2.5.1 RegExp.prototype.constructor
2285 // 21.2.5.2 RegExp.prototype.exec ( string )
2286
2287 // 21.2.5.3 get RegExp.prototype.flags
2288 if (!('flags' in RegExp.prototype)) {
2289 Object.defineProperty(
2290 RegExp.prototype, 'flags', {
2291 get: function() {
2292 var s = String(this);
2293 return s.substring(s.lastIndexOf('/') + 1);
2294 }
2295 });
2296 }
2297
2298 // 21.2.5.4 get RegExp.prototype.global
2299 // 21.2.5.5 get RegExp.prototype.ignoreCase
2300
2301 // 21.2.5.6 RegExp.prototype [ @@match ] ( string )
2302 define(RegExp.prototype, $$match, function(string) {
2303 var o = strict(this);
2304 return orig_match.call(string, o);
2305 });
2306
2307 // 21.2.5.7 get RegExp.prototype.multiline
2308
2309 // 21.2.5.8 RegExp.prototype [ @@replace ] ( string, replaceValue )
2310 define(RegExp.prototype, $$replace, function(string, replaceValue) {
2311 var o = strict(this);
2312 return orig_replace.call(string, o, replaceValue);
2313 });
2314
2315 // 21.2.5.9 RegExp.prototype [ @@search ] ( string )
2316 define(RegExp.prototype, $$search, function(string) {
2317 var o = strict(this);
2318 return orig_search.call(string, o);
2319 });
2320
2321 // 21.2.5.10 get RegExp.prototype.source
2322
2323 // 21.2.5.11 RegExp.prototype [ @@split ] ( string, limit )
2324 define(RegExp.prototype, $$split, function(string, limit) {
2325 var o = strict(this);
2326 return orig_split.call(string, o, limit);
2327 });
2328
2329 // 21.2.5.12 get RegExp.prototype.sticky
2330 // 21.2.5.13 RegExp.prototype.test( S )
2331 // 21.2.5.14 RegExp.prototype.toString ( )
2332 // 21.2.5.15 get RegExp.prototype.unicode
2333
2334 // 21.2.6 Properties of RegExp Instances
2335 // 21.2.6.1 lastIndex
2336
2337 // (No polyfillable changes from ES5)
2338
2339 // ---------------------------------------
2340 // 22 Indexed Collections
2341 // ---------------------------------------
2342
2343 // ---------------------------------------
2344 // 22.1 Array Objects
2345 // ---------------------------------------
2346
2347 // 22.1.1 The Array Constructor
2348 // 22.1.1.1 Array ( )
2349 // 22.1.1.2 Array (len)
2350 // 22.1.1.3 Array (...items )
2351
2352 // 22.1.2 Properties of the Array Constructor
2353
2354 // 22.1.2.1 Array.from ( items [ , mapfn [ , thisArg ] ] )
2355 define(
2356 Array, 'from',
2357 function from(items) {
2358 var mapfn = arguments[1];
2359 var thisArg = arguments[2];
2360
2361 var c = strict(this);
2362 if (mapfn === undefined) {
2363 var mapping = false;
2364 } else {
2365 if (!IsCallable(mapfn)) throw TypeError();
2366 var t = thisArg;
2367 mapping = true;
2368 }
2369 var usingIterator = GetMethod(items, $$iterator);
2370 if (usingIterator !== undefined) {
2371 if (IsConstructor(c)) {
2372 var a = new c();
2373 } else {
2374 a = new Array(0);
2375 }
2376 var iterator = GetIterator(items, usingIterator);
2377 var k = 0;
2378 while (true) {
2379 var next = IteratorStep(iterator);
2380 if (next === false) {
2381 a.length = k;
2382 return a;
2383 }
2384 var nextValue = IteratorValue(next);
2385 if (mapping)
2386 var mappedValue = mapfn.call(t, nextValue);
2387 else
2388 mappedValue = nextValue;
2389 a[k] = mappedValue;
2390 k += 1;
2391 }
2392 }
2393 var arrayLike = ToObject(items);
2394 var lenValue = arrayLike.length;
2395 var len = ToLength(lenValue);
2396 if (IsConstructor(c)) {
2397 a = new c(len);
2398 } else {
2399 a = new Array(len);
2400 }
2401 k = 0;
2402 while (k < len) {
2403 var kValue = arrayLike[k];
2404 if (mapping)
2405 mappedValue = mapfn.call(t, kValue, k);
2406 else
2407 mappedValue = kValue;
2408 a[k] = mappedValue;
2409 k += 1;
2410 }
2411 a.length = len;
2412 return a;
2413 });
2414
2415 // 22.1.2.2 Array.isArray ( arg )
2416
2417 // 22.1.2.3 Array.of ( ...items )
2418 define(
2419 Array, 'of',
2420 function of() {
2421 var items = arguments;
2422
2423 var lenValue = items.length;
2424 var len = ToUint32(lenValue);
2425 var c = strict(this), a;
2426 if (IsConstructor(c)) {
2427 a = new c(len);
2428 a = ToObject(a);
2429 } else {
2430 a = new Array(len);
2431 }
2432 var k = 0;
2433 while (k < len) {
2434 a[k] = items[k];
2435 k += 1;
2436 }
2437 a.length = len;
2438 return a;
2439 });
2440
2441 // 22.1.2.4 Array.prototype
2442 // 22.1.2.5 get Array [ @@species ]
2443 // 22.1.3 Properties of the Array Prototype Object
2444 // 22.1.3.1 Array.prototype.concat ( ...arguments )
2445 // 22.1.3.1.1 Runtime Semantics: IsConcatSpreadable ( O )
2446 // 22.1.3.2 Array.prototype.constructor
2447 // 22.1.3.3 Array.prototype.copyWithin (target, start [ , end ] )
2448 define(
2449 Array.prototype, 'copyWithin',
2450 function copyWithin(target, start/*, end*/) {
2451 var end = arguments[2];
2452
2453 var o = ToObject(this);
2454 var lenVal = o.length;
2455 var len = ToLength(lenVal);
2456 len = max(len, 0);
2457 var relativeTarget = ToInteger(target);
2458 var to;
2459 if (relativeTarget < 0)
2460 to = max(len + relativeTarget, 0);
2461 else
2462 to = min(relativeTarget, len);
2463 var relativeStart = ToInteger(start);
2464 var from;
2465 if (relativeStart < 0)
2466 from = max(len + relativeStart, 0);
2467 else
2468 from = min(relativeStart, len);
2469 var relativeEnd;
2470 if (end === undefined)
2471 relativeEnd = len;
2472 else
2473 relativeEnd = ToInteger(end);
2474 var final;
2475 if (relativeEnd < 0)
2476 final = max(len + relativeEnd, 0);
2477 else
2478 final = min(relativeEnd, len);
2479 var count = min(final - from, len - to);
2480 var direction;
2481 if (from < to && to < from + count) {
2482 direction = -1;
2483 from = from + count - 1;
2484 to = to + count - 1;
2485 } else {
2486 direction = 1;
2487 }
2488 while (count > 0) {
2489 var fromKey = String(from);
2490 var toKey = String(to);
2491 var fromPresent = HasProperty(o, fromKey);
2492 if (fromPresent) {
2493 var fromVal = o[fromKey];
2494 o[toKey] = fromVal;
2495 } else {
2496 delete o[toKey];
2497 }
2498 from = from + direction;
2499 to = to + direction;
2500 count = count - 1;
2501 }
2502 return o;
2503 });
2504
2505 // 22.1.3.4 Array.prototype.entries ( )
2506 var nativeArrayIteratorMethods =
2507 ('entries' in Array.prototype && 'next' in [].entries());
2508
2509 define(
2510 Array.prototype, 'entries',
2511 function entries() {
2512 return CreateArrayIterator(this, 'key+value');
2513 }, !nativeArrayIteratorMethods);
2514
2515 // 22.1.3.5 Array.prototype.every ( callbackfn [ , thisArg] )
2516
2517 // 22.1.3.6 Array.prototype.fill (value [ , start [ , end ] ] )
2518 define(
2519 Array.prototype, 'fill',
2520 function fill(value/*, start, end*/) {
2521 var start = arguments[1],
2522 end = arguments[2];
2523
2524 var o = ToObject(this);
2525 var lenVal = o.length;
2526 var len = ToLength(lenVal);
2527 len = max(len, 0);
2528 var relativeStart = ToInteger(start);
2529 var k;
2530 if (relativeStart < 0)
2531 k = max((len + relativeStart), 0);
2532 else
2533 k = min(relativeStart, len);
2534 var relativeEnd;
2535 if (end === undefined)
2536 relativeEnd = len;
2537 else
2538 relativeEnd = ToInteger(end);
2539 var final;
2540 if (relativeEnd < 0)
2541 final = max((len + relativeEnd), 0);
2542 else
2543 final = min(relativeEnd, len);
2544 while (k < final) {
2545 var pk = String(k);
2546 o[pk] = value;
2547 k += 1;
2548 }
2549 return o;
2550 });
2551
2552 // 22.1.3.7 Array.prototype.filter ( callbackfn [ , thisArg ] )
2553
2554 // 22.1.3.8 Array.prototype.find ( predicate [ , thisArg ] )
2555 define(
2556 Array.prototype, 'find',
2557 function find(predicate) {
2558 var o = ToObject(this);
2559 var lenValue = o.length;
2560 var len = ToInteger(lenValue);
2561 if (!IsCallable(predicate)) throw TypeError();
2562 var t = arguments.length > 1 ? arguments[1] : undefined;
2563 var k = 0;
2564 while (k < len) {
2565 var pk = String(k);
2566 var kPresent = HasProperty(o, pk);
2567 if (kPresent) {
2568 var kValue = o[pk];
2569 var testResult = predicate.call(t, kValue, k, o);
2570 if (Boolean(testResult)) {
2571 return kValue;
2572 }
2573 }
2574 ++k;
2575 }
2576 return undefined;
2577 });
2578
2579 // 22.1.3.9 Array.prototype.findIndex ( predicate [ , thisArg ] )
2580 define(
2581 Array.prototype, 'findIndex',
2582 function findIndex(predicate) {
2583 var o = ToObject(this);
2584 var lenValue = o.length;
2585 var len = ToLength(lenValue);
2586 if (!IsCallable(predicate)) throw TypeError();
2587 var t = arguments.length > 1 ? arguments[1] : undefined;
2588 var k = 0;
2589 while (k < len) {
2590 var pk = String(k);
2591 var kPresent = HasProperty(o, pk);
2592 if (kPresent) {
2593 var kValue = o[pk];
2594 var testResult = predicate.call(t, kValue, k, o);
2595 if (Boolean(testResult)) {
2596 return k;
2597 }
2598 }
2599 ++k;
2600 }
2601 return -1;
2602 });
2603
2604 // 22.1.3.10 Array.prototype.forEach ( callbackfn [ , thisArg ] )
2605 // 22.1.3.11 Array.prototype.indexOf ( searchElement [ , fromIndex ] )
2606 // 22.1.3.12 Array.prototype.join (separator)
2607
2608 // 22.1.3.13 Array.prototype.keys ( )
2609 define(
2610 Array.prototype, 'keys',
2611 function keys() {
2612 return CreateArrayIterator(this, 'key');
2613 }, !nativeArrayIteratorMethods);
2614
2615 // 22.1.3.14 Array.prototype.lastIndexOf ( searchElement [ , fromIndex ] )
2616 // 22.1.3.15 Array.prototype.map ( callbackfn [ , thisArg ] )
2617 // 22.1.3.16 Array.prototype.pop ( )
2618 // 22.1.3.17 Array.prototype.push ( ...items )
2619 // 22.1.3.18 Array.prototype.reduce ( callbackfn [ , initialValue ] )
2620 // 22.1.3.19 Array.prototype.reduceRight ( callbackfn [ , initialValue ] )
2621 // 22.1.3.20 Array.prototype.reverse ( )
2622 // 22.1.3.21 Array.prototype.shift ( )
2623 // 22.1.3.22 Array.prototype.slice (start, end)
2624 // 22.1.3.23 Array.prototype.some ( callbackfn [ , thisArg ] )
2625 // 22.1.3.24 Array.prototype.sort (comparefn)
2626 // 22.1.3.25 Array.prototype.splice (start, deleteCount , ...items )
2627 // 22.1.3.26 Array.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )
2628 // 22.1.3.27 Array.prototype.toString ( )
2629 // 22.1.3.28 Array.prototype.unshift ( ...items )
2630
2631 // 22.1.3.29 Array.prototype.values ( )
2632 define(
2633 Array.prototype, 'values',
2634 function values() {
2635 return CreateArrayIterator(this, 'value');
2636 }, !nativeArrayIteratorMethods);
2637
2638 // 22.1.3.30 Array.prototype [ @@iterator ] ( )
2639 define(
2640 Array.prototype, $$iterator,
2641 Array.prototype.values
2642 );
2643
2644 // 22.1.3.31 Array.prototype [ @@unscopables ]
2645 // 22.1.4 Properties of Array Instances
2646 // 22.1.4.1 length
2647
2648 // 22.1.5 Array Iterator Objects
2649 function ArrayIterator() {}
2650
2651 // 22.1.5.1 CreateArrayIterator Abstract Operation
2652 function CreateArrayIterator(array, kind) {
2653 var o = ToObject(array);
2654 var iterator = new ArrayIterator;
2655 set_internal(iterator, '[[IteratedObject]]', o);
2656 set_internal(iterator, '[[ArrayIteratorNextIndex]]', 0);
2657 set_internal(iterator, '[[ArrayIterationKind]]', kind);
2658 return iterator;
2659 }
2660
2661 // 22.1.5.2 The %ArrayIteratorPrototype% Object
2662 var $ArrayIteratorPrototype$ = Object.create($IteratorPrototype$);
2663 ArrayIterator.prototype = $ArrayIteratorPrototype$;
2664
2665 // 22.1.5.2.1 %ArrayIteratorPrototype%. next( )
2666 define(
2667 $ArrayIteratorPrototype$, 'next',
2668 function next() {
2669 var o = strict(this);
2670 if (Type(o) !== 'object') throw TypeError();
2671 var a = o['[[IteratedObject]]'],
2672 index = o['[[ArrayIteratorNextIndex]]'],
2673 itemKind = o['[[ArrayIterationKind]]'],
2674 lenValue = a.length,
2675 len = ToUint32(lenValue),
2676 elementKey,
2677 elementValue;
2678 if (itemKind.indexOf('sparse') !== -1) {
2679 var found = false;
2680 while (!found && index < len) {
2681 elementKey = String(index);
2682 found = HasProperty(a, elementKey);
2683 if (!found) {
2684 index += 1;
2685 }
2686 }
2687 }
2688 if (index >= len) {
2689 set_internal(o, '[[ArrayIteratorNextIndex]]', Infinity);
2690 return CreateIterResultObject(undefined, true);
2691 }
2692 elementKey = index;
2693 set_internal(o, '[[ArrayIteratorNextIndex]]', index + 1);
2694 if (itemKind.indexOf('value') !== -1)
2695 elementValue = a[elementKey];
2696 if (itemKind.indexOf('key+value') !== -1)
2697 return CreateIterResultObject([elementKey, elementValue], false);
2698 if (itemKind.indexOf('key') !== -1)
2699 return CreateIterResultObject(elementKey, false);
2700 if (itemKind === 'value')
2701 return CreateIterResultObject(elementValue, false);
2702 throw Error('Internal error');
2703 });
2704
2705 // 22.1.5.2.2 %ArrayIteratorPrototype% [ @@toStringTag ]
2706 define($ArrayIteratorPrototype$, $$toStringTag, 'Array Iterator');
2707
2708 // 22.1.5.3 Properties of Array Iterator Instances
2709
2710
2711 // ---------------------------------------
2712 // 22.2 TypedArray Objects
2713 // ---------------------------------------
2714
2715 // See typedarray.js for TypedArray polyfill
2716
2717 ['Int8Array', 'Uint8Array', 'Uint8ClampedArray',
2718 'Int16Array', 'Uint16Array',
2719 'Int32Array', 'Uint32Array',
2720 'Float32Array', 'Float64Array'].forEach(function ($TypedArrayName$) {
2721 if (!($TypedArrayName$ in global))
2722 return;
2723 var $TypedArray$ = global[$TypedArrayName$];
2724
2725 // 22.2.1 The %TypedArray% Intrinsic Object
2726 // 22.2.1.1 %TypedArray% ( length )
2727 // 22.2.1.2 %TypedArray% ( typedArray )
2728 // 22.2.1.3 %TypedArray% ( object )
2729 // 22.2.1.4 %TypedArray% ( buffer [ , byteOffset [ , length ] ] )
2730 // 22.2.1.5 %TypedArray% ( all other argument combinations )
2731 // 22.2.2 Properties of the %TypedArray% Intrinsic Object
2732
2733 // 22.2.2.1 %TypedArray%.from ( source [ , mapfn [ , thisArg ] ] )
2734 define(
2735 $TypedArray$, 'from',
2736 function from(source) {
2737 var mapfn = arguments[1];
2738 var thisArg = arguments[2];
2739
2740 var c = strict(this);
2741 if (!IsConstructor(c)) throw TypeError();
2742 if (mapfn === undefined) {
2743 var mapping = false;
2744 } else {
2745 if (IsCallable(mapfn)) throw TypeError();
2746 var t = thisArg;
2747 mapping = true;
2748 }
2749 var usingIterator = GetMethod(source, $$iterator);
2750 if (usingIterator !== undefined) {
2751 var iterator = GetIterator(source, usingIterator);
2752 var values = [];
2753 var next = true;
2754 while (next !== false) {
2755 next = IteratorStep(iterator);
2756 if (next !== false) {
2757 var nextValue = IteratorValue(next);
2758 values.push(nextValue);
2759 }
2760 }
2761 var len = values.length;
2762 var newObj = new c(len);
2763 var k = 0;
2764 while (k < len) {
2765 var kValue = values.shift();
2766 if (mapping) {
2767 var mappedValue = mapfn.call(t, kValue);
2768 } else {
2769 mappedValue = kValue;
2770 }
2771 newObj[k] = mappedValue;
2772 ++k;
2773 }
2774 console.assert(values.length === 0);
2775 return newObj;
2776 }
2777 var arrayLike = ToObject(source);
2778 var lenValue = arrayLike.length;
2779 len = ToLength(lenValue);
2780 newObj = new c(len);
2781 k = 0;
2782 while (k < len) {
2783 kValue = arrayLike[k];
2784 if (mapping) {
2785 mappedValue = mapfn.call(t, kValue, k);
2786 } else {
2787 mappedValue = kValue;
2788 }
2789 newObj[k] = mappedValue;
2790 ++k;
2791 }
2792 return newObj;
2793 });
2794
2795 // 22.2.2.2 %TypedArray%.of ( ...items )
2796 define(
2797 $TypedArray$, 'of',
2798 function of() {
2799 var items = arguments;
2800
2801 var len = items.length;
2802 var c = strict(this);
2803 var newObj = new c(len);
2804 var k = 0;
2805 while (k < len) {
2806 newObj[k] = items[k];
2807 ++k;
2808 }
2809 return newObj;
2810 });
2811
2812 // 22.2.2.3 %TypedArray%.prototype
2813 // 22.2.2.4 get %TypedArray% [ @@species ]
2814 // 22.2.3 Properties of the %TypedArrayPrototype% Object
2815 // 22.2.3.1 get %TypedArray%.prototype.buffer
2816 // 22.2.3.2 get %TypedArray%.prototype.byteLength
2817 // 22.2.3.3 get %TypedArray%.prototype.byteOffset
2818 // 22.2.3.4 %TypedArray%.prototype.constructor
2819
2820 // 22.2.3.5 %TypedArray%.prototype.copyWithin (target, start [, end ] )
2821 define($TypedArray$.prototype, 'copyWithin', Array.prototype.copyWithin);
2822
2823 // 22.2.3.6 %TypedArray%.prototype.entries ( )
2824 define($TypedArray$.prototype, 'entries', Array.prototype.entries);
2825
2826 // 22.2.3.7 %TypedArray%.prototype.every ( callbackfn [ , thisArg ] )
2827 define($TypedArray$.prototype, 'every', Array.prototype.every);
2828
2829 // 22.2.3.8 %TypedArray%.prototype.fill (value [ , start [ , end ] ] )
2830 define(
2831 $TypedArray$.prototype, 'fill',
2832 //Array.prototype.fill // Doesn't work in Safari 7
2833 function fill(value/*, start, end*/) {
2834 var start = arguments[1],
2835 end = arguments[2];
2836
2837 var o = ToObject(this);
2838 var lenVal = o.length;
2839 var len = ToLength(lenVal);
2840 len = max(len, 0);
2841 var relativeStart = ToInteger(start);
2842 var k;
2843 if (relativeStart < 0) k = max((len + relativeStart), 0);
2844 else k = min(relativeStart, len);
2845 var relativeEnd;
2846 if (end === undefined) relativeEnd = len;
2847 else relativeEnd = ToInteger(end);
2848 var final;
2849 if (relativeEnd < 0) final = max((len + relativeEnd), 0);
2850 else final = min(relativeEnd, len);
2851 while (k < final) {
2852 var pk = String(k);
2853 o[pk] = value;
2854 k += 1;
2855 }
2856 return o;
2857 });
2858
2859 // 22.2.3.9 %TypedArray%.prototype.filter ( callbackfn [ , thisArg ] )
2860 define(
2861 $TypedArray$.prototype, 'filter',
2862 function filter(callbackfn) {
2863 var thisArg = arguments[1];
2864
2865 var o = ToObject(this);
2866 var lenVal = o.length;
2867 var len = ToLength(lenVal);
2868 if (!IsCallable(callbackfn)) throw TypeError();
2869 var t = thisArg;
2870 var c = o.constructor;
2871 var kept = [];
2872 var k = 0;
2873 var captured = 0;
2874 while (k < len) {
2875 var kValue = o[k];
2876 var selected = callbackfn.call(t, kValue, k, o);
2877 if (selected) {
2878 kept.push(kValue);
2879 ++captured;
2880 }
2881 ++k;
2882 }
2883 var a = new c(captured);
2884 var n = 0;
2885 for (var i = 0; i < kept.length; ++i) {
2886 var e = kept[i];
2887 a[n] = e;
2888 ++n;
2889 }
2890 return a;
2891 });
2892
2893 // 22.2.3.10 %TypedArray%.prototype.find (predicate [ , thisArg ] )
2894 define($TypedArray$.prototype, 'find', Array.prototype.find);
2895
2896 // 22.2.3.11 %TypedArray%.prototype.findIndex ( predicate [ , thisArg ] )
2897 define($TypedArray$.prototype, 'findIndex', Array.prototype.findIndex);
2898
2899 // 22.2.3.12 %TypedArray%.prototype.forEach ( callbackfn [ , thisArg ] )
2900 define($TypedArray$.prototype, 'forEach', Array.prototype.forEach);
2901
2902 // 22.2.3.13 %TypedArray%.prototype.indexOf (searchElement [ , fromIndex ] )
2903 define($TypedArray$.prototype, 'indexOf', Array.prototype.indexOf);
2904
2905 // 22.2.3.14 %TypedArray%.prototype.join ( separator )
2906 define($TypedArray$.prototype, 'join', Array.prototype.join);
2907
2908 // 22.2.3.15 %TypedArray%.prototype.keys ( )
2909 define($TypedArray$.prototype, 'keys', Array.prototype.keys);
2910
2911 // 22.2.3.16 %TypedArray%.prototype.lastIndexOf ( searchElement [ , fromIndex ] )
2912 define($TypedArray$.prototype, 'lastIndexOf', Array.prototype.lastIndexOf);
2913
2914 // 22.2.3.17 get %TypedArray%.prototype.length
2915
2916 // 22.2.3.18 %TypedArray%.prototype.map ( callbackfn [ , thisArg ] )
2917 define(
2918 $TypedArray$.prototype, 'map',
2919 function map(callbackfn) {
2920 var thisArg = arguments[1];
2921
2922 var o = ToObject(this);
2923 var lenValue = o.length;
2924 var len = ToLength(lenValue);
2925 if (!IsCallable(callbackfn)) throw TypeError();
2926 var t = thisArg;
2927 var a = undefined;
2928 var c = o.constructor;
2929 if (IsConstructor(c))
2930 a = new c(len);
2931 if (a === undefined)
2932 a = new Array(len);
2933 var k = 0;
2934 while (k < len) {
2935 var kPresent = HasProperty(o, k);
2936 if (kPresent) {
2937 var kValue = o[k];
2938 var mappedValue = callbackfn.call(t, kValue, k, o);
2939 a[k] = mappedValue;
2940 }
2941 ++k;
2942 }
2943 return a;
2944 });
2945
2946 // 22.2.3.19 %TypedArray%.prototype.reduce ( callbackfn [, initialValue] )
2947 define($TypedArray$.prototype, 'reduce', Array.prototype.reduce);
2948
2949 // 22.2.3.20 %TypedArray%.prototype.reduceRight ( callbackfn [, initialValue] )
2950 define($TypedArray$.prototype, 'reduceRight', Array.prototype.reduceRight);
2951
2952 // 22.2.3.21 %TypedArray%.prototype.reverse ( )
2953 define($TypedArray$.prototype, 'reverse', Array.prototype.reverse);
2954
2955 // 22.2.3.22 %TypedArray%.prototype.set ( overloaded [ , offset ])
2956 // 22.2.3.22.1 %TypedArray%.prototype.set (array [ , offset ] )
2957 // 22.2.3.22.2 %TypedArray%.prototype.set(typedArray [, offset ] )
2958
2959 // 22.2.3.23 %TypedArray%.prototype.slice ( start, end )
2960 define(
2961 $TypedArray$.prototype, 'slice',
2962 function slice(start, end) {
2963 var o = ToObject(this);
2964 var lenVal = o.length;
2965 var len = ToLength(lenVal);
2966 var relativeStart = ToInteger(start);
2967 var k = (relativeStart < 0) ? max(len + relativeStart, 0) : min(relativeStart, len);
2968 var relativeEnd = (end === undefined) ? len : ToInteger(end);
2969 var final = (relativeEnd < 0) ? max(len + relativeEnd, 0) : min(relativeEnd, len);
2970 var count = final - k;
2971 var c = o.constructor;
2972 if (IsConstructor(c)) {
2973 var a = new c(count);
2974 } else {
2975 throw TypeError();
2976 }
2977 var n = 0;
2978 while (k < final) {
2979 var kValue = o[k];
2980 a[n] = kValue;
2981 ++k;
2982 ++n;
2983 }
2984 return a;
2985 });
2986
2987 // 22.2.3.24 %TypedArray%.prototype.some ( callbackfn [ , thisArg ] )
2988 define($TypedArray$.prototype, 'some', Array.prototype.some);
2989
2990 // 22.2.3.25 %TypedArray%.prototype.sort ( comparefn )
2991 define(
2992 $TypedArray$.prototype, 'sort',
2993 function sort() {
2994 var comparefn = arguments[0];
2995
2996 function sortCompare(x, y) {
2997 console.assert(Type(x) === 'number' && Type(y) === 'number');
2998 if (x !== x && y !== y) return +0;
2999 if (x !== x) return 1;
3000 if (y !== y) return -1;
3001 if (comparefn !== undefined) {
3002 return comparefn(x, y);
3003 }
3004 if (x < y) return -1;
3005 if (x > y) return 1;
3006 return +0;
3007 }
3008 return Array.prototype.sort.call(this, sortCompare);
3009 });
3010
3011 // 22.2.3.26 %TypedArray%.prototype.subarray( [ begin [ , end ] ] )
3012 // 22.2.3.27 %TypedArray%.prototype.toLocaleString ([ reserved1 [ , reserved2 ] ])
3013 // 22.2.3.28 %TypedArray%.prototype.toString ( )
3014
3015 // 22.2.3.29 %TypedArray%.prototype.values ( )
3016 define($TypedArray$.prototype, 'values', Array.prototype.values);
3017
3018 // 22.2.3.30 %TypedArray%.prototype [ @@iterator ] ( )
3019 define(
3020 $TypedArray$.prototype, $$iterator,
3021 $TypedArray$.prototype.values
3022 );
3023
3024 // 22.2.3.31 get %TypedArray%.prototype [ @@toStringTag ]
3025 define($TypedArray$.prototype, $$toStringTag, $TypedArrayName$);
3026
3027 // 22.2.4 The TypedArray Constructors
3028 // 22.2.4.1TypedArray( ... argumentsList)
3029 // 22.2.5 Properties of the TypedArray Constructors
3030 // 22.2.5.1 TypedArray.BYTES_PER_ELEMENT
3031 // 22.2.5.2 TypedArray.prototype
3032 // 22.2.6 Properties of TypedArray Prototype Objects
3033 // 22.2.6.1 TypedArray.prototype.BYTES_PER_ELEMENT
3034 // 22.2.6.2 TypedArray.prototype.constructor
3035 // 22.2.7 Properties of TypedArray Instances
3036 });
3037
3038 // ---------------------------------------
3039 // 23 Keyed Collection
3040 // ---------------------------------------
3041
3042 // ---------------------------------------
3043 // 23.1 Map Objects
3044 // ---------------------------------------
3045
3046 (function() {
3047 // 23.1.1 The Map Constructor
3048
3049 // 23.1.1.1 Map ( [ iterable ] )
3050 /** @constructor */
3051 function Map(/*iterable*/) {
3052 var map = strict(this);
3053 var iterable = arguments[0];
3054
3055 if (Type(map) !== 'object') throw TypeError();
3056 if ('[[MapData]]' in map) throw TypeError();
3057
3058 if (iterable !== undefined) {
3059 var adder = map['set'];
3060 if (!IsCallable(adder)) throw TypeError();
3061 var iter = GetIterator(ToObject(iterable));
3062 }
3063 set_internal(map, '[[MapData]]', { keys: [], values: [] });
3064 if (iter === undefined) return map;
3065 while (true) {
3066 var next = IteratorStep(iter);
3067 if (next === false)
3068 return map;
3069 var nextItem = IteratorValue(next);
3070 if (Type(nextItem) !== 'object') throw TypeError();
3071 var k = nextItem[0];
3072 var v = nextItem[1];
3073 adder.call(map, k, v);
3074 }
3075
3076 return map;
3077 }
3078
3079 if (!('Map' in global) || OVERRIDE_NATIVE_FOR_TESTING ||
3080 (function() { try { new global.Map([]); return false; } catch (_) { return true; } }()) ||
3081 (function() { try { return !new global.Map().entries().next; } catch (_) { return true; } }()) ||
3082 (new global.Map([['a', 1]]).size !== 1))
3083 global.Map = Map;
3084
3085
3086 function MapDataIndexOf(mapData, key) {
3087 var i;
3088 if (key === key) return mapData.keys.indexOf(key);
3089 // Slow case for NaN
3090 for (i = 0; i < mapData.keys.length; i += 1)
3091 if (SameValueZero(mapData.keys[i], key)) return i;
3092 return -1;
3093 }
3094
3095 // 23.1.1.2 new Map ( ... argumentsList )
3096 // 23.1.2 Properties of the Map Constructor
3097 // 23.1.2.1 Map.prototype
3098 var $MapPrototype$ = {};
3099 Map.prototype = $MapPrototype$;
3100
3101 // 23.1.2.2 get Map [ @@species ]
3102
3103 // 23.1.3 Properties of the Map Prototype Object
3104 // 23.1.3.1 Map.prototype.clear ()
3105 define(
3106 Map.prototype, 'clear',
3107 function clear() {
3108 var m = strict(this);
3109 if (Type(m) !== 'object') throw TypeError();
3110 if (!('[[MapData]]' in m)) throw TypeError();
3111 if (m['[[MapData]]'] === undefined) throw TypeError();
3112 var entries = m['[[MapData]]'];
3113 entries.keys.length = 0;
3114 entries.values.length = 0;
3115 return undefined;
3116 });
3117
3118 // 23.1.3.2 Map.prototype.constructor
3119
3120 // 23.1.3.3 Map.prototype.delete ( key )
3121 define(
3122 Map.prototype, 'delete',
3123 function delete_(key) {
3124 var m = strict(this);
3125 if (Type(m) !== 'object') throw TypeError();
3126 if (!('[[MapData]]' in m)) throw TypeError();
3127 if (m['[[MapData]]'] === undefined) throw TypeError();
3128 var entries = m['[[MapData]]'];
3129 var i = MapDataIndexOf(entries, key);
3130 if (i < 0) return false;
3131 entries.keys[i] = empty;
3132 entries.values[i] = empty;
3133 return true;
3134 });
3135
3136 // 23.1.3.4 Map.prototype.entries ( )
3137 define(
3138 Map.prototype, 'entries',
3139 function entries() {
3140 var m = strict(this);
3141 if (Type(m) !== 'object') throw TypeError();
3142 return CreateMapIterator(m, 'key+value');
3143 });
3144
3145 // 23.1.3.5 Map.prototype.forEach ( callbackfn [ , thisArg ] )
3146 define(
3147 Map.prototype, 'forEach',
3148 function forEach(callbackfn /*, thisArg*/) {
3149 var thisArg = arguments[1];
3150
3151 var m = strict(this);
3152 if (Type(m) !== 'object') throw TypeError();
3153 if (!('[[MapData]]' in m)) throw TypeError();
3154 if (m['[[MapData]]'] === undefined) throw TypeError();
3155 var entries = m['[[MapData]]'];
3156
3157 if (!IsCallable(callbackfn)) {
3158 throw TypeError('First argument to forEach is not callable.');
3159 }
3160 for (var i = 0; i < entries.keys.length; ++i) {
3161 if (entries.keys[i] !== empty) {
3162 callbackfn.call(thisArg, entries.values[i], entries.keys[i], m);
3163 }
3164 }
3165 return undefined;
3166 });
3167
3168 // 23.1.3.6 Map.prototype.get ( key )
3169 define(
3170 Map.prototype, 'get',
3171 function get(key) {
3172 var m = strict(this);
3173 if (Type(m) !== 'object') throw TypeError();
3174 if (!('[[MapData]]' in m)) throw TypeError();
3175 if (m['[[MapData]]'] === undefined) throw TypeError();
3176 var entries = m['[[MapData]]'];
3177 var i = MapDataIndexOf(entries, key);
3178 if (i >= 0) return entries.values[i];
3179 return undefined;
3180 });
3181
3182 // 23.1.3.7 Map.prototype.has ( key )
3183 define(
3184 Map.prototype, 'has',
3185 function has(key) {
3186 var m = strict(this);
3187 if (Type(m) !== 'object') throw TypeError();
3188 if (!('[[MapData]]' in m)) throw TypeError();
3189 if (m['[[MapData]]'] === undefined) throw TypeError();
3190 var entries = m['[[MapData]]'];
3191 if (MapDataIndexOf(entries, key) >= 0) return true;
3192 return false;
3193 });
3194
3195 // 23.1.3.8 Map.prototype.keys ( )
3196 define(
3197 Map.prototype, 'keys',
3198 function keys() {
3199 var m = strict(this);
3200 if (Type(m) !== 'object') throw TypeError();
3201 return CreateMapIterator(m, 'key');
3202 });
3203
3204 // 23.1.3.9 Map.prototype.set ( key , value )
3205 define(
3206 Map.prototype, 'set',
3207 function set(key, value) {
3208 var m = strict(this);
3209 if (Type(m) !== 'object') throw TypeError();
3210 if (!('[[MapData]]' in m)) throw TypeError();
3211 if (m['[[MapData]]'] === undefined) throw TypeError();
3212 var entries = m['[[MapData]]'];
3213 var i = MapDataIndexOf(entries, key);
3214 if (i < 0) i = entries.keys.length;
3215 if (SameValue(key, -0)) key = 0;
3216 entries.keys[i] = key;
3217 entries.values[i] = value;
3218 return m;
3219 });
3220
3221 // 23.1.3.10 get Map.prototype.size
3222 Object.defineProperty(
3223 Map.prototype, 'size', {
3224 get: function() {
3225 var m = strict(this);
3226 if (Type(m) !== 'object') throw TypeError();
3227 if (!('[[MapData]]' in m)) throw TypeError();
3228 if (m['[[MapData]]'] === undefined) throw TypeError();
3229 var entries = m['[[MapData]]'];
3230 var count = 0;
3231 for (var i = 0; i < entries.keys.length; ++i) {
3232 if (entries.keys[i] !== empty)
3233 count = count + 1;
3234 }
3235 return count;
3236 }
3237 });
3238
3239 // 23.1.3.11 Map.prototype.values ( )
3240 define(
3241 Map.prototype, 'values',
3242 function values() {
3243 var m = strict(this);
3244 if (Type(m) !== 'object') throw TypeError();
3245 return CreateMapIterator(m, 'value');
3246 });
3247
3248 // 23.1.3.12 Map.prototype [ @@iterator ]( )
3249 define(
3250 Map.prototype, $$iterator,
3251 function() {
3252 var m = strict(this);
3253 if (Type(m) !== 'object') throw TypeError();
3254 return CreateMapIterator(m, 'key+value');
3255 });
3256
3257 // 23.1.3.13 Map.prototype [ @@toStringTag ]
3258 define(global.Map.prototype, $$toStringTag, 'Map');
3259
3260 // 23.1.4 Properties of Map Instances
3261 // 23.1.5 Map Iterator Objects
3262
3263 /** @constructor */
3264 function MapIterator() {}
3265
3266 // 23.1.5.1 CreateMapIterator Abstract Operation
3267 function CreateMapIterator(map, kind) {
3268 if (Type(map) !== 'object') throw TypeError();
3269 if (!('[[MapData]]' in map)) throw TypeError();
3270 if (map['[[MapData]]'] === undefined) throw TypeError();
3271 var iterator = new MapIterator;
3272 set_internal(iterator, '[[Map]]', map);
3273 set_internal(iterator, '[[MapNextIndex]]', 0);
3274 set_internal(iterator, '[[MapIterationKind]]', kind);
3275 return iterator;
3276 }
3277
3278 // 23.1.5.2 The %MapIteratorPrototype% Object
3279 var $MapIteratorPrototype$ = Object.create($IteratorPrototype$);
3280 MapIterator.prototype = $MapIteratorPrototype$;
3281
3282 // 23.1.5.2.1 %MapIteratorPrototype%.next ( )
3283 define(
3284 $MapIteratorPrototype$, 'next',
3285 function next() {
3286 var o = strict(this);
3287 if (Type(o) !== 'object') throw TypeError();
3288 var m = o['[[Map]]'],
3289 index = o['[[MapNextIndex]]'],
3290 itemKind = o['[[MapIterationKind]]'],
3291 entries = m['[[MapData]]'];
3292 while (index < entries.keys.length) {
3293 var e = {key: entries.keys[index], value: entries.values[index]};
3294 index = index += 1;
3295 set_internal(o, '[[MapNextIndex]]', index);
3296 if (e.key !== empty) {
3297 if (itemKind === 'key') {
3298 return CreateIterResultObject(e.key, false);
3299 } else if (itemKind === 'value') {
3300 return CreateIterResultObject(e.value, false);
3301 } else {
3302 return CreateIterResultObject([e.key, e.value], false);
3303 }
3304 }
3305 }
3306 return CreateIterResultObject(undefined, true);
3307 });
3308
3309 // 23.1.5.2.2 %MapIteratorPrototype% [ @@toStringTag ]
3310 define($MapIteratorPrototype$, $$toStringTag, 'Map Iterator');
3311
3312 // 23.1.5.3 Properties of Map Iterator Instances
3313 }());
3314
3315 // ---------------------------------------
3316 // 23.2 Set Objects
3317 // ---------------------------------------
3318
3319 (function() {
3320 // 23.2.1 The Set Constructor
3321 // 23.2.1.1 Set ( [ iterable ] )
3322
3323 /** @constructor */
3324 function Set(/*iterable*/) {
3325 var set = strict(this);
3326 var iterable = arguments[0];
3327
3328 if (Type(set) !== 'object') throw TypeError();
3329 if ('[[SetData]]' in set) throw TypeError();
3330
3331 if (iterable !== undefined) {
3332 var adder = set['add'];
3333 if (!IsCallable(adder)) throw TypeError();
3334 var iter = GetIterator(ToObject(iterable));
3335 }
3336 set_internal(set, '[[SetData]]', []);
3337 if (iter === undefined) return set;
3338 while (true) {
3339 var next = IteratorStep(iter);
3340 if (next === false)
3341 return set;
3342 var nextValue = IteratorValue(next);
3343 adder.call(set, nextValue);
3344 }
3345
3346 return set;
3347 }
3348
3349 if (!('Set' in global) || OVERRIDE_NATIVE_FOR_TESTING ||
3350 (function() { try { return !new global.Set().entries().next; } catch (_) { return true; } }()) ||
3351 (new global.Set([1]).size !== 1))
3352 global.Set = Set;
3353
3354 function SetDataIndexOf(setData, key) {
3355 var i;
3356 if (key === key)
3357 return setData.indexOf(key);
3358 // Slow case for NaN
3359 for (i = 0; i < setData.length; i += 1)
3360 if (SameValueZero(setData[i], key)) return i;
3361 return -1;
3362 }
3363
3364 // 23.2.1.2 new Set ( ...argumentsList )
3365 // 23.2.2 Properties of the Set Constructor
3366
3367 // 23.2.2.1 Set.prototype
3368 var $SetPrototype$ = {};
3369 Set.prototype = $SetPrototype$;
3370
3371 // 23.2.2.2 get Set [ @@species ]
3372 // 23.2.3 Properties of the Set Prototype Object
3373
3374 // 23.2.3.1 Set.prototype.add (value )
3375 define(
3376 Set.prototype, 'add',
3377 function add(value) {
3378 var s = strict(this);
3379 if (Type(s) !== 'object') throw TypeError();
3380 if (!('[[SetData]]' in s)) throw TypeError();
3381 if (s['[[SetData]]'] === undefined) throw TypeError();
3382 if (SameValue(value, -0)) value = 0;
3383 var entries = s['[[SetData]]'];
3384 var i = SetDataIndexOf(entries, value);
3385 if (i < 0) i = s['[[SetData]]'].length;
3386 s['[[SetData]]'][i] = value;
3387
3388 return s;
3389 });
3390
3391 // 23.2.3.2 Set.prototype.clear ()
3392 define(
3393 Set.prototype, 'clear',
3394 function clear() {
3395 var s = strict(this);
3396 if (Type(s) !== 'object') throw TypeError();
3397 if (!('[[SetData]]' in s)) throw TypeError();
3398 if (s['[[SetData]]'] === undefined) throw TypeError();
3399 var entries = s['[[SetData]]'];
3400 entries.length = 0;
3401 return undefined;
3402 });
3403
3404 // 23.2.3.3 Set.prototype.constructor
3405 // 23.2.3.4 Set.prototype.delete ( value )
3406 define(
3407 Set.prototype, 'delete',
3408 function delete_(value) {
3409 var s = strict(this);
3410 if (Type(s) !== 'object') throw TypeError();
3411 if (!('[[SetData]]' in s)) throw TypeError();
3412 if (s['[[SetData]]'] === undefined) throw TypeError();
3413 var entries = s['[[SetData]]'];
3414 var i = SetDataIndexOf(entries, value);
3415 if (i < 0) return false;
3416 entries[i] = empty;
3417 return true;
3418 });
3419
3420 // 23.2.3.5 Set.prototype.entries ( )
3421 define(
3422 Set.prototype, 'entries',
3423 function entries() {
3424 var s = strict(this);
3425 if (Type(s) !== 'object') throw TypeError();
3426 return CreateSetIterator(s, 'key+value');
3427 });
3428
3429 // 23.2.3.6 Set.prototype.forEach ( callbackfn [ , thisArg ] )
3430 define(
3431 Set.prototype, 'forEach',
3432 function forEach(callbackfn/*, thisArg*/) {
3433 var thisArg = arguments[1];
3434
3435 var s = strict(this);
3436 if (Type(s) !== 'object') throw TypeError();
3437 if (!('[[SetData]]' in s)) throw TypeError();
3438 if (s['[[SetData]]'] === undefined) throw TypeError();
3439 var entries = s['[[SetData]]'];
3440
3441 if (!IsCallable(callbackfn)) {
3442 throw TypeError('First argument to forEach is not callable.');
3443 }
3444 for (var i = 0; i < entries.length; ++i) {
3445 if (entries[i] !== empty) {
3446 callbackfn.call(thisArg, entries[i], entries[i], s);
3447 }
3448 }
3449 });
3450
3451 // 23.2.3.7 Set.prototype.has ( value )
3452 define(
3453 Set.prototype, 'has',
3454 function has(key) {
3455 var s = strict(this);
3456 if (Type(s) !== 'object') throw TypeError();
3457 if (!('[[SetData]]' in s)) throw TypeError();
3458 if (s['[[SetData]]'] === undefined) throw TypeError();
3459 var entries = s['[[SetData]]'];
3460 return SetDataIndexOf(entries, key) !== -1;
3461 });
3462
3463 // 23.2.3.8 Set.prototype.keys ( )
3464 // See Set.prototype.values
3465
3466 // 23.2.3.9 get Set.prototype.size
3467 Object.defineProperty(
3468 Set.prototype, 'size', {
3469 get: function() {
3470 var s = strict(this);
3471 if (Type(s) !== 'object') throw TypeError();
3472 if (!('[[SetData]]' in s)) throw TypeError();
3473 if (s['[[SetData]]'] === undefined) throw TypeError();
3474 var entries = s['[[SetData]]'];
3475 var count = 0;
3476 for (var i = 0; i < entries.length; ++i) {
3477 if (entries[i] !== empty)
3478 count = count + 1;
3479 }
3480 return count;
3481 }
3482 });
3483
3484 // 23.2.3.10 Set.prototype.values ( )
3485 define(
3486 Set.prototype, 'values',
3487 function values() {
3488 var s = strict(this);
3489 if (Type(s) !== 'object') throw TypeError();
3490 return CreateSetIterator(s, 'value');
3491 });
3492 // NOTE: function name is still 'values':
3493 Set.prototype.keys = Set.prototype.values;
3494
3495 // 23.2.3.11 Set.prototype [@@iterator ] ( )
3496 define(
3497 Set.prototype, $$iterator,
3498 function() {
3499 var s = strict(this);
3500 if (Type(s) !== 'object') throw TypeError();
3501 return CreateSetIterator(s);
3502 });
3503
3504 // 23.2.3.12 Set.prototype [ @@toStringTag ]
3505 define(global.Set.prototype, $$toStringTag, 'Set');
3506
3507 // 23.2.4 Properties of Set Instances
3508 // 23.2.5 Set Iterator Objects
3509 /** @constructor */
3510 function SetIterator() {}
3511
3512 // 23.2.5.1 CreateSetIterator Abstract Operation
3513 function CreateSetIterator(set, kind) {
3514 if (Type(set) !== 'object') throw TypeError();
3515 if (!('[[SetData]]' in set)) throw TypeError();
3516 if (set['[[SetData]]'] === undefined) throw TypeError();
3517 var iterator = new SetIterator;
3518 set_internal(iterator, '[[IteratedSet]]', set);
3519 set_internal(iterator, '[[SetNextIndex]]', 0);
3520 set_internal(iterator, '[[SetIterationKind]]', kind);
3521 return iterator;
3522 }
3523
3524 // 23.2.5.2 The %SetIteratorPrototype% Object
3525 var $SetIteratorPrototype$ = Object.create($IteratorPrototype$);
3526 SetIterator.prototype = $SetIteratorPrototype$;
3527
3528 // 23.2.5.2.1 %SetIteratorPrototype%.next( )
3529 define(
3530 $SetIteratorPrototype$, 'next',
3531 function next() {
3532 var o = strict(this);
3533 if (Type(o) !== 'object') throw TypeError();
3534 var s = o['[[IteratedSet]]'],
3535 index = o['[[SetNextIndex]]'],
3536 itemKind = o['[[SetIterationKind]]'],
3537 entries = s['[[SetData]]'];
3538 while (index < entries.length) {
3539 var e = entries[index];
3540 index = index += 1;
3541 set_internal(o, '[[SetNextIndex]]', index);
3542 if (e !== empty) {
3543 if (itemKind === 'key+value')
3544 return CreateIterResultObject([e, e], false);
3545 return CreateIterResultObject(e, false);
3546 }
3547 }
3548 return CreateIterResultObject(undefined, true);
3549 });
3550
3551 // 23.2.5.2.2 %SetIteratorPrototype% [ @@toStringTag ]
3552 define($SetIteratorPrototype$, $$toStringTag, 'Set Iterator');
3553
3554 // 23.2.5.3 Properties of Set Iterator Instances
3555
3556 }());
3557
3558 // ---------------------------------------
3559 // 23.3 WeakMap Objects
3560 // ---------------------------------------
3561
3562 (function() {
3563 // 23.3.1 The WeakMap Constructor
3564 // 23.3.1.1 WeakMap ( [ iterable ] )
3565 /** @constructor */
3566 function WeakMap(/*iterable*/) {
3567 var map = strict(this);
3568 var iterable = arguments[0];
3569
3570 if (Type(map) !== 'object') throw TypeError();
3571 if ('[[WeakMapData]]' in map) throw TypeError();
3572
3573 if (iterable !== undefined) {
3574 var adder = map['set'];
3575 if (!IsCallable(adder)) throw TypeError();
3576 var iter = GetIterator(ToObject(iterable));
3577 }
3578 set_internal(map, '[[WeakMapData]]', new EphemeronTable);
3579 if (iter === undefined) return map;
3580 while (true) {
3581 var next = IteratorStep(iter);
3582 if (next === false)
3583 return map;
3584 var nextValue = IteratorValue(next);
3585 if (Type(nextValue) !== 'object') throw TypeError();
3586 var k = nextValue[0];
3587 var v = nextValue[1];
3588 adder.call(map, k, v);
3589 }
3590
3591 return map;
3592 }
3593
3594 if (!('WeakMap' in global) || OVERRIDE_NATIVE_FOR_TESTING)
3595 global.WeakMap = WeakMap;
3596
3597 // 23.3.2 Properties of the WeakMap Constructor
3598 // 23.3.2.1 WeakMap.prototype
3599 var $WeakMapPrototype$ = {};
3600 WeakMap.prototype = $WeakMapPrototype$;
3601
3602
3603
3604 // 23.3.2.2 WeakMap[ @@create ] ( )
3605 // 23.3.3 Properties of the WeakMap Prototype Object
3606
3607 // 23.3.3.1 WeakMap.prototype.constructor
3608
3609 // 23.3.3.2 WeakMap.prototype.delete ( key )
3610 define(
3611 WeakMap.prototype, 'delete',
3612 function delete_(key) {
3613 var M = strict(this);
3614 if (Type(M) !== 'object') throw TypeError();
3615 if (M['[[WeakMapData]]'] === undefined) throw TypeError();
3616 if (Type(key) !== 'object') throw TypeError('Expected object');
3617 return M['[[WeakMapData]]'].remove(key);
3618 });
3619
3620 // 23.3.3.3 WeakMap.prototype.get ( key )
3621 define(
3622 WeakMap.prototype, 'get',
3623 function get(key, defaultValue) {
3624 var M = strict(this);
3625 if (Type(M) !== 'object') throw TypeError();
3626 if (M['[[WeakMapData]]'] === undefined) throw TypeError();
3627 if (Type(key) !== 'object') throw TypeError('Expected object');
3628 return M['[[WeakMapData]]'].get(key, defaultValue);
3629 });
3630
3631 // 23.3.3.4 WeakMap.prototype.has ( key )
3632 define(
3633 WeakMap.prototype, 'has',
3634 function has(key) {
3635 var M = strict(this);
3636 if (Type(M) !== 'object') throw TypeError();
3637 if (M['[[WeakMapData]]'] === undefined) throw TypeError();
3638 if (Type(key) !== 'object') throw TypeError('Expected object');
3639 return M['[[WeakMapData]]'].has(key);
3640 });
3641
3642 // 23.3.3.5 WeakMap.prototype.set ( key , value )
3643 define(
3644 WeakMap.prototype, 'set',
3645 function set(key, value) {
3646 var M = strict(this);
3647 if (Type(M) !== 'object') throw TypeError();
3648 if (M['[[WeakMapData]]'] === undefined) throw TypeError();
3649 if (Type(key) !== 'object') throw TypeError('Expected object');
3650 M['[[WeakMapData]]'].set(key, value);
3651 return M;
3652 });
3653
3654 // 23.3.3.6 WeakMap.prototype [ @@toStringTag ]
3655 define(global.WeakMap.prototype, $$toStringTag, 'WeakMap');
3656
3657 // 23.3.4 Properties of WeakMap Instances
3658
3659 // Polyfills for incomplete native implementations:
3660 (function() {
3661 var wm = new global.WeakMap();
3662 var orig = global.WeakMap.prototype.set;
3663 define(global.WeakMap.prototype, 'set', function set() {
3664 orig.apply(this, arguments);
3665 return this;
3666 }, wm.set({}, 0) !== wm);
3667 }());
3668 }());
3669
3670 // ---------------------------------------
3671 // 23.4 WeakSet Objects
3672 // ---------------------------------------
3673
3674 (function() {
3675 // 23.4.1 The WeakSet Constructor
3676 // 23.4.1.1 WeakSet ( [ iterable ] )
3677 /** @constructor */
3678 function WeakSet(/*iterable*/) {
3679 var set = strict(this);
3680 var iterable = arguments[0];
3681
3682 if (Type(set) !== 'object') throw TypeError();
3683 if ('[[WeakSetData]]' in set) throw TypeError();
3684
3685 if (iterable !== undefined) {
3686 var adder = set['add'];
3687 if (!IsCallable(adder)) throw TypeError();
3688 var iter = GetIterator(ToObject(iterable));
3689 }
3690 set_internal(set, '[[WeakSetData]]', new EphemeronTable);
3691 if (iter === undefined) return set;
3692 while (true) {
3693 var next = IteratorStep(iter);
3694 if (next === false)
3695 return set;
3696 var nextValue = IteratorValue(next);
3697 adder.call(set, nextValue);
3698 }
3699
3700 return set;
3701 }
3702
3703 if (!('WeakSet' in global) || OVERRIDE_NATIVE_FOR_TESTING)
3704 global.WeakSet = WeakSet;
3705
3706 // 23.4.2 Properties of the WeakSet Constructor
3707 // 23.4.2.1 WeakSet.prototype
3708 var $WeakSetPrototype$ = {};
3709 WeakSet.prototype = $WeakSetPrototype$;
3710
3711 // 23.4.3 Properties of the WeakSet Prototype Object
3712 // 23.4.3.1 WeakSet.prototype.add (value )
3713 define(
3714 WeakSet.prototype, 'add',
3715 function add(value) {
3716 var S = strict(this);
3717 if (Type(S) !== 'object') throw TypeError();
3718 if (S['[[WeakSetData]]'] === undefined) throw TypeError();
3719 if (Type(value) !== 'object') throw TypeError('Expected object');
3720 S['[[WeakSetData]]'].set(value, true);
3721 return S;
3722 });
3723
3724 // 23.4.3.2 WeakSet.prototype.constructor
3725 // 23.4.3.3 WeakSet.prototype.delete ( value )
3726 define(
3727 WeakSet.prototype, 'delete',
3728 function delete_(value) {
3729 var S = strict(this);
3730 if (Type(S) !== 'object') throw TypeError();
3731 if (S['[[WeakSetData]]'] === undefined) throw TypeError();
3732 if (Type(value) !== 'object') throw TypeError('Expected object');
3733 return S['[[WeakSetData]]'].remove(value);
3734 });
3735
3736 // 23.4.3.4 WeakSet.prototype.has ( value )
3737 define(
3738 WeakSet.prototype, 'has',
3739 function has(key) {
3740 var S = strict(this);
3741 if (Type(S) !== 'object') throw TypeError();
3742 if (S['[[WeakSetData]]'] === undefined) throw TypeError();
3743 if (Type(key) !== 'object') throw TypeError('Expected object');
3744 return S['[[WeakSetData]]'].has(key);
3745 });
3746
3747 // 23.4.3.5 WeakSet.prototype [ @@toStringTag ]
3748 define(global.WeakSet.prototype, $$toStringTag, 'WeakSet');
3749
3750 // 23.4.4 Properties of WeakSet Instances
3751
3752 // Polyfills for incomplete native implementations:
3753 (function() {
3754 var ws = new global.WeakSet();
3755 var orig = global.WeakSet.prototype.add;
3756 define(global.WeakSet.prototype, 'add', function add() {
3757 orig.apply(this, arguments);
3758 return this;
3759 }, ws.add({}) !== ws);
3760 }());
3761 }());
3762
3763 // ---------------------------------------
3764 // 24 Structured Data
3765 // ---------------------------------------
3766
3767 // ---------------------------------------
3768 // 24.1 ArrayBuffer Objects
3769 // ---------------------------------------
3770
3771 // See typedarray.js for TypedArray polyfill
3772
3773 (function() {
3774 if (!('ArrayBuffer' in global))
3775 return;
3776
3777 // 24.1.1 Abstract Operations For ArrayBuffer Objects
3778 // 24.1.1.1 AllocateArrayBuffer( constructor, byteLength )
3779 // 24.1.1.2 IsDetachedBuffer( arrayBuffer )
3780 // 24.1.1.3 DetachArrayBuffer( arrayBuffer )
3781 // 24.1.1.4 CloneArrayBuffer( srcBuffer, srcByteOffset [, cloneConstructor] )
3782 // 24.1.1.5 GetValueFromBuffer ( arrayBuffer, byteIndex, type, isLittleEndian )
3783 // 24.1.1.6 SetValueInBuffer ( arrayBuffer, byteIndex, type, value, isLittleEndian )
3784 // 24.1.2 The ArrayBuffer Constructor
3785 // 24.1.2.1 ArrayBuffer( length )
3786 // 24.1.3 Properties of the ArrayBuffer Constructor
3787
3788 // 24.1.3.1 ArrayBuffer.isView ( arg )
3789 define(
3790 ArrayBuffer, 'isView',
3791 function isView(arg) {
3792 if (Type(arg) !== 'object') return false;
3793 if ('buffer' in arg && arg.buffer instanceof ArrayBuffer) return true;
3794 return false;
3795 });
3796
3797 // 24.1.3.2 ArrayBuffer.prototype
3798 // 24.1.3.3 get ArrayBuffer [ @@species ]
3799 // 24.1.4 Properties of the ArrayBuffer Prototype Object
3800 // 24.1.4.1 get ArrayBuffer.prototype.byteLength
3801 // 24.1.4.2 ArrayBuffer.prototype.constructor
3802 // 24.1.4.3 ArrayBuffer.prototype.slice ( start , end)
3803
3804 // 24.1.4.4 ArrayBuffer.prototype [ @@toStringTag ]
3805 define(ArrayBuffer.prototype, $$toStringTag, 'ArrayBuffer');
3806
3807 // 24.1.5 Properties of the ArrayBuffer Instances
3808 }());
3809
3810 // ---------------------------------------
3811 // 24.2 DataView Objects
3812 // ---------------------------------------
3813
3814 // See typedarray.js for TypedArray polyfill
3815
3816 (function() {
3817 if (!('DataView' in global))
3818 return;
3819
3820 // 24.2.1 Abstract Operations For DataView Objects
3821 // 24.2.1.1 GetViewValue(view, requestIndex, isLittleEndian, type)
3822 // 24.2.1.2 SetViewValue(view, requestIndex, isLittleEndian, type, value)
3823 // 24.2.2 The DataView Constructor
3824 // 24.2.2.1 DataView (buffer [ , byteOffset [ , byteLength ] ] )
3825 // 24.2.3 Properties of the DataView Constructor
3826 // 24.2.3.1 DataView.prototype
3827 // 24.2.4 Properties of the DataView Prototype Object
3828 // 24.2.4.1 get DataView.prototype.buffer
3829 // 24.2.4.2 get DataView.prototype.byteLength
3830 // 24.2.4.3 get DataView.prototype.byteOffset
3831 // 24.2.4.4 DataView.prototype.constructor
3832 // 24.2.4.5 DataView.prototype.getFloat32 ( byteOffset [ , littleEndian ] )
3833 // 24.2.4.6 DataView.prototype.getFloat64 ( byteOffset [ , littleEndian ] )
3834 // 24.2.4.7 DataView.prototype.getInt8 ( byteOffset )
3835 // 24.2.4.8 DataView.prototype.getInt16 ( byteOffset [ , littleEndian ] )
3836 // 24.2.4.9 DataView.prototype.getInt32 ( byteOffset [ , littleEndian ] )
3837 // 24.2.4.10 DataView.prototype.getUint8 ( byteOffset )
3838 // 24.2.4.11 DataView.prototype.getUint16 ( byteOffset [ , littleEndian ] )
3839 // 24.2.4.12 DataView.prototype.getUint32 ( byteOffset [ , littleEndian ] )
3840 // 24.2.4.13 DataView.prototype.setFloat32 ( byteOffset, value [ , littleEndian ] )
3841 // 24.2.4.14 DataView.prototype.setFloat64 ( byteOffset, value [ , littleEndian ] )
3842 // 24.2.4.15 DataView.prototype.setInt8 ( byteOffset, value )
3843 // 24.2.4.16 DataView.prototype.setInt16 ( byteOffset, value [ , littleEndian ] )
3844 // 24.2.4.17 DataView.prototype.setInt32 ( byteOffset, value [ , littleEndian ] )
3845 // 24.2.4.18 DataView.prototype.setUint8 ( byteOffset, value )
3846 // 24.2.4.19 DataView.prototype.setUint16 ( byteOffset, value [ , littleEndian ] )
3847 // 24.2.4.20 DataView.prototype.setUint32 ( byteOffset, value [ , littleEndian ] )
3848
3849 // 24.2.4.21 DataView.prototype[ @@toStringTag ]
3850 define(DataView.prototype, $$toStringTag, 'DataView');
3851
3852 // 24.2.5 Properties of DataView Instances
3853 }());
3854
3855 // ---------------------------------------
3856 // 24.3 The JSON Object
3857 // ---------------------------------------
3858
3859 // 24.3.1 JSON.parse ( text [ , reviver ] )
3860 // 24.3.2 JSON.stringify ( value [ , replacer [ , space ] ] )
3861 // 24.3.3 JSON [ @@toStringTag ]
3862 define(JSON, $$toStringTag, 'JSON');
3863
3864 // ---------------------------------------
3865 // 25.1 Iteration
3866 // ---------------------------------------
3867
3868 // 25.1.1 Common Iteration Interfaces
3869 // 25.1.1.1 The Iterable Interface
3870 // 25.1.1.2 The Iterator Interface
3871 // 25.1.1.3 The IteratorResult Interface
3872
3873 // 25.1.2 The %IteratorPrototype% Object
3874 // Defined earlier, so other prototypes can reference it.
3875 // 25.1.2.1 %IteratorPrototype% [ @@iterator ] ( )
3876 define($IteratorPrototype$, $$iterator, function() {
3877 return this;
3878 });
3879
3880
3881 // ---------------------------------------
3882 // 25.4 Promise Objects
3883 // ---------------------------------------
3884
3885 (function() {
3886 // 25.4 Promise Objects
3887
3888 // 25.4.1 Promise Abstract Operations
3889
3890 // 25.4.1.1 PromiseCapability Records
3891 // 25.4.1.1.1 IfAbruptRejectPromise ( value, capability )
3892
3893 function IfAbruptRejectPromise(value, capability) {
3894 var rejectResult = capability['[[Reject]]'].call(undefined, value);
3895 return capability['[[Promise]]'];
3896 }
3897
3898 // 25.4.1.2 PromiseReaction Records
3899
3900 // 25.4.1.3 CreateResolvingFunctions ( promise )
3901
3902 function CreateResolvingFunctions(promise) {
3903 var alreadyResolved = {'[[value]]': false};
3904 var resolve = PromiseResolveFunction();
3905 set_internal(resolve, '[[Promise]]', promise);
3906 set_internal(resolve, '[[AlreadyResolved]]', alreadyResolved);
3907 var reject = PromiseRejectFunction();
3908 set_internal(reject, '[[Promise]]', promise);
3909 set_internal(reject, '[[AlreadyResolved]]', alreadyResolved);
3910 return { '[[Resolve]]': resolve, '[[Reject]]': reject};
3911 }
3912
3913 // 25.4.1.3.1 Promise Reject Functions
3914
3915 function PromiseRejectFunction() {
3916 var F = function(reason) {
3917 console.assert(Type(F['[[Promise]]']) === 'object');
3918 var promise = F['[[Promise]]'];
3919 var alreadyResolved = F['[[AlreadyResolved]]'];
3920 if (alreadyResolved['[[value]]']) return undefined;
3921 set_internal(alreadyResolved, '[[value]]', true);
3922 return RejectPromise(promise, reason);
3923 };
3924 return F;
3925 }
3926
3927 // 25.4.1.3.2 Promise Resolve Functions
3928
3929 function PromiseResolveFunction() {
3930 var F = function(resolution) {
3931 console.assert(Type(F['[[Promise]]']) === 'object');
3932 var promise = F['[[Promise]]'];
3933 var alreadyResolved = F['[[AlreadyResolved]]'];
3934 if (alreadyResolved['[[value]]']) return undefined;
3935 set_internal(alreadyResolved, '[[value]]', true);
3936
3937 if (SameValue(resolution, promise)) {
3938 var selfResolutionError = TypeError();
3939 return RejectPromise(promise, selfResolutionError);
3940 }
3941 if (Type(resolution) !== 'object')
3942 return FulfillPromise(promise, resolution);
3943 try {
3944 var then = resolution['then'];
3945 } catch(then) {
3946 return RejectPromise(promise, then);
3947 }
3948 if (!IsCallable(then))
3949 return FulfillPromise(promise, resolution);
3950 EnqueueJob('PromiseJobs', PromiseResolveThenableJob, [promise, resolution, then]);
3951 return undefined;
3952 };
3953 return F;
3954 }
3955
3956 // 25.4.1.4 FulfillPromise ( promise, value )
3957
3958 function FulfillPromise(promise, value) {
3959 console.assert(promise['[[PromiseState]]'] === 'pending');
3960 var reactions = promise['[[PromiseFulfillReactions]]'];
3961 set_internal(promise, '[[PromiseResult]]', value);
3962 set_internal(promise, '[[PromiseFulfillReactions]]', undefined);
3963 set_internal(promise, '[[PromiseRejectReactions]]', undefined);
3964 set_internal(promise, '[[PromiseState]]', 'fulfilled');
3965 return TriggerPromiseReactions(reactions, value);
3966 }
3967
3968 // 25.4.1.5 NewPromiseCapability ( C )
3969
3970 function NewPromiseCapability(c) {
3971 // To keep Promise hermetic, this doesn't look much like the spec.
3972 return CreatePromiseCapabilityRecord(undefined, c);
3973 }
3974
3975 // 25.4.1.5.1 CreatePromiseCapabilityRecord ( promise, constructor )
3976
3977 function CreatePromiseCapabilityRecord(promise, constructor) {
3978 // To keep Promise hermetic, this doesn't look much like the spec.
3979 console.assert(IsConstructor(constructor));
3980 var promiseCapability = {};
3981 set_internal(promiseCapability, '[[Promise]]', promise);
3982 set_internal(promiseCapability, '[[Resolve]]', undefined);
3983 set_internal(promiseCapability, '[[Reject]]', undefined);
3984 var executor = GetCapabilitiesExecutor();
3985 set_internal(executor, '[[Capability]]', promiseCapability);
3986
3987 // NOTE: Differs from spec; object is constructed here
3988 var constructorResult = promise = new constructor(executor);
3989 set_internal(promiseCapability, '[[Promise]]', promise);
3990
3991 if (!IsCallable(promiseCapability['[[Resolve]]'])) throw TypeError();
3992 if (!IsCallable(promiseCapability['[[Reject]]'])) throw TypeError();
3993 if (Type(constructorResult) === 'object' && !SameValue(promise, constructorResult)) throw TypeError();
3994 return promiseCapability;
3995 }
3996
3997 // 25.4.1.5.2 GetCapabilitiesExecutor Functions
3998
3999 function GetCapabilitiesExecutor() {
4000 var F = function(resolve, reject) {
4001 console.assert(F['[[Capability]]']);
4002 var promiseCapability = F['[[Capability]]'];
4003 if (promiseCapability['[[Resolve]]'] !== undefined) throw TypeError();
4004 if (promiseCapability['[[Reject]]'] !== undefined) throw TypeError();
4005 set_internal(promiseCapability, '[[Resolve]]', resolve);
4006 set_internal(promiseCapability, '[[Reject]]', reject);
4007 return undefined;
4008 };
4009 return F;
4010 }
4011
4012 // 25.4.1.6 IsPromise ( x )
4013
4014 function IsPromise(x) {
4015 if (Type(x) !== 'object') return false;
4016 if (!('[[PromiseState]]' in x)) return false;
4017 if (x['[[PromiseState]]'] === undefined) return false;
4018 return true;
4019 }
4020
4021 // 25.4.1.7 RejectPromise ( promise, reason )
4022
4023 function RejectPromise(promise, reason) {
4024 console.assert(promise['[[PromiseState]]'] === 'pending');
4025 var reactions = promise['[[PromiseRejectReactions]]'];
4026 set_internal(promise, '[[PromiseResult]]', reason);
4027 set_internal(promise, '[[PromiseFulfillReactions]]', undefined);
4028 set_internal(promise, '[[PromiseRejectReactions]]', undefined);
4029 set_internal(promise, '[[PromiseState]]', 'rejected');
4030 return TriggerPromiseReactions(reactions, reason);
4031 }
4032
4033 // 25.4.1.8 TriggerPromiseReactions ( reactions, argument )
4034
4035 function TriggerPromiseReactions(reactions, argument) {
4036 for (var i = 0, len = reactions.length; i < len; ++i)
4037 EnqueueJob('PromiseJobs', PromiseReactionJob, [reactions[i], argument]);
4038 return undefined;
4039 }
4040
4041 // 25.4.2 Promise Jobs
4042
4043 // 25.4.2.1 PromiseReactionJob ( reaction, argument )
4044
4045 function PromiseReactionJob(reaction, argument) {
4046 var promiseCapability = reaction['[[Capabilities]]'];
4047 var handler = reaction['[[Handler]]'];
4048 var handlerResult, status;
4049 try {
4050 if (handler === 'Identity') handlerResult = argument;
4051 else if (handler === 'Thrower') throw argument;
4052 else handlerResult = handler.call(undefined, argument);
4053 } catch (handlerResult) {
4054 status = promiseCapability['[[Reject]]'].call(undefined, handlerResult);
4055 NextJob(status); return;
4056 }
4057 status = promiseCapability['[[Resolve]]'].call(undefined, handlerResult);
4058 NextJob(status);
4059 }
4060
4061 // 25.4.2.2 PromiseResolveThenableJob ( promiseToResolve, thenable, then)
4062
4063 function PromiseResolveThenableJob(promiseToResolve, thenable, then) {
4064 // SPEC BUG: promise vs. promiseToResolve
4065 var resolvingFunctions = CreateResolvingFunctions(promiseToResolve);
4066 try {
4067 var thenCallResult = then.call(thenable, resolvingFunctions['[[Resolve]]'],
4068 resolvingFunctions['[[Reject]]']);
4069 } catch (thenCallResult) {
4070 var status = resolvingFunctions['[[Reject]]'].call(undefined, thenCallResult);
4071 NextJob(status); return;
4072 }
4073 NextJob(thenCallResult);
4074 }
4075
4076 // 25.4.3 The Promise Constructor
4077
4078 // 25.4.3.1 Promise ( executor )
4079
4080 function Promise(executor) {
4081 var config = { configurable: false, enumerable: false, writable: true, value: undefined };
4082 Object.defineProperty(this, '[[PromiseState]]', config);
4083 Object.defineProperty(this, '[[PromiseConstructor]]', config);
4084 Object.defineProperty(this, '[[PromiseResult]]', config);
4085 Object.defineProperty(this, '[[PromiseFulfillReactions]]', config);
4086 Object.defineProperty(this, '[[PromiseRejectReactions]]', config);
4087
4088 var promise = this;
4089 if (Type(promise) !== 'object') throw new TypeError();
4090 if (!('[[PromiseState]]' in promise)) throw TypeError();
4091 if (promise['[[PromiseState]]'] !== undefined) throw TypeError();
4092 if (!IsCallable(executor)) throw TypeError();
4093
4094 set_internal(promise, '[[PromiseConstructor]]', Promise);
4095
4096 return InitializePromise(promise, executor);
4097 }
4098
4099 // 25.4.3.1.1 InitializePromise ( promise, executor )
4100
4101 function InitializePromise(promise, executor) {
4102 console.assert('[[PromiseState]]' in promise);
4103 console.assert(IsCallable(executor));
4104 set_internal(promise, '[[PromiseState]]', 'pending');
4105 set_internal(promise, '[[PromiseFulfillReactions]]', []);
4106 set_internal(promise, '[[PromiseRejectReactions]]', []);
4107 var resolvingFunctions = CreateResolvingFunctions(promise);
4108 try {
4109 var completion = executor.call(undefined, resolvingFunctions['[[Resolve]]'],
4110 resolvingFunctions['[[Reject]]']);
4111 } catch (completion) {
4112 var status = resolvingFunctions['[[Reject]]'].call(undefined, completion);
4113 }
4114 return promise;
4115 }
4116
4117 // 25.4.4 Properties of the Promise Constructor
4118 // 25.4.4.1 Promise.all ( iterable )
4119
4120 define(Promise, 'all', function all(iterable) {
4121 var c = strict(this);
4122 var promiseCapability = NewPromiseCapability(c);
4123 try {
4124 var iterator = GetIterator(iterable);
4125 } catch (value) {
4126 promiseCapability['[[Reject]]'].call(undefined, value);
4127 return promiseCapability['[[Promise]]'];
4128 }
4129 var values = [];
4130 var remainingElementsCount = { value: 1 };
4131 var index = 0;
4132 while (true) {
4133 try {
4134 var next = IteratorStep(iterator);
4135 } catch (value) {
4136 promiseCapability['[[Reject]]'].call(undefined, value);
4137 return promiseCapability['[[Promise]]'];
4138 }
4139 if (!next) {
4140 remainingElementsCount.value -= 1;
4141 if (remainingElementsCount.value === 0) {
4142 var resolveResult = promiseCapability['[[Resolve]]'].apply(undefined, values);
4143
4144
4145 }
4146 return promiseCapability['[[Promise]]'];
4147 }
4148 try {
4149 var nextValue = IteratorValue(next);
4150 } catch (value) {
4151 promiseCapability['[[Reject]]'].call(undefined, value);
4152 return promiseCapability['[[Promise]]'];
4153 }
4154 try {
4155 var nextPromise = c.resolve(nextValue);
4156 } catch (value) {
4157 promiseCapability['[[Reject]]'].call(undefined, value);
4158 return promiseCapability['[[Promise]]'];
4159 }
4160 var resolveElement = PromiseAllResolveElementFunction();
4161 set_internal(resolveElement, '[[AlreadyCalled]]', { value: false });
4162 set_internal(resolveElement, '[[Index]]', index);
4163 set_internal(resolveElement, '[[Values]]', values);
4164 set_internal(resolveElement, '[[Capabilities]]', promiseCapability);
4165 set_internal(resolveElement, '[[RemainingElements]]', remainingElementsCount);
4166 remainingElementsCount.value += 1;
4167 try {
4168 var result = nextPromise.then(resolveElement, promiseCapability['[[Reject]]']);
4169 } catch (value) {
4170 promiseCapability['[[Reject]]'].call(undefined, value);
4171 return promiseCapability['[[Promise]]'];
4172 }
4173 index += 1;
4174 }
4175 });
4176
4177 // 25.4.4.1.1 Promise.all Resolve Element Functions
4178
4179 function PromiseAllResolveElementFunction() {
4180 var F = function(x) {
4181 var alreadyCalled = F['[[AlreadyCalled]]'];
4182 if (alreadyCalled.value) return undefined;
4183 alreadyCalled.value = true;
4184 var index = F['[[Index]]'];
4185 var values = F['[[Values]]'];
4186 var promiseCapability = F['[[Capabilities]]'];
4187 var remainingElementsCount = F['[[RemainingElements]]'];
4188 try {
4189 values[index] = x;
4190 } catch (result) {
4191 promiseCapability['[[Reject]]'].call(undefined, result);
4192 return promiseCapability['[[Promise]]'];
4193 }
4194 remainingElementsCount.value -= 1;
4195 if (remainingElementsCount.value === 0)
4196 return promiseCapability['[[Resolve]]'].call(undefined, values);
4197 return undefined;
4198 };
4199 return F;
4200 }
4201
4202 // 25.4.4.2 Promise.prototype
4203
4204 Promise.prototype = {};
4205
4206 // 25.4.4.3 Promise.race ( iterable )
4207
4208 define(Promise, 'race', function race(iterable) {
4209 var c = strict(this);
4210 var promiseCapability = NewPromiseCapability(c);
4211 try {
4212 var iterator = GetIterator(iterable);
4213 } catch (value) {
4214 promiseCapability['[[Reject]]'].call(undefined, value);
4215 return promiseCapability['[[Promise]]'];
4216 }
4217 while (true) {
4218 try {
4219 var next = IteratorStep(iterator);
4220 } catch (value) {
4221 promiseCapability['[[Reject]]'].call(undefined, value);
4222 return promiseCapability['[[Promise]]'];
4223 }
4224 if (!next) return promiseCapability['[[Promise]]'];
4225 try {
4226 var nextValue = IteratorValue(next);
4227 } catch (value) {
4228 promiseCapability['[[Reject]]'].call(undefined, value);
4229 return promiseCapability['[[Promise]]'];
4230 }
4231 try {
4232 var nextPromise = c.resolve(nextValue);
4233 } catch (value) {
4234 promiseCapability['[[Reject]]'].call(undefined, value);
4235 return promiseCapability['[[Promise]]'];
4236 }
4237 try {
4238 nextPromise.then(promiseCapability['[[Resolve]]'], promiseCapability['[[Reject]]']);
4239 } catch (value) {
4240 promiseCapability['[[Reject]]'].call(undefined, value);
4241 return promiseCapability['[[Promise]]'];
4242 }
4243 }
4244 });
4245
4246 // 25.4.4.4 Promise.reject ( r )
4247
4248 define(Promise, 'reject', function reject(r) {
4249 var c = strict(this);
4250 var promiseCapability = NewPromiseCapability(c);
4251 var rejectResult = promiseCapability['[[Reject]]'].call(undefined, r);
4252 return promiseCapability['[[Promise]]'];
4253 });
4254
4255 // 25.4.4.5 Promise.resolve ( x )
4256
4257 define(Promise, 'resolve', function resolve(x) {
4258 var c = strict(this);
4259 if (IsPromise(x)) {
4260 var constructor = x['[[PromiseConstructor]]'];
4261 if (SameValue(constructor, c)) return x;
4262 }
4263 var promiseCapability = NewPromiseCapability(c);
4264 var resolveResult = promiseCapability['[[Resolve]]'].call(undefined, x);
4265 return promiseCapability['[[Promise]]'];
4266 });
4267
4268 // 25.4.4.6 Promise [ @@create ] ( )
4269 // 25.4.4.6.1 AllocatePromise ( constructor )
4270 // 25.4.5 Properties of the Promise Prototype Object
4271 // 25.4.5.1 Promise.prototype.catch ( onRejected )
4272
4273 define(Promise.prototype, 'catch', function catch_(onRejected) {
4274 var promise = this;
4275 return promise.then(undefined, onRejected);
4276 });
4277
4278 // 25.4.5.2 Promise.prototype.constructor
4279
4280 Promise.prototype.constructor = Promise;
4281
4282 // 25.4.5.3 Promise.prototype.then ( onFulfilled , onRejected )
4283
4284 define(Promise.prototype, 'then', function then(onFulfilled, onRejected) {
4285 var promise = this;
4286 if (!IsPromise(promise)) throw TypeError();
4287 if (!IsCallable(onFulfilled)) onFulfilled = 'Identity';
4288 if (!IsCallable(onRejected)) onRejected = 'Thrower';
4289 var c = promise.constructor;
4290 var promiseCapability = NewPromiseCapability(c);
4291 var fulfillReaction = { '[[Capabilities]]': promiseCapability,
4292 '[[Handler]]': onFulfilled };
4293 var rejectReaction = { '[[Capabilities]]': promiseCapability,
4294 '[[Handler]]': onRejected };
4295 if (promise['[[PromiseState]]'] === 'pending') {
4296 promise['[[PromiseFulfillReactions]]'].push(fulfillReaction);
4297 promise['[[PromiseRejectReactions]]'].push(rejectReaction);
4298 } else if (promise['[[PromiseState]]'] === 'fulfilled') {
4299 var value = promise['[[PromiseResult]]'];
4300 EnqueueJob('PromiseJobs', PromiseReactionJob, [fulfillReaction, value]);
4301 } else if (promise['[[PromiseState]]'] === 'rejected') {
4302 var reason = promise['[[PromiseResult]]'];
4303 EnqueueJob('PromiseJobs', PromiseReactionJob, [rejectReaction, reason]);
4304 }
4305 return promiseCapability['[[Promise]]'];
4306 });
4307
4308 // 25.4.6 Properties of Promise Instances
4309
4310 if (!('Promise' in global) || OVERRIDE_NATIVE_FOR_TESTING)
4311 global.Promise = Promise;
4312
4313 // Patch early Promise.cast vs. Promise.resolve implementations
4314 if ('cast' in global.Promise) global.Promise.resolve = global.Promise.cast;
4315 }());
4316
4317 // 25.4.5.1 Promise.prototype [ @@toStringTag ]
4318 define(Promise.prototype, $$toStringTag, 'Promise');
4319
4320 // ---------------------------------------
4321 // 26 Reflection
4322 // ---------------------------------------
4323
4324 (function() {
4325 // 26.1 The Reflect Object
4326 if (!('Reflect' in global) || OVERRIDE_NATIVE_FOR_TESTING)
4327 global.Reflect = {};
4328
4329 // 26.1.1 Reflect.apply ( target, thisArgument, argumentsList )
4330 define(
4331 Reflect, 'apply',
4332 function apply(target, thisArgument, argumentsList) {
4333 if (!IsCallable(target)) throw TypeError();
4334 return Function.prototype.apply.call(target, thisArgument, argumentsList);
4335 });
4336
4337 // 26.1.2 Reflect.construct ( target, argumentsList [, newTarget] )
4338 define(
4339 Reflect, 'construct',
4340 function construct(target, argumentsList) {
4341 return __cons(target, argumentsList);
4342 });
4343
4344 // 26.1.3 Reflect.defineProperty ( target, propertyKey, attributes )
4345 define(
4346 Reflect, 'defineProperty',
4347 function defineProperty(target, propertyKey, attributes) {
4348 try {
4349 Object.defineProperty(target, propertyKey, attributes);
4350 return true;
4351 } catch (_) {
4352 return false;
4353 }
4354 });
4355
4356 // 26.1.4 Reflect.deleteProperty ( target, propertyKey )
4357 define(
4358 Reflect, 'deleteProperty',
4359 function deleteProperty(target,name) {
4360 try {
4361 delete target[name];
4362 return !HasOwnProperty(target, name);
4363 } catch (_) {
4364 return false;
4365 }
4366 });
4367
4368 // 26.1.5 Reflect.enumerate ( target )
4369 define(
4370 Reflect, 'enumerate',
4371 function enumerate(target) {
4372 target = ToObject(target);
4373 var iterator = Enumerate(target);
4374 return iterator;
4375 });
4376
4377 // 26.1.6 Reflect.get ( target, propertyKey [ , receiver ])
4378 define(
4379 Reflect, 'get',
4380 function get(target, name, receiver) {
4381 target = ToObject(target);
4382 name = String(name);
4383 receiver = (receiver === undefined) ? target : ToObject(receiver);
4384 var desc = getPropertyDescriptor(target, name);
4385 if (desc && 'get' in desc)
4386 return Function.prototype.call.call(desc['get'], receiver);
4387 return target[name];
4388 });
4389
4390 // 26.1.7 Reflect.getOwnPropertyDescriptor ( target, propertyKey )
4391 define(
4392 Reflect, 'getOwnPropertyDescriptor',
4393 Object.getOwnPropertyDescriptor);
4394
4395 // 26.1.8 Reflect.getPrototypeOf ( target )
4396 define(
4397 Reflect, 'getPrototypeOf',
4398 Object.getPrototypeOf);
4399
4400 // 26.1.9 Reflect.has ( target, propertyKey )
4401 define(
4402 Reflect, 'has',
4403 function has(target,name) {
4404 return String(name) in ToObject(target);
4405 });
4406
4407 // 26.1.10 Reflect.isExtensible (target)
4408 define(
4409 Reflect, 'isExtensible',
4410 Object.isExtensible);
4411
4412 // 26.1.11 Reflect.ownKeys ( target )
4413 define(
4414 Reflect, 'ownKeys',
4415 function ownKeys(target) {
4416 var obj = ToObject(target);
4417 return Object.getOwnPropertyNames(obj);
4418 });
4419
4420 // 26.1.12 Reflect.preventExtensions ( target )
4421 define(
4422 Reflect, 'preventExtensions',
4423 function preventExtensions(target) {
4424 try { Object.preventExtensions(target); return true; } catch (_) { return false; }
4425 });
4426
4427 // 26.1.13 Reflect.set ( target, propertyKey, V [ , receiver ] )
4428 define(
4429 Reflect, 'set',
4430 function set(target, name, value, receiver) {
4431 target = ToObject(target);
4432 name = String(name);
4433 receiver = (receiver === undefined) ? target : ToObject(receiver);
4434 var desc = getPropertyDescriptor(target, name);
4435 try {
4436 if (desc && 'set' in desc)
4437 Function.prototype.call.call(desc['set'], receiver, value);
4438 else
4439 target[name] = value;
4440 return true;
4441 } catch (_) {
4442 return false;
4443 }
4444 });
4445
4446 // 26.1.14 Reflect.setPrototypeOf ( target, proto )
4447 define(
4448 Reflect, 'setPrototypeOf',
4449 function setPrototypeOf(target, proto) {
4450 try {
4451 target.__proto__ = proto;
4452 return Reflect.getPrototypeOf(target) === proto;
4453 } catch(_) {
4454 return false;
4455 }
4456 });
4457
4458 }());
4459
4460 // ---------------------------------------
4461 // 26.2 Proxy Objects
4462 // ---------------------------------------
4463
4464 // Not polyfillable.
4465
4466}(self));
4467
4468// This helper is defined outside the main scope so that the use of
4469// 'eval' does not taint the scope for minifiers.
4470function __cons(t, a) {
4471 return eval('new t(' + a.map(function(_, i) { return 'a[' + i + ']'; }).join(',') + ')');
4472}
6e0f24b1
IC
4473</script>
4474 <script>(function (root) {
4475 "use strict";
4476
4477/***** unorm.js *****/
4478
4479/*
4480 * UnicodeNormalizer 1.0.0
4481 * Copyright (c) 2008 Matsuza
4482 * Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses.
4483 * $Date: 2008-06-05 16:44:17 +0200 (Thu, 05 Jun 2008) $
4484 * $Rev: 13309 $
4485 */
4486
4487 var DEFAULT_FEATURE = [null, 0, {}];
4488 var CACHE_THRESHOLD = 10;
4489 var SBase = 0xAC00, LBase = 0x1100, VBase = 0x1161, TBase = 0x11A7, LCount = 19, VCount = 21, TCount = 28;
4490 var NCount = VCount * TCount; // 588
4491 var SCount = LCount * NCount; // 11172
4492
4493 var UChar = function(cp, feature){
4494 this.codepoint = cp;
4495 this.feature = feature;
4496 };
4497
4498 // Strategies
4499 var cache = {};
4500 var cacheCounter = [];
4501 for (var i = 0; i <= 0xFF; ++i){
4502 cacheCounter[i] = 0;
4503 }
4504
4505 function fromCache(next, cp, needFeature){
4506 var ret = cache[cp];
4507 if(!ret){
4508 ret = next(cp, needFeature);
4509 if(!!ret.feature && ++cacheCounter[(cp >> 8) & 0xFF] > CACHE_THRESHOLD){
4510 cache[cp] = ret;
4511 }
4512 }
4513 return ret;
4514 }
4515
4516 function fromData(next, cp, needFeature){
4517 var hash = cp & 0xFF00;
4518 var dunit = UChar.udata[hash] || {};
4519 var f = dunit[cp];
4520 return f ? new UChar(cp, f) : new UChar(cp, DEFAULT_FEATURE);
4521 }
4522 function fromCpOnly(next, cp, needFeature){
4523 return !!needFeature ? next(cp, needFeature) : new UChar(cp, null);
4524 }
4525 function fromRuleBasedJamo(next, cp, needFeature){
4526 var j;
4527 if(cp < LBase || (LBase + LCount <= cp && cp < SBase) || (SBase + SCount < cp)){
4528 return next(cp, needFeature);
4529 }
4530 if(LBase <= cp && cp < LBase + LCount){
4531 var c = {};
4532 var base = (cp - LBase) * VCount;
4533 for (j = 0; j < VCount; ++j){
4534 c[VBase + j] = SBase + TCount * (j + base);
4535 }
4536 return new UChar(cp, [,,c]);
4537 }
4538
4539 var SIndex = cp - SBase;
4540 var TIndex = SIndex % TCount;
4541 var feature = [];
4542 if(TIndex !== 0){
4543 feature[0] = [SBase + SIndex - TIndex, TBase + TIndex];
4544 } else {
4545 feature[0] = [LBase + Math.floor(SIndex / NCount), VBase + Math.floor((SIndex % NCount) / TCount)];
4546 feature[2] = {};
4547 for (j = 1; j < TCount; ++j){
4548 feature[2][TBase + j] = cp + j;
4549 }
4550 }
4551 return new UChar(cp, feature);
4552 }
4553 function fromCpFilter(next, cp, needFeature){
4554 return cp < 60 || 13311 < cp && cp < 42607 ? new UChar(cp, DEFAULT_FEATURE) : next(cp, needFeature);
4555 }
4556
4557 var strategies = [fromCpFilter, fromCache, fromCpOnly, fromRuleBasedJamo, fromData];
4558
4559 UChar.fromCharCode = strategies.reduceRight(function (next, strategy) {
4560 return function (cp, needFeature) {
4561 return strategy(next, cp, needFeature);
4562 };
4563 }, null);
4564
4565 UChar.isHighSurrogate = function(cp){
4566 return cp >= 0xD800 && cp <= 0xDBFF;
4567 };
4568 UChar.isLowSurrogate = function(cp){
4569 return cp >= 0xDC00 && cp <= 0xDFFF;
4570 };
4571
4572 UChar.prototype.prepFeature = function(){
4573 if(!this.feature){
4574 this.feature = UChar.fromCharCode(this.codepoint, true).feature;
4575 }
4576 };
4577
4578 UChar.prototype.toString = function(){
4579 if(this.codepoint < 0x10000){
4580 return String.fromCharCode(this.codepoint);
4581 } else {
4582 var x = this.codepoint - 0x10000;
4583 return String.fromCharCode(Math.floor(x / 0x400) + 0xD800, x % 0x400 + 0xDC00);
4584 }
4585 };
4586
4587 UChar.prototype.getDecomp = function(){
4588 this.prepFeature();
4589 return this.feature[0] || null;
4590 };
4591
4592 UChar.prototype.isCompatibility = function(){
4593 this.prepFeature();
4594 return !!this.feature[1] && (this.feature[1] & (1 << 8));
4595 };
4596 UChar.prototype.isExclude = function(){
4597 this.prepFeature();
4598 return !!this.feature[1] && (this.feature[1] & (1 << 9));
4599 };
4600 UChar.prototype.getCanonicalClass = function(){
4601 this.prepFeature();
4602 return !!this.feature[1] ? (this.feature[1] & 0xff) : 0;
4603 };
4604 UChar.prototype.getComposite = function(following){
4605 this.prepFeature();
4606 if(!this.feature[2]){
4607 return null;
4608 }
4609 var cp = this.feature[2][following.codepoint];
4610 return cp ? UChar.fromCharCode(cp) : null;
4611 };
4612
4613 var UCharIterator = function(str){
4614 this.str = str;
4615 this.cursor = 0;
4616 };
4617 UCharIterator.prototype.next = function(){
4618 if(!!this.str && this.cursor < this.str.length){
4619 var cp = this.str.charCodeAt(this.cursor++);
4620 var d;
4621 if(UChar.isHighSurrogate(cp) && this.cursor < this.str.length && UChar.isLowSurrogate((d = this.str.charCodeAt(this.cursor)))){
4622 cp = (cp - 0xD800) * 0x400 + (d -0xDC00) + 0x10000;
4623 ++this.cursor;
4624 }
4625 return UChar.fromCharCode(cp);
4626 } else {
4627 this.str = null;
4628 return null;
4629 }
4630 };
4631
4632 var RecursDecompIterator = function(it, cano){
4633 this.it = it;
4634 this.canonical = cano;
4635 this.resBuf = [];
4636 };
4637
4638 RecursDecompIterator.prototype.next = function(){
4639 function recursiveDecomp(cano, uchar){
4640 var decomp = uchar.getDecomp();
4641 if(!!decomp && !(cano && uchar.isCompatibility())){
4642 var ret = [];
4643 for(var i = 0; i < decomp.length; ++i){
4644 var a = recursiveDecomp(cano, UChar.fromCharCode(decomp[i]));
4645 ret = ret.concat(a);
4646 }
4647 return ret;
4648 } else {
4649 return [uchar];
4650 }
4651 }
4652 if(this.resBuf.length === 0){
4653 var uchar = this.it.next();
4654 if(!uchar){
4655 return null;
4656 }
4657 this.resBuf = recursiveDecomp(this.canonical, uchar);
4658 }
4659 return this.resBuf.shift();
4660 };
4661
4662 var DecompIterator = function(it){
4663 this.it = it;
4664 this.resBuf = [];
4665 };
4666
4667 DecompIterator.prototype.next = function(){
4668 var cc;
4669 if(this.resBuf.length === 0){
4670 do{
4671 var uchar = this.it.next();
4672 if(!uchar){
4673 break;
4674 }
4675 cc = uchar.getCanonicalClass();
4676 var inspt = this.resBuf.length;
4677 if(cc !== 0){
4678 for(; inspt > 0; --inspt){
4679 var uchar2 = this.resBuf[inspt - 1];
4680 var cc2 = uchar2.getCanonicalClass();
4681 if(cc2 <= cc){
4682 break;
4683 }
4684 }
4685 }
4686 this.resBuf.splice(inspt, 0, uchar);
4687 } while(cc !== 0);
4688 }
4689 return this.resBuf.shift();
4690 };
4691
4692 var CompIterator = function(it){
4693 this.it = it;
4694 this.procBuf = [];
4695 this.resBuf = [];
4696 this.lastClass = null;
4697 };
4698
4699 CompIterator.prototype.next = function(){
4700 while(this.resBuf.length === 0){
4701 var uchar = this.it.next();
4702 if(!uchar){
4703 this.resBuf = this.procBuf;
4704 this.procBuf = [];
4705 break;
4706 }
4707 if(this.procBuf.length === 0){
4708 this.lastClass = uchar.getCanonicalClass();
4709 this.procBuf.push(uchar);
4710 } else {
4711 var starter = this.procBuf[0];
4712 var composite = starter.getComposite(uchar);
4713 var cc = uchar.getCanonicalClass();
4714 if(!!composite && (this.lastClass < cc || this.lastClass === 0)){
4715 this.procBuf[0] = composite;
4716 } else {
4717 if(cc === 0){
4718 this.resBuf = this.procBuf;
4719 this.procBuf = [];
4720 }
4721 this.lastClass = cc;
4722 this.procBuf.push(uchar);
4723 }
4724 }
4725 }
4726 return this.resBuf.shift();
4727 };
4728
4729 var createIterator = function(mode, str){
4730 switch(mode){
4731 case "NFD":
4732 return new DecompIterator(new RecursDecompIterator(new UCharIterator(str), true));
4733 case "NFKD":
4734 return new DecompIterator(new RecursDecompIterator(new UCharIterator(str), false));
4735 case "NFC":
4736 return new CompIterator(new DecompIterator(new RecursDecompIterator(new UCharIterator(str), true)));
4737 case "NFKC":
4738 return new CompIterator(new DecompIterator(new RecursDecompIterator(new UCharIterator(str), false)));
4739 }
4740 throw mode + " is invalid";
4741 };
4742 var normalize = function(mode, str){
4743 var it = createIterator(mode, str);
4744 var ret = "";
4745 var uchar;
4746 while(!!(uchar = it.next())){
4747 ret += uchar.toString();
4748 }
4749 return ret;
4750 };
4751
4752 /* API functions */
4753 function nfd(str){
4754 return normalize("NFD", str);
4755 }
4756
4757 function nfkd(str){
4758 return normalize("NFKD", str);
4759 }
4760
4761 function nfc(str){
4762 return normalize("NFC", str);
4763 }
4764
4765 function nfkc(str){
4766 return normalize("NFKC", str);
4767 }
4768
4769/* Unicode data */
4770UChar.udata={
47710:{60:[,,{824:8814}],61:[,,{824:8800}],62:[,,{824:8815}],65:[,,{768:192,769:193,770:194,771:195,772:256,774:258,775:550,776:196,777:7842,778:197,780:461,783:512,785:514,803:7840,805:7680,808:260}],66:[,,{775:7682,803:7684,817:7686}],67:[,,{769:262,770:264,775:266,780:268,807:199}],68:[,,{775:7690,780:270,803:7692,807:7696,813:7698,817:7694}],69:[,,{768:200,769:201,770:202,771:7868,772:274,774:276,775:278,776:203,777:7866,780:282,783:516,785:518,803:7864,807:552,808:280,813:7704,816:7706}],70:[,,{775:7710}],71:[,,{769:500,770:284,772:7712,774:286,775:288,780:486,807:290}],72:[,,{770:292,775:7714,776:7718,780:542,803:7716,807:7720,814:7722}],73:[,,{768:204,769:205,770:206,771:296,772:298,774:300,775:304,776:207,777:7880,780:463,783:520,785:522,803:7882,808:302,816:7724}],74:[,,{770:308}],75:[,,{769:7728,780:488,803:7730,807:310,817:7732}],76:[,,{769:313,780:317,803:7734,807:315,813:7740,817:7738}],77:[,,{769:7742,775:7744,803:7746}],78:[,,{768:504,769:323,771:209,775:7748,780:327,803:7750,807:325,813:7754,817:7752}],79:[,,{768:210,769:211,770:212,771:213,772:332,774:334,775:558,776:214,777:7886,779:336,780:465,783:524,785:526,795:416,803:7884,808:490}],80:[,,{769:7764,775:7766}],82:[,,{769:340,775:7768,780:344,783:528,785:530,803:7770,807:342,817:7774}],83:[,,{769:346,770:348,775:7776,780:352,803:7778,806:536,807:350}],84:[,,{775:7786,780:356,803:7788,806:538,807:354,813:7792,817:7790}],85:[,,{768:217,769:218,770:219,771:360,772:362,774:364,776:220,777:7910,778:366,779:368,780:467,783:532,785:534,795:431,803:7908,804:7794,808:370,813:7798,816:7796}],86:[,,{771:7804,803:7806}],87:[,,{768:7808,769:7810,770:372,775:7814,776:7812,803:7816}],88:[,,{775:7818,776:7820}],89:[,,{768:7922,769:221,770:374,771:7928,772:562,775:7822,776:376,777:7926,803:7924}],90:[,,{769:377,770:7824,775:379,780:381,803:7826,817:7828}],97:[,,{768:224,769:225,770:226,771:227,772:257,774:259,775:551,776:228,777:7843,778:229,780:462,783:513,785:515,803:7841,805:7681,808:261}],98:[,,{775:7683,803:7685,817:7687}],99:[,,{769:263,770:265,775:267,780:269,807:231}],100:[,,{775:7691,780:271,803:7693,807:7697,813:7699,817:7695}],101:[,,{768:232,769:233,770:234,771:7869,772:275,774:277,775:279,776:235,777:7867,780:283,783:517,785:519,803:7865,807:553,808:281,813:7705,816:7707}],102:[,,{775:7711}],103:[,,{769:501,770:285,772:7713,774:287,775:289,780:487,807:291}],104:[,,{770:293,775:7715,776:7719,780:543,803:7717,807:7721,814:7723,817:7830}],105:[,,{768:236,769:237,770:238,771:297,772:299,774:301,776:239,777:7881,780:464,783:521,785:523,803:7883,808:303,816:7725}],106:[,,{770:309,780:496}],107:[,,{769:7729,780:489,803:7731,807:311,817:7733}],108:[,,{769:314,780:318,803:7735,807:316,813:7741,817:7739}],109:[,,{769:7743,775:7745,803:7747}],110:[,,{768:505,769:324,771:241,775:7749,780:328,803:7751,807:326,813:7755,817:7753}],111:[,,{768:242,769:243,770:244,771:245,772:333,774:335,775:559,776:246,777:7887,779:337,780:466,783:525,785:527,795:417,803:7885,808:491}],112:[,,{769:7765,775:7767}],114:[,,{769:341,775:7769,780:345,783:529,785:531,803:7771,807:343,817:7775}],115:[,,{769:347,770:349,775:7777,780:353,803:7779,806:537,807:351}],116:[,,{775:7787,776:7831,780:357,803:7789,806:539,807:355,813:7793,817:7791}],117:[,,{768:249,769:250,770:251,771:361,772:363,774:365,776:252,777:7911,778:367,779:369,780:468,783:533,785:535,795:432,803:7909,804:7795,808:371,813:7799,816:7797}],118:[,,{771:7805,803:7807}],119:[,,{768:7809,769:7811,770:373,775:7815,776:7813,778:7832,803:7817}],120:[,,{775:7819,776:7821}],121:[,,{768:7923,769:253,770:375,771:7929,772:563,775:7823,776:255,777:7927,778:7833,803:7925}],122:[,,{769:378,770:7825,775:380,780:382,803:7827,817:7829}],160:[[32],256],168:[[32,776],256,{768:8173,769:901,834:8129}],170:[[97],256],175:[[32,772],256],178:[[50],256],179:[[51],256],180:[[32,769],256],181:[[956],256],184:[[32,807],256],185:[[49],256],186:[[111],256],188:[[49,8260,52],256],189:[[49,8260,50],256],190:[[51,8260,52],256],192:[[65,768]],193:[[65,769]],194:[[65,770],,{768:7846,769:7844,771:7850,777:7848}],195:[[65,771]],196:[[65,776],,{772:478}],197:[[65,778],,{769:506}],198:[,,{769:508,772:482}],199:[[67,807],,{769:7688}],200:[[69,768]],201:[[69,769]],202:[[69,770],,{768:7872,769:7870,771:7876,777:7874}],203:[[69,776]],204:[[73,768]],205:[[73,769]],206:[[73,770]],207:[[73,776],,{769:7726}],209:[[78,771]],210:[[79,768]],211:[[79,769]],212:[[79,770],,{768:7890,769:7888,771:7894,777:7892}],213:[[79,771],,{769:7756,772:556,776:7758}],214:[[79,776],,{772:554}],216:[,,{769:510}],217:[[85,768]],218:[[85,769]],219:[[85,770]],220:[[85,776],,{768:475,769:471,772:469,780:473}],221:[[89,769]],224:[[97,768]],225:[[97,769]],226:[[97,770],,{768:7847,769:7845,771:7851,777:7849}],227:[[97,771]],228:[[97,776],,{772:479}],229:[[97,778],,{769:507}],230:[,,{769:509,772:483}],231:[[99,807],,{769:7689}],232:[[101,768]],233:[[101,769]],234:[[101,770],,{768:7873,769:7871,771:7877,777:7875}],235:[[101,776]],236:[[105,768]],237:[[105,769]],238:[[105,770]],239:[[105,776],,{769:7727}],241:[[110,771]],242:[[111,768]],243:[[111,769]],244:[[111,770],,{768:7891,769:7889,771:7895,777:7893}],245:[[111,771],,{769:7757,772:557,776:7759}],246:[[111,776],,{772:555}],248:[,,{769:511}],249:[[117,768]],250:[[117,769]],251:[[117,770]],252:[[117,776],,{768:476,769:472,772:470,780:474}],253:[[121,769]],255:[[121,776]]},
4772256:{256:[[65,772]],257:[[97,772]],258:[[65,774],,{768:7856,769:7854,771:7860,777:7858}],259:[[97,774],,{768:7857,769:7855,771:7861,777:7859}],260:[[65,808]],261:[[97,808]],262:[[67,769]],263:[[99,769]],264:[[67,770]],265:[[99,770]],266:[[67,775]],267:[[99,775]],268:[[67,780]],269:[[99,780]],270:[[68,780]],271:[[100,780]],274:[[69,772],,{768:7700,769:7702}],275:[[101,772],,{768:7701,769:7703}],276:[[69,774]],277:[[101,774]],278:[[69,775]],279:[[101,775]],280:[[69,808]],281:[[101,808]],282:[[69,780]],283:[[101,780]],284:[[71,770]],285:[[103,770]],286:[[71,774]],287:[[103,774]],288:[[71,775]],289:[[103,775]],290:[[71,807]],291:[[103,807]],292:[[72,770]],293:[[104,770]],296:[[73,771]],297:[[105,771]],298:[[73,772]],299:[[105,772]],300:[[73,774]],301:[[105,774]],302:[[73,808]],303:[[105,808]],304:[[73,775]],306:[[73,74],256],307:[[105,106],256],308:[[74,770]],309:[[106,770]],310:[[75,807]],311:[[107,807]],313:[[76,769]],314:[[108,769]],315:[[76,807]],316:[[108,807]],317:[[76,780]],318:[[108,780]],319:[[76,183],256],320:[[108,183],256],323:[[78,769]],324:[[110,769]],325:[[78,807]],326:[[110,807]],327:[[78,780]],328:[[110,780]],329:[[700,110],256],332:[[79,772],,{768:7760,769:7762}],333:[[111,772],,{768:7761,769:7763}],334:[[79,774]],335:[[111,774]],336:[[79,779]],337:[[111,779]],340:[[82,769]],341:[[114,769]],342:[[82,807]],343:[[114,807]],344:[[82,780]],345:[[114,780]],346:[[83,769],,{775:7780}],347:[[115,769],,{775:7781}],348:[[83,770]],349:[[115,770]],350:[[83,807]],351:[[115,807]],352:[[83,780],,{775:7782}],353:[[115,780],,{775:7783}],354:[[84,807]],355:[[116,807]],356:[[84,780]],357:[[116,780]],360:[[85,771],,{769:7800}],361:[[117,771],,{769:7801}],362:[[85,772],,{776:7802}],363:[[117,772],,{776:7803}],364:[[85,774]],365:[[117,774]],366:[[85,778]],367:[[117,778]],368:[[85,779]],369:[[117,779]],370:[[85,808]],371:[[117,808]],372:[[87,770]],373:[[119,770]],374:[[89,770]],375:[[121,770]],376:[[89,776]],377:[[90,769]],378:[[122,769]],379:[[90,775]],380:[[122,775]],381:[[90,780]],382:[[122,780]],383:[[115],256,{775:7835}],416:[[79,795],,{768:7900,769:7898,771:7904,777:7902,803:7906}],417:[[111,795],,{768:7901,769:7899,771:7905,777:7903,803:7907}],431:[[85,795],,{768:7914,769:7912,771:7918,777:7916,803:7920}],432:[[117,795],,{768:7915,769:7913,771:7919,777:7917,803:7921}],439:[,,{780:494}],452:[[68,381],256],453:[[68,382],256],454:[[100,382],256],455:[[76,74],256],456:[[76,106],256],457:[[108,106],256],458:[[78,74],256],459:[[78,106],256],460:[[110,106],256],461:[[65,780]],462:[[97,780]],463:[[73,780]],464:[[105,780]],465:[[79,780]],466:[[111,780]],467:[[85,780]],468:[[117,780]],469:[[220,772]],470:[[252,772]],471:[[220,769]],472:[[252,769]],473:[[220,780]],474:[[252,780]],475:[[220,768]],476:[[252,768]],478:[[196,772]],479:[[228,772]],480:[[550,772]],481:[[551,772]],482:[[198,772]],483:[[230,772]],486:[[71,780]],487:[[103,780]],488:[[75,780]],489:[[107,780]],490:[[79,808],,{772:492}],491:[[111,808],,{772:493}],492:[[490,772]],493:[[491,772]],494:[[439,780]],495:[[658,780]],496:[[106,780]],497:[[68,90],256],498:[[68,122],256],499:[[100,122],256],500:[[71,769]],501:[[103,769]],504:[[78,768]],505:[[110,768]],506:[[197,769]],507:[[229,769]],508:[[198,769]],509:[[230,769]],510:[[216,769]],511:[[248,769]],66045:[,220]},
4773512:{512:[[65,783]],513:[[97,783]],514:[[65,785]],515:[[97,785]],516:[[69,783]],517:[[101,783]],518:[[69,785]],519:[[101,785]],520:[[73,783]],521:[[105,783]],522:[[73,785]],523:[[105,785]],524:[[79,783]],525:[[111,783]],526:[[79,785]],527:[[111,785]],528:[[82,783]],529:[[114,783]],530:[[82,785]],531:[[114,785]],532:[[85,783]],533:[[117,783]],534:[[85,785]],535:[[117,785]],536:[[83,806]],537:[[115,806]],538:[[84,806]],539:[[116,806]],542:[[72,780]],543:[[104,780]],550:[[65,775],,{772:480}],551:[[97,775],,{772:481}],552:[[69,807],,{774:7708}],553:[[101,807],,{774:7709}],554:[[214,772]],555:[[246,772]],556:[[213,772]],557:[[245,772]],558:[[79,775],,{772:560}],559:[[111,775],,{772:561}],560:[[558,772]],561:[[559,772]],562:[[89,772]],563:[[121,772]],658:[,,{780:495}],688:[[104],256],689:[[614],256],690:[[106],256],691:[[114],256],692:[[633],256],693:[[635],256],694:[[641],256],695:[[119],256],696:[[121],256],728:[[32,774],256],729:[[32,775],256],730:[[32,778],256],731:[[32,808],256],732:[[32,771],256],733:[[32,779],256],736:[[611],256],737:[[108],256],738:[[115],256],739:[[120],256],740:[[661],256],66272:[,220]},
4774768:{768:[,230],769:[,230],770:[,230],771:[,230],772:[,230],773:[,230],774:[,230],775:[,230],776:[,230,{769:836}],777:[,230],778:[,230],779:[,230],780:[,230],781:[,230],782:[,230],783:[,230],784:[,230],785:[,230],786:[,230],787:[,230],788:[,230],789:[,232],790:[,220],791:[,220],792:[,220],793:[,220],794:[,232],795:[,216],796:[,220],797:[,220],798:[,220],799:[,220],800:[,220],801:[,202],802:[,202],803:[,220],804:[,220],805:[,220],806:[,220],807:[,202],808:[,202],809:[,220],810:[,220],811:[,220],812:[,220],813:[,220],814:[,220],815:[,220],816:[,220],817:[,220],818:[,220],819:[,220],820:[,1],821:[,1],822:[,1],823:[,1],824:[,1],825:[,220],826:[,220],827:[,220],828:[,220],829:[,230],830:[,230],831:[,230],832:[[768],230],833:[[769],230],834:[,230],835:[[787],230],836:[[776,769],230],837:[,240],838:[,230],839:[,220],840:[,220],841:[,220],842:[,230],843:[,230],844:[,230],845:[,220],846:[,220],848:[,230],849:[,230],850:[,230],851:[,220],852:[,220],853:[,220],854:[,220],855:[,230],856:[,232],857:[,220],858:[,220],859:[,230],860:[,233],861:[,234],862:[,234],863:[,233],864:[,234],865:[,234],866:[,233],867:[,230],868:[,230],869:[,230],870:[,230],871:[,230],872:[,230],873:[,230],874:[,230],875:[,230],876:[,230],877:[,230],878:[,230],879:[,230],884:[[697]],890:[[32,837],256],894:[[59]],900:[[32,769],256],901:[[168,769]],902:[[913,769]],903:[[183]],904:[[917,769]],905:[[919,769]],906:[[921,769]],908:[[927,769]],910:[[933,769]],911:[[937,769]],912:[[970,769]],913:[,,{768:8122,769:902,772:8121,774:8120,787:7944,788:7945,837:8124}],917:[,,{768:8136,769:904,787:7960,788:7961}],919:[,,{768:8138,769:905,787:7976,788:7977,837:8140}],921:[,,{768:8154,769:906,772:8153,774:8152,776:938,787:7992,788:7993}],927:[,,{768:8184,769:908,787:8008,788:8009}],929:[,,{788:8172}],933:[,,{768:8170,769:910,772:8169,774:8168,776:939,788:8025}],937:[,,{768:8186,769:911,787:8040,788:8041,837:8188}],938:[[921,776]],939:[[933,776]],940:[[945,769],,{837:8116}],941:[[949,769]],942:[[951,769],,{837:8132}],943:[[953,769]],944:[[971,769]],945:[,,{768:8048,769:940,772:8113,774:8112,787:7936,788:7937,834:8118,837:8115}],949:[,,{768:8050,769:941,787:7952,788:7953}],951:[,,{768:8052,769:942,787:7968,788:7969,834:8134,837:8131}],953:[,,{768:8054,769:943,772:8145,774:8144,776:970,787:7984,788:7985,834:8150}],959:[,,{768:8056,769:972,787:8000,788:8001}],961:[,,{787:8164,788:8165}],965:[,,{768:8058,769:973,772:8161,774:8160,776:971,787:8016,788:8017,834:8166}],969:[,,{768:8060,769:974,787:8032,788:8033,834:8182,837:8179}],970:[[953,776],,{768:8146,769:912,834:8151}],971:[[965,776],,{768:8162,769:944,834:8167}],972:[[959,769]],973:[[965,769]],974:[[969,769],,{837:8180}],976:[[946],256],977:[[952],256],978:[[933],256,{769:979,776:980}],979:[[978,769]],980:[[978,776]],981:[[966],256],982:[[960],256],1008:[[954],256],1009:[[961],256],1010:[[962],256],1012:[[920],256],1013:[[949],256],1017:[[931],256],66422:[,230],66423:[,230],66424:[,230],66425:[,230],66426:[,230]},
47751024:{1024:[[1045,768]],1025:[[1045,776]],1027:[[1043,769]],1030:[,,{776:1031}],1031:[[1030,776]],1036:[[1050,769]],1037:[[1048,768]],1038:[[1059,774]],1040:[,,{774:1232,776:1234}],1043:[,,{769:1027}],1045:[,,{768:1024,774:1238,776:1025}],1046:[,,{774:1217,776:1244}],1047:[,,{776:1246}],1048:[,,{768:1037,772:1250,774:1049,776:1252}],1049:[[1048,774]],1050:[,,{769:1036}],1054:[,,{776:1254}],1059:[,,{772:1262,774:1038,776:1264,779:1266}],1063:[,,{776:1268}],1067:[,,{776:1272}],1069:[,,{776:1260}],1072:[,,{774:1233,776:1235}],1075:[,,{769:1107}],1077:[,,{768:1104,774:1239,776:1105}],1078:[,,{774:1218,776:1245}],1079:[,,{776:1247}],1080:[,,{768:1117,772:1251,774:1081,776:1253}],1081:[[1080,774]],1082:[,,{769:1116}],1086:[,,{776:1255}],1091:[,,{772:1263,774:1118,776:1265,779:1267}],1095:[,,{776:1269}],1099:[,,{776:1273}],1101:[,,{776:1261}],1104:[[1077,768]],1105:[[1077,776]],1107:[[1075,769]],1110:[,,{776:1111}],1111:[[1110,776]],1116:[[1082,769]],1117:[[1080,768]],1118:[[1091,774]],1140:[,,{783:1142}],1141:[,,{783:1143}],1142:[[1140,783]],1143:[[1141,783]],1155:[,230],1156:[,230],1157:[,230],1158:[,230],1159:[,230],1217:[[1046,774]],1218:[[1078,774]],1232:[[1040,774]],1233:[[1072,774]],1234:[[1040,776]],1235:[[1072,776]],1238:[[1045,774]],1239:[[1077,774]],1240:[,,{776:1242}],1241:[,,{776:1243}],1242:[[1240,776]],1243:[[1241,776]],1244:[[1046,776]],1245:[[1078,776]],1246:[[1047,776]],1247:[[1079,776]],1250:[[1048,772]],1251:[[1080,772]],1252:[[1048,776]],1253:[[1080,776]],1254:[[1054,776]],1255:[[1086,776]],1256:[,,{776:1258}],1257:[,,{776:1259}],1258:[[1256,776]],1259:[[1257,776]],1260:[[1069,776]],1261:[[1101,776]],1262:[[1059,772]],1263:[[1091,772]],1264:[[1059,776]],1265:[[1091,776]],1266:[[1059,779]],1267:[[1091,779]],1268:[[1063,776]],1269:[[1095,776]],1272:[[1067,776]],1273:[[1099,776]]},
47761280:{1415:[[1381,1410],256],1425:[,220],1426:[,230],1427:[,230],1428:[,230],1429:[,230],1430:[,220],1431:[,230],1432:[,230],1433:[,230],1434:[,222],1435:[,220],1436:[,230],1437:[,230],1438:[,230],1439:[,230],1440:[,230],1441:[,230],1442:[,220],1443:[,220],1444:[,220],1445:[,220],1446:[,220],1447:[,220],1448:[,230],1449:[,230],1450:[,220],1451:[,230],1452:[,230],1453:[,222],1454:[,228],1455:[,230],1456:[,10],1457:[,11],1458:[,12],1459:[,13],1460:[,14],1461:[,15],1462:[,16],1463:[,17],1464:[,18],1465:[,19],1466:[,19],1467:[,20],1468:[,21],1469:[,22],1471:[,23],1473:[,24],1474:[,25],1476:[,230],1477:[,220],1479:[,18]},
47771536:{1552:[,230],1553:[,230],1554:[,230],1555:[,230],1556:[,230],1557:[,230],1558:[,230],1559:[,230],1560:[,30],1561:[,31],1562:[,32],1570:[[1575,1619]],1571:[[1575,1620]],1572:[[1608,1620]],1573:[[1575,1621]],1574:[[1610,1620]],1575:[,,{1619:1570,1620:1571,1621:1573}],1608:[,,{1620:1572}],1610:[,,{1620:1574}],1611:[,27],1612:[,28],1613:[,29],1614:[,30],1615:[,31],1616:[,32],1617:[,33],1618:[,34],1619:[,230],1620:[,230],1621:[,220],1622:[,220],1623:[,230],1624:[,230],1625:[,230],1626:[,230],1627:[,230],1628:[,220],1629:[,230],1630:[,230],1631:[,220],1648:[,35],1653:[[1575,1652],256],1654:[[1608,1652],256],1655:[[1735,1652],256],1656:[[1610,1652],256],1728:[[1749,1620]],1729:[,,{1620:1730}],1730:[[1729,1620]],1746:[,,{1620:1747}],1747:[[1746,1620]],1749:[,,{1620:1728}],1750:[,230],1751:[,230],1752:[,230],1753:[,230],1754:[,230],1755:[,230],1756:[,230],1759:[,230],1760:[,230],1761:[,230],1762:[,230],1763:[,220],1764:[,230],1767:[,230],1768:[,230],1770:[,220],1771:[,230],1772:[,230],1773:[,220]},
47781792:{1809:[,36],1840:[,230],1841:[,220],1842:[,230],1843:[,230],1844:[,220],1845:[,230],1846:[,230],1847:[,220],1848:[,220],1849:[,220],1850:[,230],1851:[,220],1852:[,220],1853:[,230],1854:[,220],1855:[,230],1856:[,230],1857:[,230],1858:[,220],1859:[,230],1860:[,220],1861:[,230],1862:[,220],1863:[,230],1864:[,220],1865:[,230],1866:[,230],2027:[,230],2028:[,230],2029:[,230],2030:[,230],2031:[,230],2032:[,230],2033:[,230],2034:[,220],2035:[,230]},
47792048:{2070:[,230],2071:[,230],2072:[,230],2073:[,230],2075:[,230],2076:[,230],2077:[,230],2078:[,230],2079:[,230],2080:[,230],2081:[,230],2082:[,230],2083:[,230],2085:[,230],2086:[,230],2087:[,230],2089:[,230],2090:[,230],2091:[,230],2092:[,230],2093:[,230],2137:[,220],2138:[,220],2139:[,220],2276:[,230],2277:[,230],2278:[,220],2279:[,230],2280:[,230],2281:[,220],2282:[,230],2283:[,230],2284:[,230],2285:[,220],2286:[,220],2287:[,220],2288:[,27],2289:[,28],2290:[,29],2291:[,230],2292:[,230],2293:[,230],2294:[,220],2295:[,230],2296:[,230],2297:[,220],2298:[,220],2299:[,230],2300:[,230],2301:[,230],2302:[,230],2303:[,230]},
47802304:{2344:[,,{2364:2345}],2345:[[2344,2364]],2352:[,,{2364:2353}],2353:[[2352,2364]],2355:[,,{2364:2356}],2356:[[2355,2364]],2364:[,7],2381:[,9],2385:[,230],2386:[,220],2387:[,230],2388:[,230],2392:[[2325,2364],512],2393:[[2326,2364],512],2394:[[2327,2364],512],2395:[[2332,2364],512],2396:[[2337,2364],512],2397:[[2338,2364],512],2398:[[2347,2364],512],2399:[[2351,2364],512],2492:[,7],2503:[,,{2494:2507,2519:2508}],2507:[[2503,2494]],2508:[[2503,2519]],2509:[,9],2524:[[2465,2492],512],2525:[[2466,2492],512],2527:[[2479,2492],512]},
47812560:{2611:[[2610,2620],512],2614:[[2616,2620],512],2620:[,7],2637:[,9],2649:[[2582,2620],512],2650:[[2583,2620],512],2651:[[2588,2620],512],2654:[[2603,2620],512],2748:[,7],2765:[,9],68109:[,220],68111:[,230],68152:[,230],68153:[,1],68154:[,220],68159:[,9],68325:[,230],68326:[,220]},
47822816:{2876:[,7],2887:[,,{2878:2891,2902:2888,2903:2892}],2888:[[2887,2902]],2891:[[2887,2878]],2892:[[2887,2903]],2893:[,9],2908:[[2849,2876],512],2909:[[2850,2876],512],2962:[,,{3031:2964}],2964:[[2962,3031]],3014:[,,{3006:3018,3031:3020}],3015:[,,{3006:3019}],3018:[[3014,3006]],3019:[[3015,3006]],3020:[[3014,3031]],3021:[,9]},
47833072:{3142:[,,{3158:3144}],3144:[[3142,3158]],3149:[,9],3157:[,84],3158:[,91],3260:[,7],3263:[,,{3285:3264}],3264:[[3263,3285]],3270:[,,{3266:3274,3285:3271,3286:3272}],3271:[[3270,3285]],3272:[[3270,3286]],3274:[[3270,3266],,{3285:3275}],3275:[[3274,3285]],3277:[,9]},
47843328:{3398:[,,{3390:3402,3415:3404}],3399:[,,{3390:3403}],3402:[[3398,3390]],3403:[[3399,3390]],3404:[[3398,3415]],3405:[,9],3530:[,9],3545:[,,{3530:3546,3535:3548,3551:3550}],3546:[[3545,3530]],3548:[[3545,3535],,{3530:3549}],3549:[[3548,3530]],3550:[[3545,3551]]},
47853584:{3635:[[3661,3634],256],3640:[,103],3641:[,103],3642:[,9],3656:[,107],3657:[,107],3658:[,107],3659:[,107],3763:[[3789,3762],256],3768:[,118],3769:[,118],3784:[,122],3785:[,122],3786:[,122],3787:[,122],3804:[[3755,3737],256],3805:[[3755,3745],256]},
47863840:{3852:[[3851],256],3864:[,220],3865:[,220],3893:[,220],3895:[,220],3897:[,216],3907:[[3906,4023],512],3917:[[3916,4023],512],3922:[[3921,4023],512],3927:[[3926,4023],512],3932:[[3931,4023],512],3945:[[3904,4021],512],3953:[,129],3954:[,130],3955:[[3953,3954],512],3956:[,132],3957:[[3953,3956],512],3958:[[4018,3968],512],3959:[[4018,3969],256],3960:[[4019,3968],512],3961:[[4019,3969],256],3962:[,130],3963:[,130],3964:[,130],3965:[,130],3968:[,130],3969:[[3953,3968],512],3970:[,230],3971:[,230],3972:[,9],3974:[,230],3975:[,230],3987:[[3986,4023],512],3997:[[3996,4023],512],4002:[[4001,4023],512],4007:[[4006,4023],512],4012:[[4011,4023],512],4025:[[3984,4021],512],4038:[,220]},
47874096:{4133:[,,{4142:4134}],4134:[[4133,4142]],4151:[,7],4153:[,9],4154:[,9],4237:[,220],4348:[[4316],256],69702:[,9],69759:[,9],69785:[,,{69818:69786}],69786:[[69785,69818]],69787:[,,{69818:69788}],69788:[[69787,69818]],69797:[,,{69818:69803}],69803:[[69797,69818]],69817:[,9],69818:[,7]},
47884352:{69888:[,230],69889:[,230],69890:[,230],69934:[[69937,69927]],69935:[[69938,69927]],69937:[,,{69927:69934}],69938:[,,{69927:69935}],69939:[,9],69940:[,9],70003:[,7],70080:[,9]},
47894608:{70197:[,9],70198:[,7],70377:[,7],70378:[,9]},
47904864:{4957:[,230],4958:[,230],4959:[,230],70460:[,7],70471:[,,{70462:70475,70487:70476}],70475:[[70471,70462]],70476:[[70471,70487]],70477:[,9],70502:[,230],70503:[,230],70504:[,230],70505:[,230],70506:[,230],70507:[,230],70508:[,230],70512:[,230],70513:[,230],70514:[,230],70515:[,230],70516:[,230]},
47915120:{70841:[,,{70832:70844,70842:70843,70845:70846}],70843:[[70841,70842]],70844:[[70841,70832]],70846:[[70841,70845]],70850:[,9],70851:[,7]},
47925376:{71096:[,,{71087:71098}],71097:[,,{71087:71099}],71098:[[71096,71087]],71099:[[71097,71087]],71103:[,9],71104:[,7]},
47935632:{71231:[,9],71350:[,9],71351:[,7]},
47945888:{5908:[,9],5940:[,9],6098:[,9],6109:[,230]},
47956144:{6313:[,228]},
47966400:{6457:[,222],6458:[,230],6459:[,220]},
47976656:{6679:[,230],6680:[,220],6752:[,9],6773:[,230],6774:[,230],6775:[,230],6776:[,230],6777:[,230],6778:[,230],6779:[,230],6780:[,230],6783:[,220],6832:[,230],6833:[,230],6834:[,230],6835:[,230],6836:[,230],6837:[,220],6838:[,220],6839:[,220],6840:[,220],6841:[,220],6842:[,220],6843:[,230],6844:[,230],6845:[,220]},
47986912:{6917:[,,{6965:6918}],6918:[[6917,6965]],6919:[,,{6965:6920}],6920:[[6919,6965]],6921:[,,{6965:6922}],6922:[[6921,6965]],6923:[,,{6965:6924}],6924:[[6923,6965]],6925:[,,{6965:6926}],6926:[[6925,6965]],6929:[,,{6965:6930}],6930:[[6929,6965]],6964:[,7],6970:[,,{6965:6971}],6971:[[6970,6965]],6972:[,,{6965:6973}],6973:[[6972,6965]],6974:[,,{6965:6976}],6975:[,,{6965:6977}],6976:[[6974,6965]],6977:[[6975,6965]],6978:[,,{6965:6979}],6979:[[6978,6965]],6980:[,9],7019:[,230],7020:[,220],7021:[,230],7022:[,230],7023:[,230],7024:[,230],7025:[,230],7026:[,230],7027:[,230],7082:[,9],7083:[,9],7142:[,7],7154:[,9],7155:[,9]},
47997168:{7223:[,7],7376:[,230],7377:[,230],7378:[,230],7380:[,1],7381:[,220],7382:[,220],7383:[,220],7384:[,220],7385:[,220],7386:[,230],7387:[,230],7388:[,220],7389:[,220],7390:[,220],7391:[,220],7392:[,230],7394:[,1],7395:[,1],7396:[,1],7397:[,1],7398:[,1],7399:[,1],7400:[,1],7405:[,220],7412:[,230],7416:[,230],7417:[,230]},
48007424:{7468:[[65],256],7469:[[198],256],7470:[[66],256],7472:[[68],256],7473:[[69],256],7474:[[398],256],7475:[[71],256],7476:[[72],256],7477:[[73],256],7478:[[74],256],7479:[[75],256],7480:[[76],256],7481:[[77],256],7482:[[78],256],7484:[[79],256],7485:[[546],256],7486:[[80],256],7487:[[82],256],7488:[[84],256],7489:[[85],256],7490:[[87],256],7491:[[97],256],7492:[[592],256],7493:[[593],256],7494:[[7426],256],7495:[[98],256],7496:[[100],256],7497:[[101],256],7498:[[601],256],7499:[[603],256],7500:[[604],256],7501:[[103],256],7503:[[107],256],7504:[[109],256],7505:[[331],256],7506:[[111],256],7507:[[596],256],7508:[[7446],256],7509:[[7447],256],7510:[[112],256],7511:[[116],256],7512:[[117],256],7513:[[7453],256],7514:[[623],256],7515:[[118],256],7516:[[7461],256],7517:[[946],256],7518:[[947],256],7519:[[948],256],7520:[[966],256],7521:[[967],256],7522:[[105],256],7523:[[114],256],7524:[[117],256],7525:[[118],256],7526:[[946],256],7527:[[947],256],7528:[[961],256],7529:[[966],256],7530:[[967],256],7544:[[1085],256],7579:[[594],256],7580:[[99],256],7581:[[597],256],7582:[[240],256],7583:[[604],256],7584:[[102],256],7585:[[607],256],7586:[[609],256],7587:[[613],256],7588:[[616],256],7589:[[617],256],7590:[[618],256],7591:[[7547],256],7592:[[669],256],7593:[[621],256],7594:[[7557],256],7595:[[671],256],7596:[[625],256],7597:[[624],256],7598:[[626],256],7599:[[627],256],7600:[[628],256],7601:[[629],256],7602:[[632],256],7603:[[642],256],7604:[[643],256],7605:[[427],256],7606:[[649],256],7607:[[650],256],7608:[[7452],256],7609:[[651],256],7610:[[652],256],7611:[[122],256],7612:[[656],256],7613:[[657],256],7614:[[658],256],7615:[[952],256],7616:[,230],7617:[,230],7618:[,220],7619:[,230],7620:[,230],7621:[,230],7622:[,230],7623:[,230],7624:[,230],7625:[,230],7626:[,220],7627:[,230],7628:[,230],7629:[,234],7630:[,214],7631:[,220],7632:[,202],7633:[,230],7634:[,230],7635:[,230],7636:[,230],7637:[,230],7638:[,230],7639:[,230],7640:[,230],7641:[,230],7642:[,230],7643:[,230],7644:[,230],7645:[,230],7646:[,230],7647:[,230],7648:[,230],7649:[,230],7650:[,230],7651:[,230],7652:[,230],7653:[,230],7654:[,230],7655:[,230],7656:[,230],7657:[,230],7658:[,230],7659:[,230],7660:[,230],7661:[,230],7662:[,230],7663:[,230],7664:[,230],7665:[,230],7666:[,230],7667:[,230],7668:[,230],7669:[,230],7676:[,233],7677:[,220],7678:[,230],7679:[,220]},
48017680:{7680:[[65,805]],7681:[[97,805]],7682:[[66,775]],7683:[[98,775]],7684:[[66,803]],7685:[[98,803]],7686:[[66,817]],7687:[[98,817]],7688:[[199,769]],7689:[[231,769]],7690:[[68,775]],7691:[[100,775]],7692:[[68,803]],7693:[[100,803]],7694:[[68,817]],7695:[[100,817]],7696:[[68,807]],7697:[[100,807]],7698:[[68,813]],7699:[[100,813]],7700:[[274,768]],7701:[[275,768]],7702:[[274,769]],7703:[[275,769]],7704:[[69,813]],7705:[[101,813]],7706:[[69,816]],7707:[[101,816]],7708:[[552,774]],7709:[[553,774]],7710:[[70,775]],7711:[[102,775]],7712:[[71,772]],7713:[[103,772]],7714:[[72,775]],7715:[[104,775]],7716:[[72,803]],7717:[[104,803]],7718:[[72,776]],7719:[[104,776]],7720:[[72,807]],7721:[[104,807]],7722:[[72,814]],7723:[[104,814]],7724:[[73,816]],7725:[[105,816]],7726:[[207,769]],7727:[[239,769]],7728:[[75,769]],7729:[[107,769]],7730:[[75,803]],7731:[[107,803]],7732:[[75,817]],7733:[[107,817]],7734:[[76,803],,{772:7736}],7735:[[108,803],,{772:7737}],7736:[[7734,772]],7737:[[7735,772]],7738:[[76,817]],7739:[[108,817]],7740:[[76,813]],7741:[[108,813]],7742:[[77,769]],7743:[[109,769]],7744:[[77,775]],7745:[[109,775]],7746:[[77,803]],7747:[[109,803]],7748:[[78,775]],7749:[[110,775]],7750:[[78,803]],7751:[[110,803]],7752:[[78,817]],7753:[[110,817]],7754:[[78,813]],7755:[[110,813]],7756:[[213,769]],7757:[[245,769]],7758:[[213,776]],7759:[[245,776]],7760:[[332,768]],7761:[[333,768]],7762:[[332,769]],7763:[[333,769]],7764:[[80,769]],7765:[[112,769]],7766:[[80,775]],7767:[[112,775]],7768:[[82,775]],7769:[[114,775]],7770:[[82,803],,{772:7772}],7771:[[114,803],,{772:7773}],7772:[[7770,772]],7773:[[7771,772]],7774:[[82,817]],7775:[[114,817]],7776:[[83,775]],7777:[[115,775]],7778:[[83,803],,{775:7784}],7779:[[115,803],,{775:7785}],7780:[[346,775]],7781:[[347,775]],7782:[[352,775]],7783:[[353,775]],7784:[[7778,775]],7785:[[7779,775]],7786:[[84,775]],7787:[[116,775]],7788:[[84,803]],7789:[[116,803]],7790:[[84,817]],7791:[[116,817]],7792:[[84,813]],7793:[[116,813]],7794:[[85,804]],7795:[[117,804]],7796:[[85,816]],7797:[[117,816]],7798:[[85,813]],7799:[[117,813]],7800:[[360,769]],7801:[[361,769]],7802:[[362,776]],7803:[[363,776]],7804:[[86,771]],7805:[[118,771]],7806:[[86,803]],7807:[[118,803]],7808:[[87,768]],7809:[[119,768]],7810:[[87,769]],7811:[[119,769]],7812:[[87,776]],7813:[[119,776]],7814:[[87,775]],7815:[[119,775]],7816:[[87,803]],7817:[[119,803]],7818:[[88,775]],7819:[[120,775]],7820:[[88,776]],7821:[[120,776]],7822:[[89,775]],7823:[[121,775]],7824:[[90,770]],7825:[[122,770]],7826:[[90,803]],7827:[[122,803]],7828:[[90,817]],7829:[[122,817]],7830:[[104,817]],7831:[[116,776]],7832:[[119,778]],7833:[[121,778]],7834:[[97,702],256],7835:[[383,775]],7840:[[65,803],,{770:7852,774:7862}],7841:[[97,803],,{770:7853,774:7863}],7842:[[65,777]],7843:[[97,777]],7844:[[194,769]],7845:[[226,769]],7846:[[194,768]],7847:[[226,768]],7848:[[194,777]],7849:[[226,777]],7850:[[194,771]],7851:[[226,771]],7852:[[7840,770]],7853:[[7841,770]],7854:[[258,769]],7855:[[259,769]],7856:[[258,768]],7857:[[259,768]],7858:[[258,777]],7859:[[259,777]],7860:[[258,771]],7861:[[259,771]],7862:[[7840,774]],7863:[[7841,774]],7864:[[69,803],,{770:7878}],7865:[[101,803],,{770:7879}],7866:[[69,777]],7867:[[101,777]],7868:[[69,771]],7869:[[101,771]],7870:[[202,769]],7871:[[234,769]],7872:[[202,768]],7873:[[234,768]],7874:[[202,777]],7875:[[234,777]],7876:[[202,771]],7877:[[234,771]],7878:[[7864,770]],7879:[[7865,770]],7880:[[73,777]],7881:[[105,777]],7882:[[73,803]],7883:[[105,803]],7884:[[79,803],,{770:7896}],7885:[[111,803],,{770:7897}],7886:[[79,777]],7887:[[111,777]],7888:[[212,769]],7889:[[244,769]],7890:[[212,768]],7891:[[244,768]],7892:[[212,777]],7893:[[244,777]],7894:[[212,771]],7895:[[244,771]],7896:[[7884,770]],7897:[[7885,770]],7898:[[416,769]],7899:[[417,769]],7900:[[416,768]],7901:[[417,768]],7902:[[416,777]],7903:[[417,777]],7904:[[416,771]],7905:[[417,771]],7906:[[416,803]],7907:[[417,803]],7908:[[85,803]],7909:[[117,803]],7910:[[85,777]],7911:[[117,777]],7912:[[431,769]],7913:[[432,769]],7914:[[431,768]],7915:[[432,768]],7916:[[431,777]],7917:[[432,777]],7918:[[431,771]],7919:[[432,771]],7920:[[431,803]],7921:[[432,803]],7922:[[89,768]],7923:[[121,768]],7924:[[89,803]],7925:[[121,803]],7926:[[89,777]],7927:[[121,777]],7928:[[89,771]],7929:[[121,771]]},
48027936:{7936:[[945,787],,{768:7938,769:7940,834:7942,837:8064}],7937:[[945,788],,{768:7939,769:7941,834:7943,837:8065}],7938:[[7936,768],,{837:8066}],7939:[[7937,768],,{837:8067}],7940:[[7936,769],,{837:8068}],7941:[[7937,769],,{837:8069}],7942:[[7936,834],,{837:8070}],7943:[[7937,834],,{837:8071}],7944:[[913,787],,{768:7946,769:7948,834:7950,837:8072}],7945:[[913,788],,{768:7947,769:7949,834:7951,837:8073}],7946:[[7944,768],,{837:8074}],7947:[[7945,768],,{837:8075}],7948:[[7944,769],,{837:8076}],7949:[[7945,769],,{837:8077}],7950:[[7944,834],,{837:8078}],7951:[[7945,834],,{837:8079}],7952:[[949,787],,{768:7954,769:7956}],7953:[[949,788],,{768:7955,769:7957}],7954:[[7952,768]],7955:[[7953,768]],7956:[[7952,769]],7957:[[7953,769]],7960:[[917,787],,{768:7962,769:7964}],7961:[[917,788],,{768:7963,769:7965}],7962:[[7960,768]],7963:[[7961,768]],7964:[[7960,769]],7965:[[7961,769]],7968:[[951,787],,{768:7970,769:7972,834:7974,837:8080}],7969:[[951,788],,{768:7971,769:7973,834:7975,837:8081}],7970:[[7968,768],,{837:8082}],7971:[[7969,768],,{837:8083}],7972:[[7968,769],,{837:8084}],7973:[[7969,769],,{837:8085}],7974:[[7968,834],,{837:8086}],7975:[[7969,834],,{837:8087}],7976:[[919,787],,{768:7978,769:7980,834:7982,837:8088}],7977:[[919,788],,{768:7979,769:7981,834:7983,837:8089}],7978:[[7976,768],,{837:8090}],7979:[[7977,768],,{837:8091}],7980:[[7976,769],,{837:8092}],7981:[[7977,769],,{837:8093}],7982:[[7976,834],,{837:8094}],7983:[[7977,834],,{837:8095}],7984:[[953,787],,{768:7986,769:7988,834:7990}],7985:[[953,788],,{768:7987,769:7989,834:7991}],7986:[[7984,768]],7987:[[7985,768]],7988:[[7984,769]],7989:[[7985,769]],7990:[[7984,834]],7991:[[7985,834]],7992:[[921,787],,{768:7994,769:7996,834:7998}],7993:[[921,788],,{768:7995,769:7997,834:7999}],7994:[[7992,768]],7995:[[7993,768]],7996:[[7992,769]],7997:[[7993,769]],7998:[[7992,834]],7999:[[7993,834]],8000:[[959,787],,{768:8002,769:8004}],8001:[[959,788],,{768:8003,769:8005}],8002:[[8000,768]],8003:[[8001,768]],8004:[[8000,769]],8005:[[8001,769]],8008:[[927,787],,{768:8010,769:8012}],8009:[[927,788],,{768:8011,769:8013}],8010:[[8008,768]],8011:[[8009,768]],8012:[[8008,769]],8013:[[8009,769]],8016:[[965,787],,{768:8018,769:8020,834:8022}],8017:[[965,788],,{768:8019,769:8021,834:8023}],8018:[[8016,768]],8019:[[8017,768]],8020:[[8016,769]],8021:[[8017,769]],8022:[[8016,834]],8023:[[8017,834]],8025:[[933,788],,{768:8027,769:8029,834:8031}],8027:[[8025,768]],8029:[[8025,769]],8031:[[8025,834]],8032:[[969,787],,{768:8034,769:8036,834:8038,837:8096}],8033:[[969,788],,{768:8035,769:8037,834:8039,837:8097}],8034:[[8032,768],,{837:8098}],8035:[[8033,768],,{837:8099}],8036:[[8032,769],,{837:8100}],8037:[[8033,769],,{837:8101}],8038:[[8032,834],,{837:8102}],8039:[[8033,834],,{837:8103}],8040:[[937,787],,{768:8042,769:8044,834:8046,837:8104}],8041:[[937,788],,{768:8043,769:8045,834:8047,837:8105}],8042:[[8040,768],,{837:8106}],8043:[[8041,768],,{837:8107}],8044:[[8040,769],,{837:8108}],8045:[[8041,769],,{837:8109}],8046:[[8040,834],,{837:8110}],8047:[[8041,834],,{837:8111}],8048:[[945,768],,{837:8114}],8049:[[940]],8050:[[949,768]],8051:[[941]],8052:[[951,768],,{837:8130}],8053:[[942]],8054:[[953,768]],8055:[[943]],8056:[[959,768]],8057:[[972]],8058:[[965,768]],8059:[[973]],8060:[[969,768],,{837:8178}],8061:[[974]],8064:[[7936,837]],8065:[[7937,837]],8066:[[7938,837]],8067:[[7939,837]],8068:[[7940,837]],8069:[[7941,837]],8070:[[7942,837]],8071:[[7943,837]],8072:[[7944,837]],8073:[[7945,837]],8074:[[7946,837]],8075:[[7947,837]],8076:[[7948,837]],8077:[[7949,837]],8078:[[7950,837]],8079:[[7951,837]],8080:[[7968,837]],8081:[[7969,837]],8082:[[7970,837]],8083:[[7971,837]],8084:[[7972,837]],8085:[[7973,837]],8086:[[7974,837]],8087:[[7975,837]],8088:[[7976,837]],8089:[[7977,837]],8090:[[7978,837]],8091:[[7979,837]],8092:[[7980,837]],8093:[[7981,837]],8094:[[7982,837]],8095:[[7983,837]],8096:[[8032,837]],8097:[[8033,837]],8098:[[8034,837]],8099:[[8035,837]],8100:[[8036,837]],8101:[[8037,837]],8102:[[8038,837]],8103:[[8039,837]],8104:[[8040,837]],8105:[[8041,837]],8106:[[8042,837]],8107:[[8043,837]],8108:[[8044,837]],8109:[[8045,837]],8110:[[8046,837]],8111:[[8047,837]],8112:[[945,774]],8113:[[945,772]],8114:[[8048,837]],8115:[[945,837]],8116:[[940,837]],8118:[[945,834],,{837:8119}],8119:[[8118,837]],8120:[[913,774]],8121:[[913,772]],8122:[[913,768]],8123:[[902]],8124:[[913,837]],8125:[[32,787],256],8126:[[953]],8127:[[32,787],256,{768:8141,769:8142,834:8143}],8128:[[32,834],256],8129:[[168,834]],8130:[[8052,837]],8131:[[951,837]],8132:[[942,837]],8134:[[951,834],,{837:8135}],8135:[[8134,837]],8136:[[917,768]],8137:[[904]],8138:[[919,768]],8139:[[905]],8140:[[919,837]],8141:[[8127,768]],8142:[[8127,769]],8143:[[8127,834]],8144:[[953,774]],8145:[[953,772]],8146:[[970,768]],8147:[[912]],8150:[[953,834]],8151:[[970,834]],8152:[[921,774]],8153:[[921,772]],8154:[[921,768]],8155:[[906]],8157:[[8190,768]],8158:[[8190,769]],8159:[[8190,834]],8160:[[965,774]],8161:[[965,772]],8162:[[971,768]],8163:[[944]],8164:[[961,787]],8165:[[961,788]],8166:[[965,834]],8167:[[971,834]],8168:[[933,774]],8169:[[933,772]],8170:[[933,768]],8171:[[910]],8172:[[929,788]],8173:[[168,768]],8174:[[901]],8175:[[96]],8178:[[8060,837]],8179:[[969,837]],8180:[[974,837]],8182:[[969,834],,{837:8183}],8183:[[8182,837]],8184:[[927,768]],8185:[[908]],8186:[[937,768]],8187:[[911]],8188:[[937,837]],8189:[[180]],8190:[[32,788],256,{768:8157,769:8158,834:8159}]},
48038192:{8192:[[8194]],8193:[[8195]],8194:[[32],256],8195:[[32],256],8196:[[32],256],8197:[[32],256],8198:[[32],256],8199:[[32],256],8200:[[32],256],8201:[[32],256],8202:[[32],256],8209:[[8208],256],8215:[[32,819],256],8228:[[46],256],8229:[[46,46],256],8230:[[46,46,46],256],8239:[[32],256],8243:[[8242,8242],256],8244:[[8242,8242,8242],256],8246:[[8245,8245],256],8247:[[8245,8245,8245],256],8252:[[33,33],256],8254:[[32,773],256],8263:[[63,63],256],8264:[[63,33],256],8265:[[33,63],256],8279:[[8242,8242,8242,8242],256],8287:[[32],256],8304:[[48],256],8305:[[105],256],8308:[[52],256],8309:[[53],256],8310:[[54],256],8311:[[55],256],8312:[[56],256],8313:[[57],256],8314:[[43],256],8315:[[8722],256],8316:[[61],256],8317:[[40],256],8318:[[41],256],8319:[[110],256],8320:[[48],256],8321:[[49],256],8322:[[50],256],8323:[[51],256],8324:[[52],256],8325:[[53],256],8326:[[54],256],8327:[[55],256],8328:[[56],256],8329:[[57],256],8330:[[43],256],8331:[[8722],256],8332:[[61],256],8333:[[40],256],8334:[[41],256],8336:[[97],256],8337:[[101],256],8338:[[111],256],8339:[[120],256],8340:[[601],256],8341:[[104],256],8342:[[107],256],8343:[[108],256],8344:[[109],256],8345:[[110],256],8346:[[112],256],8347:[[115],256],8348:[[116],256],8360:[[82,115],256],8400:[,230],8401:[,230],8402:[,1],8403:[,1],8404:[,230],8405:[,230],8406:[,230],8407:[,230],8408:[,1],8409:[,1],8410:[,1],8411:[,230],8412:[,230],8417:[,230],8421:[,1],8422:[,1],8423:[,230],8424:[,220],8425:[,230],8426:[,1],8427:[,1],8428:[,220],8429:[,220],8430:[,220],8431:[,220],8432:[,230]},
48048448:{8448:[[97,47,99],256],8449:[[97,47,115],256],8450:[[67],256],8451:[[176,67],256],8453:[[99,47,111],256],8454:[[99,47,117],256],8455:[[400],256],8457:[[176,70],256],8458:[[103],256],8459:[[72],256],8460:[[72],256],8461:[[72],256],8462:[[104],256],8463:[[295],256],8464:[[73],256],8465:[[73],256],8466:[[76],256],8467:[[108],256],8469:[[78],256],8470:[[78,111],256],8473:[[80],256],8474:[[81],256],8475:[[82],256],8476:[[82],256],8477:[[82],256],8480:[[83,77],256],8481:[[84,69,76],256],8482:[[84,77],256],8484:[[90],256],8486:[[937]],8488:[[90],256],8490:[[75]],8491:[[197]],8492:[[66],256],8493:[[67],256],8495:[[101],256],8496:[[69],256],8497:[[70],256],8499:[[77],256],8500:[[111],256],8501:[[1488],256],8502:[[1489],256],8503:[[1490],256],8504:[[1491],256],8505:[[105],256],8507:[[70,65,88],256],8508:[[960],256],8509:[[947],256],8510:[[915],256],8511:[[928],256],8512:[[8721],256],8517:[[68],256],8518:[[100],256],8519:[[101],256],8520:[[105],256],8521:[[106],256],8528:[[49,8260,55],256],8529:[[49,8260,57],256],8530:[[49,8260,49,48],256],8531:[[49,8260,51],256],8532:[[50,8260,51],256],8533:[[49,8260,53],256],8534:[[50,8260,53],256],8535:[[51,8260,53],256],8536:[[52,8260,53],256],8537:[[49,8260,54],256],8538:[[53,8260,54],256],8539:[[49,8260,56],256],8540:[[51,8260,56],256],8541:[[53,8260,56],256],8542:[[55,8260,56],256],8543:[[49,8260],256],8544:[[73],256],8545:[[73,73],256],8546:[[73,73,73],256],8547:[[73,86],256],8548:[[86],256],8549:[[86,73],256],8550:[[86,73,73],256],8551:[[86,73,73,73],256],8552:[[73,88],256],8553:[[88],256],8554:[[88,73],256],8555:[[88,73,73],256],8556:[[76],256],8557:[[67],256],8558:[[68],256],8559:[[77],256],8560:[[105],256],8561:[[105,105],256],8562:[[105,105,105],256],8563:[[105,118],256],8564:[[118],256],8565:[[118,105],256],8566:[[118,105,105],256],8567:[[118,105,105,105],256],8568:[[105,120],256],8569:[[120],256],8570:[[120,105],256],8571:[[120,105,105],256],8572:[[108],256],8573:[[99],256],8574:[[100],256],8575:[[109],256],8585:[[48,8260,51],256],8592:[,,{824:8602}],8594:[,,{824:8603}],8596:[,,{824:8622}],8602:[[8592,824]],8603:[[8594,824]],8622:[[8596,824]],8653:[[8656,824]],8654:[[8660,824]],8655:[[8658,824]],8656:[,,{824:8653}],8658:[,,{824:8655}],8660:[,,{824:8654}]},
48058704:{8707:[,,{824:8708}],8708:[[8707,824]],8712:[,,{824:8713}],8713:[[8712,824]],8715:[,,{824:8716}],8716:[[8715,824]],8739:[,,{824:8740}],8740:[[8739,824]],8741:[,,{824:8742}],8742:[[8741,824]],8748:[[8747,8747],256],8749:[[8747,8747,8747],256],8751:[[8750,8750],256],8752:[[8750,8750,8750],256],8764:[,,{824:8769}],8769:[[8764,824]],8771:[,,{824:8772}],8772:[[8771,824]],8773:[,,{824:8775}],8775:[[8773,824]],8776:[,,{824:8777}],8777:[[8776,824]],8781:[,,{824:8813}],8800:[[61,824]],8801:[,,{824:8802}],8802:[[8801,824]],8804:[,,{824:8816}],8805:[,,{824:8817}],8813:[[8781,824]],8814:[[60,824]],8815:[[62,824]],8816:[[8804,824]],8817:[[8805,824]],8818:[,,{824:8820}],8819:[,,{824:8821}],8820:[[8818,824]],8821:[[8819,824]],8822:[,,{824:8824}],8823:[,,{824:8825}],8824:[[8822,824]],8825:[[8823,824]],8826:[,,{824:8832}],8827:[,,{824:8833}],8828:[,,{824:8928}],8829:[,,{824:8929}],8832:[[8826,824]],8833:[[8827,824]],8834:[,,{824:8836}],8835:[,,{824:8837}],8836:[[8834,824]],8837:[[8835,824]],8838:[,,{824:8840}],8839:[,,{824:8841}],8840:[[8838,824]],8841:[[8839,824]],8849:[,,{824:8930}],8850:[,,{824:8931}],8866:[,,{824:8876}],8872:[,,{824:8877}],8873:[,,{824:8878}],8875:[,,{824:8879}],8876:[[8866,824]],8877:[[8872,824]],8878:[[8873,824]],8879:[[8875,824]],8882:[,,{824:8938}],8883:[,,{824:8939}],8884:[,,{824:8940}],8885:[,,{824:8941}],8928:[[8828,824]],8929:[[8829,824]],8930:[[8849,824]],8931:[[8850,824]],8938:[[8882,824]],8939:[[8883,824]],8940:[[8884,824]],8941:[[8885,824]]},
48068960:{9001:[[12296]],9002:[[12297]]},
48079216:{9312:[[49],256],9313:[[50],256],9314:[[51],256],9315:[[52],256],9316:[[53],256],9317:[[54],256],9318:[[55],256],9319:[[56],256],9320:[[57],256],9321:[[49,48],256],9322:[[49,49],256],9323:[[49,50],256],9324:[[49,51],256],9325:[[49,52],256],9326:[[49,53],256],9327:[[49,54],256],9328:[[49,55],256],9329:[[49,56],256],9330:[[49,57],256],9331:[[50,48],256],9332:[[40,49,41],256],9333:[[40,50,41],256],9334:[[40,51,41],256],9335:[[40,52,41],256],9336:[[40,53,41],256],9337:[[40,54,41],256],9338:[[40,55,41],256],9339:[[40,56,41],256],9340:[[40,57,41],256],9341:[[40,49,48,41],256],9342:[[40,49,49,41],256],9343:[[40,49,50,41],256],9344:[[40,49,51,41],256],9345:[[40,49,52,41],256],9346:[[40,49,53,41],256],9347:[[40,49,54,41],256],9348:[[40,49,55,41],256],9349:[[40,49,56,41],256],9350:[[40,49,57,41],256],9351:[[40,50,48,41],256],9352:[[49,46],256],9353:[[50,46],256],9354:[[51,46],256],9355:[[52,46],256],9356:[[53,46],256],9357:[[54,46],256],9358:[[55,46],256],9359:[[56,46],256],9360:[[57,46],256],9361:[[49,48,46],256],9362:[[49,49,46],256],9363:[[49,50,46],256],9364:[[49,51,46],256],9365:[[49,52,46],256],9366:[[49,53,46],256],9367:[[49,54,46],256],9368:[[49,55,46],256],9369:[[49,56,46],256],9370:[[49,57,46],256],9371:[[50,48,46],256],9372:[[40,97,41],256],9373:[[40,98,41],256],9374:[[40,99,41],256],9375:[[40,100,41],256],9376:[[40,101,41],256],9377:[[40,102,41],256],9378:[[40,103,41],256],9379:[[40,104,41],256],9380:[[40,105,41],256],9381:[[40,106,41],256],9382:[[40,107,41],256],9383:[[40,108,41],256],9384:[[40,109,41],256],9385:[[40,110,41],256],9386:[[40,111,41],256],9387:[[40,112,41],256],9388:[[40,113,41],256],9389:[[40,114,41],256],9390:[[40,115,41],256],9391:[[40,116,41],256],9392:[[40,117,41],256],9393:[[40,118,41],256],9394:[[40,119,41],256],9395:[[40,120,41],256],9396:[[40,121,41],256],9397:[[40,122,41],256],9398:[[65],256],9399:[[66],256],9400:[[67],256],9401:[[68],256],9402:[[69],256],9403:[[70],256],9404:[[71],256],9405:[[72],256],9406:[[73],256],9407:[[74],256],9408:[[75],256],9409:[[76],256],9410:[[77],256],9411:[[78],256],9412:[[79],256],9413:[[80],256],9414:[[81],256],9415:[[82],256],9416:[[83],256],9417:[[84],256],9418:[[85],256],9419:[[86],256],9420:[[87],256],9421:[[88],256],9422:[[89],256],9423:[[90],256],9424:[[97],256],9425:[[98],256],9426:[[99],256],9427:[[100],256],9428:[[101],256],9429:[[102],256],9430:[[103],256],9431:[[104],256],9432:[[105],256],9433:[[106],256],9434:[[107],256],9435:[[108],256],9436:[[109],256],9437:[[110],256],9438:[[111],256],9439:[[112],256],9440:[[113],256],9441:[[114],256],9442:[[115],256],9443:[[116],256],9444:[[117],256],9445:[[118],256],9446:[[119],256],9447:[[120],256],9448:[[121],256],9449:[[122],256],9450:[[48],256]},
480810752:{10764:[[8747,8747,8747,8747],256],10868:[[58,58,61],256],10869:[[61,61],256],10870:[[61,61,61],256],10972:[[10973,824],512]},
480911264:{11388:[[106],256],11389:[[86],256],11503:[,230],11504:[,230],11505:[,230]},
481011520:{11631:[[11617],256],11647:[,9],11744:[,230],11745:[,230],11746:[,230],11747:[,230],11748:[,230],11749:[,230],11750:[,230],11751:[,230],11752:[,230],11753:[,230],11754:[,230],11755:[,230],11756:[,230],11757:[,230],11758:[,230],11759:[,230],11760:[,230],11761:[,230],11762:[,230],11763:[,230],11764:[,230],11765:[,230],11766:[,230],11767:[,230],11768:[,230],11769:[,230],11770:[,230],11771:[,230],11772:[,230],11773:[,230],11774:[,230],11775:[,230]},
481111776:{11935:[[27597],256],12019:[[40863],256]},
481212032:{12032:[[19968],256],12033:[[20008],256],12034:[[20022],256],12035:[[20031],256],12036:[[20057],256],12037:[[20101],256],12038:[[20108],256],12039:[[20128],256],12040:[[20154],256],12041:[[20799],256],12042:[[20837],256],12043:[[20843],256],12044:[[20866],256],12045:[[20886],256],12046:[[20907],256],12047:[[20960],256],12048:[[20981],256],12049:[[20992],256],12050:[[21147],256],12051:[[21241],256],12052:[[21269],256],12053:[[21274],256],12054:[[21304],256],12055:[[21313],256],12056:[[21340],256],12057:[[21353],256],12058:[[21378],256],12059:[[21430],256],12060:[[21448],256],12061:[[21475],256],12062:[[22231],256],12063:[[22303],256],12064:[[22763],256],12065:[[22786],256],12066:[[22794],256],12067:[[22805],256],12068:[[22823],256],12069:[[22899],256],12070:[[23376],256],12071:[[23424],256],12072:[[23544],256],12073:[[23567],256],12074:[[23586],256],12075:[[23608],256],12076:[[23662],256],12077:[[23665],256],12078:[[24027],256],12079:[[24037],256],12080:[[24049],256],12081:[[24062],256],12082:[[24178],256],12083:[[24186],256],12084:[[24191],256],12085:[[24308],256],12086:[[24318],256],12087:[[24331],256],12088:[[24339],256],12089:[[24400],256],12090:[[24417],256],12091:[[24435],256],12092:[[24515],256],12093:[[25096],256],12094:[[25142],256],12095:[[25163],256],12096:[[25903],256],12097:[[25908],256],12098:[[25991],256],12099:[[26007],256],12100:[[26020],256],12101:[[26041],256],12102:[[26080],256],12103:[[26085],256],12104:[[26352],256],12105:[[26376],256],12106:[[26408],256],12107:[[27424],256],12108:[[27490],256],12109:[[27513],256],12110:[[27571],256],12111:[[27595],256],12112:[[27604],256],12113:[[27611],256],12114:[[27663],256],12115:[[27668],256],12116:[[27700],256],12117:[[28779],256],12118:[[29226],256],12119:[[29238],256],12120:[[29243],256],12121:[[29247],256],12122:[[29255],256],12123:[[29273],256],12124:[[29275],256],12125:[[29356],256],12126:[[29572],256],12127:[[29577],256],12128:[[29916],256],12129:[[29926],256],12130:[[29976],256],12131:[[29983],256],12132:[[29992],256],12133:[[30000],256],12134:[[30091],256],12135:[[30098],256],12136:[[30326],256],12137:[[30333],256],12138:[[30382],256],12139:[[30399],256],12140:[[30446],256],12141:[[30683],256],12142:[[30690],256],12143:[[30707],256],12144:[[31034],256],12145:[[31160],256],12146:[[31166],256],12147:[[31348],256],12148:[[31435],256],12149:[[31481],256],12150:[[31859],256],12151:[[31992],256],12152:[[32566],256],12153:[[32593],256],12154:[[32650],256],12155:[[32701],256],12156:[[32769],256],12157:[[32780],256],12158:[[32786],256],12159:[[32819],256],12160:[[32895],256],12161:[[32905],256],12162:[[33251],256],12163:[[33258],256],12164:[[33267],256],12165:[[33276],256],12166:[[33292],256],12167:[[33307],256],12168:[[33311],256],12169:[[33390],256],12170:[[33394],256],12171:[[33400],256],12172:[[34381],256],12173:[[34411],256],12174:[[34880],256],12175:[[34892],256],12176:[[34915],256],12177:[[35198],256],12178:[[35211],256],12179:[[35282],256],12180:[[35328],256],12181:[[35895],256],12182:[[35910],256],12183:[[35925],256],12184:[[35960],256],12185:[[35997],256],12186:[[36196],256],12187:[[36208],256],12188:[[36275],256],12189:[[36523],256],12190:[[36554],256],12191:[[36763],256],12192:[[36784],256],12193:[[36789],256],12194:[[37009],256],12195:[[37193],256],12196:[[37318],256],12197:[[37324],256],12198:[[37329],256],12199:[[38263],256],12200:[[38272],256],12201:[[38428],256],12202:[[38582],256],12203:[[38585],256],12204:[[38632],256],12205:[[38737],256],12206:[[38750],256],12207:[[38754],256],12208:[[38761],256],12209:[[38859],256],12210:[[38893],256],12211:[[38899],256],12212:[[38913],256],12213:[[39080],256],12214:[[39131],256],12215:[[39135],256],12216:[[39318],256],12217:[[39321],256],12218:[[39340],256],12219:[[39592],256],12220:[[39640],256],12221:[[39647],256],12222:[[39717],256],12223:[[39727],256],12224:[[39730],256],12225:[[39740],256],12226:[[39770],256],12227:[[40165],256],12228:[[40565],256],12229:[[40575],256],12230:[[40613],256],12231:[[40635],256],12232:[[40643],256],12233:[[40653],256],12234:[[40657],256],12235:[[40697],256],12236:[[40701],256],12237:[[40718],256],12238:[[40723],256],12239:[[40736],256],12240:[[40763],256],12241:[[40778],256],12242:[[40786],256],12243:[[40845],256],12244:[[40860],256],12245:[[40864],256]},
481312288:{12288:[[32],256],12330:[,218],12331:[,228],12332:[,232],12333:[,222],12334:[,224],12335:[,224],12342:[[12306],256],12344:[[21313],256],12345:[[21316],256],12346:[[21317],256],12358:[,,{12441:12436}],12363:[,,{12441:12364}],12364:[[12363,12441]],12365:[,,{12441:12366}],12366:[[12365,12441]],12367:[,,{12441:12368}],12368:[[12367,12441]],12369:[,,{12441:12370}],12370:[[12369,12441]],12371:[,,{12441:12372}],12372:[[12371,12441]],12373:[,,{12441:12374}],12374:[[12373,12441]],12375:[,,{12441:12376}],12376:[[12375,12441]],12377:[,,{12441:12378}],12378:[[12377,12441]],12379:[,,{12441:12380}],12380:[[12379,12441]],12381:[,,{12441:12382}],12382:[[12381,12441]],12383:[,,{12441:12384}],12384:[[12383,12441]],12385:[,,{12441:12386}],12386:[[12385,12441]],12388:[,,{12441:12389}],12389:[[12388,12441]],12390:[,,{12441:12391}],12391:[[12390,12441]],12392:[,,{12441:12393}],12393:[[12392,12441]],12399:[,,{12441:12400,12442:12401}],12400:[[12399,12441]],12401:[[12399,12442]],12402:[,,{12441:12403,12442:12404}],12403:[[12402,12441]],12404:[[12402,12442]],12405:[,,{12441:12406,12442:12407}],12406:[[12405,12441]],12407:[[12405,12442]],12408:[,,{12441:12409,12442:12410}],12409:[[12408,12441]],12410:[[12408,12442]],12411:[,,{12441:12412,12442:12413}],12412:[[12411,12441]],12413:[[12411,12442]],12436:[[12358,12441]],12441:[,8],12442:[,8],12443:[[32,12441],256],12444:[[32,12442],256],12445:[,,{12441:12446}],12446:[[12445,12441]],12447:[[12424,12426],256],12454:[,,{12441:12532}],12459:[,,{12441:12460}],12460:[[12459,12441]],12461:[,,{12441:12462}],12462:[[12461,12441]],12463:[,,{12441:12464}],12464:[[12463,12441]],12465:[,,{12441:12466}],12466:[[12465,12441]],12467:[,,{12441:12468}],12468:[[12467,12441]],12469:[,,{12441:12470}],12470:[[12469,12441]],12471:[,,{12441:12472}],12472:[[12471,12441]],12473:[,,{12441:12474}],12474:[[12473,12441]],12475:[,,{12441:12476}],12476:[[12475,12441]],12477:[,,{12441:12478}],12478:[[12477,12441]],12479:[,,{12441:12480}],12480:[[12479,12441]],12481:[,,{12441:12482}],12482:[[12481,12441]],12484:[,,{12441:12485}],12485:[[12484,12441]],12486:[,,{12441:12487}],12487:[[12486,12441]],12488:[,,{12441:12489}],12489:[[12488,12441]],12495:[,,{12441:12496,12442:12497}],12496:[[12495,12441]],12497:[[12495,12442]],12498:[,,{12441:12499,12442:12500}],12499:[[12498,12441]],12500:[[12498,12442]],12501:[,,{12441:12502,12442:12503}],12502:[[12501,12441]],12503:[[12501,12442]],12504:[,,{12441:12505,12442:12506}],12505:[[12504,12441]],12506:[[12504,12442]],12507:[,,{12441:12508,12442:12509}],12508:[[12507,12441]],12509:[[12507,12442]],12527:[,,{12441:12535}],12528:[,,{12441:12536}],12529:[,,{12441:12537}],12530:[,,{12441:12538}],12532:[[12454,12441]],12535:[[12527,12441]],12536:[[12528,12441]],12537:[[12529,12441]],12538:[[12530,12441]],12541:[,,{12441:12542}],12542:[[12541,12441]],12543:[[12467,12488],256]},
481412544:{12593:[[4352],256],12594:[[4353],256],12595:[[4522],256],12596:[[4354],256],12597:[[4524],256],12598:[[4525],256],12599:[[4355],256],12600:[[4356],256],12601:[[4357],256],12602:[[4528],256],12603:[[4529],256],12604:[[4530],256],12605:[[4531],256],12606:[[4532],256],12607:[[4533],256],12608:[[4378],256],12609:[[4358],256],12610:[[4359],256],12611:[[4360],256],12612:[[4385],256],12613:[[4361],256],12614:[[4362],256],12615:[[4363],256],12616:[[4364],256],12617:[[4365],256],12618:[[4366],256],12619:[[4367],256],12620:[[4368],256],12621:[[4369],256],12622:[[4370],256],12623:[[4449],256],12624:[[4450],256],12625:[[4451],256],12626:[[4452],256],12627:[[4453],256],12628:[[4454],256],12629:[[4455],256],12630:[[4456],256],12631:[[4457],256],12632:[[4458],256],12633:[[4459],256],12634:[[4460],256],12635:[[4461],256],12636:[[4462],256],12637:[[4463],256],12638:[[4464],256],12639:[[4465],256],12640:[[4466],256],12641:[[4467],256],12642:[[4468],256],12643:[[4469],256],12644:[[4448],256],12645:[[4372],256],12646:[[4373],256],12647:[[4551],256],12648:[[4552],256],12649:[[4556],256],12650:[[4558],256],12651:[[4563],256],12652:[[4567],256],12653:[[4569],256],12654:[[4380],256],12655:[[4573],256],12656:[[4575],256],12657:[[4381],256],12658:[[4382],256],12659:[[4384],256],12660:[[4386],256],12661:[[4387],256],12662:[[4391],256],12663:[[4393],256],12664:[[4395],256],12665:[[4396],256],12666:[[4397],256],12667:[[4398],256],12668:[[4399],256],12669:[[4402],256],12670:[[4406],256],12671:[[4416],256],12672:[[4423],256],12673:[[4428],256],12674:[[4593],256],12675:[[4594],256],12676:[[4439],256],12677:[[4440],256],12678:[[4441],256],12679:[[4484],256],12680:[[4485],256],12681:[[4488],256],12682:[[4497],256],12683:[[4498],256],12684:[[4500],256],12685:[[4510],256],12686:[[4513],256],12690:[[19968],256],12691:[[20108],256],12692:[[19977],256],12693:[[22235],256],12694:[[19978],256],12695:[[20013],256],12696:[[19979],256],12697:[[30002],256],12698:[[20057],256],12699:[[19993],256],12700:[[19969],256],12701:[[22825],256],12702:[[22320],256],12703:[[20154],256]},
481512800:{12800:[[40,4352,41],256],12801:[[40,4354,41],256],12802:[[40,4355,41],256],12803:[[40,4357,41],256],12804:[[40,4358,41],256],12805:[[40,4359,41],256],12806:[[40,4361,41],256],12807:[[40,4363,41],256],12808:[[40,4364,41],256],12809:[[40,4366,41],256],12810:[[40,4367,41],256],12811:[[40,4368,41],256],12812:[[40,4369,41],256],12813:[[40,4370,41],256],12814:[[40,4352,4449,41],256],12815:[[40,4354,4449,41],256],12816:[[40,4355,4449,41],256],12817:[[40,4357,4449,41],256],12818:[[40,4358,4449,41],256],12819:[[40,4359,4449,41],256],12820:[[40,4361,4449,41],256],12821:[[40,4363,4449,41],256],12822:[[40,4364,4449,41],256],12823:[[40,4366,4449,41],256],12824:[[40,4367,4449,41],256],12825:[[40,4368,4449,41],256],12826:[[40,4369,4449,41],256],12827:[[40,4370,4449,41],256],12828:[[40,4364,4462,41],256],12829:[[40,4363,4457,4364,4453,4523,41],256],12830:[[40,4363,4457,4370,4462,41],256],12832:[[40,19968,41],256],12833:[[40,20108,41],256],12834:[[40,19977,41],256],12835:[[40,22235,41],256],12836:[[40,20116,41],256],12837:[[40,20845,41],256],12838:[[40,19971,41],256],12839:[[40,20843,41],256],12840:[[40,20061,41],256],12841:[[40,21313,41],256],12842:[[40,26376,41],256],12843:[[40,28779,41],256],12844:[[40,27700,41],256],12845:[[40,26408,41],256],12846:[[40,37329,41],256],12847:[[40,22303,41],256],12848:[[40,26085,41],256],12849:[[40,26666,41],256],12850:[[40,26377,41],256],12851:[[40,31038,41],256],12852:[[40,21517,41],256],12853:[[40,29305,41],256],12854:[[40,36001,41],256],12855:[[40,31069,41],256],12856:[[40,21172,41],256],12857:[[40,20195,41],256],12858:[[40,21628,41],256],12859:[[40,23398,41],256],12860:[[40,30435,41],256],12861:[[40,20225,41],256],12862:[[40,36039,41],256],12863:[[40,21332,41],256],12864:[[40,31085,41],256],12865:[[40,20241,41],256],12866:[[40,33258,41],256],12867:[[40,33267,41],256],12868:[[21839],256],12869:[[24188],256],12870:[[25991],256],12871:[[31631],256],12880:[[80,84,69],256],12881:[[50,49],256],12882:[[50,50],256],12883:[[50,51],256],12884:[[50,52],256],12885:[[50,53],256],12886:[[50,54],256],12887:[[50,55],256],12888:[[50,56],256],12889:[[50,57],256],12890:[[51,48],256],12891:[[51,49],256],12892:[[51,50],256],12893:[[51,51],256],12894:[[51,52],256],12895:[[51,53],256],12896:[[4352],256],12897:[[4354],256],12898:[[4355],256],12899:[[4357],256],12900:[[4358],256],12901:[[4359],256],12902:[[4361],256],12903:[[4363],256],12904:[[4364],256],12905:[[4366],256],12906:[[4367],256],12907:[[4368],256],12908:[[4369],256],12909:[[4370],256],12910:[[4352,4449],256],12911:[[4354,4449],256],12912:[[4355,4449],256],12913:[[4357,4449],256],12914:[[4358,4449],256],12915:[[4359,4449],256],12916:[[4361,4449],256],12917:[[4363,4449],256],12918:[[4364,4449],256],12919:[[4366,4449],256],12920:[[4367,4449],256],12921:[[4368,4449],256],12922:[[4369,4449],256],12923:[[4370,4449],256],12924:[[4366,4449,4535,4352,4457],256],12925:[[4364,4462,4363,4468],256],12926:[[4363,4462],256],12928:[[19968],256],12929:[[20108],256],12930:[[19977],256],12931:[[22235],256],12932:[[20116],256],12933:[[20845],256],12934:[[19971],256],12935:[[20843],256],12936:[[20061],256],12937:[[21313],256],12938:[[26376],256],12939:[[28779],256],12940:[[27700],256],12941:[[26408],256],12942:[[37329],256],12943:[[22303],256],12944:[[26085],256],12945:[[26666],256],12946:[[26377],256],12947:[[31038],256],12948:[[21517],256],12949:[[29305],256],12950:[[36001],256],12951:[[31069],256],12952:[[21172],256],12953:[[31192],256],12954:[[30007],256],12955:[[22899],256],12956:[[36969],256],12957:[[20778],256],12958:[[21360],256],12959:[[27880],256],12960:[[38917],256],12961:[[20241],256],12962:[[20889],256],12963:[[27491],256],12964:[[19978],256],12965:[[20013],256],12966:[[19979],256],12967:[[24038],256],12968:[[21491],256],12969:[[21307],256],12970:[[23447],256],12971:[[23398],256],12972:[[30435],256],12973:[[20225],256],12974:[[36039],256],12975:[[21332],256],12976:[[22812],256],12977:[[51,54],256],12978:[[51,55],256],12979:[[51,56],256],12980:[[51,57],256],12981:[[52,48],256],12982:[[52,49],256],12983:[[52,50],256],12984:[[52,51],256],12985:[[52,52],256],12986:[[52,53],256],12987:[[52,54],256],12988:[[52,55],256],12989:[[52,56],256],12990:[[52,57],256],12991:[[53,48],256],12992:[[49,26376],256],12993:[[50,26376],256],12994:[[51,26376],256],12995:[[52,26376],256],12996:[[53,26376],256],12997:[[54,26376],256],12998:[[55,26376],256],12999:[[56,26376],256],13000:[[57,26376],256],13001:[[49,48,26376],256],13002:[[49,49,26376],256],13003:[[49,50,26376],256],13004:[[72,103],256],13005:[[101,114,103],256],13006:[[101,86],256],13007:[[76,84,68],256],13008:[[12450],256],13009:[[12452],256],13010:[[12454],256],13011:[[12456],256],13012:[[12458],256],13013:[[12459],256],13014:[[12461],256],13015:[[12463],256],13016:[[12465],256],13017:[[12467],256],13018:[[12469],256],13019:[[12471],256],13020:[[12473],256],13021:[[12475],256],13022:[[12477],256],13023:[[12479],256],13024:[[12481],256],13025:[[12484],256],13026:[[12486],256],13027:[[12488],256],13028:[[12490],256],13029:[[12491],256],13030:[[12492],256],13031:[[12493],256],13032:[[12494],256],13033:[[12495],256],13034:[[12498],256],13035:[[12501],256],13036:[[12504],256],13037:[[12507],256],13038:[[12510],256],13039:[[12511],256],13040:[[12512],256],13041:[[12513],256],13042:[[12514],256],13043:[[12516],256],13044:[[12518],256],13045:[[12520],256],13046:[[12521],256],13047:[[12522],256],13048:[[12523],256],13049:[[12524],256],13050:[[12525],256],13051:[[12527],256],13052:[[12528],256],13053:[[12529],256],13054:[[12530],256]},
481613056:{13056:[[12450,12497,12540,12488],256],13057:[[12450,12523,12501,12449],256],13058:[[12450,12531,12506,12450],256],13059:[[12450,12540,12523],256],13060:[[12452,12491,12531,12464],256],13061:[[12452,12531,12481],256],13062:[[12454,12457,12531],256],13063:[[12456,12473,12463,12540,12489],256],13064:[[12456,12540,12459,12540],256],13065:[[12458,12531,12473],256],13066:[[12458,12540,12512],256],13067:[[12459,12452,12522],256],13068:[[12459,12521,12483,12488],256],13069:[[12459,12525,12522,12540],256],13070:[[12460,12525,12531],256],13071:[[12460,12531,12510],256],13072:[[12462,12460],256],13073:[[12462,12491,12540],256],13074:[[12461,12517,12522,12540],256],13075:[[12462,12523,12480,12540],256],13076:[[12461,12525],256],13077:[[12461,12525,12464,12521,12512],256],13078:[[12461,12525,12513,12540,12488,12523],256],13079:[[12461,12525,12527,12483,12488],256],13080:[[12464,12521,12512],256],13081:[[12464,12521,12512,12488,12531],256],13082:[[12463,12523,12476,12452,12525],256],13083:[[12463,12525,12540,12493],256],13084:[[12465,12540,12473],256],13085:[[12467,12523,12490],256],13086:[[12467,12540,12509],256],13087:[[12469,12452,12463,12523],256],13088:[[12469,12531,12481,12540,12512],256],13089:[[12471,12522,12531,12464],256],13090:[[12475,12531,12481],256],13091:[[12475,12531,12488],256],13092:[[12480,12540,12473],256],13093:[[12487,12471],256],13094:[[12489,12523],256],13095:[[12488,12531],256],13096:[[12490,12494],256],13097:[[12494,12483,12488],256],13098:[[12495,12452,12484],256],13099:[[12497,12540,12475,12531,12488],256],13100:[[12497,12540,12484],256],13101:[[12496,12540,12524,12523],256],13102:[[12500,12450,12473,12488,12523],256],13103:[[12500,12463,12523],256],13104:[[12500,12467],256],13105:[[12499,12523],256],13106:[[12501,12449,12521,12483,12489],256],13107:[[12501,12451,12540,12488],256],13108:[[12502,12483,12471,12455,12523],256],13109:[[12501,12521,12531],256],13110:[[12504,12463,12479,12540,12523],256],13111:[[12506,12477],256],13112:[[12506,12491,12498],256],13113:[[12504,12523,12484],256],13114:[[12506,12531,12473],256],13115:[[12506,12540,12472],256],13116:[[12505,12540,12479],256],13117:[[12509,12452,12531,12488],256],13118:[[12508,12523,12488],256],13119:[[12507,12531],256],13120:[[12509,12531,12489],256],13121:[[12507,12540,12523],256],13122:[[12507,12540,12531],256],13123:[[12510,12452,12463,12525],256],13124:[[12510,12452,12523],256],13125:[[12510,12483,12495],256],13126:[[12510,12523,12463],256],13127:[[12510,12531,12471,12519,12531],256],13128:[[12511,12463,12525,12531],256],13129:[[12511,12522],256],13130:[[12511,12522,12496,12540,12523],256],13131:[[12513,12460],256],13132:[[12513,12460,12488,12531],256],13133:[[12513,12540,12488,12523],256],13134:[[12516,12540,12489],256],13135:[[12516,12540,12523],256],13136:[[12518,12450,12531],256],13137:[[12522,12483,12488,12523],256],13138:[[12522,12521],256],13139:[[12523,12500,12540],256],13140:[[12523,12540,12502,12523],256],13141:[[12524,12512],256],13142:[[12524,12531,12488,12466,12531],256],13143:[[12527,12483,12488],256],13144:[[48,28857],256],13145:[[49,28857],256],13146:[[50,28857],256],13147:[[51,28857],256],13148:[[52,28857],256],13149:[[53,28857],256],13150:[[54,28857],256],13151:[[55,28857],256],13152:[[56,28857],256],13153:[[57,28857],256],13154:[[49,48,28857],256],13155:[[49,49,28857],256],13156:[[49,50,28857],256],13157:[[49,51,28857],256],13158:[[49,52,28857],256],13159:[[49,53,28857],256],13160:[[49,54,28857],256],13161:[[49,55,28857],256],13162:[[49,56,28857],256],13163:[[49,57,28857],256],13164:[[50,48,28857],256],13165:[[50,49,28857],256],13166:[[50,50,28857],256],13167:[[50,51,28857],256],13168:[[50,52,28857],256],13169:[[104,80,97],256],13170:[[100,97],256],13171:[[65,85],256],13172:[[98,97,114],256],13173:[[111,86],256],13174:[[112,99],256],13175:[[100,109],256],13176:[[100,109,178],256],13177:[[100,109,179],256],13178:[[73,85],256],13179:[[24179,25104],256],13180:[[26157,21644],256],13181:[[22823,27491],256],13182:[[26126,27835],256],13183:[[26666,24335,20250,31038],256],13184:[[112,65],256],13185:[[110,65],256],13186:[[956,65],256],13187:[[109,65],256],13188:[[107,65],256],13189:[[75,66],256],13190:[[77,66],256],13191:[[71,66],256],13192:[[99,97,108],256],13193:[[107,99,97,108],256],13194:[[112,70],256],13195:[[110,70],256],13196:[[956,70],256],13197:[[956,103],256],13198:[[109,103],256],13199:[[107,103],256],13200:[[72,122],256],13201:[[107,72,122],256],13202:[[77,72,122],256],13203:[[71,72,122],256],13204:[[84,72,122],256],13205:[[956,8467],256],13206:[[109,8467],256],13207:[[100,8467],256],13208:[[107,8467],256],13209:[[102,109],256],13210:[[110,109],256],13211:[[956,109],256],13212:[[109,109],256],13213:[[99,109],256],13214:[[107,109],256],13215:[[109,109,178],256],13216:[[99,109,178],256],13217:[[109,178],256],13218:[[107,109,178],256],13219:[[109,109,179],256],13220:[[99,109,179],256],13221:[[109,179],256],13222:[[107,109,179],256],13223:[[109,8725,115],256],13224:[[109,8725,115,178],256],13225:[[80,97],256],13226:[[107,80,97],256],13227:[[77,80,97],256],13228:[[71,80,97],256],13229:[[114,97,100],256],13230:[[114,97,100,8725,115],256],13231:[[114,97,100,8725,115,178],256],13232:[[112,115],256],13233:[[110,115],256],13234:[[956,115],256],13235:[[109,115],256],13236:[[112,86],256],13237:[[110,86],256],13238:[[956,86],256],13239:[[109,86],256],13240:[[107,86],256],13241:[[77,86],256],13242:[[112,87],256],13243:[[110,87],256],13244:[[956,87],256],13245:[[109,87],256],13246:[[107,87],256],13247:[[77,87],256],13248:[[107,937],256],13249:[[77,937],256],13250:[[97,46,109,46],256],13251:[[66,113],256],13252:[[99,99],256],13253:[[99,100],256],13254:[[67,8725,107,103],256],13255:[[67,111,46],256],13256:[[100,66],256],13257:[[71,121],256],13258:[[104,97],256],13259:[[72,80],256],13260:[[105,110],256],13261:[[75,75],256],13262:[[75,77],256],13263:[[107,116],256],13264:[[108,109],256],13265:[[108,110],256],13266:[[108,111,103],256],13267:[[108,120],256],13268:[[109,98],256],13269:[[109,105,108],256],13270:[[109,111,108],256],13271:[[80,72],256],13272:[[112,46,109,46],256],13273:[[80,80,77],256],13274:[[80,82],256],13275:[[115,114],256],13276:[[83,118],256],13277:[[87,98],256],13278:[[86,8725,109],256],13279:[[65,8725,109],256],13280:[[49,26085],256],13281:[[50,26085],256],13282:[[51,26085],256],13283:[[52,26085],256],13284:[[53,26085],256],13285:[[54,26085],256],13286:[[55,26085],256],13287:[[56,26085],256],13288:[[57,26085],256],13289:[[49,48,26085],256],13290:[[49,49,26085],256],13291:[[49,50,26085],256],13292:[[49,51,26085],256],13293:[[49,52,26085],256],13294:[[49,53,26085],256],13295:[[49,54,26085],256],13296:[[49,55,26085],256],13297:[[49,56,26085],256],13298:[[49,57,26085],256],13299:[[50,48,26085],256],13300:[[50,49,26085],256],13301:[[50,50,26085],256],13302:[[50,51,26085],256],13303:[[50,52,26085],256],13304:[[50,53,26085],256],13305:[[50,54,26085],256],13306:[[50,55,26085],256],13307:[[50,56,26085],256],13308:[[50,57,26085],256],13309:[[51,48,26085],256],13310:[[51,49,26085],256],13311:[[103,97,108],256]},
481727136:{92912:[,1],92913:[,1],92914:[,1],92915:[,1],92916:[,1]},
481827392:{92976:[,230],92977:[,230],92978:[,230],92979:[,230],92980:[,230],92981:[,230],92982:[,230]},
481942496:{42607:[,230],42612:[,230],42613:[,230],42614:[,230],42615:[,230],42616:[,230],42617:[,230],42618:[,230],42619:[,230],42620:[,230],42621:[,230],42652:[[1098],256],42653:[[1100],256],42655:[,230],42736:[,230],42737:[,230]},
482042752:{42864:[[42863],256],43000:[[294],256],43001:[[339],256]},
482143008:{43014:[,9],43204:[,9],43232:[,230],43233:[,230],43234:[,230],43235:[,230],43236:[,230],43237:[,230],43238:[,230],43239:[,230],43240:[,230],43241:[,230],43242:[,230],43243:[,230],43244:[,230],43245:[,230],43246:[,230],43247:[,230],43248:[,230],43249:[,230]},
482243264:{43307:[,220],43308:[,220],43309:[,220],43347:[,9],43443:[,7],43456:[,9]},
482343520:{43696:[,230],43698:[,230],43699:[,230],43700:[,220],43703:[,230],43704:[,230],43710:[,230],43711:[,230],43713:[,230],43766:[,9]},
482443776:{43868:[[42791],256],43869:[[43831],256],43870:[[619],256],43871:[[43858],256],44013:[,9]},
482548128:{113822:[,1]},
482653504:{119134:[[119127,119141],512],119135:[[119128,119141],512],119136:[[119135,119150],512],119137:[[119135,119151],512],119138:[[119135,119152],512],119139:[[119135,119153],512],119140:[[119135,119154],512],119141:[,216],119142:[,216],119143:[,1],119144:[,1],119145:[,1],119149:[,226],119150:[,216],119151:[,216],119152:[,216],119153:[,216],119154:[,216],119163:[,220],119164:[,220],119165:[,220],119166:[,220],119167:[,220],119168:[,220],119169:[,220],119170:[,220],119173:[,230],119174:[,230],119175:[,230],119176:[,230],119177:[,230],119178:[,220],119179:[,220],119210:[,230],119211:[,230],119212:[,230],119213:[,230],119227:[[119225,119141],512],119228:[[119226,119141],512],119229:[[119227,119150],512],119230:[[119228,119150],512],119231:[[119227,119151],512],119232:[[119228,119151],512]},
482753760:{119362:[,230],119363:[,230],119364:[,230]},
482854272:{119808:[[65],256],119809:[[66],256],119810:[[67],256],119811:[[68],256],119812:[[69],256],119813:[[70],256],119814:[[71],256],119815:[[72],256],119816:[[73],256],119817:[[74],256],119818:[[75],256],119819:[[76],256],119820:[[77],256],119821:[[78],256],119822:[[79],256],119823:[[80],256],119824:[[81],256],119825:[[82],256],119826:[[83],256],119827:[[84],256],119828:[[85],256],119829:[[86],256],119830:[[87],256],119831:[[88],256],119832:[[89],256],119833:[[90],256],119834:[[97],256],119835:[[98],256],119836:[[99],256],119837:[[100],256],119838:[[101],256],119839:[[102],256],119840:[[103],256],119841:[[104],256],119842:[[105],256],119843:[[106],256],119844:[[107],256],119845:[[108],256],119846:[[109],256],119847:[[110],256],119848:[[111],256],119849:[[112],256],119850:[[113],256],119851:[[114],256],119852:[[115],256],119853:[[116],256],119854:[[117],256],119855:[[118],256],119856:[[119],256],119857:[[120],256],119858:[[121],256],119859:[[122],256],119860:[[65],256],119861:[[66],256],119862:[[67],256],119863:[[68],256],119864:[[69],256],119865:[[70],256],119866:[[71],256],119867:[[72],256],119868:[[73],256],119869:[[74],256],119870:[[75],256],119871:[[76],256],119872:[[77],256],119873:[[78],256],119874:[[79],256],119875:[[80],256],119876:[[81],256],119877:[[82],256],119878:[[83],256],119879:[[84],256],119880:[[85],256],119881:[[86],256],119882:[[87],256],119883:[[88],256],119884:[[89],256],119885:[[90],256],119886:[[97],256],119887:[[98],256],119888:[[99],256],119889:[[100],256],119890:[[101],256],119891:[[102],256],119892:[[103],256],119894:[[105],256],119895:[[106],256],119896:[[107],256],119897:[[108],256],119898:[[109],256],119899:[[110],256],119900:[[111],256],119901:[[112],256],119902:[[113],256],119903:[[114],256],119904:[[115],256],119905:[[116],256],119906:[[117],256],119907:[[118],256],119908:[[119],256],119909:[[120],256],119910:[[121],256],119911:[[122],256],119912:[[65],256],119913:[[66],256],119914:[[67],256],119915:[[68],256],119916:[[69],256],119917:[[70],256],119918:[[71],256],119919:[[72],256],119920:[[73],256],119921:[[74],256],119922:[[75],256],119923:[[76],256],119924:[[77],256],119925:[[78],256],119926:[[79],256],119927:[[80],256],119928:[[81],256],119929:[[82],256],119930:[[83],256],119931:[[84],256],119932:[[85],256],119933:[[86],256],119934:[[87],256],119935:[[88],256],119936:[[89],256],119937:[[90],256],119938:[[97],256],119939:[[98],256],119940:[[99],256],119941:[[100],256],119942:[[101],256],119943:[[102],256],119944:[[103],256],119945:[[104],256],119946:[[105],256],119947:[[106],256],119948:[[107],256],119949:[[108],256],119950:[[109],256],119951:[[110],256],119952:[[111],256],119953:[[112],256],119954:[[113],256],119955:[[114],256],119956:[[115],256],119957:[[116],256],119958:[[117],256],119959:[[118],256],119960:[[119],256],119961:[[120],256],119962:[[121],256],119963:[[122],256],119964:[[65],256],119966:[[67],256],119967:[[68],256],119970:[[71],256],119973:[[74],256],119974:[[75],256],119977:[[78],256],119978:[[79],256],119979:[[80],256],119980:[[81],256],119982:[[83],256],119983:[[84],256],119984:[[85],256],119985:[[86],256],119986:[[87],256],119987:[[88],256],119988:[[89],256],119989:[[90],256],119990:[[97],256],119991:[[98],256],119992:[[99],256],119993:[[100],256],119995:[[102],256],119997:[[104],256],119998:[[105],256],119999:[[106],256],120000:[[107],256],120001:[[108],256],120002:[[109],256],120003:[[110],256],120005:[[112],256],120006:[[113],256],120007:[[114],256],120008:[[115],256],120009:[[116],256],120010:[[117],256],120011:[[118],256],120012:[[119],256],120013:[[120],256],120014:[[121],256],120015:[[122],256],120016:[[65],256],120017:[[66],256],120018:[[67],256],120019:[[68],256],120020:[[69],256],120021:[[70],256],120022:[[71],256],120023:[[72],256],120024:[[73],256],120025:[[74],256],120026:[[75],256],120027:[[76],256],120028:[[77],256],120029:[[78],256],120030:[[79],256],120031:[[80],256],120032:[[81],256],120033:[[82],256],120034:[[83],256],120035:[[84],256],120036:[[85],256],120037:[[86],256],120038:[[87],256],120039:[[88],256],120040:[[89],256],120041:[[90],256],120042:[[97],256],120043:[[98],256],120044:[[99],256],120045:[[100],256],120046:[[101],256],120047:[[102],256],120048:[[103],256],120049:[[104],256],120050:[[105],256],120051:[[106],256],120052:[[107],256],120053:[[108],256],120054:[[109],256],120055:[[110],256],120056:[[111],256],120057:[[112],256],120058:[[113],256],120059:[[114],256],120060:[[115],256],120061:[[116],256],120062:[[117],256],120063:[[118],256]},
482954528:{120064:[[119],256],120065:[[120],256],120066:[[121],256],120067:[[122],256],120068:[[65],256],120069:[[66],256],120071:[[68],256],120072:[[69],256],120073:[[70],256],120074:[[71],256],120077:[[74],256],120078:[[75],256],120079:[[76],256],120080:[[77],256],120081:[[78],256],120082:[[79],256],120083:[[80],256],120084:[[81],256],120086:[[83],256],120087:[[84],256],120088:[[85],256],120089:[[86],256],120090:[[87],256],120091:[[88],256],120092:[[89],256],120094:[[97],256],120095:[[98],256],120096:[[99],256],120097:[[100],256],120098:[[101],256],120099:[[102],256],120100:[[103],256],120101:[[104],256],120102:[[105],256],120103:[[106],256],120104:[[107],256],120105:[[108],256],120106:[[109],256],120107:[[110],256],120108:[[111],256],120109:[[112],256],120110:[[113],256],120111:[[114],256],120112:[[115],256],120113:[[116],256],120114:[[117],256],120115:[[118],256],120116:[[119],256],120117:[[120],256],120118:[[121],256],120119:[[122],256],120120:[[65],256],120121:[[66],256],120123:[[68],256],120124:[[69],256],120125:[[70],256],120126:[[71],256],120128:[[73],256],120129:[[74],256],120130:[[75],256],120131:[[76],256],120132:[[77],256],120134:[[79],256],120138:[[83],256],120139:[[84],256],120140:[[85],256],120141:[[86],256],120142:[[87],256],120143:[[88],256],120144:[[89],256],120146:[[97],256],120147:[[98],256],120148:[[99],256],120149:[[100],256],120150:[[101],256],120151:[[102],256],120152:[[103],256],120153:[[104],256],120154:[[105],256],120155:[[106],256],120156:[[107],256],120157:[[108],256],120158:[[109],256],120159:[[110],256],120160:[[111],256],120161:[[112],256],120162:[[113],256],120163:[[114],256],120164:[[115],256],120165:[[116],256],120166:[[117],256],120167:[[118],256],120168:[[119],256],120169:[[120],256],120170:[[121],256],120171:[[122],256],120172:[[65],256],120173:[[66],256],120174:[[67],256],120175:[[68],256],120176:[[69],256],120177:[[70],256],120178:[[71],256],120179:[[72],256],120180:[[73],256],120181:[[74],256],120182:[[75],256],120183:[[76],256],120184:[[77],256],120185:[[78],256],120186:[[79],256],120187:[[80],256],120188:[[81],256],120189:[[82],256],120190:[[83],256],120191:[[84],256],120192:[[85],256],120193:[[86],256],120194:[[87],256],120195:[[88],256],120196:[[89],256],120197:[[90],256],120198:[[97],256],120199:[[98],256],120200:[[99],256],120201:[[100],256],120202:[[101],256],120203:[[102],256],120204:[[103],256],120205:[[104],256],120206:[[105],256],120207:[[106],256],120208:[[107],256],120209:[[108],256],120210:[[109],256],120211:[[110],256],120212:[[111],256],120213:[[112],256],120214:[[113],256],120215:[[114],256],120216:[[115],256],120217:[[116],256],120218:[[117],256],120219:[[118],256],120220:[[119],256],120221:[[120],256],120222:[[121],256],120223:[[122],256],120224:[[65],256],120225:[[66],256],120226:[[67],256],120227:[[68],256],120228:[[69],256],120229:[[70],256],120230:[[71],256],120231:[[72],256],120232:[[73],256],120233:[[74],256],120234:[[75],256],120235:[[76],256],120236:[[77],256],120237:[[78],256],120238:[[79],256],120239:[[80],256],120240:[[81],256],120241:[[82],256],120242:[[83],256],120243:[[84],256],120244:[[85],256],120245:[[86],256],120246:[[87],256],120247:[[88],256],120248:[[89],256],120249:[[90],256],120250:[[97],256],120251:[[98],256],120252:[[99],256],120253:[[100],256],120254:[[101],256],120255:[[102],256],120256:[[103],256],120257:[[104],256],120258:[[105],256],120259:[[106],256],120260:[[107],256],120261:[[108],256],120262:[[109],256],120263:[[110],256],120264:[[111],256],120265:[[112],256],120266:[[113],256],120267:[[114],256],120268:[[115],256],120269:[[116],256],120270:[[117],256],120271:[[118],256],120272:[[119],256],120273:[[120],256],120274:[[121],256],120275:[[122],256],120276:[[65],256],120277:[[66],256],120278:[[67],256],120279:[[68],256],120280:[[69],256],120281:[[70],256],120282:[[71],256],120283:[[72],256],120284:[[73],256],120285:[[74],256],120286:[[75],256],120287:[[76],256],120288:[[77],256],120289:[[78],256],120290:[[79],256],120291:[[80],256],120292:[[81],256],120293:[[82],256],120294:[[83],256],120295:[[84],256],120296:[[85],256],120297:[[86],256],120298:[[87],256],120299:[[88],256],120300:[[89],256],120301:[[90],256],120302:[[97],256],120303:[[98],256],120304:[[99],256],120305:[[100],256],120306:[[101],256],120307:[[102],256],120308:[[103],256],120309:[[104],256],120310:[[105],256],120311:[[106],256],120312:[[107],256],120313:[[108],256],120314:[[109],256],120315:[[110],256],120316:[[111],256],120317:[[112],256],120318:[[113],256],120319:[[114],256]},
483054784:{120320:[[115],256],120321:[[116],256],120322:[[117],256],120323:[[118],256],120324:[[119],256],120325:[[120],256],120326:[[121],256],120327:[[122],256],120328:[[65],256],120329:[[66],256],120330:[[67],256],120331:[[68],256],120332:[[69],256],120333:[[70],256],120334:[[71],256],120335:[[72],256],120336:[[73],256],120337:[[74],256],120338:[[75],256],120339:[[76],256],120340:[[77],256],120341:[[78],256],120342:[[79],256],120343:[[80],256],120344:[[81],256],120345:[[82],256],120346:[[83],256],120347:[[84],256],120348:[[85],256],120349:[[86],256],120350:[[87],256],120351:[[88],256],120352:[[89],256],120353:[[90],256],120354:[[97],256],120355:[[98],256],120356:[[99],256],120357:[[100],256],120358:[[101],256],120359:[[102],256],120360:[[103],256],120361:[[104],256],120362:[[105],256],120363:[[106],256],120364:[[107],256],120365:[[108],256],120366:[[109],256],120367:[[110],256],120368:[[111],256],120369:[[112],256],120370:[[113],256],120371:[[114],256],120372:[[115],256],120373:[[116],256],120374:[[117],256],120375:[[118],256],120376:[[119],256],120377:[[120],256],120378:[[121],256],120379:[[122],256],120380:[[65],256],120381:[[66],256],120382:[[67],256],120383:[[68],256],120384:[[69],256],120385:[[70],256],120386:[[71],256],120387:[[72],256],120388:[[73],256],120389:[[74],256],120390:[[75],256],120391:[[76],256],120392:[[77],256],120393:[[78],256],120394:[[79],256],120395:[[80],256],120396:[[81],256],120397:[[82],256],120398:[[83],256],120399:[[84],256],120400:[[85],256],120401:[[86],256],120402:[[87],256],120403:[[88],256],120404:[[89],256],120405:[[90],256],120406:[[97],256],120407:[[98],256],120408:[[99],256],120409:[[100],256],120410:[[101],256],120411:[[102],256],120412:[[103],256],120413:[[104],256],120414:[[105],256],120415:[[106],256],120416:[[107],256],120417:[[108],256],120418:[[109],256],120419:[[110],256],120420:[[111],256],120421:[[112],256],120422:[[113],256],120423:[[114],256],120424:[[115],256],120425:[[116],256],120426:[[117],256],120427:[[118],256],120428:[[119],256],120429:[[120],256],120430:[[121],256],120431:[[122],256],120432:[[65],256],120433:[[66],256],120434:[[67],256],120435:[[68],256],120436:[[69],256],120437:[[70],256],120438:[[71],256],120439:[[72],256],120440:[[73],256],120441:[[74],256],120442:[[75],256],120443:[[76],256],120444:[[77],256],120445:[[78],256],120446:[[79],256],120447:[[80],256],120448:[[81],256],120449:[[82],256],120450:[[83],256],120451:[[84],256],120452:[[85],256],120453:[[86],256],120454:[[87],256],120455:[[88],256],120456:[[89],256],120457:[[90],256],120458:[[97],256],120459:[[98],256],120460:[[99],256],120461:[[100],256],120462:[[101],256],120463:[[102],256],120464:[[103],256],120465:[[104],256],120466:[[105],256],120467:[[106],256],120468:[[107],256],120469:[[108],256],120470:[[109],256],120471:[[110],256],120472:[[111],256],120473:[[112],256],120474:[[113],256],120475:[[114],256],120476:[[115],256],120477:[[116],256],120478:[[117],256],120479:[[118],256],120480:[[119],256],120481:[[120],256],120482:[[121],256],120483:[[122],256],120484:[[305],256],120485:[[567],256],120488:[[913],256],120489:[[914],256],120490:[[915],256],120491:[[916],256],120492:[[917],256],120493:[[918],256],120494:[[919],256],120495:[[920],256],120496:[[921],256],120497:[[922],256],120498:[[923],256],120499:[[924],256],120500:[[925],256],120501:[[926],256],120502:[[927],256],120503:[[928],256],120504:[[929],256],120505:[[1012],256],120506:[[931],256],120507:[[932],256],120508:[[933],256],120509:[[934],256],120510:[[935],256],120511:[[936],256],120512:[[937],256],120513:[[8711],256],120514:[[945],256],120515:[[946],256],120516:[[947],256],120517:[[948],256],120518:[[949],256],120519:[[950],256],120520:[[951],256],120521:[[952],256],120522:[[953],256],120523:[[954],256],120524:[[955],256],120525:[[956],256],120526:[[957],256],120527:[[958],256],120528:[[959],256],120529:[[960],256],120530:[[961],256],120531:[[962],256],120532:[[963],256],120533:[[964],256],120534:[[965],256],120535:[[966],256],120536:[[967],256],120537:[[968],256],120538:[[969],256],120539:[[8706],256],120540:[[1013],256],120541:[[977],256],120542:[[1008],256],120543:[[981],256],120544:[[1009],256],120545:[[982],256],120546:[[913],256],120547:[[914],256],120548:[[915],256],120549:[[916],256],120550:[[917],256],120551:[[918],256],120552:[[919],256],120553:[[920],256],120554:[[921],256],120555:[[922],256],120556:[[923],256],120557:[[924],256],120558:[[925],256],120559:[[926],256],120560:[[927],256],120561:[[928],256],120562:[[929],256],120563:[[1012],256],120564:[[931],256],120565:[[932],256],120566:[[933],256],120567:[[934],256],120568:[[935],256],120569:[[936],256],120570:[[937],256],120571:[[8711],256],120572:[[945],256],120573:[[946],256],120574:[[947],256],120575:[[948],256]},
483155040:{120576:[[949],256],120577:[[950],256],120578:[[951],256],120579:[[952],256],120580:[[953],256],120581:[[954],256],120582:[[955],256],120583:[[956],256],120584:[[957],256],120585:[[958],256],120586:[[959],256],120587:[[960],256],120588:[[961],256],120589:[[962],256],120590:[[963],256],120591:[[964],256],120592:[[965],256],120593:[[966],256],120594:[[967],256],120595:[[968],256],120596:[[969],256],120597:[[8706],256],120598:[[1013],256],120599:[[977],256],120600:[[1008],256],120601:[[981],256],120602:[[1009],256],120603:[[982],256],120604:[[913],256],120605:[[914],256],120606:[[915],256],120607:[[916],256],120608:[[917],256],120609:[[918],256],120610:[[919],256],120611:[[920],256],120612:[[921],256],120613:[[922],256],120614:[[923],256],120615:[[924],256],120616:[[925],256],120617:[[926],256],120618:[[927],256],120619:[[928],256],120620:[[929],256],120621:[[1012],256],120622:[[931],256],120623:[[932],256],120624:[[933],256],120625:[[934],256],120626:[[935],256],120627:[[936],256],120628:[[937],256],120629:[[8711],256],120630:[[945],256],120631:[[946],256],120632:[[947],256],120633:[[948],256],120634:[[949],256],120635:[[950],256],120636:[[951],256],120637:[[952],256],120638:[[953],256],120639:[[954],256],120640:[[955],256],120641:[[956],256],120642:[[957],256],120643:[[958],256],120644:[[959],256],120645:[[960],256],120646:[[961],256],120647:[[962],256],120648:[[963],256],120649:[[964],256],120650:[[965],256],120651:[[966],256],120652:[[967],256],120653:[[968],256],120654:[[969],256],120655:[[8706],256],120656:[[1013],256],120657:[[977],256],120658:[[1008],256],120659:[[981],256],120660:[[1009],256],120661:[[982],256],120662:[[913],256],120663:[[914],256],120664:[[915],256],120665:[[916],256],120666:[[917],256],120667:[[918],256],120668:[[919],256],120669:[[920],256],120670:[[921],256],120671:[[922],256],120672:[[923],256],120673:[[924],256],120674:[[925],256],120675:[[926],256],120676:[[927],256],120677:[[928],256],120678:[[929],256],120679:[[1012],256],120680:[[931],256],120681:[[932],256],120682:[[933],256],120683:[[934],256],120684:[[935],256],120685:[[936],256],120686:[[937],256],120687:[[8711],256],120688:[[945],256],120689:[[946],256],120690:[[947],256],120691:[[948],256],120692:[[949],256],120693:[[950],256],120694:[[951],256],120695:[[952],256],120696:[[953],256],120697:[[954],256],120698:[[955],256],120699:[[956],256],120700:[[957],256],120701:[[958],256],120702:[[959],256],120703:[[960],256],120704:[[961],256],120705:[[962],256],120706:[[963],256],120707:[[964],256],120708:[[965],256],120709:[[966],256],120710:[[967],256],120711:[[968],256],120712:[[969],256],120713:[[8706],256],120714:[[1013],256],120715:[[977],256],120716:[[1008],256],120717:[[981],256],120718:[[1009],256],120719:[[982],256],120720:[[913],256],120721:[[914],256],120722:[[915],256],120723:[[916],256],120724:[[917],256],120725:[[918],256],120726:[[919],256],120727:[[920],256],120728:[[921],256],120729:[[922],256],120730:[[923],256],120731:[[924],256],120732:[[925],256],120733:[[926],256],120734:[[927],256],120735:[[928],256],120736:[[929],256],120737:[[1012],256],120738:[[931],256],120739:[[932],256],120740:[[933],256],120741:[[934],256],120742:[[935],256],120743:[[936],256],120744:[[937],256],120745:[[8711],256],120746:[[945],256],120747:[[946],256],120748:[[947],256],120749:[[948],256],120750:[[949],256],120751:[[950],256],120752:[[951],256],120753:[[952],256],120754:[[953],256],120755:[[954],256],120756:[[955],256],120757:[[956],256],120758:[[957],256],120759:[[958],256],120760:[[959],256],120761:[[960],256],120762:[[961],256],120763:[[962],256],120764:[[963],256],120765:[[964],256],120766:[[965],256],120767:[[966],256],120768:[[967],256],120769:[[968],256],120770:[[969],256],120771:[[8706],256],120772:[[1013],256],120773:[[977],256],120774:[[1008],256],120775:[[981],256],120776:[[1009],256],120777:[[982],256],120778:[[988],256],120779:[[989],256],120782:[[48],256],120783:[[49],256],120784:[[50],256],120785:[[51],256],120786:[[52],256],120787:[[53],256],120788:[[54],256],120789:[[55],256],120790:[[56],256],120791:[[57],256],120792:[[48],256],120793:[[49],256],120794:[[50],256],120795:[[51],256],120796:[[52],256],120797:[[53],256],120798:[[54],256],120799:[[55],256],120800:[[56],256],120801:[[57],256],120802:[[48],256],120803:[[49],256],120804:[[50],256],120805:[[51],256],120806:[[52],256],120807:[[53],256],120808:[[54],256],120809:[[55],256],120810:[[56],256],120811:[[57],256],120812:[[48],256],120813:[[49],256],120814:[[50],256],120815:[[51],256],120816:[[52],256],120817:[[53],256],120818:[[54],256],120819:[[55],256],120820:[[56],256],120821:[[57],256],120822:[[48],256],120823:[[49],256],120824:[[50],256],120825:[[51],256],120826:[[52],256],120827:[[53],256],120828:[[54],256],120829:[[55],256],120830:[[56],256],120831:[[57],256]},
483259392:{125136:[,220],125137:[,220],125138:[,220],125139:[,220],125140:[,220],125141:[,220],125142:[,220]},
483360928:{126464:[[1575],256],126465:[[1576],256],126466:[[1580],256],126467:[[1583],256],126469:[[1608],256],126470:[[1586],256],126471:[[1581],256],126472:[[1591],256],126473:[[1610],256],126474:[[1603],256],126475:[[1604],256],126476:[[1605],256],126477:[[1606],256],126478:[[1587],256],126479:[[1593],256],126480:[[1601],256],126481:[[1589],256],126482:[[1602],256],126483:[[1585],256],126484:[[1588],256],126485:[[1578],256],126486:[[1579],256],126487:[[1582],256],126488:[[1584],256],126489:[[1590],256],126490:[[1592],256],126491:[[1594],256],126492:[[1646],256],126493:[[1722],256],126494:[[1697],256],126495:[[1647],256],126497:[[1576],256],126498:[[1580],256],126500:[[1607],256],126503:[[1581],256],126505:[[1610],256],126506:[[1603],256],126507:[[1604],256],126508:[[1605],256],126509:[[1606],256],126510:[[1587],256],126511:[[1593],256],126512:[[1601],256],126513:[[1589],256],126514:[[1602],256],126516:[[1588],256],126517:[[1578],256],126518:[[1579],256],126519:[[1582],256],126521:[[1590],256],126523:[[1594],256],126530:[[1580],256],126535:[[1581],256],126537:[[1610],256],126539:[[1604],256],126541:[[1606],256],126542:[[1587],256],126543:[[1593],256],126545:[[1589],256],126546:[[1602],256],126548:[[1588],256],126551:[[1582],256],126553:[[1590],256],126555:[[1594],256],126557:[[1722],256],126559:[[1647],256],126561:[[1576],256],126562:[[1580],256],126564:[[1607],256],126567:[[1581],256],126568:[[1591],256],126569:[[1610],256],126570:[[1603],256],126572:[[1605],256],126573:[[1606],256],126574:[[1587],256],126575:[[1593],256],126576:[[1601],256],126577:[[1589],256],126578:[[1602],256],126580:[[1588],256],126581:[[1578],256],126582:[[1579],256],126583:[[1582],256],126585:[[1590],256],126586:[[1592],256],126587:[[1594],256],126588:[[1646],256],126590:[[1697],256],126592:[[1575],256],126593:[[1576],256],126594:[[1580],256],126595:[[1583],256],126596:[[1607],256],126597:[[1608],256],126598:[[1586],256],126599:[[1581],256],126600:[[1591],256],126601:[[1610],256],126603:[[1604],256],126604:[[1605],256],126605:[[1606],256],126606:[[1587],256],126607:[[1593],256],126608:[[1601],256],126609:[[1589],256],126610:[[1602],256],126611:[[1585],256],126612:[[1588],256],126613:[[1578],256],126614:[[1579],256],126615:[[1582],256],126616:[[1584],256],126617:[[1590],256],126618:[[1592],256],126619:[[1594],256],126625:[[1576],256],126626:[[1580],256],126627:[[1583],256],126629:[[1608],256],126630:[[1586],256],126631:[[1581],256],126632:[[1591],256],126633:[[1610],256],126635:[[1604],256],126636:[[1605],256],126637:[[1606],256],126638:[[1587],256],126639:[[1593],256],126640:[[1601],256],126641:[[1589],256],126642:[[1602],256],126643:[[1585],256],126644:[[1588],256],126645:[[1578],256],126646:[[1579],256],126647:[[1582],256],126648:[[1584],256],126649:[[1590],256],126650:[[1592],256],126651:[[1594],256]},
483461696:{127232:[[48,46],256],127233:[[48,44],256],127234:[[49,44],256],127235:[[50,44],256],127236:[[51,44],256],127237:[[52,44],256],127238:[[53,44],256],127239:[[54,44],256],127240:[[55,44],256],127241:[[56,44],256],127242:[[57,44],256],127248:[[40,65,41],256],127249:[[40,66,41],256],127250:[[40,67,41],256],127251:[[40,68,41],256],127252:[[40,69,41],256],127253:[[40,70,41],256],127254:[[40,71,41],256],127255:[[40,72,41],256],127256:[[40,73,41],256],127257:[[40,74,41],256],127258:[[40,75,41],256],127259:[[40,76,41],256],127260:[[40,77,41],256],127261:[[40,78,41],256],127262:[[40,79,41],256],127263:[[40,80,41],256],127264:[[40,81,41],256],127265:[[40,82,41],256],127266:[[40,83,41],256],127267:[[40,84,41],256],127268:[[40,85,41],256],127269:[[40,86,41],256],127270:[[40,87,41],256],127271:[[40,88,41],256],127272:[[40,89,41],256],127273:[[40,90,41],256],127274:[[12308,83,12309],256],127275:[[67],256],127276:[[82],256],127277:[[67,68],256],127278:[[87,90],256],127280:[[65],256],127281:[[66],256],127282:[[67],256],127283:[[68],256],127284:[[69],256],127285:[[70],256],127286:[[71],256],127287:[[72],256],127288:[[73],256],127289:[[74],256],127290:[[75],256],127291:[[76],256],127292:[[77],256],127293:[[78],256],127294:[[79],256],127295:[[80],256],127296:[[81],256],127297:[[82],256],127298:[[83],256],127299:[[84],256],127300:[[85],256],127301:[[86],256],127302:[[87],256],127303:[[88],256],127304:[[89],256],127305:[[90],256],127306:[[72,86],256],127307:[[77,86],256],127308:[[83,68],256],127309:[[83,83],256],127310:[[80,80,86],256],127311:[[87,67],256],127338:[[77,67],256],127339:[[77,68],256],127376:[[68,74],256]},
483561952:{127488:[[12411,12363],256],127489:[[12467,12467],256],127490:[[12469],256],127504:[[25163],256],127505:[[23383],256],127506:[[21452],256],127507:[[12487],256],127508:[[20108],256],127509:[[22810],256],127510:[[35299],256],127511:[[22825],256],127512:[[20132],256],127513:[[26144],256],127514:[[28961],256],127515:[[26009],256],127516:[[21069],256],127517:[[24460],256],127518:[[20877],256],127519:[[26032],256],127520:[[21021],256],127521:[[32066],256],127522:[[29983],256],127523:[[36009],256],127524:[[22768],256],127525:[[21561],256],127526:[[28436],256],127527:[[25237],256],127528:[[25429],256],127529:[[19968],256],127530:[[19977],256],127531:[[36938],256],127532:[[24038],256],127533:[[20013],256],127534:[[21491],256],127535:[[25351],256],127536:[[36208],256],127537:[[25171],256],127538:[[31105],256],127539:[[31354],256],127540:[[21512],256],127541:[[28288],256],127542:[[26377],256],127543:[[26376],256],127544:[[30003],256],127545:[[21106],256],127546:[[21942],256],127552:[[12308,26412,12309],256],127553:[[12308,19977,12309],256],127554:[[12308,20108,12309],256],127555:[[12308,23433,12309],256],127556:[[12308,28857,12309],256],127557:[[12308,25171,12309],256],127558:[[12308,30423,12309],256],127559:[[12308,21213,12309],256],127560:[[12308,25943,12309],256],127568:[[24471],256],127569:[[21487],256]},
483663488:{194560:[[20029]],194561:[[20024]],194562:[[20033]],194563:[[131362]],194564:[[20320]],194565:[[20398]],194566:[[20411]],194567:[[20482]],194568:[[20602]],194569:[[20633]],194570:[[20711]],194571:[[20687]],194572:[[13470]],194573:[[132666]],194574:[[20813]],194575:[[20820]],194576:[[20836]],194577:[[20855]],194578:[[132380]],194579:[[13497]],194580:[[20839]],194581:[[20877]],194582:[[132427]],194583:[[20887]],194584:[[20900]],194585:[[20172]],194586:[[20908]],194587:[[20917]],194588:[[168415]],194589:[[20981]],194590:[[20995]],194591:[[13535]],194592:[[21051]],194593:[[21062]],194594:[[21106]],194595:[[21111]],194596:[[13589]],194597:[[21191]],194598:[[21193]],194599:[[21220]],194600:[[21242]],194601:[[21253]],194602:[[21254]],194603:[[21271]],194604:[[21321]],194605:[[21329]],194606:[[21338]],194607:[[21363]],194608:[[21373]],194609:[[21375]],194610:[[21375]],194611:[[21375]],194612:[[133676]],194613:[[28784]],194614:[[21450]],194615:[[21471]],194616:[[133987]],194617:[[21483]],194618:[[21489]],194619:[[21510]],194620:[[21662]],194621:[[21560]],194622:[[21576]],194623:[[21608]],194624:[[21666]],194625:[[21750]],194626:[[21776]],194627:[[21843]],194628:[[21859]],194629:[[21892]],194630:[[21892]],194631:[[21913]],194632:[[21931]],194633:[[21939]],194634:[[21954]],194635:[[22294]],194636:[[22022]],194637:[[22295]],194638:[[22097]],194639:[[22132]],194640:[[20999]],194641:[[22766]],194642:[[22478]],194643:[[22516]],194644:[[22541]],194645:[[22411]],194646:[[22578]],194647:[[22577]],194648:[[22700]],194649:[[136420]],194650:[[22770]],194651:[[22775]],194652:[[22790]],194653:[[22810]],194654:[[22818]],194655:[[22882]],194656:[[136872]],194657:[[136938]],194658:[[23020]],194659:[[23067]],194660:[[23079]],194661:[[23000]],194662:[[23142]],194663:[[14062]],194664:[[14076]],194665:[[23304]],194666:[[23358]],194667:[[23358]],194668:[[137672]],194669:[[23491]],194670:[[23512]],194671:[[23527]],194672:[[23539]],194673:[[138008]],194674:[[23551]],194675:[[23558]],194676:[[24403]],194677:[[23586]],194678:[[14209]],194679:[[23648]],194680:[[23662]],194681:[[23744]],194682:[[23693]],194683:[[138724]],194684:[[23875]],194685:[[138726]],194686:[[23918]],194687:[[23915]],194688:[[23932]],194689:[[24033]],194690:[[24034]],194691:[[14383]],194692:[[24061]],194693:[[24104]],194694:[[24125]],194695:[[24169]],194696:[[14434]],194697:[[139651]],194698:[[14460]],194699:[[24240]],194700:[[24243]],194701:[[24246]],194702:[[24266]],194703:[[172946]],194704:[[24318]],194705:[[140081]],194706:[[140081]],194707:[[33281]],194708:[[24354]],194709:[[24354]],194710:[[14535]],194711:[[144056]],194712:[[156122]],194713:[[24418]],194714:[[24427]],194715:[[14563]],194716:[[24474]],194717:[[24525]],194718:[[24535]],194719:[[24569]],194720:[[24705]],194721:[[14650]],194722:[[14620]],194723:[[24724]],194724:[[141012]],194725:[[24775]],194726:[[24904]],194727:[[24908]],194728:[[24910]],194729:[[24908]],194730:[[24954]],194731:[[24974]],194732:[[25010]],194733:[[24996]],194734:[[25007]],194735:[[25054]],194736:[[25074]],194737:[[25078]],194738:[[25104]],194739:[[25115]],194740:[[25181]],194741:[[25265]],194742:[[25300]],194743:[[25424]],194744:[[142092]],194745:[[25405]],194746:[[25340]],194747:[[25448]],194748:[[25475]],194749:[[25572]],194750:[[142321]],194751:[[25634]],194752:[[25541]],194753:[[25513]],194754:[[14894]],194755:[[25705]],194756:[[25726]],194757:[[25757]],194758:[[25719]],194759:[[14956]],194760:[[25935]],194761:[[25964]],194762:[[143370]],194763:[[26083]],194764:[[26360]],194765:[[26185]],194766:[[15129]],194767:[[26257]],194768:[[15112]],194769:[[15076]],194770:[[20882]],194771:[[20885]],194772:[[26368]],194773:[[26268]],194774:[[32941]],194775:[[17369]],194776:[[26391]],194777:[[26395]],194778:[[26401]],194779:[[26462]],194780:[[26451]],194781:[[144323]],194782:[[15177]],194783:[[26618]],194784:[[26501]],194785:[[26706]],194786:[[26757]],194787:[[144493]],194788:[[26766]],194789:[[26655]],194790:[[26900]],194791:[[15261]],194792:[[26946]],194793:[[27043]],194794:[[27114]],194795:[[27304]],194796:[[145059]],194797:[[27355]],194798:[[15384]],194799:[[27425]],194800:[[145575]],194801:[[27476]],194802:[[15438]],194803:[[27506]],194804:[[27551]],194805:[[27578]],194806:[[27579]],194807:[[146061]],194808:[[138507]],194809:[[146170]],194810:[[27726]],194811:[[146620]],194812:[[27839]],194813:[[27853]],194814:[[27751]],194815:[[27926]]},
483763744:{63744:[[35912]],63745:[[26356]],63746:[[36554]],63747:[[36040]],63748:[[28369]],63749:[[20018]],63750:[[21477]],63751:[[40860]],63752:[[40860]],63753:[[22865]],63754:[[37329]],63755:[[21895]],63756:[[22856]],63757:[[25078]],63758:[[30313]],63759:[[32645]],63760:[[34367]],63761:[[34746]],63762:[[35064]],63763:[[37007]],63764:[[27138]],63765:[[27931]],63766:[[28889]],63767:[[29662]],63768:[[33853]],63769:[[37226]],63770:[[39409]],63771:[[20098]],63772:[[21365]],63773:[[27396]],63774:[[29211]],63775:[[34349]],63776:[[40478]],63777:[[23888]],63778:[[28651]],63779:[[34253]],63780:[[35172]],63781:[[25289]],63782:[[33240]],63783:[[34847]],63784:[[24266]],63785:[[26391]],63786:[[28010]],63787:[[29436]],63788:[[37070]],63789:[[20358]],63790:[[20919]],63791:[[21214]],63792:[[25796]],63793:[[27347]],63794:[[29200]],63795:[[30439]],63796:[[32769]],63797:[[34310]],63798:[[34396]],63799:[[36335]],63800:[[38706]],63801:[[39791]],63802:[[40442]],63803:[[30860]],63804:[[31103]],63805:[[32160]],63806:[[33737]],63807:[[37636]],63808:[[40575]],63809:[[35542]],63810:[[22751]],63811:[[24324]],63812:[[31840]],63813:[[32894]],63814:[[29282]],63815:[[30922]],63816:[[36034]],63817:[[38647]],63818:[[22744]],63819:[[23650]],63820:[[27155]],63821:[[28122]],63822:[[28431]],63823:[[32047]],63824:[[32311]],63825:[[38475]],63826:[[21202]],63827:[[32907]],63828:[[20956]],63829:[[20940]],63830:[[31260]],63831:[[32190]],63832:[[33777]],63833:[[38517]],63834:[[35712]],63835:[[25295]],63836:[[27138]],63837:[[35582]],63838:[[20025]],63839:[[23527]],63840:[[24594]],63841:[[29575]],63842:[[30064]],63843:[[21271]],63844:[[30971]],63845:[[20415]],63846:[[24489]],63847:[[19981]],63848:[[27852]],63849:[[25976]],63850:[[32034]],63851:[[21443]],63852:[[22622]],63853:[[30465]],63854:[[33865]],63855:[[35498]],63856:[[27578]],63857:[[36784]],63858:[[27784]],63859:[[25342]],63860:[[33509]],63861:[[25504]],63862:[[30053]],63863:[[20142]],63864:[[20841]],63865:[[20937]],63866:[[26753]],63867:[[31975]],63868:[[33391]],63869:[[35538]],63870:[[37327]],63871:[[21237]],63872:[[21570]],63873:[[22899]],63874:[[24300]],63875:[[26053]],63876:[[28670]],63877:[[31018]],63878:[[38317]],63879:[[39530]],63880:[[40599]],63881:[[40654]],63882:[[21147]],63883:[[26310]],63884:[[27511]],63885:[[36706]],63886:[[24180]],63887:[[24976]],63888:[[25088]],63889:[[25754]],63890:[[28451]],63891:[[29001]],63892:[[29833]],63893:[[31178]],63894:[[32244]],63895:[[32879]],63896:[[36646]],63897:[[34030]],63898:[[36899]],63899:[[37706]],63900:[[21015]],63901:[[21155]],63902:[[21693]],63903:[[28872]],63904:[[35010]],63905:[[35498]],63906:[[24265]],63907:[[24565]],63908:[[25467]],63909:[[27566]],63910:[[31806]],63911:[[29557]],63912:[[20196]],63913:[[22265]],63914:[[23527]],63915:[[23994]],63916:[[24604]],63917:[[29618]],63918:[[29801]],63919:[[32666]],63920:[[32838]],63921:[[37428]],63922:[[38646]],63923:[[38728]],63924:[[38936]],63925:[[20363]],63926:[[31150]],63927:[[37300]],63928:[[38584]],63929:[[24801]],63930:[[20102]],63931:[[20698]],63932:[[23534]],63933:[[23615]],63934:[[26009]],63935:[[27138]],63936:[[29134]],63937:[[30274]],63938:[[34044]],63939:[[36988]],63940:[[40845]],63941:[[26248]],63942:[[38446]],63943:[[21129]],63944:[[26491]],63945:[[26611]],63946:[[27969]],63947:[[28316]],63948:[[29705]],63949:[[30041]],63950:[[30827]],63951:[[32016]],63952:[[39006]],63953:[[20845]],63954:[[25134]],63955:[[38520]],63956:[[20523]],63957:[[23833]],63958:[[28138]],63959:[[36650]],63960:[[24459]],63961:[[24900]],63962:[[26647]],63963:[[29575]],63964:[[38534]],63965:[[21033]],63966:[[21519]],63967:[[23653]],63968:[[26131]],63969:[[26446]],63970:[[26792]],63971:[[27877]],63972:[[29702]],63973:[[30178]],63974:[[32633]],63975:[[35023]],63976:[[35041]],63977:[[37324]],63978:[[38626]],63979:[[21311]],63980:[[28346]],63981:[[21533]],63982:[[29136]],63983:[[29848]],63984:[[34298]],63985:[[38563]],63986:[[40023]],63987:[[40607]],63988:[[26519]],63989:[[28107]],63990:[[33256]],63991:[[31435]],63992:[[31520]],63993:[[31890]],63994:[[29376]],63995:[[28825]],63996:[[35672]],63997:[[20160]],63998:[[33590]],63999:[[21050]],194816:[[27966]],194817:[[28023]],194818:[[27969]],194819:[[28009]],194820:[[28024]],194821:[[28037]],194822:[[146718]],194823:[[27956]],194824:[[28207]],194825:[[28270]],194826:[[15667]],194827:[[28363]],194828:[[28359]],194829:[[147153]],194830:[[28153]],194831:[[28526]],194832:[[147294]],194833:[[147342]],194834:[[28614]],194835:[[28729]],194836:[[28702]],194837:[[28699]],194838:[[15766]],194839:[[28746]],194840:[[28797]],194841:[[28791]],194842:[[28845]],194843:[[132389]],194844:[[28997]],194845:[[148067]],194846:[[29084]],194847:[[148395]],194848:[[29224]],194849:[[29237]],194850:[[29264]],194851:[[149000]],194852:[[29312]],194853:[[29333]],194854:[[149301]],194855:[[149524]],194856:[[29562]],194857:[[29579]],194858:[[16044]],194859:[[29605]],194860:[[16056]],194861:[[16056]],194862:[[29767]],194863:[[29788]],194864:[[29809]],194865:[[29829]],194866:[[29898]],194867:[[16155]],194868:[[29988]],194869:[[150582]],194870:[[30014]],194871:[[150674]],194872:[[30064]],194873:[[139679]],194874:[[30224]],194875:[[151457]],194876:[[151480]],194877:[[151620]],194878:[[16380]],194879:[[16392]],194880:[[30452]],194881:[[151795]],194882:[[151794]],194883:[[151833]],194884:[[151859]],194885:[[30494]],194886:[[30495]],194887:[[30495]],194888:[[30538]],194889:[[16441]],194890:[[30603]],194891:[[16454]],194892:[[16534]],194893:[[152605]],194894:[[30798]],194895:[[30860]],194896:[[30924]],194897:[[16611]],194898:[[153126]],194899:[[31062]],194900:[[153242]],194901:[[153285]],194902:[[31119]],194903:[[31211]],194904:[[16687]],194905:[[31296]],194906:[[31306]],194907:[[31311]],194908:[[153980]],194909:[[154279]],194910:[[154279]],194911:[[31470]],194912:[[16898]],194913:[[154539]],194914:[[31686]],194915:[[31689]],194916:[[16935]],194917:[[154752]],194918:[[31954]],194919:[[17056]],194920:[[31976]],194921:[[31971]],194922:[[32000]],194923:[[155526]],194924:[[32099]],194925:[[17153]],194926:[[32199]],194927:[[32258]],194928:[[32325]],194929:[[17204]],194930:[[156200]],194931:[[156231]],194932:[[17241]],194933:[[156377]],194934:[[32634]],194935:[[156478]],194936:[[32661]],194937:[[32762]],194938:[[32773]],194939:[[156890]],194940:[[156963]],194941:[[32864]],194942:[[157096]],194943:[[32880]],194944:[[144223]],194945:[[17365]],194946:[[32946]],194947:[[33027]],194948:[[17419]],194949:[[33086]],194950:[[23221]],194951:[[157607]],194952:[[157621]],194953:[[144275]],194954:[[144284]],194955:[[33281]],194956:[[33284]],194957:[[36766]],194958:[[17515]],194959:[[33425]],194960:[[33419]],194961:[[33437]],194962:[[21171]],194963:[[33457]],194964:[[33459]],194965:[[33469]],194966:[[33510]],194967:[[158524]],194968:[[33509]],194969:[[33565]],194970:[[33635]],194971:[[33709]],194972:[[33571]],194973:[[33725]],194974:[[33767]],194975:[[33879]],194976:[[33619]],194977:[[33738]],194978:[[33740]],194979:[[33756]],194980:[[158774]],194981:[[159083]],194982:[[158933]],194983:[[17707]],194984:[[34033]],194985:[[34035]],194986:[[34070]],194987:[[160714]],194988:[[34148]],194989:[[159532]],194990:[[17757]],194991:[[17761]],194992:[[159665]],194993:[[159954]],194994:[[17771]],194995:[[34384]],194996:[[34396]],194997:[[34407]],194998:[[34409]],194999:[[34473]],195000:[[34440]],195001:[[34574]],195002:[[34530]],195003:[[34681]],195004:[[34600]],195005:[[34667]],195006:[[34694]],195007:[[17879]],195008:[[34785]],195009:[[34817]],195010:[[17913]],195011:[[34912]],195012:[[34915]],195013:[[161383]],195014:[[35031]],195015:[[35038]],195016:[[17973]],195017:[[35066]],195018:[[13499]],195019:[[161966]],195020:[[162150]],195021:[[18110]],195022:[[18119]],195023:[[35488]],195024:[[35565]],195025:[[35722]],195026:[[35925]],195027:[[162984]],195028:[[36011]],195029:[[36033]],195030:[[36123]],195031:[[36215]],195032:[[163631]],195033:[[133124]],195034:[[36299]],195035:[[36284]],195036:[[36336]],195037:[[133342]],195038:[[36564]],195039:[[36664]],195040:[[165330]],195041:[[165357]],195042:[[37012]],195043:[[37105]],195044:[[37137]],195045:[[165678]],195046:[[37147]],195047:[[37432]],195048:[[37591]],195049:[[37592]],195050:[[37500]],195051:[[37881]],195052:[[37909]],195053:[[166906]],195054:[[38283]],195055:[[18837]],195056:[[38327]],195057:[[167287]],195058:[[18918]],195059:[[38595]],195060:[[23986]],195061:[[38691]],195062:[[168261]],195063:[[168474]],195064:[[19054]],195065:[[19062]],195066:[[38880]],195067:[[168970]],195068:[[19122]],195069:[[169110]],195070:[[38923]],195071:[[38923]]},
483864000:{64000:[[20999]],64001:[[24230]],64002:[[25299]],64003:[[31958]],64004:[[23429]],64005:[[27934]],64006:[[26292]],64007:[[36667]],64008:[[34892]],64009:[[38477]],64010:[[35211]],64011:[[24275]],64012:[[20800]],64013:[[21952]],64016:[[22618]],64018:[[26228]],64021:[[20958]],64022:[[29482]],64023:[[30410]],64024:[[31036]],64025:[[31070]],64026:[[31077]],64027:[[31119]],64028:[[38742]],64029:[[31934]],64030:[[32701]],64032:[[34322]],64034:[[35576]],64037:[[36920]],64038:[[37117]],64042:[[39151]],64043:[[39164]],64044:[[39208]],64045:[[40372]],64046:[[37086]],64047:[[38583]],64048:[[20398]],64049:[[20711]],64050:[[20813]],64051:[[21193]],64052:[[21220]],64053:[[21329]],64054:[[21917]],64055:[[22022]],64056:[[22120]],64057:[[22592]],64058:[[22696]],64059:[[23652]],64060:[[23662]],64061:[[24724]],64062:[[24936]],64063:[[24974]],64064:[[25074]],64065:[[25935]],64066:[[26082]],64067:[[26257]],64068:[[26757]],64069:[[28023]],64070:[[28186]],64071:[[28450]],64072:[[29038]],64073:[[29227]],64074:[[29730]],64075:[[30865]],64076:[[31038]],64077:[[31049]],64078:[[31048]],64079:[[31056]],64080:[[31062]],64081:[[31069]],64082:[[31117]],64083:[[31118]],64084:[[31296]],64085:[[31361]],64086:[[31680]],64087:[[32244]],64088:[[32265]],64089:[[32321]],64090:[[32626]],64091:[[32773]],64092:[[33261]],64093:[[33401]],64094:[[33401]],64095:[[33879]],64096:[[35088]],64097:[[35222]],64098:[[35585]],64099:[[35641]],64100:[[36051]],64101:[[36104]],64102:[[36790]],64103:[[36920]],64104:[[38627]],64105:[[38911]],64106:[[38971]],64107:[[24693]],64108:[[148206]],64109:[[33304]],64112:[[20006]],64113:[[20917]],64114:[[20840]],64115:[[20352]],64116:[[20805]],64117:[[20864]],64118:[[21191]],64119:[[21242]],64120:[[21917]],64121:[[21845]],64122:[[21913]],64123:[[21986]],64124:[[22618]],64125:[[22707]],64126:[[22852]],64127:[[22868]],64128:[[23138]],64129:[[23336]],64130:[[24274]],64131:[[24281]],64132:[[24425]],64133:[[24493]],64134:[[24792]],64135:[[24910]],64136:[[24840]],64137:[[24974]],64138:[[24928]],64139:[[25074]],64140:[[25140]],64141:[[25540]],64142:[[25628]],64143:[[25682]],64144:[[25942]],64145:[[26228]],64146:[[26391]],64147:[[26395]],64148:[[26454]],64149:[[27513]],64150:[[27578]],64151:[[27969]],64152:[[28379]],64153:[[28363]],64154:[[28450]],64155:[[28702]],64156:[[29038]],64157:[[30631]],64158:[[29237]],64159:[[29359]],64160:[[29482]],64161:[[29809]],64162:[[29958]],64163:[[30011]],64164:[[30237]],64165:[[30239]],64166:[[30410]],64167:[[30427]],64168:[[30452]],64169:[[30538]],64170:[[30528]],64171:[[30924]],64172:[[31409]],64173:[[31680]],64174:[[31867]],64175:[[32091]],64176:[[32244]],64177:[[32574]],64178:[[32773]],64179:[[33618]],64180:[[33775]],64181:[[34681]],64182:[[35137]],64183:[[35206]],64184:[[35222]],64185:[[35519]],64186:[[35576]],64187:[[35531]],64188:[[35585]],64189:[[35582]],64190:[[35565]],64191:[[35641]],64192:[[35722]],64193:[[36104]],64194:[[36664]],64195:[[36978]],64196:[[37273]],64197:[[37494]],64198:[[38524]],64199:[[38627]],64200:[[38742]],64201:[[38875]],64202:[[38911]],64203:[[38923]],64204:[[38971]],64205:[[39698]],64206:[[40860]],64207:[[141386]],64208:[[141380]],64209:[[144341]],64210:[[15261]],64211:[[16408]],64212:[[16441]],64213:[[152137]],64214:[[154832]],64215:[[163539]],64216:[[40771]],64217:[[40846]],195072:[[38953]],195073:[[169398]],195074:[[39138]],195075:[[19251]],195076:[[39209]],195077:[[39335]],195078:[[39362]],195079:[[39422]],195080:[[19406]],195081:[[170800]],195082:[[39698]],195083:[[40000]],195084:[[40189]],195085:[[19662]],195086:[[19693]],195087:[[40295]],195088:[[172238]],195089:[[19704]],195090:[[172293]],195091:[[172558]],195092:[[172689]],195093:[[40635]],195094:[[19798]],195095:[[40697]],195096:[[40702]],195097:[[40709]],195098:[[40719]],195099:[[40726]],195100:[[40763]],195101:[[173568]]},
483964256:{64256:[[102,102],256],64257:[[102,105],256],64258:[[102,108],256],64259:[[102,102,105],256],64260:[[102,102,108],256],64261:[[383,116],256],64262:[[115,116],256],64275:[[1396,1398],256],64276:[[1396,1381],256],64277:[[1396,1387],256],64278:[[1406,1398],256],64279:[[1396,1389],256],64285:[[1497,1460],512],64286:[,26],64287:[[1522,1463],512],64288:[[1506],256],64289:[[1488],256],64290:[[1491],256],64291:[[1492],256],64292:[[1499],256],64293:[[1500],256],64294:[[1501],256],64295:[[1512],256],64296:[[1514],256],64297:[[43],256],64298:[[1513,1473],512],64299:[[1513,1474],512],64300:[[64329,1473],512],64301:[[64329,1474],512],64302:[[1488,1463],512],64303:[[1488,1464],512],64304:[[1488,1468],512],64305:[[1489,1468],512],64306:[[1490,1468],512],64307:[[1491,1468],512],64308:[[1492,1468],512],64309:[[1493,1468],512],64310:[[1494,1468],512],64312:[[1496,1468],512],64313:[[1497,1468],512],64314:[[1498,1468],512],64315:[[1499,1468],512],64316:[[1500,1468],512],64318:[[1502,1468],512],64320:[[1504,1468],512],64321:[[1505,1468],512],64323:[[1507,1468],512],64324:[[1508,1468],512],64326:[[1510,1468],512],64327:[[1511,1468],512],64328:[[1512,1468],512],64329:[[1513,1468],512],64330:[[1514,1468],512],64331:[[1493,1465],512],64332:[[1489,1471],512],64333:[[1499,1471],512],64334:[[1508,1471],512],64335:[[1488,1500],256],64336:[[1649],256],64337:[[1649],256],64338:[[1659],256],64339:[[1659],256],64340:[[1659],256],64341:[[1659],256],64342:[[1662],256],64343:[[1662],256],64344:[[1662],256],64345:[[1662],256],64346:[[1664],256],64347:[[1664],256],64348:[[1664],256],64349:[[1664],256],64350:[[1658],256],64351:[[1658],256],64352:[[1658],256],64353:[[1658],256],64354:[[1663],256],64355:[[1663],256],64356:[[1663],256],64357:[[1663],256],64358:[[1657],256],64359:[[1657],256],64360:[[1657],256],64361:[[1657],256],64362:[[1700],256],64363:[[1700],256],64364:[[1700],256],64365:[[1700],256],64366:[[1702],256],64367:[[1702],256],64368:[[1702],256],64369:[[1702],256],64370:[[1668],256],64371:[[1668],256],64372:[[1668],256],64373:[[1668],256],64374:[[1667],256],64375:[[1667],256],64376:[[1667],256],64377:[[1667],256],64378:[[1670],256],64379:[[1670],256],64380:[[1670],256],64381:[[1670],256],64382:[[1671],256],64383:[[1671],256],64384:[[1671],256],64385:[[1671],256],64386:[[1677],256],64387:[[1677],256],64388:[[1676],256],64389:[[1676],256],64390:[[1678],256],64391:[[1678],256],64392:[[1672],256],64393:[[1672],256],64394:[[1688],256],64395:[[1688],256],64396:[[1681],256],64397:[[1681],256],64398:[[1705],256],64399:[[1705],256],64400:[[1705],256],64401:[[1705],256],64402:[[1711],256],64403:[[1711],256],64404:[[1711],256],64405:[[1711],256],64406:[[1715],256],64407:[[1715],256],64408:[[1715],256],64409:[[1715],256],64410:[[1713],256],64411:[[1713],256],64412:[[1713],256],64413:[[1713],256],64414:[[1722],256],64415:[[1722],256],64416:[[1723],256],64417:[[1723],256],64418:[[1723],256],64419:[[1723],256],64420:[[1728],256],64421:[[1728],256],64422:[[1729],256],64423:[[1729],256],64424:[[1729],256],64425:[[1729],256],64426:[[1726],256],64427:[[1726],256],64428:[[1726],256],64429:[[1726],256],64430:[[1746],256],64431:[[1746],256],64432:[[1747],256],64433:[[1747],256],64467:[[1709],256],64468:[[1709],256],64469:[[1709],256],64470:[[1709],256],64471:[[1735],256],64472:[[1735],256],64473:[[1734],256],64474:[[1734],256],64475:[[1736],256],64476:[[1736],256],64477:[[1655],256],64478:[[1739],256],64479:[[1739],256],64480:[[1733],256],64481:[[1733],256],64482:[[1737],256],64483:[[1737],256],64484:[[1744],256],64485:[[1744],256],64486:[[1744],256],64487:[[1744],256],64488:[[1609],256],64489:[[1609],256],64490:[[1574,1575],256],64491:[[1574,1575],256],64492:[[1574,1749],256],64493:[[1574,1749],256],64494:[[1574,1608],256],64495:[[1574,1608],256],64496:[[1574,1735],256],64497:[[1574,1735],256],64498:[[1574,1734],256],64499:[[1574,1734],256],64500:[[1574,1736],256],64501:[[1574,1736],256],64502:[[1574,1744],256],64503:[[1574,1744],256],64504:[[1574,1744],256],64505:[[1574,1609],256],64506:[[1574,1609],256],64507:[[1574,1609],256],64508:[[1740],256],64509:[[1740],256],64510:[[1740],256],64511:[[1740],256]},
484064512:{64512:[[1574,1580],256],64513:[[1574,1581],256],64514:[[1574,1605],256],64515:[[1574,1609],256],64516:[[1574,1610],256],64517:[[1576,1580],256],64518:[[1576,1581],256],64519:[[1576,1582],256],64520:[[1576,1605],256],64521:[[1576,1609],256],64522:[[1576,1610],256],64523:[[1578,1580],256],64524:[[1578,1581],256],64525:[[1578,1582],256],64526:[[1578,1605],256],64527:[[1578,1609],256],64528:[[1578,1610],256],64529:[[1579,1580],256],64530:[[1579,1605],256],64531:[[1579,1609],256],64532:[[1579,1610],256],64533:[[1580,1581],256],64534:[[1580,1605],256],64535:[[1581,1580],256],64536:[[1581,1605],256],64537:[[1582,1580],256],64538:[[1582,1581],256],64539:[[1582,1605],256],64540:[[1587,1580],256],64541:[[1587,1581],256],64542:[[1587,1582],256],64543:[[1587,1605],256],64544:[[1589,1581],256],64545:[[1589,1605],256],64546:[[1590,1580],256],64547:[[1590,1581],256],64548:[[1590,1582],256],64549:[[1590,1605],256],64550:[[1591,1581],256],64551:[[1591,1605],256],64552:[[1592,1605],256],64553:[[1593,1580],256],64554:[[1593,1605],256],64555:[[1594,1580],256],64556:[[1594,1605],256],64557:[[1601,1580],256],64558:[[1601,1581],256],64559:[[1601,1582],256],64560:[[1601,1605],256],64561:[[1601,1609],256],64562:[[1601,1610],256],64563:[[1602,1581],256],64564:[[1602,1605],256],64565:[[1602,1609],256],64566:[[1602,1610],256],64567:[[1603,1575],256],64568:[[1603,1580],256],64569:[[1603,1581],256],64570:[[1603,1582],256],64571:[[1603,1604],256],64572:[[1603,1605],256],64573:[[1603,1609],256],64574:[[1603,1610],256],64575:[[1604,1580],256],64576:[[1604,1581],256],64577:[[1604,1582],256],64578:[[1604,1605],256],64579:[[1604,1609],256],64580:[[1604,1610],256],64581:[[1605,1580],256],64582:[[1605,1581],256],64583:[[1605,1582],256],64584:[[1605,1605],256],64585:[[1605,1609],256],64586:[[1605,1610],256],64587:[[1606,1580],256],64588:[[1606,1581],256],64589:[[1606,1582],256],64590:[[1606,1605],256],64591:[[1606,1609],256],64592:[[1606,1610],256],64593:[[1607,1580],256],64594:[[1607,1605],256],64595:[[1607,1609],256],64596:[[1607,1610],256],64597:[[1610,1580],256],64598:[[1610,1581],256],64599:[[1610,1582],256],64600:[[1610,1605],256],64601:[[1610,1609],256],64602:[[1610,1610],256],64603:[[1584,1648],256],64604:[[1585,1648],256],64605:[[1609,1648],256],64606:[[32,1612,1617],256],64607:[[32,1613,1617],256],64608:[[32,1614,1617],256],64609:[[32,1615,1617],256],64610:[[32,1616,1617],256],64611:[[32,1617,1648],256],64612:[[1574,1585],256],64613:[[1574,1586],256],64614:[[1574,1605],256],64615:[[1574,1606],256],64616:[[1574,1609],256],64617:[[1574,1610],256],64618:[[1576,1585],256],64619:[[1576,1586],256],64620:[[1576,1605],256],64621:[[1576,1606],256],64622:[[1576,1609],256],64623:[[1576,1610],256],64624:[[1578,1585],256],64625:[[1578,1586],256],64626:[[1578,1605],256],64627:[[1578,1606],256],64628:[[1578,1609],256],64629:[[1578,1610],256],64630:[[1579,1585],256],64631:[[1579,1586],256],64632:[[1579,1605],256],64633:[[1579,1606],256],64634:[[1579,1609],256],64635:[[1579,1610],256],64636:[[1601,1609],256],64637:[[1601,1610],256],64638:[[1602,1609],256],64639:[[1602,1610],256],64640:[[1603,1575],256],64641:[[1603,1604],256],64642:[[1603,1605],256],64643:[[1603,1609],256],64644:[[1603,1610],256],64645:[[1604,1605],256],64646:[[1604,1609],256],64647:[[1604,1610],256],64648:[[1605,1575],256],64649:[[1605,1605],256],64650:[[1606,1585],256],64651:[[1606,1586],256],64652:[[1606,1605],256],64653:[[1606,1606],256],64654:[[1606,1609],256],64655:[[1606,1610],256],64656:[[1609,1648],256],64657:[[1610,1585],256],64658:[[1610,1586],256],64659:[[1610,1605],256],64660:[[1610,1606],256],64661:[[1610,1609],256],64662:[[1610,1610],256],64663:[[1574,1580],256],64664:[[1574,1581],256],64665:[[1574,1582],256],64666:[[1574,1605],256],64667:[[1574,1607],256],64668:[[1576,1580],256],64669:[[1576,1581],256],64670:[[1576,1582],256],64671:[[1576,1605],256],64672:[[1576,1607],256],64673:[[1578,1580],256],64674:[[1578,1581],256],64675:[[1578,1582],256],64676:[[1578,1605],256],64677:[[1578,1607],256],64678:[[1579,1605],256],64679:[[1580,1581],256],64680:[[1580,1605],256],64681:[[1581,1580],256],64682:[[1581,1605],256],64683:[[1582,1580],256],64684:[[1582,1605],256],64685:[[1587,1580],256],64686:[[1587,1581],256],64687:[[1587,1582],256],64688:[[1587,1605],256],64689:[[1589,1581],256],64690:[[1589,1582],256],64691:[[1589,1605],256],64692:[[1590,1580],256],64693:[[1590,1581],256],64694:[[1590,1582],256],64695:[[1590,1605],256],64696:[[1591,1581],256],64697:[[1592,1605],256],64698:[[1593,1580],256],64699:[[1593,1605],256],64700:[[1594,1580],256],64701:[[1594,1605],256],64702:[[1601,1580],256],64703:[[1601,1581],256],64704:[[1601,1582],256],64705:[[1601,1605],256],64706:[[1602,1581],256],64707:[[1602,1605],256],64708:[[1603,1580],256],64709:[[1603,1581],256],64710:[[1603,1582],256],64711:[[1603,1604],256],64712:[[1603,1605],256],64713:[[1604,1580],256],64714:[[1604,1581],256],64715:[[1604,1582],256],64716:[[1604,1605],256],64717:[[1604,1607],256],64718:[[1605,1580],256],64719:[[1605,1581],256],64720:[[1605,1582],256],64721:[[1605,1605],256],64722:[[1606,1580],256],64723:[[1606,1581],256],64724:[[1606,1582],256],64725:[[1606,1605],256],64726:[[1606,1607],256],64727:[[1607,1580],256],64728:[[1607,1605],256],64729:[[1607,1648],256],64730:[[1610,1580],256],64731:[[1610,1581],256],64732:[[1610,1582],256],64733:[[1610,1605],256],64734:[[1610,1607],256],64735:[[1574,1605],256],64736:[[1574,1607],256],64737:[[1576,1605],256],64738:[[1576,1607],256],64739:[[1578,1605],256],64740:[[1578,1607],256],64741:[[1579,1605],256],64742:[[1579,1607],256],64743:[[1587,1605],256],64744:[[1587,1607],256],64745:[[1588,1605],256],64746:[[1588,1607],256],64747:[[1603,1604],256],64748:[[1603,1605],256],64749:[[1604,1605],256],64750:[[1606,1605],256],64751:[[1606,1607],256],64752:[[1610,1605],256],64753:[[1610,1607],256],64754:[[1600,1614,1617],256],64755:[[1600,1615,1617],256],64756:[[1600,1616,1617],256],64757:[[1591,1609],256],64758:[[1591,1610],256],64759:[[1593,1609],256],64760:[[1593,1610],256],64761:[[1594,1609],256],64762:[[1594,1610],256],64763:[[1587,1609],256],64764:[[1587,1610],256],64765:[[1588,1609],256],64766:[[1588,1610],256],64767:[[1581,1609],256]},
484164768:{64768:[[1581,1610],256],64769:[[1580,1609],256],64770:[[1580,1610],256],64771:[[1582,1609],256],64772:[[1582,1610],256],64773:[[1589,1609],256],64774:[[1589,1610],256],64775:[[1590,1609],256],64776:[[1590,1610],256],64777:[[1588,1580],256],64778:[[1588,1581],256],64779:[[1588,1582],256],64780:[[1588,1605],256],64781:[[1588,1585],256],64782:[[1587,1585],256],64783:[[1589,1585],256],64784:[[1590,1585],256],64785:[[1591,1609],256],64786:[[1591,1610],256],64787:[[1593,1609],256],64788:[[1593,1610],256],64789:[[1594,1609],256],64790:[[1594,1610],256],64791:[[1587,1609],256],64792:[[1587,1610],256],64793:[[1588,1609],256],64794:[[1588,1610],256],64795:[[1581,1609],256],64796:[[1581,1610],256],64797:[[1580,1609],256],64798:[[1580,1610],256],64799:[[1582,1609],256],64800:[[1582,1610],256],64801:[[1589,1609],256],64802:[[1589,1610],256],64803:[[1590,1609],256],64804:[[1590,1610],256],64805:[[1588,1580],256],64806:[[1588,1581],256],64807:[[1588,1582],256],64808:[[1588,1605],256],64809:[[1588,1585],256],64810:[[1587,1585],256],64811:[[1589,1585],256],64812:[[1590,1585],256],64813:[[1588,1580],256],64814:[[1588,1581],256],64815:[[1588,1582],256],64816:[[1588,1605],256],64817:[[1587,1607],256],64818:[[1588,1607],256],64819:[[1591,1605],256],64820:[[1587,1580],256],64821:[[1587,1581],256],64822:[[1587,1582],256],64823:[[1588,1580],256],64824:[[1588,1581],256],64825:[[1588,1582],256],64826:[[1591,1605],256],64827:[[1592,1605],256],64828:[[1575,1611],256],64829:[[1575,1611],256],64848:[[1578,1580,1605],256],64849:[[1578,1581,1580],256],64850:[[1578,1581,1580],256],64851:[[1578,1581,1605],256],64852:[[1578,1582,1605],256],64853:[[1578,1605,1580],256],64854:[[1578,1605,1581],256],64855:[[1578,1605,1582],256],64856:[[1580,1605,1581],256],64857:[[1580,1605,1581],256],64858:[[1581,1605,1610],256],64859:[[1581,1605,1609],256],64860:[[1587,1581,1580],256],64861:[[1587,1580,1581],256],64862:[[1587,1580,1609],256],64863:[[1587,1605,1581],256],64864:[[1587,1605,1581],256],64865:[[1587,1605,1580],256],64866:[[1587,1605,1605],256],64867:[[1587,1605,1605],256],64868:[[1589,1581,1581],256],64869:[[1589,1581,1581],256],64870:[[1589,1605,1605],256],64871:[[1588,1581,1605],256],64872:[[1588,1581,1605],256],64873:[[1588,1580,1610],256],64874:[[1588,1605,1582],256],64875:[[1588,1605,1582],256],64876:[[1588,1605,1605],256],64877:[[1588,1605,1605],256],64878:[[1590,1581,1609],256],64879:[[1590,1582,1605],256],64880:[[1590,1582,1605],256],64881:[[1591,1605,1581],256],64882:[[1591,1605,1581],256],64883:[[1591,1605,1605],256],64884:[[1591,1605,1610],256],64885:[[1593,1580,1605],256],64886:[[1593,1605,1605],256],64887:[[1593,1605,1605],256],64888:[[1593,1605,1609],256],64889:[[1594,1605,1605],256],64890:[[1594,1605,1610],256],64891:[[1594,1605,1609],256],64892:[[1601,1582,1605],256],64893:[[1601,1582,1605],256],64894:[[1602,1605,1581],256],64895:[[1602,1605,1605],256],64896:[[1604,1581,1605],256],64897:[[1604,1581,1610],256],64898:[[1604,1581,1609],256],64899:[[1604,1580,1580],256],64900:[[1604,1580,1580],256],64901:[[1604,1582,1605],256],64902:[[1604,1582,1605],256],64903:[[1604,1605,1581],256],64904:[[1604,1605,1581],256],64905:[[1605,1581,1580],256],64906:[[1605,1581,1605],256],64907:[[1605,1581,1610],256],64908:[[1605,1580,1581],256],64909:[[1605,1580,1605],256],64910:[[1605,1582,1580],256],64911:[[1605,1582,1605],256],64914:[[1605,1580,1582],256],64915:[[1607,1605,1580],256],64916:[[1607,1605,1605],256],64917:[[1606,1581,1605],256],64918:[[1606,1581,1609],256],64919:[[1606,1580,1605],256],64920:[[1606,1580,1605],256],64921:[[1606,1580,1609],256],64922:[[1606,1605,1610],256],64923:[[1606,1605,1609],256],64924:[[1610,1605,1605],256],64925:[[1610,1605,1605],256],64926:[[1576,1582,1610],256],64927:[[1578,1580,1610],256],64928:[[1578,1580,1609],256],64929:[[1578,1582,1610],256],64930:[[1578,1582,1609],256],64931:[[1578,1605,1610],256],64932:[[1578,1605,1609],256],64933:[[1580,1605,1610],256],64934:[[1580,1581,1609],256],64935:[[1580,1605,1609],256],64936:[[1587,1582,1609],256],64937:[[1589,1581,1610],256],64938:[[1588,1581,1610],256],64939:[[1590,1581,1610],256],64940:[[1604,1580,1610],256],64941:[[1604,1605,1610],256],64942:[[1610,1581,1610],256],64943:[[1610,1580,1610],256],64944:[[1610,1605,1610],256],64945:[[1605,1605,1610],256],64946:[[1602,1605,1610],256],64947:[[1606,1581,1610],256],64948:[[1602,1605,1581],256],64949:[[1604,1581,1605],256],64950:[[1593,1605,1610],256],64951:[[1603,1605,1610],256],64952:[[1606,1580,1581],256],64953:[[1605,1582,1610],256],64954:[[1604,1580,1605],256],64955:[[1603,1605,1605],256],64956:[[1604,1580,1605],256],64957:[[1606,1580,1581],256],64958:[[1580,1581,1610],256],64959:[[1581,1580,1610],256],64960:[[1605,1580,1610],256],64961:[[1601,1605,1610],256],64962:[[1576,1581,1610],256],64963:[[1603,1605,1605],256],64964:[[1593,1580,1605],256],64965:[[1589,1605,1605],256],64966:[[1587,1582,1610],256],64967:[[1606,1580,1610],256],65008:[[1589,1604,1746],256],65009:[[1602,1604,1746],256],65010:[[1575,1604,1604,1607],256],65011:[[1575,1603,1576,1585],256],65012:[[1605,1581,1605,1583],256],65013:[[1589,1604,1593,1605],256],65014:[[1585,1587,1608,1604],256],65015:[[1593,1604,1610,1607],256],65016:[[1608,1587,1604,1605],256],65017:[[1589,1604,1609],256],65018:[[1589,1604,1609,32,1575,1604,1604,1607,32,1593,1604,1610,1607,32,1608,1587,1604,1605],256],65019:[[1580,1604,32,1580,1604,1575,1604,1607],256],65020:[[1585,1740,1575,1604],256]},
484265024:{65040:[[44],256],65041:[[12289],256],65042:[[12290],256],65043:[[58],256],65044:[[59],256],65045:[[33],256],65046:[[63],256],65047:[[12310],256],65048:[[12311],256],65049:[[8230],256],65056:[,230],65057:[,230],65058:[,230],65059:[,230],65060:[,230],65061:[,230],65062:[,230],65063:[,220],65064:[,220],65065:[,220],65066:[,220],65067:[,220],65068:[,220],65069:[,220],65072:[[8229],256],65073:[[8212],256],65074:[[8211],256],65075:[[95],256],65076:[[95],256],65077:[[40],256],65078:[[41],256],65079:[[123],256],65080:[[125],256],65081:[[12308],256],65082:[[12309],256],65083:[[12304],256],65084:[[12305],256],65085:[[12298],256],65086:[[12299],256],65087:[[12296],256],65088:[[12297],256],65089:[[12300],256],65090:[[12301],256],65091:[[12302],256],65092:[[12303],256],65095:[[91],256],65096:[[93],256],65097:[[8254],256],65098:[[8254],256],65099:[[8254],256],65100:[[8254],256],65101:[[95],256],65102:[[95],256],65103:[[95],256],65104:[[44],256],65105:[[12289],256],65106:[[46],256],65108:[[59],256],65109:[[58],256],65110:[[63],256],65111:[[33],256],65112:[[8212],256],65113:[[40],256],65114:[[41],256],65115:[[123],256],65116:[[125],256],65117:[[12308],256],65118:[[12309],256],65119:[[35],256],65120:[[38],256],65121:[[42],256],65122:[[43],256],65123:[[45],256],65124:[[60],256],65125:[[62],256],65126:[[61],256],65128:[[92],256],65129:[[36],256],65130:[[37],256],65131:[[64],256],65136:[[32,1611],256],65137:[[1600,1611],256],65138:[[32,1612],256],65140:[[32,1613],256],65142:[[32,1614],256],65143:[[1600,1614],256],65144:[[32,1615],256],65145:[[1600,1615],256],65146:[[32,1616],256],65147:[[1600,1616],256],65148:[[32,1617],256],65149:[[1600,1617],256],65150:[[32,1618],256],65151:[[1600,1618],256],65152:[[1569],256],65153:[[1570],256],65154:[[1570],256],65155:[[1571],256],65156:[[1571],256],65157:[[1572],256],65158:[[1572],256],65159:[[1573],256],65160:[[1573],256],65161:[[1574],256],65162:[[1574],256],65163:[[1574],256],65164:[[1574],256],65165:[[1575],256],65166:[[1575],256],65167:[[1576],256],65168:[[1576],256],65169:[[1576],256],65170:[[1576],256],65171:[[1577],256],65172:[[1577],256],65173:[[1578],256],65174:[[1578],256],65175:[[1578],256],65176:[[1578],256],65177:[[1579],256],65178:[[1579],256],65179:[[1579],256],65180:[[1579],256],65181:[[1580],256],65182:[[1580],256],65183:[[1580],256],65184:[[1580],256],65185:[[1581],256],65186:[[1581],256],65187:[[1581],256],65188:[[1581],256],65189:[[1582],256],65190:[[1582],256],65191:[[1582],256],65192:[[1582],256],65193:[[1583],256],65194:[[1583],256],65195:[[1584],256],65196:[[1584],256],65197:[[1585],256],65198:[[1585],256],65199:[[1586],256],65200:[[1586],256],65201:[[1587],256],65202:[[1587],256],65203:[[1587],256],65204:[[1587],256],65205:[[1588],256],65206:[[1588],256],65207:[[1588],256],65208:[[1588],256],65209:[[1589],256],65210:[[1589],256],65211:[[1589],256],65212:[[1589],256],65213:[[1590],256],65214:[[1590],256],65215:[[1590],256],65216:[[1590],256],65217:[[1591],256],65218:[[1591],256],65219:[[1591],256],65220:[[1591],256],65221:[[1592],256],65222:[[1592],256],65223:[[1592],256],65224:[[1592],256],65225:[[1593],256],65226:[[1593],256],65227:[[1593],256],65228:[[1593],256],65229:[[1594],256],65230:[[1594],256],65231:[[1594],256],65232:[[1594],256],65233:[[1601],256],65234:[[1601],256],65235:[[1601],256],65236:[[1601],256],65237:[[1602],256],65238:[[1602],256],65239:[[1602],256],65240:[[1602],256],65241:[[1603],256],65242:[[1603],256],65243:[[1603],256],65244:[[1603],256],65245:[[1604],256],65246:[[1604],256],65247:[[1604],256],65248:[[1604],256],65249:[[1605],256],65250:[[1605],256],65251:[[1605],256],65252:[[1605],256],65253:[[1606],256],65254:[[1606],256],65255:[[1606],256],65256:[[1606],256],65257:[[1607],256],65258:[[1607],256],65259:[[1607],256],65260:[[1607],256],65261:[[1608],256],65262:[[1608],256],65263:[[1609],256],65264:[[1609],256],65265:[[1610],256],65266:[[1610],256],65267:[[1610],256],65268:[[1610],256],65269:[[1604,1570],256],65270:[[1604,1570],256],65271:[[1604,1571],256],65272:[[1604,1571],256],65273:[[1604,1573],256],65274:[[1604,1573],256],65275:[[1604,1575],256],65276:[[1604,1575],256]},
484365280:{65281:[[33],256],65282:[[34],256],65283:[[35],256],65284:[[36],256],65285:[[37],256],65286:[[38],256],65287:[[39],256],65288:[[40],256],65289:[[41],256],65290:[[42],256],65291:[[43],256],65292:[[44],256],65293:[[45],256],65294:[[46],256],65295:[[47],256],65296:[[48],256],65297:[[49],256],65298:[[50],256],65299:[[51],256],65300:[[52],256],65301:[[53],256],65302:[[54],256],65303:[[55],256],65304:[[56],256],65305:[[57],256],65306:[[58],256],65307:[[59],256],65308:[[60],256],65309:[[61],256],65310:[[62],256],65311:[[63],256],65312:[[64],256],65313:[[65],256],65314:[[66],256],65315:[[67],256],65316:[[68],256],65317:[[69],256],65318:[[70],256],65319:[[71],256],65320:[[72],256],65321:[[73],256],65322:[[74],256],65323:[[75],256],65324:[[76],256],65325:[[77],256],65326:[[78],256],65327:[[79],256],65328:[[80],256],65329:[[81],256],65330:[[82],256],65331:[[83],256],65332:[[84],256],65333:[[85],256],65334:[[86],256],65335:[[87],256],65336:[[88],256],65337:[[89],256],65338:[[90],256],65339:[[91],256],65340:[[92],256],65341:[[93],256],65342:[[94],256],65343:[[95],256],65344:[[96],256],65345:[[97],256],65346:[[98],256],65347:[[99],256],65348:[[100],256],65349:[[101],256],65350:[[102],256],65351:[[103],256],65352:[[104],256],65353:[[105],256],65354:[[106],256],65355:[[107],256],65356:[[108],256],65357:[[109],256],65358:[[110],256],65359:[[111],256],65360:[[112],256],65361:[[113],256],65362:[[114],256],65363:[[115],256],65364:[[116],256],65365:[[117],256],65366:[[118],256],65367:[[119],256],65368:[[120],256],65369:[[121],256],65370:[[122],256],65371:[[123],256],65372:[[124],256],65373:[[125],256],65374:[[126],256],65375:[[10629],256],65376:[[10630],256],65377:[[12290],256],65378:[[12300],256],65379:[[12301],256],65380:[[12289],256],65381:[[12539],256],65382:[[12530],256],65383:[[12449],256],65384:[[12451],256],65385:[[12453],256],65386:[[12455],256],65387:[[12457],256],65388:[[12515],256],65389:[[12517],256],65390:[[12519],256],65391:[[12483],256],65392:[[12540],256],65393:[[12450],256],65394:[[12452],256],65395:[[12454],256],65396:[[12456],256],65397:[[12458],256],65398:[[12459],256],65399:[[12461],256],65400:[[12463],256],65401:[[12465],256],65402:[[12467],256],65403:[[12469],256],65404:[[12471],256],65405:[[12473],256],65406:[[12475],256],65407:[[12477],256],65408:[[12479],256],65409:[[12481],256],65410:[[12484],256],65411:[[12486],256],65412:[[12488],256],65413:[[12490],256],65414:[[12491],256],65415:[[12492],256],65416:[[12493],256],65417:[[12494],256],65418:[[12495],256],65419:[[12498],256],65420:[[12501],256],65421:[[12504],256],65422:[[12507],256],65423:[[12510],256],65424:[[12511],256],65425:[[12512],256],65426:[[12513],256],65427:[[12514],256],65428:[[12516],256],65429:[[12518],256],65430:[[12520],256],65431:[[12521],256],65432:[[12522],256],65433:[[12523],256],65434:[[12524],256],65435:[[12525],256],65436:[[12527],256],65437:[[12531],256],65438:[[12441],256],65439:[[12442],256],65440:[[12644],256],65441:[[12593],256],65442:[[12594],256],65443:[[12595],256],65444:[[12596],256],65445:[[12597],256],65446:[[12598],256],65447:[[12599],256],65448:[[12600],256],65449:[[12601],256],65450:[[12602],256],65451:[[12603],256],65452:[[12604],256],65453:[[12605],256],65454:[[12606],256],65455:[[12607],256],65456:[[12608],256],65457:[[12609],256],65458:[[12610],256],65459:[[12611],256],65460:[[12612],256],65461:[[12613],256],65462:[[12614],256],65463:[[12615],256],65464:[[12616],256],65465:[[12617],256],65466:[[12618],256],65467:[[12619],256],65468:[[12620],256],65469:[[12621],256],65470:[[12622],256],65474:[[12623],256],65475:[[12624],256],65476:[[12625],256],65477:[[12626],256],65478:[[12627],256],65479:[[12628],256],65482:[[12629],256],65483:[[12630],256],65484:[[12631],256],65485:[[12632],256],65486:[[12633],256],65487:[[12634],256],65490:[[12635],256],65491:[[12636],256],65492:[[12637],256],65493:[[12638],256],65494:[[12639],256],65495:[[12640],256],65498:[[12641],256],65499:[[12642],256],65500:[[12643],256],65504:[[162],256],65505:[[163],256],65506:[[172],256],65507:[[175],256],65508:[[166],256],65509:[[165],256],65510:[[8361],256],65512:[[9474],256],65513:[[8592],256],65514:[[8593],256],65515:[[8594],256],65516:[[8595],256],65517:[[9632],256],65518:[[9675],256]}
4844
4845};
4846
4847 /***** Module to export */
4848 var unorm = {
4849 nfc: nfc,
4850 nfd: nfd,
4851 nfkc: nfkc,
4852 nfkd: nfkd
4853 };
4854
4855 /*globals module:true,define:true*/
4856
4857 // CommonJS
4858 if (typeof module === "object") {
4859 module.exports = unorm;
4860
4861 // AMD
4862 } else if (typeof define === "function" && define.amd) {
4863 define("unorm", function () {
4864 return unorm;
4865 });
4866
4867 // Global
4868 } else {
4869 root.unorm = unorm;
4870 }
4871
4872 /***** Export as shim for String::normalize method *****/
4873 /*
4874 http://wiki.ecmascript.org/doku.php?id=harmony:specification_drafts#november_8_2013_draft_rev_21
4875
4876 21.1.3.12 String.prototype.normalize(form="NFC")
4877 When the normalize method is called with one argument form, the following steps are taken:
4878
4879 1. Let O be CheckObjectCoercible(this value).
4880 2. Let S be ToString(O).
4881 3. ReturnIfAbrupt(S).
4882 4. If form is not provided or undefined let form be "NFC".
4883 5. Let f be ToString(form).
4884 6. ReturnIfAbrupt(f).
4885 7. If f is not one of "NFC", "NFD", "NFKC", or "NFKD", then throw a RangeError Exception.
4886 8. Let ns be the String value is the result of normalizing S into the normalization form named by f as specified in Unicode Standard Annex #15, UnicodeNormalizatoin Forms.
4887 9. Return ns.
4888
4889 The length property of the normalize method is 0.
4890
4891 *NOTE* The normalize function is intentionally generic; it does not require that its this value be a String object. Therefore it can be transferred to other kinds of objects for use as a method.
4892 */
4893 unorm.shimApplied = false;
4894
4895 if (!String.prototype.normalize) {
4896 String.prototype.normalize = function(form) {
4897 var str = "" + this;
4898 form = form === undefined ? "NFC" : form;
4899
4900 if (form === "NFC") {
4901 return unorm.nfc(str);
4902 } else if (form === "NFD") {
4903 return unorm.nfd(str);
4904 } else if (form === "NFKC") {
4905 return unorm.nfkc(str);
4906 } else if (form === "NFKD") {
4907 return unorm.nfkd(str);
4908 } else {
4909 throw new RangeError("Invalid normalization form: " + form);
4910 }
4911 };
4912
4913 unorm.shimApplied = true;
4914 }
4915}(this));
8b095871
IC
4916</script>
4917 <script>/*! jQuery v2.1.1 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */
4918!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l=a.document,m="2.1.1",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return n.each(this,a,b)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(n.isPlainObject(d)||(e=n.isArray(d)))?(e?(e=!1,f=c&&n.isArray(c)?c:[]):f=c&&n.isPlainObject(c)?c:{},g[b]=n.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray,isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){return!n.isArray(a)&&a-parseFloat(a)>=0},isPlainObject:function(a){return"object"!==n.type(a)||a.nodeType||n.isWindow(a)?!1:a.constructor&&!j.call(a.constructor.prototype,"isPrototypeOf")?!1:!0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(a){var b,c=eval;a=n.trim(a),a&&(1===a.indexOf("use strict")?(b=l.createElement("script"),b.text=a,l.head.appendChild(b).parentNode.removeChild(b)):c(a))},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=s(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:g.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;c>d;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=s(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(c=a[b],b=a,a=c),n.isFunction(a)?(e=d.call(arguments,2),f=function(){return a.apply(b||this,e.concat(d.call(arguments)))},f.guid=a.guid=a.guid||n.guid++,f):void 0},now:Date.now,support:k}),n.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+-new Date,v=a.document,w=0,x=0,y=gb(),z=gb(),A=gb(),B=function(a,b){return a===b&&(l=!0),0},C="undefined",D=1<<31,E={}.hasOwnProperty,F=[],G=F.pop,H=F.push,I=F.push,J=F.slice,K=F.indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(this[b]===a)return b;return-1},L="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",N="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",O=N.replace("w","w#"),P="\\["+M+"*("+N+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+O+"))|)"+M+"*\\]",Q=":("+N+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+P+")*)|.*)\\)|)",R=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),S=new RegExp("^"+M+"*,"+M+"*"),T=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp("="+M+"*([^\\]'\"]*?)"+M+"*\\]","g"),V=new RegExp(Q),W=new RegExp("^"+O+"$"),X={ID:new RegExp("^#("+N+")"),CLASS:new RegExp("^\\.("+N+")"),TAG:new RegExp("^("+N.replace("w","w*")+")"),ATTR:new RegExp("^"+P),PSEUDO:new RegExp("^"+Q),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+L+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ab=/[+~]/,bb=/'|\\/g,cb=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),db=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)};try{I.apply(F=J.call(v.childNodes),v.childNodes),F[v.childNodes.length].nodeType}catch(eb){I={apply:F.length?function(a,b){H.apply(a,J.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fb(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],!a||"string"!=typeof a)return d;if(1!==(k=b.nodeType)&&9!==k)return[];if(p&&!e){if(f=_.exec(a))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return I.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName&&b.getElementsByClassName)return I.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=9===k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(bb,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+qb(o[l]);w=ab.test(a)&&ob(b.parentNode)||b,x=o.join(",")}if(x)try{return I.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function gb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function hb(a){return a[u]=!0,a}function ib(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function jb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function kb(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||D)-(~a.sourceIndex||D);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function lb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function mb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function nb(a){return hb(function(b){return b=+b,hb(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function ob(a){return a&&typeof a.getElementsByTagName!==C&&a}c=fb.support={},f=fb.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fb.setDocument=function(a){var b,e=a?a.ownerDocument||a:v,g=e.defaultView;return e!==n&&9===e.nodeType&&e.documentElement?(n=e,o=e.documentElement,p=!f(e),g&&g!==g.top&&(g.addEventListener?g.addEventListener("unload",function(){m()},!1):g.attachEvent&&g.attachEvent("onunload",function(){m()})),c.attributes=ib(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ib(function(a){return a.appendChild(e.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(e.getElementsByClassName)&&ib(function(a){return a.innerHTML="<div class='a'></div><div class='a i'></div>",a.firstChild.className="i",2===a.getElementsByClassName("i").length}),c.getById=ib(function(a){return o.appendChild(a).id=u,!e.getElementsByName||!e.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if(typeof b.getElementById!==C&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){var c=typeof a.getAttributeNode!==C&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return typeof b.getElementsByTagName!==C?b.getElementsByTagName(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return typeof b.getElementsByClassName!==C&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(e.querySelectorAll))&&(ib(function(a){a.innerHTML="<select msallowclip=''><option selected=''></option></select>",a.querySelectorAll("[msallowclip^='']").length&&q.push("[*^$]="+M+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+M+"*(?:value|"+L+")"),a.querySelectorAll(":checked").length||q.push(":checked")}),ib(function(a){var b=e.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+M+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ib(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",Q)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===e||a.ownerDocument===v&&t(v,a)?-1:b===e||b.ownerDocument===v&&t(v,b)?1:k?K.call(k,a)-K.call(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,f=a.parentNode,g=b.parentNode,h=[a],i=[b];if(!f||!g)return a===e?-1:b===e?1:f?-1:g?1:k?K.call(k,a)-K.call(k,b):0;if(f===g)return kb(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?kb(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},e):n},fb.matches=function(a,b){return fb(a,null,null,b)},fb.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fb(b,n,null,[a]).length>0},fb.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fb.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&E.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fb.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fb.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fb.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fb.selectors={cacheLength:50,createPseudo:hb,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(cb,db),a[3]=(a[3]||a[4]||a[5]||"").replace(cb,db),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fb.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fb.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(cb,db).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+M+")"+a+"("+M+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||typeof a.getAttribute!==C&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fb.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fb.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?hb(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=K.call(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:hb(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?hb(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:hb(function(a){return function(b){return fb(a,b).length>0}}),contains:hb(function(a){return function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:hb(function(a){return W.test(a||"")||fb.error("unsupported lang: "+a),a=a.replace(cb,db).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:nb(function(){return[0]}),last:nb(function(a,b){return[b-1]}),eq:nb(function(a,b,c){return[0>c?c+b:c]}),even:nb(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:nb(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:nb(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:nb(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=lb(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=mb(b);function pb(){}pb.prototype=d.filters=d.pseudos,d.setFilters=new pb,g=fb.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){(!c||(e=S.exec(h)))&&(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=T.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(R," ")}),h=h.slice(c.length));for(g in d.filter)!(e=X[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?fb.error(a):z(a,i).slice(0)};function qb(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function rb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function sb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function tb(a,b,c){for(var d=0,e=b.length;e>d;d++)fb(a,b[d],c);return c}function ub(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function vb(a,b,c,d,e,f){return d&&!d[u]&&(d=vb(d)),e&&!e[u]&&(e=vb(e,f)),hb(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||tb(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ub(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ub(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?K.call(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ub(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):I.apply(g,r)})}function wb(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=rb(function(a){return a===b},h,!0),l=rb(function(a){return K.call(b,a)>-1},h,!0),m=[function(a,c,d){return!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d))}];f>i;i++)if(c=d.relative[a[i].type])m=[rb(sb(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return vb(i>1&&sb(m),i>1&&qb(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&wb(a.slice(i,e)),f>e&&wb(a=a.slice(e)),f>e&&qb(a))}m.push(c)}return sb(m)}function xb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=G.call(i));s=ub(s)}I.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&fb.uniqueSort(i)}return k&&(w=v,j=t),r};return c?hb(f):f}return h=fb.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wb(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xb(e,d)),f.selector=a}return f},i=fb.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(cb,db),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(cb,db),ab.test(j[0].type)&&ob(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qb(j),!a)return I.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,ab.test(a)&&ob(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ib(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ib(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||jb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ib(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||jb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ib(function(a){return null==a.getAttribute("disabled")})||jb(L,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fb}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=n.expr.match.needsContext,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^.[^:#\[\.,]*$/;function x(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(w.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return g.call(b,a)>=0!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=this.length,d=[],e=this;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;c>b;b++)if(n.contains(e[b],this))return!0}));for(b=0;c>b;b++)n.find(a,e[b],d);return d=this.pushStack(c>1?n.unique(d):d),d.selector=this.selector?this.selector+" "+a:a,d},filter:function(a){return this.pushStack(x(this,a||[],!1))},not:function(a){return this.pushStack(x(this,a||[],!0))},is:function(a){return!!x(this,"string"==typeof a&&u.test(a)?n(a):a||[],!1).length}});var y,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=n.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||y).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:l,!0)),v.test(c[1])&&n.isPlainObject(b))for(c in b)n.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}return d=l.getElementById(c[2]),d&&d.parentNode&&(this.length=1,this[0]=d),this.context=l,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof y.ready?y.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};A.prototype=n.fn,y=n(l);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};n.extend({dir:function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),n.fn.extend({has:function(a){var b=n(a,this),c=b.length;return this.filter(function(){for(var a=0;c>a;a++)if(n.contains(this,b[a]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=u.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.unique(f):f)},index:function(a){return a?"string"==typeof a?g.call(n(a),this[0]):g.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.unique(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){while((a=a[b])&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return n.dir(a,"parentNode")},parentsUntil:function(a,b,c){return n.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return n.dir(a,"nextSibling")},prevAll:function(a){return n.dir(a,"previousSibling")},nextUntil:function(a,b,c){return n.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return n.dir(a,"previousSibling",c)},siblings:function(a){return n.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return n.sibling(a.firstChild)},contents:function(a){return a.contentDocument||n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(C[a]||n.unique(e),B.test(a)&&e.reverse()),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return n.each(a.match(E)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):n.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(b=a.memory&&l,c=!0,g=e||0,e=0,f=h.length,d=!0;h&&f>g;g++)if(h[g].apply(l[0],l[1])===!1&&a.stopOnFalse){b=!1;break}d=!1,h&&(i?i.length&&j(i.shift()):b?h=[]:k.disable())},k={add:function(){if(h){var c=h.length;!function g(b){n.each(b,function(b,c){var d=n.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&g(c)})}(arguments),d?f=h.length:b&&(e=c,j(b))}return this},remove:function(){return h&&n.each(arguments,function(a,b){var c;while((c=n.inArray(b,h,c))>-1)h.splice(c,1),d&&(f>=c&&f--,g>=c&&g--)}),this},has:function(a){return a?n.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],f=0,this},disable:function(){return h=i=b=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,b||k.disable(),this},locked:function(){return!i},fireWith:function(a,b){return!h||c&&!i||(b=b||[],b=[a,b.slice?b.slice():b],d?i.push(b):j(b)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!c}};return k},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&n.isFunction(a.promise)?e:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(H.resolveWith(l,[n]),n.fn.triggerHandler&&(n(l).triggerHandler("ready"),n(l).off("ready"))))}});function I(){l.removeEventListener("DOMContentLoaded",I,!1),a.removeEventListener("load",I,!1),n.ready()}n.ready.promise=function(b){return H||(H=n.Deferred(),"complete"===l.readyState?setTimeout(n.ready):(l.addEventListener("DOMContentLoaded",I,!1),a.addEventListener("load",I,!1))),H.promise(b)},n.ready.promise();var J=n.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===n.type(c)){e=!0;for(h in c)n.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f};n.acceptData=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function K(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=n.expando+Math.random()}K.uid=1,K.accepts=n.acceptData,K.prototype={key:function(a){if(!K.accepts(a))return 0;var b={},c=a[this.expando];if(!c){c=K.uid++;try{b[this.expando]={value:c},Object.defineProperties(a,b)}catch(d){b[this.expando]=c,n.extend(a,b)}}return this.cache[c]||(this.cache[c]={}),c},set:function(a,b,c){var d,e=this.key(a),f=this.cache[e];if("string"==typeof b)f[b]=c;else if(n.isEmptyObject(f))n.extend(this.cache[e],b);else for(d in b)f[d]=b[d];return f},get:function(a,b){var c=this.cache[this.key(a)];return void 0===b?c:c[b]},access:function(a,b,c){var d;return void 0===b||b&&"string"==typeof b&&void 0===c?(d=this.get(a,b),void 0!==d?d:this.get(a,n.camelCase(b))):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d,e,f=this.key(a),g=this.cache[f];if(void 0===b)this.cache[f]={};else{n.isArray(b)?d=b.concat(b.map(n.camelCase)):(e=n.camelCase(b),b in g?d=[b,e]:(d=e,d=d in g?[d]:d.match(E)||[])),c=d.length;while(c--)delete g[d[c]]}},hasData:function(a){return!n.isEmptyObject(this.cache[a[this.expando]]||{})},discard:function(a){a[this.expando]&&delete this.cache[a[this.expando]]}};var L=new K,M=new K,N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(O,"-$1").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}M.set(a,b,c)}else c=void 0;return c}n.extend({hasData:function(a){return M.hasData(a)||L.hasData(a)},data:function(a,b,c){return M.access(a,b,c)},removeData:function(a,b){M.remove(a,b)
4919},_data:function(a,b,c){return L.access(a,b,c)},_removeData:function(a,b){L.remove(a,b)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=M.get(f),1===f.nodeType&&!L.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d])));L.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){M.set(this,a)}):J(this,function(b){var c,d=n.camelCase(a);if(f&&void 0===b){if(c=M.get(f,a),void 0!==c)return c;if(c=M.get(f,d),void 0!==c)return c;if(c=P(f,d,void 0),void 0!==c)return c}else this.each(function(){var c=M.get(this,d);M.set(this,d,b),-1!==a.indexOf("-")&&void 0!==c&&M.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){M.remove(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=L.get(a,b),c&&(!d||n.isArray(c)?d=L.access(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return L.get(a,c)||L.access(a,c,{empty:n.Callbacks("once memory").add(function(){L.remove(a,[b+"queue",c])})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?n.queue(this[0],a):void 0===b?this:this.each(function(){var c=n.queue(this,a,b);n._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&n.dequeue(this,a)})},dequeue:function(a){return this.each(function(){n.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=n.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=L.get(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var Q=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,R=["Top","Right","Bottom","Left"],S=function(a,b){return a=b||a,"none"===n.css(a,"display")||!n.contains(a.ownerDocument,a)},T=/^(?:checkbox|radio)$/i;!function(){var a=l.createDocumentFragment(),b=a.appendChild(l.createElement("div")),c=l.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="<textarea>x</textarea>",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var U="undefined";k.focusinBubbles="onfocusin"in a;var V=/^key/,W=/^(?:mouse|pointer|contextmenu)|click/,X=/^(?:focusinfocus|focusoutblur)$/,Y=/^([^.]*)(?:\.(.+)|)$/;function Z(){return!0}function $(){return!1}function _(){try{return l.activeElement}catch(a){}}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.get(a);if(r){c.handler&&(f=c,c=f.handler,e=f.selector),c.guid||(c.guid=n.guid++),(i=r.events)||(i=r.events={}),(g=r.handle)||(g=r.handle=function(b){return typeof n!==U&&n.event.triggered!==b.type?n.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(E)||[""],j=b.length;while(j--)h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o&&(l=n.event.special[o]||{},o=(e?l.delegateType:l.bindType)||o,l=n.event.special[o]||{},k=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},f),(m=i[o])||(m=i[o]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,p,g)!==!1||a.addEventListener&&a.addEventListener(o,g,!1)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),n.event.global[o]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.hasData(a)&&L.get(a);if(r&&(i=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=i[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&q!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete i[o])}else for(o in i)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(i)&&(delete r.handle,L.remove(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,m,o,p=[d||l],q=j.call(b,"type")?b.type:b,r=j.call(b,"namespace")?b.namespace.split("."):[];if(g=h=d=d||l,3!==d.nodeType&&8!==d.nodeType&&!X.test(q+n.event.triggered)&&(q.indexOf(".")>=0&&(r=q.split("."),q=r.shift(),r.sort()),k=q.indexOf(":")<0&&"on"+q,b=b[n.expando]?b:new n.Event(q,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=r.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+r.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:n.makeArray(c,[b]),o=n.event.special[q]||{},e||!o.trigger||o.trigger.apply(d,c)!==!1)){if(!e&&!o.noBubble&&!n.isWindow(d)){for(i=o.delegateType||q,X.test(i+q)||(g=g.parentNode);g;g=g.parentNode)p.push(g),h=g;h===(d.ownerDocument||l)&&p.push(h.defaultView||h.parentWindow||a)}f=0;while((g=p[f++])&&!b.isPropagationStopped())b.type=f>1?i:o.bindType||q,m=(L.get(g,"events")||{})[b.type]&&L.get(g,"handle"),m&&m.apply(g,c),m=k&&g[k],m&&m.apply&&n.acceptData(g)&&(b.result=m.apply(g,c),b.result===!1&&b.preventDefault());return b.type=q,e||b.isDefaultPrevented()||o._default&&o._default.apply(p.pop(),c)!==!1||!n.acceptData(d)||k&&n.isFunction(d[q])&&!n.isWindow(d)&&(h=d[k],h&&(d[k]=null),n.event.triggered=q,d[q](),n.event.triggered=void 0,h&&(d[k]=h)),b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(L.get(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(g.namespace))&&(a.handleObj=g,a.data=g.data,e=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==e&&(a.result=e)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!==this;i=i.parentNode||this)if(i.disabled!==!0||"click"!==a.type){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>=0:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,d,e,f=b.button;return null==a.pageX&&null!=b.clientX&&(c=a.target.ownerDocument||l,d=c.documentElement,e=c.body,a.pageX=b.clientX+(d&&d.scrollLeft||e&&e.scrollLeft||0)-(d&&d.clientLeft||e&&e.clientLeft||0),a.pageY=b.clientY+(d&&d.scrollTop||e&&e.scrollTop||0)-(d&&d.clientTop||e&&e.clientTop||0)),a.which||void 0===f||(a.which=1&f?1:2&f?3:4&f?2:0),a}},fix:function(a){if(a[n.expando])return a;var b,c,d,e=a.type,f=a,g=this.fixHooks[e];g||(this.fixHooks[e]=g=W.test(e)?this.mouseHooks:V.test(e)?this.keyHooks:{}),d=g.props?this.props.concat(g.props):this.props,a=new n.Event(f),b=d.length;while(b--)c=d[b],a[c]=f[c];return a.target||(a.target=l),3===a.target.nodeType&&(a.target=a.target.parentNode),g.filter?g.filter(a,f):a},special:{load:{noBubble:!0},focus:{trigger:function(){return this!==_()&&this.focus?(this.focus(),!1):void 0},delegateType:"focusin"},blur:{trigger:function(){return this===_()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return"checkbox"===this.type&&this.click&&n.nodeName(this,"input")?(this.click(),!1):void 0},_default:function(a){return n.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c,d){var e=n.extend(new n.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?n.event.trigger(e,null,b):n.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},n.removeEvent=function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)},n.Event=function(a,b){return this instanceof n.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?Z:$):this.type=a,b&&n.extend(this,b),this.timeStamp=a&&a.timeStamp||n.now(),void(this[n.expando]=!0)):new n.Event(a,b)},n.Event.prototype={isDefaultPrevented:$,isPropagationStopped:$,isImmediatePropagationStopped:$,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=Z,a&&a.preventDefault&&a.preventDefault()},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=Z,a&&a.stopPropagation&&a.stopPropagation()},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=Z,a&&a.stopImmediatePropagation&&a.stopImmediatePropagation(),this.stopPropagation()}},n.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){n.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return(!e||e!==d&&!n.contains(d,e))&&(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),k.focusinBubbles||n.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){n.event.simulate(b,a.target,n.event.fix(a),!0)};n.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=L.access(d,b);e||d.addEventListener(a,c,!0),L.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=L.access(d,b)-1;e?L.access(d,b,e):(d.removeEventListener(a,c,!0),L.remove(d,b))}}}),n.fn.extend({on:function(a,b,c,d,e){var f,g;if("object"==typeof a){"string"!=typeof b&&(c=c||b,b=void 0);for(g in a)this.on(g,b,c,a[g],e);return this}if(null==c&&null==d?(d=b,c=b=void 0):null==d&&("string"==typeof b?(d=c,c=void 0):(d=c,c=b,b=void 0)),d===!1)d=$;else if(!d)return this;return 1===e&&(f=d,d=function(a){return n().off(a),f.apply(this,arguments)},d.guid=f.guid||(f.guid=n.guid++)),this.each(function(){n.event.add(this,a,d,c,b)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,n(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return(b===!1||"function"==typeof b)&&(c=b,b=void 0),c===!1&&(c=$),this.each(function(){n.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){n.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?n.event.trigger(a,b,c,!0):void 0}});var ab=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bb=/<([\w:]+)/,cb=/<|&#?\w+;/,db=/<(?:script|style|link)/i,eb=/checked\s*(?:[^=]|=\s*.checked.)/i,fb=/^$|\/(?:java|ecma)script/i,gb=/^true\/(.*)/,hb=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,ib={option:[1,"<select multiple='multiple'>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};ib.optgroup=ib.option,ib.tbody=ib.tfoot=ib.colgroup=ib.caption=ib.thead,ib.th=ib.td;function jb(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function kb(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function lb(a){var b=gb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function mb(a,b){for(var c=0,d=a.length;d>c;c++)L.set(a[c],"globalEval",!b||L.get(b[c],"globalEval"))}function nb(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(L.hasData(a)&&(f=L.access(a),g=L.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;d>c;c++)n.event.add(b,e,j[e][c])}M.hasData(a)&&(h=M.access(a),i=n.extend({},h),M.set(b,i))}}function ob(a,b){var c=a.getElementsByTagName?a.getElementsByTagName(b||"*"):a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&n.nodeName(a,b)?n.merge([a],c):c}function pb(a,b){var c=b.nodeName.toLowerCase();"input"===c&&T.test(a.type)?b.checked=a.checked:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}n.extend({clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=n.contains(a.ownerDocument,a);if(!(k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(g=ob(h),f=ob(a),d=0,e=f.length;e>d;d++)pb(f[d],g[d]);if(b)if(c)for(f=f||ob(a),g=g||ob(h),d=0,e=f.length;e>d;d++)nb(f[d],g[d]);else nb(a,h);return g=ob(h,"script"),g.length>0&&mb(g,!i&&ob(a,"script")),h},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,k=b.createDocumentFragment(),l=[],m=0,o=a.length;o>m;m++)if(e=a[m],e||0===e)if("object"===n.type(e))n.merge(l,e.nodeType?[e]:e);else if(cb.test(e)){f=f||k.appendChild(b.createElement("div")),g=(bb.exec(e)||["",""])[1].toLowerCase(),h=ib[g]||ib._default,f.innerHTML=h[1]+e.replace(ab,"<$1></$2>")+h[2],j=h[0];while(j--)f=f.lastChild;n.merge(l,f.childNodes),f=k.firstChild,f.textContent=""}else l.push(b.createTextNode(e));k.textContent="",m=0;while(e=l[m++])if((!d||-1===n.inArray(e,d))&&(i=n.contains(e.ownerDocument,e),f=ob(k.appendChild(e),"script"),i&&mb(f),c)){j=0;while(e=f[j++])fb.test(e.type||"")&&c.push(e)}return k},cleanData:function(a){for(var b,c,d,e,f=n.event.special,g=0;void 0!==(c=a[g]);g++){if(n.acceptData(c)&&(e=c[L.expando],e&&(b=L.cache[e]))){if(b.events)for(d in b.events)f[d]?n.event.remove(c,d):n.removeEvent(c,d,b.handle);L.cache[e]&&delete L.cache[e]}delete M.cache[c[M.expando]]}}}),n.fn.extend({text:function(a){return J(this,function(a){return void 0===a?n.text(this):this.empty().each(function(){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&(this.textContent=a)})},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?n.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||n.cleanData(ob(c)),c.parentNode&&(b&&n.contains(c.ownerDocument,c)&&mb(ob(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(n.cleanData(ob(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return J(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!db.test(a)&&!ib[(bb.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(ab,"<$1></$2>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(ob(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,n.cleanData(ob(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,m=this,o=l-1,p=a[0],q=n.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&eb.test(p))return this.each(function(c){var d=m.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(c=n.buildFragment(a,this[0].ownerDocument,!1,this),d=c.firstChild,1===c.childNodes.length&&(c=d),d)){for(f=n.map(ob(c,"script"),kb),g=f.length;l>j;j++)h=c,j!==o&&(h=n.clone(h,!0,!0),g&&n.merge(f,ob(h,"script"))),b.call(this[j],h,j);if(g)for(i=f[f.length-1].ownerDocument,n.map(f,lb),j=0;g>j;j++)h=f[j],fb.test(h.type||"")&&!L.access(h,"globalEval")&&n.contains(i,h)&&(h.src?n._evalUrl&&n._evalUrl(h.src):n.globalEval(h.textContent.replace(hb,"")))}return this}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=[],e=n(a),g=e.length-1,h=0;g>=h;h++)c=h===g?this:this.clone(!0),n(e[h])[b](c),f.apply(d,c.get());return this.pushStack(d)}});var qb,rb={};function sb(b,c){var d,e=n(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:n.css(e[0],"display");return e.detach(),f}function tb(a){var b=l,c=rb[a];return c||(c=sb(a,b),"none"!==c&&c||(qb=(qb||n("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=qb[0].contentDocument,b.write(),b.close(),c=sb(a,b),qb.detach()),rb[a]=c),c}var ub=/^margin/,vb=new RegExp("^("+Q+")(?!px)[a-z%]+$","i"),wb=function(a){return a.ownerDocument.defaultView.getComputedStyle(a,null)};function xb(a,b,c){var d,e,f,g,h=a.style;return c=c||wb(a),c&&(g=c.getPropertyValue(b)||c[b]),c&&(""!==g||n.contains(a.ownerDocument,a)||(g=n.style(a,b)),vb.test(g)&&ub.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0!==g?g+"":g}function yb(a,b){return{get:function(){return a()?void delete this.get:(this.get=b).apply(this,arguments)}}}!function(){var b,c,d=l.documentElement,e=l.createElement("div"),f=l.createElement("div");if(f.style){f.style.backgroundClip="content-box",f.cloneNode(!0).style.backgroundClip="",k.clearCloneStyle="content-box"===f.style.backgroundClip,e.style.cssText="border:0;width:0;height:0;top:0;left:-9999px;margin-top:1px;position:absolute",e.appendChild(f);function g(){f.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute",f.innerHTML="",d.appendChild(e);var g=a.getComputedStyle(f,null);b="1%"!==g.top,c="4px"===g.width,d.removeChild(e)}a.getComputedStyle&&n.extend(k,{pixelPosition:function(){return g(),b},boxSizingReliable:function(){return null==c&&g(),c},reliableMarginRight:function(){var b,c=f.appendChild(l.createElement("div"));return c.style.cssText=f.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",c.style.marginRight=c.style.width="0",f.style.width="1px",d.appendChild(e),b=!parseFloat(a.getComputedStyle(c,null).marginRight),d.removeChild(e),b}})}}(),n.swap=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};var zb=/^(none|table(?!-c[ea]).+)/,Ab=new RegExp("^("+Q+")(.*)$","i"),Bb=new RegExp("^([+-])=("+Q+")","i"),Cb={position:"absolute",visibility:"hidden",display:"block"},Db={letterSpacing:"0",fontWeight:"400"},Eb=["Webkit","O","Moz","ms"];function Fb(a,b){if(b in a)return b;var c=b[0].toUpperCase()+b.slice(1),d=b,e=Eb.length;while(e--)if(b=Eb[e]+c,b in a)return b;return d}function Gb(a,b,c){var d=Ab.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function Hb(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=n.css(a,c+R[f],!0,e)),d?("content"===c&&(g-=n.css(a,"padding"+R[f],!0,e)),"margin"!==c&&(g-=n.css(a,"border"+R[f]+"Width",!0,e))):(g+=n.css(a,"padding"+R[f],!0,e),"padding"!==c&&(g+=n.css(a,"border"+R[f]+"Width",!0,e)));return g}function Ib(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=wb(a),g="border-box"===n.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=xb(a,b,f),(0>e||null==e)&&(e=a.style[b]),vb.test(e))return e;d=g&&(k.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+Hb(a,b,c||(g?"border":"content"),d,f)+"px"}function Jb(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=L.get(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&S(d)&&(f[g]=L.access(d,"olddisplay",tb(d.nodeName)))):(e=S(d),"none"===c&&e||L.set(d,"olddisplay",e?c:n.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}n.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=xb(a,"opacity");return""===c?"1":c}}}},cssNumber:{columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":"cssFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=n.camelCase(b),i=a.style;return b=n.cssProps[h]||(n.cssProps[h]=Fb(i,h)),g=n.cssHooks[b]||n.cssHooks[h],void 0===c?g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b]:(f=typeof c,"string"===f&&(e=Bb.exec(c))&&(c=(e[1]+1)*e[2]+parseFloat(n.css(a,b)),f="number"),null!=c&&c===c&&("number"!==f||n.cssNumber[h]||(c+="px"),k.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),g&&"set"in g&&void 0===(c=g.set(a,c,d))||(i[b]=c)),void 0)}},css:function(a,b,c,d){var e,f,g,h=n.camelCase(b);return b=n.cssProps[h]||(n.cssProps[h]=Fb(a.style,h)),g=n.cssHooks[b]||n.cssHooks[h],g&&"get"in g&&(e=g.get(a,!0,c)),void 0===e&&(e=xb(a,b,d)),"normal"===e&&b in Db&&(e=Db[b]),""===c||c?(f=parseFloat(e),c===!0||n.isNumeric(f)?f||0:e):e}}),n.each(["height","width"],function(a,b){n.cssHooks[b]={get:function(a,c,d){return c?zb.test(n.css(a,"display"))&&0===a.offsetWidth?n.swap(a,Cb,function(){return Ib(a,b,d)}):Ib(a,b,d):void 0},set:function(a,c,d){var e=d&&wb(a);return Gb(a,c,d?Hb(a,b,d,"border-box"===n.css(a,"boxSizing",!1,e),e):0)}}}),n.cssHooks.marginRight=yb(k.reliableMarginRight,function(a,b){return b?n.swap(a,{display:"inline-block"},xb,[a,"marginRight"]):void 0}),n.each({margin:"",padding:"",border:"Width"},function(a,b){n.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+R[d]+b]=f[d]||f[d-2]||f[0];return e}},ub.test(a)||(n.cssHooks[a+b].set=Gb)}),n.fn.extend({css:function(a,b){return J(this,function(a,b,c){var d,e,f={},g=0;if(n.isArray(b)){for(d=wb(a),e=b.length;e>g;g++)f[b[g]]=n.css(a,b[g],!1,d);return f}return void 0!==c?n.style(a,b,c):n.css(a,b)},a,b,arguments.length>1)},show:function(){return Jb(this,!0)},hide:function(){return Jb(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){S(this)?n(this).show():n(this).hide()})}});function Kb(a,b,c,d,e){return new Kb.prototype.init(a,b,c,d,e)}n.Tween=Kb,Kb.prototype={constructor:Kb,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(n.cssNumber[c]?"":"px")},cur:function(){var a=Kb.propHooks[this.prop];return a&&a.get?a.get(this):Kb.propHooks._default.get(this)},run:function(a){var b,c=Kb.propHooks[this.prop];return this.pos=b=this.options.duration?n.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):Kb.propHooks._default.set(this),this}},Kb.prototype.init.prototype=Kb.prototype,Kb.propHooks={_default:{get:function(a){var b;return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(b=n.css(a.elem,a.prop,""),b&&"auto"!==b?b:0):a.elem[a.prop]},set:function(a){n.fx.step[a.prop]?n.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[n.cssProps[a.prop]]||n.cssHooks[a.prop])?n.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},Kb.propHooks.scrollTop=Kb.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},n.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},n.fx=Kb.prototype.init,n.fx.step={};var Lb,Mb,Nb=/^(?:toggle|show|hide)$/,Ob=new RegExp("^(?:([+-])=|)("+Q+")([a-z%]*)$","i"),Pb=/queueHooks$/,Qb=[Vb],Rb={"*":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=Ob.exec(b),f=e&&e[3]||(n.cssNumber[a]?"":"px"),g=(n.cssNumber[a]||"px"!==f&&+d)&&Ob.exec(n.css(c.elem,a)),h=1,i=20;if(g&&g[3]!==f){f=f||g[3],e=e||[],g=+d||1;do h=h||".5",g/=h,n.style(c.elem,a,g+f);while(h!==(h=c.cur()/d)&&1!==h&&--i)}return e&&(g=c.start=+g||+d||0,c.unit=f,c.end=e[1]?g+(e[1]+1)*e[2]:+e[2]),c}]};function Sb(){return setTimeout(function(){Lb=void 0}),Lb=n.now()}function Tb(a,b){var c,d=0,e={height:a};for(b=b?1:0;4>d;d+=2-b)c=R[d],e["margin"+c]=e["padding"+c]=a;return b&&(e.opacity=e.width=a),e}function Ub(a,b,c){for(var d,e=(Rb[b]||[]).concat(Rb["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function Vb(a,b,c){var d,e,f,g,h,i,j,k,l=this,m={},o=a.style,p=a.nodeType&&S(a),q=L.get(a,"fxshow");c.queue||(h=n._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,l.always(function(){l.always(function(){h.unqueued--,n.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[o.overflow,o.overflowX,o.overflowY],j=n.css(a,"display"),k="none"===j?L.get(a,"olddisplay")||tb(a.nodeName):j,"inline"===k&&"none"===n.css(a,"float")&&(o.display="inline-block")),c.overflow&&(o.overflow="hidden",l.always(function(){o.overflow=c.overflow[0],o.overflowX=c.overflow[1],o.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],Nb.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(p?"hide":"show")){if("show"!==e||!q||void 0===q[d])continue;p=!0}m[d]=q&&q[d]||n.style(a,d)}else j=void 0;if(n.isEmptyObject(m))"inline"===("none"===j?tb(a.nodeName):j)&&(o.display=j);else{q?"hidden"in q&&(p=q.hidden):q=L.access(a,"fxshow",{}),f&&(q.hidden=!p),p?n(a).show():l.done(function(){n(a).hide()}),l.done(function(){var b;L.remove(a,"fxshow");for(b in m)n.style(a,b,m[b])});for(d in m)g=Ub(p?q[d]:0,d,l),d in q||(q[d]=g.start,p&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function Wb(a,b){var c,d,e,f,g;for(c in a)if(d=n.camelCase(c),e=b[d],f=a[c],n.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=n.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function Xb(a,b,c){var d,e,f=0,g=Qb.length,h=n.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=Lb||Sb(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:n.extend({},b),opts:n.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:Lb||Sb(),duration:c.duration,tweens:[],createTween:function(b,c){var d=n.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;for(Wb(k,j.opts.specialEasing);g>f;f++)if(d=Qb[f].call(j,a,k,j.opts))return d;return n.map(k,Ub,j),n.isFunction(j.opts.start)&&j.opts.start.call(a,j),n.fx.timer(n.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}n.Animation=n.extend(Xb,{tweener:function(a,b){n.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");for(var c,d=0,e=a.length;e>d;d++)c=a[d],Rb[c]=Rb[c]||[],Rb[c].unshift(b)},prefilter:function(a,b){b?Qb.unshift(a):Qb.push(a)}}),n.speed=function(a,b,c){var d=a&&"object"==typeof a?n.extend({},a):{complete:c||!c&&b||n.isFunction(a)&&a,duration:a,easing:c&&b||b&&!n.isFunction(b)&&b};return d.duration=n.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in n.fx.speeds?n.fx.speeds[d.duration]:n.fx.speeds._default,(null==d.queue||d.queue===!0)&&(d.queue="fx"),d.old=d.complete,d.complete=function(){n.isFunction(d.old)&&d.old.call(this),d.queue&&n.dequeue(this,d.queue)},d},n.fn.extend({fadeTo:function(a,b,c,d){return this.filter(S).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=n.isEmptyObject(a),f=n.speed(b,c,d),g=function(){var b=Xb(this,n.extend({},a),f);(e||L.get(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=n.timers,g=L.get(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&Pb.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));(b||!c)&&n.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=L.get(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=n.timers,g=d?d.length:0;for(c.finish=!0,n.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),n.each(["toggle","show","hide"],function(a,b){var c=n.fn[b];n.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(Tb(b,!0),a,d,e)}}),n.each({slideDown:Tb("show"),slideUp:Tb("hide"),slideToggle:Tb("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){n.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),n.timers=[],n.fx.tick=function(){var a,b=0,c=n.timers;for(Lb=n.now();b<c.length;b++)a=c[b],a()||c[b]!==a||c.splice(b--,1);c.length||n.fx.stop(),Lb=void 0},n.fx.timer=function(a){n.timers.push(a),a()?n.fx.start():n.timers.pop()},n.fx.interval=13,n.fx.start=function(){Mb||(Mb=setInterval(n.fx.tick,n.fx.interval))},n.fx.stop=function(){clearInterval(Mb),Mb=null},n.fx.speeds={slow:600,fast:200,_default:400},n.fn.delay=function(a,b){return a=n.fx?n.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},function(){var a=l.createElement("input"),b=l.createElement("select"),c=b.appendChild(l.createElement("option"));a.type="checkbox",k.checkOn=""!==a.value,k.optSelected=c.selected,b.disabled=!0,k.optDisabled=!c.disabled,a=l.createElement("input"),a.value="t",a.type="radio",k.radioValue="t"===a.value}();var Yb,Zb,$b=n.expr.attrHandle;n.fn.extend({attr:function(a,b){return J(this,n.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){n.removeAttr(this,a)})}}),n.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(a&&3!==f&&8!==f&&2!==f)return typeof a.getAttribute===U?n.prop(a,b,c):(1===f&&n.isXMLDoc(a)||(b=b.toLowerCase(),d=n.attrHooks[b]||(n.expr.match.bool.test(b)?Zb:Yb)),void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=n.find.attr(a,b),null==e?void 0:e):null!==c?d&&"set"in d&&void 0!==(e=d.set(a,c,b))?e:(a.setAttribute(b,c+""),c):void n.removeAttr(a,b))
4920},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(E);if(f&&1===a.nodeType)while(c=f[e++])d=n.propFix[c]||c,n.expr.match.bool.test(c)&&(a[d]=!1),a.removeAttribute(c)},attrHooks:{type:{set:function(a,b){if(!k.radioValue&&"radio"===b&&n.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}}}),Zb={set:function(a,b,c){return b===!1?n.removeAttr(a,c):a.setAttribute(c,c),c}},n.each(n.expr.match.bool.source.match(/\w+/g),function(a,b){var c=$b[b]||n.find.attr;$b[b]=function(a,b,d){var e,f;return d||(f=$b[b],$b[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,$b[b]=f),e}});var _b=/^(?:input|select|textarea|button)$/i;n.fn.extend({prop:function(a,b){return J(this,n.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[n.propFix[a]||a]})}}),n.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(a,b,c){var d,e,f,g=a.nodeType;if(a&&3!==g&&8!==g&&2!==g)return f=1!==g||!n.isXMLDoc(a),f&&(b=n.propFix[b]||b,e=n.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){return a.hasAttribute("tabindex")||_b.test(a.nodeName)||a.href?a.tabIndex:-1}}}}),k.optSelected||(n.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null}}),n.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){n.propFix[this.toLowerCase()]=this});var ac=/[\t\r\n\f]/g;n.fn.extend({addClass:function(a){var b,c,d,e,f,g,h="string"==typeof a&&a,i=0,j=this.length;if(n.isFunction(a))return this.each(function(b){n(this).addClass(a.call(this,b,this.className))});if(h)for(b=(a||"").match(E)||[];j>i;i++)if(c=this[i],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ac," "):" ")){f=0;while(e=b[f++])d.indexOf(" "+e+" ")<0&&(d+=e+" ");g=n.trim(d),c.className!==g&&(c.className=g)}return this},removeClass:function(a){var b,c,d,e,f,g,h=0===arguments.length||"string"==typeof a&&a,i=0,j=this.length;if(n.isFunction(a))return this.each(function(b){n(this).removeClass(a.call(this,b,this.className))});if(h)for(b=(a||"").match(E)||[];j>i;i++)if(c=this[i],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ac," "):"")){f=0;while(e=b[f++])while(d.indexOf(" "+e+" ")>=0)d=d.replace(" "+e+" "," ");g=a?n.trim(d):"",c.className!==g&&(c.className=g)}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):this.each(n.isFunction(a)?function(c){n(this).toggleClass(a.call(this,c,this.className,b),b)}:function(){if("string"===c){var b,d=0,e=n(this),f=a.match(E)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else(c===U||"boolean"===c)&&(this.className&&L.set(this,"__className__",this.className),this.className=this.className||a===!1?"":L.get(this,"__className__")||"")})},hasClass:function(a){for(var b=" "+a+" ",c=0,d=this.length;d>c;c++)if(1===this[c].nodeType&&(" "+this[c].className+" ").replace(ac," ").indexOf(b)>=0)return!0;return!1}});var bc=/\r/g;n.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=n.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,n(this).val()):a,null==e?e="":"number"==typeof e?e+="":n.isArray(e)&&(e=n.map(e,function(a){return null==a?"":a+""})),b=n.valHooks[this.type]||n.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=n.valHooks[e.type]||n.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(bc,""):null==c?"":c)}}}),n.extend({valHooks:{option:{get:function(a){var b=n.find.attr(a,"value");return null!=b?b:n.trim(n.text(a))}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],!(!c.selected&&i!==e||(k.optDisabled?c.disabled:null!==c.getAttribute("disabled"))||c.parentNode.disabled&&n.nodeName(c.parentNode,"optgroup"))){if(b=n(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=n.makeArray(b),g=e.length;while(g--)d=e[g],(d.selected=n.inArray(d.value,f)>=0)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),n.each(["radio","checkbox"],function(){n.valHooks[this]={set:function(a,b){return n.isArray(b)?a.checked=n.inArray(n(a).val(),b)>=0:void 0}},k.checkOn||(n.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})}),n.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){n.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),n.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}});var cc=n.now(),dc=/\?/;n.parseJSON=function(a){return JSON.parse(a+"")},n.parseXML=function(a){var b,c;if(!a||"string"!=typeof a)return null;try{c=new DOMParser,b=c.parseFromString(a,"text/xml")}catch(d){b=void 0}return(!b||b.getElementsByTagName("parsererror").length)&&n.error("Invalid XML: "+a),b};var ec,fc,gc=/#.*$/,hc=/([?&])_=[^&]*/,ic=/^(.*?):[ \t]*([^\r\n]*)$/gm,jc=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,kc=/^(?:GET|HEAD)$/,lc=/^\/\//,mc=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,nc={},oc={},pc="*/".concat("*");try{fc=location.href}catch(qc){fc=l.createElement("a"),fc.href="",fc=fc.href}ec=mc.exec(fc.toLowerCase())||[];function rc(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(E)||[];if(n.isFunction(c))while(d=f[e++])"+"===d[0]?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function sc(a,b,c,d){var e={},f=a===oc;function g(h){var i;return e[h]=!0,n.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function tc(a,b){var c,d,e=n.ajaxSettings.flatOptions||{};for(c in b)void 0!==b[c]&&((e[c]?a:d||(d={}))[c]=b[c]);return d&&n.extend(!0,a,d),a}function uc(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===d&&(d=a.mimeType||b.getResponseHeader("Content-Type"));if(d)for(e in h)if(h[e]&&h[e].test(d)){i.unshift(e);break}if(i[0]in c)f=i[0];else{for(e in c){if(!i[0]||a.converters[e+" "+i[0]]){f=e;break}g||(g=e)}f=f||g}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function vc(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}n.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:fc,type:"GET",isLocal:jc.test(ec[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":pc,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":n.parseJSON,"text xml":n.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?tc(tc(a,n.ajaxSettings),b):tc(n.ajaxSettings,a)},ajaxPrefilter:rc(nc),ajaxTransport:rc(oc),ajax:function(a,b){"object"==typeof a&&(b=a,a=void 0),b=b||{};var c,d,e,f,g,h,i,j,k=n.ajaxSetup({},b),l=k.context||k,m=k.context&&(l.nodeType||l.jquery)?n(l):n.event,o=n.Deferred(),p=n.Callbacks("once memory"),q=k.statusCode||{},r={},s={},t=0,u="canceled",v={readyState:0,getResponseHeader:function(a){var b;if(2===t){if(!f){f={};while(b=ic.exec(e))f[b[1].toLowerCase()]=b[2]}b=f[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===t?e:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return t||(a=s[c]=s[c]||a,r[a]=b),this},overrideMimeType:function(a){return t||(k.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>t)for(b in a)q[b]=[q[b],a[b]];else v.always(a[v.status]);return this},abort:function(a){var b=a||u;return c&&c.abort(b),x(0,b),this}};if(o.promise(v).complete=p.add,v.success=v.done,v.error=v.fail,k.url=((a||k.url||fc)+"").replace(gc,"").replace(lc,ec[1]+"//"),k.type=b.method||b.type||k.method||k.type,k.dataTypes=n.trim(k.dataType||"*").toLowerCase().match(E)||[""],null==k.crossDomain&&(h=mc.exec(k.url.toLowerCase()),k.crossDomain=!(!h||h[1]===ec[1]&&h[2]===ec[2]&&(h[3]||("http:"===h[1]?"80":"443"))===(ec[3]||("http:"===ec[1]?"80":"443")))),k.data&&k.processData&&"string"!=typeof k.data&&(k.data=n.param(k.data,k.traditional)),sc(nc,k,b,v),2===t)return v;i=k.global,i&&0===n.active++&&n.event.trigger("ajaxStart"),k.type=k.type.toUpperCase(),k.hasContent=!kc.test(k.type),d=k.url,k.hasContent||(k.data&&(d=k.url+=(dc.test(d)?"&":"?")+k.data,delete k.data),k.cache===!1&&(k.url=hc.test(d)?d.replace(hc,"$1_="+cc++):d+(dc.test(d)?"&":"?")+"_="+cc++)),k.ifModified&&(n.lastModified[d]&&v.setRequestHeader("If-Modified-Since",n.lastModified[d]),n.etag[d]&&v.setRequestHeader("If-None-Match",n.etag[d])),(k.data&&k.hasContent&&k.contentType!==!1||b.contentType)&&v.setRequestHeader("Content-Type",k.contentType),v.setRequestHeader("Accept",k.dataTypes[0]&&k.accepts[k.dataTypes[0]]?k.accepts[k.dataTypes[0]]+("*"!==k.dataTypes[0]?", "+pc+"; q=0.01":""):k.accepts["*"]);for(j in k.headers)v.setRequestHeader(j,k.headers[j]);if(k.beforeSend&&(k.beforeSend.call(l,v,k)===!1||2===t))return v.abort();u="abort";for(j in{success:1,error:1,complete:1})v[j](k[j]);if(c=sc(oc,k,b,v)){v.readyState=1,i&&m.trigger("ajaxSend",[v,k]),k.async&&k.timeout>0&&(g=setTimeout(function(){v.abort("timeout")},k.timeout));try{t=1,c.send(r,x)}catch(w){if(!(2>t))throw w;x(-1,w)}}else x(-1,"No Transport");function x(a,b,f,h){var j,r,s,u,w,x=b;2!==t&&(t=2,g&&clearTimeout(g),c=void 0,e=h||"",v.readyState=a>0?4:0,j=a>=200&&300>a||304===a,f&&(u=uc(k,v,f)),u=vc(k,u,v,j),j?(k.ifModified&&(w=v.getResponseHeader("Last-Modified"),w&&(n.lastModified[d]=w),w=v.getResponseHeader("etag"),w&&(n.etag[d]=w)),204===a||"HEAD"===k.type?x="nocontent":304===a?x="notmodified":(x=u.state,r=u.data,s=u.error,j=!s)):(s=x,(a||!x)&&(x="error",0>a&&(a=0))),v.status=a,v.statusText=(b||x)+"",j?o.resolveWith(l,[r,x,v]):o.rejectWith(l,[v,x,s]),v.statusCode(q),q=void 0,i&&m.trigger(j?"ajaxSuccess":"ajaxError",[v,k,j?r:s]),p.fireWith(l,[v,x]),i&&(m.trigger("ajaxComplete",[v,k]),--n.active||n.event.trigger("ajaxStop")))}return v},getJSON:function(a,b,c){return n.get(a,b,c,"json")},getScript:function(a,b){return n.get(a,void 0,b,"script")}}),n.each(["get","post"],function(a,b){n[b]=function(a,c,d,e){return n.isFunction(c)&&(e=e||d,d=c,c=void 0),n.ajax({url:a,type:b,dataType:e,data:c,success:d})}}),n.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){n.fn[b]=function(a){return this.on(b,a)}}),n._evalUrl=function(a){return n.ajax({url:a,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},n.fn.extend({wrapAll:function(a){var b;return n.isFunction(a)?this.each(function(b){n(this).wrapAll(a.call(this,b))}):(this[0]&&(b=n(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstElementChild)a=a.firstElementChild;return a}).append(this)),this)},wrapInner:function(a){return this.each(n.isFunction(a)?function(b){n(this).wrapInner(a.call(this,b))}:function(){var b=n(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=n.isFunction(a);return this.each(function(c){n(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){n.nodeName(this,"body")||n(this).replaceWith(this.childNodes)}).end()}}),n.expr.filters.hidden=function(a){return a.offsetWidth<=0&&a.offsetHeight<=0},n.expr.filters.visible=function(a){return!n.expr.filters.hidden(a)};var wc=/%20/g,xc=/\[\]$/,yc=/\r?\n/g,zc=/^(?:submit|button|image|reset|file)$/i,Ac=/^(?:input|select|textarea|keygen)/i;function Bc(a,b,c,d){var e;if(n.isArray(b))n.each(b,function(b,e){c||xc.test(a)?d(a,e):Bc(a+"["+("object"==typeof e?b:"")+"]",e,c,d)});else if(c||"object"!==n.type(b))d(a,b);else for(e in b)Bc(a+"["+e+"]",b[e],c,d)}n.param=function(a,b){var c,d=[],e=function(a,b){b=n.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=n.ajaxSettings&&n.ajaxSettings.traditional),n.isArray(a)||a.jquery&&!n.isPlainObject(a))n.each(a,function(){e(this.name,this.value)});else for(c in a)Bc(c,a[c],b,e);return d.join("&").replace(wc,"+")},n.fn.extend({serialize:function(){return n.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=n.prop(this,"elements");return a?n.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!n(this).is(":disabled")&&Ac.test(this.nodeName)&&!zc.test(a)&&(this.checked||!T.test(a))}).map(function(a,b){var c=n(this).val();return null==c?null:n.isArray(c)?n.map(c,function(a){return{name:b.name,value:a.replace(yc,"\r\n")}}):{name:b.name,value:c.replace(yc,"\r\n")}}).get()}}),n.ajaxSettings.xhr=function(){try{return new XMLHttpRequest}catch(a){}};var Cc=0,Dc={},Ec={0:200,1223:204},Fc=n.ajaxSettings.xhr();a.ActiveXObject&&n(a).on("unload",function(){for(var a in Dc)Dc[a]()}),k.cors=!!Fc&&"withCredentials"in Fc,k.ajax=Fc=!!Fc,n.ajaxTransport(function(a){var b;return k.cors||Fc&&!a.crossDomain?{send:function(c,d){var e,f=a.xhr(),g=++Cc;if(f.open(a.type,a.url,a.async,a.username,a.password),a.xhrFields)for(e in a.xhrFields)f[e]=a.xhrFields[e];a.mimeType&&f.overrideMimeType&&f.overrideMimeType(a.mimeType),a.crossDomain||c["X-Requested-With"]||(c["X-Requested-With"]="XMLHttpRequest");for(e in c)f.setRequestHeader(e,c[e]);b=function(a){return function(){b&&(delete Dc[g],b=f.onload=f.onerror=null,"abort"===a?f.abort():"error"===a?d(f.status,f.statusText):d(Ec[f.status]||f.status,f.statusText,"string"==typeof f.responseText?{text:f.responseText}:void 0,f.getAllResponseHeaders()))}},f.onload=b(),f.onerror=b("error"),b=Dc[g]=b("abort");try{f.send(a.hasContent&&a.data||null)}catch(h){if(b)throw h}},abort:function(){b&&b()}}:void 0}),n.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(a){return n.globalEval(a),a}}}),n.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET")}),n.ajaxTransport("script",function(a){if(a.crossDomain){var b,c;return{send:function(d,e){b=n("<script>").prop({async:!0,charset:a.scriptCharset,src:a.url}).on("load error",c=function(a){b.remove(),c=null,a&&e("error"===a.type?404:200,a.type)}),l.head.appendChild(b[0])},abort:function(){c&&c()}}}});var Gc=[],Hc=/(=)\?(?=&|$)|\?\?/;n.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=Gc.pop()||n.expando+"_"+cc++;return this[a]=!0,a}}),n.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(Hc.test(b.url)?"url":"string"==typeof b.data&&!(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&Hc.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=n.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(Hc,"$1"+e):b.jsonp!==!1&&(b.url+=(dc.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||n.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,Gc.push(e)),g&&n.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),n.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||l;var d=v.exec(a),e=!c&&[];return d?[b.createElement(d[1])]:(d=n.buildFragment([a],b,e),e&&e.length&&n(e).remove(),n.merge([],d.childNodes))};var Ic=n.fn.load;n.fn.load=function(a,b,c){if("string"!=typeof a&&Ic)return Ic.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>=0&&(d=n.trim(a.slice(h)),a=a.slice(0,h)),n.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(e="POST"),g.length>0&&n.ajax({url:a,type:e,dataType:"html",data:b}).done(function(a){f=arguments,g.html(d?n("<div>").append(n.parseHTML(a)).find(d):a)}).complete(c&&function(a,b){g.each(c,f||[a.responseText,b,a])}),this},n.expr.filters.animated=function(a){return n.grep(n.timers,function(b){return a===b.elem}).length};var Jc=a.document.documentElement;function Kc(a){return n.isWindow(a)?a:9===a.nodeType&&a.defaultView}n.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=n.css(a,"position"),l=n(a),m={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=n.css(a,"top"),i=n.css(a,"left"),j=("absolute"===k||"fixed"===k)&&(f+i).indexOf("auto")>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),n.isFunction(b)&&(b=b.call(a,c,h)),null!=b.top&&(m.top=b.top-h.top+g),null!=b.left&&(m.left=b.left-h.left+e),"using"in b?b.using.call(a,m):l.css(m)}},n.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){n.offset.setOffset(this,a,b)});var b,c,d=this[0],e={top:0,left:0},f=d&&d.ownerDocument;if(f)return b=f.documentElement,n.contains(b,d)?(typeof d.getBoundingClientRect!==U&&(e=d.getBoundingClientRect()),c=Kc(f),{top:e.top+c.pageYOffset-b.clientTop,left:e.left+c.pageXOffset-b.clientLeft}):e},position:function(){if(this[0]){var a,b,c=this[0],d={top:0,left:0};return"fixed"===n.css(c,"position")?b=c.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),n.nodeName(a[0],"html")||(d=a.offset()),d.top+=n.css(a[0],"borderTopWidth",!0),d.left+=n.css(a[0],"borderLeftWidth",!0)),{top:b.top-d.top-n.css(c,"marginTop",!0),left:b.left-d.left-n.css(c,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||Jc;while(a&&!n.nodeName(a,"html")&&"static"===n.css(a,"position"))a=a.offsetParent;return a||Jc})}}),n.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(b,c){var d="pageYOffset"===c;n.fn[b]=function(e){return J(this,function(b,e,f){var g=Kc(b);return void 0===f?g?g[c]:b[e]:void(g?g.scrollTo(d?a.pageXOffset:f,d?f:a.pageYOffset):b[e]=f)},b,e,arguments.length,null)}}),n.each(["top","left"],function(a,b){n.cssHooks[b]=yb(k.pixelPosition,function(a,c){return c?(c=xb(a,b),vb.test(c)?n(a).position()[b]+"px":c):void 0})}),n.each({Height:"height",Width:"width"},function(a,b){n.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){n.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return J(this,function(b,c,d){var e;return n.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?n.css(b,c,g):n.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),n.fn.size=function(){return this.length},n.fn.andSelf=n.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return n});var Lc=a.jQuery,Mc=a.$;return n.noConflict=function(b){return a.$===n&&(a.$=Mc),b&&a.jQuery===n&&(a.jQuery=Lc),n},typeof b===U&&(a.jQuery=a.$=n),n});
4921</script>
4922 <script>/*!
4923 * Bootstrap v3.2.0 (http://getbootstrap.com)
4924 * Copyright 2011-2014 Twitter, Inc.
4925 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
4926 */
4927if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){return a(b.target).is(this)?b.handleObj.handler.apply(this,arguments):void 0}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.2.0",d.prototype.close=function(b){function c(){f.detach().trigger("closed.bs.alert").remove()}var d=a(this),e=d.attr("data-target");e||(e=d.attr("href"),e=e&&e.replace(/.*(?=#[^\s]*$)/,""));var f=a(e);b&&b.preventDefault(),f.length||(f=d.hasClass("alert")?d:d.parent()),f.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(f.removeClass("in"),a.support.transition&&f.hasClass("fade")?f.one("bsTransitionEnd",c).emulateTransitionEnd(150):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.2.0",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),d[e](null==f[b]?this.options[b]:f[b]),setTimeout(a.proxy(function(){"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")&&(c.prop("checked")&&this.$element.hasClass("active")?a=!1:b.find(".active").removeClass("active")),a&&c.prop("checked",!this.$element.hasClass("active")).trigger("change")}a&&this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target);d.hasClass("btn")||(d=d.closest(".btn")),b.call(d,"toggle"),c.preventDefault()})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b).on("keydown.bs.carousel",a.proxy(this.keydown,this)),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=this.sliding=this.interval=this.$active=this.$items=null,"hover"==this.options.pause&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.VERSION="3.2.0",c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0},c.prototype.keydown=function(a){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.to=function(b){var c=this,d=this.getItemIndex(this.$active=this.$element.find(".item.active"));return b>this.$items.length-1||0>b?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){c.to(b)}):d==b?this.pause().cycle():this.slide(b>d?"next":"prev",a(this.$items[b]))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){return this.sliding?void 0:this.slide("next")},c.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},c.prototype.slide=function(b,c){var d=this.$element.find(".item.active"),e=c||d[b](),f=this.interval,g="next"==b?"left":"right",h="next"==b?"first":"last",i=this;if(!e.length){if(!this.options.wrap)return;e=this.$element.find(".item")[h]()}if(e.hasClass("active"))return this.sliding=!1;var j=e[0],k=a.Event("slide.bs.carousel",{relatedTarget:j,direction:g});if(this.$element.trigger(k),!k.isDefaultPrevented()){if(this.sliding=!0,f&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var l=a(this.$indicators.children()[this.getItemIndex(e)]);l&&l.addClass("active")}var m=a.Event("slid.bs.carousel",{relatedTarget:j,direction:g});return a.support.transition&&this.$element.hasClass("slide")?(e.addClass(b),e[0].offsetWidth,d.addClass(g),e.addClass(g),d.one("bsTransitionEnd",function(){e.removeClass([b,g].join(" ")).addClass("active"),d.removeClass(["active",g].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger(m)},0)}).emulateTransitionEnd(1e3*d.css("transition-duration").slice(0,-1))):(d.removeClass("active"),e.addClass("active"),this.sliding=!1,this.$element.trigger(m)),f&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this},a(document).on("click.bs.carousel.data-api","[data-slide], [data-slide-to]",function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}}),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.collapse"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b);!e&&f.toggle&&"show"==b&&(b=!b),e||d.data("bs.collapse",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.transitioning=null,this.options.parent&&(this.$parent=a(this.options.parent)),this.options.toggle&&this.toggle()};c.VERSION="3.2.0",c.DEFAULTS={toggle:!0},c.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},c.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var c=a.Event("show.bs.collapse");if(this.$element.trigger(c),!c.isDefaultPrevented()){var d=this.$parent&&this.$parent.find("> .panel > .in");if(d&&d.length){var e=d.data("bs.collapse");if(e&&e.transitioning)return;b.call(d,"hide"),e||d.data("bs.collapse",null)}var f=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[f](0),this.transitioning=1;var g=function(){this.$element.removeClass("collapsing").addClass("collapse in")[f](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return g.call(this);var h=a.camelCase(["scroll",f].join("-"));this.$element.one("bsTransitionEnd",a.proxy(g,this)).emulateTransitionEnd(350)[f](this.$element[0][h])}}},c.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse").removeClass("in"),this.transitioning=1;var d=function(){this.transitioning=0,this.$element.trigger("hidden.bs.collapse").removeClass("collapsing").addClass("collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(d,this)).emulateTransitionEnd(350):d.call(this)}}},c.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()};var d=a.fn.collapse;a.fn.collapse=b,a.fn.collapse.Constructor=c,a.fn.collapse.noConflict=function(){return a.fn.collapse=d,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(c){var d,e=a(this),f=e.attr("data-target")||c.preventDefault()||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""),g=a(f),h=g.data("bs.collapse"),i=h?"toggle":e.data(),j=e.attr("data-parent"),k=j&&a(j);h&&h.transitioning||(k&&k.find('[data-toggle="collapse"][data-parent="'+j+'"]').not(e).addClass("collapsed"),e[g.hasClass("in")?"addClass":"removeClass"]("collapsed")),b.call(g,i)})}(jQuery),+function(a){"use strict";function b(b){b&&3===b.which||(a(e).remove(),a(f).each(function(){var d=c(a(this)),e={relatedTarget:this};d.hasClass("open")&&(d.trigger(b=a.Event("hide.bs.dropdown",e)),b.isDefaultPrevented()||d.removeClass("open").trigger("hidden.bs.dropdown",e))}))}function c(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.2.0",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=c(e),g=f.hasClass("open");if(b(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a('<div class="dropdown-backdrop"/>').insertAfter(a(this)).on("click",b);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;e.trigger("focus"),f.toggleClass("open").trigger("shown.bs.dropdown",h)}return!1}},g.prototype.keydown=function(b){if(/(38|40|27)/.test(b.keyCode)){var d=a(this);if(b.preventDefault(),b.stopPropagation(),!d.is(".disabled, :disabled")){var e=c(d),g=e.hasClass("open");if(!g||g&&27==b.keyCode)return 27==b.which&&e.find(f).trigger("focus"),d.trigger("click");var h=" li:not(.divider):visible a",i=e.find('[role="menu"]'+h+', [role="listbox"]'+h);if(i.length){var j=i.index(i.filter(":focus"));38==b.keyCode&&j>0&&j--,40==b.keyCode&&j<i.length-1&&j++,~j||(j=0),i.eq(j).trigger("focus")}}}};var h=a.fn.dropdown;a.fn.dropdown=d,a.fn.dropdown.Constructor=g,a.fn.dropdown.noConflict=function(){return a.fn.dropdown=h,this},a(document).on("click.bs.dropdown.data-api",b).on("click.bs.dropdown.data-api",".dropdown form",function(a){a.stopPropagation()}).on("click.bs.dropdown.data-api",f,g.prototype.toggle).on("keydown.bs.dropdown.data-api",f+', [role="menu"], [role="listbox"]',g.prototype.keydown)}(jQuery),+function(a){"use strict";function b(b,d){return this.each(function(){var e=a(this),f=e.data("bs.modal"),g=a.extend({},c.DEFAULTS,e.data(),"object"==typeof b&&b);f||e.data("bs.modal",f=new c(this,g)),"string"==typeof b?f[b](d):g.show&&f.show(d)})}var c=function(b,c){this.options=c,this.$body=a(document.body),this.$element=a(b),this.$backdrop=this.isShown=null,this.scrollbarWidth=0,this.options.remote&&this.$element.find(".modal-content").load(this.options.remote,a.proxy(function(){this.$element.trigger("loaded.bs.modal")},this))};c.VERSION="3.2.0",c.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},c.prototype.toggle=function(a){return this.isShown?this.hide():this.show(a)},c.prototype.show=function(b){var c=this,d=a.Event("show.bs.modal",{relatedTarget:b});this.$element.trigger(d),this.isShown||d.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.$body.addClass("modal-open"),this.setScrollbar(),this.escape(),this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',a.proxy(this.hide,this)),this.backdrop(function(){var d=a.support.transition&&c.$element.hasClass("fade");c.$element.parent().length||c.$element.appendTo(c.$body),c.$element.show().scrollTop(0),d&&c.$element[0].offsetWidth,c.$element.addClass("in").attr("aria-hidden",!1),c.enforceFocus();var e=a.Event("shown.bs.modal",{relatedTarget:b});d?c.$element.find(".modal-dialog").one("bsTransitionEnd",function(){c.$element.trigger("focus").trigger(e)}).emulateTransitionEnd(300):c.$element.trigger("focus").trigger(e)}))},c.prototype.hide=function(b){b&&b.preventDefault(),b=a.Event("hide.bs.modal"),this.$element.trigger(b),this.isShown&&!b.isDefaultPrevented()&&(this.isShown=!1,this.$body.removeClass("modal-open"),this.resetScrollbar(),this.escape(),a(document).off("focusin.bs.modal"),this.$element.removeClass("in").attr("aria-hidden",!0).off("click.dismiss.bs.modal"),a.support.transition&&this.$element.hasClass("fade")?this.$element.one("bsTransitionEnd",a.proxy(this.hideModal,this)).emulateTransitionEnd(300):this.hideModal())},c.prototype.enforceFocus=function(){a(document).off("focusin.bs.modal").on("focusin.bs.modal",a.proxy(function(a){this.$element[0]===a.target||this.$element.has(a.target).length||this.$element.trigger("focus")},this))},c.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keyup.dismiss.bs.modal",a.proxy(function(a){27==a.which&&this.hide()},this)):this.isShown||this.$element.off("keyup.dismiss.bs.modal")},c.prototype.hideModal=function(){var a=this;this.$element.hide(),this.backdrop(function(){a.$element.trigger("hidden.bs.modal")})},c.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},c.prototype.backdrop=function(b){var c=this,d=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var e=a.support.transition&&d;if(this.$backdrop=a('<div class="modal-backdrop '+d+'" />').appendTo(this.$body),this.$element.on("click.dismiss.bs.modal",a.proxy(function(a){a.target===a.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus.call(this.$element[0]):this.hide.call(this))},this)),e&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!b)return;e?this.$backdrop.one("bsTransitionEnd",b).emulateTransitionEnd(150):b()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass("in");var f=function(){c.removeBackdrop(),b&&b()};a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one("bsTransitionEnd",f).emulateTransitionEnd(150):f()}else b&&b()},c.prototype.checkScrollbar=function(){document.body.clientWidth>=window.innerWidth||(this.scrollbarWidth=this.scrollbarWidth||this.measureScrollbar())},c.prototype.setScrollbar=function(){var a=parseInt(this.$body.css("padding-right")||0,10);this.scrollbarWidth&&this.$body.css("padding-right",a+this.scrollbarWidth)},c.prototype.resetScrollbar=function(){this.$body.css("padding-right","")},c.prototype.measureScrollbar=function(){var a=document.createElement("div");a.className="modal-scrollbar-measure",this.$body.append(a);var b=a.offsetWidth-a.clientWidth;return this.$body[0].removeChild(a),b};var d=a.fn.modal;a.fn.modal=b,a.fn.modal.Constructor=c,a.fn.modal.noConflict=function(){return a.fn.modal=d,this},a(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(c){var d=a(this),e=d.attr("href"),f=a(d.attr("data-target")||e&&e.replace(/.*(?=#[^\s]+$)/,"")),g=f.data("bs.modal")?"toggle":a.extend({remote:!/#/.test(e)&&e},f.data(),d.data());d.is("a")&&c.preventDefault(),f.one("show.bs.modal",function(a){a.isDefaultPrevented()||f.one("hidden.bs.modal",function(){d.is(":visible")&&d.trigger("focus")})}),b.call(f,g,this)})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tooltip"),f="object"==typeof b&&b;(e||"destroy"!=b)&&(e||d.data("bs.tooltip",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.type=this.options=this.enabled=this.timeout=this.hoverState=this.$element=null,this.init("tooltip",a,b)};c.VERSION="3.2.0",c.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},c.prototype.init=function(b,c,d){this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(this.options.viewport.selector||this.options.viewport);for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show()},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide()},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var c=a.contains(document.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!c)return;var d=this,e=this.tip(),f=this.getUID(this.type);this.setContent(),e.attr("id",f),this.$element.attr("aria-describedby",f),this.options.animation&&e.addClass("fade");var g="function"==typeof this.options.placement?this.options.placement.call(this,e[0],this.$element[0]):this.options.placement,h=/\s?auto?\s?/i,i=h.test(g);i&&(g=g.replace(h,"")||"top"),e.detach().css({top:0,left:0,display:"block"}).addClass(g).data("bs."+this.type,this),this.options.container?e.appendTo(this.options.container):e.insertAfter(this.$element);var j=this.getPosition(),k=e[0].offsetWidth,l=e[0].offsetHeight;if(i){var m=g,n=this.$element.parent(),o=this.getPosition(n);g="bottom"==g&&j.top+j.height+l-o.scroll>o.height?"top":"top"==g&&j.top-o.scroll-l<0?"bottom":"right"==g&&j.right+k>o.width?"left":"left"==g&&j.left-k<o.left?"right":g,e.removeClass(m).addClass(g)}var p=this.getCalculatedOffset(g,j,k,l);this.applyPlacement(p,g);var q=function(){d.$element.trigger("shown.bs."+d.type),d.hoverState=null};a.support.transition&&this.$tip.hasClass("fade")?e.one("bsTransitionEnd",q).emulateTransitionEnd(150):q()}},c.prototype.applyPlacement=function(b,c){var d=this.tip(),e=d[0].offsetWidth,f=d[0].offsetHeight,g=parseInt(d.css("margin-top"),10),h=parseInt(d.css("margin-left"),10);isNaN(g)&&(g=0),isNaN(h)&&(h=0),b.top=b.top+g,b.left=b.left+h,a.offset.setOffset(d[0],a.extend({using:function(a){d.css({top:Math.round(a.top),left:Math.round(a.left)})}},b),0),d.addClass("in");var i=d[0].offsetWidth,j=d[0].offsetHeight;"top"==c&&j!=f&&(b.top=b.top+f-j);var k=this.getViewportAdjustedDelta(c,b,i,j);k.left?b.left+=k.left:b.top+=k.top;var l=k.left?2*k.left-e+i:2*k.top-f+j,m=k.left?"left":"top",n=k.left?"offsetWidth":"offsetHeight";d.offset(b),this.replaceArrow(l,d[0][n],m)},c.prototype.replaceArrow=function(a,b,c){this.arrow().css(c,a?50*(1-a/b)+"%":"")},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle();a.find(".tooltip-inner")[this.options.html?"html":"text"](b),a.removeClass("fade in top bottom left right")},c.prototype.hide=function(){function b(){"in"!=c.hoverState&&d.detach(),c.$element.trigger("hidden.bs."+c.type)}var c=this,d=this.tip(),e=a.Event("hide.bs."+this.type);return this.$element.removeAttr("aria-describedby"),this.$element.trigger(e),e.isDefaultPrevented()?void 0:(d.removeClass("in"),a.support.transition&&this.$tip.hasClass("fade")?d.one("bsTransitionEnd",b).emulateTransitionEnd(150):b(),this.hoverState=null,this)},c.prototype.fixTitle=function(){var a=this.$element;(a.attr("title")||"string"!=typeof a.attr("data-original-title"))&&a.attr("data-original-title",a.attr("title")||"").attr("title","")},c.prototype.hasContent=function(){return this.getTitle()},c.prototype.getPosition=function(b){b=b||this.$element;var c=b[0],d="BODY"==c.tagName;return a.extend({},"function"==typeof c.getBoundingClientRect?c.getBoundingClientRect():null,{scroll:d?document.documentElement.scrollTop||document.body.scrollTop:b.scrollTop(),width:d?a(window).width():b.outerWidth(),height:d?a(window).height():b.outerHeight()},d?{top:0,left:0}:b.offset())},c.prototype.getCalculatedOffset=function(a,b,c,d){return"bottom"==a?{top:b.top+b.height,left:b.left+b.width/2-c/2}:"top"==a?{top:b.top-d,left:b.left+b.width/2-c/2}:"left"==a?{top:b.top+b.height/2-d/2,left:b.left-c}:{top:b.top+b.height/2-d/2,left:b.left+b.width}},c.prototype.getViewportAdjustedDelta=function(a,b,c,d){var e={top:0,left:0};if(!this.$viewport)return e;var f=this.options.viewport&&this.options.viewport.padding||0,g=this.getPosition(this.$viewport);if(/right|left/.test(a)){var h=b.top-f-g.scroll,i=b.top+f-g.scroll+d;h<g.top?e.top=g.top-h:i>g.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;j<g.left?e.left=g.left-j:k>g.width&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){return this.$tip=this.$tip||a(this.options.template)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.validate=function(){this.$element[0].parentNode||(this.hide(),this.$element=null,this.options=null)},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){clearTimeout(this.timeout),this.hide().$element.off("."+this.type).removeData("bs."+this.type)};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof b&&b;(e||"destroy"!=b)&&(e||d.data("bs.popover",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");c.VERSION="3.2.0",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").empty()[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")},c.prototype.tip=function(){return this.$tip||(this.$tip=a(this.options.template)),this.$tip};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){"use strict";function b(c,d){var e=a.proxy(this.process,this);this.$body=a("body"),this.$scrollElement=a(a(c).is("body")?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",e),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})}b.VERSION="3.2.0",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b="offset",c=0;a.isWindow(this.$scrollElement[0])||(b="position",c=this.$scrollElement.scrollTop()),this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight();var d=this;this.$body.find(this.selector).map(function(){var d=a(this),e=d.data("target")||d.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[b]().top+c,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){d.offsets.push(this[0]),d.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b<=e[0])return g!=(a=f[0])&&this.activate(a);for(a=e.length;a--;)g!=f[a]&&b>=e[a]&&(!e[a+1]||b<=e[a+1])&&this.activate(f[a])},b.prototype.activate=function(b){this.activeTarget=b,a(this.selector).parentsUntil(this.options.target,".active").removeClass("active");var c=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',d=a(c).parents("li").addClass("active");d.parent(".dropdown-menu").length&&(d=d.closest("li.dropdown").addClass("active")),d.trigger("activate.bs.scrollspy")};var d=a.fn.scrollspy;a.fn.scrollspy=c,a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=d,this},a(window).on("load.bs.scrollspy.data-api",function(){a('[data-spy="scroll"]').each(function(){var b=a(this);c.call(b,b.data())})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tab");e||d.data("bs.tab",e=new c(this)),"string"==typeof b&&e[b]()})}var c=function(b){this.element=a(b)};c.VERSION="3.2.0",c.prototype.show=function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.data("target");if(d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),!b.parent("li").hasClass("active")){var e=c.find(".active:last a")[0],f=a.Event("show.bs.tab",{relatedTarget:e});if(b.trigger(f),!f.isDefaultPrevented()){var g=a(d);this.activate(b.closest("li"),c),this.activate(g,g.parent(),function(){b.trigger({type:"shown.bs.tab",relatedTarget:e})})}}},c.prototype.activate=function(b,c,d){function e(){f.removeClass("active").find("> .dropdown-menu > .active").removeClass("active"),b.addClass("active"),g?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu")&&b.closest("li.dropdown").addClass("active"),d&&d()}var f=c.find("> .active"),g=d&&a.support.transition&&f.hasClass("fade");g?f.one("bsTransitionEnd",e).emulateTransitionEnd(150):e(),f.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this},a(document).on("click.bs.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"]',function(c){c.preventDefault(),b.call(a(this),"show")})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof b&&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=this.unpin=this.pinnedOffset=null,this.checkPosition()};c.VERSION="3.2.0",c.RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:0,target:window},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=a(document).height(),d=this.$target.scrollTop(),e=this.$element.offset(),f=this.options.offset,g=f.top,h=f.bottom;"object"!=typeof f&&(h=g=f),"function"==typeof g&&(g=f.top(this.$element)),"function"==typeof h&&(h=f.bottom(this.$element));var i=null!=this.unpin&&d+this.unpin<=e.top?!1:null!=h&&e.top+this.$element.height()>=b-h?"bottom":null!=g&&g>=d?"top":!1;if(this.affixed!==i){null!=this.unpin&&this.$element.css("top","");var j="affix"+(i?"-"+i:""),k=a.Event(j+".bs.affix");this.$element.trigger(k),k.isDefaultPrevented()||(this.affixed=i,this.unpin="bottom"==i?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(j).trigger(a.Event(j.replace("affix","affixed"))),"bottom"==i&&this.$element.offset({top:b-this.$element.height()-h}))}}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},d.offsetBottom&&(d.offset.bottom=d.offsetBottom),d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery);</script>
4928 <script>(function() {
4929 'use strict';
4930
4931 /**
4932 * Extend an Object with another Object's properties.
4933 *
4934 * The source objects are specified as additional arguments.
4935 *
4936 * @param dst Object the object to extend.
4937 *
4938 * @return Object the final object.
4939 */
4940 var _extend = function(dst) {
4941 var sources = Array.prototype.slice.call(arguments, 1);
4942 for (var i=0; i<sources.length; ++i) {
4943 var src = sources[i];
4944 for (var p in src) {
4945 if (src.hasOwnProperty(p)) dst[p] = src[p];
4946 }
4947 }
4948 return dst;
4949 };
4950
4951
4952 /**
4953 * Defer execution of given function.
4954 * @param {Function} func
4955 */
4956 var _defer = function(func) {
4957 if (typeof setImmediate === 'function') {
4958 return setImmediate(func);
4959 } else {
4960 return setTimeout(func, 0);
4961 }
4962 };
4963
4964 /**
4965 * Based on the algorithm at http://en.wikipedia.org/wiki/Levenshtein_distance.
4966 */
4967 var Levenshtein = {
4968 /**
4969 * Calculate levenshtein distance of the two strings.
4970 *
4971 * @param str1 String the first string.
4972 * @param str2 String the second string.
4973 * @return Integer the levenshtein distance (0 and above).
4974 */
4975 get: function(str1, str2) {
4976 // base cases
4977 if (str1 === str2) return 0;
4978 if (str1.length === 0) return str2.length;
4979 if (str2.length === 0) return str1.length;
4980
4981 // two rows
4982 var prevRow = new Array(str2.length + 1),
4983 curCol, nextCol, i, j, tmp;
4984
4985 // initialise previous row
4986 for (i=0; i<prevRow.length; ++i) {
4987 prevRow[i] = i;
4988 }
4989
4990 // calculate current row distance from previous row
4991 for (i=0; i<str1.length; ++i) {
4992 nextCol = i + 1;
4993
4994 for (j=0; j<str2.length; ++j) {
4995 curCol = nextCol;
4996
4997 // substution
4998 nextCol = prevRow[j] + ( (str1.charAt(i) === str2.charAt(j)) ? 0 : 1 );
4999 // insertion
5000 tmp = curCol + 1;
5001 if (nextCol > tmp) {
5002 nextCol = tmp;
5003 }
5004 // deletion
5005 tmp = prevRow[j + 1] + 1;
5006 if (nextCol > tmp) {
5007 nextCol = tmp;
5008 }
5009
5010 // copy current col value into previous (in preparation for next iteration)
5011 prevRow[j] = curCol;
5012 }
5013
5014 // copy last col value into previous (in preparation for next iteration)
5015 prevRow[j] = nextCol;
5016 }
5017
5018 return nextCol;
5019 },
5020
5021 /**
5022 * Asynchronously calculate levenshtein distance of the two strings.
5023 *
5024 * @param str1 String the first string.
5025 * @param str2 String the second string.
5026 * @param cb Function callback function with signature: function(Error err, int distance)
5027 * @param [options] Object additional options.
5028 * @param [options.progress] Function progress callback with signature: function(percentComplete)
5029 */
5030 getAsync: function(str1, str2, cb, options) {
5031 options = _extend({}, {
5032 progress: null
5033 }, options);
5034
5035 // base cases
5036 if (str1 === str2) return cb(null, 0);
5037 if (str1.length === 0) return cb(null, str2.length);
5038 if (str2.length === 0) return cb(null, str1.length);
5039
5040 // two rows
5041 var prevRow = new Array(str2.length + 1),
5042 curCol, nextCol,
5043 i, j, tmp,
5044 startTime, currentTime;
5045
5046 // initialise previous row
5047 for (i=0; i<prevRow.length; ++i) {
5048 prevRow[i] = i;
5049 }
5050
5051 nextCol = 1;
5052 i = 0;
5053 j = -1;
5054
5055 var __calculate = function() {
5056 // reset timer
5057 startTime = new Date().valueOf();
5058 currentTime = startTime;
5059
5060 // keep going until one second has elapsed
5061 while (currentTime - startTime < 1000) {
5062 // reached end of current row?
5063 if (str2.length <= (++j)) {
5064 // copy current into previous (in preparation for next iteration)
5065 prevRow[j] = nextCol;
5066
5067 // if already done all chars
5068 if (str1.length <= (++i)) {
5069 return cb(null, nextCol);
5070 }
5071 // else if we have more left to do
5072 else {
5073 nextCol = i + 1;
5074 j = 0;
5075 }
5076 }
5077
5078 // calculation
5079 curCol = nextCol;
5080
5081 // substution
5082 nextCol = prevRow[j] + ( (str1.charAt(i) === str2.charAt(j)) ? 0 : 1 );
5083 // insertion
5084 tmp = curCol + 1;
5085 if (nextCol > tmp) {
5086 nextCol = tmp;
5087 }
5088 // deletion
5089 tmp = prevRow[j + 1] + 1;
5090 if (nextCol > tmp) {
5091 nextCol = tmp;
5092 }
5093
5094 // copy current into previous (in preparation for next iteration)
5095 prevRow[j] = curCol;
5096
5097 // get current time
5098 currentTime = new Date().valueOf();
5099 }
5100
5101 // send a progress update?
5102 if (null !== options.progress) {
5103 try {
5104 options.progress.call(null, (i * 100.0/ str1.length));
5105 } catch (err) {
5106 return cb('Progress callback: ' + err.toString());
5107 }
5108 }
5109
5110 // next iteration
5111 _defer(__calculate);
5112 };
5113
5114 __calculate();
5115 }
5116
5117 };
5118
5119 // amd
5120 if (typeof define !== "undefined" && define !== null && define.amd) {
5121 define(function() {
5122 return Levenshtein;
5123 });
5124 }
5125 // commonjs
5126 else if (typeof module !== "undefined" && module !== null && typeof exports !== "undefined" && module.exports === exports) {
5127 module.exports = Levenshtein;
5128 }
5129 // web worker
5130 else if (typeof self !== "undefined" && typeof self.postMessage === 'function' && typeof self.importScripts === 'function') {
5131 self.Levenshtein = Levenshtein;
5132 }
5133 // browser main thread
5134 else if (typeof window !== "undefined" && window !== null) {
5135 window.Levenshtein = Levenshtein;
5136 }
5137}());
5138
5139</script>
5140 <script>(function(r){r.fn.qrcode=function(h){var s;function u(a){this.mode=s;this.data=a}function o(a,c){this.typeNumber=a;this.errorCorrectLevel=c;this.modules=null;this.moduleCount=0;this.dataCache=null;this.dataList=[]}function q(a,c){if(void 0==a.length)throw Error(a.length+"/"+c);for(var d=0;d<a.length&&0==a[d];)d++;this.num=Array(a.length-d+c);for(var b=0;b<a.length-d;b++)this.num[b]=a[b+d]}function p(a,c){this.totalCount=a;this.dataCount=c}function t(){this.buffer=[];this.length=0}u.prototype={getLength:function(){return this.data.length},
5141write:function(a){for(var c=0;c<this.data.length;c++)a.put(this.data.charCodeAt(c),8)}};o.prototype={addData:function(a){this.dataList.push(new u(a));this.dataCache=null},isDark:function(a,c){if(0>a||this.moduleCount<=a||0>c||this.moduleCount<=c)throw Error(a+","+c);return this.modules[a][c]},getModuleCount:function(){return this.moduleCount},make:function(){if(1>this.typeNumber){for(var a=1,a=1;40>a;a++){for(var c=p.getRSBlocks(a,this.errorCorrectLevel),d=new t,b=0,e=0;e<c.length;e++)b+=c[e].dataCount;
5142for(e=0;e<this.dataList.length;e++)c=this.dataList[e],d.put(c.mode,4),d.put(c.getLength(),j.getLengthInBits(c.mode,a)),c.write(d);if(d.getLengthInBits()<=8*b)break}this.typeNumber=a}this.makeImpl(!1,this.getBestMaskPattern())},makeImpl:function(a,c){this.moduleCount=4*this.typeNumber+17;this.modules=Array(this.moduleCount);for(var d=0;d<this.moduleCount;d++){this.modules[d]=Array(this.moduleCount);for(var b=0;b<this.moduleCount;b++)this.modules[d][b]=null}this.setupPositionProbePattern(0,0);this.setupPositionProbePattern(this.moduleCount-
51437,0);this.setupPositionProbePattern(0,this.moduleCount-7);this.setupPositionAdjustPattern();this.setupTimingPattern();this.setupTypeInfo(a,c);7<=this.typeNumber&&this.setupTypeNumber(a);null==this.dataCache&&(this.dataCache=o.createData(this.typeNumber,this.errorCorrectLevel,this.dataList));this.mapData(this.dataCache,c)},setupPositionProbePattern:function(a,c){for(var d=-1;7>=d;d++)if(!(-1>=a+d||this.moduleCount<=a+d))for(var b=-1;7>=b;b++)-1>=c+b||this.moduleCount<=c+b||(this.modules[a+d][c+b]=
51440<=d&&6>=d&&(0==b||6==b)||0<=b&&6>=b&&(0==d||6==d)||2<=d&&4>=d&&2<=b&&4>=b?!0:!1)},getBestMaskPattern:function(){for(var a=0,c=0,d=0;8>d;d++){this.makeImpl(!0,d);var b=j.getLostPoint(this);if(0==d||a>b)a=b,c=d}return c},createMovieClip:function(a,c,d){a=a.createEmptyMovieClip(c,d);this.make();for(c=0;c<this.modules.length;c++)for(var d=1*c,b=0;b<this.modules[c].length;b++){var e=1*b;this.modules[c][b]&&(a.beginFill(0,100),a.moveTo(e,d),a.lineTo(e+1,d),a.lineTo(e+1,d+1),a.lineTo(e,d+1),a.endFill())}return a},
5145setupTimingPattern:function(){for(var a=8;a<this.moduleCount-8;a++)null==this.modules[a][6]&&(this.modules[a][6]=0==a%2);for(a=8;a<this.moduleCount-8;a++)null==this.modules[6][a]&&(this.modules[6][a]=0==a%2)},setupPositionAdjustPattern:function(){for(var a=j.getPatternPosition(this.typeNumber),c=0;c<a.length;c++)for(var d=0;d<a.length;d++){var b=a[c],e=a[d];if(null==this.modules[b][e])for(var f=-2;2>=f;f++)for(var i=-2;2>=i;i++)this.modules[b+f][e+i]=-2==f||2==f||-2==i||2==i||0==f&&0==i?!0:!1}},setupTypeNumber:function(a){for(var c=
5146j.getBCHTypeNumber(this.typeNumber),d=0;18>d;d++){var b=!a&&1==(c>>d&1);this.modules[Math.floor(d/3)][d%3+this.moduleCount-8-3]=b}for(d=0;18>d;d++)b=!a&&1==(c>>d&1),this.modules[d%3+this.moduleCount-8-3][Math.floor(d/3)]=b},setupTypeInfo:function(a,c){for(var d=j.getBCHTypeInfo(this.errorCorrectLevel<<3|c),b=0;15>b;b++){var e=!a&&1==(d>>b&1);6>b?this.modules[b][8]=e:8>b?this.modules[b+1][8]=e:this.modules[this.moduleCount-15+b][8]=e}for(b=0;15>b;b++)e=!a&&1==(d>>b&1),8>b?this.modules[8][this.moduleCount-
5147b-1]=e:9>b?this.modules[8][15-b-1+1]=e:this.modules[8][15-b-1]=e;this.modules[this.moduleCount-8][8]=!a},mapData:function(a,c){for(var d=-1,b=this.moduleCount-1,e=7,f=0,i=this.moduleCount-1;0<i;i-=2)for(6==i&&i--;;){for(var g=0;2>g;g++)if(null==this.modules[b][i-g]){var n=!1;f<a.length&&(n=1==(a[f]>>>e&1));j.getMask(c,b,i-g)&&(n=!n);this.modules[b][i-g]=n;e--; -1==e&&(f++,e=7)}b+=d;if(0>b||this.moduleCount<=b){b-=d;d=-d;break}}}};o.PAD0=236;o.PAD1=17;o.createData=function(a,c,d){for(var c=p.getRSBlocks(a,
5148c),b=new t,e=0;e<d.length;e++){var f=d[e];b.put(f.mode,4);b.put(f.getLength(),j.getLengthInBits(f.mode,a));f.write(b)}for(e=a=0;e<c.length;e++)a+=c[e].dataCount;if(b.getLengthInBits()>8*a)throw Error("code length overflow. ("+b.getLengthInBits()+">"+8*a+")");for(b.getLengthInBits()+4<=8*a&&b.put(0,4);0!=b.getLengthInBits()%8;)b.putBit(!1);for(;!(b.getLengthInBits()>=8*a);){b.put(o.PAD0,8);if(b.getLengthInBits()>=8*a)break;b.put(o.PAD1,8)}return o.createBytes(b,c)};o.createBytes=function(a,c){for(var d=
51490,b=0,e=0,f=Array(c.length),i=Array(c.length),g=0;g<c.length;g++){var n=c[g].dataCount,h=c[g].totalCount-n,b=Math.max(b,n),e=Math.max(e,h);f[g]=Array(n);for(var k=0;k<f[g].length;k++)f[g][k]=255&a.buffer[k+d];d+=n;k=j.getErrorCorrectPolynomial(h);n=(new q(f[g],k.getLength()-1)).mod(k);i[g]=Array(k.getLength()-1);for(k=0;k<i[g].length;k++)h=k+n.getLength()-i[g].length,i[g][k]=0<=h?n.get(h):0}for(k=g=0;k<c.length;k++)g+=c[k].totalCount;d=Array(g);for(k=n=0;k<b;k++)for(g=0;g<c.length;g++)k<f[g].length&&
5150(d[n++]=f[g][k]);for(k=0;k<e;k++)for(g=0;g<c.length;g++)k<i[g].length&&(d[n++]=i[g][k]);return d};s=4;for(var j={PATTERN_POSITION_TABLE:[[],[6,18],[6,22],[6,26],[6,30],[6,34],[6,22,38],[6,24,42],[6,26,46],[6,28,50],[6,30,54],[6,32,58],[6,34,62],[6,26,46,66],[6,26,48,70],[6,26,50,74],[6,30,54,78],[6,30,56,82],[6,30,58,86],[6,34,62,90],[6,28,50,72,94],[6,26,50,74,98],[6,30,54,78,102],[6,28,54,80,106],[6,32,58,84,110],[6,30,58,86,114],[6,34,62,90,118],[6,26,50,74,98,122],[6,30,54,78,102,126],[6,26,52,
515178,104,130],[6,30,56,82,108,134],[6,34,60,86,112,138],[6,30,58,86,114,142],[6,34,62,90,118,146],[6,30,54,78,102,126,150],[6,24,50,76,102,128,154],[6,28,54,80,106,132,158],[6,32,58,84,110,136,162],[6,26,54,82,110,138,166],[6,30,58,86,114,142,170]],G15:1335,G18:7973,G15_MASK:21522,getBCHTypeInfo:function(a){for(var c=a<<10;0<=j.getBCHDigit(c)-j.getBCHDigit(j.G15);)c^=j.G15<<j.getBCHDigit(c)-j.getBCHDigit(j.G15);return(a<<10|c)^j.G15_MASK},getBCHTypeNumber:function(a){for(var c=a<<12;0<=j.getBCHDigit(c)-
5152j.getBCHDigit(j.G18);)c^=j.G18<<j.getBCHDigit(c)-j.getBCHDigit(j.G18);return a<<12|c},getBCHDigit:function(a){for(var c=0;0!=a;)c++,a>>>=1;return c},getPatternPosition:function(a){return j.PATTERN_POSITION_TABLE[a-1]},getMask:function(a,c,d){switch(a){case 0:return 0==(c+d)%2;case 1:return 0==c%2;case 2:return 0==d%3;case 3:return 0==(c+d)%3;case 4:return 0==(Math.floor(c/2)+Math.floor(d/3))%2;case 5:return 0==c*d%2+c*d%3;case 6:return 0==(c*d%2+c*d%3)%2;case 7:return 0==(c*d%3+(c+d)%2)%2;default:throw Error("bad maskPattern:"+
5153a);}},getErrorCorrectPolynomial:function(a){for(var c=new q([1],0),d=0;d<a;d++)c=c.multiply(new q([1,l.gexp(d)],0));return c},getLengthInBits:function(a,c){if(1<=c&&10>c)switch(a){case 1:return 10;case 2:return 9;case s:return 8;case 8:return 8;default:throw Error("mode:"+a);}else if(27>c)switch(a){case 1:return 12;case 2:return 11;case s:return 16;case 8:return 10;default:throw Error("mode:"+a);}else if(41>c)switch(a){case 1:return 14;case 2:return 13;case s:return 16;case 8:return 12;default:throw Error("mode:"+
5154a);}else throw Error("type:"+c);},getLostPoint:function(a){for(var c=a.getModuleCount(),d=0,b=0;b<c;b++)for(var e=0;e<c;e++){for(var f=0,i=a.isDark(b,e),g=-1;1>=g;g++)if(!(0>b+g||c<=b+g))for(var h=-1;1>=h;h++)0>e+h||c<=e+h||0==g&&0==h||i==a.isDark(b+g,e+h)&&f++;5<f&&(d+=3+f-5)}for(b=0;b<c-1;b++)for(e=0;e<c-1;e++)if(f=0,a.isDark(b,e)&&f++,a.isDark(b+1,e)&&f++,a.isDark(b,e+1)&&f++,a.isDark(b+1,e+1)&&f++,0==f||4==f)d+=3;for(b=0;b<c;b++)for(e=0;e<c-6;e++)a.isDark(b,e)&&!a.isDark(b,e+1)&&a.isDark(b,e+
51552)&&a.isDark(b,e+3)&&a.isDark(b,e+4)&&!a.isDark(b,e+5)&&a.isDark(b,e+6)&&(d+=40);for(e=0;e<c;e++)for(b=0;b<c-6;b++)a.isDark(b,e)&&!a.isDark(b+1,e)&&a.isDark(b+2,e)&&a.isDark(b+3,e)&&a.isDark(b+4,e)&&!a.isDark(b+5,e)&&a.isDark(b+6,e)&&(d+=40);for(e=f=0;e<c;e++)for(b=0;b<c;b++)a.isDark(b,e)&&f++;a=Math.abs(100*f/c/c-50)/5;return d+10*a}},l={glog:function(a){if(1>a)throw Error("glog("+a+")");return l.LOG_TABLE[a]},gexp:function(a){for(;0>a;)a+=255;for(;256<=a;)a-=255;return l.EXP_TABLE[a]},EXP_TABLE:Array(256),
5156LOG_TABLE:Array(256)},m=0;8>m;m++)l.EXP_TABLE[m]=1<<m;for(m=8;256>m;m++)l.EXP_TABLE[m]=l.EXP_TABLE[m-4]^l.EXP_TABLE[m-5]^l.EXP_TABLE[m-6]^l.EXP_TABLE[m-8];for(m=0;255>m;m++)l.LOG_TABLE[l.EXP_TABLE[m]]=m;q.prototype={get:function(a){return this.num[a]},getLength:function(){return this.num.length},multiply:function(a){for(var c=Array(this.getLength()+a.getLength()-1),d=0;d<this.getLength();d++)for(var b=0;b<a.getLength();b++)c[d+b]^=l.gexp(l.glog(this.get(d))+l.glog(a.get(b)));return new q(c,0)},mod:function(a){if(0>
5157this.getLength()-a.getLength())return this;for(var c=l.glog(this.get(0))-l.glog(a.get(0)),d=Array(this.getLength()),b=0;b<this.getLength();b++)d[b]=this.get(b);for(b=0;b<a.getLength();b++)d[b]^=l.gexp(l.glog(a.get(b))+c);return(new q(d,0)).mod(a)}};p.RS_BLOCK_TABLE=[[1,26,19],[1,26,16],[1,26,13],[1,26,9],[1,44,34],[1,44,28],[1,44,22],[1,44,16],[1,70,55],[1,70,44],[2,35,17],[2,35,13],[1,100,80],[2,50,32],[2,50,24],[4,25,9],[1,134,108],[2,67,43],[2,33,15,2,34,16],[2,33,11,2,34,12],[2,86,68],[4,43,27],
5158[4,43,19],[4,43,15],[2,98,78],[4,49,31],[2,32,14,4,33,15],[4,39,13,1,40,14],[2,121,97],[2,60,38,2,61,39],[4,40,18,2,41,19],[4,40,14,2,41,15],[2,146,116],[3,58,36,2,59,37],[4,36,16,4,37,17],[4,36,12,4,37,13],[2,86,68,2,87,69],[4,69,43,1,70,44],[6,43,19,2,44,20],[6,43,15,2,44,16],[4,101,81],[1,80,50,4,81,51],[4,50,22,4,51,23],[3,36,12,8,37,13],[2,116,92,2,117,93],[6,58,36,2,59,37],[4,46,20,6,47,21],[7,42,14,4,43,15],[4,133,107],[8,59,37,1,60,38],[8,44,20,4,45,21],[12,33,11,4,34,12],[3,145,115,1,146,
5159116],[4,64,40,5,65,41],[11,36,16,5,37,17],[11,36,12,5,37,13],[5,109,87,1,110,88],[5,65,41,5,66,42],[5,54,24,7,55,25],[11,36,12],[5,122,98,1,123,99],[7,73,45,3,74,46],[15,43,19,2,44,20],[3,45,15,13,46,16],[1,135,107,5,136,108],[10,74,46,1,75,47],[1,50,22,15,51,23],[2,42,14,17,43,15],[5,150,120,1,151,121],[9,69,43,4,70,44],[17,50,22,1,51,23],[2,42,14,19,43,15],[3,141,113,4,142,114],[3,70,44,11,71,45],[17,47,21,4,48,22],[9,39,13,16,40,14],[3,135,107,5,136,108],[3,67,41,13,68,42],[15,54,24,5,55,25],[15,
516043,15,10,44,16],[4,144,116,4,145,117],[17,68,42],[17,50,22,6,51,23],[19,46,16,6,47,17],[2,139,111,7,140,112],[17,74,46],[7,54,24,16,55,25],[34,37,13],[4,151,121,5,152,122],[4,75,47,14,76,48],[11,54,24,14,55,25],[16,45,15,14,46,16],[6,147,117,4,148,118],[6,73,45,14,74,46],[11,54,24,16,55,25],[30,46,16,2,47,17],[8,132,106,4,133,107],[8,75,47,13,76,48],[7,54,24,22,55,25],[22,45,15,13,46,16],[10,142,114,2,143,115],[19,74,46,4,75,47],[28,50,22,6,51,23],[33,46,16,4,47,17],[8,152,122,4,153,123],[22,73,45,
51613,74,46],[8,53,23,26,54,24],[12,45,15,28,46,16],[3,147,117,10,148,118],[3,73,45,23,74,46],[4,54,24,31,55,25],[11,45,15,31,46,16],[7,146,116,7,147,117],[21,73,45,7,74,46],[1,53,23,37,54,24],[19,45,15,26,46,16],[5,145,115,10,146,116],[19,75,47,10,76,48],[15,54,24,25,55,25],[23,45,15,25,46,16],[13,145,115,3,146,116],[2,74,46,29,75,47],[42,54,24,1,55,25],[23,45,15,28,46,16],[17,145,115],[10,74,46,23,75,47],[10,54,24,35,55,25],[19,45,15,35,46,16],[17,145,115,1,146,116],[14,74,46,21,75,47],[29,54,24,19,
516255,25],[11,45,15,46,46,16],[13,145,115,6,146,116],[14,74,46,23,75,47],[44,54,24,7,55,25],[59,46,16,1,47,17],[12,151,121,7,152,122],[12,75,47,26,76,48],[39,54,24,14,55,25],[22,45,15,41,46,16],[6,151,121,14,152,122],[6,75,47,34,76,48],[46,54,24,10,55,25],[2,45,15,64,46,16],[17,152,122,4,153,123],[29,74,46,14,75,47],[49,54,24,10,55,25],[24,45,15,46,46,16],[4,152,122,18,153,123],[13,74,46,32,75,47],[48,54,24,14,55,25],[42,45,15,32,46,16],[20,147,117,4,148,118],[40,75,47,7,76,48],[43,54,24,22,55,25],[10,
516345,15,67,46,16],[19,148,118,6,149,119],[18,75,47,31,76,48],[34,54,24,34,55,25],[20,45,15,61,46,16]];p.getRSBlocks=function(a,c){var d=p.getRsBlockTable(a,c);if(void 0==d)throw Error("bad rs block @ typeNumber:"+a+"/errorCorrectLevel:"+c);for(var b=d.length/3,e=[],f=0;f<b;f++)for(var h=d[3*f+0],g=d[3*f+1],j=d[3*f+2],l=0;l<h;l++)e.push(new p(g,j));return e};p.getRsBlockTable=function(a,c){switch(c){case 1:return p.RS_BLOCK_TABLE[4*(a-1)+0];case 0:return p.RS_BLOCK_TABLE[4*(a-1)+1];case 3:return p.RS_BLOCK_TABLE[4*
5164(a-1)+2];case 2:return p.RS_BLOCK_TABLE[4*(a-1)+3]}};t.prototype={get:function(a){return 1==(this.buffer[Math.floor(a/8)]>>>7-a%8&1)},put:function(a,c){for(var d=0;d<c;d++)this.putBit(1==(a>>>c-d-1&1))},getLengthInBits:function(){return this.length},putBit:function(a){var c=Math.floor(this.length/8);this.buffer.length<=c&&this.buffer.push(0);a&&(this.buffer[c]|=128>>>this.length%8);this.length++}};"string"===typeof h&&(h={text:h});h=r.extend({},{render:"canvas",width:256,height:256,typeNumber:-1,
5165correctLevel:2,background:"#ffffff",foreground:"#000000"},h);return this.each(function(){var a;if("canvas"==h.render){a=new o(h.typeNumber,h.correctLevel);a.addData(h.text);a.make();var c=document.createElement("canvas");c.width=h.width;c.height=h.height;for(var d=c.getContext("2d"),b=h.width/a.getModuleCount(),e=h.height/a.getModuleCount(),f=0;f<a.getModuleCount();f++)for(var i=0;i<a.getModuleCount();i++){d.fillStyle=a.isDark(f,i)?h.foreground:h.background;var g=Math.ceil((i+1)*b)-Math.floor(i*b),
5166j=Math.ceil((f+1)*b)-Math.floor(f*b);d.fillRect(Math.round(i*b),Math.round(f*e),g,j)}}else{a=new o(h.typeNumber,h.correctLevel);a.addData(h.text);a.make();c=r("<table></table>").css("width",h.width+"px").css("height",h.height+"px").css("border","0px").css("border-collapse","collapse").css("background-color",h.background);d=h.width/a.getModuleCount();b=h.height/a.getModuleCount();for(e=0;e<a.getModuleCount();e++){f=r("<tr></tr>").css("height",b+"px").appendTo(c);for(i=0;i<a.getModuleCount();i++)r("<td></td>").css("width",
5167d+"px").css("background-color",a.isDark(e,i)?h.foreground:h.background).appendTo(f)}}a=c;$(a).appendTo(this)})}})($);
5168</script>
5169 <script>(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.bitcoin = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
5170// (public) Constructor
5171function BigInteger(a, b, c) {
5172 if (!(this instanceof BigInteger))
5173 return new BigInteger(a, b, c)
5174
5175 if (a != null) {
5176 if ("number" == typeof a) this.fromNumber(a, b, c)
5177 else if (b == null && "string" != typeof a) this.fromString(a, 256)
5178 else this.fromString(a, b)
5179 }
5180}
5181
5182var proto = BigInteger.prototype
5183
5184// duck-typed isBigInteger
5185proto.__bigi = require('../package.json').version
5186BigInteger.isBigInteger = function (obj, check_ver) {
5187 return obj && obj.__bigi && (!check_ver || obj.__bigi === proto.__bigi)
5188}
5189
5190// Bits per digit
5191var dbits
5192
5193// am: Compute w_j += (x*this_i), propagate carries,
5194// c is initial carry, returns final carry.
5195// c < 3*dvalue, x < 2*dvalue, this_i < dvalue
5196// We need to select the fastest one that works in this environment.
5197
5198// am1: use a single mult and divide to get the high bits,
5199// max digit bits should be 26 because
5200// max internal value = 2*dvalue^2-2*dvalue (< 2^53)
5201function am1(i, x, w, j, c, n) {
5202 while (--n >= 0) {
5203 var v = x * this[i++] + w[j] + c
5204 c = Math.floor(v / 0x4000000)
5205 w[j++] = v & 0x3ffffff
5206 }
5207 return c
5208}
5209// am2 avoids a big mult-and-extract completely.
5210// Max digit bits should be <= 30 because we do bitwise ops
5211// on values up to 2*hdvalue^2-hdvalue-1 (< 2^31)
5212function am2(i, x, w, j, c, n) {
5213 var xl = x & 0x7fff,
5214 xh = x >> 15
5215 while (--n >= 0) {
5216 var l = this[i] & 0x7fff
5217 var h = this[i++] >> 15
5218 var m = xh * l + h * xl
5219 l = xl * l + ((m & 0x7fff) << 15) + w[j] + (c & 0x3fffffff)
5220 c = (l >>> 30) + (m >>> 15) + xh * h + (c >>> 30)
5221 w[j++] = l & 0x3fffffff
5222 }
5223 return c
5224}
5225// Alternately, set max digit bits to 28 since some
5226// browsers slow down when dealing with 32-bit numbers.
5227function am3(i, x, w, j, c, n) {
5228 var xl = x & 0x3fff,
5229 xh = x >> 14
5230 while (--n >= 0) {
5231 var l = this[i] & 0x3fff
5232 var h = this[i++] >> 14
5233 var m = xh * l + h * xl
5234 l = xl * l + ((m & 0x3fff) << 14) + w[j] + c
5235 c = (l >> 28) + (m >> 14) + xh * h
5236 w[j++] = l & 0xfffffff
5237 }
5238 return c
5239}
5240
5241// wtf?
5242BigInteger.prototype.am = am1
5243dbits = 26
5244
5245BigInteger.prototype.DB = dbits
5246BigInteger.prototype.DM = ((1 << dbits) - 1)
5247var DV = BigInteger.prototype.DV = (1 << dbits)
5248
5249var BI_FP = 52
5250BigInteger.prototype.FV = Math.pow(2, BI_FP)
5251BigInteger.prototype.F1 = BI_FP - dbits
5252BigInteger.prototype.F2 = 2 * dbits - BI_FP
5253
5254// Digit conversions
5255var BI_RM = "0123456789abcdefghijklmnopqrstuvwxyz"
5256var BI_RC = new Array()
5257var rr, vv
5258rr = "0".charCodeAt(0)
5259for (vv = 0; vv <= 9; ++vv) BI_RC[rr++] = vv
5260rr = "a".charCodeAt(0)
5261for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv
5262rr = "A".charCodeAt(0)
5263for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv
5264
5265function int2char(n) {
5266 return BI_RM.charAt(n)
5267}
5268
5269function intAt(s, i) {
5270 var c = BI_RC[s.charCodeAt(i)]
5271 return (c == null) ? -1 : c
5272}
5273
5274// (protected) copy this to r
5275function bnpCopyTo(r) {
5276 for (var i = this.t - 1; i >= 0; --i) r[i] = this[i]
5277 r.t = this.t
5278 r.s = this.s
5279}
5280
5281// (protected) set from integer value x, -DV <= x < DV
5282function bnpFromInt(x) {
5283 this.t = 1
5284 this.s = (x < 0) ? -1 : 0
5285 if (x > 0) this[0] = x
5286 else if (x < -1) this[0] = x + DV
5287 else this.t = 0
5288}
5289
5290// return bigint initialized to value
5291function nbv(i) {
5292 var r = new BigInteger()
5293 r.fromInt(i)
5294 return r
5295}
5296
5297// (protected) set from string and radix
5298function bnpFromString(s, b) {
5299 var self = this
5300
5301 var k
5302 if (b == 16) k = 4
5303 else if (b == 8) k = 3
5304 else if (b == 256) k = 8; // byte array
5305 else if (b == 2) k = 1
5306 else if (b == 32) k = 5
5307 else if (b == 4) k = 2
5308 else {
5309 self.fromRadix(s, b)
5310 return
5311 }
5312 self.t = 0
5313 self.s = 0
5314 var i = s.length,
5315 mi = false,
5316 sh = 0
5317 while (--i >= 0) {
5318 var x = (k == 8) ? s[i] & 0xff : intAt(s, i)
5319 if (x < 0) {
5320 if (s.charAt(i) == "-") mi = true
5321 continue
5322 }
5323 mi = false
5324 if (sh == 0)
5325 self[self.t++] = x
5326 else if (sh + k > self.DB) {
5327 self[self.t - 1] |= (x & ((1 << (self.DB - sh)) - 1)) << sh
5328 self[self.t++] = (x >> (self.DB - sh))
5329 } else
5330 self[self.t - 1] |= x << sh
5331 sh += k
5332 if (sh >= self.DB) sh -= self.DB
5333 }
5334 if (k == 8 && (s[0] & 0x80) != 0) {
5335 self.s = -1
5336 if (sh > 0) self[self.t - 1] |= ((1 << (self.DB - sh)) - 1) << sh
5337 }
5338 self.clamp()
5339 if (mi) BigInteger.ZERO.subTo(self, self)
5340}
5341
5342// (protected) clamp off excess high words
5343function bnpClamp() {
5344 var c = this.s & this.DM
5345 while (this.t > 0 && this[this.t - 1] == c)--this.t
5346}
5347
5348// (public) return string representation in given radix
5349function bnToString(b) {
5350 var self = this
5351 if (self.s < 0) return "-" + self.negate()
5352 .toString(b)
5353 var k
5354 if (b == 16) k = 4
5355 else if (b == 8) k = 3
5356 else if (b == 2) k = 1
5357 else if (b == 32) k = 5
5358 else if (b == 4) k = 2
5359 else return self.toRadix(b)
5360 var km = (1 << k) - 1,
5361 d, m = false,
5362 r = "",
5363 i = self.t
5364 var p = self.DB - (i * self.DB) % k
5365 if (i-- > 0) {
5366 if (p < self.DB && (d = self[i] >> p) > 0) {
5367 m = true
5368 r = int2char(d)
5369 }
5370 while (i >= 0) {
5371 if (p < k) {
5372 d = (self[i] & ((1 << p) - 1)) << (k - p)
5373 d |= self[--i] >> (p += self.DB - k)
5374 } else {
5375 d = (self[i] >> (p -= k)) & km
5376 if (p <= 0) {
5377 p += self.DB
5378 --i
5379 }
5380 }
5381 if (d > 0) m = true
5382 if (m) r += int2char(d)
5383 }
5384 }
5385 return m ? r : "0"
5386}
5387
5388// (public) -this
5389function bnNegate() {
5390 var r = new BigInteger()
5391 BigInteger.ZERO.subTo(this, r)
5392 return r
5393}
5394
5395// (public) |this|
5396function bnAbs() {
5397 return (this.s < 0) ? this.negate() : this
5398}
5399
5400// (public) return + if this > a, - if this < a, 0 if equal
5401function bnCompareTo(a) {
5402 var r = this.s - a.s
ab78acc6
IC
5403 if (r != 0) return r
5404 var i = this.t
5405 r = i - a.t
5406 if (r != 0) return (this.s < 0) ? -r : r
5407 while (--i >= 0)
5408 if ((r = this[i] - a[i]) != 0) return r
5409 return 0
5410}
3af2954a 5411
8b095871
IC
5412// returns bit length of the integer x
5413function nbits(x) {
5414 var r = 1,
5415 t
5416 if ((t = x >>> 16) != 0) {
5417 x = t
5418 r += 16
5419 }
5420 if ((t = x >> 8) != 0) {
5421 x = t
5422 r += 8
5423 }
5424 if ((t = x >> 4) != 0) {
5425 x = t
5426 r += 4
5427 }
5428 if ((t = x >> 2) != 0) {
5429 x = t
5430 r += 2
5431 }
5432 if ((t = x >> 1) != 0) {
5433 x = t
5434 r += 1
5435 }
5436 return r
5437}
5438
5439// (public) return the number of bits in "this"
5440function bnBitLength() {
5441 if (this.t <= 0) return 0
5442 return this.DB * (this.t - 1) + nbits(this[this.t - 1] ^ (this.s & this.DM))
5443}
5444
5445// (public) return the number of bytes in "this"
5446function bnByteLength() {
5447 return this.bitLength() >> 3
5448}
5449
5450// (protected) r = this << n*DB
5451function bnpDLShiftTo(n, r) {
5452 var i
5453 for (i = this.t - 1; i >= 0; --i) r[i + n] = this[i]
5454 for (i = n - 1; i >= 0; --i) r[i] = 0
5455 r.t = this.t + n
5456 r.s = this.s
5457}
5458
5459// (protected) r = this >> n*DB
5460function bnpDRShiftTo(n, r) {
5461 for (var i = n; i < this.t; ++i) r[i - n] = this[i]
5462 r.t = Math.max(this.t - n, 0)
5463 r.s = this.s
5464}
5465
5466// (protected) r = this << n
5467function bnpLShiftTo(n, r) {
5468 var self = this
5469 var bs = n % self.DB
5470 var cbs = self.DB - bs
5471 var bm = (1 << cbs) - 1
5472 var ds = Math.floor(n / self.DB),
5473 c = (self.s << bs) & self.DM,
5474 i
5475 for (i = self.t - 1; i >= 0; --i) {
5476 r[i + ds + 1] = (self[i] >> cbs) | c
5477 c = (self[i] & bm) << bs
5478 }
5479 for (i = ds - 1; i >= 0; --i) r[i] = 0
5480 r[ds] = c
5481 r.t = self.t + ds + 1
5482 r.s = self.s
5483 r.clamp()
5484}
5485
5486// (protected) r = this >> n
5487function bnpRShiftTo(n, r) {
5488 var self = this
5489 r.s = self.s
5490 var ds = Math.floor(n / self.DB)
5491 if (ds >= self.t) {
5492 r.t = 0
5493 return
5494 }
5495 var bs = n % self.DB
5496 var cbs = self.DB - bs
5497 var bm = (1 << bs) - 1
5498 r[0] = self[ds] >> bs
5499 for (var i = ds + 1; i < self.t; ++i) {
5500 r[i - ds - 1] |= (self[i] & bm) << cbs
5501 r[i - ds] = self[i] >> bs
5502 }
5503 if (bs > 0) r[self.t - ds - 1] |= (self.s & bm) << cbs
5504 r.t = self.t - ds
5505 r.clamp()
5506}
5507
5508// (protected) r = this - a
5509function bnpSubTo(a, r) {
5510 var self = this
5511 var i = 0,
5512 c = 0,
5513 m = Math.min(a.t, self.t)
5514 while (i < m) {
5515 c += self[i] - a[i]
5516 r[i++] = c & self.DM
5517 c >>= self.DB
5518 }
5519 if (a.t < self.t) {
5520 c -= a.s
5521 while (i < self.t) {
5522 c += self[i]
5523 r[i++] = c & self.DM
5524 c >>= self.DB
5525 }
5526 c += self.s
5527 } else {
5528 c += self.s
5529 while (i < a.t) {
5530 c -= a[i]
5531 r[i++] = c & self.DM
5532 c >>= self.DB
5533 }
5534 c -= a.s
5535 }
5536 r.s = (c < 0) ? -1 : 0
5537 if (c < -1) r[i++] = self.DV + c
5538 else if (c > 0) r[i++] = c
5539 r.t = i
5540 r.clamp()
5541}
5542
5543// (protected) r = this * a, r != this,a (HAC 14.12)
5544// "this" should be the larger one if appropriate.
5545function bnpMultiplyTo(a, r) {
5546 var x = this.abs(),
5547 y = a.abs()
5548 var i = x.t
5549 r.t = i + y.t
5550 while (--i >= 0) r[i] = 0
5551 for (i = 0; i < y.t; ++i) r[i + x.t] = x.am(0, y[i], r, i, 0, x.t)
5552 r.s = 0
5553 r.clamp()
5554 if (this.s != a.s) BigInteger.ZERO.subTo(r, r)
5555}
5556
5557// (protected) r = this^2, r != this (HAC 14.16)
5558function bnpSquareTo(r) {
5559 var x = this.abs()
5560 var i = r.t = 2 * x.t
5561 while (--i >= 0) r[i] = 0
5562 for (i = 0; i < x.t - 1; ++i) {
5563 var c = x.am(i, x[i], r, 2 * i, 0, 1)
5564 if ((r[i + x.t] += x.am(i + 1, 2 * x[i], r, 2 * i + 1, c, x.t - i - 1)) >= x.DV) {
5565 r[i + x.t] -= x.DV
5566 r[i + x.t + 1] = 1
5567 }
5568 }
5569 if (r.t > 0) r[r.t - 1] += x.am(i, x[i], r, 2 * i, 0, 1)
5570 r.s = 0
5571 r.clamp()
5572}
5573
5574// (protected) divide this by m, quotient and remainder to q, r (HAC 14.20)
5575// r != q, this != m. q or r may be null.
5576function bnpDivRemTo(m, q, r) {
5577 var self = this
5578 var pm = m.abs()
5579 if (pm.t <= 0) return
5580 var pt = self.abs()
5581 if (pt.t < pm.t) {
5582 if (q != null) q.fromInt(0)
5583 if (r != null) self.copyTo(r)
5584 return
5585 }
5586 if (r == null) r = new BigInteger()
5587 var y = new BigInteger(),
5588 ts = self.s,
5589 ms = m.s
5590 var nsh = self.DB - nbits(pm[pm.t - 1]); // normalize modulus
5591 if (nsh > 0) {
5592 pm.lShiftTo(nsh, y)
5593 pt.lShiftTo(nsh, r)
5594 } else {
5595 pm.copyTo(y)
5596 pt.copyTo(r)
5597 }
5598 var ys = y.t
5599 var y0 = y[ys - 1]
5600 if (y0 == 0) return
5601 var yt = y0 * (1 << self.F1) + ((ys > 1) ? y[ys - 2] >> self.F2 : 0)
5602 var d1 = self.FV / yt,
5603 d2 = (1 << self.F1) / yt,
5604 e = 1 << self.F2
5605 var i = r.t,
5606 j = i - ys,
5607 t = (q == null) ? new BigInteger() : q
5608 y.dlShiftTo(j, t)
5609 if (r.compareTo(t) >= 0) {
5610 r[r.t++] = 1
5611 r.subTo(t, r)
5612 }
5613 BigInteger.ONE.dlShiftTo(ys, t)
5614 t.subTo(y, y); // "negative" y so we can replace sub with am later
5615 while (y.t < ys) y[y.t++] = 0
5616 while (--j >= 0) {
5617 // Estimate quotient digit
5618 var qd = (r[--i] == y0) ? self.DM : Math.floor(r[i] * d1 + (r[i - 1] + e) * d2)
5619 if ((r[i] += y.am(0, qd, r, j, 0, ys)) < qd) { // Try it out
5620 y.dlShiftTo(j, t)
5621 r.subTo(t, r)
5622 while (r[i] < --qd) r.subTo(t, r)
5623 }
5624 }
5625 if (q != null) {
5626 r.drShiftTo(ys, q)
5627 if (ts != ms) BigInteger.ZERO.subTo(q, q)
5628 }
5629 r.t = ys
5630 r.clamp()
5631 if (nsh > 0) r.rShiftTo(nsh, r); // Denormalize remainder
5632 if (ts < 0) BigInteger.ZERO.subTo(r, r)
5633}
5634
5635// (public) this mod a
5636function bnMod(a) {
5637 var r = new BigInteger()
5638 this.abs()
5639 .divRemTo(a, null, r)
5640 if (this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) a.subTo(r, r)
5641 return r
5642}
5643
5644// Modular reduction using "classic" algorithm
5645function Classic(m) {
5646 this.m = m
5647}
5648
5649function cConvert(x) {
5650 if (x.s < 0 || x.compareTo(this.m) >= 0) return x.mod(this.m)
5651 else return x
5652}
5653
5654function cRevert(x) {
5655 return x
5656}
5657
5658function cReduce(x) {
5659 x.divRemTo(this.m, null, x)
5660}
5661
5662function cMulTo(x, y, r) {
5663 x.multiplyTo(y, r)
5664 this.reduce(r)
5665}
5666
5667function cSqrTo(x, r) {
5668 x.squareTo(r)
5669 this.reduce(r)
5670}
5671
5672Classic.prototype.convert = cConvert
5673Classic.prototype.revert = cRevert
5674Classic.prototype.reduce = cReduce
5675Classic.prototype.mulTo = cMulTo
5676Classic.prototype.sqrTo = cSqrTo
5677
5678// (protected) return "-1/this % 2^DB"; useful for Mont. reduction
5679// justification:
5680// xy == 1 (mod m)
5681// xy = 1+km
5682// xy(2-xy) = (1+km)(1-km)
5683// x[y(2-xy)] = 1-k^2m^2
5684// x[y(2-xy)] == 1 (mod m^2)
5685// if y is 1/x mod m, then y(2-xy) is 1/x mod m^2
5686// should reduce x and y(2-xy) by m^2 at each step to keep size bounded.
5687// JS multiply "overflows" differently from C/C++, so care is needed here.
5688function bnpInvDigit() {
5689 if (this.t < 1) return 0
5690 var x = this[0]
5691 if ((x & 1) == 0) return 0
5692 var y = x & 3; // y == 1/x mod 2^2
5693 y = (y * (2 - (x & 0xf) * y)) & 0xf; // y == 1/x mod 2^4
5694 y = (y * (2 - (x & 0xff) * y)) & 0xff; // y == 1/x mod 2^8
5695 y = (y * (2 - (((x & 0xffff) * y) & 0xffff))) & 0xffff; // y == 1/x mod 2^16
5696 // last step - calculate inverse mod DV directly
5697 // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints
5698 y = (y * (2 - x * y % this.DV)) % this.DV; // y == 1/x mod 2^dbits
5699 // we really want the negative inverse, and -DV < y < DV
5700 return (y > 0) ? this.DV - y : -y
5701}
5702
5703// Montgomery reduction
5704function Montgomery(m) {
5705 this.m = m
5706 this.mp = m.invDigit()
5707 this.mpl = this.mp & 0x7fff
5708 this.mph = this.mp >> 15
5709 this.um = (1 << (m.DB - 15)) - 1
5710 this.mt2 = 2 * m.t
5711}
5712
5713// xR mod m
5714function montConvert(x) {
5715 var r = new BigInteger()
5716 x.abs()
5717 .dlShiftTo(this.m.t, r)
5718 r.divRemTo(this.m, null, r)
5719 if (x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) this.m.subTo(r, r)
5720 return r
5721}
5722
5723// x/R mod m
5724function montRevert(x) {
5725 var r = new BigInteger()
5726 x.copyTo(r)
5727 this.reduce(r)
5728 return r
5729}
5730
5731// x = x/R mod m (HAC 14.32)
5732function montReduce(x) {
5733 while (x.t <= this.mt2) // pad x so am has enough room later
5734 x[x.t++] = 0
5735 for (var i = 0; i < this.m.t; ++i) {
5736 // faster way of calculating u0 = x[i]*mp mod DV
5737 var j = x[i] & 0x7fff
5738 var u0 = (j * this.mpl + (((j * this.mph + (x[i] >> 15) * this.mpl) & this.um) << 15)) & x.DM
5739 // use am to combine the multiply-shift-add into one call
5740 j = i + this.m.t
5741 x[j] += this.m.am(0, u0, x, i, 0, this.m.t)
5742 // propagate carry
5743 while (x[j] >= x.DV) {
5744 x[j] -= x.DV
5745 x[++j]++
5746 }
5747 }
5748 x.clamp()
5749 x.drShiftTo(this.m.t, x)
5750 if (x.compareTo(this.m) >= 0) x.subTo(this.m, x)
5751}
5752
5753// r = "x^2/R mod m"; x != r
5754function montSqrTo(x, r) {
5755 x.squareTo(r)
5756 this.reduce(r)
5757}
5758
5759// r = "xy/R mod m"; x,y != r
5760function montMulTo(x, y, r) {
5761 x.multiplyTo(y, r)
5762 this.reduce(r)
5763}
5764
5765Montgomery.prototype.convert = montConvert
5766Montgomery.prototype.revert = montRevert
5767Montgomery.prototype.reduce = montReduce
5768Montgomery.prototype.mulTo = montMulTo
5769Montgomery.prototype.sqrTo = montSqrTo
5770
5771// (protected) true iff this is even
5772function bnpIsEven() {
5773 return ((this.t > 0) ? (this[0] & 1) : this.s) == 0
5774}
5775
5776// (protected) this^e, e < 2^32, doing sqr and mul with "r" (HAC 14.79)
5777function bnpExp(e, z) {
5778 if (e > 0xffffffff || e < 1) return BigInteger.ONE
5779 var r = new BigInteger(),
5780 r2 = new BigInteger(),
5781 g = z.convert(this),
5782 i = nbits(e) - 1
5783 g.copyTo(r)
5784 while (--i >= 0) {
5785 z.sqrTo(r, r2)
5786 if ((e & (1 << i)) > 0) z.mulTo(r2, g, r)
5787 else {
5788 var t = r
5789 r = r2
5790 r2 = t
5791 }
5792 }
5793 return z.revert(r)
5794}
5795
5796// (public) this^e % m, 0 <= e < 2^32
5797function bnModPowInt(e, m) {
5798 var z
5799 if (e < 256 || m.isEven()) z = new Classic(m)
5800 else z = new Montgomery(m)
5801 return this.exp(e, z)
5802}
5803
5804// protected
5805proto.copyTo = bnpCopyTo
5806proto.fromInt = bnpFromInt
5807proto.fromString = bnpFromString
5808proto.clamp = bnpClamp
5809proto.dlShiftTo = bnpDLShiftTo
5810proto.drShiftTo = bnpDRShiftTo
5811proto.lShiftTo = bnpLShiftTo
5812proto.rShiftTo = bnpRShiftTo
5813proto.subTo = bnpSubTo
5814proto.multiplyTo = bnpMultiplyTo
5815proto.squareTo = bnpSquareTo
5816proto.divRemTo = bnpDivRemTo
5817proto.invDigit = bnpInvDigit
5818proto.isEven = bnpIsEven
5819proto.exp = bnpExp
5820
5821// public
5822proto.toString = bnToString
5823proto.negate = bnNegate
5824proto.abs = bnAbs
5825proto.compareTo = bnCompareTo
5826proto.bitLength = bnBitLength
5827proto.byteLength = bnByteLength
5828proto.mod = bnMod
5829proto.modPowInt = bnModPowInt
5830
5831// (public)
5832function bnClone() {
5833 var r = new BigInteger()
5834 this.copyTo(r)
5835 return r
5836}
5837
5838// (public) return value as integer
5839function bnIntValue() {
5840 if (this.s < 0) {
5841 if (this.t == 1) return this[0] - this.DV
5842 else if (this.t == 0) return -1
5843 } else if (this.t == 1) return this[0]
5844 else if (this.t == 0) return 0
5845 // assumes 16 < DB < 32
5846 return ((this[1] & ((1 << (32 - this.DB)) - 1)) << this.DB) | this[0]
5847}
5848
5849// (public) return value as byte
5850function bnByteValue() {
5851 return (this.t == 0) ? this.s : (this[0] << 24) >> 24
5852}
5853
5854// (public) return value as short (assumes DB>=16)
5855function bnShortValue() {
5856 return (this.t == 0) ? this.s : (this[0] << 16) >> 16
5857}
5858
5859// (protected) return x s.t. r^x < DV
5860function bnpChunkSize(r) {
5861 return Math.floor(Math.LN2 * this.DB / Math.log(r))
5862}
5863
5864// (public) 0 if this == 0, 1 if this > 0
5865function bnSigNum() {
5866 if (this.s < 0) return -1
5867 else if (this.t <= 0 || (this.t == 1 && this[0] <= 0)) return 0
5868 else return 1
5869}
5870
5871// (protected) convert to radix string
5872function bnpToRadix(b) {
5873 if (b == null) b = 10
5874 if (this.signum() == 0 || b < 2 || b > 36) return "0"
5875 var cs = this.chunkSize(b)
5876 var a = Math.pow(b, cs)
5877 var d = nbv(a),
5878 y = new BigInteger(),
5879 z = new BigInteger(),
5880 r = ""
5881 this.divRemTo(d, y, z)
5882 while (y.signum() > 0) {
5883 r = (a + z.intValue())
5884 .toString(b)
5885 .substr(1) + r
5886 y.divRemTo(d, y, z)
5887 }
5888 return z.intValue()
5889 .toString(b) + r
5890}
5891
5892// (protected) convert from radix string
5893function bnpFromRadix(s, b) {
5894 var self = this
5895 self.fromInt(0)
5896 if (b == null) b = 10
5897 var cs = self.chunkSize(b)
5898 var d = Math.pow(b, cs),
5899 mi = false,
5900 j = 0,
5901 w = 0
5902 for (var i = 0; i < s.length; ++i) {
5903 var x = intAt(s, i)
5904 if (x < 0) {
5905 if (s.charAt(i) == "-" && self.signum() == 0) mi = true
5906 continue
5907 }
5908 w = b * w + x
5909 if (++j >= cs) {
5910 self.dMultiply(d)
5911 self.dAddOffset(w, 0)
5912 j = 0
5913 w = 0
5914 }
5915 }
5916 if (j > 0) {
5917 self.dMultiply(Math.pow(b, j))
5918 self.dAddOffset(w, 0)
5919 }
5920 if (mi) BigInteger.ZERO.subTo(self, self)
5921}
5922
5923// (protected) alternate constructor
5924function bnpFromNumber(a, b, c) {
5925 var self = this
5926 if ("number" == typeof b) {
5927 // new BigInteger(int,int,RNG)
5928 if (a < 2) self.fromInt(1)
5929 else {
5930 self.fromNumber(a, c)
5931 if (!self.testBit(a - 1)) // force MSB set
5932 self.bitwiseTo(BigInteger.ONE.shiftLeft(a - 1), op_or, self)
5933 if (self.isEven()) self.dAddOffset(1, 0); // force odd
5934 while (!self.isProbablePrime(b)) {
5935 self.dAddOffset(2, 0)
5936 if (self.bitLength() > a) self.subTo(BigInteger.ONE.shiftLeft(a - 1), self)
5937 }
5938 }
5939 } else {
5940 // new BigInteger(int,RNG)
5941 var x = new Array(),
5942 t = a & 7
5943 x.length = (a >> 3) + 1
5944 b.nextBytes(x)
5945 if (t > 0) x[0] &= ((1 << t) - 1)
5946 else x[0] = 0
5947 self.fromString(x, 256)
5948 }
5949}
5950
5951// (public) convert to bigendian byte array
5952function bnToByteArray() {
5953 var self = this
5954 var i = self.t,
5955 r = new Array()
5956 r[0] = self.s
5957 var p = self.DB - (i * self.DB) % 8,
5958 d, k = 0
5959 if (i-- > 0) {
5960 if (p < self.DB && (d = self[i] >> p) != (self.s & self.DM) >> p)
5961 r[k++] = d | (self.s << (self.DB - p))
5962 while (i >= 0) {
5963 if (p < 8) {
5964 d = (self[i] & ((1 << p) - 1)) << (8 - p)
5965 d |= self[--i] >> (p += self.DB - 8)
5966 } else {
5967 d = (self[i] >> (p -= 8)) & 0xff
5968 if (p <= 0) {
5969 p += self.DB
5970 --i
5971 }
5972 }
5973 if ((d & 0x80) != 0) d |= -256
5974 if (k === 0 && (self.s & 0x80) != (d & 0x80))++k
5975 if (k > 0 || d != self.s) r[k++] = d
5976 }
5977 }
5978 return r
5979}
5980
5981function bnEquals(a) {
5982 return (this.compareTo(a) == 0)
5983}
5984
5985function bnMin(a) {
5986 return (this.compareTo(a) < 0) ? this : a
5987}
5988
5989function bnMax(a) {
5990 return (this.compareTo(a) > 0) ? this : a
5991}
5992
5993// (protected) r = this op a (bitwise)
5994function bnpBitwiseTo(a, op, r) {
5995 var self = this
5996 var i, f, m = Math.min(a.t, self.t)
5997 for (i = 0; i < m; ++i) r[i] = op(self[i], a[i])
5998 if (a.t < self.t) {
5999 f = a.s & self.DM
6000 for (i = m; i < self.t; ++i) r[i] = op(self[i], f)
6001 r.t = self.t
6002 } else {
6003 f = self.s & self.DM
6004 for (i = m; i < a.t; ++i) r[i] = op(f, a[i])
6005 r.t = a.t
6006 }
6007 r.s = op(self.s, a.s)
6008 r.clamp()
6009}
6010
6011// (public) this & a
6012function op_and(x, y) {
6013 return x & y
6014}
6015
6016function bnAnd(a) {
6017 var r = new BigInteger()
6018 this.bitwiseTo(a, op_and, r)
6019 return r
6020}
6021
6022// (public) this | a
6023function op_or(x, y) {
6024 return x | y
6025}
6026
6027function bnOr(a) {
6028 var r = new BigInteger()
6029 this.bitwiseTo(a, op_or, r)
6030 return r
6031}
6032
6033// (public) this ^ a
6034function op_xor(x, y) {
6035 return x ^ y
6036}
6037
6038function bnXor(a) {
6039 var r = new BigInteger()
6040 this.bitwiseTo(a, op_xor, r)
6041 return r
6042}
6043
6044// (public) this & ~a
6045function op_andnot(x, y) {
6046 return x & ~y
6047}
6048
6049function bnAndNot(a) {
6050 var r = new BigInteger()
6051 this.bitwiseTo(a, op_andnot, r)
6052 return r
6053}
6054
6055// (public) ~this
6056function bnNot() {
6057 var r = new BigInteger()
6058 for (var i = 0; i < this.t; ++i) r[i] = this.DM & ~this[i]
6059 r.t = this.t
6060 r.s = ~this.s
6061 return r
6062}
6063
6064// (public) this << n
6065function bnShiftLeft(n) {
6066 var r = new BigInteger()
6067 if (n < 0) this.rShiftTo(-n, r)
6068 else this.lShiftTo(n, r)
6069 return r
6070}
6071
6072// (public) this >> n
6073function bnShiftRight(n) {
6074 var r = new BigInteger()
6075 if (n < 0) this.lShiftTo(-n, r)
6076 else this.rShiftTo(n, r)
6077 return r
6078}
6079
6080// return index of lowest 1-bit in x, x < 2^31
6081function lbit(x) {
6082 if (x == 0) return -1
6083 var r = 0
6084 if ((x & 0xffff) == 0) {
6085 x >>= 16
6086 r += 16
6087 }
6088 if ((x & 0xff) == 0) {
6089 x >>= 8
6090 r += 8
6091 }
6092 if ((x & 0xf) == 0) {
6093 x >>= 4
6094 r += 4
6095 }
6096 if ((x & 3) == 0) {
6097 x >>= 2
6098 r += 2
6099 }
6100 if ((x & 1) == 0)++r
6101 return r
6102}
6103
6104// (public) returns index of lowest 1-bit (or -1 if none)
6105function bnGetLowestSetBit() {
6106 for (var i = 0; i < this.t; ++i)
6107 if (this[i] != 0) return i * this.DB + lbit(this[i])
6108 if (this.s < 0) return this.t * this.DB
6109 return -1
6110}
6111
6112// return number of 1 bits in x
6113function cbit(x) {
6114 var r = 0
6115 while (x != 0) {
6116 x &= x - 1
6117 ++r
6118 }
6119 return r
6120}
6121
6122// (public) return number of set bits
6123function bnBitCount() {
6124 var r = 0,
6125 x = this.s & this.DM
6126 for (var i = 0; i < this.t; ++i) r += cbit(this[i] ^ x)
6127 return r
6128}
6129
6130// (public) true iff nth bit is set
6131function bnTestBit(n) {
6132 var j = Math.floor(n / this.DB)
6133 if (j >= this.t) return (this.s != 0)
6134 return ((this[j] & (1 << (n % this.DB))) != 0)
6135}
6136
6137// (protected) this op (1<<n)
6138function bnpChangeBit(n, op) {
6139 var r = BigInteger.ONE.shiftLeft(n)
6140 this.bitwiseTo(r, op, r)
6141 return r
6142}
6143
6144// (public) this | (1<<n)
6145function bnSetBit(n) {
6146 return this.changeBit(n, op_or)
6147}
6148
6149// (public) this & ~(1<<n)
6150function bnClearBit(n) {
6151 return this.changeBit(n, op_andnot)
6152}
6153
6154// (public) this ^ (1<<n)
6155function bnFlipBit(n) {
6156 return this.changeBit(n, op_xor)
6157}
6158
6159// (protected) r = this + a
6160function bnpAddTo(a, r) {
6161 var self = this
6162
6163 var i = 0,
6164 c = 0,
6165 m = Math.min(a.t, self.t)
6166 while (i < m) {
6167 c += self[i] + a[i]
6168 r[i++] = c & self.DM
6169 c >>= self.DB
6170 }
6171 if (a.t < self.t) {
6172 c += a.s
6173 while (i < self.t) {
6174 c += self[i]
6175 r[i++] = c & self.DM
6176 c >>= self.DB
6177 }
6178 c += self.s
6179 } else {
6180 c += self.s
6181 while (i < a.t) {
6182 c += a[i]
6183 r[i++] = c & self.DM
6184 c >>= self.DB
6185 }
6186 c += a.s
6187 }
6188 r.s = (c < 0) ? -1 : 0
6189 if (c > 0) r[i++] = c
6190 else if (c < -1) r[i++] = self.DV + c
6191 r.t = i
6192 r.clamp()
6193}
6194
6195// (public) this + a
6196function bnAdd(a) {
6197 var r = new BigInteger()
6198 this.addTo(a, r)
6199 return r
6200}
6201
6202// (public) this - a
6203function bnSubtract(a) {
6204 var r = new BigInteger()
6205 this.subTo(a, r)
6206 return r
6207}
6208
6209// (public) this * a
6210function bnMultiply(a) {
6211 var r = new BigInteger()
6212 this.multiplyTo(a, r)
6213 return r
6214}
6215
6216// (public) this^2
6217function bnSquare() {
6218 var r = new BigInteger()
6219 this.squareTo(r)
6220 return r
6221}
6222
6223// (public) this / a
6224function bnDivide(a) {
6225 var r = new BigInteger()
6226 this.divRemTo(a, r, null)
6227 return r
6228}
6229
6230// (public) this % a
6231function bnRemainder(a) {
6232 var r = new BigInteger()
6233 this.divRemTo(a, null, r)
6234 return r
6235}
6236
6237// (public) [this/a,this%a]
6238function bnDivideAndRemainder(a) {
6239 var q = new BigInteger(),
6240 r = new BigInteger()
6241 this.divRemTo(a, q, r)
6242 return new Array(q, r)
6243}
6244
6245// (protected) this *= n, this >= 0, 1 < n < DV
6246function bnpDMultiply(n) {
6247 this[this.t] = this.am(0, n - 1, this, 0, 0, this.t)
6248 ++this.t
6249 this.clamp()
6250}
6251
6252// (protected) this += n << w words, this >= 0
6253function bnpDAddOffset(n, w) {
6254 if (n == 0) return
6255 while (this.t <= w) this[this.t++] = 0
6256 this[w] += n
6257 while (this[w] >= this.DV) {
6258 this[w] -= this.DV
6259 if (++w >= this.t) this[this.t++] = 0
6260 ++this[w]
6261 }
6262}
6263
6264// A "null" reducer
6265function NullExp() {}
6266
6267function nNop(x) {
6268 return x
6269}
6270
6271function nMulTo(x, y, r) {
6272 x.multiplyTo(y, r)
6273}
6274
6275function nSqrTo(x, r) {
6276 x.squareTo(r)
6277}
6278
6279NullExp.prototype.convert = nNop
6280NullExp.prototype.revert = nNop
6281NullExp.prototype.mulTo = nMulTo
6282NullExp.prototype.sqrTo = nSqrTo
6283
6284// (public) this^e
6285function bnPow(e) {
6286 return this.exp(e, new NullExp())
6287}
6288
6289// (protected) r = lower n words of "this * a", a.t <= n
6290// "this" should be the larger one if appropriate.
6291function bnpMultiplyLowerTo(a, n, r) {
6292 var i = Math.min(this.t + a.t, n)
6293 r.s = 0; // assumes a,this >= 0
6294 r.t = i
6295 while (i > 0) r[--i] = 0
6296 var j
6297 for (j = r.t - this.t; i < j; ++i) r[i + this.t] = this.am(0, a[i], r, i, 0, this.t)
6298 for (j = Math.min(a.t, n); i < j; ++i) this.am(0, a[i], r, i, 0, n - i)
6299 r.clamp()
6300}
6301
6302// (protected) r = "this * a" without lower n words, n > 0
6303// "this" should be the larger one if appropriate.
6304function bnpMultiplyUpperTo(a, n, r) {
6305 --n
6306 var i = r.t = this.t + a.t - n
6307 r.s = 0; // assumes a,this >= 0
6308 while (--i >= 0) r[i] = 0
6309 for (i = Math.max(n - this.t, 0); i < a.t; ++i)
6310 r[this.t + i - n] = this.am(n - i, a[i], r, 0, 0, this.t + i - n)
6311 r.clamp()
6312 r.drShiftTo(1, r)
6313}
6314
6315// Barrett modular reduction
6316function Barrett(m) {
6317 // setup Barrett
6318 this.r2 = new BigInteger()
6319 this.q3 = new BigInteger()
6320 BigInteger.ONE.dlShiftTo(2 * m.t, this.r2)
6321 this.mu = this.r2.divide(m)
6322 this.m = m
6323}
6324
6325function barrettConvert(x) {
6326 if (x.s < 0 || x.t > 2 * this.m.t) return x.mod(this.m)
6327 else if (x.compareTo(this.m) < 0) return x
6328 else {
6329 var r = new BigInteger()
6330 x.copyTo(r)
6331 this.reduce(r)
6332 return r
6333 }
6334}
6335
6336function barrettRevert(x) {
6337 return x
6338}
6339
6340// x = x mod m (HAC 14.42)
6341function barrettReduce(x) {
6342 var self = this
6343 x.drShiftTo(self.m.t - 1, self.r2)
6344 if (x.t > self.m.t + 1) {
6345 x.t = self.m.t + 1
6346 x.clamp()
6347 }
6348 self.mu.multiplyUpperTo(self.r2, self.m.t + 1, self.q3)
6349 self.m.multiplyLowerTo(self.q3, self.m.t + 1, self.r2)
6350 while (x.compareTo(self.r2) < 0) x.dAddOffset(1, self.m.t + 1)
6351 x.subTo(self.r2, x)
6352 while (x.compareTo(self.m) >= 0) x.subTo(self.m, x)
6353}
6354
6355// r = x^2 mod m; x != r
6356function barrettSqrTo(x, r) {
6357 x.squareTo(r)
6358 this.reduce(r)
6359}
6360
6361// r = x*y mod m; x,y != r
6362function barrettMulTo(x, y, r) {
6363 x.multiplyTo(y, r)
6364 this.reduce(r)
6365}
6366
6367Barrett.prototype.convert = barrettConvert
6368Barrett.prototype.revert = barrettRevert
6369Barrett.prototype.reduce = barrettReduce
6370Barrett.prototype.mulTo = barrettMulTo
6371Barrett.prototype.sqrTo = barrettSqrTo
6372
6373// (public) this^e % m (HAC 14.85)
6374function bnModPow(e, m) {
6375 var i = e.bitLength(),
6376 k, r = nbv(1),
6377 z
6378 if (i <= 0) return r
6379 else if (i < 18) k = 1
6380 else if (i < 48) k = 3
6381 else if (i < 144) k = 4
6382 else if (i < 768) k = 5
6383 else k = 6
6384 if (i < 8)
6385 z = new Classic(m)
6386 else if (m.isEven())
6387 z = new Barrett(m)
6388 else
6389 z = new Montgomery(m)
6390
6391 // precomputation
6392 var g = new Array(),
6393 n = 3,
6394 k1 = k - 1,
6395 km = (1 << k) - 1
6396 g[1] = z.convert(this)
6397 if (k > 1) {
6398 var g2 = new BigInteger()
6399 z.sqrTo(g[1], g2)
6400 while (n <= km) {
6401 g[n] = new BigInteger()
6402 z.mulTo(g2, g[n - 2], g[n])
6403 n += 2
6404 }
6405 }
6406
6407 var j = e.t - 1,
6408 w, is1 = true,
6409 r2 = new BigInteger(),
6410 t
6411 i = nbits(e[j]) - 1
6412 while (j >= 0) {
6413 if (i >= k1) w = (e[j] >> (i - k1)) & km
6414 else {
6415 w = (e[j] & ((1 << (i + 1)) - 1)) << (k1 - i)
6416 if (j > 0) w |= e[j - 1] >> (this.DB + i - k1)
6417 }
6418
6419 n = k
6420 while ((w & 1) == 0) {
6421 w >>= 1
6422 --n
6423 }
6424 if ((i -= n) < 0) {
6425 i += this.DB
6426 --j
6427 }
6428 if (is1) { // ret == 1, don't bother squaring or multiplying it
6429 g[w].copyTo(r)
6430 is1 = false
6431 } else {
6432 while (n > 1) {
6433 z.sqrTo(r, r2)
6434 z.sqrTo(r2, r)
6435 n -= 2
6436 }
6437 if (n > 0) z.sqrTo(r, r2)
6438 else {
6439 t = r
6440 r = r2
6441 r2 = t
6442 }
6443 z.mulTo(r2, g[w], r)
6444 }
6445
6446 while (j >= 0 && (e[j] & (1 << i)) == 0) {
6447 z.sqrTo(r, r2)
6448 t = r
6449 r = r2
6450 r2 = t
6451 if (--i < 0) {
6452 i = this.DB - 1
6453 --j
6454 }
6455 }
6456 }
6457 return z.revert(r)
6458}
6459
6460// (public) gcd(this,a) (HAC 14.54)
6461function bnGCD(a) {
6462 var x = (this.s < 0) ? this.negate() : this.clone()
6463 var y = (a.s < 0) ? a.negate() : a.clone()
6464 if (x.compareTo(y) < 0) {
6465 var t = x
6466 x = y
6467 y = t
6468 }
6469 var i = x.getLowestSetBit(),
6470 g = y.getLowestSetBit()
6471 if (g < 0) return x
6472 if (i < g) g = i
6473 if (g > 0) {
6474 x.rShiftTo(g, x)
6475 y.rShiftTo(g, y)
6476 }
6477 while (x.signum() > 0) {
6478 if ((i = x.getLowestSetBit()) > 0) x.rShiftTo(i, x)
6479 if ((i = y.getLowestSetBit()) > 0) y.rShiftTo(i, y)
6480 if (x.compareTo(y) >= 0) {
6481 x.subTo(y, x)
6482 x.rShiftTo(1, x)
6483 } else {
6484 y.subTo(x, y)
6485 y.rShiftTo(1, y)
6486 }
6487 }
6488 if (g > 0) y.lShiftTo(g, y)
6489 return y
6490}
6491
6492// (protected) this % n, n < 2^26
6493function bnpModInt(n) {
6494 if (n <= 0) return 0
6495 var d = this.DV % n,
6496 r = (this.s < 0) ? n - 1 : 0
6497 if (this.t > 0)
6498 if (d == 0) r = this[0] % n
6499 else
6500 for (var i = this.t - 1; i >= 0; --i) r = (d * r + this[i]) % n
6501 return r
6502}
6503
6504// (public) 1/this % m (HAC 14.61)
6505function bnModInverse(m) {
6506 var ac = m.isEven()
6507 if ((this.isEven() && ac) || m.signum() == 0) return BigInteger.ZERO
6508 var u = m.clone(),
6509 v = this.clone()
6510 var a = nbv(1),
6511 b = nbv(0),
6512 c = nbv(0),
6513 d = nbv(1)
6514 while (u.signum() != 0) {
6515 while (u.isEven()) {
6516 u.rShiftTo(1, u)
6517 if (ac) {
6518 if (!a.isEven() || !b.isEven()) {
6519 a.addTo(this, a)
6520 b.subTo(m, b)
6521 }
6522 a.rShiftTo(1, a)
6523 } else if (!b.isEven()) b.subTo(m, b)
6524 b.rShiftTo(1, b)
6525 }
6526 while (v.isEven()) {
6527 v.rShiftTo(1, v)
6528 if (ac) {
6529 if (!c.isEven() || !d.isEven()) {
6530 c.addTo(this, c)
6531 d.subTo(m, d)
6532 }
6533 c.rShiftTo(1, c)
6534 } else if (!d.isEven()) d.subTo(m, d)
6535 d.rShiftTo(1, d)
6536 }
6537 if (u.compareTo(v) >= 0) {
6538 u.subTo(v, u)
6539 if (ac) a.subTo(c, a)
6540 b.subTo(d, b)
6541 } else {
6542 v.subTo(u, v)
6543 if (ac) c.subTo(a, c)
6544 d.subTo(b, d)
6545 }
6546 }
6547 if (v.compareTo(BigInteger.ONE) != 0) return BigInteger.ZERO
6548 if (d.compareTo(m) >= 0) return d.subtract(m)
6549 if (d.signum() < 0) d.addTo(m, d)
6550 else return d
6551 if (d.signum() < 0) return d.add(m)
6552 else return d
6553}
6554
6555var lowprimes = [
6556 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71,
6557 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151,
6558 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233,
6559 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317,
6560 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419,
6561 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503,
6562 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607,
6563 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701,
6564 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811,
6565 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911,
6566 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997
6567]
6568
6569var lplim = (1 << 26) / lowprimes[lowprimes.length - 1]
6570
6571// (public) test primality with certainty >= 1-.5^t
6572function bnIsProbablePrime(t) {
6573 var i, x = this.abs()
6574 if (x.t == 1 && x[0] <= lowprimes[lowprimes.length - 1]) {
6575 for (i = 0; i < lowprimes.length; ++i)
6576 if (x[0] == lowprimes[i]) return true
6577 return false
6578 }
6579 if (x.isEven()) return false
6580 i = 1
6581 while (i < lowprimes.length) {
6582 var m = lowprimes[i],
6583 j = i + 1
6584 while (j < lowprimes.length && m < lplim) m *= lowprimes[j++]
6585 m = x.modInt(m)
6586 while (i < j) if (m % lowprimes[i++] == 0) return false
6587 }
6588 return x.millerRabin(t)
6589}
6590
6591// (protected) true if probably prime (HAC 4.24, Miller-Rabin)
6592function bnpMillerRabin(t) {
6593 var n1 = this.subtract(BigInteger.ONE)
6594 var k = n1.getLowestSetBit()
6595 if (k <= 0) return false
6596 var r = n1.shiftRight(k)
6597 t = (t + 1) >> 1
6598 if (t > lowprimes.length) t = lowprimes.length
6599 var a = new BigInteger(null)
6600 var j, bases = []
6601 for (var i = 0; i < t; ++i) {
6602 for (;;) {
6603 j = lowprimes[Math.floor(Math.random() * lowprimes.length)]
6604 if (bases.indexOf(j) == -1) break
6605 }
6606 bases.push(j)
6607 a.fromInt(j)
6608 var y = a.modPow(r, this)
6609 if (y.compareTo(BigInteger.ONE) != 0 && y.compareTo(n1) != 0) {
6610 var j = 1
6611 while (j++ < k && y.compareTo(n1) != 0) {
6612 y = y.modPowInt(2, this)
6613 if (y.compareTo(BigInteger.ONE) == 0) return false
6614 }
6615 if (y.compareTo(n1) != 0) return false
6616 }
6617 }
6618 return true
6619}
6620
6621// protected
6622proto.chunkSize = bnpChunkSize
6623proto.toRadix = bnpToRadix
6624proto.fromRadix = bnpFromRadix
6625proto.fromNumber = bnpFromNumber
6626proto.bitwiseTo = bnpBitwiseTo
6627proto.changeBit = bnpChangeBit
6628proto.addTo = bnpAddTo
6629proto.dMultiply = bnpDMultiply
6630proto.dAddOffset = bnpDAddOffset
6631proto.multiplyLowerTo = bnpMultiplyLowerTo
6632proto.multiplyUpperTo = bnpMultiplyUpperTo
6633proto.modInt = bnpModInt
6634proto.millerRabin = bnpMillerRabin
6635
6636// public
6637proto.clone = bnClone
6638proto.intValue = bnIntValue
6639proto.byteValue = bnByteValue
6640proto.shortValue = bnShortValue
6641proto.signum = bnSigNum
6642proto.toByteArray = bnToByteArray
6643proto.equals = bnEquals
6644proto.min = bnMin
6645proto.max = bnMax
6646proto.and = bnAnd
6647proto.or = bnOr
6648proto.xor = bnXor
6649proto.andNot = bnAndNot
6650proto.not = bnNot
6651proto.shiftLeft = bnShiftLeft
6652proto.shiftRight = bnShiftRight
6653proto.getLowestSetBit = bnGetLowestSetBit
6654proto.bitCount = bnBitCount
6655proto.testBit = bnTestBit
6656proto.setBit = bnSetBit
6657proto.clearBit = bnClearBit
6658proto.flipBit = bnFlipBit
6659proto.add = bnAdd
6660proto.subtract = bnSubtract
6661proto.multiply = bnMultiply
6662proto.divide = bnDivide
6663proto.remainder = bnRemainder
6664proto.divideAndRemainder = bnDivideAndRemainder
6665proto.modPow = bnModPow
6666proto.modInverse = bnModInverse
6667proto.pow = bnPow
6668proto.gcd = bnGCD
6669proto.isProbablePrime = bnIsProbablePrime
6670
6671// JSBN-specific extension
6672proto.square = bnSquare
6673
6674// constants
6675BigInteger.ZERO = nbv(0)
6676BigInteger.ONE = nbv(1)
6677BigInteger.valueOf = nbv
6678
6679module.exports = BigInteger
6680
6681},{"../package.json":4}],2:[function(require,module,exports){
6682(function (Buffer){
6683// FIXME: Kind of a weird way to throw exceptions, consider removing
6684var assert = require('assert')
6685var BigInteger = require('./bigi')
6686
6687/**
6688 * Turns a byte array into a big integer.
6689 *
6690 * This function will interpret a byte array as a big integer in big
6691 * endian notation.
6692 */
6693BigInteger.fromByteArrayUnsigned = function(byteArray) {
6694 // BigInteger expects a DER integer conformant byte array
6695 if (byteArray[0] & 0x80) {
6696 return new BigInteger([0].concat(byteArray))
6697 }
6698
6699 return new BigInteger(byteArray)
6700}
6701
6702/**
6703 * Returns a byte array representation of the big integer.
6704 *
6705 * This returns the absolute of the contained value in big endian
6706 * form. A value of zero results in an empty array.
6707 */
6708BigInteger.prototype.toByteArrayUnsigned = function() {
6709 var byteArray = this.toByteArray()
6710 return byteArray[0] === 0 ? byteArray.slice(1) : byteArray
6711}
6712
6713BigInteger.fromDERInteger = function(byteArray) {
6714 return new BigInteger(byteArray)
6715}
6716
6717/*
6718 * Converts BigInteger to a DER integer representation.
6719 *
6720 * The format for this value uses the most significant bit as a sign
6721 * bit. If the most significant bit is already set and the integer is
6722 * positive, a 0x00 is prepended.
6723 *
6724 * Examples:
6725 *
6726 * 0 => 0x00
6727 * 1 => 0x01
6728 * -1 => 0xff
6729 * 127 => 0x7f
6730 * -127 => 0x81
6731 * 128 => 0x0080
6732 * -128 => 0x80
6733 * 255 => 0x00ff
6734 * -255 => 0xff01
6735 * 16300 => 0x3fac
6736 * -16300 => 0xc054
6737 * 62300 => 0x00f35c
6738 * -62300 => 0xff0ca4
6739*/
6740BigInteger.prototype.toDERInteger = BigInteger.prototype.toByteArray
6741
6742BigInteger.fromBuffer = function(buffer) {
6743 // BigInteger expects a DER integer conformant byte array
6744 if (buffer[0] & 0x80) {
6745 var byteArray = Array.prototype.slice.call(buffer)
6746
6747 return new BigInteger([0].concat(byteArray))
6748 }
6749
6750 return new BigInteger(buffer)
6751}
6752
6753BigInteger.fromHex = function(hex) {
6754 if (hex === '') return BigInteger.ZERO
6755
6756 assert.equal(hex, hex.match(/^[A-Fa-f0-9]+/), 'Invalid hex string')
6757 assert.equal(hex.length % 2, 0, 'Incomplete hex')
6758 return new BigInteger(hex, 16)
6759}
6760
6761BigInteger.prototype.toBuffer = function(size) {
6762 var byteArray = this.toByteArrayUnsigned()
6763 var zeros = []
6764
6765 var padding = size - byteArray.length
6766 while (zeros.length < padding) zeros.push(0)
6767
6768 return new Buffer(zeros.concat(byteArray))
6769}
6770
6771BigInteger.prototype.toHex = function(size) {
6772 return this.toBuffer(size).toString('hex')
6773}
6774
6775}).call(this,require("buffer").Buffer)
6776},{"./bigi":1,"assert":5,"buffer":7}],3:[function(require,module,exports){
6777var BigInteger = require('./bigi')
6778
6779//addons
6780require('./convert')
6781
6782module.exports = BigInteger
6783},{"./bigi":1,"./convert":2}],4:[function(require,module,exports){
6784module.exports={
6785 "name": "bigi",
6786 "version": "1.4.0",
6787 "description": "Big integers.",
6788 "keywords": [
6789 "cryptography",
6790 "math",
6791 "bitcoin",
6792 "arbitrary",
6793 "precision",
6794 "arithmetic",
6795 "big",
6796 "integer",
6797 "int",
6798 "number",
6799 "biginteger",
6800 "bigint",
6801 "bignumber",
6802 "decimal",
6803 "float"
6804 ],
6805 "devDependencies": {
6806 "mocha": "^1.20.1",
6807 "jshint": "^2.5.1",
6808 "coveralls": "^2.10.0",
6809 "istanbul": "^0.2.11"
6810 },
6811 "repository": {
6812 "url": "https://github.com/cryptocoinjs/bigi",
6813 "type": "git"
6814 },
6815 "main": "./lib/index.js",
6816 "scripts": {
6817 "test": "_mocha -- test/*.js",
6818 "jshint": "jshint --config jshint.json lib/*.js ; true",
6819 "unit": "mocha",
6820 "coverage": "istanbul cover ./node_modules/.bin/_mocha -- --reporter list test/*.js",
6821 "coveralls": "npm run-script coverage && node ./node_modules/.bin/coveralls < coverage/lcov.info"
6822 },
6823 "dependencies": {},
6824 "testling": {
6825 "files": "test/*.js",
6826 "harness": "mocha",
6827 "browsers": [
6828 "ie/9..latest",
6829 "firefox/latest",
6830 "chrome/latest",
6831 "safari/6.0..latest",
6832 "iphone/6.0..latest",
6833 "android-browser/4.2..latest"
6834 ]
6835 },
6836 "bugs": {
6837 "url": "https://github.com/cryptocoinjs/bigi/issues"
6838 },
6839 "homepage": "https://github.com/cryptocoinjs/bigi",
6840 "_id": "bigi@1.4.0",
6841 "dist": {
6842 "shasum": "90ac1aeac0a531216463bdb58f42c1e05c8407ac",
6843 "tarball": "http://registry.npmjs.org/bigi/-/bigi-1.4.0.tgz"
6844 },
6845 "_from": "bigi@^1.4.0",
6846 "_npmVersion": "1.4.3",
6847 "_npmUser": {
6848 "name": "jp",
6849 "email": "jprichardson@gmail.com"
6850 },
6851 "maintainers": [
6852 {
6853 "name": "jp",
6854 "email": "jprichardson@gmail.com"
6855 },
6856 {
6857 "name": "midnightlightning",
6858 "email": "boydb@midnightdesign.ws"
6859 },
6860 {
6861 "name": "sidazhang",
6862 "email": "sidazhang89@gmail.com"
6863 },
6864 {
6865 "name": "nadav",
6866 "email": "npm@shesek.info"
6867 }
6868 ],
6869 "directories": {},
6870 "_shasum": "90ac1aeac0a531216463bdb58f42c1e05c8407ac",
6871 "_resolved": "https://registry.npmjs.org/bigi/-/bigi-1.4.0.tgz"
6872}
6873
6874},{}],5:[function(require,module,exports){
6875// http://wiki.commonjs.org/wiki/Unit_Testing/1.0
6876//
6877// THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!
6878//
6879// Originally from narwhal.js (http://narwhaljs.org)
6880// Copyright (c) 2009 Thomas Robinson <280north.com>
6881//
6882// Permission is hereby granted, free of charge, to any person obtaining a copy
6883// of this software and associated documentation files (the 'Software'), to
6884// deal in the Software without restriction, including without limitation the
6885// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
6886// sell copies of the Software, and to permit persons to whom the Software is
6887// furnished to do so, subject to the following conditions:
6888//
6889// The above copyright notice and this permission notice shall be included in
6890// all copies or substantial portions of the Software.
6891//
6892// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
6893// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
6894// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
6895// AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
6896// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
6897// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
6898
6899// when used in node, this will actually load the util module we depend on
6900// versus loading the builtin util module as happens otherwise
6901// this is a bug in node module loading as far as I am concerned
6902var util = require('util/');
6903
6904var pSlice = Array.prototype.slice;
6905var hasOwn = Object.prototype.hasOwnProperty;
6906
6907// 1. The assert module provides functions that throw
6908// AssertionError's when particular conditions are not met. The
6909// assert module must conform to the following interface.
6910
6911var assert = module.exports = ok;
6912
6913// 2. The AssertionError is defined in assert.
6914// new assert.AssertionError({ message: message,
6915// actual: actual,
6916// expected: expected })
6917
6918assert.AssertionError = function AssertionError(options) {
6919 this.name = 'AssertionError';
6920 this.actual = options.actual;
6921 this.expected = options.expected;
6922 this.operator = options.operator;
6923 if (options.message) {
6924 this.message = options.message;
6925 this.generatedMessage = false;
6926 } else {
6927 this.message = getMessage(this);
6928 this.generatedMessage = true;
6929 }
6930 var stackStartFunction = options.stackStartFunction || fail;
6931
6932 if (Error.captureStackTrace) {
6933 Error.captureStackTrace(this, stackStartFunction);
6934 }
6935 else {
6936 // non v8 browsers so we can have a stacktrace
6937 var err = new Error();
6938 if (err.stack) {
6939 var out = err.stack;
6940
6941 // try to strip useless frames
6942 var fn_name = stackStartFunction.name;
6943 var idx = out.indexOf('\n' + fn_name);
6944 if (idx >= 0) {
6945 // once we have located the function frame
6946 // we need to strip out everything before it (and its line)
6947 var next_line = out.indexOf('\n', idx + 1);
6948 out = out.substring(next_line + 1);
6949 }
6950
6951 this.stack = out;
6952 }
6953 }
6954};
6955
6956// assert.AssertionError instanceof Error
6957util.inherits(assert.AssertionError, Error);
6958
6959function replacer(key, value) {
6960 if (util.isUndefined(value)) {
6961 return '' + value;
6962 }
6963 if (util.isNumber(value) && !isFinite(value)) {
6964 return value.toString();
6965 }
6966 if (util.isFunction(value) || util.isRegExp(value)) {
6967 return value.toString();
6968 }
6969 return value;
6970}
6971
6972function truncate(s, n) {
6973 if (util.isString(s)) {
6974 return s.length < n ? s : s.slice(0, n);
6975 } else {
6976 return s;
6977 }
6978}
6979
6980function getMessage(self) {
6981 return truncate(JSON.stringify(self.actual, replacer), 128) + ' ' +
6982 self.operator + ' ' +
6983 truncate(JSON.stringify(self.expected, replacer), 128);
6984}
6985
6986// At present only the three keys mentioned above are used and
6987// understood by the spec. Implementations or sub modules can pass
6988// other keys to the AssertionError's constructor - they will be
6989// ignored.
6990
6991// 3. All of the following functions must throw an AssertionError
6992// when a corresponding condition is not met, with a message that
6993// may be undefined if not provided. All assertion methods provide
6994// both the actual and expected values to the assertion error for
6995// display purposes.
6996
6997function fail(actual, expected, message, operator, stackStartFunction) {
6998 throw new assert.AssertionError({
6999 message: message,
7000 actual: actual,
7001 expected: expected,
7002 operator: operator,
7003 stackStartFunction: stackStartFunction
7004 });
7005}
7006
7007// EXTENSION! allows for well behaved errors defined elsewhere.
7008assert.fail = fail;
7009
7010// 4. Pure assertion tests whether a value is truthy, as determined
7011// by !!guard.
7012// assert.ok(guard, message_opt);
7013// This statement is equivalent to assert.equal(true, !!guard,
7014// message_opt);. To test strictly for the value true, use
7015// assert.strictEqual(true, guard, message_opt);.
7016
7017function ok(value, message) {
7018 if (!value) fail(value, true, message, '==', assert.ok);
7019}
7020assert.ok = ok;
7021
7022// 5. The equality assertion tests shallow, coercive equality with
7023// ==.
7024// assert.equal(actual, expected, message_opt);
7025
7026assert.equal = function equal(actual, expected, message) {
7027 if (actual != expected) fail(actual, expected, message, '==', assert.equal);
7028};
7029
7030// 6. The non-equality assertion tests for whether two objects are not equal
7031// with != assert.notEqual(actual, expected, message_opt);
7032
7033assert.notEqual = function notEqual(actual, expected, message) {
7034 if (actual == expected) {
7035 fail(actual, expected, message, '!=', assert.notEqual);
7036 }
7037};
7038
7039// 7. The equivalence assertion tests a deep equality relation.
7040// assert.deepEqual(actual, expected, message_opt);
7041
7042assert.deepEqual = function deepEqual(actual, expected, message) {
7043 if (!_deepEqual(actual, expected)) {
7044 fail(actual, expected, message, 'deepEqual', assert.deepEqual);
7045 }
7046};
7047
7048function _deepEqual(actual, expected) {
7049 // 7.1. All identical values are equivalent, as determined by ===.
7050 if (actual === expected) {
7051 return true;
7052
7053 } else if (util.isBuffer(actual) && util.isBuffer(expected)) {
7054 if (actual.length != expected.length) return false;
7055
7056 for (var i = 0; i < actual.length; i++) {
7057 if (actual[i] !== expected[i]) return false;
7058 }
7059
7060 return true;
7061
7062 // 7.2. If the expected value is a Date object, the actual value is
7063 // equivalent if it is also a Date object that refers to the same time.
7064 } else if (util.isDate(actual) && util.isDate(expected)) {
7065 return actual.getTime() === expected.getTime();
7066
7067 // 7.3 If the expected value is a RegExp object, the actual value is
7068 // equivalent if it is also a RegExp object with the same source and
7069 // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).
7070 } else if (util.isRegExp(actual) && util.isRegExp(expected)) {
7071 return actual.source === expected.source &&
7072 actual.global === expected.global &&
7073 actual.multiline === expected.multiline &&
7074 actual.lastIndex === expected.lastIndex &&
7075 actual.ignoreCase === expected.ignoreCase;
7076
7077 // 7.4. Other pairs that do not both pass typeof value == 'object',
7078 // equivalence is determined by ==.
7079 } else if (!util.isObject(actual) && !util.isObject(expected)) {
7080 return actual == expected;
7081
7082 // 7.5 For all other Object pairs, including Array objects, equivalence is
7083 // determined by having the same number of owned properties (as verified
7084 // with Object.prototype.hasOwnProperty.call), the same set of keys
7085 // (although not necessarily the same order), equivalent values for every
7086 // corresponding key, and an identical 'prototype' property. Note: this
7087 // accounts for both named and indexed properties on Arrays.
7088 } else {
7089 return objEquiv(actual, expected);
7090 }
7091}
7092
7093function isArguments(object) {
7094 return Object.prototype.toString.call(object) == '[object Arguments]';
7095}
7096
7097function objEquiv(a, b) {
7098 if (util.isNullOrUndefined(a) || util.isNullOrUndefined(b))
7099 return false;
7100 // an identical 'prototype' property.
7101 if (a.prototype !== b.prototype) return false;
7102 // if one is a primitive, the other must be same
7103 if (util.isPrimitive(a) || util.isPrimitive(b)) {
7104 return a === b;
7105 }
7106 var aIsArgs = isArguments(a),
7107 bIsArgs = isArguments(b);
7108 if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))
7109 return false;
7110 if (aIsArgs) {
7111 a = pSlice.call(a);
7112 b = pSlice.call(b);
7113 return _deepEqual(a, b);
7114 }
7115 var ka = objectKeys(a),
7116 kb = objectKeys(b),
7117 key, i;
7118 // having the same number of owned properties (keys incorporates
7119 // hasOwnProperty)
7120 if (ka.length != kb.length)
7121 return false;
7122 //the same set of keys (although not necessarily the same order),
7123 ka.sort();
7124 kb.sort();
7125 //~~~cheap key test
7126 for (i = ka.length - 1; i >= 0; i--) {
7127 if (ka[i] != kb[i])
7128 return false;
7129 }
7130 //equivalent values for every corresponding key, and
7131 //~~~possibly expensive deep test
7132 for (i = ka.length - 1; i >= 0; i--) {
7133 key = ka[i];
7134 if (!_deepEqual(a[key], b[key])) return false;
7135 }
7136 return true;
7137}
7138
7139// 8. The non-equivalence assertion tests for any deep inequality.
7140// assert.notDeepEqual(actual, expected, message_opt);
7141
7142assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
7143 if (_deepEqual(actual, expected)) {
7144 fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
7145 }
7146};
7147
7148// 9. The strict equality assertion tests strict equality, as determined by ===.
7149// assert.strictEqual(actual, expected, message_opt);
7150
7151assert.strictEqual = function strictEqual(actual, expected, message) {
7152 if (actual !== expected) {
7153 fail(actual, expected, message, '===', assert.strictEqual);
7154 }
7155};
7156
7157// 10. The strict non-equality assertion tests for strict inequality, as
7158// determined by !==. assert.notStrictEqual(actual, expected, message_opt);
7159
7160assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
7161 if (actual === expected) {
7162 fail(actual, expected, message, '!==', assert.notStrictEqual);
7163 }
7164};
7165
7166function expectedException(actual, expected) {
7167 if (!actual || !expected) {
7168 return false;
7169 }
7170
7171 if (Object.prototype.toString.call(expected) == '[object RegExp]') {
7172 return expected.test(actual);
7173 } else if (actual instanceof expected) {
7174 return true;
7175 } else if (expected.call({}, actual) === true) {
7176 return true;
7177 }
7178
7179 return false;
7180}
7181
7182function _throws(shouldThrow, block, expected, message) {
7183 var actual;
7184
7185 if (util.isString(expected)) {
7186 message = expected;
7187 expected = null;
7188 }
7189
7190 try {
7191 block();
7192 } catch (e) {
7193 actual = e;
7194 }
7195
7196 message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
7197 (message ? ' ' + message : '.');
7198
7199 if (shouldThrow && !actual) {
7200 fail(actual, expected, 'Missing expected exception' + message);
7201 }
7202
7203 if (!shouldThrow && expectedException(actual, expected)) {
7204 fail(actual, expected, 'Got unwanted exception' + message);
7205 }
7206
7207 if ((shouldThrow && actual && expected &&
7208 !expectedException(actual, expected)) || (!shouldThrow && actual)) {
7209 throw actual;
7210 }
7211}
7212
7213// 11. Expected to throw an error:
7214// assert.throws(block, Error_opt, message_opt);
7215
7216assert.throws = function(block, /*optional*/error, /*optional*/message) {
7217 _throws.apply(this, [true].concat(pSlice.call(arguments)));
7218};
7219
7220// EXTENSION! This is annoying to write outside this module.
7221assert.doesNotThrow = function(block, /*optional*/message) {
7222 _throws.apply(this, [false].concat(pSlice.call(arguments)));
7223};
7224
7225assert.ifError = function(err) { if (err) {throw err;}};
7226
7227var objectKeys = Object.keys || function (obj) {
7228 var keys = [];
7229 for (var key in obj) {
7230 if (hasOwn.call(obj, key)) keys.push(key);
7231 }
7232 return keys;
7233};
7234
7235},{"util/":29}],6:[function(require,module,exports){
7236
7237},{}],7:[function(require,module,exports){
7238/*!
7239 * The buffer module from node.js, for the browser.
7240 *
7241 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
7242 * @license MIT
7243 */
7244
7245var base64 = require('base64-js')
7246var ieee754 = require('ieee754')
7247var isArray = require('is-array')
7248
7249exports.Buffer = Buffer
7250exports.SlowBuffer = SlowBuffer
7251exports.INSPECT_MAX_BYTES = 50
7252Buffer.poolSize = 8192 // not used by this implementation
7253
7254var rootParent = {}
7255
7256/**
7257 * If `Buffer.TYPED_ARRAY_SUPPORT`:
7258 * === true Use Uint8Array implementation (fastest)
7259 * === false Use Object implementation (most compatible, even IE6)
7260 *
7261 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
7262 * Opera 11.6+, iOS 4.2+.
7263 *
7264 * Due to various browser bugs, sometimes the Object implementation will be used even
7265 * when the browser supports typed arrays.
7266 *
7267 * Note:
7268 *
7269 * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,
7270 * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.
7271 *
7272 * - Safari 5-7 lacks support for changing the `Object.prototype.constructor` property
7273 * on objects.
7274 *
7275 * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.
7276 *
7277 * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of
7278 * incorrect length in some situations.
7279
7280 * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they
7281 * get the Object implementation, which is slower but behaves correctly.
7282 */
7283Buffer.TYPED_ARRAY_SUPPORT = (function () {
7284 function Bar () {}
7285 try {
7286 var arr = new Uint8Array(1)
7287 arr.foo = function () { return 42 }
7288 arr.constructor = Bar
7289 return arr.foo() === 42 && // typed array instances can be augmented
7290 arr.constructor === Bar && // constructor can be set
7291 typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`
7292 arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`
7293 } catch (e) {
7294 return false
7295 }
7296})()
7297
7298function kMaxLength () {
7299 return Buffer.TYPED_ARRAY_SUPPORT
7300 ? 0x7fffffff
7301 : 0x3fffffff
7302}
7303
7304/**
7305 * Class: Buffer
7306 * =============
7307 *
7308 * The Buffer constructor returns instances of `Uint8Array` that are augmented
7309 * with function properties for all the node `Buffer` API functions. We use
7310 * `Uint8Array` so that square bracket notation works as expected -- it returns
7311 * a single octet.
7312 *
7313 * By augmenting the instances, we can avoid modifying the `Uint8Array`
7314 * prototype.
7315 */
7316function Buffer (arg) {
7317 if (!(this instanceof Buffer)) {
7318 // Avoid going through an ArgumentsAdaptorTrampoline in the common case.
7319 if (arguments.length > 1) return new Buffer(arg, arguments[1])
7320 return new Buffer(arg)
7321 }
7322
7323 this.length = 0
7324 this.parent = undefined
7325
7326 // Common case.
7327 if (typeof arg === 'number') {
7328 return fromNumber(this, arg)
7329 }
7330
7331 // Slightly less common case.
7332 if (typeof arg === 'string') {
7333 return fromString(this, arg, arguments.length > 1 ? arguments[1] : 'utf8')
7334 }
7335
7336 // Unusual.
7337 return fromObject(this, arg)
7338}
7339
7340function fromNumber (that, length) {
7341 that = allocate(that, length < 0 ? 0 : checked(length) | 0)
7342 if (!Buffer.TYPED_ARRAY_SUPPORT) {
7343 for (var i = 0; i < length; i++) {
7344 that[i] = 0
7345 }
7346 }
7347 return that
7348}
7349
7350function fromString (that, string, encoding) {
7351 if (typeof encoding !== 'string' || encoding === '') encoding = 'utf8'
7352
7353 // Assumption: byteLength() return value is always < kMaxLength.
7354 var length = byteLength(string, encoding) | 0
7355 that = allocate(that, length)
7356
7357 that.write(string, encoding)
7358 return that
7359}
7360
7361function fromObject (that, object) {
7362 if (Buffer.isBuffer(object)) return fromBuffer(that, object)
7363
7364 if (isArray(object)) return fromArray(that, object)
7365
7366 if (object == null) {
7367 throw new TypeError('must start with number, buffer, array or string')
7368 }
7369
7370 if (typeof ArrayBuffer !== 'undefined') {
7371 if (object.buffer instanceof ArrayBuffer) {
7372 return fromTypedArray(that, object)
7373 }
7374 if (object instanceof ArrayBuffer) {
7375 return fromArrayBuffer(that, object)
7376 }
7377 }
7378
7379 if (object.length) return fromArrayLike(that, object)
7380
7381 return fromJsonObject(that, object)
7382}
7383
7384function fromBuffer (that, buffer) {
7385 var length = checked(buffer.length) | 0
7386 that = allocate(that, length)
7387 buffer.copy(that, 0, 0, length)
7388 return that
7389}
7390
7391function fromArray (that, array) {
7392 var length = checked(array.length) | 0
7393 that = allocate(that, length)
7394 for (var i = 0; i < length; i += 1) {
7395 that[i] = array[i] & 255
7396 }
7397 return that
7398}
7399
7400// Duplicate of fromArray() to keep fromArray() monomorphic.
7401function fromTypedArray (that, array) {
7402 var length = checked(array.length) | 0
7403 that = allocate(that, length)
7404 // Truncating the elements is probably not what people expect from typed
7405 // arrays with BYTES_PER_ELEMENT > 1 but it's compatible with the behavior
7406 // of the old Buffer constructor.
7407 for (var i = 0; i < length; i += 1) {
7408 that[i] = array[i] & 255
7409 }
7410 return that
7411}
7412
7413function fromArrayBuffer (that, array) {
7414 if (Buffer.TYPED_ARRAY_SUPPORT) {
7415 // Return an augmented `Uint8Array` instance, for best performance
7416 array.byteLength
7417 that = Buffer._augment(new Uint8Array(array))
7418 } else {
7419 // Fallback: Return an object instance of the Buffer class
7420 that = fromTypedArray(that, new Uint8Array(array))
7421 }
7422 return that
7423}
7424
7425function fromArrayLike (that, array) {
7426 var length = checked(array.length) | 0
7427 that = allocate(that, length)
7428 for (var i = 0; i < length; i += 1) {
7429 that[i] = array[i] & 255
7430 }
7431 return that
7432}
7433
7434// Deserialize { type: 'Buffer', data: [1,2,3,...] } into a Buffer object.
7435// Returns a zero-length buffer for inputs that don't conform to the spec.
7436function fromJsonObject (that, object) {
7437 var array
7438 var length = 0
7439
7440 if (object.type === 'Buffer' && isArray(object.data)) {
7441 array = object.data
7442 length = checked(array.length) | 0
7443 }
7444 that = allocate(that, length)
7445
7446 for (var i = 0; i < length; i += 1) {
7447 that[i] = array[i] & 255
7448 }
7449 return that
7450}
7451
7452function allocate (that, length) {
7453 if (Buffer.TYPED_ARRAY_SUPPORT) {
7454 // Return an augmented `Uint8Array` instance, for best performance
7455 that = Buffer._augment(new Uint8Array(length))
7456 } else {
7457 // Fallback: Return an object instance of the Buffer class
7458 that.length = length
7459 that._isBuffer = true
7460 }
7461
7462 var fromPool = length !== 0 && length <= Buffer.poolSize >>> 1
7463 if (fromPool) that.parent = rootParent
7464
7465 return that
7466}
7467
7468function checked (length) {
7469 // Note: cannot use `length < kMaxLength` here because that fails when
7470 // length is NaN (which is otherwise coerced to zero.)
7471 if (length >= kMaxLength()) {
7472 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
7473 'size: 0x' + kMaxLength().toString(16) + ' bytes')
7474 }
7475 return length | 0
7476}
7477
7478function SlowBuffer (subject, encoding) {
7479 if (!(this instanceof SlowBuffer)) return new SlowBuffer(subject, encoding)
7480
7481 var buf = new Buffer(subject, encoding)
7482 delete buf.parent
7483 return buf
7484}
7485
7486Buffer.isBuffer = function isBuffer (b) {
7487 return !!(b != null && b._isBuffer)
7488}
7489
7490Buffer.compare = function compare (a, b) {
7491 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
7492 throw new TypeError('Arguments must be Buffers')
7493 }
7494
7495 if (a === b) return 0
7496
7497 var x = a.length
7498 var y = b.length
7499
7500 var i = 0
7501 var len = Math.min(x, y)
7502 while (i < len) {
7503 if (a[i] !== b[i]) break
7504
7505 ++i
7506 }
7507
7508 if (i !== len) {
7509 x = a[i]
7510 y = b[i]
7511 }
7512
7513 if (x < y) return -1
7514 if (y < x) return 1
7515 return 0
7516}
7517
7518Buffer.isEncoding = function isEncoding (encoding) {
7519 switch (String(encoding).toLowerCase()) {
7520 case 'hex':
7521 case 'utf8':
7522 case 'utf-8':
7523 case 'ascii':
7524 case 'binary':
7525 case 'base64':
7526 case 'raw':
7527 case 'ucs2':
7528 case 'ucs-2':
7529 case 'utf16le':
7530 case 'utf-16le':
7531 return true
7532 default:
7533 return false
7534 }
7535}
7536
7537Buffer.concat = function concat (list, length) {
7538 if (!isArray(list)) throw new TypeError('list argument must be an Array of Buffers.')
7539
7540 if (list.length === 0) {
7541 return new Buffer(0)
7542 }
7543
7544 var i
7545 if (length === undefined) {
7546 length = 0
7547 for (i = 0; i < list.length; i++) {
7548 length += list[i].length
7549 }
7550 }
7551
7552 var buf = new Buffer(length)
7553 var pos = 0
7554 for (i = 0; i < list.length; i++) {
7555 var item = list[i]
7556 item.copy(buf, pos)
7557 pos += item.length
7558 }
7559 return buf
7560}
7561
7562function byteLength (string, encoding) {
7563 if (typeof string !== 'string') string = '' + string
7564
7565 var len = string.length
7566 if (len === 0) return 0
7567
7568 // Use a for loop to avoid recursion
7569 var loweredCase = false
7570 for (;;) {
7571 switch (encoding) {
7572 case 'ascii':
7573 case 'binary':
7574 // Deprecated
7575 case 'raw':
7576 case 'raws':
7577 return len
7578 case 'utf8':
7579 case 'utf-8':
7580 return utf8ToBytes(string).length
7581 case 'ucs2':
7582 case 'ucs-2':
7583 case 'utf16le':
7584 case 'utf-16le':
7585 return len * 2
7586 case 'hex':
7587 return len >>> 1
7588 case 'base64':
7589 return base64ToBytes(string).length
7590 default:
7591 if (loweredCase) return utf8ToBytes(string).length // assume utf8
7592 encoding = ('' + encoding).toLowerCase()
7593 loweredCase = true
7594 }
7595 }
7596}
7597Buffer.byteLength = byteLength
7598
7599// pre-set for values that may exist in the future
7600Buffer.prototype.length = undefined
7601Buffer.prototype.parent = undefined
7602
7603function slowToString (encoding, start, end) {
7604 var loweredCase = false
7605
7606 start = start | 0
7607 end = end === undefined || end === Infinity ? this.length : end | 0
7608
7609 if (!encoding) encoding = 'utf8'
7610 if (start < 0) start = 0
7611 if (end > this.length) end = this.length
7612 if (end <= start) return ''
7613
7614 while (true) {
7615 switch (encoding) {
7616 case 'hex':
7617 return hexSlice(this, start, end)
7618
7619 case 'utf8':
7620 case 'utf-8':
7621 return utf8Slice(this, start, end)
7622
7623 case 'ascii':
7624 return asciiSlice(this, start, end)
7625
7626 case 'binary':
7627 return binarySlice(this, start, end)
7628
7629 case 'base64':
7630 return base64Slice(this, start, end)
7631
7632 case 'ucs2':
7633 case 'ucs-2':
7634 case 'utf16le':
7635 case 'utf-16le':
7636 return utf16leSlice(this, start, end)
7637
7638 default:
7639 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
7640 encoding = (encoding + '').toLowerCase()
7641 loweredCase = true
7642 }
7643 }
7644}
7645
7646Buffer.prototype.toString = function toString () {
7647 var length = this.length | 0
7648 if (length === 0) return ''
7649 if (arguments.length === 0) return utf8Slice(this, 0, length)
7650 return slowToString.apply(this, arguments)
7651}
7652
7653Buffer.prototype.equals = function equals (b) {
7654 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
7655 if (this === b) return true
7656 return Buffer.compare(this, b) === 0
7657}
7658
7659Buffer.prototype.inspect = function inspect () {
7660 var str = ''
7661 var max = exports.INSPECT_MAX_BYTES
7662 if (this.length > 0) {
7663 str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
7664 if (this.length > max) str += ' ... '
7665 }
7666 return '<Buffer ' + str + '>'
7667}
7668
7669Buffer.prototype.compare = function compare (b) {
7670 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
7671 if (this === b) return 0
7672 return Buffer.compare(this, b)
7673}
7674
7675Buffer.prototype.indexOf = function indexOf (val, byteOffset) {
7676 if (byteOffset > 0x7fffffff) byteOffset = 0x7fffffff
7677 else if (byteOffset < -0x80000000) byteOffset = -0x80000000
7678 byteOffset >>= 0
7679
7680 if (this.length === 0) return -1
7681 if (byteOffset >= this.length) return -1
7682
7683 // Negative offsets start from the end of the buffer
7684 if (byteOffset < 0) byteOffset = Math.max(this.length + byteOffset, 0)
7685
7686 if (typeof val === 'string') {
7687 if (val.length === 0) return -1 // special case: looking for empty string always fails
7688 return String.prototype.indexOf.call(this, val, byteOffset)
7689 }
7690 if (Buffer.isBuffer(val)) {
7691 return arrayIndexOf(this, val, byteOffset)
7692 }
7693 if (typeof val === 'number') {
7694 if (Buffer.TYPED_ARRAY_SUPPORT && Uint8Array.prototype.indexOf === 'function') {
7695 return Uint8Array.prototype.indexOf.call(this, val, byteOffset)
7696 }
7697 return arrayIndexOf(this, [ val ], byteOffset)
7698 }
7699
7700 function arrayIndexOf (arr, val, byteOffset) {
7701 var foundIndex = -1
7702 for (var i = 0; byteOffset + i < arr.length; i++) {
7703 if (arr[byteOffset + i] === val[foundIndex === -1 ? 0 : i - foundIndex]) {
7704 if (foundIndex === -1) foundIndex = i
7705 if (i - foundIndex + 1 === val.length) return byteOffset + foundIndex
7706 } else {
7707 foundIndex = -1
7708 }
7709 }
7710 return -1
7711 }
7712
7713 throw new TypeError('val must be string, number or Buffer')
7714}
7715
7716// `get` is deprecated
7717Buffer.prototype.get = function get (offset) {
7718 console.log('.get() is deprecated. Access using array indexes instead.')
7719 return this.readUInt8(offset)
7720}
7721
7722// `set` is deprecated
7723Buffer.prototype.set = function set (v, offset) {
7724 console.log('.set() is deprecated. Access using array indexes instead.')
7725 return this.writeUInt8(v, offset)
7726}
7727
7728function hexWrite (buf, string, offset, length) {
7729 offset = Number(offset) || 0
7730 var remaining = buf.length - offset
7731 if (!length) {
7732 length = remaining
7733 } else {
7734 length = Number(length)
7735 if (length > remaining) {
7736 length = remaining
7737 }
7738 }
7739
7740 // must be an even number of digits
7741 var strLen = string.length
7742 if (strLen % 2 !== 0) throw new Error('Invalid hex string')
7743
7744 if (length > strLen / 2) {
7745 length = strLen / 2
7746 }
7747 for (var i = 0; i < length; i++) {
7748 var parsed = parseInt(string.substr(i * 2, 2), 16)
7749 if (isNaN(parsed)) throw new Error('Invalid hex string')
7750 buf[offset + i] = parsed
7751 }
7752 return i
7753}
7754
7755function utf8Write (buf, string, offset, length) {
7756 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
7757}
7758
7759function asciiWrite (buf, string, offset, length) {
7760 return blitBuffer(asciiToBytes(string), buf, offset, length)
7761}
7762
7763function binaryWrite (buf, string, offset, length) {
7764 return asciiWrite(buf, string, offset, length)
7765}
7766
7767function base64Write (buf, string, offset, length) {
7768 return blitBuffer(base64ToBytes(string), buf, offset, length)
7769}
7770
7771function ucs2Write (buf, string, offset, length) {
7772 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
7773}
7774
7775Buffer.prototype.write = function write (string, offset, length, encoding) {
7776 // Buffer#write(string)
7777 if (offset === undefined) {
7778 encoding = 'utf8'
7779 length = this.length
7780 offset = 0
7781 // Buffer#write(string, encoding)
7782 } else if (length === undefined && typeof offset === 'string') {
7783 encoding = offset
7784 length = this.length
7785 offset = 0
7786 // Buffer#write(string, offset[, length][, encoding])
7787 } else if (isFinite(offset)) {
7788 offset = offset | 0
7789 if (isFinite(length)) {
7790 length = length | 0
7791 if (encoding === undefined) encoding = 'utf8'
7792 } else {
7793 encoding = length
7794 length = undefined
7795 }
7796 // legacy write(string, encoding, offset, length) - remove in v0.13
7797 } else {
7798 var swap = encoding
7799 encoding = offset
7800 offset = length | 0
7801 length = swap
7802 }
7803
7804 var remaining = this.length - offset
7805 if (length === undefined || length > remaining) length = remaining
7806
7807 if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
7808 throw new RangeError('attempt to write outside buffer bounds')
7809 }
7810
7811 if (!encoding) encoding = 'utf8'
7812
7813 var loweredCase = false
7814 for (;;) {
7815 switch (encoding) {
7816 case 'hex':
7817 return hexWrite(this, string, offset, length)
7818
7819 case 'utf8':
7820 case 'utf-8':
7821 return utf8Write(this, string, offset, length)
7822
7823 case 'ascii':
7824 return asciiWrite(this, string, offset, length)
7825
7826 case 'binary':
7827 return binaryWrite(this, string, offset, length)
7828
7829 case 'base64':
7830 // Warning: maxLength not taken into account in base64Write
7831 return base64Write(this, string, offset, length)
7832
7833 case 'ucs2':
7834 case 'ucs-2':
7835 case 'utf16le':
7836 case 'utf-16le':
7837 return ucs2Write(this, string, offset, length)
7838
7839 default:
7840 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
7841 encoding = ('' + encoding).toLowerCase()
7842 loweredCase = true
7843 }
7844 }
7845}
7846
7847Buffer.prototype.toJSON = function toJSON () {
7848 return {
7849 type: 'Buffer',
7850 data: Array.prototype.slice.call(this._arr || this, 0)
7851 }
7852}
7853
7854function base64Slice (buf, start, end) {
7855 if (start === 0 && end === buf.length) {
7856 return base64.fromByteArray(buf)
7857 } else {
7858 return base64.fromByteArray(buf.slice(start, end))
7859 }
7860}
7861
7862function utf8Slice (buf, start, end) {
7863 end = Math.min(buf.length, end)
7864 var firstByte
7865 var secondByte
7866 var thirdByte
7867 var fourthByte
7868 var bytesPerSequence
7869 var tempCodePoint
7870 var codePoint
7871 var res = []
7872 var i = start
7873
7874 for (; i < end; i += bytesPerSequence) {
7875 firstByte = buf[i]
7876 codePoint = 0xFFFD
7877
7878 if (firstByte > 0xEF) {
7879 bytesPerSequence = 4
7880 } else if (firstByte > 0xDF) {
7881 bytesPerSequence = 3
7882 } else if (firstByte > 0xBF) {
7883 bytesPerSequence = 2
7884 } else {
7885 bytesPerSequence = 1
7886 }
7887
7888 if (i + bytesPerSequence <= end) {
7889 switch (bytesPerSequence) {
7890 case 1:
7891 if (firstByte < 0x80) {
7892 codePoint = firstByte
7893 }
7894 break
7895 case 2:
7896 secondByte = buf[i + 1]
7897 if ((secondByte & 0xC0) === 0x80) {
7898 tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
7899 if (tempCodePoint > 0x7F) {
7900 codePoint = tempCodePoint
7901 }
7902 }
7903 break
7904 case 3:
7905 secondByte = buf[i + 1]
7906 thirdByte = buf[i + 2]
7907 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
7908 tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
7909 if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
7910 codePoint = tempCodePoint
7911 }
7912 }
7913 break
7914 case 4:
7915 secondByte = buf[i + 1]
7916 thirdByte = buf[i + 2]
7917 fourthByte = buf[i + 3]
7918 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
7919 tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
7920 if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
7921 codePoint = tempCodePoint
7922 }
7923 }
7924 }
7925 }
7926
7927 if (codePoint === 0xFFFD) {
7928 // we generated an invalid codePoint so make sure to only advance by 1 byte
7929 bytesPerSequence = 1
7930 } else if (codePoint > 0xFFFF) {
7931 // encode to utf16 (surrogate pair dance)
7932 codePoint -= 0x10000
7933 res.push(codePoint >>> 10 & 0x3FF | 0xD800)
7934 codePoint = 0xDC00 | codePoint & 0x3FF
7935 }
7936
7937 res.push(codePoint)
7938 }
7939
7940 return String.fromCharCode.apply(String, res)
7941}
7942
7943function asciiSlice (buf, start, end) {
7944 var ret = ''
7945 end = Math.min(buf.length, end)
7946
7947 for (var i = start; i < end; i++) {
7948 ret += String.fromCharCode(buf[i] & 0x7F)
7949 }
7950 return ret
7951}
7952
7953function binarySlice (buf, start, end) {
7954 var ret = ''
7955 end = Math.min(buf.length, end)
7956
7957 for (var i = start; i < end; i++) {
7958 ret += String.fromCharCode(buf[i])
7959 }
7960 return ret
7961}
7962
7963function hexSlice (buf, start, end) {
7964 var len = buf.length
7965
7966 if (!start || start < 0) start = 0
7967 if (!end || end < 0 || end > len) end = len
7968
7969 var out = ''
7970 for (var i = start; i < end; i++) {
7971 out += toHex(buf[i])
7972 }
7973 return out
7974}
7975
7976function utf16leSlice (buf, start, end) {
7977 var bytes = buf.slice(start, end)
7978 var res = ''
7979 for (var i = 0; i < bytes.length; i += 2) {
7980 res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)
7981 }
7982 return res
7983}
7984
7985Buffer.prototype.slice = function slice (start, end) {
7986 var len = this.length
7987 start = ~~start
7988 end = end === undefined ? len : ~~end
7989
7990 if (start < 0) {
7991 start += len
7992 if (start < 0) start = 0
7993 } else if (start > len) {
7994 start = len
7995 }
7996
7997 if (end < 0) {
7998 end += len
7999 if (end < 0) end = 0
8000 } else if (end > len) {
8001 end = len
8002 }
8003
8004 if (end < start) end = start
8005
8006 var newBuf
8007 if (Buffer.TYPED_ARRAY_SUPPORT) {
8008 newBuf = Buffer._augment(this.subarray(start, end))
8009 } else {
8010 var sliceLen = end - start
8011 newBuf = new Buffer(sliceLen, undefined)
8012 for (var i = 0; i < sliceLen; i++) {
8013 newBuf[i] = this[i + start]
8014 }
8015 }
8016
8017 if (newBuf.length) newBuf.parent = this.parent || this
8018
8019 return newBuf
8020}
8021
8022/*
8023 * Need to make sure that buffer isn't trying to write out of bounds.
8024 */
8025function checkOffset (offset, ext, length) {
8026 if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
8027 if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
8028}
8029
8030Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
8031 offset = offset | 0
8032 byteLength = byteLength | 0
8033 if (!noAssert) checkOffset(offset, byteLength, this.length)
8034
8035 var val = this[offset]
8036 var mul = 1
8037 var i = 0
8038 while (++i < byteLength && (mul *= 0x100)) {
8039 val += this[offset + i] * mul
8040 }
8041
8042 return val
8043}
8044
8045Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
8046 offset = offset | 0
8047 byteLength = byteLength | 0
8048 if (!noAssert) {
8049 checkOffset(offset, byteLength, this.length)
8050 }
8051
8052 var val = this[offset + --byteLength]
8053 var mul = 1
8054 while (byteLength > 0 && (mul *= 0x100)) {
8055 val += this[offset + --byteLength] * mul
8056 }
8057
8058 return val
8059}
8060
8061Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
8062 if (!noAssert) checkOffset(offset, 1, this.length)
8063 return this[offset]
8064}
8065
8066Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
8067 if (!noAssert) checkOffset(offset, 2, this.length)
8068 return this[offset] | (this[offset + 1] << 8)
8069}
8070
8071Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
8072 if (!noAssert) checkOffset(offset, 2, this.length)
8073 return (this[offset] << 8) | this[offset + 1]
8074}
8075
8076Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
8077 if (!noAssert) checkOffset(offset, 4, this.length)
8078
8079 return ((this[offset]) |
8080 (this[offset + 1] << 8) |
8081 (this[offset + 2] << 16)) +
8082 (this[offset + 3] * 0x1000000)
8083}
8084
8085Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
8086 if (!noAssert) checkOffset(offset, 4, this.length)
8087
8088 return (this[offset] * 0x1000000) +
8089 ((this[offset + 1] << 16) |
8090 (this[offset + 2] << 8) |
8091 this[offset + 3])
8092}
8093
8094Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
8095 offset = offset | 0
8096 byteLength = byteLength | 0
8097 if (!noAssert) checkOffset(offset, byteLength, this.length)
8098
8099 var val = this[offset]
8100 var mul = 1
8101 var i = 0
8102 while (++i < byteLength && (mul *= 0x100)) {
8103 val += this[offset + i] * mul
8104 }
8105 mul *= 0x80
8106
8107 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
8108
8109 return val
8110}
8111
8112Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
8113 offset = offset | 0
8114 byteLength = byteLength | 0
8115 if (!noAssert) checkOffset(offset, byteLength, this.length)
8116
8117 var i = byteLength
8118 var mul = 1
8119 var val = this[offset + --i]
8120 while (i > 0 && (mul *= 0x100)) {
8121 val += this[offset + --i] * mul
8122 }
8123 mul *= 0x80
8124
8125 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
8126
8127 return val
8128}
8129
8130Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
8131 if (!noAssert) checkOffset(offset, 1, this.length)
8132 if (!(this[offset] & 0x80)) return (this[offset])
8133 return ((0xff - this[offset] + 1) * -1)
8134}
8135
8136Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
8137 if (!noAssert) checkOffset(offset, 2, this.length)
8138 var val = this[offset] | (this[offset + 1] << 8)
8139 return (val & 0x8000) ? val | 0xFFFF0000 : val
8140}
8141
8142Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
8143 if (!noAssert) checkOffset(offset, 2, this.length)
8144 var val = this[offset + 1] | (this[offset] << 8)
8145 return (val & 0x8000) ? val | 0xFFFF0000 : val
8146}
8147
8148Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
8149 if (!noAssert) checkOffset(offset, 4, this.length)
8150
8151 return (this[offset]) |
8152 (this[offset + 1] << 8) |
8153 (this[offset + 2] << 16) |
8154 (this[offset + 3] << 24)
8155}
8156
8157Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
8158 if (!noAssert) checkOffset(offset, 4, this.length)
8159
8160 return (this[offset] << 24) |
8161 (this[offset + 1] << 16) |
8162 (this[offset + 2] << 8) |
8163 (this[offset + 3])
8164}
8165
8166Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
8167 if (!noAssert) checkOffset(offset, 4, this.length)
8168 return ieee754.read(this, offset, true, 23, 4)
8169}
8170
8171Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
8172 if (!noAssert) checkOffset(offset, 4, this.length)
8173 return ieee754.read(this, offset, false, 23, 4)
8174}
8175
8176Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
8177 if (!noAssert) checkOffset(offset, 8, this.length)
8178 return ieee754.read(this, offset, true, 52, 8)
8179}
8180
8181Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
8182 if (!noAssert) checkOffset(offset, 8, this.length)
8183 return ieee754.read(this, offset, false, 52, 8)
8184}
8185
8186function checkInt (buf, value, offset, ext, max, min) {
8187 if (!Buffer.isBuffer(buf)) throw new TypeError('buffer must be a Buffer instance')
8188 if (value > max || value < min) throw new RangeError('value is out of bounds')
8189 if (offset + ext > buf.length) throw new RangeError('index out of range')
8190}
8191
8192Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
8193 value = +value
8194 offset = offset | 0
8195 byteLength = byteLength | 0
8196 if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0)
8197
8198 var mul = 1
8199 var i = 0
8200 this[offset] = value & 0xFF
8201 while (++i < byteLength && (mul *= 0x100)) {
8202 this[offset + i] = (value / mul) & 0xFF
8203 }
8204
8205 return offset + byteLength
8206}
8207
8208Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
8209 value = +value
8210 offset = offset | 0
8211 byteLength = byteLength | 0
8212 if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0)
8213
8214 var i = byteLength - 1
8215 var mul = 1
8216 this[offset + i] = value & 0xFF
8217 while (--i >= 0 && (mul *= 0x100)) {
8218 this[offset + i] = (value / mul) & 0xFF
8219 }
8220
8221 return offset + byteLength
8222}
8223
8224Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
8225 value = +value
8226 offset = offset | 0
8227 if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
8228 if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
8229 this[offset] = value
8230 return offset + 1
8231}
8232
8233function objectWriteUInt16 (buf, value, offset, littleEndian) {
8234 if (value < 0) value = 0xffff + value + 1
8235 for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; i++) {
8236 buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>
8237 (littleEndian ? i : 1 - i) * 8
8238 }
8239}
8240
8241Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
8242 value = +value
8243 offset = offset | 0
8244 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
8245 if (Buffer.TYPED_ARRAY_SUPPORT) {
8246 this[offset] = value
8247 this[offset + 1] = (value >>> 8)
8248 } else {
8249 objectWriteUInt16(this, value, offset, true)
8250 }
8251 return offset + 2
8252}
8253
8254Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
8255 value = +value
8256 offset = offset | 0
8257 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
8258 if (Buffer.TYPED_ARRAY_SUPPORT) {
8259 this[offset] = (value >>> 8)
8260 this[offset + 1] = value
8261 } else {
8262 objectWriteUInt16(this, value, offset, false)
8263 }
8264 return offset + 2
8265}
8266
8267function objectWriteUInt32 (buf, value, offset, littleEndian) {
8268 if (value < 0) value = 0xffffffff + value + 1
8269 for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; i++) {
8270 buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff
8271 }
8272}
8273
8274Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
8275 value = +value
8276 offset = offset | 0
8277 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
8278 if (Buffer.TYPED_ARRAY_SUPPORT) {
8279 this[offset + 3] = (value >>> 24)
8280 this[offset + 2] = (value >>> 16)
8281 this[offset + 1] = (value >>> 8)
8282 this[offset] = value
8283 } else {
8284 objectWriteUInt32(this, value, offset, true)
8285 }
8286 return offset + 4
8287}
8288
8289Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
8290 value = +value
8291 offset = offset | 0
8292 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
8293 if (Buffer.TYPED_ARRAY_SUPPORT) {
8294 this[offset] = (value >>> 24)
8295 this[offset + 1] = (value >>> 16)
8296 this[offset + 2] = (value >>> 8)
8297 this[offset + 3] = value
8298 } else {
8299 objectWriteUInt32(this, value, offset, false)
8300 }
8301 return offset + 4
8302}
8303
8304Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
8305 value = +value
8306 offset = offset | 0
8307 if (!noAssert) {
8308 var limit = Math.pow(2, 8 * byteLength - 1)
8309
8310 checkInt(this, value, offset, byteLength, limit - 1, -limit)
8311 }
8312
8313 var i = 0
8314 var mul = 1
8315 var sub = value < 0 ? 1 : 0
8316 this[offset] = value & 0xFF
8317 while (++i < byteLength && (mul *= 0x100)) {
8318 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
8319 }
8320
8321 return offset + byteLength
8322}
8323
8324Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
8325 value = +value
8326 offset = offset | 0
8327 if (!noAssert) {
8328 var limit = Math.pow(2, 8 * byteLength - 1)
8329
8330 checkInt(this, value, offset, byteLength, limit - 1, -limit)
8331 }
8332
8333 var i = byteLength - 1
8334 var mul = 1
8335 var sub = value < 0 ? 1 : 0
8336 this[offset + i] = value & 0xFF
8337 while (--i >= 0 && (mul *= 0x100)) {
8338 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
8339 }
8340
8341 return offset + byteLength
8342}
8343
8344Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
8345 value = +value
8346 offset = offset | 0
8347 if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
8348 if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
8349 if (value < 0) value = 0xff + value + 1
8350 this[offset] = value
8351 return offset + 1
8352}
8353
8354Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
8355 value = +value
8356 offset = offset | 0
8357 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
8358 if (Buffer.TYPED_ARRAY_SUPPORT) {
8359 this[offset] = value
8360 this[offset + 1] = (value >>> 8)
8361 } else {
8362 objectWriteUInt16(this, value, offset, true)
8363 }
8364 return offset + 2
8365}
8366
8367Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
8368 value = +value
8369 offset = offset | 0
8370 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
8371 if (Buffer.TYPED_ARRAY_SUPPORT) {
8372 this[offset] = (value >>> 8)
8373 this[offset + 1] = value
8374 } else {
8375 objectWriteUInt16(this, value, offset, false)
8376 }
8377 return offset + 2
8378}
8379
8380Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
8381 value = +value
8382 offset = offset | 0
8383 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
8384 if (Buffer.TYPED_ARRAY_SUPPORT) {
8385 this[offset] = value
8386 this[offset + 1] = (value >>> 8)
8387 this[offset + 2] = (value >>> 16)
8388 this[offset + 3] = (value >>> 24)
8389 } else {
8390 objectWriteUInt32(this, value, offset, true)
8391 }
8392 return offset + 4
8393}
8394
8395Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
8396 value = +value
8397 offset = offset | 0
8398 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
8399 if (value < 0) value = 0xffffffff + value + 1
8400 if (Buffer.TYPED_ARRAY_SUPPORT) {
8401 this[offset] = (value >>> 24)
8402 this[offset + 1] = (value >>> 16)
8403 this[offset + 2] = (value >>> 8)
8404 this[offset + 3] = value
8405 } else {
8406 objectWriteUInt32(this, value, offset, false)
8407 }
8408 return offset + 4
8409}
8410
8411function checkIEEE754 (buf, value, offset, ext, max, min) {
8412 if (value > max || value < min) throw new RangeError('value is out of bounds')
8413 if (offset + ext > buf.length) throw new RangeError('index out of range')
8414 if (offset < 0) throw new RangeError('index out of range')
8415}
8416
8417function writeFloat (buf, value, offset, littleEndian, noAssert) {
8418 if (!noAssert) {
8419 checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
8420 }
8421 ieee754.write(buf, value, offset, littleEndian, 23, 4)
8422 return offset + 4
8423}
8424
8425Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
8426 return writeFloat(this, value, offset, true, noAssert)
8427}
8428
8429Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
8430 return writeFloat(this, value, offset, false, noAssert)
8431}
8432
8433function writeDouble (buf, value, offset, littleEndian, noAssert) {
8434 if (!noAssert) {
8435 checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
8436 }
8437 ieee754.write(buf, value, offset, littleEndian, 52, 8)
8438 return offset + 8
8439}
8440
8441Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
8442 return writeDouble(this, value, offset, true, noAssert)
8443}
8444
8445Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
8446 return writeDouble(this, value, offset, false, noAssert)
8447}
8448
8449// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
8450Buffer.prototype.copy = function copy (target, targetStart, start, end) {
8451 if (!start) start = 0
8452 if (!end && end !== 0) end = this.length
8453 if (targetStart >= target.length) targetStart = target.length
8454 if (!targetStart) targetStart = 0
8455 if (end > 0 && end < start) end = start
8456
8457 // Copy 0 bytes; we're done
8458 if (end === start) return 0
8459 if (target.length === 0 || this.length === 0) return 0
8460
8461 // Fatal error conditions
8462 if (targetStart < 0) {
8463 throw new RangeError('targetStart out of bounds')
8464 }
8465 if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
8466 if (end < 0) throw new RangeError('sourceEnd out of bounds')
8467
8468 // Are we oob?
8469 if (end > this.length) end = this.length
8470 if (target.length - targetStart < end - start) {
8471 end = target.length - targetStart + start
8472 }
8473
8474 var len = end - start
8475 var i
8476
8477 if (this === target && start < targetStart && targetStart < end) {
8478 // descending copy from end
8479 for (i = len - 1; i >= 0; i--) {
8480 target[i + targetStart] = this[i + start]
8481 }
8482 } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {
8483 // ascending copy from start
8484 for (i = 0; i < len; i++) {
8485 target[i + targetStart] = this[i + start]
8486 }
8487 } else {
8488 target._set(this.subarray(start, start + len), targetStart)
8489 }
8490
8491 return len
8492}
8493
8494// fill(value, start=0, end=buffer.length)
8495Buffer.prototype.fill = function fill (value, start, end) {
8496 if (!value) value = 0
8497 if (!start) start = 0
8498 if (!end) end = this.length
8499
8500 if (end < start) throw new RangeError('end < start')
8501
8502 // Fill 0 bytes; we're done
8503 if (end === start) return
8504 if (this.length === 0) return
8505
8506 if (start < 0 || start >= this.length) throw new RangeError('start out of bounds')
8507 if (end < 0 || end > this.length) throw new RangeError('end out of bounds')
8508
8509 var i
8510 if (typeof value === 'number') {
8511 for (i = start; i < end; i++) {
8512 this[i] = value
8513 }
8514 } else {
8515 var bytes = utf8ToBytes(value.toString())
8516 var len = bytes.length
8517 for (i = start; i < end; i++) {
8518 this[i] = bytes[i % len]
8519 }
8520 }
8521
8522 return this
8523}
8524
8525/**
8526 * Creates a new `ArrayBuffer` with the *copied* memory of the buffer instance.
8527 * Added in Node 0.12. Only available in browsers that support ArrayBuffer.
8528 */
8529Buffer.prototype.toArrayBuffer = function toArrayBuffer () {
8530 if (typeof Uint8Array !== 'undefined') {
8531 if (Buffer.TYPED_ARRAY_SUPPORT) {
8532 return (new Buffer(this)).buffer
8533 } else {
8534 var buf = new Uint8Array(this.length)
8535 for (var i = 0, len = buf.length; i < len; i += 1) {
8536 buf[i] = this[i]
8537 }
8538 return buf.buffer
8539 }
8540 } else {
8541 throw new TypeError('Buffer.toArrayBuffer not supported in this browser')
8542 }
8543}
8544
8545// HELPER FUNCTIONS
8546// ================
8547
8548var BP = Buffer.prototype
8549
8550/**
8551 * Augment a Uint8Array *instance* (not the Uint8Array class!) with Buffer methods
8552 */
8553Buffer._augment = function _augment (arr) {
8554 arr.constructor = Buffer
8555 arr._isBuffer = true
8556
8557 // save reference to original Uint8Array set method before overwriting
8558 arr._set = arr.set
8559
8560 // deprecated
8561 arr.get = BP.get
8562 arr.set = BP.set
8563
8564 arr.write = BP.write
8565 arr.toString = BP.toString
8566 arr.toLocaleString = BP.toString
8567 arr.toJSON = BP.toJSON
8568 arr.equals = BP.equals
8569 arr.compare = BP.compare
8570 arr.indexOf = BP.indexOf
8571 arr.copy = BP.copy
8572 arr.slice = BP.slice
8573 arr.readUIntLE = BP.readUIntLE
8574 arr.readUIntBE = BP.readUIntBE
8575 arr.readUInt8 = BP.readUInt8
8576 arr.readUInt16LE = BP.readUInt16LE
8577 arr.readUInt16BE = BP.readUInt16BE
8578 arr.readUInt32LE = BP.readUInt32LE
8579 arr.readUInt32BE = BP.readUInt32BE
8580 arr.readIntLE = BP.readIntLE
8581 arr.readIntBE = BP.readIntBE
8582 arr.readInt8 = BP.readInt8
8583 arr.readInt16LE = BP.readInt16LE
8584 arr.readInt16BE = BP.readInt16BE
8585 arr.readInt32LE = BP.readInt32LE
8586 arr.readInt32BE = BP.readInt32BE
8587 arr.readFloatLE = BP.readFloatLE
8588 arr.readFloatBE = BP.readFloatBE
8589 arr.readDoubleLE = BP.readDoubleLE
8590 arr.readDoubleBE = BP.readDoubleBE
8591 arr.writeUInt8 = BP.writeUInt8
8592 arr.writeUIntLE = BP.writeUIntLE
8593 arr.writeUIntBE = BP.writeUIntBE
8594 arr.writeUInt16LE = BP.writeUInt16LE
8595 arr.writeUInt16BE = BP.writeUInt16BE
8596 arr.writeUInt32LE = BP.writeUInt32LE
8597 arr.writeUInt32BE = BP.writeUInt32BE
8598 arr.writeIntLE = BP.writeIntLE
8599 arr.writeIntBE = BP.writeIntBE
8600 arr.writeInt8 = BP.writeInt8
8601 arr.writeInt16LE = BP.writeInt16LE
8602 arr.writeInt16BE = BP.writeInt16BE
8603 arr.writeInt32LE = BP.writeInt32LE
8604 arr.writeInt32BE = BP.writeInt32BE
8605 arr.writeFloatLE = BP.writeFloatLE
8606 arr.writeFloatBE = BP.writeFloatBE
8607 arr.writeDoubleLE = BP.writeDoubleLE
8608 arr.writeDoubleBE = BP.writeDoubleBE
8609 arr.fill = BP.fill
8610 arr.inspect = BP.inspect
8611 arr.toArrayBuffer = BP.toArrayBuffer
8612
8613 return arr
8614}
8615
8616var INVALID_BASE64_RE = /[^+\/0-9A-Za-z-_]/g
8617
8618function base64clean (str) {
8619 // Node strips out invalid characters like \n and \t from the string, base64-js does not
8620 str = stringtrim(str).replace(INVALID_BASE64_RE, '')
8621 // Node converts strings with length < 2 to ''
8622 if (str.length < 2) return ''
8623 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
8624 while (str.length % 4 !== 0) {
8625 str = str + '='
8626 }
8627 return str
8628}
8629
8630function stringtrim (str) {
8631 if (str.trim) return str.trim()
8632 return str.replace(/^\s+|\s+$/g, '')
8633}
8634
8635function toHex (n) {
8636 if (n < 16) return '0' + n.toString(16)
8637 return n.toString(16)
8638}
8639
8640function utf8ToBytes (string, units) {
8641 units = units || Infinity
8642 var codePoint
8643 var length = string.length
8644 var leadSurrogate = null
8645 var bytes = []
8646
8647 for (var i = 0; i < length; i++) {
8648 codePoint = string.charCodeAt(i)
8649
8650 // is surrogate component
8651 if (codePoint > 0xD7FF && codePoint < 0xE000) {
8652 // last char was a lead
8653 if (!leadSurrogate) {
8654 // no lead yet
8655 if (codePoint > 0xDBFF) {
8656 // unexpected trail
8657 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
8658 continue
8659
8660 } else if (i + 1 === length) {
8661 // unpaired lead
8662 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
8663 continue
8664 }
8665
8666 // valid lead
8667 leadSurrogate = codePoint
8668
8669 continue
8670 }
8671
8672 // 2 leads in a row
8673 if (codePoint < 0xDC00) {
8674 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
8675 leadSurrogate = codePoint
8676 continue
8677 }
8678
8679 // valid surrogate pair
8680 codePoint = leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00 | 0x10000
8681
8682 } else if (leadSurrogate) {
8683 // valid bmp char, but last char was a lead
8684 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
8685 }
8686
8687 leadSurrogate = null
8688
8689 // encode utf8
8690 if (codePoint < 0x80) {
8691 if ((units -= 1) < 0) break
8692 bytes.push(codePoint)
8693 } else if (codePoint < 0x800) {
8694 if ((units -= 2) < 0) break
8695 bytes.push(
8696 codePoint >> 0x6 | 0xC0,
8697 codePoint & 0x3F | 0x80
8698 )
8699 } else if (codePoint < 0x10000) {
8700 if ((units -= 3) < 0) break
8701 bytes.push(
8702 codePoint >> 0xC | 0xE0,
8703 codePoint >> 0x6 & 0x3F | 0x80,
8704 codePoint & 0x3F | 0x80
8705 )
8706 } else if (codePoint < 0x110000) {
8707 if ((units -= 4) < 0) break
8708 bytes.push(
8709 codePoint >> 0x12 | 0xF0,
8710 codePoint >> 0xC & 0x3F | 0x80,
8711 codePoint >> 0x6 & 0x3F | 0x80,
8712 codePoint & 0x3F | 0x80
8713 )
8714 } else {
8715 throw new Error('Invalid code point')
8716 }
8717 }
8718
8719 return bytes
8720}
8721
8722function asciiToBytes (str) {
8723 var byteArray = []
8724 for (var i = 0; i < str.length; i++) {
8725 // Node's code seems to be doing this and not & 0x7F..
8726 byteArray.push(str.charCodeAt(i) & 0xFF)
8727 }
8728 return byteArray
8729}
8730
8731function utf16leToBytes (str, units) {
8732 var c, hi, lo
8733 var byteArray = []
8734 for (var i = 0; i < str.length; i++) {
8735 if ((units -= 2) < 0) break
8736
8737 c = str.charCodeAt(i)
8738 hi = c >> 8
8739 lo = c % 256
8740 byteArray.push(lo)
8741 byteArray.push(hi)
8742 }
8743
8744 return byteArray
8745}
8746
8747function base64ToBytes (str) {
8748 return base64.toByteArray(base64clean(str))
8749}
8750
8751function blitBuffer (src, dst, offset, length) {
8752 for (var i = 0; i < length; i++) {
8753 if ((i + offset >= dst.length) || (i >= src.length)) break
8754 dst[i + offset] = src[i]
8755 }
8756 return i
8757}
8758
8759},{"base64-js":8,"ieee754":9,"is-array":10}],8:[function(require,module,exports){
8760var lookup = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
8761
8762;(function (exports) {
8763 'use strict';
8764
8765 var Arr = (typeof Uint8Array !== 'undefined')
8766 ? Uint8Array
8767 : Array
8768
8769 var PLUS = '+'.charCodeAt(0)
8770 var SLASH = '/'.charCodeAt(0)
8771 var NUMBER = '0'.charCodeAt(0)
8772 var LOWER = 'a'.charCodeAt(0)
8773 var UPPER = 'A'.charCodeAt(0)
8774 var PLUS_URL_SAFE = '-'.charCodeAt(0)
8775 var SLASH_URL_SAFE = '_'.charCodeAt(0)
8776
8777 function decode (elt) {
8778 var code = elt.charCodeAt(0)
8779 if (code === PLUS ||
8780 code === PLUS_URL_SAFE)
8781 return 62 // '+'
8782 if (code === SLASH ||
8783 code === SLASH_URL_SAFE)
8784 return 63 // '/'
8785 if (code < NUMBER)
8786 return -1 //no match
8787 if (code < NUMBER + 10)
8788 return code - NUMBER + 26 + 26
8789 if (code < UPPER + 26)
8790 return code - UPPER
8791 if (code < LOWER + 26)
8792 return code - LOWER + 26
8793 }
8794
8795 function b64ToByteArray (b64) {
8796 var i, j, l, tmp, placeHolders, arr
8797
8798 if (b64.length % 4 > 0) {
8799 throw new Error('Invalid string. Length must be a multiple of 4')
8800 }
8801
8802 // the number of equal signs (place holders)
8803 // if there are two placeholders, than the two characters before it
8804 // represent one byte
8805 // if there is only one, then the three characters before it represent 2 bytes
8806 // this is just a cheap hack to not do indexOf twice
8807 var len = b64.length
8808 placeHolders = '=' === b64.charAt(len - 2) ? 2 : '=' === b64.charAt(len - 1) ? 1 : 0
8809
8810 // base64 is 4/3 + up to two characters of the original data
8811 arr = new Arr(b64.length * 3 / 4 - placeHolders)
8812
8813 // if there are placeholders, only get up to the last complete 4 chars
8814 l = placeHolders > 0 ? b64.length - 4 : b64.length
8815
8816 var L = 0
8817
8818 function push (v) {
8819 arr[L++] = v
8820 }
8821
8822 for (i = 0, j = 0; i < l; i += 4, j += 3) {
8823 tmp = (decode(b64.charAt(i)) << 18) | (decode(b64.charAt(i + 1)) << 12) | (decode(b64.charAt(i + 2)) << 6) | decode(b64.charAt(i + 3))
8824 push((tmp & 0xFF0000) >> 16)
8825 push((tmp & 0xFF00) >> 8)
8826 push(tmp & 0xFF)
8827 }
8828
8829 if (placeHolders === 2) {
8830 tmp = (decode(b64.charAt(i)) << 2) | (decode(b64.charAt(i + 1)) >> 4)
8831 push(tmp & 0xFF)
8832 } else if (placeHolders === 1) {
8833 tmp = (decode(b64.charAt(i)) << 10) | (decode(b64.charAt(i + 1)) << 4) | (decode(b64.charAt(i + 2)) >> 2)
8834 push((tmp >> 8) & 0xFF)
8835 push(tmp & 0xFF)
8836 }
8837
8838 return arr
8839 }
8840
8841 function uint8ToBase64 (uint8) {
8842 var i,
8843 extraBytes = uint8.length % 3, // if we have 1 byte left, pad 2 bytes
8844 output = "",
8845 temp, length
8846
8847 function encode (num) {
8848 return lookup.charAt(num)
8849 }
8850
8851 function tripletToBase64 (num) {
8852 return encode(num >> 18 & 0x3F) + encode(num >> 12 & 0x3F) + encode(num >> 6 & 0x3F) + encode(num & 0x3F)
8853 }
8854
8855 // go through the array every three bytes, we'll deal with trailing stuff later
8856 for (i = 0, length = uint8.length - extraBytes; i < length; i += 3) {
8857 temp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
8858 output += tripletToBase64(temp)
8859 }
8860
8861 // pad the end with zeros, but make sure to not forget the extra bytes
8862 switch (extraBytes) {
8863 case 1:
8864 temp = uint8[uint8.length - 1]
8865 output += encode(temp >> 2)
8866 output += encode((temp << 4) & 0x3F)
8867 output += '=='
8868 break
8869 case 2:
8870 temp = (uint8[uint8.length - 2] << 8) + (uint8[uint8.length - 1])
8871 output += encode(temp >> 10)
8872 output += encode((temp >> 4) & 0x3F)
8873 output += encode((temp << 2) & 0x3F)
8874 output += '='
8875 break
8876 }
8877
8878 return output
8879 }
8880
8881 exports.toByteArray = b64ToByteArray
8882 exports.fromByteArray = uint8ToBase64
8883}(typeof exports === 'undefined' ? (this.base64js = {}) : exports))
8884
8885},{}],9:[function(require,module,exports){
8886exports.read = function (buffer, offset, isLE, mLen, nBytes) {
8887 var e, m
8888 var eLen = nBytes * 8 - mLen - 1
8889 var eMax = (1 << eLen) - 1
8890 var eBias = eMax >> 1
8891 var nBits = -7
8892 var i = isLE ? (nBytes - 1) : 0
8893 var d = isLE ? -1 : 1
8894 var s = buffer[offset + i]
8895
8896 i += d
8897
8898 e = s & ((1 << (-nBits)) - 1)
8899 s >>= (-nBits)
8900 nBits += eLen
8901 for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
8902
8903 m = e & ((1 << (-nBits)) - 1)
8904 e >>= (-nBits)
8905 nBits += mLen
8906 for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
8907
8908 if (e === 0) {
8909 e = 1 - eBias
8910 } else if (e === eMax) {
8911 return m ? NaN : ((s ? -1 : 1) * Infinity)
8912 } else {
8913 m = m + Math.pow(2, mLen)
8914 e = e - eBias
8915 }
8916 return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
8917}
8918
8919exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
8920 var e, m, c
8921 var eLen = nBytes * 8 - mLen - 1
8922 var eMax = (1 << eLen) - 1
8923 var eBias = eMax >> 1
8924 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
8925 var i = isLE ? 0 : (nBytes - 1)
8926 var d = isLE ? 1 : -1
8927 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
8928
8929 value = Math.abs(value)
8930
8931 if (isNaN(value) || value === Infinity) {
8932 m = isNaN(value) ? 1 : 0
8933 e = eMax
8934 } else {
8935 e = Math.floor(Math.log(value) / Math.LN2)
8936 if (value * (c = Math.pow(2, -e)) < 1) {
8937 e--
8938 c *= 2
8939 }
8940 if (e + eBias >= 1) {
8941 value += rt / c
8942 } else {
8943 value += rt * Math.pow(2, 1 - eBias)
8944 }
8945 if (value * c >= 2) {
8946 e++
8947 c /= 2
8948 }
8949
8950 if (e + eBias >= eMax) {
8951 m = 0
8952 e = eMax
8953 } else if (e + eBias >= 1) {
8954 m = (value * c - 1) * Math.pow(2, mLen)
8955 e = e + eBias
8956 } else {
8957 m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
8958 e = 0
8959 }
8960 }
8961
8962 for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
8963
8964 e = (e << mLen) | m
8965 eLen += mLen
8966 for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
8967
8968 buffer[offset + i - d] |= s * 128
8969}
8970
8971},{}],10:[function(require,module,exports){
8972
8973/**
8974 * isArray
8975 */
8976
8977var isArray = Array.isArray;
8978
8979/**
8980 * toString
8981 */
8982
8983var str = Object.prototype.toString;
8984
8985/**
8986 * Whether or not the given `val`
8987 * is an array.
8988 *
8989 * example:
8990 *
8991 * isArray([]);
8992 * // > true
8993 * isArray(arguments);
8994 * // > false
8995 * isArray('');
8996 * // > false
8997 *
8998 * @param {mixed} val
8999 * @return {bool}
9000 */
9001
9002module.exports = isArray || function (val) {
9003 return !! val && '[object Array]' == str.call(val);
9004};
9005
9006},{}],11:[function(require,module,exports){
9007// Copyright Joyent, Inc. and other Node contributors.
9008//
9009// Permission is hereby granted, free of charge, to any person obtaining a
9010// copy of this software and associated documentation files (the
9011// "Software"), to deal in the Software without restriction, including
9012// without limitation the rights to use, copy, modify, merge, publish,
9013// distribute, sublicense, and/or sell copies of the Software, and to permit
9014// persons to whom the Software is furnished to do so, subject to the
9015// following conditions:
9016//
9017// The above copyright notice and this permission notice shall be included
9018// in all copies or substantial portions of the Software.
9019//
9020// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
9021// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
9022// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
9023// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
9024// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
9025// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
9026// USE OR OTHER DEALINGS IN THE SOFTWARE.
9027
9028function EventEmitter() {
9029 this._events = this._events || {};
9030 this._maxListeners = this._maxListeners || undefined;
9031}
9032module.exports = EventEmitter;
9033
9034// Backwards-compat with node 0.10.x
9035EventEmitter.EventEmitter = EventEmitter;
9036
9037EventEmitter.prototype._events = undefined;
9038EventEmitter.prototype._maxListeners = undefined;
9039
9040// By default EventEmitters will print a warning if more than 10 listeners are
9041// added to it. This is a useful default which helps finding memory leaks.
9042EventEmitter.defaultMaxListeners = 10;
9043
9044// Obviously not all Emitters should be limited to 10. This function allows
9045// that to be increased. Set to zero for unlimited.
9046EventEmitter.prototype.setMaxListeners = function(n) {
9047 if (!isNumber(n) || n < 0 || isNaN(n))
9048 throw TypeError('n must be a positive number');
9049 this._maxListeners = n;
9050 return this;
9051};
9052
9053EventEmitter.prototype.emit = function(type) {
9054 var er, handler, len, args, i, listeners;
9055
9056 if (!this._events)
9057 this._events = {};
9058
9059 // If there is no 'error' event listener then throw.
9060 if (type === 'error') {
9061 if (!this._events.error ||
9062 (isObject(this._events.error) && !this._events.error.length)) {
9063 er = arguments[1];
9064 if (er instanceof Error) {
9065 throw er; // Unhandled 'error' event
9066 }
9067 throw TypeError('Uncaught, unspecified "error" event.');
9068 }
9069 }
9070
9071 handler = this._events[type];
9072
9073 if (isUndefined(handler))
9074 return false;
9075
9076 if (isFunction(handler)) {
9077 switch (arguments.length) {
9078 // fast cases
9079 case 1:
9080 handler.call(this);
9081 break;
9082 case 2:
9083 handler.call(this, arguments[1]);
9084 break;
9085 case 3:
9086 handler.call(this, arguments[1], arguments[2]);
9087 break;
9088 // slower
9089 default:
9090 len = arguments.length;
9091 args = new Array(len - 1);
9092 for (i = 1; i < len; i++)
9093 args[i - 1] = arguments[i];
9094 handler.apply(this, args);
9095 }
9096 } else if (isObject(handler)) {
9097 len = arguments.length;
9098 args = new Array(len - 1);
9099 for (i = 1; i < len; i++)
9100 args[i - 1] = arguments[i];
9101
9102 listeners = handler.slice();
9103 len = listeners.length;
9104 for (i = 0; i < len; i++)
9105 listeners[i].apply(this, args);
9106 }
9107
9108 return true;
9109};
9110
9111EventEmitter.prototype.addListener = function(type, listener) {
9112 var m;
9113
9114 if (!isFunction(listener))
9115 throw TypeError('listener must be a function');
9116
9117 if (!this._events)
9118 this._events = {};
9119
9120 // To avoid recursion in the case that type === "newListener"! Before
9121 // adding it to the listeners, first emit "newListener".
9122 if (this._events.newListener)
9123 this.emit('newListener', type,
9124 isFunction(listener.listener) ?
9125 listener.listener : listener);
9126
9127 if (!this._events[type])
9128 // Optimize the case of one listener. Don't need the extra array object.
9129 this._events[type] = listener;
9130 else if (isObject(this._events[type]))
9131 // If we've already got an array, just append.
9132 this._events[type].push(listener);
9133 else
9134 // Adding the second element, need to change to array.
9135 this._events[type] = [this._events[type], listener];
9136
9137 // Check for listener leak
9138 if (isObject(this._events[type]) && !this._events[type].warned) {
9139 var m;
9140 if (!isUndefined(this._maxListeners)) {
9141 m = this._maxListeners;
9142 } else {
9143 m = EventEmitter.defaultMaxListeners;
9144 }
9145
9146 if (m && m > 0 && this._events[type].length > m) {
9147 this._events[type].warned = true;
9148 console.error('(node) warning: possible EventEmitter memory ' +
9149 'leak detected. %d listeners added. ' +
9150 'Use emitter.setMaxListeners() to increase limit.',
9151 this._events[type].length);
9152 if (typeof console.trace === 'function') {
9153 // not supported in IE 10
9154 console.trace();
9155 }
9156 }
9157 }
9158
9159 return this;
9160};
9161
9162EventEmitter.prototype.on = EventEmitter.prototype.addListener;
9163
9164EventEmitter.prototype.once = function(type, listener) {
9165 if (!isFunction(listener))
9166 throw TypeError('listener must be a function');
9167
9168 var fired = false;
9169
9170 function g() {
9171 this.removeListener(type, g);
9172
9173 if (!fired) {
9174 fired = true;
9175 listener.apply(this, arguments);
9176 }
9177 }
9178
9179 g.listener = listener;
9180 this.on(type, g);
9181
9182 return this;
9183};
9184
9185// emits a 'removeListener' event iff the listener was removed
9186EventEmitter.prototype.removeListener = function(type, listener) {
9187 var list, position, length, i;
9188
9189 if (!isFunction(listener))
9190 throw TypeError('listener must be a function');
9191
9192 if (!this._events || !this._events[type])
9193 return this;
9194
9195 list = this._events[type];
9196 length = list.length;
9197 position = -1;
9198
9199 if (list === listener ||
9200 (isFunction(list.listener) && list.listener === listener)) {
9201 delete this._events[type];
9202 if (this._events.removeListener)
9203 this.emit('removeListener', type, listener);
9204
9205 } else if (isObject(list)) {
9206 for (i = length; i-- > 0;) {
9207 if (list[i] === listener ||
9208 (list[i].listener && list[i].listener === listener)) {
9209 position = i;
9210 break;
9211 }
9212 }
9213
9214 if (position < 0)
9215 return this;
9216
9217 if (list.length === 1) {
9218 list.length = 0;
9219 delete this._events[type];
9220 } else {
9221 list.splice(position, 1);
9222 }
9223
9224 if (this._events.removeListener)
9225 this.emit('removeListener', type, listener);
9226 }
9227
9228 return this;
9229};
9230
9231EventEmitter.prototype.removeAllListeners = function(type) {
9232 var key, listeners;
9233
9234 if (!this._events)
9235 return this;
9236
9237 // not listening for removeListener, no need to emit
9238 if (!this._events.removeListener) {
9239 if (arguments.length === 0)
9240 this._events = {};
9241 else if (this._events[type])
9242 delete this._events[type];
9243 return this;
9244 }
9245
9246 // emit removeListener for all listeners on all events
9247 if (arguments.length === 0) {
9248 for (key in this._events) {
9249 if (key === 'removeListener') continue;
9250 this.removeAllListeners(key);
9251 }
9252 this.removeAllListeners('removeListener');
9253 this._events = {};
9254 return this;
9255 }
9256
9257 listeners = this._events[type];
9258
9259 if (isFunction(listeners)) {
9260 this.removeListener(type, listeners);
9261 } else {
9262 // LIFO order
9263 while (listeners.length)
9264 this.removeListener(type, listeners[listeners.length - 1]);
9265 }
9266 delete this._events[type];
9267
9268 return this;
9269};
9270
9271EventEmitter.prototype.listeners = function(type) {
9272 var ret;
9273 if (!this._events || !this._events[type])
9274 ret = [];
9275 else if (isFunction(this._events[type]))
9276 ret = [this._events[type]];
9277 else
9278 ret = this._events[type].slice();
9279 return ret;
9280};
9281
9282EventEmitter.listenerCount = function(emitter, type) {
9283 var ret;
9284 if (!emitter._events || !emitter._events[type])
9285 ret = 0;
9286 else if (isFunction(emitter._events[type]))
9287 ret = 1;
9288 else
9289 ret = emitter._events[type].length;
9290 return ret;
9291};
9292
9293function isFunction(arg) {
9294 return typeof arg === 'function';
9295}
9296
9297function isNumber(arg) {
9298 return typeof arg === 'number';
9299}
9300
9301function isObject(arg) {
9302 return typeof arg === 'object' && arg !== null;
9303}
9304
9305function isUndefined(arg) {
9306 return arg === void 0;
9307}
9308
9309},{}],12:[function(require,module,exports){
9310if (typeof Object.create === 'function') {
9311 // implementation from standard node.js 'util' module
9312 module.exports = function inherits(ctor, superCtor) {
9313 ctor.super_ = superCtor
9314 ctor.prototype = Object.create(superCtor.prototype, {
9315 constructor: {
9316 value: ctor,
9317 enumerable: false,
9318 writable: true,
9319 configurable: true
9320 }
9321 });
9322 };
9323} else {
9324 // old school shim for old browsers
9325 module.exports = function inherits(ctor, superCtor) {
9326 ctor.super_ = superCtor
9327 var TempCtor = function () {}
9328 TempCtor.prototype = superCtor.prototype
9329 ctor.prototype = new TempCtor()
9330 ctor.prototype.constructor = ctor
9331 }
9332}
9333
9334},{}],13:[function(require,module,exports){
9335module.exports = Array.isArray || function (arr) {
9336 return Object.prototype.toString.call(arr) == '[object Array]';
9337};
9338
9339},{}],14:[function(require,module,exports){
9340// shim for using process in browser
9341
9342var process = module.exports = {};
9343var queue = [];
9344var draining = false;
9345var currentQueue;
9346var queueIndex = -1;
9347
9348function cleanUpNextTick() {
9349 draining = false;
9350 if (currentQueue.length) {
9351 queue = currentQueue.concat(queue);
9352 } else {
9353 queueIndex = -1;
9354 }
9355 if (queue.length) {
9356 drainQueue();
9357 }
9358}
9359
9360function drainQueue() {
9361 if (draining) {
9362 return;
9363 }
9364 var timeout = setTimeout(cleanUpNextTick);
9365 draining = true;
9366
9367 var len = queue.length;
9368 while(len) {
9369 currentQueue = queue;
9370 queue = [];
9371 while (++queueIndex < len) {
9372 currentQueue[queueIndex].run();
9373 }
9374 queueIndex = -1;
9375 len = queue.length;
9376 }
9377 currentQueue = null;
9378 draining = false;
9379 clearTimeout(timeout);
9380}
9381
9382process.nextTick = function (fun) {
9383 var args = new Array(arguments.length - 1);
9384 if (arguments.length > 1) {
9385 for (var i = 1; i < arguments.length; i++) {
9386 args[i - 1] = arguments[i];
9387 }
9388 }
9389 queue.push(new Item(fun, args));
9390 if (queue.length === 1 && !draining) {
9391 setTimeout(drainQueue, 0);
9392 }
9393};
9394
9395// v8 likes predictible objects
9396function Item(fun, array) {
9397 this.fun = fun;
9398 this.array = array;
9399}
9400Item.prototype.run = function () {
9401 this.fun.apply(null, this.array);
9402};
9403process.title = 'browser';
9404process.browser = true;
9405process.env = {};
9406process.argv = [];
9407process.version = ''; // empty string to avoid regexp issues
9408process.versions = {};
9409
9410function noop() {}
9411
9412process.on = noop;
9413process.addListener = noop;
9414process.once = noop;
9415process.off = noop;
9416process.removeListener = noop;
9417process.removeAllListeners = noop;
9418process.emit = noop;
9419
9420process.binding = function (name) {
9421 throw new Error('process.binding is not supported');
9422};
9423
9424// TODO(shtylman)
9425process.cwd = function () { return '/' };
9426process.chdir = function (dir) {
9427 throw new Error('process.chdir is not supported');
9428};
9429process.umask = function() { return 0; };
9430
9431},{}],15:[function(require,module,exports){
9432module.exports = require("./lib/_stream_duplex.js")
9433
9434},{"./lib/_stream_duplex.js":16}],16:[function(require,module,exports){
9435(function (process){
9436// Copyright Joyent, Inc. and other Node contributors.
9437//
9438// Permission is hereby granted, free of charge, to any person obtaining a
9439// copy of this software and associated documentation files (the
9440// "Software"), to deal in the Software without restriction, including
9441// without limitation the rights to use, copy, modify, merge, publish,
9442// distribute, sublicense, and/or sell copies of the Software, and to permit
9443// persons to whom the Software is furnished to do so, subject to the
9444// following conditions:
9445//
9446// The above copyright notice and this permission notice shall be included
9447// in all copies or substantial portions of the Software.
9448//
9449// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
9450// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
9451// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
9452// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
9453// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
9454// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
9455// USE OR OTHER DEALINGS IN THE SOFTWARE.
9456
9457// a duplex stream is just a stream that is both readable and writable.
9458// Since JS doesn't have multiple prototypal inheritance, this class
9459// prototypally inherits from Readable, and then parasitically from
9460// Writable.
9461
9462module.exports = Duplex;
9463
9464/*<replacement>*/
9465var objectKeys = Object.keys || function (obj) {
9466 var keys = [];
9467 for (var key in obj) keys.push(key);
9468 return keys;
9469}
9470/*</replacement>*/
9471
9472
9473/*<replacement>*/
9474var util = require('core-util-is');
9475util.inherits = require('inherits');
9476/*</replacement>*/
9477
9478var Readable = require('./_stream_readable');
9479var Writable = require('./_stream_writable');
9480
9481util.inherits(Duplex, Readable);
9482
9483forEach(objectKeys(Writable.prototype), function(method) {
9484 if (!Duplex.prototype[method])
9485 Duplex.prototype[method] = Writable.prototype[method];
9486});
9487
9488function Duplex(options) {
9489 if (!(this instanceof Duplex))
9490 return new Duplex(options);
9491
9492 Readable.call(this, options);
9493 Writable.call(this, options);
9494
9495 if (options && options.readable === false)
9496 this.readable = false;
9497
9498 if (options && options.writable === false)
9499 this.writable = false;
9500
9501 this.allowHalfOpen = true;
9502 if (options && options.allowHalfOpen === false)
9503 this.allowHalfOpen = false;
9504
9505 this.once('end', onend);
9506}
9507
9508// the no-half-open enforcer
9509function onend() {
9510 // if we allow half-open state, or if the writable side ended,
9511 // then we're ok.
9512 if (this.allowHalfOpen || this._writableState.ended)
9513 return;
9514
9515 // no more data can be written.
9516 // But allow more writes to happen in this tick.
9517 process.nextTick(this.end.bind(this));
9518}
9519
9520function forEach (xs, f) {
9521 for (var i = 0, l = xs.length; i < l; i++) {
9522 f(xs[i], i);
9523 }
9524}
9525
9526}).call(this,require('_process'))
9527},{"./_stream_readable":18,"./_stream_writable":20,"_process":14,"core-util-is":21,"inherits":12}],17:[function(require,module,exports){
9528// Copyright Joyent, Inc. and other Node contributors.
9529//
9530// Permission is hereby granted, free of charge, to any person obtaining a
9531// copy of this software and associated documentation files (the
9532// "Software"), to deal in the Software without restriction, including
9533// without limitation the rights to use, copy, modify, merge, publish,
9534// distribute, sublicense, and/or sell copies of the Software, and to permit
9535// persons to whom the Software is furnished to do so, subject to the
9536// following conditions:
9537//
9538// The above copyright notice and this permission notice shall be included
9539// in all copies or substantial portions of the Software.
9540//
9541// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
9542// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
9543// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
9544// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
9545// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
9546// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
9547// USE OR OTHER DEALINGS IN THE SOFTWARE.
9548
9549// a passthrough stream.
9550// basically just the most minimal sort of Transform stream.
9551// Every written chunk gets output as-is.
9552
9553module.exports = PassThrough;
9554
9555var Transform = require('./_stream_transform');
9556
9557/*<replacement>*/
9558var util = require('core-util-is');
9559util.inherits = require('inherits');
9560/*</replacement>*/
9561
9562util.inherits(PassThrough, Transform);
9563
9564function PassThrough(options) {
9565 if (!(this instanceof PassThrough))
9566 return new PassThrough(options);
9567
9568 Transform.call(this, options);
9569}
9570
9571PassThrough.prototype._transform = function(chunk, encoding, cb) {
9572 cb(null, chunk);
9573};
9574
9575},{"./_stream_transform":19,"core-util-is":21,"inherits":12}],18:[function(require,module,exports){
9576(function (process){
9577// Copyright Joyent, Inc. and other Node contributors.
9578//
9579// Permission is hereby granted, free of charge, to any person obtaining a
9580// copy of this software and associated documentation files (the
9581// "Software"), to deal in the Software without restriction, including
9582// without limitation the rights to use, copy, modify, merge, publish,
9583// distribute, sublicense, and/or sell copies of the Software, and to permit
9584// persons to whom the Software is furnished to do so, subject to the
9585// following conditions:
9586//
9587// The above copyright notice and this permission notice shall be included
9588// in all copies or substantial portions of the Software.
9589//
9590// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
9591// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
9592// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
9593// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
9594// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
9595// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
9596// USE OR OTHER DEALINGS IN THE SOFTWARE.
9597
9598module.exports = Readable;
9599
9600/*<replacement>*/
9601var isArray = require('isarray');
9602/*</replacement>*/
9603
9604
9605/*<replacement>*/
9606var Buffer = require('buffer').Buffer;
9607/*</replacement>*/
9608
9609Readable.ReadableState = ReadableState;
9610
9611var EE = require('events').EventEmitter;
9612
9613/*<replacement>*/
9614if (!EE.listenerCount) EE.listenerCount = function(emitter, type) {
9615 return emitter.listeners(type).length;
9616};
9617/*</replacement>*/
9618
9619var Stream = require('stream');
9620
9621/*<replacement>*/
9622var util = require('core-util-is');
9623util.inherits = require('inherits');
9624/*</replacement>*/
9625
9626var StringDecoder;
9627
9628
9629/*<replacement>*/
9630var debug = require('util');
9631if (debug && debug.debuglog) {
9632 debug = debug.debuglog('stream');
9633} else {
9634 debug = function () {};
9635}
9636/*</replacement>*/
9637
9638
9639util.inherits(Readable, Stream);
9640
9641function ReadableState(options, stream) {
9642 var Duplex = require('./_stream_duplex');
9643
9644 options = options || {};
9645
9646 // the point at which it stops calling _read() to fill the buffer
9647 // Note: 0 is a valid value, means "don't call _read preemptively ever"
9648 var hwm = options.highWaterMark;
9649 var defaultHwm = options.objectMode ? 16 : 16 * 1024;
9650 this.highWaterMark = (hwm || hwm === 0) ? hwm : defaultHwm;
9651
9652 // cast to ints.
9653 this.highWaterMark = ~~this.highWaterMark;
9654
9655 this.buffer = [];
9656 this.length = 0;
9657 this.pipes = null;
9658 this.pipesCount = 0;
9659 this.flowing = null;
9660 this.ended = false;
9661 this.endEmitted = false;
9662 this.reading = false;
9663
9664 // a flag to be able to tell if the onwrite cb is called immediately,
9665 // or on a later tick. We set this to true at first, because any
9666 // actions that shouldn't happen until "later" should generally also
9667 // not happen before the first write call.
9668 this.sync = true;
9669
9670 // whenever we return null, then we set a flag to say
9671 // that we're awaiting a 'readable' event emission.
9672 this.needReadable = false;
9673 this.emittedReadable = false;
9674 this.readableListening = false;
9675
9676
9677 // object stream flag. Used to make read(n) ignore n and to
9678 // make all the buffer merging and length checks go away
9679 this.objectMode = !!options.objectMode;
9680
9681 if (stream instanceof Duplex)
9682 this.objectMode = this.objectMode || !!options.readableObjectMode;
9683
9684 // Crypto is kind of old and crusty. Historically, its default string
9685 // encoding is 'binary' so we have to make this configurable.
9686 // Everything else in the universe uses 'utf8', though.
9687 this.defaultEncoding = options.defaultEncoding || 'utf8';
9688
9689 // when piping, we only care about 'readable' events that happen
9690 // after read()ing all the bytes and not getting any pushback.
9691 this.ranOut = false;
9692
9693 // the number of writers that are awaiting a drain event in .pipe()s
9694 this.awaitDrain = 0;
9695
9696 // if true, a maybeReadMore has been scheduled
9697 this.readingMore = false;
9698
9699 this.decoder = null;
9700 this.encoding = null;
9701 if (options.encoding) {
9702 if (!StringDecoder)
9703 StringDecoder = require('string_decoder/').StringDecoder;
9704 this.decoder = new StringDecoder(options.encoding);
9705 this.encoding = options.encoding;
9706 }
9707}
9708
9709function Readable(options) {
9710 var Duplex = require('./_stream_duplex');
9711
9712 if (!(this instanceof Readable))
9713 return new Readable(options);
9714
9715 this._readableState = new ReadableState(options, this);
9716
9717 // legacy
9718 this.readable = true;
9719
9720 Stream.call(this);
9721}
9722
9723// Manually shove something into the read() buffer.
9724// This returns true if the highWaterMark has not been hit yet,
9725// similar to how Writable.write() returns true if you should
9726// write() some more.
9727Readable.prototype.push = function(chunk, encoding) {
9728 var state = this._readableState;
9729
9730 if (util.isString(chunk) && !state.objectMode) {
9731 encoding = encoding || state.defaultEncoding;
9732 if (encoding !== state.encoding) {
9733 chunk = new Buffer(chunk, encoding);
9734 encoding = '';
9735 }
9736 }
9737
9738 return readableAddChunk(this, state, chunk, encoding, false);
9739};
9740
9741// Unshift should *always* be something directly out of read()
9742Readable.prototype.unshift = function(chunk) {
9743 var state = this._readableState;
9744 return readableAddChunk(this, state, chunk, '', true);
9745};
9746
9747function readableAddChunk(stream, state, chunk, encoding, addToFront) {
9748 var er = chunkInvalid(state, chunk);
9749 if (er) {
9750 stream.emit('error', er);
9751 } else if (util.isNullOrUndefined(chunk)) {
9752 state.reading = false;
9753 if (!state.ended)
9754 onEofChunk(stream, state);
9755 } else if (state.objectMode || chunk && chunk.length > 0) {
9756 if (state.ended && !addToFront) {
9757 var e = new Error('stream.push() after EOF');
9758 stream.emit('error', e);
9759 } else if (state.endEmitted && addToFront) {
9760 var e = new Error('stream.unshift() after end event');
9761 stream.emit('error', e);
9762 } else {
9763 if (state.decoder && !addToFront && !encoding)
9764 chunk = state.decoder.write(chunk);
9765
9766 if (!addToFront)
9767 state.reading = false;
9768
9769 // if we want the data now, just emit it.
9770 if (state.flowing && state.length === 0 && !state.sync) {
9771 stream.emit('data', chunk);
9772 stream.read(0);
9773 } else {
9774 // update the buffer info.
9775 state.length += state.objectMode ? 1 : chunk.length;
9776 if (addToFront)
9777 state.buffer.unshift(chunk);
9778 else
9779 state.buffer.push(chunk);
9780
9781 if (state.needReadable)
9782 emitReadable(stream);
9783 }
9784
9785 maybeReadMore(stream, state);
9786 }
9787 } else if (!addToFront) {
9788 state.reading = false;
9789 }
9790
9791 return needMoreData(state);
9792}
9793
9794
9795
9796// if it's past the high water mark, we can push in some more.
9797// Also, if we have no data yet, we can stand some
9798// more bytes. This is to work around cases where hwm=0,
9799// such as the repl. Also, if the push() triggered a
9800// readable event, and the user called read(largeNumber) such that
9801// needReadable was set, then we ought to push more, so that another
9802// 'readable' event will be triggered.
9803function needMoreData(state) {
9804 return !state.ended &&
9805 (state.needReadable ||
9806 state.length < state.highWaterMark ||
9807 state.length === 0);
9808}
9809
9810// backwards compatibility.
9811Readable.prototype.setEncoding = function(enc) {
9812 if (!StringDecoder)
9813 StringDecoder = require('string_decoder/').StringDecoder;
9814 this._readableState.decoder = new StringDecoder(enc);
9815 this._readableState.encoding = enc;
9816 return this;
9817};
9818
9819// Don't raise the hwm > 128MB
9820var MAX_HWM = 0x800000;
9821function roundUpToNextPowerOf2(n) {
9822 if (n >= MAX_HWM) {
9823 n = MAX_HWM;
9824 } else {
9825 // Get the next highest power of 2
9826 n--;
9827 for (var p = 1; p < 32; p <<= 1) n |= n >> p;
9828 n++;
9829 }
9830 return n;
9831}
9832
9833function howMuchToRead(n, state) {
9834 if (state.length === 0 && state.ended)
9835 return 0;
9836
9837 if (state.objectMode)
9838 return n === 0 ? 0 : 1;
9839
9840 if (isNaN(n) || util.isNull(n)) {
9841 // only flow one buffer at a time
9842 if (state.flowing && state.buffer.length)
9843 return state.buffer[0].length;
9844 else
9845 return state.length;
9846 }
9847
9848 if (n <= 0)
9849 return 0;
9850
9851 // If we're asking for more than the target buffer level,
9852 // then raise the water mark. Bump up to the next highest
9853 // power of 2, to prevent increasing it excessively in tiny
9854 // amounts.
9855 if (n > state.highWaterMark)
9856 state.highWaterMark = roundUpToNextPowerOf2(n);
9857
9858 // don't have that much. return null, unless we've ended.
9859 if (n > state.length) {
9860 if (!state.ended) {
9861 state.needReadable = true;
9862 return 0;
9863 } else
9864 return state.length;
9865 }
9866
9867 return n;
9868}
9869
9870// you can override either this method, or the async _read(n) below.
9871Readable.prototype.read = function(n) {
9872 debug('read', n);
9873 var state = this._readableState;
9874 var nOrig = n;
9875
9876 if (!util.isNumber(n) || n > 0)
9877 state.emittedReadable = false;
9878
9879 // if we're doing read(0) to trigger a readable event, but we
9880 // already have a bunch of data in the buffer, then just trigger
9881 // the 'readable' event and move on.
9882 if (n === 0 &&
9883 state.needReadable &&
9884 (state.length >= state.highWaterMark || state.ended)) {
9885 debug('read: emitReadable', state.length, state.ended);
9886 if (state.length === 0 && state.ended)
9887 endReadable(this);
9888 else
9889 emitReadable(this);
9890 return null;
9891 }
9892
9893 n = howMuchToRead(n, state);
9894
9895 // if we've ended, and we're now clear, then finish it up.
9896 if (n === 0 && state.ended) {
9897 if (state.length === 0)
9898 endReadable(this);
9899 return null;
9900 }
9901
9902 // All the actual chunk generation logic needs to be
9903 // *below* the call to _read. The reason is that in certain
9904 // synthetic stream cases, such as passthrough streams, _read
9905 // may be a completely synchronous operation which may change
9906 // the state of the read buffer, providing enough data when
9907 // before there was *not* enough.
9908 //
9909 // So, the steps are:
9910 // 1. Figure out what the state of things will be after we do
9911 // a read from the buffer.
9912 //
9913 // 2. If that resulting state will trigger a _read, then call _read.
9914 // Note that this may be asynchronous, or synchronous. Yes, it is
9915 // deeply ugly to write APIs this way, but that still doesn't mean
9916 // that the Readable class should behave improperly, as streams are
9917 // designed to be sync/async agnostic.
9918 // Take note if the _read call is sync or async (ie, if the read call
9919 // has returned yet), so that we know whether or not it's safe to emit
9920 // 'readable' etc.
9921 //
9922 // 3. Actually pull the requested chunks out of the buffer and return.
9923
9924 // if we need a readable event, then we need to do some reading.
9925 var doRead = state.needReadable;
9926 debug('need readable', doRead);
9927
9928 // if we currently have less than the highWaterMark, then also read some
9929 if (state.length === 0 || state.length - n < state.highWaterMark) {
9930 doRead = true;
9931 debug('length less than watermark', doRead);
9932 }
9933
9934 // however, if we've ended, then there's no point, and if we're already
9935 // reading, then it's unnecessary.
9936 if (state.ended || state.reading) {
9937 doRead = false;
9938 debug('reading or ended', doRead);
9939 }
9940
9941 if (doRead) {
9942 debug('do read');
9943 state.reading = true;
9944 state.sync = true;
9945 // if the length is currently zero, then we *need* a readable event.
9946 if (state.length === 0)
9947 state.needReadable = true;
9948 // call internal read method
9949 this._read(state.highWaterMark);
9950 state.sync = false;
9951 }
9952
9953 // If _read pushed data synchronously, then `reading` will be false,
9954 // and we need to re-evaluate how much data we can return to the user.
9955 if (doRead && !state.reading)
9956 n = howMuchToRead(nOrig, state);
9957
9958 var ret;
9959 if (n > 0)
9960 ret = fromList(n, state);
9961 else
9962 ret = null;
9963
9964 if (util.isNull(ret)) {
9965 state.needReadable = true;
9966 n = 0;
9967 }
9968
9969 state.length -= n;
9970
9971 // If we have nothing in the buffer, then we want to know
9972 // as soon as we *do* get something into the buffer.
9973 if (state.length === 0 && !state.ended)
9974 state.needReadable = true;
9975
9976 // If we tried to read() past the EOF, then emit end on the next tick.
9977 if (nOrig !== n && state.ended && state.length === 0)
9978 endReadable(this);
9979
9980 if (!util.isNull(ret))
9981 this.emit('data', ret);
9982
9983 return ret;
9984};
9985
9986function chunkInvalid(state, chunk) {
9987 var er = null;
9988 if (!util.isBuffer(chunk) &&
9989 !util.isString(chunk) &&
9990 !util.isNullOrUndefined(chunk) &&
9991 !state.objectMode) {
9992 er = new TypeError('Invalid non-string/buffer chunk');
9993 }
9994 return er;
9995}
9996
9997
9998function onEofChunk(stream, state) {
9999 if (state.decoder && !state.ended) {
10000 var chunk = state.decoder.end();
10001 if (chunk && chunk.length) {
10002 state.buffer.push(chunk);
10003 state.length += state.objectMode ? 1 : chunk.length;
10004 }
10005 }
10006 state.ended = true;
10007
10008 // emit 'readable' now to make sure it gets picked up.
10009 emitReadable(stream);
10010}
10011
10012// Don't emit readable right away in sync mode, because this can trigger
10013// another read() call => stack overflow. This way, it might trigger
10014// a nextTick recursion warning, but that's not so bad.
10015function emitReadable(stream) {
10016 var state = stream._readableState;
10017 state.needReadable = false;
10018 if (!state.emittedReadable) {
10019 debug('emitReadable', state.flowing);
10020 state.emittedReadable = true;
10021 if (state.sync)
10022 process.nextTick(function() {
10023 emitReadable_(stream);
10024 });
10025 else
10026 emitReadable_(stream);
10027 }
10028}
10029
10030function emitReadable_(stream) {
10031 debug('emit readable');
10032 stream.emit('readable');
10033 flow(stream);
10034}
10035
10036
10037// at this point, the user has presumably seen the 'readable' event,
10038// and called read() to consume some data. that may have triggered
10039// in turn another _read(n) call, in which case reading = true if
10040// it's in progress.
10041// However, if we're not ended, or reading, and the length < hwm,
10042// then go ahead and try to read some more preemptively.
10043function maybeReadMore(stream, state) {
10044 if (!state.readingMore) {
10045 state.readingMore = true;
10046 process.nextTick(function() {
10047 maybeReadMore_(stream, state);
10048 });
10049 }
10050}
10051
10052function maybeReadMore_(stream, state) {
10053 var len = state.length;
10054 while (!state.reading && !state.flowing && !state.ended &&
10055 state.length < state.highWaterMark) {
10056 debug('maybeReadMore read 0');
10057 stream.read(0);
10058 if (len === state.length)
10059 // didn't get any data, stop spinning.
10060 break;
10061 else
10062 len = state.length;
10063 }
10064 state.readingMore = false;
10065}
10066
10067// abstract method. to be overridden in specific implementation classes.
10068// call cb(er, data) where data is <= n in length.
10069// for virtual (non-string, non-buffer) streams, "length" is somewhat
10070// arbitrary, and perhaps not very meaningful.
10071Readable.prototype._read = function(n) {
10072 this.emit('error', new Error('not implemented'));
10073};
10074
10075Readable.prototype.pipe = function(dest, pipeOpts) {
10076 var src = this;
10077 var state = this._readableState;
10078
10079 switch (state.pipesCount) {
10080 case 0:
10081 state.pipes = dest;
10082 break;
10083 case 1:
10084 state.pipes = [state.pipes, dest];
10085 break;
10086 default:
10087 state.pipes.push(dest);
10088 break;
10089 }
10090 state.pipesCount += 1;
10091 debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
10092
10093 var doEnd = (!pipeOpts || pipeOpts.end !== false) &&
10094 dest !== process.stdout &&
10095 dest !== process.stderr;
10096
10097 var endFn = doEnd ? onend : cleanup;
10098 if (state.endEmitted)
10099 process.nextTick(endFn);
10100 else
10101 src.once('end', endFn);
10102
10103 dest.on('unpipe', onunpipe);
10104 function onunpipe(readable) {
10105 debug('onunpipe');
10106 if (readable === src) {
10107 cleanup();
10108 }
10109 }
10110
10111 function onend() {
10112 debug('onend');
10113 dest.end();
10114 }
10115
10116 // when the dest drains, it reduces the awaitDrain counter
10117 // on the source. This would be more elegant with a .once()
10118 // handler in flow(), but adding and removing repeatedly is
10119 // too slow.
10120 var ondrain = pipeOnDrain(src);
10121 dest.on('drain', ondrain);
10122
10123 function cleanup() {
10124 debug('cleanup');
10125 // cleanup event handlers once the pipe is broken
10126 dest.removeListener('close', onclose);
10127 dest.removeListener('finish', onfinish);
10128 dest.removeListener('drain', ondrain);
10129 dest.removeListener('error', onerror);
10130 dest.removeListener('unpipe', onunpipe);
10131 src.removeListener('end', onend);
10132 src.removeListener('end', cleanup);
10133 src.removeListener('data', ondata);
10134
10135 // if the reader is waiting for a drain event from this
10136 // specific writer, then it would cause it to never start
10137 // flowing again.
10138 // So, if this is awaiting a drain, then we just call it now.
10139 // If we don't know, then assume that we are waiting for one.
10140 if (state.awaitDrain &&
10141 (!dest._writableState || dest._writableState.needDrain))
10142 ondrain();
10143 }
10144
10145 src.on('data', ondata);
10146 function ondata(chunk) {
10147 debug('ondata');
10148 var ret = dest.write(chunk);
10149 if (false === ret) {
10150 debug('false write response, pause',
10151 src._readableState.awaitDrain);
10152 src._readableState.awaitDrain++;
10153 src.pause();
10154 }
10155 }
10156
10157 // if the dest has an error, then stop piping into it.
10158 // however, don't suppress the throwing behavior for this.
10159 function onerror(er) {
10160 debug('onerror', er);
10161 unpipe();
10162 dest.removeListener('error', onerror);
10163 if (EE.listenerCount(dest, 'error') === 0)
10164 dest.emit('error', er);
10165 }
10166 // This is a brutally ugly hack to make sure that our error handler
10167 // is attached before any userland ones. NEVER DO THIS.
10168 if (!dest._events || !dest._events.error)
10169 dest.on('error', onerror);
10170 else if (isArray(dest._events.error))
10171 dest._events.error.unshift(onerror);
10172 else
10173 dest._events.error = [onerror, dest._events.error];
10174
10175
10176
10177 // Both close and finish should trigger unpipe, but only once.
10178 function onclose() {
10179 dest.removeListener('finish', onfinish);
10180 unpipe();
10181 }
10182 dest.once('close', onclose);
10183 function onfinish() {
10184 debug('onfinish');
10185 dest.removeListener('close', onclose);
10186 unpipe();
10187 }
10188 dest.once('finish', onfinish);
10189
10190 function unpipe() {
10191 debug('unpipe');
10192 src.unpipe(dest);
10193 }
10194
10195 // tell the dest that it's being piped to
10196 dest.emit('pipe', src);
10197
10198 // start the flow if it hasn't been started already.
10199 if (!state.flowing) {
10200 debug('pipe resume');
10201 src.resume();
10202 }
10203
10204 return dest;
10205};
10206
10207function pipeOnDrain(src) {
10208 return function() {
10209 var state = src._readableState;
10210 debug('pipeOnDrain', state.awaitDrain);
10211 if (state.awaitDrain)
10212 state.awaitDrain--;
10213 if (state.awaitDrain === 0 && EE.listenerCount(src, 'data')) {
10214 state.flowing = true;
10215 flow(src);
10216 }
10217 };
10218}
10219
10220
10221Readable.prototype.unpipe = function(dest) {
10222 var state = this._readableState;
10223
10224 // if we're not piping anywhere, then do nothing.
10225 if (state.pipesCount === 0)
10226 return this;
10227
10228 // just one destination. most common case.
10229 if (state.pipesCount === 1) {
10230 // passed in one, but it's not the right one.
10231 if (dest && dest !== state.pipes)
10232 return this;
10233
10234 if (!dest)
10235 dest = state.pipes;
10236
10237 // got a match.
10238 state.pipes = null;
10239 state.pipesCount = 0;
10240 state.flowing = false;
10241 if (dest)
10242 dest.emit('unpipe', this);
10243 return this;
10244 }
10245
10246 // slow case. multiple pipe destinations.
10247
10248 if (!dest) {
10249 // remove all.
10250 var dests = state.pipes;
10251 var len = state.pipesCount;
10252 state.pipes = null;
10253 state.pipesCount = 0;
10254 state.flowing = false;
10255
10256 for (var i = 0; i < len; i++)
10257 dests[i].emit('unpipe', this);
10258 return this;
10259 }
10260
10261 // try to find the right one.
10262 var i = indexOf(state.pipes, dest);
10263 if (i === -1)
10264 return this;
10265
10266 state.pipes.splice(i, 1);
10267 state.pipesCount -= 1;
10268 if (state.pipesCount === 1)
10269 state.pipes = state.pipes[0];
10270
10271 dest.emit('unpipe', this);
10272
10273 return this;
10274};
10275
10276// set up data events if they are asked for
10277// Ensure readable listeners eventually get something
10278Readable.prototype.on = function(ev, fn) {
10279 var res = Stream.prototype.on.call(this, ev, fn);
10280
10281 // If listening to data, and it has not explicitly been paused,
10282 // then call resume to start the flow of data on the next tick.
10283 if (ev === 'data' && false !== this._readableState.flowing) {
10284 this.resume();
10285 }
10286
10287 if (ev === 'readable' && this.readable) {
10288 var state = this._readableState;
10289 if (!state.readableListening) {
10290 state.readableListening = true;
10291 state.emittedReadable = false;
10292 state.needReadable = true;
10293 if (!state.reading) {
10294 var self = this;
10295 process.nextTick(function() {
10296 debug('readable nexttick read 0');
10297 self.read(0);
10298 });
10299 } else if (state.length) {
10300 emitReadable(this, state);
10301 }
10302 }
10303 }
10304
10305 return res;
10306};
10307Readable.prototype.addListener = Readable.prototype.on;
10308
10309// pause() and resume() are remnants of the legacy readable stream API
10310// If the user uses them, then switch into old mode.
10311Readable.prototype.resume = function() {
10312 var state = this._readableState;
10313 if (!state.flowing) {
10314 debug('resume');
10315 state.flowing = true;
10316 if (!state.reading) {
10317 debug('resume read 0');
10318 this.read(0);
10319 }
10320 resume(this, state);
10321 }
10322 return this;
10323};
10324
10325function resume(stream, state) {
10326 if (!state.resumeScheduled) {
10327 state.resumeScheduled = true;
10328 process.nextTick(function() {
10329 resume_(stream, state);
10330 });
10331 }
10332}
10333
10334function resume_(stream, state) {
10335 state.resumeScheduled = false;
10336 stream.emit('resume');
10337 flow(stream);
10338 if (state.flowing && !state.reading)
10339 stream.read(0);
10340}
10341
10342Readable.prototype.pause = function() {
10343 debug('call pause flowing=%j', this._readableState.flowing);
10344 if (false !== this._readableState.flowing) {
10345 debug('pause');
10346 this._readableState.flowing = false;
10347 this.emit('pause');
10348 }
10349 return this;
10350};
10351
10352function flow(stream) {
10353 var state = stream._readableState;
10354 debug('flow', state.flowing);
10355 if (state.flowing) {
10356 do {
10357 var chunk = stream.read();
10358 } while (null !== chunk && state.flowing);
10359 }
10360}
10361
10362// wrap an old-style stream as the async data source.
10363// This is *not* part of the readable stream interface.
10364// It is an ugly unfortunate mess of history.
10365Readable.prototype.wrap = function(stream) {
10366 var state = this._readableState;
10367 var paused = false;
10368
10369 var self = this;
10370 stream.on('end', function() {
10371 debug('wrapped end');
10372 if (state.decoder && !state.ended) {
10373 var chunk = state.decoder.end();
10374 if (chunk && chunk.length)
10375 self.push(chunk);
10376 }
10377
10378 self.push(null);
10379 });
10380
10381 stream.on('data', function(chunk) {
10382 debug('wrapped data');
10383 if (state.decoder)
10384 chunk = state.decoder.write(chunk);
10385 if (!chunk || !state.objectMode && !chunk.length)
10386 return;
10387
10388 var ret = self.push(chunk);
10389 if (!ret) {
10390 paused = true;
10391 stream.pause();
10392 }
10393 });
10394
10395 // proxy all the other methods.
10396 // important when wrapping filters and duplexes.
10397 for (var i in stream) {
10398 if (util.isFunction(stream[i]) && util.isUndefined(this[i])) {
10399 this[i] = function(method) { return function() {
10400 return stream[method].apply(stream, arguments);
10401 }}(i);
10402 }
10403 }
10404
10405 // proxy certain important events.
10406 var events = ['error', 'close', 'destroy', 'pause', 'resume'];
10407 forEach(events, function(ev) {
10408 stream.on(ev, self.emit.bind(self, ev));
10409 });
10410
10411 // when we try to consume some more bytes, simply unpause the
10412 // underlying stream.
10413 self._read = function(n) {
10414 debug('wrapped _read', n);
10415 if (paused) {
10416 paused = false;
10417 stream.resume();
10418 }
10419 };
10420
10421 return self;
10422};
10423
10424
10425
10426// exposed for testing purposes only.
10427Readable._fromList = fromList;
10428
10429// Pluck off n bytes from an array of buffers.
10430// Length is the combined lengths of all the buffers in the list.
10431function fromList(n, state) {
10432 var list = state.buffer;
10433 var length = state.length;
10434 var stringMode = !!state.decoder;
10435 var objectMode = !!state.objectMode;
10436 var ret;
10437
10438 // nothing in the list, definitely empty.
10439 if (list.length === 0)
10440 return null;
10441
10442 if (length === 0)
10443 ret = null;
10444 else if (objectMode)
10445 ret = list.shift();
10446 else if (!n || n >= length) {
10447 // read it all, truncate the array.
10448 if (stringMode)
10449 ret = list.join('');
10450 else
10451 ret = Buffer.concat(list, length);
10452 list.length = 0;
10453 } else {
10454 // read just some of it.
10455 if (n < list[0].length) {
10456 // just take a part of the first list item.
10457 // slice is the same for buffers and strings.
10458 var buf = list[0];
10459 ret = buf.slice(0, n);
10460 list[0] = buf.slice(n);
10461 } else if (n === list[0].length) {
10462 // first list is a perfect match
10463 ret = list.shift();
10464 } else {
10465 // complex case.
10466 // we have enough to cover it, but it spans past the first buffer.
10467 if (stringMode)
10468 ret = '';
10469 else
10470 ret = new Buffer(n);
10471
10472 var c = 0;
10473 for (var i = 0, l = list.length; i < l && c < n; i++) {
10474 var buf = list[0];
10475 var cpy = Math.min(n - c, buf.length);
10476
10477 if (stringMode)
10478 ret += buf.slice(0, cpy);
10479 else
10480 buf.copy(ret, c, 0, cpy);
10481
10482 if (cpy < buf.length)
10483 list[0] = buf.slice(cpy);
10484 else
10485 list.shift();
10486
10487 c += cpy;
10488 }
10489 }
10490 }
10491
10492 return ret;
10493}
10494
10495function endReadable(stream) {
10496 var state = stream._readableState;
10497
10498 // If we get here before consuming all the bytes, then that is a
10499 // bug in node. Should never happen.
10500 if (state.length > 0)
10501 throw new Error('endReadable called on non-empty stream');
10502
10503 if (!state.endEmitted) {
10504 state.ended = true;
10505 process.nextTick(function() {
10506 // Check that we didn't get one last unshift.
10507 if (!state.endEmitted && state.length === 0) {
10508 state.endEmitted = true;
10509 stream.readable = false;
10510 stream.emit('end');
10511 }
10512 });
10513 }
10514}
10515
10516function forEach (xs, f) {
10517 for (var i = 0, l = xs.length; i < l; i++) {
10518 f(xs[i], i);
10519 }
10520}
10521
10522function indexOf (xs, x) {
10523 for (var i = 0, l = xs.length; i < l; i++) {
10524 if (xs[i] === x) return i;
10525 }
10526 return -1;
10527}
10528
10529}).call(this,require('_process'))
10530},{"./_stream_duplex":16,"_process":14,"buffer":7,"core-util-is":21,"events":11,"inherits":12,"isarray":13,"stream":26,"string_decoder/":27,"util":6}],19:[function(require,module,exports){
10531// Copyright Joyent, Inc. and other Node contributors.
10532//
10533// Permission is hereby granted, free of charge, to any person obtaining a
10534// copy of this software and associated documentation files (the
10535// "Software"), to deal in the Software without restriction, including
10536// without limitation the rights to use, copy, modify, merge, publish,
10537// distribute, sublicense, and/or sell copies of the Software, and to permit
10538// persons to whom the Software is furnished to do so, subject to the
10539// following conditions:
10540//
10541// The above copyright notice and this permission notice shall be included
10542// in all copies or substantial portions of the Software.
10543//
10544// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
10545// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
10546// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
10547// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
10548// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
10549// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
10550// USE OR OTHER DEALINGS IN THE SOFTWARE.
10551
10552
10553// a transform stream is a readable/writable stream where you do
10554// something with the data. Sometimes it's called a "filter",
10555// but that's not a great name for it, since that implies a thing where
10556// some bits pass through, and others are simply ignored. (That would
10557// be a valid example of a transform, of course.)
10558//
10559// While the output is causally related to the input, it's not a
10560// necessarily symmetric or synchronous transformation. For example,
10561// a zlib stream might take multiple plain-text writes(), and then
10562// emit a single compressed chunk some time in the future.
10563//
10564// Here's how this works:
10565//
10566// The Transform stream has all the aspects of the readable and writable
10567// stream classes. When you write(chunk), that calls _write(chunk,cb)
10568// internally, and returns false if there's a lot of pending writes
10569// buffered up. When you call read(), that calls _read(n) until
10570// there's enough pending readable data buffered up.
10571//
10572// In a transform stream, the written data is placed in a buffer. When
10573// _read(n) is called, it transforms the queued up data, calling the
10574// buffered _write cb's as it consumes chunks. If consuming a single
10575// written chunk would result in multiple output chunks, then the first
10576// outputted bit calls the readcb, and subsequent chunks just go into
10577// the read buffer, and will cause it to emit 'readable' if necessary.
10578//
10579// This way, back-pressure is actually determined by the reading side,
10580// since _read has to be called to start processing a new chunk. However,
10581// a pathological inflate type of transform can cause excessive buffering
10582// here. For example, imagine a stream where every byte of input is
10583// interpreted as an integer from 0-255, and then results in that many
10584// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in
10585// 1kb of data being output. In this case, you could write a very small
10586// amount of input, and end up with a very large amount of output. In
10587// such a pathological inflating mechanism, there'd be no way to tell
10588// the system to stop doing the transform. A single 4MB write could
10589// cause the system to run out of memory.
10590//
10591// However, even in such a pathological case, only a single written chunk
10592// would be consumed, and then the rest would wait (un-transformed) until
10593// the results of the previous transformed chunk were consumed.
10594
10595module.exports = Transform;
10596
10597var Duplex = require('./_stream_duplex');
10598
10599/*<replacement>*/
10600var util = require('core-util-is');
10601util.inherits = require('inherits');
10602/*</replacement>*/
10603
10604util.inherits(Transform, Duplex);
10605
10606
10607function TransformState(options, stream) {
10608 this.afterTransform = function(er, data) {
10609 return afterTransform(stream, er, data);
10610 };
10611
10612 this.needTransform = false;
10613 this.transforming = false;
10614 this.writecb = null;
10615 this.writechunk = null;
10616}
10617
10618function afterTransform(stream, er, data) {
10619 var ts = stream._transformState;
10620 ts.transforming = false;
10621
10622 var cb = ts.writecb;
10623
10624 if (!cb)
10625 return stream.emit('error', new Error('no writecb in Transform class'));
10626
10627 ts.writechunk = null;
10628 ts.writecb = null;
10629
10630 if (!util.isNullOrUndefined(data))
10631 stream.push(data);
10632
10633 if (cb)
10634 cb(er);
10635
10636 var rs = stream._readableState;
10637 rs.reading = false;
10638 if (rs.needReadable || rs.length < rs.highWaterMark) {
10639 stream._read(rs.highWaterMark);
10640 }
10641}
10642
10643
10644function Transform(options) {
10645 if (!(this instanceof Transform))
10646 return new Transform(options);
10647
10648 Duplex.call(this, options);
10649
10650 this._transformState = new TransformState(options, this);
10651
10652 // when the writable side finishes, then flush out anything remaining.
10653 var stream = this;
10654
10655 // start out asking for a readable event once data is transformed.
10656 this._readableState.needReadable = true;
10657
10658 // we have implemented the _read method, and done the other things
10659 // that Readable wants before the first _read call, so unset the
10660 // sync guard flag.
10661 this._readableState.sync = false;
10662
10663 this.once('prefinish', function() {
10664 if (util.isFunction(this._flush))
10665 this._flush(function(er) {
10666 done(stream, er);
10667 });
10668 else
10669 done(stream);
10670 });
10671}
10672
10673Transform.prototype.push = function(chunk, encoding) {
10674 this._transformState.needTransform = false;
10675 return Duplex.prototype.push.call(this, chunk, encoding);
10676};
10677
10678// This is the part where you do stuff!
10679// override this function in implementation classes.
10680// 'chunk' is an input chunk.
10681//
10682// Call `push(newChunk)` to pass along transformed output
10683// to the readable side. You may call 'push' zero or more times.
10684//
10685// Call `cb(err)` when you are done with this chunk. If you pass
10686// an error, then that'll put the hurt on the whole operation. If you
10687// never call cb(), then you'll never get another chunk.
10688Transform.prototype._transform = function(chunk, encoding, cb) {
10689 throw new Error('not implemented');
10690};
10691
10692Transform.prototype._write = function(chunk, encoding, cb) {
10693 var ts = this._transformState;
10694 ts.writecb = cb;
10695 ts.writechunk = chunk;
10696 ts.writeencoding = encoding;
10697 if (!ts.transforming) {
10698 var rs = this._readableState;
10699 if (ts.needTransform ||
10700 rs.needReadable ||
10701 rs.length < rs.highWaterMark)
10702 this._read(rs.highWaterMark);
10703 }
10704};
10705
10706// Doesn't matter what the args are here.
10707// _transform does all the work.
10708// That we got here means that the readable side wants more data.
10709Transform.prototype._read = function(n) {
10710 var ts = this._transformState;
10711
10712 if (!util.isNull(ts.writechunk) && ts.writecb && !ts.transforming) {
10713 ts.transforming = true;
10714 this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
10715 } else {
10716 // mark that we need a transform, so that any data that comes in
10717 // will get processed, now that we've asked for it.
10718 ts.needTransform = true;
10719 }
10720};
10721
10722
10723function done(stream, er) {
10724 if (er)
10725 return stream.emit('error', er);
10726
10727 // if there's nothing in the write buffer, then that means
10728 // that nothing more will ever be provided
10729 var ws = stream._writableState;
10730 var ts = stream._transformState;
10731
10732 if (ws.length)
10733 throw new Error('calling transform done when ws.length != 0');
10734
10735 if (ts.transforming)
10736 throw new Error('calling transform done when still transforming');
10737
10738 return stream.push(null);
10739}
10740
10741},{"./_stream_duplex":16,"core-util-is":21,"inherits":12}],20:[function(require,module,exports){
10742(function (process){
10743// Copyright Joyent, Inc. and other Node contributors.
10744//
10745// Permission is hereby granted, free of charge, to any person obtaining a
10746// copy of this software and associated documentation files (the
10747// "Software"), to deal in the Software without restriction, including
10748// without limitation the rights to use, copy, modify, merge, publish,
10749// distribute, sublicense, and/or sell copies of the Software, and to permit
10750// persons to whom the Software is furnished to do so, subject to the
10751// following conditions:
10752//
10753// The above copyright notice and this permission notice shall be included
10754// in all copies or substantial portions of the Software.
10755//
10756// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
10757// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
10758// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
10759// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
10760// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
10761// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
10762// USE OR OTHER DEALINGS IN THE SOFTWARE.
10763
10764// A bit simpler than readable streams.
10765// Implement an async ._write(chunk, cb), and it'll handle all
10766// the drain event emission and buffering.
10767
10768module.exports = Writable;
10769
10770/*<replacement>*/
10771var Buffer = require('buffer').Buffer;
10772/*</replacement>*/
10773
10774Writable.WritableState = WritableState;
10775
10776
10777/*<replacement>*/
10778var util = require('core-util-is');
10779util.inherits = require('inherits');
10780/*</replacement>*/
10781
10782var Stream = require('stream');
10783
10784util.inherits(Writable, Stream);
10785
10786function WriteReq(chunk, encoding, cb) {
10787 this.chunk = chunk;
10788 this.encoding = encoding;
10789 this.callback = cb;
10790}
10791
10792function WritableState(options, stream) {
10793 var Duplex = require('./_stream_duplex');
10794
10795 options = options || {};
10796
10797 // the point at which write() starts returning false
10798 // Note: 0 is a valid value, means that we always return false if
10799 // the entire buffer is not flushed immediately on write()
10800 var hwm = options.highWaterMark;
10801 var defaultHwm = options.objectMode ? 16 : 16 * 1024;
10802 this.highWaterMark = (hwm || hwm === 0) ? hwm : defaultHwm;
10803
10804 // object stream flag to indicate whether or not this stream
10805 // contains buffers or objects.
10806 this.objectMode = !!options.objectMode;
10807
10808 if (stream instanceof Duplex)
10809 this.objectMode = this.objectMode || !!options.writableObjectMode;
10810
10811 // cast to ints.
10812 this.highWaterMark = ~~this.highWaterMark;
10813
10814 this.needDrain = false;
10815 // at the start of calling end()
10816 this.ending = false;
10817 // when end() has been called, and returned
10818 this.ended = false;
10819 // when 'finish' is emitted
10820 this.finished = false;
10821
10822 // should we decode strings into buffers before passing to _write?
10823 // this is here so that some node-core streams can optimize string
10824 // handling at a lower level.
10825 var noDecode = options.decodeStrings === false;
10826 this.decodeStrings = !noDecode;
10827
10828 // Crypto is kind of old and crusty. Historically, its default string
10829 // encoding is 'binary' so we have to make this configurable.
10830 // Everything else in the universe uses 'utf8', though.
10831 this.defaultEncoding = options.defaultEncoding || 'utf8';
10832
10833 // not an actual buffer we keep track of, but a measurement
10834 // of how much we're waiting to get pushed to some underlying
10835 // socket or file.
10836 this.length = 0;
10837
10838 // a flag to see when we're in the middle of a write.
10839 this.writing = false;
10840
10841 // when true all writes will be buffered until .uncork() call
10842 this.corked = 0;
10843
10844 // a flag to be able to tell if the onwrite cb is called immediately,
10845 // or on a later tick. We set this to true at first, because any
10846 // actions that shouldn't happen until "later" should generally also
10847 // not happen before the first write call.
10848 this.sync = true;
10849
10850 // a flag to know if we're processing previously buffered items, which
10851 // may call the _write() callback in the same tick, so that we don't
10852 // end up in an overlapped onwrite situation.
10853 this.bufferProcessing = false;
10854
10855 // the callback that's passed to _write(chunk,cb)
10856 this.onwrite = function(er) {
10857 onwrite(stream, er);
10858 };
10859
10860 // the callback that the user supplies to write(chunk,encoding,cb)
10861 this.writecb = null;
10862
10863 // the amount that is being written when _write is called.
10864 this.writelen = 0;
10865
10866 this.buffer = [];
10867
10868 // number of pending user-supplied write callbacks
10869 // this must be 0 before 'finish' can be emitted
10870 this.pendingcb = 0;
10871
10872 // emit prefinish if the only thing we're waiting for is _write cbs
10873 // This is relevant for synchronous Transform streams
10874 this.prefinished = false;
10875
10876 // True if the error was already emitted and should not be thrown again
10877 this.errorEmitted = false;
10878}
10879
10880function Writable(options) {
10881 var Duplex = require('./_stream_duplex');
10882
10883 // Writable ctor is applied to Duplexes, though they're not
10884 // instanceof Writable, they're instanceof Readable.
10885 if (!(this instanceof Writable) && !(this instanceof Duplex))
10886 return new Writable(options);
10887
10888 this._writableState = new WritableState(options, this);
10889
10890 // legacy.
10891 this.writable = true;
10892
10893 Stream.call(this);
10894}
10895
10896// Otherwise people can pipe Writable streams, which is just wrong.
10897Writable.prototype.pipe = function() {
10898 this.emit('error', new Error('Cannot pipe. Not readable.'));
10899};
10900
10901
10902function writeAfterEnd(stream, state, cb) {
10903 var er = new Error('write after end');
10904 // TODO: defer error events consistently everywhere, not just the cb
10905 stream.emit('error', er);
10906 process.nextTick(function() {
10907 cb(er);
10908 });
10909}
10910
10911// If we get something that is not a buffer, string, null, or undefined,
10912// and we're not in objectMode, then that's an error.
10913// Otherwise stream chunks are all considered to be of length=1, and the
10914// watermarks determine how many objects to keep in the buffer, rather than
10915// how many bytes or characters.
10916function validChunk(stream, state, chunk, cb) {
10917 var valid = true;
10918 if (!util.isBuffer(chunk) &&
10919 !util.isString(chunk) &&
10920 !util.isNullOrUndefined(chunk) &&
10921 !state.objectMode) {
10922 var er = new TypeError('Invalid non-string/buffer chunk');
10923 stream.emit('error', er);
10924 process.nextTick(function() {
10925 cb(er);
10926 });
10927 valid = false;
10928 }
10929 return valid;
10930}
10931
10932Writable.prototype.write = function(chunk, encoding, cb) {
10933 var state = this._writableState;
10934 var ret = false;
10935
10936 if (util.isFunction(encoding)) {
10937 cb = encoding;
10938 encoding = null;
10939 }
10940
10941 if (util.isBuffer(chunk))
10942 encoding = 'buffer';
10943 else if (!encoding)
10944 encoding = state.defaultEncoding;
10945
10946 if (!util.isFunction(cb))
10947 cb = function() {};
10948
10949 if (state.ended)
10950 writeAfterEnd(this, state, cb);
10951 else if (validChunk(this, state, chunk, cb)) {
10952 state.pendingcb++;
10953 ret = writeOrBuffer(this, state, chunk, encoding, cb);
10954 }
10955
10956 return ret;
10957};
10958
10959Writable.prototype.cork = function() {
10960 var state = this._writableState;
10961
10962 state.corked++;
10963};
10964
10965Writable.prototype.uncork = function() {
10966 var state = this._writableState;
10967
10968 if (state.corked) {
10969 state.corked--;
10970
10971 if (!state.writing &&
10972 !state.corked &&
10973 !state.finished &&
10974 !state.bufferProcessing &&
10975 state.buffer.length)
10976 clearBuffer(this, state);
10977 }
10978};
10979
10980function decodeChunk(state, chunk, encoding) {
10981 if (!state.objectMode &&
10982 state.decodeStrings !== false &&
10983 util.isString(chunk)) {
10984 chunk = new Buffer(chunk, encoding);
10985 }
10986 return chunk;
10987}
10988
10989// if we're already writing something, then just put this
10990// in the queue, and wait our turn. Otherwise, call _write
10991// If we return false, then we need a drain event, so set that flag.
10992function writeOrBuffer(stream, state, chunk, encoding, cb) {
10993 chunk = decodeChunk(state, chunk, encoding);
10994 if (util.isBuffer(chunk))
10995 encoding = 'buffer';
10996 var len = state.objectMode ? 1 : chunk.length;
10997
10998 state.length += len;
10999
11000 var ret = state.length < state.highWaterMark;
11001 // we must ensure that previous needDrain will not be reset to false.
11002 if (!ret)
11003 state.needDrain = true;
11004
11005 if (state.writing || state.corked)
11006 state.buffer.push(new WriteReq(chunk, encoding, cb));
11007 else
11008 doWrite(stream, state, false, len, chunk, encoding, cb);
11009
11010 return ret;
11011}
11012
11013function doWrite(stream, state, writev, len, chunk, encoding, cb) {
11014 state.writelen = len;
11015 state.writecb = cb;
11016 state.writing = true;
11017 state.sync = true;
11018 if (writev)
11019 stream._writev(chunk, state.onwrite);
11020 else
11021 stream._write(chunk, encoding, state.onwrite);
11022 state.sync = false;
11023}
11024
11025function onwriteError(stream, state, sync, er, cb) {
11026 if (sync)
11027 process.nextTick(function() {
11028 state.pendingcb--;
11029 cb(er);
11030 });
11031 else {
11032 state.pendingcb--;
11033 cb(er);
11034 }
11035
11036 stream._writableState.errorEmitted = true;
11037 stream.emit('error', er);
11038}
11039
11040function onwriteStateUpdate(state) {
11041 state.writing = false;
11042 state.writecb = null;
11043 state.length -= state.writelen;
11044 state.writelen = 0;
11045}
11046
11047function onwrite(stream, er) {
11048 var state = stream._writableState;
11049 var sync = state.sync;
11050 var cb = state.writecb;
11051
11052 onwriteStateUpdate(state);
11053
11054 if (er)
11055 onwriteError(stream, state, sync, er, cb);
11056 else {
11057 // Check if we're actually ready to finish, but don't emit yet
11058 var finished = needFinish(stream, state);
11059
11060 if (!finished &&
11061 !state.corked &&
11062 !state.bufferProcessing &&
11063 state.buffer.length) {
11064 clearBuffer(stream, state);
11065 }
11066
11067 if (sync) {
11068 process.nextTick(function() {
11069 afterWrite(stream, state, finished, cb);
11070 });
11071 } else {
11072 afterWrite(stream, state, finished, cb);
11073 }
11074 }
11075}
11076
11077function afterWrite(stream, state, finished, cb) {
11078 if (!finished)
11079 onwriteDrain(stream, state);
11080 state.pendingcb--;
11081 cb();
11082 finishMaybe(stream, state);
11083}
11084
11085// Must force callback to be called on nextTick, so that we don't
11086// emit 'drain' before the write() consumer gets the 'false' return
11087// value, and has a chance to attach a 'drain' listener.
11088function onwriteDrain(stream, state) {
11089 if (state.length === 0 && state.needDrain) {
11090 state.needDrain = false;
11091 stream.emit('drain');
11092 }
11093}
11094
11095
11096// if there's something in the buffer waiting, then process it
11097function clearBuffer(stream, state) {
11098 state.bufferProcessing = true;
11099
11100 if (stream._writev && state.buffer.length > 1) {
11101 // Fast case, write everything using _writev()
11102 var cbs = [];
11103 for (var c = 0; c < state.buffer.length; c++)
11104 cbs.push(state.buffer[c].callback);
11105
11106 // count the one we are adding, as well.
11107 // TODO(isaacs) clean this up
11108 state.pendingcb++;
11109 doWrite(stream, state, true, state.length, state.buffer, '', function(err) {
11110 for (var i = 0; i < cbs.length; i++) {
11111 state.pendingcb--;
11112 cbs[i](err);
11113 }
11114 });
11115
11116 // Clear buffer
11117 state.buffer = [];
11118 } else {
11119 // Slow case, write chunks one-by-one
11120 for (var c = 0; c < state.buffer.length; c++) {
11121 var entry = state.buffer[c];
11122 var chunk = entry.chunk;
11123 var encoding = entry.encoding;
11124 var cb = entry.callback;
11125 var len = state.objectMode ? 1 : chunk.length;
11126
11127 doWrite(stream, state, false, len, chunk, encoding, cb);
11128
11129 // if we didn't call the onwrite immediately, then
11130 // it means that we need to wait until it does.
11131 // also, that means that the chunk and cb are currently
11132 // being processed, so move the buffer counter past them.
11133 if (state.writing) {
11134 c++;
11135 break;
11136 }
11137 }
11138
11139 if (c < state.buffer.length)
11140 state.buffer = state.buffer.slice(c);
11141 else
11142 state.buffer.length = 0;
11143 }
11144
11145 state.bufferProcessing = false;
11146}
11147
11148Writable.prototype._write = function(chunk, encoding, cb) {
11149 cb(new Error('not implemented'));
11150
11151};
11152
11153Writable.prototype._writev = null;
11154
11155Writable.prototype.end = function(chunk, encoding, cb) {
11156 var state = this._writableState;
11157
11158 if (util.isFunction(chunk)) {
11159 cb = chunk;
11160 chunk = null;
11161 encoding = null;
11162 } else if (util.isFunction(encoding)) {
11163 cb = encoding;
11164 encoding = null;
11165 }
11166
11167 if (!util.isNullOrUndefined(chunk))
11168 this.write(chunk, encoding);
11169
11170 // .end() fully uncorks
11171 if (state.corked) {
11172 state.corked = 1;
11173 this.uncork();
11174 }
11175
11176 // ignore unnecessary end() calls.
11177 if (!state.ending && !state.finished)
11178 endWritable(this, state, cb);
11179};
11180
11181
11182function needFinish(stream, state) {
11183 return (state.ending &&
11184 state.length === 0 &&
11185 !state.finished &&
11186 !state.writing);
11187}
11188
11189function prefinish(stream, state) {
11190 if (!state.prefinished) {
11191 state.prefinished = true;
11192 stream.emit('prefinish');
11193 }
11194}
11195
11196function finishMaybe(stream, state) {
11197 var need = needFinish(stream, state);
11198 if (need) {
11199 if (state.pendingcb === 0) {
11200 prefinish(stream, state);
11201 state.finished = true;
11202 stream.emit('finish');
11203 } else
11204 prefinish(stream, state);
11205 }
11206 return need;
11207}
11208
11209function endWritable(stream, state, cb) {
11210 state.ending = true;
11211 finishMaybe(stream, state);
11212 if (cb) {
11213 if (state.finished)
11214 process.nextTick(cb);
11215 else
11216 stream.once('finish', cb);
11217 }
11218 state.ended = true;
11219}
11220
11221}).call(this,require('_process'))
11222},{"./_stream_duplex":16,"_process":14,"buffer":7,"core-util-is":21,"inherits":12,"stream":26}],21:[function(require,module,exports){
11223(function (Buffer){
11224// Copyright Joyent, Inc. and other Node contributors.
11225//
11226// Permission is hereby granted, free of charge, to any person obtaining a
11227// copy of this software and associated documentation files (the
11228// "Software"), to deal in the Software without restriction, including
11229// without limitation the rights to use, copy, modify, merge, publish,
11230// distribute, sublicense, and/or sell copies of the Software, and to permit
11231// persons to whom the Software is furnished to do so, subject to the
11232// following conditions:
11233//
11234// The above copyright notice and this permission notice shall be included
11235// in all copies or substantial portions of the Software.
11236//
11237// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
11238// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
11239// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
11240// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
11241// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
11242// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
11243// USE OR OTHER DEALINGS IN THE SOFTWARE.
11244
11245// NOTE: These type checking functions intentionally don't use `instanceof`
11246// because it is fragile and can be easily faked with `Object.create()`.
11247function isArray(ar) {
11248 return Array.isArray(ar);
11249}
11250exports.isArray = isArray;
11251
11252function isBoolean(arg) {
11253 return typeof arg === 'boolean';
11254}
11255exports.isBoolean = isBoolean;
11256
11257function isNull(arg) {
11258 return arg === null;
11259}
11260exports.isNull = isNull;
11261
11262function isNullOrUndefined(arg) {
11263 return arg == null;
11264}
11265exports.isNullOrUndefined = isNullOrUndefined;
11266
11267function isNumber(arg) {
11268 return typeof arg === 'number';
11269}
11270exports.isNumber = isNumber;
11271
11272function isString(arg) {
11273 return typeof arg === 'string';
11274}
11275exports.isString = isString;
11276
11277function isSymbol(arg) {
11278 return typeof arg === 'symbol';
11279}
11280exports.isSymbol = isSymbol;
11281
11282function isUndefined(arg) {
11283 return arg === void 0;
11284}
11285exports.isUndefined = isUndefined;
11286
11287function isRegExp(re) {
11288 return isObject(re) && objectToString(re) === '[object RegExp]';
11289}
11290exports.isRegExp = isRegExp;
11291
11292function isObject(arg) {
11293 return typeof arg === 'object' && arg !== null;
11294}
11295exports.isObject = isObject;
11296
11297function isDate(d) {
11298 return isObject(d) && objectToString(d) === '[object Date]';
11299}
11300exports.isDate = isDate;
11301
11302function isError(e) {
11303 return isObject(e) &&
11304 (objectToString(e) === '[object Error]' || e instanceof Error);
11305}
11306exports.isError = isError;
11307
11308function isFunction(arg) {
11309 return typeof arg === 'function';
11310}
11311exports.isFunction = isFunction;
11312
11313function isPrimitive(arg) {
11314 return arg === null ||
11315 typeof arg === 'boolean' ||
11316 typeof arg === 'number' ||
11317 typeof arg === 'string' ||
11318 typeof arg === 'symbol' || // ES6 symbol
11319 typeof arg === 'undefined';
11320}
11321exports.isPrimitive = isPrimitive;
11322
11323function isBuffer(arg) {
11324 return Buffer.isBuffer(arg);
11325}
11326exports.isBuffer = isBuffer;
11327
11328function objectToString(o) {
11329 return Object.prototype.toString.call(o);
11330}
11331}).call(this,require("buffer").Buffer)
11332},{"buffer":7}],22:[function(require,module,exports){
11333module.exports = require("./lib/_stream_passthrough.js")
11334
11335},{"./lib/_stream_passthrough.js":17}],23:[function(require,module,exports){
11336exports = module.exports = require('./lib/_stream_readable.js');
11337exports.Stream = require('stream');
11338exports.Readable = exports;
11339exports.Writable = require('./lib/_stream_writable.js');
11340exports.Duplex = require('./lib/_stream_duplex.js');
11341exports.Transform = require('./lib/_stream_transform.js');
11342exports.PassThrough = require('./lib/_stream_passthrough.js');
11343
11344},{"./lib/_stream_duplex.js":16,"./lib/_stream_passthrough.js":17,"./lib/_stream_readable.js":18,"./lib/_stream_transform.js":19,"./lib/_stream_writable.js":20,"stream":26}],24:[function(require,module,exports){
11345module.exports = require("./lib/_stream_transform.js")
11346
11347},{"./lib/_stream_transform.js":19}],25:[function(require,module,exports){
11348module.exports = require("./lib/_stream_writable.js")
11349
11350},{"./lib/_stream_writable.js":20}],26:[function(require,module,exports){
11351// Copyright Joyent, Inc. and other Node contributors.
11352//
11353// Permission is hereby granted, free of charge, to any person obtaining a
11354// copy of this software and associated documentation files (the
11355// "Software"), to deal in the Software without restriction, including
11356// without limitation the rights to use, copy, modify, merge, publish,
11357// distribute, sublicense, and/or sell copies of the Software, and to permit
11358// persons to whom the Software is furnished to do so, subject to the
11359// following conditions:
11360//
11361// The above copyright notice and this permission notice shall be included
11362// in all copies or substantial portions of the Software.
11363//
11364// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
11365// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
11366// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
11367// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
11368// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
11369// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
11370// USE OR OTHER DEALINGS IN THE SOFTWARE.
11371
11372module.exports = Stream;
11373
11374var EE = require('events').EventEmitter;
11375var inherits = require('inherits');
11376
11377inherits(Stream, EE);
11378Stream.Readable = require('readable-stream/readable.js');
11379Stream.Writable = require('readable-stream/writable.js');
11380Stream.Duplex = require('readable-stream/duplex.js');
11381Stream.Transform = require('readable-stream/transform.js');
11382Stream.PassThrough = require('readable-stream/passthrough.js');
11383
11384// Backwards-compat with node 0.4.x
11385Stream.Stream = Stream;
11386
11387
11388
11389// old-style streams. Note that the pipe method (the only relevant
11390// part of this class) is overridden in the Readable class.
11391
11392function Stream() {
11393 EE.call(this);
11394}
11395
11396Stream.prototype.pipe = function(dest, options) {
11397 var source = this;
11398
11399 function ondata(chunk) {
11400 if (dest.writable) {
11401 if (false === dest.write(chunk) && source.pause) {
11402 source.pause();
11403 }
11404 }
11405 }
11406
11407 source.on('data', ondata);
11408
11409 function ondrain() {
11410 if (source.readable && source.resume) {
11411 source.resume();
11412 }
11413 }
11414
11415 dest.on('drain', ondrain);
11416
11417 // If the 'end' option is not supplied, dest.end() will be called when
11418 // source gets the 'end' or 'close' events. Only dest.end() once.
11419 if (!dest._isStdio && (!options || options.end !== false)) {
11420 source.on('end', onend);
11421 source.on('close', onclose);
11422 }
11423
11424 var didOnEnd = false;
11425 function onend() {
11426 if (didOnEnd) return;
11427 didOnEnd = true;
11428
11429 dest.end();
11430 }
11431
11432
11433 function onclose() {
11434 if (didOnEnd) return;
11435 didOnEnd = true;
11436
11437 if (typeof dest.destroy === 'function') dest.destroy();
11438 }
11439
11440 // don't leave dangling pipes when there are errors.
11441 function onerror(er) {
11442 cleanup();
11443 if (EE.listenerCount(this, 'error') === 0) {
11444 throw er; // Unhandled stream error in pipe.
11445 }
11446 }
11447
11448 source.on('error', onerror);
11449 dest.on('error', onerror);
11450
11451 // remove all the event listeners that were added.
11452 function cleanup() {
11453 source.removeListener('data', ondata);
11454 dest.removeListener('drain', ondrain);
11455
11456 source.removeListener('end', onend);
11457 source.removeListener('close', onclose);
11458
11459 source.removeListener('error', onerror);
11460 dest.removeListener('error', onerror);
11461
11462 source.removeListener('end', cleanup);
11463 source.removeListener('close', cleanup);
11464
11465 dest.removeListener('close', cleanup);
11466 }
11467
11468 source.on('end', cleanup);
11469 source.on('close', cleanup);
11470
11471 dest.on('close', cleanup);
11472
11473 dest.emit('pipe', source);
11474
11475 // Allow for unix-like usage: A.pipe(B).pipe(C)
11476 return dest;
11477};
11478
11479},{"events":11,"inherits":12,"readable-stream/duplex.js":15,"readable-stream/passthrough.js":22,"readable-stream/readable.js":23,"readable-stream/transform.js":24,"readable-stream/writable.js":25}],27:[function(require,module,exports){
11480// Copyright Joyent, Inc. and other Node contributors.
11481//
11482// Permission is hereby granted, free of charge, to any person obtaining a
11483// copy of this software and associated documentation files (the
11484// "Software"), to deal in the Software without restriction, including
11485// without limitation the rights to use, copy, modify, merge, publish,
11486// distribute, sublicense, and/or sell copies of the Software, and to permit
11487// persons to whom the Software is furnished to do so, subject to the
11488// following conditions:
11489//
11490// The above copyright notice and this permission notice shall be included
11491// in all copies or substantial portions of the Software.
11492//
11493// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
11494// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
11495// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
11496// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
11497// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
11498// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
11499// USE OR OTHER DEALINGS IN THE SOFTWARE.
11500
11501var Buffer = require('buffer').Buffer;
11502
11503var isBufferEncoding = Buffer.isEncoding
11504 || function(encoding) {
11505 switch (encoding && encoding.toLowerCase()) {
11506 case 'hex': case 'utf8': case 'utf-8': case 'ascii': case 'binary': case 'base64': case 'ucs2': case 'ucs-2': case 'utf16le': case 'utf-16le': case 'raw': return true;
11507 default: return false;
11508 }
11509 }
11510
11511
11512function assertEncoding(encoding) {
11513 if (encoding && !isBufferEncoding(encoding)) {
11514 throw new Error('Unknown encoding: ' + encoding);
11515 }
11516}
11517
11518// StringDecoder provides an interface for efficiently splitting a series of
11519// buffers into a series of JS strings without breaking apart multi-byte
11520// characters. CESU-8 is handled as part of the UTF-8 encoding.
11521//
11522// @TODO Handling all encodings inside a single object makes it very difficult
11523// to reason about this code, so it should be split up in the future.
11524// @TODO There should be a utf8-strict encoding that rejects invalid UTF-8 code
11525// points as used by CESU-8.
11526var StringDecoder = exports.StringDecoder = function(encoding) {
11527 this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, '');
11528 assertEncoding(encoding);
11529 switch (this.encoding) {
11530 case 'utf8':
11531 // CESU-8 represents each of Surrogate Pair by 3-bytes
11532 this.surrogateSize = 3;
11533 break;
11534 case 'ucs2':
11535 case 'utf16le':
11536 // UTF-16 represents each of Surrogate Pair by 2-bytes
11537 this.surrogateSize = 2;
11538 this.detectIncompleteChar = utf16DetectIncompleteChar;
11539 break;
11540 case 'base64':
11541 // Base-64 stores 3 bytes in 4 chars, and pads the remainder.
11542 this.surrogateSize = 3;
11543 this.detectIncompleteChar = base64DetectIncompleteChar;
11544 break;
11545 default:
11546 this.write = passThroughWrite;
11547 return;
11548 }
11549
11550 // Enough space to store all bytes of a single character. UTF-8 needs 4
11551 // bytes, but CESU-8 may require up to 6 (3 bytes per surrogate).
11552 this.charBuffer = new Buffer(6);
11553 // Number of bytes received for the current incomplete multi-byte character.
11554 this.charReceived = 0;
11555 // Number of bytes expected for the current incomplete multi-byte character.
11556 this.charLength = 0;
11557};
11558
11559
11560// write decodes the given buffer and returns it as JS string that is
11561// guaranteed to not contain any partial multi-byte characters. Any partial
11562// character found at the end of the buffer is buffered up, and will be
11563// returned when calling write again with the remaining bytes.
11564//
11565// Note: Converting a Buffer containing an orphan surrogate to a String
11566// currently works, but converting a String to a Buffer (via `new Buffer`, or
11567// Buffer#write) will replace incomplete surrogates with the unicode
11568// replacement character. See https://codereview.chromium.org/121173009/ .
11569StringDecoder.prototype.write = function(buffer) {
11570 var charStr = '';
11571 // if our last write ended with an incomplete multibyte character
11572 while (this.charLength) {
11573 // determine how many remaining bytes this buffer has to offer for this char
11574 var available = (buffer.length >= this.charLength - this.charReceived) ?
11575 this.charLength - this.charReceived :
11576 buffer.length;
11577
11578 // add the new bytes to the char buffer
11579 buffer.copy(this.charBuffer, this.charReceived, 0, available);
11580 this.charReceived += available;
11581
11582 if (this.charReceived < this.charLength) {
11583 // still not enough chars in this buffer? wait for more ...
11584 return '';
11585 }
11586
11587 // remove bytes belonging to the current character from the buffer
11588 buffer = buffer.slice(available, buffer.length);
11589
11590 // get the character that was split
11591 charStr = this.charBuffer.slice(0, this.charLength).toString(this.encoding);
11592
11593 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
11594 var charCode = charStr.charCodeAt(charStr.length - 1);
11595 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
11596 this.charLength += this.surrogateSize;
11597 charStr = '';
11598 continue;
11599 }
11600 this.charReceived = this.charLength = 0;
11601
11602 // if there are no more bytes in this buffer, just emit our char
11603 if (buffer.length === 0) {
11604 return charStr;
11605 }
11606 break;
11607 }
11608
11609 // determine and set charLength / charReceived
11610 this.detectIncompleteChar(buffer);
11611
11612 var end = buffer.length;
11613 if (this.charLength) {
11614 // buffer the incomplete character bytes we got
11615 buffer.copy(this.charBuffer, 0, buffer.length - this.charReceived, end);
11616 end -= this.charReceived;
11617 }
11618
11619 charStr += buffer.toString(this.encoding, 0, end);
11620
11621 var end = charStr.length - 1;
11622 var charCode = charStr.charCodeAt(end);
11623 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
11624 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
11625 var size = this.surrogateSize;
11626 this.charLength += size;
11627 this.charReceived += size;
11628 this.charBuffer.copy(this.charBuffer, size, 0, size);
11629 buffer.copy(this.charBuffer, 0, 0, size);
11630 return charStr.substring(0, end);
11631 }
11632
11633 // or just emit the charStr
11634 return charStr;
11635};
11636
11637// detectIncompleteChar determines if there is an incomplete UTF-8 character at
11638// the end of the given buffer. If so, it sets this.charLength to the byte
11639// length that character, and sets this.charReceived to the number of bytes
11640// that are available for this character.
11641StringDecoder.prototype.detectIncompleteChar = function(buffer) {
11642 // determine how many bytes we have to check at the end of this buffer
11643 var i = (buffer.length >= 3) ? 3 : buffer.length;
11644
11645 // Figure out if one of the last i bytes of our buffer announces an
11646 // incomplete char.
11647 for (; i > 0; i--) {
11648 var c = buffer[buffer.length - i];
11649
11650 // See http://en.wikipedia.org/wiki/UTF-8#Description
11651
11652 // 110XXXXX
11653 if (i == 1 && c >> 5 == 0x06) {
11654 this.charLength = 2;
11655 break;
11656 }
11657
11658 // 1110XXXX
11659 if (i <= 2 && c >> 4 == 0x0E) {
11660 this.charLength = 3;
11661 break;
11662 }
11663
11664 // 11110XXX
11665 if (i <= 3 && c >> 3 == 0x1E) {
11666 this.charLength = 4;
11667 break;
11668 }
11669 }
11670 this.charReceived = i;
11671};
11672
11673StringDecoder.prototype.end = function(buffer) {
11674 var res = '';
11675 if (buffer && buffer.length)
11676 res = this.write(buffer);
11677
11678 if (this.charReceived) {
11679 var cr = this.charReceived;
11680 var buf = this.charBuffer;
11681 var enc = this.encoding;
11682 res += buf.slice(0, cr).toString(enc);
11683 }
11684
11685 return res;
11686};
11687
11688function passThroughWrite(buffer) {
11689 return buffer.toString(this.encoding);
11690}
11691
11692function utf16DetectIncompleteChar(buffer) {
11693 this.charReceived = buffer.length % 2;
11694 this.charLength = this.charReceived ? 2 : 0;
11695}
11696
11697function base64DetectIncompleteChar(buffer) {
11698 this.charReceived = buffer.length % 3;
11699 this.charLength = this.charReceived ? 3 : 0;
11700}
11701
11702},{"buffer":7}],28:[function(require,module,exports){
11703module.exports = function isBuffer(arg) {
11704 return arg && typeof arg === 'object'
11705 && typeof arg.copy === 'function'
11706 && typeof arg.fill === 'function'
11707 && typeof arg.readUInt8 === 'function';
11708}
11709},{}],29:[function(require,module,exports){
11710(function (process,global){
11711// Copyright Joyent, Inc. and other Node contributors.
11712//
11713// Permission is hereby granted, free of charge, to any person obtaining a
11714// copy of this software and associated documentation files (the
11715// "Software"), to deal in the Software without restriction, including
11716// without limitation the rights to use, copy, modify, merge, publish,
11717// distribute, sublicense, and/or sell copies of the Software, and to permit
11718// persons to whom the Software is furnished to do so, subject to the
11719// following conditions:
11720//
11721// The above copyright notice and this permission notice shall be included
11722// in all copies or substantial portions of the Software.
11723//
11724// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
11725// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
11726// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
11727// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
11728// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
11729// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
11730// USE OR OTHER DEALINGS IN THE SOFTWARE.
11731
11732var formatRegExp = /%[sdj%]/g;
11733exports.format = function(f) {
11734 if (!isString(f)) {
11735 var objects = [];
11736 for (var i = 0; i < arguments.length; i++) {
11737 objects.push(inspect(arguments[i]));
11738 }
11739 return objects.join(' ');
11740 }
11741
11742 var i = 1;
11743 var args = arguments;
11744 var len = args.length;
11745 var str = String(f).replace(formatRegExp, function(x) {
11746 if (x === '%%') return '%';
11747 if (i >= len) return x;
11748 switch (x) {
11749 case '%s': return String(args[i++]);
11750 case '%d': return Number(args[i++]);
11751 case '%j':
11752 try {
11753 return JSON.stringify(args[i++]);
11754 } catch (_) {
11755 return '[Circular]';
11756 }
11757 default:
11758 return x;
11759 }
11760 });
11761 for (var x = args[i]; i < len; x = args[++i]) {
11762 if (isNull(x) || !isObject(x)) {
11763 str += ' ' + x;
11764 } else {
11765 str += ' ' + inspect(x);
11766 }
11767 }
11768 return str;
11769};
11770
11771
11772// Mark that a method should not be used.
11773// Returns a modified function which warns once by default.
11774// If --no-deprecation is set, then it is a no-op.
11775exports.deprecate = function(fn, msg) {
11776 // Allow for deprecating things in the process of starting up.
11777 if (isUndefined(global.process)) {
11778 return function() {
11779 return exports.deprecate(fn, msg).apply(this, arguments);
11780 };
11781 }
11782
11783 if (process.noDeprecation === true) {
11784 return fn;
11785 }
11786
11787 var warned = false;
11788 function deprecated() {
11789 if (!warned) {
11790 if (process.throwDeprecation) {
11791 throw new Error(msg);
11792 } else if (process.traceDeprecation) {
11793 console.trace(msg);
11794 } else {
11795 console.error(msg);
11796 }
11797 warned = true;
11798 }
11799 return fn.apply(this, arguments);
11800 }
11801
11802 return deprecated;
11803};
11804
11805
11806var debugs = {};
11807var debugEnviron;
11808exports.debuglog = function(set) {
11809 if (isUndefined(debugEnviron))
11810 debugEnviron = process.env.NODE_DEBUG || '';
11811 set = set.toUpperCase();
11812 if (!debugs[set]) {
11813 if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
11814 var pid = process.pid;
11815 debugs[set] = function() {
11816 var msg = exports.format.apply(exports, arguments);
11817 console.error('%s %d: %s', set, pid, msg);
11818 };
11819 } else {
11820 debugs[set] = function() {};
11821 }
11822 }
11823 return debugs[set];
11824};
11825
11826
11827/**
11828 * Echos the value of a value. Trys to print the value out
11829 * in the best way possible given the different types.
11830 *
11831 * @param {Object} obj The object to print out.
11832 * @param {Object} opts Optional options object that alters the output.
11833 */
11834/* legacy: obj, showHidden, depth, colors*/
11835function inspect(obj, opts) {
11836 // default options
11837 var ctx = {
11838 seen: [],
11839 stylize: stylizeNoColor
11840 };
11841 // legacy...
11842 if (arguments.length >= 3) ctx.depth = arguments[2];
11843 if (arguments.length >= 4) ctx.colors = arguments[3];
11844 if (isBoolean(opts)) {
11845 // legacy...
11846 ctx.showHidden = opts;
11847 } else if (opts) {
11848 // got an "options" object
11849 exports._extend(ctx, opts);
11850 }
11851 // set default options
11852 if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
11853 if (isUndefined(ctx.depth)) ctx.depth = 2;
11854 if (isUndefined(ctx.colors)) ctx.colors = false;
11855 if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
11856 if (ctx.colors) ctx.stylize = stylizeWithColor;
11857 return formatValue(ctx, obj, ctx.depth);
11858}
11859exports.inspect = inspect;
11860
11861
11862// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
11863inspect.colors = {
11864 'bold' : [1, 22],
11865 'italic' : [3, 23],
11866 'underline' : [4, 24],
11867 'inverse' : [7, 27],
11868 'white' : [37, 39],
11869 'grey' : [90, 39],
11870 'black' : [30, 39],
11871 'blue' : [34, 39],
11872 'cyan' : [36, 39],
11873 'green' : [32, 39],
11874 'magenta' : [35, 39],
11875 'red' : [31, 39],
11876 'yellow' : [33, 39]
11877};
11878
11879// Don't use 'blue' not visible on cmd.exe
11880inspect.styles = {
11881 'special': 'cyan',
11882 'number': 'yellow',
11883 'boolean': 'yellow',
11884 'undefined': 'grey',
11885 'null': 'bold',
11886 'string': 'green',
11887 'date': 'magenta',
11888 // "name": intentionally not styling
11889 'regexp': 'red'
11890};
11891
11892
11893function stylizeWithColor(str, styleType) {
11894 var style = inspect.styles[styleType];
11895
11896 if (style) {
11897 return '\u001b[' + inspect.colors[style][0] + 'm' + str +
11898 '\u001b[' + inspect.colors[style][1] + 'm';
11899 } else {
11900 return str;
11901 }
11902}
11903
11904
11905function stylizeNoColor(str, styleType) {
11906 return str;
11907}
11908
11909
11910function arrayToHash(array) {
11911 var hash = {};
11912
11913 array.forEach(function(val, idx) {
11914 hash[val] = true;
11915 });
11916
11917 return hash;
11918}
11919
11920
11921function formatValue(ctx, value, recurseTimes) {
11922 // Provide a hook for user-specified inspect functions.
11923 // Check that value is an object with an inspect function on it
11924 if (ctx.customInspect &&
11925 value &&
11926 isFunction(value.inspect) &&
11927 // Filter out the util module, it's inspect function is special
11928 value.inspect !== exports.inspect &&
11929 // Also filter out any prototype objects using the circular check.
11930 !(value.constructor && value.constructor.prototype === value)) {
11931 var ret = value.inspect(recurseTimes, ctx);
11932 if (!isString(ret)) {
11933 ret = formatValue(ctx, ret, recurseTimes);
11934 }
11935 return ret;
11936 }
11937
11938 // Primitive types cannot have properties
11939 var primitive = formatPrimitive(ctx, value);
11940 if (primitive) {
11941 return primitive;
11942 }
11943
11944 // Look up the keys of the object.
11945 var keys = Object.keys(value);
11946 var visibleKeys = arrayToHash(keys);
11947
11948 if (ctx.showHidden) {
11949 keys = Object.getOwnPropertyNames(value);
11950 }
11951
11952 // IE doesn't make error fields non-enumerable
11953 // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx
11954 if (isError(value)
11955 && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {
11956 return formatError(value);
11957 }
11958
11959 // Some type of object without properties can be shortcutted.
11960 if (keys.length === 0) {
11961 if (isFunction(value)) {
11962 var name = value.name ? ': ' + value.name : '';
11963 return ctx.stylize('[Function' + name + ']', 'special');
11964 }
11965 if (isRegExp(value)) {
11966 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
11967 }
11968 if (isDate(value)) {
11969 return ctx.stylize(Date.prototype.toString.call(value), 'date');
11970 }
11971 if (isError(value)) {
11972 return formatError(value);
11973 }
11974 }
11975
11976 var base = '', array = false, braces = ['{', '}'];
11977
11978 // Make Array say that they are Array
11979 if (isArray(value)) {
11980 array = true;
11981 braces = ['[', ']'];
11982 }
11983
11984 // Make functions say that they are functions
11985 if (isFunction(value)) {
11986 var n = value.name ? ': ' + value.name : '';
11987 base = ' [Function' + n + ']';
11988 }
11989
11990 // Make RegExps say that they are RegExps
11991 if (isRegExp(value)) {
11992 base = ' ' + RegExp.prototype.toString.call(value);
11993 }
11994
11995 // Make dates with properties first say the date
11996 if (isDate(value)) {
11997 base = ' ' + Date.prototype.toUTCString.call(value);
11998 }
11999
12000 // Make error with message first say the error
12001 if (isError(value)) {
12002 base = ' ' + formatError(value);
12003 }
12004
12005 if (keys.length === 0 && (!array || value.length == 0)) {
12006 return braces[0] + base + braces[1];
12007 }
12008
12009 if (recurseTimes < 0) {
12010 if (isRegExp(value)) {
12011 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
12012 } else {
12013 return ctx.stylize('[Object]', 'special');
12014 }
12015 }
12016
12017 ctx.seen.push(value);
12018
12019 var output;
12020 if (array) {
12021 output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
12022 } else {
12023 output = keys.map(function(key) {
12024 return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
12025 });
12026 }
12027
12028 ctx.seen.pop();
12029
12030 return reduceToSingleString(output, base, braces);
12031}
12032
12033
12034function formatPrimitive(ctx, value) {
12035 if (isUndefined(value))
12036 return ctx.stylize('undefined', 'undefined');
12037 if (isString(value)) {
12038 var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
12039 .replace(/'/g, "\\'")
12040 .replace(/\\"/g, '"') + '\'';
12041 return ctx.stylize(simple, 'string');
12042 }
12043 if (isNumber(value))
12044 return ctx.stylize('' + value, 'number');
12045 if (isBoolean(value))
12046 return ctx.stylize('' + value, 'boolean');
12047 // For some reason typeof null is "object", so special case here.
12048 if (isNull(value))
12049 return ctx.stylize('null', 'null');
12050}
12051
12052
12053function formatError(value) {
12054 return '[' + Error.prototype.toString.call(value) + ']';
12055}
12056
12057
12058function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
12059 var output = [];
12060 for (var i = 0, l = value.length; i < l; ++i) {
12061 if (hasOwnProperty(value, String(i))) {
12062 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
12063 String(i), true));
12064 } else {
12065 output.push('');
12066 }
12067 }
12068 keys.forEach(function(key) {
12069 if (!key.match(/^\d+$/)) {
12070 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
12071 key, true));
12072 }
12073 });
12074 return output;
12075}
12076
12077
12078function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
12079 var name, str, desc;
12080 desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
12081 if (desc.get) {
12082 if (desc.set) {
12083 str = ctx.stylize('[Getter/Setter]', 'special');
12084 } else {
12085 str = ctx.stylize('[Getter]', 'special');
12086 }
12087 } else {
12088 if (desc.set) {
12089 str = ctx.stylize('[Setter]', 'special');
12090 }
12091 }
12092 if (!hasOwnProperty(visibleKeys, key)) {
12093 name = '[' + key + ']';
12094 }
12095 if (!str) {
12096 if (ctx.seen.indexOf(desc.value) < 0) {
12097 if (isNull(recurseTimes)) {
12098 str = formatValue(ctx, desc.value, null);
12099 } else {
12100 str = formatValue(ctx, desc.value, recurseTimes - 1);
12101 }
12102 if (str.indexOf('\n') > -1) {
12103 if (array) {
12104 str = str.split('\n').map(function(line) {
12105 return ' ' + line;
12106 }).join('\n').substr(2);
12107 } else {
12108 str = '\n' + str.split('\n').map(function(line) {
12109 return ' ' + line;
12110 }).join('\n');
12111 }
12112 }
12113 } else {
12114 str = ctx.stylize('[Circular]', 'special');
12115 }
12116 }
12117 if (isUndefined(name)) {
12118 if (array && key.match(/^\d+$/)) {
12119 return str;
12120 }
12121 name = JSON.stringify('' + key);
12122 if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
12123 name = name.substr(1, name.length - 2);
12124 name = ctx.stylize(name, 'name');
12125 } else {
12126 name = name.replace(/'/g, "\\'")
12127 .replace(/\\"/g, '"')
12128 .replace(/(^"|"$)/g, "'");
12129 name = ctx.stylize(name, 'string');
12130 }
12131 }
12132
12133 return name + ': ' + str;
12134}
12135
12136
12137function reduceToSingleString(output, base, braces) {
12138 var numLinesEst = 0;
12139 var length = output.reduce(function(prev, cur) {
12140 numLinesEst++;
12141 if (cur.indexOf('\n') >= 0) numLinesEst++;
12142 return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;
12143 }, 0);
12144
12145 if (length > 60) {
12146 return braces[0] +
12147 (base === '' ? '' : base + '\n ') +
12148 ' ' +
12149 output.join(',\n ') +
12150 ' ' +
12151 braces[1];
12152 }
12153
12154 return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
12155}
12156
12157
12158// NOTE: These type checking functions intentionally don't use `instanceof`
12159// because it is fragile and can be easily faked with `Object.create()`.
12160function isArray(ar) {
12161 return Array.isArray(ar);
12162}
12163exports.isArray = isArray;
12164
12165function isBoolean(arg) {
12166 return typeof arg === 'boolean';
12167}
12168exports.isBoolean = isBoolean;
12169
12170function isNull(arg) {
12171 return arg === null;
12172}
12173exports.isNull = isNull;
12174
12175function isNullOrUndefined(arg) {
12176 return arg == null;
12177}
12178exports.isNullOrUndefined = isNullOrUndefined;
12179
12180function isNumber(arg) {
12181 return typeof arg === 'number';
12182}
12183exports.isNumber = isNumber;
12184
12185function isString(arg) {
12186 return typeof arg === 'string';
12187}
12188exports.isString = isString;
12189
12190function isSymbol(arg) {
12191 return typeof arg === 'symbol';
12192}
12193exports.isSymbol = isSymbol;
12194
12195function isUndefined(arg) {
12196 return arg === void 0;
12197}
12198exports.isUndefined = isUndefined;
12199
12200function isRegExp(re) {
12201 return isObject(re) && objectToString(re) === '[object RegExp]';
12202}
12203exports.isRegExp = isRegExp;
12204
12205function isObject(arg) {
12206 return typeof arg === 'object' && arg !== null;
12207}
12208exports.isObject = isObject;
12209
12210function isDate(d) {
12211 return isObject(d) && objectToString(d) === '[object Date]';
12212}
12213exports.isDate = isDate;
12214
12215function isError(e) {
12216 return isObject(e) &&
12217 (objectToString(e) === '[object Error]' || e instanceof Error);
12218}
12219exports.isError = isError;
12220
12221function isFunction(arg) {
12222 return typeof arg === 'function';
12223}
12224exports.isFunction = isFunction;
12225
12226function isPrimitive(arg) {
12227 return arg === null ||
12228 typeof arg === 'boolean' ||
12229 typeof arg === 'number' ||
12230 typeof arg === 'string' ||
12231 typeof arg === 'symbol' || // ES6 symbol
12232 typeof arg === 'undefined';
12233}
12234exports.isPrimitive = isPrimitive;
12235
12236exports.isBuffer = require('./support/isBuffer');
12237
12238function objectToString(o) {
12239 return Object.prototype.toString.call(o);
12240}
12241
12242
12243function pad(n) {
12244 return n < 10 ? '0' + n.toString(10) : n.toString(10);
12245}
12246
12247
12248var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
12249 'Oct', 'Nov', 'Dec'];
12250
12251// 26 Feb 16:19:34
12252function timestamp() {
12253 var d = new Date();
12254 var time = [pad(d.getHours()),
12255 pad(d.getMinutes()),
12256 pad(d.getSeconds())].join(':');
12257 return [d.getDate(), months[d.getMonth()], time].join(' ');
12258}
12259
12260
12261// log is just a thin wrapper to console.log that prepends a timestamp
12262exports.log = function() {
12263 console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
12264};
12265
12266
12267/**
12268 * Inherit the prototype methods from one constructor into another.
12269 *
12270 * The Function.prototype.inherits from lang.js rewritten as a standalone
12271 * function (not on Function.prototype). NOTE: If this file is to be loaded
12272 * during bootstrapping this function needs to be rewritten using some native
12273 * functions as prototype setup using normal JavaScript does not work as
12274 * expected during bootstrapping (see mirror.js in r114903).
12275 *
12276 * @param {function} ctor Constructor function which needs to inherit the
12277 * prototype.
12278 * @param {function} superCtor Constructor function to inherit prototype from.
12279 */
12280exports.inherits = require('inherits');
12281
12282exports._extend = function(origin, add) {
12283 // Don't do anything if add isn't an object
12284 if (!add || !isObject(add)) return origin;
12285
12286 var keys = Object.keys(add);
12287 var i = keys.length;
12288 while (i--) {
12289 origin[keys[i]] = add[keys[i]];
12290 }
12291 return origin;
12292};
12293
12294function hasOwnProperty(obj, prop) {
12295 return Object.prototype.hasOwnProperty.call(obj, prop);
12296}
12297
12298}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
12299},{"./support/isBuffer":28,"_process":14,"inherits":12}],30:[function(require,module,exports){
12300// Base58 encoding/decoding
12301// Originally written by Mike Hearn for BitcoinJ
12302// Copyright (c) 2011 Google Inc
12303// Ported to JavaScript by Stefan Thomas
12304// Merged Buffer refactorings from base58-native by Stephen Pair
12305// Copyright (c) 2013 BitPay Inc
12306
12307var ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
12308var ALPHABET_MAP = {}
12309for(var i = 0; i < ALPHABET.length; i++) {
12310 ALPHABET_MAP[ALPHABET.charAt(i)] = i
12311}
12312var BASE = 58
12313
12314function encode(buffer) {
12315 if (buffer.length === 0) return ''
12316
12317 var i, j, digits = [0]
12318 for (i = 0; i < buffer.length; i++) {
12319 for (j = 0; j < digits.length; j++) digits[j] <<= 8
12320
12321 digits[0] += buffer[i]
12322
12323 var carry = 0
12324 for (j = 0; j < digits.length; ++j) {
12325 digits[j] += carry
12326
12327 carry = (digits[j] / BASE) | 0
12328 digits[j] %= BASE
12329 }
12330
12331 while (carry) {
12332 digits.push(carry % BASE)
12333
12334 carry = (carry / BASE) | 0
12335 }
12336 }
12337
12338 // deal with leading zeros
12339 for (i = 0; buffer[i] === 0 && i < buffer.length - 1; i++) digits.push(0)
12340
12341 // convert digits to a string
12342 var stringOutput = ""
12343 for (var i = digits.length - 1; i >= 0; i--) {
12344 stringOutput = stringOutput + ALPHABET[digits[i]]
12345 }
12346 return stringOutput
12347}
12348
12349function decode(string) {
12350 if (string.length === 0) return []
12351
12352 var i, j, bytes = [0]
12353 for (i = 0; i < string.length; i++) {
12354 var c = string[i]
12355 if (!(c in ALPHABET_MAP)) throw new Error('Non-base58 character')
12356
12357 for (j = 0; j < bytes.length; j++) bytes[j] *= BASE
12358 bytes[0] += ALPHABET_MAP[c]
12359
12360 var carry = 0
12361 for (j = 0; j < bytes.length; ++j) {
12362 bytes[j] += carry
12363
12364 carry = bytes[j] >> 8
12365 bytes[j] &= 0xff
12366 }
12367
12368 while (carry) {
12369 bytes.push(carry & 0xff)
12370
12371 carry >>= 8
12372 }
12373 }
12374
12375 // deal with leading zeros
12376 for (i = 0; string[i] === '1' && i < string.length - 1; i++) bytes.push(0)
12377
12378 return bytes.reverse()
12379}
12380
12381module.exports = {
12382 encode: encode,
12383 decode: decode
12384}
12385
12386},{}],31:[function(require,module,exports){
12387(function (Buffer){
12388'use strict'
12389
12390var base58 = require('bs58')
12391var createHash = require('create-hash')
12392
12393// SHA256(SHA256(buffer))
12394function sha256x2 (buffer) {
12395 buffer = createHash('sha256').update(buffer).digest()
12396 return createHash('sha256').update(buffer).digest()
12397}
12398
12399// Encode a buffer as a base58-check encoded string
12400function encode (payload) {
12401 var checksum = sha256x2(payload).slice(0, 4)
12402
12403 return base58.encode(Buffer.concat([
12404 payload,
12405 checksum
12406 ]))
12407}
12408
12409// Decode a base58-check encoded string to a buffer
12410function decode (string) {
12411 var buffer = new Buffer(base58.decode(string))
12412
12413 var payload = buffer.slice(0, -4)
12414 var checksum = buffer.slice(-4)
12415 var newChecksum = sha256x2(payload).slice(0, 4)
12416
12417 for (var i = 0; i < newChecksum.length; ++i) {
12418 if (newChecksum[i] === checksum[i]) continue
12419
12420 throw new Error('Invalid checksum')
12421 }
12422
12423 return payload
12424}
12425
12426module.exports = {
12427 encode: encode,
12428 decode: decode
12429}
12430
12431}).call(this,require("buffer").Buffer)
12432},{"bs58":30,"buffer":7,"create-hash":32}],32:[function(require,module,exports){
12433(function (Buffer){
12434'use strict';
12435var inherits = require('inherits')
12436var md5 = require('./md5')
12437var rmd160 = require('ripemd160')
12438var sha = require('sha.js')
12439
12440var Transform = require('stream').Transform
12441
12442function HashNoConstructor(hash) {
12443 Transform.call(this)
12444
12445 this._hash = hash
12446 this.buffers = []
12447}
12448
12449inherits(HashNoConstructor, Transform)
12450
12451HashNoConstructor.prototype._transform = function (data, _, next) {
12452 this.buffers.push(data)
12453
12454 next()
12455}
12456
12457HashNoConstructor.prototype._flush = function (next) {
12458 this.push(this.digest())
12459 next()
12460}
12461
12462HashNoConstructor.prototype.update = function (data, enc) {
12463 if (typeof data === 'string') {
12464 data = new Buffer(data, enc)
12465 }
12466
12467 this.buffers.push(data)
12468 return this
12469}
12470
12471HashNoConstructor.prototype.digest = function (enc) {
12472 var buf = Buffer.concat(this.buffers)
12473 var r = this._hash(buf)
12474 this.buffers = null
12475
12476 return enc ? r.toString(enc) : r
12477}
12478
12479function Hash(hash) {
12480 Transform.call(this)
12481
12482 this._hash = hash
12483}
12484
12485inherits(Hash, Transform)
12486
12487Hash.prototype._transform = function (data, enc, next) {
12488 if (enc) data = new Buffer(data, enc)
12489
12490 this._hash.update(data)
12491
12492 next()
12493}
12494
12495Hash.prototype._flush = function (next) {
12496 this.push(this._hash.digest())
12497 this._hash = null
12498
12499 next()
12500}
12501
12502Hash.prototype.update = function (data, enc) {
12503 if (typeof data === 'string') {
12504 data = new Buffer(data, enc)
12505 }
12506
12507 this._hash.update(data)
12508 return this
12509}
12510
12511Hash.prototype.digest = function (enc) {
12512 var outData = this._hash.digest()
12513
12514 return enc ? outData.toString(enc) : outData
12515}
12516
12517module.exports = function createHash (alg) {
12518 if ('md5' === alg) return new HashNoConstructor(md5)
12519 if ('rmd160' === alg) return new HashNoConstructor(rmd160)
12520
12521 return new Hash(sha(alg))
12522}
12523
12524}).call(this,require("buffer").Buffer)
12525},{"./md5":34,"buffer":7,"inherits":35,"ripemd160":36,"sha.js":38,"stream":26}],33:[function(require,module,exports){
12526(function (Buffer){
12527'use strict';
12528var intSize = 4;
12529var zeroBuffer = new Buffer(intSize); zeroBuffer.fill(0);
12530var chrsz = 8;
12531
12532function toArray(buf, bigEndian) {
12533 if ((buf.length % intSize) !== 0) {
12534 var len = buf.length + (intSize - (buf.length % intSize));
12535 buf = Buffer.concat([buf, zeroBuffer], len);
12536 }
12537
12538 var arr = [];
12539 var fn = bigEndian ? buf.readInt32BE : buf.readInt32LE;
12540 for (var i = 0; i < buf.length; i += intSize) {
12541 arr.push(fn.call(buf, i));
12542 }
12543 return arr;
12544}
12545
12546function toBuffer(arr, size, bigEndian) {
12547 var buf = new Buffer(size);
12548 var fn = bigEndian ? buf.writeInt32BE : buf.writeInt32LE;
12549 for (var i = 0; i < arr.length; i++) {
12550 fn.call(buf, arr[i], i * 4, true);
12551 }
12552 return buf;
12553}
12554
12555function hash(buf, fn, hashSize, bigEndian) {
12556 if (!Buffer.isBuffer(buf)) buf = new Buffer(buf);
12557 var arr = fn(toArray(buf, bigEndian), buf.length * chrsz);
12558 return toBuffer(arr, hashSize, bigEndian);
12559}
12560exports.hash = hash;
12561}).call(this,require("buffer").Buffer)
12562},{"buffer":7}],34:[function(require,module,exports){
12563'use strict';
12564/*
12565 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
12566 * Digest Algorithm, as defined in RFC 1321.
12567 * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
12568 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
12569 * Distributed under the BSD License
12570 * See http://pajhome.org.uk/crypt/md5 for more info.
12571 */
12572
12573var helpers = require('./helpers');
12574
12575/*
12576 * Calculate the MD5 of an array of little-endian words, and a bit length
12577 */
12578function core_md5(x, len)
12579{
12580 /* append padding */
12581 x[len >> 5] |= 0x80 << ((len) % 32);
12582 x[(((len + 64) >>> 9) << 4) + 14] = len;
12583
12584 var a = 1732584193;
12585 var b = -271733879;
12586 var c = -1732584194;
12587 var d = 271733878;
12588
12589 for(var i = 0; i < x.length; i += 16)
12590 {
12591 var olda = a;
12592 var oldb = b;
12593 var oldc = c;
12594 var oldd = d;
12595
12596 a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936);
12597 d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586);
12598 c = md5_ff(c, d, a, b, x[i+ 2], 17, 606105819);
12599 b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330);
12600 a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897);
12601 d = md5_ff(d, a, b, c, x[i+ 5], 12, 1200080426);
12602 c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341);
12603 b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983);
12604 a = md5_ff(a, b, c, d, x[i+ 8], 7 , 1770035416);
12605 d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417);
12606 c = md5_ff(c, d, a, b, x[i+10], 17, -42063);
12607 b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162);
12608 a = md5_ff(a, b, c, d, x[i+12], 7 , 1804603682);
12609 d = md5_ff(d, a, b, c, x[i+13], 12, -40341101);
12610 c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290);
12611 b = md5_ff(b, c, d, a, x[i+15], 22, 1236535329);
12612
12613 a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510);
12614 d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632);
12615 c = md5_gg(c, d, a, b, x[i+11], 14, 643717713);
12616 b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302);
12617 a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691);
12618 d = md5_gg(d, a, b, c, x[i+10], 9 , 38016083);
12619 c = md5_gg(c, d, a, b, x[i+15], 14, -660478335);
12620 b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848);
12621 a = md5_gg(a, b, c, d, x[i+ 9], 5 , 568446438);
12622 d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690);
12623 c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961);
12624 b = md5_gg(b, c, d, a, x[i+ 8], 20, 1163531501);
12625 a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467);
12626 d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784);
12627 c = md5_gg(c, d, a, b, x[i+ 7], 14, 1735328473);
12628 b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734);
12629
12630 a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558);
12631 d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463);
12632 c = md5_hh(c, d, a, b, x[i+11], 16, 1839030562);
12633 b = md5_hh(b, c, d, a, x[i+14], 23, -35309556);
12634 a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060);
12635 d = md5_hh(d, a, b, c, x[i+ 4], 11, 1272893353);
12636 c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632);
12637 b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640);
12638 a = md5_hh(a, b, c, d, x[i+13], 4 , 681279174);
12639 d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222);
12640 c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979);
12641 b = md5_hh(b, c, d, a, x[i+ 6], 23, 76029189);
12642 a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487);
12643 d = md5_hh(d, a, b, c, x[i+12], 11, -421815835);
12644 c = md5_hh(c, d, a, b, x[i+15], 16, 530742520);
12645 b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651);
12646
12647 a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844);
12648 d = md5_ii(d, a, b, c, x[i+ 7], 10, 1126891415);
12649 c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905);
12650 b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055);
12651 a = md5_ii(a, b, c, d, x[i+12], 6 , 1700485571);
12652 d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606);
12653 c = md5_ii(c, d, a, b, x[i+10], 15, -1051523);
12654 b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799);
12655 a = md5_ii(a, b, c, d, x[i+ 8], 6 , 1873313359);
12656 d = md5_ii(d, a, b, c, x[i+15], 10, -30611744);
12657 c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380);
12658 b = md5_ii(b, c, d, a, x[i+13], 21, 1309151649);
12659 a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070);
12660 d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379);
12661 c = md5_ii(c, d, a, b, x[i+ 2], 15, 718787259);
12662 b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551);
12663
12664 a = safe_add(a, olda);
12665 b = safe_add(b, oldb);
12666 c = safe_add(c, oldc);
12667 d = safe_add(d, oldd);
12668 }
12669 return Array(a, b, c, d);
12670
12671}
12672
12673/*
12674 * These functions implement the four basic operations the algorithm uses.
12675 */
12676function md5_cmn(q, a, b, x, s, t)
12677{
12678 return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b);
12679}
12680function md5_ff(a, b, c, d, x, s, t)
12681{
12682 return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
12683}
12684function md5_gg(a, b, c, d, x, s, t)
12685{
12686 return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
12687}
12688function md5_hh(a, b, c, d, x, s, t)
12689{
12690 return md5_cmn(b ^ c ^ d, a, b, x, s, t);
12691}
12692function md5_ii(a, b, c, d, x, s, t)
12693{
12694 return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
12695}
12696
12697/*
12698 * Add integers, wrapping at 2^32. This uses 16-bit operations internally
12699 * to work around bugs in some JS interpreters.
12700 */
12701function safe_add(x, y)
12702{
12703 var lsw = (x & 0xFFFF) + (y & 0xFFFF);
12704 var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
12705 return (msw << 16) | (lsw & 0xFFFF);
12706}
12707
12708/*
12709 * Bitwise rotate a 32-bit number to the left.
12710 */
12711function bit_rol(num, cnt)
12712{
12713 return (num << cnt) | (num >>> (32 - cnt));
12714}
12715
12716module.exports = function md5(buf) {
12717 return helpers.hash(buf, core_md5, 16);
12718};
12719},{"./helpers":33}],35:[function(require,module,exports){
12720arguments[4][12][0].apply(exports,arguments)
12721},{"dup":12}],36:[function(require,module,exports){
12722(function (Buffer){
12723/*
12724CryptoJS v3.1.2
12725code.google.com/p/crypto-js
12726(c) 2009-2013 by Jeff Mott. All rights reserved.
12727code.google.com/p/crypto-js/wiki/License
12728*/
12729/** @preserve
12730(c) 2012 by Cédric Mesnil. All rights reserved.
12731
12732Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
12733
12734 - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
12735 - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
12736
12737THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
12738*/
12739
12740// constants table
12741var zl = [
12742 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
12743 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
12744 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
12745 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
12746 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
12747]
12748
12749var zr = [
12750 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
12751 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
12752 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
12753 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
12754 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
12755]
12756
12757var sl = [
12758 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
12759 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
12760 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
12761 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
12762 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
12763]
12764
12765var sr = [
12766 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
12767 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
12768 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
12769 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
12770 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
12771]
12772
12773var hl = [0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]
12774var hr = [0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]
12775
12776function bytesToWords (bytes) {
12777 var words = []
12778 for (var i = 0, b = 0; i < bytes.length; i++, b += 8) {
12779 words[b >>> 5] |= bytes[i] << (24 - b % 32)
12780 }
12781 return words
12782}
12783
12784function wordsToBytes (words) {
12785 var bytes = []
12786 for (var b = 0; b < words.length * 32; b += 8) {
12787 bytes.push((words[b >>> 5] >>> (24 - b % 32)) & 0xFF)
12788 }
12789 return bytes
12790}
12791
12792function processBlock (H, M, offset) {
12793 // swap endian
12794 for (var i = 0; i < 16; i++) {
12795 var offset_i = offset + i
12796 var M_offset_i = M[offset_i]
12797
12798 // Swap
12799 M[offset_i] = (
12800 (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |
12801 (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)
12802 )
12803 }
12804
12805 // Working variables
12806 var al, bl, cl, dl, el
12807 var ar, br, cr, dr, er
12808
12809 ar = al = H[0]
12810 br = bl = H[1]
12811 cr = cl = H[2]
12812 dr = dl = H[3]
12813 er = el = H[4]
12814
12815 // computation
12816 var t
12817 for (i = 0; i < 80; i += 1) {
12818 t = (al + M[offset + zl[i]]) | 0
12819 if (i < 16) {
12820 t += f1(bl, cl, dl) + hl[0]
12821 } else if (i < 32) {
12822 t += f2(bl, cl, dl) + hl[1]
12823 } else if (i < 48) {
12824 t += f3(bl, cl, dl) + hl[2]
12825 } else if (i < 64) {
12826 t += f4(bl, cl, dl) + hl[3]
12827 } else {// if (i<80) {
12828 t += f5(bl, cl, dl) + hl[4]
12829 }
12830 t = t | 0
12831 t = rotl(t, sl[i])
12832 t = (t + el) | 0
12833 al = el
12834 el = dl
12835 dl = rotl(cl, 10)
12836 cl = bl
12837 bl = t
12838
12839 t = (ar + M[offset + zr[i]]) | 0
12840 if (i < 16) {
12841 t += f5(br, cr, dr) + hr[0]
12842 } else if (i < 32) {
12843 t += f4(br, cr, dr) + hr[1]
12844 } else if (i < 48) {
12845 t += f3(br, cr, dr) + hr[2]
12846 } else if (i < 64) {
12847 t += f2(br, cr, dr) + hr[3]
12848 } else {// if (i<80) {
12849 t += f1(br, cr, dr) + hr[4]
12850 }
12851
12852 t = t | 0
12853 t = rotl(t, sr[i])
12854 t = (t + er) | 0
12855 ar = er
12856 er = dr
12857 dr = rotl(cr, 10)
12858 cr = br
12859 br = t
12860 }
12861
12862 // intermediate hash value
12863 t = (H[1] + cl + dr) | 0
12864 H[1] = (H[2] + dl + er) | 0
12865 H[2] = (H[3] + el + ar) | 0
12866 H[3] = (H[4] + al + br) | 0
12867 H[4] = (H[0] + bl + cr) | 0
12868 H[0] = t
12869}
12870
12871function f1 (x, y, z) {
12872 return ((x) ^ (y) ^ (z))
12873}
12874
12875function f2 (x, y, z) {
12876 return (((x) & (y)) | ((~x) & (z)))
12877}
12878
12879function f3 (x, y, z) {
12880 return (((x) | (~(y))) ^ (z))
12881}
12882
12883function f4 (x, y, z) {
12884 return (((x) & (z)) | ((y) & (~(z))))
12885}
12886
12887function f5 (x, y, z) {
12888 return ((x) ^ ((y) | (~(z))))
12889}
12890
12891function rotl (x, n) {
12892 return (x << n) | (x >>> (32 - n))
12893}
12894
12895function ripemd160 (message) {
12896 var H = [0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]
12897
12898 if (typeof message === 'string') {
12899 message = new Buffer(message, 'utf8')
12900 }
12901
12902 var m = bytesToWords(message)
12903
12904 var nBitsLeft = message.length * 8
12905 var nBitsTotal = message.length * 8
12906
12907 // Add padding
12908 m[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32)
12909 m[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (
12910 (((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff) |
12911 (((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00)
12912 )
12913
12914 for (var i = 0; i < m.length; i += 16) {
12915 processBlock(H, m, i)
12916 }
12917
12918 // swap endian
12919 for (i = 0; i < 5; i++) {
12920 // shortcut
12921 var H_i = H[i]
12922
12923 // Swap
12924 H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |
12925 (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00)
12926 }
12927
12928 var digestbytes = wordsToBytes(H)
12929 return new Buffer(digestbytes)
12930}
12931
12932module.exports = ripemd160
12933
12934}).call(this,require("buffer").Buffer)
12935},{"buffer":7}],37:[function(require,module,exports){
12936(function (Buffer){
12937// prototype class for hash functions
12938function Hash (blockSize, finalSize) {
12939 this._block = new Buffer(blockSize)
12940 this._finalSize = finalSize
12941 this._blockSize = blockSize
12942 this._len = 0
12943 this._s = 0
12944}
12945
12946Hash.prototype.update = function (data, enc) {
12947 if (typeof data === 'string') {
12948 enc = enc || 'utf8'
12949 data = new Buffer(data, enc)
12950 }
12951
12952 var l = this._len += data.length
12953 var s = this._s || 0
12954 var f = 0
12955 var buffer = this._block
12956
12957 while (s < l) {
12958 var t = Math.min(data.length, f + this._blockSize - (s % this._blockSize))
12959 var ch = (t - f)
12960
12961 for (var i = 0; i < ch; i++) {
12962 buffer[(s % this._blockSize) + i] = data[i + f]
12963 }
12964
12965 s += ch
12966 f += ch
12967
12968 if ((s % this._blockSize) === 0) {
12969 this._update(buffer)
12970 }
12971 }
12972 this._s = s
12973
12974 return this
12975}
12976
12977Hash.prototype.digest = function (enc) {
12978 // Suppose the length of the message M, in bits, is l
12979 var l = this._len * 8
12980
12981 // Append the bit 1 to the end of the message
12982 this._block[this._len % this._blockSize] = 0x80
12983
12984 // and then k zero bits, where k is the smallest non-negative solution to the equation (l + 1 + k) === finalSize mod blockSize
12985 this._block.fill(0, this._len % this._blockSize + 1)
12986
12987 if (l % (this._blockSize * 8) >= this._finalSize * 8) {
12988 this._update(this._block)
12989 this._block.fill(0)
12990 }
12991
12992 // to this append the block which is equal to the number l written in binary
12993 // TODO: handle case where l is > Math.pow(2, 29)
12994 this._block.writeInt32BE(l, this._blockSize - 4)
12995
12996 var hash = this._update(this._block) || this._hash()
12997
12998 return enc ? hash.toString(enc) : hash
12999}
13000
13001Hash.prototype._update = function () {
13002 throw new Error('_update must be implemented by subclass')
13003}
13004
13005module.exports = Hash
13006
13007}).call(this,require("buffer").Buffer)
13008},{"buffer":7}],38:[function(require,module,exports){
13009var exports = module.exports = function SHA (algorithm) {
13010 algorithm = algorithm.toLowerCase()
13011
13012 var Algorithm = exports[algorithm]
13013 if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')
13014
13015 return new Algorithm()
13016}
13017
13018exports.sha = require('./sha')
13019exports.sha1 = require('./sha1')
13020exports.sha224 = require('./sha224')
13021exports.sha256 = require('./sha256')
13022exports.sha384 = require('./sha384')
13023exports.sha512 = require('./sha512')
13024
13025},{"./sha":39,"./sha1":40,"./sha224":41,"./sha256":42,"./sha384":43,"./sha512":44}],39:[function(require,module,exports){
13026(function (Buffer){
13027/*
13028 * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined
13029 * in FIPS PUB 180-1
13030 * This source code is derived from sha1.js of the same repository.
13031 * The difference between SHA-0 and SHA-1 is just a bitwise rotate left
13032 * operation was added.
13033 */
13034
13035var inherits = require('inherits')
13036var Hash = require('./hash')
13037
13038var W = new Array(80)
13039
13040function Sha () {
13041 this.init()
13042 this._w = W
13043
13044 Hash.call(this, 64, 56)
13045}
13046
13047inherits(Sha, Hash)
13048
13049Sha.prototype.init = function () {
13050 this._a = 0x67452301 | 0
13051 this._b = 0xefcdab89 | 0
13052 this._c = 0x98badcfe | 0
13053 this._d = 0x10325476 | 0
13054 this._e = 0xc3d2e1f0 | 0
13055
13056 return this
13057}
13058
13059/*
13060 * Bitwise rotate a 32-bit number to the left.
13061 */
13062function rol (num, cnt) {
13063 return (num << cnt) | (num >>> (32 - cnt))
13064}
13065
13066Sha.prototype._update = function (M) {
13067 var W = this._w
13068
13069 var a = this._a
13070 var b = this._b
13071 var c = this._c
13072 var d = this._d
13073 var e = this._e
13074
13075 var j = 0, k
13076
13077 /*
13078 * SHA-1 has a bitwise rotate left operation. But, SHA is not
13079 * function calcW() { return rol(W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16], 1) }
13080 */
13081 function calcW () { return W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16] }
13082 function loop (w, f) {
13083 W[j] = w
13084
13085 var t = rol(a, 5) + f + e + w + k
13086
13087 e = d
13088 d = c
13089 c = rol(b, 30)
13090 b = a
13091 a = t
13092 j++
13093 }
13094
13095 k = 1518500249
13096 while (j < 16) loop(M.readInt32BE(j * 4), (b & c) | ((~b) & d))
13097 while (j < 20) loop(calcW(), (b & c) | ((~b) & d))
13098 k = 1859775393
13099 while (j < 40) loop(calcW(), b ^ c ^ d)
13100 k = -1894007588
13101 while (j < 60) loop(calcW(), (b & c) | (b & d) | (c & d))
13102 k = -899497514
13103 while (j < 80) loop(calcW(), b ^ c ^ d)
13104
13105 this._a = (a + this._a) | 0
13106 this._b = (b + this._b) | 0
13107 this._c = (c + this._c) | 0
13108 this._d = (d + this._d) | 0
13109 this._e = (e + this._e) | 0
13110}
13111
13112Sha.prototype._hash = function () {
13113 var H = new Buffer(20)
13114
13115 H.writeInt32BE(this._a | 0, 0)
13116 H.writeInt32BE(this._b | 0, 4)
13117 H.writeInt32BE(this._c | 0, 8)
13118 H.writeInt32BE(this._d | 0, 12)
13119 H.writeInt32BE(this._e | 0, 16)
13120
13121 return H
13122}
13123
13124module.exports = Sha
13125
13126
13127}).call(this,require("buffer").Buffer)
13128},{"./hash":37,"buffer":7,"inherits":35}],40:[function(require,module,exports){
13129(function (Buffer){
13130/*
13131 * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
13132 * in FIPS PUB 180-1
13133 * Version 2.1a Copyright Paul Johnston 2000 - 2002.
13134 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
13135 * Distributed under the BSD License
13136 * See http://pajhome.org.uk/crypt/md5 for details.
13137 */
13138
13139var inherits = require('inherits')
13140var Hash = require('./hash')
13141
13142var W = new Array(80)
13143
13144function Sha1 () {
13145 this.init()
13146 this._w = W
13147
13148 Hash.call(this, 64, 56)
13149}
13150
13151inherits(Sha1, Hash)
13152
13153Sha1.prototype.init = function () {
13154 this._a = 0x67452301 | 0
13155 this._b = 0xefcdab89 | 0
13156 this._c = 0x98badcfe | 0
13157 this._d = 0x10325476 | 0
13158 this._e = 0xc3d2e1f0 | 0
13159
13160 return this
13161}
13162
13163/*
13164 * Bitwise rotate a 32-bit number to the left.
13165 */
13166function rol (num, cnt) {
13167 return (num << cnt) | (num >>> (32 - cnt))
13168}
13169
13170Sha1.prototype._update = function (M) {
13171 var W = this._w
13172
13173 var a = this._a
13174 var b = this._b
13175 var c = this._c
13176 var d = this._d
13177 var e = this._e
13178
13179 var j = 0, k
13180
13181 function calcW () { return rol(W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16], 1) }
13182 function loop (w, f) {
13183 W[j] = w
13184
13185 var t = rol(a, 5) + f + e + w + k
13186
13187 e = d
13188 d = c
13189 c = rol(b, 30)
13190 b = a
13191 a = t
13192 j++
13193 }
13194
13195 k = 1518500249
13196 while (j < 16) loop(M.readInt32BE(j * 4), (b & c) | ((~b) & d))
13197 while (j < 20) loop(calcW(), (b & c) | ((~b) & d))
13198 k = 1859775393
13199 while (j < 40) loop(calcW(), b ^ c ^ d)
13200 k = -1894007588
13201 while (j < 60) loop(calcW(), (b & c) | (b & d) | (c & d))
13202 k = -899497514
13203 while (j < 80) loop(calcW(), b ^ c ^ d)
13204
13205 this._a = (a + this._a) | 0
13206 this._b = (b + this._b) | 0
13207 this._c = (c + this._c) | 0
13208 this._d = (d + this._d) | 0
13209 this._e = (e + this._e) | 0
13210}
13211
13212Sha1.prototype._hash = function () {
13213 var H = new Buffer(20)
13214
13215 H.writeInt32BE(this._a | 0, 0)
13216 H.writeInt32BE(this._b | 0, 4)
13217 H.writeInt32BE(this._c | 0, 8)
13218 H.writeInt32BE(this._d | 0, 12)
13219 H.writeInt32BE(this._e | 0, 16)
13220
13221 return H
13222}
13223
13224module.exports = Sha1
13225
13226}).call(this,require("buffer").Buffer)
13227},{"./hash":37,"buffer":7,"inherits":35}],41:[function(require,module,exports){
13228(function (Buffer){
13229/**
13230 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
13231 * in FIPS 180-2
13232 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
13233 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
13234 *
13235 */
13236
13237var inherits = require('inherits')
13238var Sha256 = require('./sha256')
13239var Hash = require('./hash')
13240
13241var W = new Array(64)
13242
13243function Sha224 () {
13244 this.init()
13245
13246 this._w = W // new Array(64)
13247
13248 Hash.call(this, 64, 56)
13249}
13250
13251inherits(Sha224, Sha256)
13252
13253Sha224.prototype.init = function () {
13254 this._a = 0xc1059ed8 | 0
13255 this._b = 0x367cd507 | 0
13256 this._c = 0x3070dd17 | 0
13257 this._d = 0xf70e5939 | 0
13258 this._e = 0xffc00b31 | 0
13259 this._f = 0x68581511 | 0
13260 this._g = 0x64f98fa7 | 0
13261 this._h = 0xbefa4fa4 | 0
13262
13263 return this
13264}
13265
13266Sha224.prototype._hash = function () {
13267 var H = new Buffer(28)
13268
13269 H.writeInt32BE(this._a, 0)
13270 H.writeInt32BE(this._b, 4)
13271 H.writeInt32BE(this._c, 8)
13272 H.writeInt32BE(this._d, 12)
13273 H.writeInt32BE(this._e, 16)
13274 H.writeInt32BE(this._f, 20)
13275 H.writeInt32BE(this._g, 24)
13276
13277 return H
13278}
13279
13280module.exports = Sha224
13281
13282}).call(this,require("buffer").Buffer)
13283},{"./hash":37,"./sha256":42,"buffer":7,"inherits":35}],42:[function(require,module,exports){
13284(function (Buffer){
13285/**
13286 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
13287 * in FIPS 180-2
13288 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
13289 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
13290 *
13291 */
13292
13293var inherits = require('inherits')
13294var Hash = require('./hash')
13295
13296var K = [
13297 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,
13298 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,
13299 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,
13300 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,
13301 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,
13302 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,
13303 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,
13304 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,
13305 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,
13306 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,
13307 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,
13308 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,
13309 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,
13310 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,
13311 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,
13312 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2
13313]
13314
13315var W = new Array(64)
13316
13317function Sha256 () {
13318 this.init()
13319
13320 this._w = W // new Array(64)
13321
13322 Hash.call(this, 64, 56)
13323}
13324
13325inherits(Sha256, Hash)
13326
13327Sha256.prototype.init = function () {
13328 this._a = 0x6a09e667 | 0
13329 this._b = 0xbb67ae85 | 0
13330 this._c = 0x3c6ef372 | 0
13331 this._d = 0xa54ff53a | 0
13332 this._e = 0x510e527f | 0
13333 this._f = 0x9b05688c | 0
13334 this._g = 0x1f83d9ab | 0
13335 this._h = 0x5be0cd19 | 0
13336
13337 return this
13338}
13339
13340function S (X, n) {
13341 return (X >>> n) | (X << (32 - n))
13342}
13343
13344function R (X, n) {
13345 return (X >>> n)
13346}
13347
13348function Ch (x, y, z) {
13349 return ((x & y) ^ ((~x) & z))
13350}
13351
13352function Maj (x, y, z) {
13353 return ((x & y) ^ (x & z) ^ (y & z))
13354}
13355
13356function Sigma0256 (x) {
13357 return (S(x, 2) ^ S(x, 13) ^ S(x, 22))
13358}
13359
13360function Sigma1256 (x) {
13361 return (S(x, 6) ^ S(x, 11) ^ S(x, 25))
13362}
13363
13364function Gamma0256 (x) {
13365 return (S(x, 7) ^ S(x, 18) ^ R(x, 3))
13366}
13367
13368function Gamma1256 (x) {
13369 return (S(x, 17) ^ S(x, 19) ^ R(x, 10))
13370}
13371
13372Sha256.prototype._update = function (M) {
13373 var W = this._w
13374
13375 var a = this._a | 0
13376 var b = this._b | 0
13377 var c = this._c | 0
13378 var d = this._d | 0
13379 var e = this._e | 0
13380 var f = this._f | 0
13381 var g = this._g | 0
13382 var h = this._h | 0
13383
13384 var j = 0
13385
13386 function calcW () { return Gamma1256(W[j - 2]) + W[j - 7] + Gamma0256(W[j - 15]) + W[j - 16] }
13387 function loop (w) {
13388 W[j] = w
13389
13390 var T1 = h + Sigma1256(e) + Ch(e, f, g) + K[j] + w
13391 var T2 = Sigma0256(a) + Maj(a, b, c)
13392
13393 h = g
13394 g = f
13395 f = e
13396 e = d + T1
13397 d = c
13398 c = b
13399 b = a
13400 a = T1 + T2
13401
13402 j++
13403 }
13404
13405 while (j < 16) loop(M.readInt32BE(j * 4))
13406 while (j < 64) loop(calcW())
13407
13408 this._a = (a + this._a) | 0
13409 this._b = (b + this._b) | 0
13410 this._c = (c + this._c) | 0
13411 this._d = (d + this._d) | 0
13412 this._e = (e + this._e) | 0
13413 this._f = (f + this._f) | 0
13414 this._g = (g + this._g) | 0
13415 this._h = (h + this._h) | 0
13416}
13417
13418Sha256.prototype._hash = function () {
13419 var H = new Buffer(32)
13420
13421 H.writeInt32BE(this._a, 0)
13422 H.writeInt32BE(this._b, 4)
13423 H.writeInt32BE(this._c, 8)
13424 H.writeInt32BE(this._d, 12)
13425 H.writeInt32BE(this._e, 16)
13426 H.writeInt32BE(this._f, 20)
13427 H.writeInt32BE(this._g, 24)
13428 H.writeInt32BE(this._h, 28)
13429
13430 return H
13431}
13432
13433module.exports = Sha256
13434
13435}).call(this,require("buffer").Buffer)
13436},{"./hash":37,"buffer":7,"inherits":35}],43:[function(require,module,exports){
13437(function (Buffer){
13438var inherits = require('inherits')
13439var SHA512 = require('./sha512')
13440var Hash = require('./hash')
13441
13442var W = new Array(160)
13443
13444function Sha384 () {
13445 this.init()
13446 this._w = W
13447
13448 Hash.call(this, 128, 112)
13449}
13450
13451inherits(Sha384, SHA512)
13452
13453Sha384.prototype.init = function () {
13454 this._a = 0xcbbb9d5d | 0
13455 this._b = 0x629a292a | 0
13456 this._c = 0x9159015a | 0
13457 this._d = 0x152fecd8 | 0
13458 this._e = 0x67332667 | 0
13459 this._f = 0x8eb44a87 | 0
13460 this._g = 0xdb0c2e0d | 0
13461 this._h = 0x47b5481d | 0
13462
13463 this._al = 0xc1059ed8 | 0
13464 this._bl = 0x367cd507 | 0
13465 this._cl = 0x3070dd17 | 0
13466 this._dl = 0xf70e5939 | 0
13467 this._el = 0xffc00b31 | 0
13468 this._fl = 0x68581511 | 0
13469 this._gl = 0x64f98fa7 | 0
13470 this._hl = 0xbefa4fa4 | 0
13471
13472 return this
13473}
13474
13475Sha384.prototype._hash = function () {
13476 var H = new Buffer(48)
13477
13478 function writeInt64BE (h, l, offset) {
13479 H.writeInt32BE(h, offset)
13480 H.writeInt32BE(l, offset + 4)
13481 }
13482
13483 writeInt64BE(this._a, this._al, 0)
13484 writeInt64BE(this._b, this._bl, 8)
13485 writeInt64BE(this._c, this._cl, 16)
13486 writeInt64BE(this._d, this._dl, 24)
13487 writeInt64BE(this._e, this._el, 32)
13488 writeInt64BE(this._f, this._fl, 40)
13489
13490 return H
13491}
13492
13493module.exports = Sha384
13494
13495}).call(this,require("buffer").Buffer)
13496},{"./hash":37,"./sha512":44,"buffer":7,"inherits":35}],44:[function(require,module,exports){
13497(function (Buffer){
13498var inherits = require('inherits')
13499var Hash = require('./hash')
13500
13501var K = [
13502 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
13503 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
13504 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
13505 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
13506 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
13507 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
13508 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
13509 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
13510 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
13511 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
13512 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
13513 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
13514 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
13515 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
13516 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
13517 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
13518 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
13519 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
13520 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
13521 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
13522 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
13523 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
13524 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
13525 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
13526 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
13527 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
13528 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
13529 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
13530 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
13531 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
13532 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
13533 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
13534 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
13535 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
13536 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
13537 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
13538 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
13539 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
13540 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
13541 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
13542]
13543
13544var W = new Array(160)
13545
13546function Sha512 () {
13547 this.init()
13548 this._w = W
13549
13550 Hash.call(this, 128, 112)
13551}
13552
13553inherits(Sha512, Hash)
13554
13555Sha512.prototype.init = function () {
13556 this._a = 0x6a09e667 | 0
13557 this._b = 0xbb67ae85 | 0
13558 this._c = 0x3c6ef372 | 0
13559 this._d = 0xa54ff53a | 0
13560 this._e = 0x510e527f | 0
13561 this._f = 0x9b05688c | 0
13562 this._g = 0x1f83d9ab | 0
13563 this._h = 0x5be0cd19 | 0
13564
13565 this._al = 0xf3bcc908 | 0
13566 this._bl = 0x84caa73b | 0
13567 this._cl = 0xfe94f82b | 0
13568 this._dl = 0x5f1d36f1 | 0
13569 this._el = 0xade682d1 | 0
13570 this._fl = 0x2b3e6c1f | 0
13571 this._gl = 0xfb41bd6b | 0
13572 this._hl = 0x137e2179 | 0
13573
13574 return this
13575}
13576
13577function S (X, Xl, n) {
13578 return (X >>> n) | (Xl << (32 - n))
13579}
13580
13581function Ch (x, y, z) {
13582 return ((x & y) ^ ((~x) & z))
13583}
13584
13585function Maj (x, y, z) {
13586 return ((x & y) ^ (x & z) ^ (y & z))
13587}
13588
13589Sha512.prototype._update = function (M) {
13590 var W = this._w
13591
13592 var a = this._a | 0
13593 var b = this._b | 0
13594 var c = this._c | 0
13595 var d = this._d | 0
13596 var e = this._e | 0
13597 var f = this._f | 0
13598 var g = this._g | 0
13599 var h = this._h | 0
13600
13601 var al = this._al | 0
13602 var bl = this._bl | 0
13603 var cl = this._cl | 0
13604 var dl = this._dl | 0
13605 var el = this._el | 0
13606 var fl = this._fl | 0
13607 var gl = this._gl | 0
13608 var hl = this._hl | 0
13609
13610 var i = 0, j = 0
13611 var Wi, Wil
13612 function calcW () {
13613 var x = W[j - 15 * 2]
13614 var xl = W[j - 15 * 2 + 1]
13615 var gamma0 = S(x, xl, 1) ^ S(x, xl, 8) ^ (x >>> 7)
13616 var gamma0l = S(xl, x, 1) ^ S(xl, x, 8) ^ S(xl, x, 7)
13617
13618 x = W[j - 2 * 2]
13619 xl = W[j - 2 * 2 + 1]
13620 var gamma1 = S(x, xl, 19) ^ S(xl, x, 29) ^ (x >>> 6)
13621 var gamma1l = S(xl, x, 19) ^ S(x, xl, 29) ^ S(xl, x, 6)
13622
13623 // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]
13624 var Wi7 = W[j - 7 * 2]
13625 var Wi7l = W[j - 7 * 2 + 1]
13626
13627 var Wi16 = W[j - 16 * 2]
13628 var Wi16l = W[j - 16 * 2 + 1]
13629
13630 Wil = gamma0l + Wi7l
13631 Wi = gamma0 + Wi7 + ((Wil >>> 0) < (gamma0l >>> 0) ? 1 : 0)
13632 Wil = Wil + gamma1l
13633 Wi = Wi + gamma1 + ((Wil >>> 0) < (gamma1l >>> 0) ? 1 : 0)
13634 Wil = Wil + Wi16l
13635 Wi = Wi + Wi16 + ((Wil >>> 0) < (Wi16l >>> 0) ? 1 : 0)
13636 }
13637
13638 function loop () {
13639 W[j] = Wi
13640 W[j + 1] = Wil
13641
13642 var maj = Maj(a, b, c)
13643 var majl = Maj(al, bl, cl)
13644
13645 var sigma0h = S(a, al, 28) ^ S(al, a, 2) ^ S(al, a, 7)
13646 var sigma0l = S(al, a, 28) ^ S(a, al, 2) ^ S(a, al, 7)
13647 var sigma1h = S(e, el, 14) ^ S(e, el, 18) ^ S(el, e, 9)
13648 var sigma1l = S(el, e, 14) ^ S(el, e, 18) ^ S(e, el, 9)
13649
13650 // t1 = h + sigma1 + ch + K[i] + W[i]
13651 var Ki = K[j]
13652 var Kil = K[j + 1]
13653
13654 var ch = Ch(e, f, g)
13655 var chl = Ch(el, fl, gl)
13656
13657 var t1l = hl + sigma1l
13658 var t1 = h + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0)
13659 t1l = t1l + chl
13660 t1 = t1 + ch + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0)
13661 t1l = t1l + Kil
13662 t1 = t1 + Ki + ((t1l >>> 0) < (Kil >>> 0) ? 1 : 0)
13663 t1l = t1l + Wil
13664 t1 = t1 + Wi + ((t1l >>> 0) < (Wil >>> 0) ? 1 : 0)
13665
13666 // t2 = sigma0 + maj
13667 var t2l = sigma0l + majl
13668 var t2 = sigma0h + maj + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0)
13669
13670 h = g
13671 hl = gl
13672 g = f
13673 gl = fl
13674 f = e
13675 fl = el
13676 el = (dl + t1l) | 0
13677 e = (d + t1 + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0
13678 d = c
13679 dl = cl
13680 c = b
13681 cl = bl
13682 b = a
13683 bl = al
13684 al = (t1l + t2l) | 0
13685 a = (t1 + t2 + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0
13686
13687 i++
13688 j += 2
13689 }
13690
13691 while (i < 16) {
13692 Wi = M.readInt32BE(j * 4)
13693 Wil = M.readInt32BE(j * 4 + 4)
13694
13695 loop()
13696 }
13697
13698 while (i < 80) {
13699 calcW()
13700 loop()
13701 }
13702
13703 this._al = (this._al + al) | 0
13704 this._bl = (this._bl + bl) | 0
13705 this._cl = (this._cl + cl) | 0
13706 this._dl = (this._dl + dl) | 0
13707 this._el = (this._el + el) | 0
13708 this._fl = (this._fl + fl) | 0
13709 this._gl = (this._gl + gl) | 0
13710 this._hl = (this._hl + hl) | 0
13711
13712 this._a = (this._a + a + ((this._al >>> 0) < (al >>> 0) ? 1 : 0)) | 0
13713 this._b = (this._b + b + ((this._bl >>> 0) < (bl >>> 0) ? 1 : 0)) | 0
13714 this._c = (this._c + c + ((this._cl >>> 0) < (cl >>> 0) ? 1 : 0)) | 0
13715 this._d = (this._d + d + ((this._dl >>> 0) < (dl >>> 0) ? 1 : 0)) | 0
13716 this._e = (this._e + e + ((this._el >>> 0) < (el >>> 0) ? 1 : 0)) | 0
13717 this._f = (this._f + f + ((this._fl >>> 0) < (fl >>> 0) ? 1 : 0)) | 0
13718 this._g = (this._g + g + ((this._gl >>> 0) < (gl >>> 0) ? 1 : 0)) | 0
13719 this._h = (this._h + h + ((this._hl >>> 0) < (hl >>> 0) ? 1 : 0)) | 0
13720}
13721
13722Sha512.prototype._hash = function () {
13723 var H = new Buffer(64)
13724
13725 function writeInt64BE (h, l, offset) {
13726 H.writeInt32BE(h, offset)
13727 H.writeInt32BE(l, offset + 4)
13728 }
13729
13730 writeInt64BE(this._a, this._al, 0)
13731 writeInt64BE(this._b, this._bl, 8)
13732 writeInt64BE(this._c, this._cl, 16)
13733 writeInt64BE(this._d, this._dl, 24)
13734 writeInt64BE(this._e, this._el, 32)
13735 writeInt64BE(this._f, this._fl, 40)
13736 writeInt64BE(this._g, this._gl, 48)
13737 writeInt64BE(this._h, this._hl, 56)
13738
13739 return H
13740}
13741
13742module.exports = Sha512
13743
13744}).call(this,require("buffer").Buffer)
13745},{"./hash":37,"buffer":7,"inherits":35}],45:[function(require,module,exports){
13746(function (Buffer){
13747'use strict';
13748var createHash = require('create-hash/browser');
13749var inherits = require('inherits')
13750
13751var Transform = require('stream').Transform
13752
13753var ZEROS = new Buffer(128)
13754ZEROS.fill(0)
13755
13756function Hmac(alg, key) {
13757 Transform.call(this)
13758
13759 if (typeof key === 'string') {
13760 key = new Buffer(key)
13761 }
13762
13763 var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64
13764
13765 this._alg = alg
13766 this._key = key
13767
13768 if (key.length > blocksize) {
13769 key = createHash(alg).update(key).digest()
13770
13771 } else if (key.length < blocksize) {
13772 key = Buffer.concat([key, ZEROS], blocksize)
13773 }
13774
13775 var ipad = this._ipad = new Buffer(blocksize)
13776 var opad = this._opad = new Buffer(blocksize)
13777
13778 for (var i = 0; i < blocksize; i++) {
13779 ipad[i] = key[i] ^ 0x36
13780 opad[i] = key[i] ^ 0x5C
13781 }
13782
13783 this._hash = createHash(alg).update(ipad)
13784}
13785
13786inherits(Hmac, Transform)
13787
13788Hmac.prototype.update = function (data, enc) {
13789 this._hash.update(data, enc)
13790
13791 return this
13792}
13793
13794Hmac.prototype._transform = function (data, _, next) {
13795 this._hash.update(data)
13796
13797 next()
13798}
13799
13800Hmac.prototype._flush = function (next) {
13801 this.push(this.digest())
13802
13803 next()
13804}
13805
13806Hmac.prototype.digest = function (enc) {
13807 var h = this._hash.digest()
13808
13809 return createHash(this._alg).update(this._opad).update(h).digest(enc)
13810}
13811
13812module.exports = function createHmac(alg, key) {
13813 return new Hmac(alg, key)
13814}
13815
13816}).call(this,require("buffer").Buffer)
13817},{"buffer":7,"create-hash/browser":32,"inherits":46,"stream":26}],46:[function(require,module,exports){
13818arguments[4][12][0].apply(exports,arguments)
13819},{"dup":12}],47:[function(require,module,exports){
13820var assert = require('assert')
13821var BigInteger = require('bigi')
13822
13823var Point = require('./point')
13824
13825function Curve(p, a, b, Gx, Gy, n, h) {
13826 this.p = p
13827 this.a = a
13828 this.b = b
13829 this.G = Point.fromAffine(this, Gx, Gy)
13830 this.n = n
13831 this.h = h
13832
13833 this.infinity = new Point(this, null, null, BigInteger.ZERO)
13834
13835 // result caching
13836 this.pOverFour = p.add(BigInteger.ONE).shiftRight(2)
13837}
13838
13839Curve.prototype.pointFromX = function(isOdd, x) {
13840 var alpha = x.pow(3).add(this.a.multiply(x)).add(this.b).mod(this.p)
13841 var beta = alpha.modPow(this.pOverFour, this.p) // XXX: not compatible with all curves
13842
13843 var y = beta
13844 if (beta.isEven() ^ !isOdd) {
13845 y = this.p.subtract(y) // -y % p
13846 }
13847
13848 return Point.fromAffine(this, x, y)
13849}
13850
13851Curve.prototype.isInfinity = function(Q) {
13852 if (Q === this.infinity) return true
13853
13854 return Q.z.signum() === 0 && Q.y.signum() !== 0
13855}
13856
13857Curve.prototype.isOnCurve = function(Q) {
13858 if (this.isInfinity(Q)) return true
13859
13860 var x = Q.affineX
13861 var y = Q.affineY
13862 var a = this.a
13863 var b = this.b
13864 var p = this.p
13865
13866 // Check that xQ and yQ are integers in the interval [0, p - 1]
13867 if (x.signum() < 0 || x.compareTo(p) >= 0) return false
13868 if (y.signum() < 0 || y.compareTo(p) >= 0) return false
13869
13870 // and check that y^2 = x^3 + ax + b (mod p)
13871 var lhs = y.square().mod(p)
13872 var rhs = x.pow(3).add(a.multiply(x)).add(b).mod(p)
13873 return lhs.equals(rhs)
13874}
13875
13876/**
13877 * Validate an elliptic curve point.
13878 *
13879 * See SEC 1, section 3.2.2.1: Elliptic Curve Public Key Validation Primitive
13880 */
13881Curve.prototype.validate = function(Q) {
13882 // Check Q != O
13883 assert(!this.isInfinity(Q), 'Point is at infinity')
13884 assert(this.isOnCurve(Q), 'Point is not on the curve')
13885
13886 // Check nQ = O (where Q is a scalar multiple of G)
13887 var nQ = Q.multiply(this.n)
13888 assert(this.isInfinity(nQ), 'Point is not a scalar multiple of G')
13889
13890 return true
13891}
13892
13893module.exports = Curve
13894
13895},{"./point":51,"assert":5,"bigi":3}],48:[function(require,module,exports){
13896module.exports={
13897 "secp128r1": {
13898 "p": "fffffffdffffffffffffffffffffffff",
13899 "a": "fffffffdfffffffffffffffffffffffc",
13900 "b": "e87579c11079f43dd824993c2cee5ed3",
13901 "n": "fffffffe0000000075a30d1b9038a115",
13902 "h": "01",
13903 "Gx": "161ff7528b899b2d0c28607ca52c5b86",
13904 "Gy": "cf5ac8395bafeb13c02da292dded7a83"
13905 },
13906 "secp160k1": {
13907 "p": "fffffffffffffffffffffffffffffffeffffac73",
13908 "a": "00",
13909 "b": "07",
13910 "n": "0100000000000000000001b8fa16dfab9aca16b6b3",
13911 "h": "01",
13912 "Gx": "3b4c382ce37aa192a4019e763036f4f5dd4d7ebb",
13913 "Gy": "938cf935318fdced6bc28286531733c3f03c4fee"
13914 },
13915 "secp160r1": {
13916 "p": "ffffffffffffffffffffffffffffffff7fffffff",
13917 "a": "ffffffffffffffffffffffffffffffff7ffffffc",
13918 "b": "1c97befc54bd7a8b65acf89f81d4d4adc565fa45",
13919 "n": "0100000000000000000001f4c8f927aed3ca752257",
13920 "h": "01",
13921 "Gx": "4a96b5688ef573284664698968c38bb913cbfc82",
13922 "Gy": "23a628553168947d59dcc912042351377ac5fb32"
13923 },
13924 "secp192k1": {
13925 "p": "fffffffffffffffffffffffffffffffffffffffeffffee37",
13926 "a": "00",
13927 "b": "03",
13928 "n": "fffffffffffffffffffffffe26f2fc170f69466a74defd8d",
13929 "h": "01",
13930 "Gx": "db4ff10ec057e9ae26b07d0280b7f4341da5d1b1eae06c7d",
13931 "Gy": "9b2f2f6d9c5628a7844163d015be86344082aa88d95e2f9d"
13932 },
13933 "secp192r1": {
13934 "p": "fffffffffffffffffffffffffffffffeffffffffffffffff",
13935 "a": "fffffffffffffffffffffffffffffffefffffffffffffffc",
13936 "b": "64210519e59c80e70fa7e9ab72243049feb8deecc146b9b1",
13937 "n": "ffffffffffffffffffffffff99def836146bc9b1b4d22831",
13938 "h": "01",
13939 "Gx": "188da80eb03090f67cbf20eb43a18800f4ff0afd82ff1012",
13940 "Gy": "07192b95ffc8da78631011ed6b24cdd573f977a11e794811"
13941 },
13942 "secp256k1": {
13943 "p": "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f",
13944 "a": "00",
13945 "b": "07",
13946 "n": "fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141",
13947 "h": "01",
13948 "Gx": "79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
13949 "Gy": "483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8"
13950 },
13951 "secp256r1": {
13952 "p": "ffffffff00000001000000000000000000000000ffffffffffffffffffffffff",
13953 "a": "ffffffff00000001000000000000000000000000fffffffffffffffffffffffc",
13954 "b": "5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b",
13955 "n": "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551",
13956 "h": "01",
13957 "Gx": "6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
13958 "Gy": "4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5"
13959 }
13960}
13961
13962},{}],49:[function(require,module,exports){
13963var Point = require('./point')
13964var Curve = require('./curve')
13965
13966var getCurveByName = require('./names')
13967
13968module.exports = {
13969 Curve: Curve,
13970 Point: Point,
13971 getCurveByName: getCurveByName
13972}
13973
13974},{"./curve":47,"./names":50,"./point":51}],50:[function(require,module,exports){
13975var BigInteger = require('bigi')
13976
13977var curves = require('./curves')
13978var Curve = require('./curve')
13979
13980function getCurveByName(name) {
13981 var curve = curves[name]
13982 if (!curve) return null
13983
13984 var p = new BigInteger(curve.p, 16)
13985 var a = new BigInteger(curve.a, 16)
13986 var b = new BigInteger(curve.b, 16)
13987 var n = new BigInteger(curve.n, 16)
13988 var h = new BigInteger(curve.h, 16)
13989 var Gx = new BigInteger(curve.Gx, 16)
13990 var Gy = new BigInteger(curve.Gy, 16)
13991
13992 return new Curve(p, a, b, Gx, Gy, n, h)
13993}
13994
13995module.exports = getCurveByName
13996
13997},{"./curve":47,"./curves":48,"bigi":3}],51:[function(require,module,exports){
13998(function (Buffer){
13999var assert = require('assert')
14000var BigInteger = require('bigi')
14001
14002var THREE = BigInteger.valueOf(3)
14003
14004function Point(curve, x, y, z) {
14005 assert.notStrictEqual(z, undefined, 'Missing Z coordinate')
14006
14007 this.curve = curve
14008 this.x = x
14009 this.y = y
14010 this.z = z
14011 this._zInv = null
14012
14013 this.compressed = true
14014}
14015
14016Object.defineProperty(Point.prototype, 'zInv', {
14017 get: function() {
14018 if (this._zInv === null) {
14019 this._zInv = this.z.modInverse(this.curve.p)
14020 }
14021
14022 return this._zInv
14023 }
14024})
14025
14026Object.defineProperty(Point.prototype, 'affineX', {
14027 get: function() {
14028 return this.x.multiply(this.zInv).mod(this.curve.p)
14029 }
14030})
14031
14032Object.defineProperty(Point.prototype, 'affineY', {
14033 get: function() {
14034 return this.y.multiply(this.zInv).mod(this.curve.p)
14035 }
14036})
14037
14038Point.fromAffine = function(curve, x, y) {
14039 return new Point(curve, x, y, BigInteger.ONE)
14040}
14041
14042Point.prototype.equals = function(other) {
14043 if (other === this) return true
14044 if (this.curve.isInfinity(this)) return this.curve.isInfinity(other)
14045 if (this.curve.isInfinity(other)) return this.curve.isInfinity(this)
14046
14047 // u = Y2 * Z1 - Y1 * Z2
14048 var u = other.y.multiply(this.z).subtract(this.y.multiply(other.z)).mod(this.curve.p)
14049
14050 if (u.signum() !== 0) return false
14051
14052 // v = X2 * Z1 - X1 * Z2
14053 var v = other.x.multiply(this.z).subtract(this.x.multiply(other.z)).mod(this.curve.p)
14054
14055 return v.signum() === 0
14056}
14057
14058Point.prototype.negate = function() {
14059 var y = this.curve.p.subtract(this.y)
14060
14061 return new Point(this.curve, this.x, y, this.z)
14062}
14063
14064Point.prototype.add = function(b) {
14065 if (this.curve.isInfinity(this)) return b
14066 if (this.curve.isInfinity(b)) return this
14067
14068 var x1 = this.x
14069 var y1 = this.y
14070 var x2 = b.x
14071 var y2 = b.y
14072
14073 // u = Y2 * Z1 - Y1 * Z2
14074 var u = y2.multiply(this.z).subtract(y1.multiply(b.z)).mod(this.curve.p)
14075 // v = X2 * Z1 - X1 * Z2
14076 var v = x2.multiply(this.z).subtract(x1.multiply(b.z)).mod(this.curve.p)
14077
14078 if (v.signum() === 0) {
14079 if (u.signum() === 0) {
14080 return this.twice() // this == b, so double
14081 }
14082
14083 return this.curve.infinity // this = -b, so infinity
14084 }
14085
14086 var v2 = v.square()
14087 var v3 = v2.multiply(v)
14088 var x1v2 = x1.multiply(v2)
14089 var zu2 = u.square().multiply(this.z)
14090
14091 // x3 = v * (z2 * (z1 * u^2 - 2 * x1 * v^2) - v^3)
14092 var x3 = zu2.subtract(x1v2.shiftLeft(1)).multiply(b.z).subtract(v3).multiply(v).mod(this.curve.p)
14093 // y3 = z2 * (3 * x1 * u * v^2 - y1 * v^3 - z1 * u^3) + u * v^3
14094 var y3 = x1v2.multiply(THREE).multiply(u).subtract(y1.multiply(v3)).subtract(zu2.multiply(u)).multiply(b.z).add(u.multiply(v3)).mod(this.curve.p)
14095 // z3 = v^3 * z1 * z2
14096 var z3 = v3.multiply(this.z).multiply(b.z).mod(this.curve.p)
14097
14098 return new Point(this.curve, x3, y3, z3)
14099}
14100
14101Point.prototype.twice = function() {
14102 if (this.curve.isInfinity(this)) return this
14103 if (this.y.signum() === 0) return this.curve.infinity
14104
14105 var x1 = this.x
14106 var y1 = this.y
14107
14108 var y1z1 = y1.multiply(this.z)
14109 var y1sqz1 = y1z1.multiply(y1).mod(this.curve.p)
14110 var a = this.curve.a
14111
14112 // w = 3 * x1^2 + a * z1^2
14113 var w = x1.square().multiply(THREE)
14114
14115 if (a.signum() !== 0) {
14116 w = w.add(this.z.square().multiply(a))
14117 }
14118
14119 w = w.mod(this.curve.p)
14120 // x3 = 2 * y1 * z1 * (w^2 - 8 * x1 * y1^2 * z1)
14121 var x3 = w.square().subtract(x1.shiftLeft(3).multiply(y1sqz1)).shiftLeft(1).multiply(y1z1).mod(this.curve.p)
14122 // y3 = 4 * y1^2 * z1 * (3 * w * x1 - 2 * y1^2 * z1) - w^3
14123 var y3 = w.multiply(THREE).multiply(x1).subtract(y1sqz1.shiftLeft(1)).shiftLeft(2).multiply(y1sqz1).subtract(w.pow(3)).mod(this.curve.p)
14124 // z3 = 8 * (y1 * z1)^3
14125 var z3 = y1z1.pow(3).shiftLeft(3).mod(this.curve.p)
14126
14127 return new Point(this.curve, x3, y3, z3)
14128}
14129
14130// Simple NAF (Non-Adjacent Form) multiplication algorithm
14131// TODO: modularize the multiplication algorithm
14132Point.prototype.multiply = function(k) {
14133 if (this.curve.isInfinity(this)) return this
14134 if (k.signum() === 0) return this.curve.infinity
14135
14136 var e = k
14137 var h = e.multiply(THREE)
14138
14139 var neg = this.negate()
14140 var R = this
14141
14142 for (var i = h.bitLength() - 2; i > 0; --i) {
14143 R = R.twice()
14144
14145 var hBit = h.testBit(i)
14146 var eBit = e.testBit(i)
14147
14148 if (hBit != eBit) {
14149 R = R.add(hBit ? this : neg)
14150 }
14151 }
14152
14153 return R
14154}
14155
14156// Compute this*j + x*k (simultaneous multiplication)
14157Point.prototype.multiplyTwo = function(j, x, k) {
14158 var i
14159
14160 if (j.bitLength() > k.bitLength())
14161 i = j.bitLength() - 1
14162 else
14163 i = k.bitLength() - 1
14164
14165 var R = this.curve.infinity
14166 var both = this.add(x)
14167
14168 while (i >= 0) {
14169 R = R.twice()
14170
14171 var jBit = j.testBit(i)
14172 var kBit = k.testBit(i)
14173
14174 if (jBit) {
14175 if (kBit) {
14176 R = R.add(both)
14177
14178 } else {
14179 R = R.add(this)
14180 }
14181
14182 } else {
14183 if (kBit) {
14184 R = R.add(x)
14185 }
14186 }
14187 --i
14188 }
14189
14190 return R
14191}
14192
14193Point.prototype.getEncoded = function(compressed) {
14194 if (compressed == undefined) compressed = this.compressed
14195 if (this.curve.isInfinity(this)) return new Buffer('00', 'hex') // Infinity point encoded is simply '00'
14196
14197 var x = this.affineX
14198 var y = this.affineY
14199
14200 var buffer
14201
14202 // Determine size of q in bytes
14203 var byteLength = Math.floor((this.curve.p.bitLength() + 7) / 8)
14204
14205 // 0x02/0x03 | X
14206 if (compressed) {
14207 buffer = new Buffer(1 + byteLength)
14208 buffer.writeUInt8(y.isEven() ? 0x02 : 0x03, 0)
14209
14210 // 0x04 | X | Y
14211 } else {
14212 buffer = new Buffer(1 + byteLength + byteLength)
14213 buffer.writeUInt8(0x04, 0)
14214
14215 y.toBuffer(byteLength).copy(buffer, 1 + byteLength)
14216 }
14217
14218 x.toBuffer(byteLength).copy(buffer, 1)
14219
14220 return buffer
14221}
14222
14223Point.decodeFrom = function(curve, buffer) {
14224 var type = buffer.readUInt8(0)
14225 var compressed = (type !== 4)
14226
14227 var byteLength = Math.floor((curve.p.bitLength() + 7) / 8)
14228 var x = BigInteger.fromBuffer(buffer.slice(1, 1 + byteLength))
14229
14230 var Q
14231 if (compressed) {
14232 assert.equal(buffer.length, byteLength + 1, 'Invalid sequence length')
14233 assert(type === 0x02 || type === 0x03, 'Invalid sequence tag')
14234
14235 var isOdd = (type === 0x03)
14236 Q = curve.pointFromX(isOdd, x)
14237
14238 } else {
14239 assert.equal(buffer.length, 1 + byteLength + byteLength, 'Invalid sequence length')
14240
14241 var y = BigInteger.fromBuffer(buffer.slice(1 + byteLength))
14242 Q = Point.fromAffine(curve, x, y)
14243 }
14244
14245 Q.compressed = compressed
14246 return Q
14247}
14248
14249Point.prototype.toString = function () {
14250 if (this.curve.isInfinity(this)) return '(INFINITY)'
14251
14252 return '(' + this.affineX.toString() + ',' + this.affineY.toString() + ')'
14253}
14254
14255module.exports = Point
14256
14257}).call(this,require("buffer").Buffer)
14258},{"assert":5,"bigi":3,"buffer":7}],52:[function(require,module,exports){
14259(function (process,global,Buffer){
14260'use strict';
14261
14262var crypto = global.crypto || global.msCrypto
14263if(crypto && crypto.getRandomValues) {
14264 module.exports = randomBytes;
14265} else {
14266 module.exports = oldBrowser;
14267}
14268function randomBytes(size, cb) {
14269 var bytes = new Buffer(size); //in browserify, this is an extended Uint8Array
14270 /* This will not work in older browsers.
14271 * See https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues
14272 */
14273
14274 crypto.getRandomValues(bytes);
14275 if (typeof cb === 'function') {
14276 return process.nextTick(function () {
14277 cb(null, bytes);
14278 });
14279 }
14280 return bytes;
14281}
14282function oldBrowser() {
14283 throw new Error(
14284 'secure random number generation not supported by this browser\n'+
14285 'use chrome, FireFox or Internet Explorer 11'
14286 )
14287}
14288
14289}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer)
14290},{"_process":14,"buffer":7}],53:[function(require,module,exports){
14291(function (Buffer){
14292'use strict';
14293
14294function getFunctionName(fn) {
14295 return fn.name || fn.toString().match(/function (.*?)\s*\(/)[1];
14296}
14297
14298function getTypeTypeName(type) {
14299 if (nativeTypes.Function(type)) {
14300 type = type.toJSON ? type.toJSON() : getFunctionName(type);
14301 }
14302 if (nativeTypes.Object(type)) return JSON.stringify(type);
14303
14304 return type;
14305}
14306
14307function getValueTypeName(value) {
14308 if (nativeTypes.Null(value)) return '';
14309
14310 return getFunctionName(value.constructor);
14311}
14312
14313function tfErrorString(type, value) {
14314 var typeTypeName = getTypeTypeName(type);
14315 var valueTypeName = getValueTypeName(value);
14316
14317 return 'Expected ' + typeTypeName + ', got ' + (valueTypeName && valueTypeName + ' ') + JSON.stringify(value);
14318}
14319
14320function tfPropertyErrorString(type, name, value) {
14321 return tfErrorString('property \"' + name + '\" of type ' + getTypeTypeName(type), value);
14322}
14323
14324var nativeTypes = {
14325 Array: (function (_Array) {
14326 function Array(_x) {
14327 return _Array.apply(this, arguments);
14328 }
14329
14330 Array.toString = function () {
14331 return _Array.toString();
14332 };
14333
14334 return Array;
14335 })(function (value) {
14336 return value !== null && value !== undefined && value.constructor === Array;
14337 }),
14338 Boolean: function Boolean(value) {
14339 return typeof value === 'boolean';
14340 },
14341 Buffer: (function (_Buffer) {
14342 function Buffer(_x2) {
14343 return _Buffer.apply(this, arguments);
14344 }
14345
14346 Buffer.toString = function () {
14347 return _Buffer.toString();
14348 };
14349
14350 return Buffer;
14351 })(function (value) {
14352 return Buffer.isBuffer(value);
14353 }),
14354 Function: function Function(value) {
14355 return typeof value === 'function';
14356 },
14357 Null: function Null(value) {
14358 return value === undefined || value === null;
14359 },
14360 Number: function Number(value) {
14361 return typeof value === 'number';
14362 },
14363 Object: function Object(value) {
14364 return typeof value === 'object';
14365 },
14366 String: function String(value) {
14367 return typeof value === 'string';
14368 },
14369 '': function _() {
14370 return true;
14371 }
14372};
14373
14374function tJSON(type) {
14375 return type && type.toJSON ? type.toJSON() : type;
14376}
14377
14378function sJSON(type) {
14379 var json = tJSON(type);
14380 return nativeTypes.Object(json) ? JSON.stringify(json) : json;
14381}
14382
14383var otherTypes = {
14384 arrayOf: function arrayOf(type) {
14385 function arrayOf(value, strict) {
14386 try {
14387 return nativeTypes.Array(value) && value.every(function (x) {
14388 return typeforce(type, x, strict);
14389 });
14390 } catch (e) {
14391 return false;
14392 }
14393 }
14394 arrayOf.toJSON = function () {
14395 return [tJSON(type)];
14396 };
14397
14398 return arrayOf;
14399 },
14400
14401 maybe: function maybe(type) {
14402 function maybe(value, strict) {
14403 return nativeTypes.Null(value) || typeforce(type, value, strict);
14404 }
14405 maybe.toJSON = function () {
14406 return '?' + sJSON(type);
14407 };
14408
14409 return maybe;
14410 },
14411
14412 object: function object(type) {
14413 function object(value, strict) {
14414 typeforce(nativeTypes.Object, value, strict);
14415
14416 var propertyName, propertyType, propertyValue;
14417
14418 try {
14419 for (propertyName in type) {
14420 propertyType = type[propertyName];
14421 propertyValue = value[propertyName];
14422
14423 typeforce(propertyType, propertyValue, strict);
14424 }
14425 } catch (e) {
14426 throw new TypeError(tfPropertyErrorString(propertyType, propertyName, propertyValue));
14427 }
14428
14429 if (strict) {
14430 for (propertyName in value) {
14431 if (type[propertyName]) continue;
14432
14433 throw new TypeError('Unexpected property "' + propertyName + '"');
14434 }
14435 }
14436
14437 return true;
14438 }
14439 object.toJSON = function () {
14440 return type;
14441 };
14442
14443 return object;
14444 },
14445
14446 oneOf: function oneOf() {
14447 for (var _len = arguments.length, types = Array(_len), _key = 0; _key < _len; _key++) {
14448 types[_key] = arguments[_key];
14449 }
14450
14451 function oneOf(value, strict) {
14452 return types.some(function (type) {
14453 try {
14454 return typeforce(type, value, strict);
14455 } catch (e) {
14456 return false;
14457 }
14458 });
14459 }
14460 oneOf.toJSON = function () {
14461 return types.map(sJSON).join('|');
14462 };
14463
14464 return oneOf;
14465 },
14466
14467 quacksLike: function quacksLike(type) {
14468 function quacksLike(value, strict) {
14469 return type === getValueTypeName(value);
14470 }
14471 quacksLike.toJSON = function () {
14472 return type;
14473 };
14474
14475 return quacksLike;
14476 },
14477
14478 tuple: function tuple() {
14479 for (var _len2 = arguments.length, types = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
14480 types[_key2] = arguments[_key2];
14481 }
14482
14483 function tuple(value, strict) {
14484 return types.every(function (type, i) {
14485 return typeforce(type, value[i], strict);
14486 });
14487 }
14488 tuple.toJSON = function () {
14489 return '(' + types.map(sJSON).join(', ') + ')';
14490 };
14491
14492 return tuple;
14493 },
14494
14495 value: function value(expected) {
14496 function value(actual) {
14497 return actual === expected;
14498 }
14499 value.toJSON = function () {
14500 return expected;
14501 };
14502
14503 return value;
14504 }
14505};
14506
14507function compile(type) {
14508 if (nativeTypes.String(type)) {
14509 if (type[0] === '?') return otherTypes.maybe(compile(type.slice(1)));
14510
14511 return nativeTypes[type] || otherTypes.quacksLike(type);
14512 } else if (type && nativeTypes.Object(type)) {
14513 if (nativeTypes.Array(type)) return otherTypes.arrayOf(compile(type[0]));
14514
14515 var compiled = {};
14516
14517 for (var propertyName in type) {
14518 compiled[propertyName] = compile(type[propertyName]);
14519 }
14520
14521 return otherTypes.object(compiled);
14522 } else if (nativeTypes.Function(type)) {
14523 return type;
14524 }
14525
14526 return otherTypes.value(type);
14527}
14528
14529function typeforce(_x3, _x4, _x5) {
14530 var _again = true;
14531
14532 _function: while (_again) {
14533 var type = _x3,
14534 value = _x4,
14535 strict = _x5;
14536 _again = false;
14537
14538 if (nativeTypes.Function(type)) {
14539 if (type(value, strict)) return true;
14540
14541 throw new TypeError(tfErrorString(type, value));
14542 }
14543
14544 // JIT
14545 _x3 = compile(type);
14546 _x4 = value;
14547 _x5 = strict;
14548 _again = true;
14549 continue _function;
14550 }
14551}
14552
14553// assign all types to typeforce function
14554var typeName;
14555Object.keys(nativeTypes).forEach(function (typeName) {
14556 var nativeType = nativeTypes[typeName];
14557 nativeType.toJSON = function () {
14558 return typeName;
14559 };
14560
14561 typeforce[typeName] = nativeType;
14562});
14563
14564for (typeName in otherTypes) {
14565 typeforce[typeName] = otherTypes[typeName];
14566}
14567
14568module.exports = typeforce;
14569module.exports.compile = compile;
14570}).call(this,require("buffer").Buffer)
14571},{"buffer":7}],54:[function(require,module,exports){
14572(function (Buffer){
14573var assert = require('assert')
14574var base58check = require('bs58check')
14575var typeForce = require('typeforce')
14576var networks = require('./networks')
14577var scripts = require('./scripts')
14578
14579function findScriptTypeByVersion (version) {
14580 for (var networkName in networks) {
14581 var network = networks[networkName]
14582
14583 if (version === network.pubKeyHash) return 'pubkeyhash'
14584 if (version === network.scriptHash) return 'scripthash'
14585 }
14586}
14587
14588function Address (hash, version) {
14589 typeForce('Buffer', hash)
14590
14591 assert.strictEqual(hash.length, 20, 'Invalid hash length')
14592 assert.strictEqual(version & 0xff, version, 'Invalid version byte')
14593
14594 this.hash = hash
14595 this.version = version
14596}
14597
14598Address.fromBase58Check = function (string) {
14599 var payload = base58check.decode(string)
14600 var version = payload.readUInt8(0)
14601 var hash = payload.slice(1)
14602
14603 return new Address(hash, version)
14604}
14605
14606Address.fromOutputScript = function (script, network) {
14607 network = network || networks.bitcoin
14608
14609 if (scripts.isPubKeyHashOutput(script)) return new Address(script.chunks[2], network.pubKeyHash)
14610 if (scripts.isScriptHashOutput(script)) return new Address(script.chunks[1], network.scriptHash)
14611
14612 assert(false, script.toASM() + ' has no matching Address')
14613}
14614
14615Address.prototype.toBase58Check = function () {
14616 var payload = new Buffer(21)
14617 payload.writeUInt8(this.version, 0)
14618 this.hash.copy(payload, 1)
14619
14620 return base58check.encode(payload)
14621}
14622
14623Address.prototype.toOutputScript = function () {
14624 var scriptType = findScriptTypeByVersion(this.version)
14625
14626 if (scriptType === 'pubkeyhash') return scripts.pubKeyHashOutput(this.hash)
14627 if (scriptType === 'scripthash') return scripts.scriptHashOutput(this.hash)
14628
14629 assert(false, this.toString() + ' has no matching Script')
14630}
14631
14632Address.prototype.toString = Address.prototype.toBase58Check
14633
14634module.exports = Address
14635
14636}).call(this,require("buffer").Buffer)
14637},{"./networks":66,"./scripts":69,"assert":5,"bs58check":31,"buffer":7,"typeforce":53}],55:[function(require,module,exports){
14638var bs58check = require('bs58check')
14639
14640function decode () {
14641 console.warn('bs58check will be removed in 2.0.0. require("bs58check") instead.')
14642
14643 return bs58check.decode.apply(undefined, arguments)
14644}
14645
14646function encode () {
14647 console.warn('bs58check will be removed in 2.0.0. require("bs58check") instead.')
14648
14649 return bs58check.encode.apply(undefined, arguments)
14650}
14651
14652module.exports = {
14653 decode: decode,
14654 encode: encode
14655}
14656
14657},{"bs58check":31}],56:[function(require,module,exports){
14658(function (Buffer){
14659var assert = require('assert')
14660var bufferutils = require('./bufferutils')
14661var crypto = require('./crypto')
14662
14663var Transaction = require('./transaction')
14664
14665function Block () {
14666 this.version = 1
14667 this.prevHash = null
14668 this.merkleRoot = null
14669 this.timestamp = 0
14670 this.bits = 0
14671 this.nonce = 0
14672}
14673
14674Block.fromBuffer = function (buffer) {
14675 assert(buffer.length >= 80, 'Buffer too small (< 80 bytes)')
14676
14677 var offset = 0
14678 function readSlice (n) {
14679 offset += n
14680 return buffer.slice(offset - n, offset)
14681 }
14682
14683 function readUInt32 () {
14684 var i = buffer.readUInt32LE(offset)
14685 offset += 4
14686 return i
14687 }
14688
14689 var block = new Block()
14690 block.version = readUInt32()
14691 block.prevHash = readSlice(32)
14692 block.merkleRoot = readSlice(32)
14693 block.timestamp = readUInt32()
14694 block.bits = readUInt32()
14695 block.nonce = readUInt32()
14696
14697 if (buffer.length === 80) return block
14698
14699 function readVarInt () {
14700 var vi = bufferutils.readVarInt(buffer, offset)
14701 offset += vi.size
14702 return vi.number
14703 }
14704
14705 // FIXME: poor performance
14706 function readTransaction () {
14707 var tx = Transaction.fromBuffer(buffer.slice(offset), true)
14708
14709 offset += tx.toBuffer().length
14710 return tx
14711 }
14712
14713 var nTransactions = readVarInt()
14714 block.transactions = []
14715
14716 for (var i = 0; i < nTransactions; ++i) {
14717 var tx = readTransaction()
14718 block.transactions.push(tx)
14719 }
14720
14721 return block
14722}
14723
14724Block.fromHex = function (hex) {
14725 return Block.fromBuffer(new Buffer(hex, 'hex'))
14726}
14727
14728Block.prototype.getHash = function () {
14729 return crypto.hash256(this.toBuffer(true))
14730}
14731
14732Block.prototype.getId = function () {
14733 return bufferutils.reverse(this.getHash()).toString('hex')
14734}
14735
14736Block.prototype.getUTCDate = function () {
14737 var date = new Date(0) // epoch
14738 date.setUTCSeconds(this.timestamp)
14739
14740 return date
14741}
14742
14743Block.prototype.toBuffer = function (headersOnly) {
14744 var buffer = new Buffer(80)
14745
14746 var offset = 0
14747 function writeSlice (slice) {
14748 slice.copy(buffer, offset)
14749 offset += slice.length
14750 }
14751
14752 function writeUInt32 (i) {
14753 buffer.writeUInt32LE(i, offset)
14754 offset += 4
14755 }
14756
14757 writeUInt32(this.version)
14758 writeSlice(this.prevHash)
14759 writeSlice(this.merkleRoot)
14760 writeUInt32(this.timestamp)
14761 writeUInt32(this.bits)
14762 writeUInt32(this.nonce)
14763
14764 if (headersOnly || !this.transactions) return buffer
14765
14766 var txLenBuffer = bufferutils.varIntBuffer(this.transactions.length)
14767 var txBuffers = this.transactions.map(function (tx) {
14768 return tx.toBuffer()
14769 })
14770
14771 return Buffer.concat([buffer, txLenBuffer].concat(txBuffers))
14772}
14773
14774Block.prototype.toHex = function (headersOnly) {
14775 return this.toBuffer(headersOnly).toString('hex')
14776}
14777
14778module.exports = Block
14779
14780}).call(this,require("buffer").Buffer)
14781},{"./bufferutils":57,"./crypto":58,"./transaction":70,"assert":5,"buffer":7}],57:[function(require,module,exports){
14782(function (Buffer){
14783var assert = require('assert')
14784var opcodes = require('./opcodes')
14785
14786// https://github.com/feross/buffer/blob/master/index.js#L1127
14787function verifuint (value, max) {
14788 assert(typeof value === 'number', 'cannot write a non-number as a number')
14789 assert(value >= 0, 'specified a negative value for writing an unsigned value')
14790 assert(value <= max, 'value is larger than maximum value for type')
14791 assert(Math.floor(value) === value, 'value has a fractional component')
14792}
14793
14794function pushDataSize (i) {
14795 return i < opcodes.OP_PUSHDATA1 ? 1
14796 : i < 0xff ? 2
14797 : i < 0xffff ? 3
14798 : 5
14799}
14800
14801function readPushDataInt (buffer, offset) {
14802 var opcode = buffer.readUInt8(offset)
14803 var number, size
14804
14805 // ~6 bit
14806 if (opcode < opcodes.OP_PUSHDATA1) {
14807 number = opcode
14808 size = 1
14809
14810 // 8 bit
14811 } else if (opcode === opcodes.OP_PUSHDATA1) {
14812 if (offset + 2 > buffer.length) return null
14813 number = buffer.readUInt8(offset + 1)
14814 size = 2
14815
14816 // 16 bit
14817 } else if (opcode === opcodes.OP_PUSHDATA2) {
14818 if (offset + 3 > buffer.length) return null
14819 number = buffer.readUInt16LE(offset + 1)
14820 size = 3
14821
14822 // 32 bit
14823 } else {
14824 if (offset + 5 > buffer.length) return null
14825 assert.equal(opcode, opcodes.OP_PUSHDATA4, 'Unexpected opcode')
14826
14827 number = buffer.readUInt32LE(offset + 1)
14828 size = 5
14829 }
14830
14831 return {
14832 opcode: opcode,
14833 number: number,
14834 size: size
14835 }
14836}
14837
14838function readUInt64LE (buffer, offset) {
14839 var a = buffer.readUInt32LE(offset)
14840 var b = buffer.readUInt32LE(offset + 4)
14841 b *= 0x100000000
14842
14843 verifuint(b + a, 0x001fffffffffffff)
14844
14845 return b + a
14846}
14847
14848function readVarInt (buffer, offset) {
14849 var t = buffer.readUInt8(offset)
14850 var number, size
14851
14852 // 8 bit
14853 if (t < 253) {
14854 number = t
14855 size = 1
14856
14857 // 16 bit
14858 } else if (t < 254) {
14859 number = buffer.readUInt16LE(offset + 1)
14860 size = 3
14861
14862 // 32 bit
14863 } else if (t < 255) {
14864 number = buffer.readUInt32LE(offset + 1)
14865 size = 5
14866
14867 // 64 bit
14868 } else {
14869 number = readUInt64LE(buffer, offset + 1)
14870 size = 9
14871 }
14872
14873 return {
14874 number: number,
14875 size: size
14876 }
14877}
14878
14879function writePushDataInt (buffer, number, offset) {
14880 var size = pushDataSize(number)
14881
14882 // ~6 bit
14883 if (size === 1) {
14884 buffer.writeUInt8(number, offset)
14885
14886 // 8 bit
14887 } else if (size === 2) {
14888 buffer.writeUInt8(opcodes.OP_PUSHDATA1, offset)
14889 buffer.writeUInt8(number, offset + 1)
14890
14891 // 16 bit
14892 } else if (size === 3) {
14893 buffer.writeUInt8(opcodes.OP_PUSHDATA2, offset)
14894 buffer.writeUInt16LE(number, offset + 1)
14895
14896 // 32 bit
14897 } else {
14898 buffer.writeUInt8(opcodes.OP_PUSHDATA4, offset)
14899 buffer.writeUInt32LE(number, offset + 1)
14900 }
14901
14902 return size
14903}
14904
14905function writeUInt64LE (buffer, value, offset) {
14906 verifuint(value, 0x001fffffffffffff)
14907
14908 buffer.writeInt32LE(value & -1, offset)
14909 buffer.writeUInt32LE(Math.floor(value / 0x100000000), offset + 4)
14910}
14911
14912function varIntSize (i) {
14913 return i < 253 ? 1
14914 : i < 0x10000 ? 3
14915 : i < 0x100000000 ? 5
14916 : 9
14917}
14918
14919function writeVarInt (buffer, number, offset) {
14920 var size = varIntSize(number)
14921
14922 // 8 bit
14923 if (size === 1) {
14924 buffer.writeUInt8(number, offset)
14925
14926 // 16 bit
14927 } else if (size === 3) {
14928 buffer.writeUInt8(253, offset)
14929 buffer.writeUInt16LE(number, offset + 1)
14930
14931 // 32 bit
14932 } else if (size === 5) {
14933 buffer.writeUInt8(254, offset)
14934 buffer.writeUInt32LE(number, offset + 1)
14935
14936 // 64 bit
14937 } else {
14938 buffer.writeUInt8(255, offset)
14939 writeUInt64LE(buffer, number, offset + 1)
14940 }
14941
14942 return size
14943}
14944
14945function varIntBuffer (i) {
14946 var size = varIntSize(i)
14947 var buffer = new Buffer(size)
14948 writeVarInt(buffer, i, 0)
14949
14950 return buffer
14951}
14952
14953function reverse (buffer) {
14954 var buffer2 = new Buffer(buffer)
14955 Array.prototype.reverse.call(buffer2)
14956 return buffer2
14957}
14958
14959module.exports = {
14960 pushDataSize: pushDataSize,
14961 readPushDataInt: readPushDataInt,
14962 readUInt64LE: readUInt64LE,
14963 readVarInt: readVarInt,
14964 reverse: reverse,
14965 varIntBuffer: varIntBuffer,
14966 varIntSize: varIntSize,
14967 writePushDataInt: writePushDataInt,
14968 writeUInt64LE: writeUInt64LE,
14969 writeVarInt: writeVarInt
14970}
14971
14972}).call(this,require("buffer").Buffer)
14973},{"./opcodes":67,"assert":5,"buffer":7}],58:[function(require,module,exports){
14974var createHash = require('create-hash')
14975
14976function hash160 (buffer) {
14977 return ripemd160(sha256(buffer))
14978}
14979
14980function hash256 (buffer) {
14981 return sha256(sha256(buffer))
14982}
14983
14984function ripemd160 (buffer) {
14985 return createHash('rmd160').update(buffer).digest()
14986}
14987
14988function sha1 (buffer) {
14989 return createHash('sha1').update(buffer).digest()
14990}
14991
14992function sha256 (buffer) {
14993 return createHash('sha256').update(buffer).digest()
14994}
14995
14996// FIXME: Name not consistent with others
14997var createHmac = require('create-hmac')
14998
14999function HmacSHA256 (buffer, secret) {
15000 console.warn('Hmac* functions are deprecated for removal in 2.0.0, use node crypto instead')
15001 return createHmac('sha256', secret).update(buffer).digest()
15002}
15003
15004function HmacSHA512 (buffer, secret) {
15005 console.warn('Hmac* functions are deprecated for removal in 2.0.0, use node crypto instead')
15006 return createHmac('sha512', secret).update(buffer).digest()
15007}
15008
15009module.exports = {
15010 ripemd160: ripemd160,
15011 sha1: sha1,
15012 sha256: sha256,
15013 hash160: hash160,
15014 hash256: hash256,
15015 HmacSHA256: HmacSHA256,
15016 HmacSHA512: HmacSHA512
15017}
15018
15019},{"create-hash":32,"create-hmac":45}],59:[function(require,module,exports){
15020(function (Buffer){
15021var assert = require('assert')
15022var createHmac = require('create-hmac')
15023var typeForce = require('typeforce')
15024
15025var BigInteger = require('bigi')
15026var ECSignature = require('./ecsignature')
15027
15028var ZERO = new Buffer([0])
15029var ONE = new Buffer([1])
15030
15031// https://tools.ietf.org/html/rfc6979#section-3.2
15032function deterministicGenerateK (curve, hash, d, checkSig) {
15033 typeForce('Buffer', hash)
15034 typeForce('BigInteger', d)
15035
15036 // FIXME: remove/uncomment for 2.0.0
15037 // typeForce('Function', checkSig)
15038
15039 if (typeof checkSig !== 'function') {
15040 console.warn('deterministicGenerateK requires a checkSig callback in 2.0.0, see #337 for more information')
15041
15042 checkSig = function (k) {
15043 var G = curve.G
15044 var n = curve.n
15045 var e = BigInteger.fromBuffer(hash)
15046
15047 var Q = G.multiply(k)
15048
15049 if (curve.isInfinity(Q))
15050 return false
15051
15052 var r = Q.affineX.mod(n)
15053 if (r.signum() === 0)
15054 return false
15055
15056 var s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n)
15057 if (s.signum() === 0)
15058 return false
15059
15060 return true
15061 }
15062 }
15063
15064 // sanity check
15065 assert.equal(hash.length, 32, 'Hash must be 256 bit')
15066
15067 var x = d.toBuffer(32)
15068 var k = new Buffer(32)
15069 var v = new Buffer(32)
15070
15071 // Step A, ignored as hash already provided
15072 // Step B
15073 v.fill(1)
15074
15075 // Step C
15076 k.fill(0)
15077
15078 // Step D
15079 k = createHmac('sha256', k)
15080 .update(v)
15081 .update(ZERO)
15082 .update(x)
15083 .update(hash)
15084 .digest()
15085
15086 // Step E
15087 v = createHmac('sha256', k).update(v).digest()
15088
15089 // Step F
15090 k = createHmac('sha256', k)
15091 .update(v)
15092 .update(ONE)
15093 .update(x)
15094 .update(hash)
15095 .digest()
15096
15097 // Step G
15098 v = createHmac('sha256', k).update(v).digest()
15099
15100 // Step H1/H2a, ignored as tlen === qlen (256 bit)
15101 // Step H2b
15102 v = createHmac('sha256', k).update(v).digest()
15103
15104 var T = BigInteger.fromBuffer(v)
15105
15106 // Step H3, repeat until T is within the interval [1, n - 1] and is suitable for ECDSA
15107 while ((T.signum() <= 0) || (T.compareTo(curve.n) >= 0) || !checkSig(T)) {
15108 k = createHmac('sha256', k)
15109 .update(v)
15110 .update(ZERO)
15111 .digest()
15112
15113 v = createHmac('sha256', k).update(v).digest()
15114
15115 // Step H1/H2a, again, ignored as tlen === qlen (256 bit)
15116 // Step H2b again
15117 v = createHmac('sha256', k).update(v).digest()
15118 T = BigInteger.fromBuffer(v)
15119 }
15120
15121 return T
15122}
15123
15124function sign (curve, hash, d) {
15125 var r, s
15126
15127 var e = BigInteger.fromBuffer(hash)
15128 var n = curve.n
15129 var G = curve.G
15130
15131 deterministicGenerateK(curve, hash, d, function (k) {
15132 var Q = G.multiply(k)
15133
15134 if (curve.isInfinity(Q))
15135 return false
15136
15137 r = Q.affineX.mod(n)
15138 if (r.signum() === 0)
15139 return false
15140
15141 s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n)
15142 if (s.signum() === 0)
15143 return false
15144
15145 return true
15146 })
15147
15148 var N_OVER_TWO = n.shiftRight(1)
15149
15150 // enforce low S values, see bip62: 'low s values in signatures'
15151 if (s.compareTo(N_OVER_TWO) > 0) {
15152 s = n.subtract(s)
15153 }
15154
15155 return new ECSignature(r, s)
15156}
15157
15158function verifyRaw (curve, e, signature, Q) {
15159 var n = curve.n
15160 var G = curve.G
15161
15162 var r = signature.r
15163 var s = signature.s
15164
15165 // 1.4.1 Enforce r and s are both integers in the interval [1, n − 1]
15166 if (r.signum() <= 0 || r.compareTo(n) >= 0) return false
15167 if (s.signum() <= 0 || s.compareTo(n) >= 0) return false
15168
15169 // c = s^-1 mod n
15170 var c = s.modInverse(n)
15171
15172 // 1.4.4 Compute u1 = es^−1 mod n
15173 // u2 = rs^−1 mod n
15174 var u1 = e.multiply(c).mod(n)
15175 var u2 = r.multiply(c).mod(n)
15176
15177 // 1.4.5 Compute R = (xR, yR) = u1G + u2Q
15178 var R = G.multiplyTwo(u1, Q, u2)
15179 var v = R.affineX.mod(n)
15180
15181 // 1.4.5 (cont.) Enforce R is not at infinity
15182 if (curve.isInfinity(R)) return false
15183
15184 // 1.4.8 If v = r, output "valid", and if v != r, output "invalid"
15185 return v.equals(r)
15186}
15187
15188function verify (curve, hash, signature, Q) {
15189 // 1.4.2 H = Hash(M), already done by the user
15190 // 1.4.3 e = H
15191 var e = BigInteger.fromBuffer(hash)
15192
15193 return verifyRaw(curve, e, signature, Q)
15194}
15195
15196/**
15197 * Recover a public key from a signature.
15198 *
15199 * See SEC 1: Elliptic Curve Cryptography, section 4.1.6, "Public
15200 * Key Recovery Operation".
15201 *
15202 * http://www.secg.org/download/aid-780/sec1-v2.pdf
15203 */
15204function recoverPubKey (curve, e, signature, i) {
15205 assert.strictEqual(i & 3, i, 'Recovery param is more than two bits')
15206
15207 var n = curve.n
15208 var G = curve.G
15209
15210 var r = signature.r
15211 var s = signature.s
15212
15213 assert(r.signum() > 0 && r.compareTo(n) < 0, 'Invalid r value')
15214 assert(s.signum() > 0 && s.compareTo(n) < 0, 'Invalid s value')
15215
15216 // A set LSB signifies that the y-coordinate is odd
15217 var isYOdd = i & 1
15218
15219 // The more significant bit specifies whether we should use the
15220 // first or second candidate key.
15221 var isSecondKey = i >> 1
15222
15223 // 1.1 Let x = r + jn
15224 var x = isSecondKey ? r.add(n) : r
15225 var R = curve.pointFromX(isYOdd, x)
15226
15227 // 1.4 Check that nR is at infinity
15228 var nR = R.multiply(n)
15229 assert(curve.isInfinity(nR), 'nR is not a valid curve point')
15230
15231 // Compute -e from e
15232 var eNeg = e.negate().mod(n)
15233
15234 // 1.6.1 Compute Q = r^-1 (sR - eG)
15235 // Q = r^-1 (sR + -eG)
15236 var rInv = r.modInverse(n)
15237
15238 var Q = R.multiplyTwo(s, G, eNeg).multiply(rInv)
15239 curve.validate(Q)
15240
15241 return Q
15242}
15243
15244/**
15245 * Calculate pubkey extraction parameter.
15246 *
15247 * When extracting a pubkey from a signature, we have to
15248 * distinguish four different cases. Rather than putting this
15249 * burden on the verifier, Bitcoin includes a 2-bit value with the
15250 * signature.
15251 *
15252 * This function simply tries all four cases and returns the value
15253 * that resulted in a successful pubkey recovery.
15254 */
15255function calcPubKeyRecoveryParam (curve, e, signature, Q) {
15256 for (var i = 0; i < 4; i++) {
15257 var Qprime = recoverPubKey(curve, e, signature, i)
15258
15259 // 1.6.2 Verify Q
15260 if (Qprime.equals(Q)) {
15261 return i
15262 }
15263 }
15264
15265 throw new Error('Unable to find valid recovery factor')
15266}
15267
15268module.exports = {
15269 calcPubKeyRecoveryParam: calcPubKeyRecoveryParam,
15270 deterministicGenerateK: deterministicGenerateK,
15271 recoverPubKey: recoverPubKey,
15272 sign: sign,
15273 verify: verify,
15274 verifyRaw: verifyRaw
15275}
15276
15277}).call(this,require("buffer").Buffer)
15278},{"./ecsignature":62,"assert":5,"bigi":3,"buffer":7,"create-hmac":45,"typeforce":53}],60:[function(require,module,exports){
15279(function (Buffer){
15280var assert = require('assert')
15281var base58check = require('bs58check')
15282var ecdsa = require('./ecdsa')
15283var networks = require('./networks')
15284var randomBytes = require('randombytes')
15285var typeForce = require('typeforce')
15286
15287var BigInteger = require('bigi')
15288var ECPubKey = require('./ecpubkey')
15289
15290var ecurve = require('ecurve')
15291var secp256k1 = ecurve.getCurveByName('secp256k1')
15292
15293function ECKey (d, compressed) {
15294 assert(d.signum() > 0, 'Private key must be greater than 0')
15295 assert(d.compareTo(ECKey.curve.n) < 0, 'Private key must be less than the curve order')
15296
15297 var Q = ECKey.curve.G.multiply(d)
15298
15299 this.d = d
15300 this.pub = new ECPubKey(Q, compressed)
15301}
15302
15303// Constants
15304ECKey.curve = secp256k1
15305
15306// Static constructors
15307ECKey.fromWIF = function (string) {
15308 var payload = base58check.decode(string)
15309 var compressed = false
15310
15311 // Ignore the version byte
15312 payload = payload.slice(1)
15313
15314 if (payload.length === 33) {
15315 assert.strictEqual(payload[32], 0x01, 'Invalid compression flag')
15316
15317 // Truncate the compression flag
15318 payload = payload.slice(0, -1)
15319 compressed = true
15320 }
15321
15322 assert.equal(payload.length, 32, 'Invalid WIF payload length')
15323
15324 var d = BigInteger.fromBuffer(payload)
15325 return new ECKey(d, compressed)
15326}
15327
15328ECKey.makeRandom = function (compressed, rng) {
15329 rng = rng || randomBytes
15330
15331 var buffer = rng(32)
15332 typeForce('Buffer', buffer)
15333 assert.equal(buffer.length, 32, 'Expected 256-bit Buffer from RNG')
15334
15335 var d = BigInteger.fromBuffer(buffer)
15336 d = d.mod(ECKey.curve.n)
15337
15338 return new ECKey(d, compressed)
15339}
15340
15341// Export functions
15342ECKey.prototype.toWIF = function (network) {
15343 network = network || networks.bitcoin
15344
15345 var bufferLen = this.pub.compressed ? 34 : 33
15346 var buffer = new Buffer(bufferLen)
15347
15348 buffer.writeUInt8(network.wif, 0)
15349 this.d.toBuffer(32).copy(buffer, 1)
15350
15351 if (this.pub.compressed) {
15352 buffer.writeUInt8(0x01, 33)
15353 }
15354
15355 return base58check.encode(buffer)
15356}
15357
15358// Operations
15359ECKey.prototype.sign = function (hash) {
15360 return ecdsa.sign(ECKey.curve, hash, this.d)
15361}
15362
15363module.exports = ECKey
15364
15365}).call(this,require("buffer").Buffer)
15366},{"./ecdsa":59,"./ecpubkey":61,"./networks":66,"assert":5,"bigi":3,"bs58check":31,"buffer":7,"ecurve":49,"randombytes":52,"typeforce":53}],61:[function(require,module,exports){
15367(function (Buffer){
15368var crypto = require('./crypto')
15369var ecdsa = require('./ecdsa')
15370var typeForce = require('typeforce')
15371var networks = require('./networks')
15372
15373var Address = require('./address')
15374
15375var ecurve = require('ecurve')
15376var secp256k1 = ecurve.getCurveByName('secp256k1')
15377
15378function ECPubKey (Q, compressed) {
15379 if (compressed === undefined) {
15380 compressed = true
15381 }
15382
15383 typeForce('Point', Q)
15384 typeForce('Boolean', compressed)
15385
15386 this.compressed = compressed
15387 this.Q = Q
15388}
15389
15390// Constants
15391ECPubKey.curve = secp256k1
15392
15393// Static constructors
15394ECPubKey.fromBuffer = function (buffer) {
15395 var Q = ecurve.Point.decodeFrom(ECPubKey.curve, buffer)
15396 return new ECPubKey(Q, Q.compressed)
15397}
15398
15399ECPubKey.fromHex = function (hex) {
15400 return ECPubKey.fromBuffer(new Buffer(hex, 'hex'))
15401}
15402
15403// Operations
15404ECPubKey.prototype.getAddress = function (network) {
15405 network = network || networks.bitcoin
15406
15407 return new Address(crypto.hash160(this.toBuffer()), network.pubKeyHash)
15408}
15409
15410ECPubKey.prototype.verify = function (hash, signature) {
15411 return ecdsa.verify(ECPubKey.curve, hash, signature, this.Q)
15412}
15413
15414// Export functions
15415ECPubKey.prototype.toBuffer = function () {
15416 return this.Q.getEncoded(this.compressed)
15417}
15418
15419ECPubKey.prototype.toHex = function () {
15420 return this.toBuffer().toString('hex')
15421}
15422
15423module.exports = ECPubKey
15424
15425}).call(this,require("buffer").Buffer)
15426},{"./address":54,"./crypto":58,"./ecdsa":59,"./networks":66,"buffer":7,"ecurve":49,"typeforce":53}],62:[function(require,module,exports){
15427(function (Buffer){
15428var assert = require('assert')
15429var typeForce = require('typeforce')
15430
15431var BigInteger = require('bigi')
15432
15433function ECSignature (r, s) {
15434 typeForce('BigInteger', r)
15435 typeForce('BigInteger', s)
15436
15437 this.r = r
15438 this.s = s
15439}
15440
15441ECSignature.parseCompact = function (buffer) {
15442 assert.equal(buffer.length, 65, 'Invalid signature length')
15443 var i = buffer.readUInt8(0) - 27
15444
15445 // At most 3 bits
15446 assert.equal(i, i & 7, 'Invalid signature parameter')
15447 var compressed = !!(i & 4)
15448
15449 // Recovery param only
15450 i = i & 3
15451
15452 var r = BigInteger.fromBuffer(buffer.slice(1, 33))
15453 var s = BigInteger.fromBuffer(buffer.slice(33))
15454
15455 return {
15456 compressed: compressed,
15457 i: i,
15458 signature: new ECSignature(r, s)
15459 }
15460}
15461
15462ECSignature.fromDER = function (buffer) {
15463 assert.equal(buffer.readUInt8(0), 0x30, 'Not a DER sequence')
15464 assert.equal(buffer.readUInt8(1), buffer.length - 2, 'Invalid sequence length')
15465 assert.equal(buffer.readUInt8(2), 0x02, 'Expected a DER integer')
15466
15467 var rLen = buffer.readUInt8(3)
15468 assert(rLen > 0, 'R length is zero')
15469
15470 var offset = 4 + rLen
15471 assert.equal(buffer.readUInt8(offset), 0x02, 'Expected a DER integer (2)')
15472
15473 var sLen = buffer.readUInt8(offset + 1)
15474 assert(sLen > 0, 'S length is zero')
15475
15476 var rB = buffer.slice(4, offset)
15477 var sB = buffer.slice(offset + 2)
15478 offset += 2 + sLen
15479
15480 if (rLen > 1 && rB.readUInt8(0) === 0x00) {
15481 assert(rB.readUInt8(1) & 0x80, 'R value excessively padded')
15482 }
15483
15484 if (sLen > 1 && sB.readUInt8(0) === 0x00) {
15485 assert(sB.readUInt8(1) & 0x80, 'S value excessively padded')
15486 }
15487
15488 assert.equal(offset, buffer.length, 'Invalid DER encoding')
15489 var r = BigInteger.fromDERInteger(rB)
15490 var s = BigInteger.fromDERInteger(sB)
15491
15492 assert(r.signum() >= 0, 'R value is negative')
15493 assert(s.signum() >= 0, 'S value is negative')
15494
15495 return new ECSignature(r, s)
15496}
15497
15498// BIP62: 1 byte hashType flag (only 0x01, 0x02, 0x03, 0x81, 0x82 and 0x83 are allowed)
15499ECSignature.parseScriptSignature = function (buffer) {
15500 var hashType = buffer.readUInt8(buffer.length - 1)
15501 var hashTypeMod = hashType & ~0x80
15502
15503 assert(hashTypeMod > 0x00 && hashTypeMod < 0x04, 'Invalid hashType ' + hashType)
15504
15505 return {
15506 signature: ECSignature.fromDER(buffer.slice(0, -1)),
15507 hashType: hashType
15508 }
15509}
15510
15511ECSignature.prototype.toCompact = function (i, compressed) {
15512 if (compressed) {
15513 i += 4
15514 }
15515
15516 i += 27
15517
15518 var buffer = new Buffer(65)
15519 buffer.writeUInt8(i, 0)
15520
15521 this.r.toBuffer(32).copy(buffer, 1)
15522 this.s.toBuffer(32).copy(buffer, 33)
15523
15524 return buffer
15525}
15526
15527ECSignature.prototype.toDER = function () {
15528 var rBa = this.r.toDERInteger()
15529 var sBa = this.s.toDERInteger()
15530
15531 var sequence = []
15532
15533 // INTEGER
15534 sequence.push(0x02, rBa.length)
15535 sequence = sequence.concat(rBa)
15536
15537 // INTEGER
15538 sequence.push(0x02, sBa.length)
15539 sequence = sequence.concat(sBa)
15540
15541 // SEQUENCE
15542 sequence.unshift(0x30, sequence.length)
15543
15544 return new Buffer(sequence)
15545}
15546
15547ECSignature.prototype.toScriptSignature = function (hashType) {
15548 var hashTypeMod = hashType & ~0x80
15549 assert(hashTypeMod > 0x00 && hashTypeMod < 0x04, 'Invalid hashType ' + hashType)
15550
15551 var hashTypeBuffer = new Buffer(1)
15552 hashTypeBuffer.writeUInt8(hashType, 0)
15553
15554 return Buffer.concat([this.toDER(), hashTypeBuffer])
15555}
15556
15557module.exports = ECSignature
15558
15559}).call(this,require("buffer").Buffer)
15560},{"assert":5,"bigi":3,"buffer":7,"typeforce":53}],63:[function(require,module,exports){
15561(function (Buffer){
15562var assert = require('assert')
15563var base58check = require('bs58check')
15564var bcrypto = require('./crypto')
15565var createHmac = require('create-hmac')
15566var typeForce = require('typeforce')
15567var networks = require('./networks')
15568
15569var BigInteger = require('bigi')
15570var ECKey = require('./eckey')
15571var ECPubKey = require('./ecpubkey')
15572
15573var ecurve = require('ecurve')
15574var curve = ecurve.getCurveByName('secp256k1')
15575
15576function findBIP32NetworkByVersion (version) {
15577 for (var name in networks) {
15578 var network = networks[name]
15579
15580 if (version === network.bip32.private || version === network.bip32.public) {
15581 return network
15582 }
15583 }
15584
15585 assert(false, 'Could not find network for ' + version.toString(16))
15586}
15587
15588function HDNode (K, chainCode, network) {
15589 network = network || networks.bitcoin
15590
15591 typeForce('Buffer', chainCode)
15592
15593 assert.equal(chainCode.length, 32, 'Expected chainCode length of 32, got ' + chainCode.length)
15594 assert(network.bip32, 'Unknown BIP32 constants for network')
15595
15596 this.chainCode = chainCode
15597 this.depth = 0
15598 this.index = 0
15599 this.parentFingerprint = 0x00000000
15600 this.network = network
15601
15602 if (K instanceof BigInteger) {
15603 this.privKey = new ECKey(K, true)
15604 this.pubKey = this.privKey.pub
15605 } else if (K instanceof ECKey) {
15606 assert(K.pub.compressed, 'ECKey must be compressed')
15607 this.privKey = K
15608 this.pubKey = K.pub
15609 } else if (K instanceof ECPubKey) {
15610 assert(K.compressed, 'ECPubKey must be compressed')
15611 this.pubKey = K
15612 } else {
15613 this.pubKey = new ECPubKey(K, true)
15614 }
15615}
15616
15617HDNode.MASTER_SECRET = new Buffer('Bitcoin seed')
15618HDNode.HIGHEST_BIT = 0x80000000
15619HDNode.LENGTH = 78
15620
15621HDNode.fromSeedBuffer = function (seed, network) {
15622 typeForce('Buffer', seed)
15623
15624 assert(seed.length >= 16, 'Seed should be at least 128 bits')
15625 assert(seed.length <= 64, 'Seed should be at most 512 bits')
15626
15627 var I = createHmac('sha512', HDNode.MASTER_SECRET).update(seed).digest()
15628 var IL = I.slice(0, 32)
15629 var IR = I.slice(32)
15630
15631 // In case IL is 0 or >= n, the master key is invalid
15632 // This is handled by `new ECKey` in the HDNode constructor
15633 var pIL = BigInteger.fromBuffer(IL)
15634
15635 return new HDNode(pIL, IR, network)
15636}
15637
15638HDNode.fromSeedHex = function (hex, network) {
15639 return HDNode.fromSeedBuffer(new Buffer(hex, 'hex'), network)
15640}
15641
15642HDNode.fromBase58 = function (string, network) {
15643 return HDNode.fromBuffer(base58check.decode(string), network, true)
15644}
15645
15646// FIXME: remove in 2.x.y
15647HDNode.fromBuffer = function (buffer, network, __ignoreDeprecation) {
15648 if (!__ignoreDeprecation) {
15649 console.warn('HDNode.fromBuffer() is deprecated for removal in 2.x.y, use fromBase58 instead')
15650 }
15651
15652 assert.strictEqual(buffer.length, HDNode.LENGTH, 'Invalid buffer length')
15653
15654 // 4 byte: version bytes
15655 var version = buffer.readUInt32BE(0)
15656
15657 if (network) {
15658 assert(version === network.bip32.private || version === network.bip32.public, "Network doesn't match")
15659
15660 // auto-detect
15661 } else {
15662 network = findBIP32NetworkByVersion(version)
15663 }
15664
15665 // 1 byte: depth: 0x00 for master nodes, 0x01 for level-1 descendants, ...
15666 var depth = buffer.readUInt8(4)
15667
15668 // 4 bytes: the fingerprint of the parent's key (0x00000000 if master key)
15669 var parentFingerprint = buffer.readUInt32BE(5)
15670 if (depth === 0) {
15671 assert.strictEqual(parentFingerprint, 0x00000000, 'Invalid parent fingerprint')
15672 }
15673
15674 // 4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
15675 // This is encoded in MSB order. (0x00000000 if master key)
15676 var index = buffer.readUInt32BE(9)
15677 assert(depth > 0 || index === 0, 'Invalid index')
15678
15679 // 32 bytes: the chain code
15680 var chainCode = buffer.slice(13, 45)
15681 var data, hd
15682
15683 // 33 bytes: private key data (0x00 + k)
15684 if (version === network.bip32.private) {
15685 assert.strictEqual(buffer.readUInt8(45), 0x00, 'Invalid private key')
15686 data = buffer.slice(46, 78)
15687 var d = BigInteger.fromBuffer(data)
15688 hd = new HDNode(d, chainCode, network)
15689
15690 // 33 bytes: public key data (0x02 + X or 0x03 + X)
15691 } else {
15692 data = buffer.slice(45, 78)
15693 var Q = ecurve.Point.decodeFrom(curve, data)
15694 assert.equal(Q.compressed, true, 'Invalid public key')
15695
15696 // Verify that the X coordinate in the public point corresponds to a point on the curve.
15697 // If not, the extended public key is invalid.
15698 curve.validate(Q)
15699
15700 hd = new HDNode(Q, chainCode, network)
15701 }
15702
15703 hd.depth = depth
15704 hd.index = index
15705 hd.parentFingerprint = parentFingerprint
15706
15707 return hd
15708}
15709
15710// FIXME: remove in 2.x.y
15711HDNode.fromHex = function (hex, network) {
15712 return HDNode.fromBuffer(new Buffer(hex, 'hex'), network)
15713}
15714
15715HDNode.prototype.getIdentifier = function () {
15716 return bcrypto.hash160(this.pubKey.toBuffer())
15717}
15718
15719HDNode.prototype.getFingerprint = function () {
15720 return this.getIdentifier().slice(0, 4)
15721}
15722
15723HDNode.prototype.getAddress = function () {
15724 return this.pubKey.getAddress(this.network)
15725}
15726
15727HDNode.prototype.neutered = function () {
15728 var neutered = new HDNode(this.pubKey.Q, this.chainCode, this.network)
15729 neutered.depth = this.depth
15730 neutered.index = this.index
15731 neutered.parentFingerprint = this.parentFingerprint
15732
15733 return neutered
15734}
15735
15736HDNode.prototype.toBase58 = function (isPrivate) {
15737 return base58check.encode(this.toBuffer(isPrivate, true))
15738}
15739
15740// FIXME: remove in 2.x.y
15741HDNode.prototype.toBuffer = function (isPrivate, __ignoreDeprecation) {
15742 if (isPrivate === undefined) {
15743 isPrivate = !!this.privKey
15744
15745 // FIXME: remove in 2.x.y
15746 } else {
15747 console.warn('isPrivate flag is deprecated, please use the .neutered() method instead')
15748 }
15749
15750 if (!__ignoreDeprecation) {
15751 console.warn('HDNode.toBuffer() is deprecated for removal in 2.x.y, use toBase58 instead')
15752 }
15753
15754 // Version
15755 var version = isPrivate ? this.network.bip32.private : this.network.bip32.public
15756 var buffer = new Buffer(HDNode.LENGTH)
15757
15758 // 4 bytes: version bytes
15759 buffer.writeUInt32BE(version, 0)
15760
15761 // Depth
15762 // 1 byte: depth: 0x00 for master nodes, 0x01 for level-1 descendants, ....
15763 buffer.writeUInt8(this.depth, 4)
15764
15765 // 4 bytes: the fingerprint of the parent's key (0x00000000 if master key)
15766 buffer.writeUInt32BE(this.parentFingerprint, 5)
15767
15768 // 4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
15769 // This is encoded in Big endian. (0x00000000 if master key)
15770 buffer.writeUInt32BE(this.index, 9)
15771
15772 // 32 bytes: the chain code
15773 this.chainCode.copy(buffer, 13)
15774
15775 // 33 bytes: the public key or private key data
15776 if (isPrivate) {
15777 // FIXME: remove in 2.x.y
15778 assert(this.privKey, 'Missing private key')
15779
15780 // 0x00 + k for private keys
15781 buffer.writeUInt8(0, 45)
15782 this.privKey.d.toBuffer(32).copy(buffer, 46)
15783 } else {
15784 // X9.62 encoding for public keys
15785 this.pubKey.toBuffer().copy(buffer, 45)
15786 }
15787
15788 return buffer
15789}
15790
15791// FIXME: remove in 2.x.y
15792HDNode.prototype.toHex = function (isPrivate) {
15793 return this.toBuffer(isPrivate).toString('hex')
15794}
15795
15796// https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#child-key-derivation-ckd-functions
15797HDNode.prototype.derive = function (index) {
15798 var isHardened = index >= HDNode.HIGHEST_BIT
15799 var indexBuffer = new Buffer(4)
15800 indexBuffer.writeUInt32BE(index, 0)
15801
15802 var data
15803
15804 // Hardened child
15805 if (isHardened) {
15806 assert(this.privKey, 'Could not derive hardened child key')
15807
15808 // data = 0x00 || ser256(kpar) || ser32(index)
15809 data = Buffer.concat([
15810 this.privKey.d.toBuffer(33),
15811 indexBuffer
15812 ])
15813
15814 // Normal child
15815 } else {
15816 // data = serP(point(kpar)) || ser32(index)
15817 // = serP(Kpar) || ser32(index)
15818 data = Buffer.concat([
15819 this.pubKey.toBuffer(),
15820 indexBuffer
15821 ])
15822 }
15823
15824 var I = createHmac('sha512', this.chainCode).update(data).digest()
15825 var IL = I.slice(0, 32)
15826 var IR = I.slice(32)
15827
15828 var pIL = BigInteger.fromBuffer(IL)
15829
15830 // In case parse256(IL) >= n, proceed with the next value for i
15831 if (pIL.compareTo(curve.n) >= 0) {
15832 return this.derive(index + 1)
15833 }
15834
15835 // Private parent key -> private child key
15836 var hd
15837 if (this.privKey) {
15838 // ki = parse256(IL) + kpar (mod n)
15839 var ki = pIL.add(this.privKey.d).mod(curve.n)
15840
15841 // In case ki == 0, proceed with the next value for i
15842 if (ki.signum() === 0) {
15843 return this.derive(index + 1)
15844 }
15845
15846 hd = new HDNode(ki, IR, this.network)
15847
15848 // Public parent key -> public child key
15849 } else {
15850 // Ki = point(parse256(IL)) + Kpar
15851 // = G*IL + Kpar
15852 var Ki = curve.G.multiply(pIL).add(this.pubKey.Q)
15853
15854 // In case Ki is the point at infinity, proceed with the next value for i
15855 if (curve.isInfinity(Ki)) {
15856 return this.derive(index + 1)
15857 }
15858
15859 hd = new HDNode(Ki, IR, this.network)
15860 }
15861
15862 hd.depth = this.depth + 1
15863 hd.index = index
15864 hd.parentFingerprint = this.getFingerprint().readUInt32BE(0)
15865
15866 return hd
15867}
15868
15869HDNode.prototype.deriveHardened = function (index) {
15870 // Only derives hardened private keys by default
15871 return this.derive(index + HDNode.HIGHEST_BIT)
15872}
15873
15874HDNode.prototype.toString = HDNode.prototype.toBase58
15875
15876module.exports = HDNode
15877
15878}).call(this,require("buffer").Buffer)
15879},{"./crypto":58,"./eckey":60,"./ecpubkey":61,"./networks":66,"assert":5,"bigi":3,"bs58check":31,"buffer":7,"create-hmac":45,"ecurve":49,"typeforce":53}],64:[function(require,module,exports){
15880module.exports = {
15881 Address: require('./address'),
15882 base58check: require('./base58check'),
15883 Block: require('./block'),
15884 bufferutils: require('./bufferutils'),
15885 crypto: require('./crypto'),
15886 ecdsa: require('./ecdsa'),
15887 ECKey: require('./eckey'),
15888 ECPubKey: require('./ecpubkey'),
15889 ECSignature: require('./ecsignature'),
15890 Message: require('./message'),
15891 opcodes: require('./opcodes'),
15892 HDNode: require('./hdnode'),
15893 Script: require('./script'),
15894 scripts: require('./scripts'),
15895 Transaction: require('./transaction'),
15896 TransactionBuilder: require('./transaction_builder'),
15897 networks: require('./networks'),
15898 Wallet: require('./wallet')
15899}
15900
15901},{"./address":54,"./base58check":55,"./block":56,"./bufferutils":57,"./crypto":58,"./ecdsa":59,"./eckey":60,"./ecpubkey":61,"./ecsignature":62,"./hdnode":63,"./message":65,"./networks":66,"./opcodes":67,"./script":68,"./scripts":69,"./transaction":70,"./transaction_builder":71,"./wallet":72}],65:[function(require,module,exports){
15902(function (Buffer){
15903var bufferutils = require('./bufferutils')
15904var crypto = require('./crypto')
15905var ecdsa = require('./ecdsa')
15906var networks = require('./networks')
15907
15908var BigInteger = require('bigi')
15909var ECPubKey = require('./ecpubkey')
15910var ECSignature = require('./ecsignature')
15911
15912var ecurve = require('ecurve')
15913var ecparams = ecurve.getCurveByName('secp256k1')
15914
15915function magicHash (message, network) {
15916 var magicPrefix = new Buffer(network.magicPrefix)
15917 var messageBuffer = new Buffer(message)
15918 var lengthBuffer = bufferutils.varIntBuffer(messageBuffer.length)
15919
15920 var buffer = Buffer.concat([magicPrefix, lengthBuffer, messageBuffer])
15921 return crypto.hash256(buffer)
15922}
15923
15924function sign (privKey, message, network) {
15925 network = network || networks.bitcoin
15926
15927 var hash = magicHash(message, network)
15928 var signature = privKey.sign(hash)
15929 var e = BigInteger.fromBuffer(hash)
15930 var i = ecdsa.calcPubKeyRecoveryParam(ecparams, e, signature, privKey.pub.Q)
15931
15932 return signature.toCompact(i, privKey.pub.compressed)
15933}
15934
15935// TODO: network could be implied from address
15936function verify (address, signature, message, network) {
15937 if (!Buffer.isBuffer(signature)) {
15938 signature = new Buffer(signature, 'base64')
15939 }
15940
15941 network = network || networks.bitcoin
15942
15943 var hash = magicHash(message, network)
15944 var parsed = ECSignature.parseCompact(signature)
15945 var e = BigInteger.fromBuffer(hash)
15946 var Q = ecdsa.recoverPubKey(ecparams, e, parsed.signature, parsed.i)
15947
15948 var pubKey = new ECPubKey(Q, parsed.compressed)
15949 return pubKey.getAddress(network).toString() === address.toString()
15950}
15951
15952module.exports = {
15953 magicHash: magicHash,
15954 sign: sign,
15955 verify: verify
15956}
15957
15958}).call(this,require("buffer").Buffer)
15959},{"./bufferutils":57,"./crypto":58,"./ecdsa":59,"./ecpubkey":61,"./ecsignature":62,"./networks":66,"bigi":3,"buffer":7,"ecurve":49}],66:[function(require,module,exports){
15960// https://en.bitcoin.it/wiki/List_of_address_prefixes
15961// Dogecoin BIP32 is a proposed standard: https://bitcointalk.org/index.php?topic=409731
15962
15963var networks = {
15964 bitcoin: {
15965 magicPrefix: '\x18Bitcoin Signed Message:\n',
15966 bip32: {
15967 public: 0x0488b21e,
15968 private: 0x0488ade4
15969 },
15970 pubKeyHash: 0x00,
15971 scriptHash: 0x05,
15972 wif: 0x80,
15973 dustThreshold: 546, // https://github.com/bitcoin/bitcoin/blob/v0.9.2/src/core.h#L151-L162
15974 feePerKb: 10000, // https://github.com/bitcoin/bitcoin/blob/v0.9.2/src/main.cpp#L53
15975 estimateFee: estimateFee('bitcoin')
15976 },
15977 testnet: {
15978 magicPrefix: '\x18Bitcoin Signed Message:\n',
15979 bip32: {
15980 public: 0x043587cf,
15981 private: 0x04358394
15982 },
15983 pubKeyHash: 0x6f,
15984 scriptHash: 0xc4,
15985 wif: 0xef,
15986 dustThreshold: 546,
15987 feePerKb: 10000,
15988 estimateFee: estimateFee('testnet')
15989 },
15990 litecoin: {
15991 magicPrefix: '\x19Litecoin Signed Message:\n',
15992 bip32: {
15993 public: 0x019da462,
15994 private: 0x019d9cfe
15995 },
15996 pubKeyHash: 0x30,
15997 scriptHash: 0x05,
15998 wif: 0xb0,
15999 dustThreshold: 0, // https://github.com/litecoin-project/litecoin/blob/v0.8.7.2/src/main.cpp#L360-L365
16000 dustSoftThreshold: 100000, // https://github.com/litecoin-project/litecoin/blob/v0.8.7.2/src/main.h#L53
16001 feePerKb: 100000, // https://github.com/litecoin-project/litecoin/blob/v0.8.7.2/src/main.cpp#L56
16002 estimateFee: estimateFee('litecoin')
16003 },
16004 dogecoin: {
16005 magicPrefix: '\x19Dogecoin Signed Message:\n',
16006 bip32: {
16007 public: 0x02facafd,
16008 private: 0x02fac398
16009 },
16010 pubKeyHash: 0x1e,
16011 scriptHash: 0x16,
16012 wif: 0x9e,
16013 dustThreshold: 0, // https://github.com/dogecoin/dogecoin/blob/v1.7.1/src/core.h#L155-L160
16014 dustSoftThreshold: 100000000, // https://github.com/dogecoin/dogecoin/blob/v1.7.1/src/main.h#L62
16015 feePerKb: 100000000, // https://github.com/dogecoin/dogecoin/blob/v1.7.1/src/main.cpp#L58
16016 estimateFee: estimateFee('dogecoin')
16017 },
16018 viacoin: {
16019 magicPrefix: '\x18Viacoin Signed Message:\n',
16020 bip32: {
16021 public: 0x0488b21e,
16022 private: 0x0488ade4
16023 },
16024 pubKeyHash: 0x47,
16025 scriptHash: 0x21,
16026 wif: 0xc7,
16027 dustThreshold: 560,
16028 dustSoftThreshold: 100000,
16029 feePerKb: 100000, //
16030 estimateFee: estimateFee('viacoin')
16031 },
16032 viacointestnet: {
16033 magicPrefix: '\x18Viacoin Signed Message:\n',
16034 bip32: {
16035 public: 0x043587cf,
16036 private: 0x04358394
16037 },
16038 pubKeyHash: 0x7f,
16039 scriptHash: 0xc4,
16040 wif: 0xff,
16041 dustThreshold: 560,
16042 dustSoftThreshold: 100000,
16043 feePerKb: 100000,
16044 estimateFee: estimateFee('viacointestnet')
16045 },
16046 gamerscoin: {
16047 magicPrefix: '\x19Gamerscoin Signed Message:\n',
16048 bip32: {
16049 public: 0x019da462,
16050 private: 0x019d9cfe
16051 },
16052 pubKeyHash: 0x26,
16053 scriptHash: 0x05,
16054 wif: 0xA6,
16055 dustThreshold: 0, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L358-L363
16056 dustSoftThreshold: 100000, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L51
16057 feePerKb: 100000, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L54
16058 estimateFee: estimateFee('gamerscoin')
16059 },
16060 jumbucks: {
16061 magicPrefix: '\x19Jumbucks Signed Message:\n',
16062 bip32: {
16063 public: 0x037a689a,
16064 private: 0x037a6460
16065 },
16066 pubKeyHash: 0x2b,
16067 scriptHash: 0x05,
16068 wif: 0xab,
16069 dustThreshold: 0,
16070 dustSoftThreshold: 10000,
16071 feePerKb: 10000,
16072 estimateFee: estimateFee('jumbucks')
16073 },
16074 zetacoin: {
16075 magicPrefix: '\x18Zetacoin Signed Message:\n',
16076 bip32: {
16077 public: 0x0488b21e,
16078 private: 0x0488ade4
16079 },
16080 pubKeyHash: 0x50,
16081 scriptHash: 0x09,
16082 wif: 0xe0,
16083 dustThreshold: 546, // https://github.com/zetacoin/zetacoin/blob/master/src/core.h#L159
16084 feePerKb: 10000, // https://github.com/zetacoin/zetacoin/blob/master/src/main.cpp#L54
16085 estimateFee: estimateFee('zetacoin')
16086 }
16087}
16088
16089function estimateFee (type) {
16090 return function (tx) {
16091 var network = networks[type]
16092 var baseFee = network.feePerKb
16093 var byteSize = tx.toBuffer().length
16094
16095 var fee = baseFee * Math.ceil(byteSize / 1000)
16096 if (network.dustSoftThreshold === undefined) return fee
16097
16098 tx.outs.forEach(function (e) {
16099 if (e.value < network.dustSoftThreshold) {
16100 fee += baseFee
16101 }
16102 })
16103
16104 return fee
16105 }
16106}
16107
16108module.exports = networks
16109
16110},{}],67:[function(require,module,exports){
16111module.exports = {
16112 // push value
16113 OP_FALSE: 0,
16114 OP_0: 0,
16115 OP_PUSHDATA1: 76,
16116 OP_PUSHDATA2: 77,
16117 OP_PUSHDATA4: 78,
16118 OP_1NEGATE: 79,
16119 OP_RESERVED: 80,
16120 OP_1: 81,
16121 OP_TRUE: 81,
16122 OP_2: 82,
16123 OP_3: 83,
16124 OP_4: 84,
16125 OP_5: 85,
16126 OP_6: 86,
16127 OP_7: 87,
16128 OP_8: 88,
16129 OP_9: 89,
16130 OP_10: 90,
16131 OP_11: 91,
16132 OP_12: 92,
16133 OP_13: 93,
16134 OP_14: 94,
16135 OP_15: 95,
16136 OP_16: 96,
16137
16138 // control
16139 OP_NOP: 97,
16140 OP_VER: 98,
16141 OP_IF: 99,
16142 OP_NOTIF: 100,
16143 OP_VERIF: 101,
16144 OP_VERNOTIF: 102,
16145 OP_ELSE: 103,
16146 OP_ENDIF: 104,
16147 OP_VERIFY: 105,
16148 OP_RETURN: 106,
16149
16150 // stack ops
16151 OP_TOALTSTACK: 107,
16152 OP_FROMALTSTACK: 108,
16153 OP_2DROP: 109,
16154 OP_2DUP: 110,
16155 OP_3DUP: 111,
16156 OP_2OVER: 112,
16157 OP_2ROT: 113,
16158 OP_2SWAP: 114,
16159 OP_IFDUP: 115,
16160 OP_DEPTH: 116,
16161 OP_DROP: 117,
16162 OP_DUP: 118,
16163 OP_NIP: 119,
16164 OP_OVER: 120,
16165 OP_PICK: 121,
16166 OP_ROLL: 122,
16167 OP_ROT: 123,
16168 OP_SWAP: 124,
16169 OP_TUCK: 125,
16170
16171 // splice ops
16172 OP_CAT: 126,
16173 OP_SUBSTR: 127,
16174 OP_LEFT: 128,
16175 OP_RIGHT: 129,
16176 OP_SIZE: 130,
16177
16178 // bit logic
16179 OP_INVERT: 131,
16180 OP_AND: 132,
16181 OP_OR: 133,
16182 OP_XOR: 134,
16183 OP_EQUAL: 135,
16184 OP_EQUALVERIFY: 136,
16185 OP_RESERVED1: 137,
16186 OP_RESERVED2: 138,
16187
16188 // numeric
16189 OP_1ADD: 139,
16190 OP_1SUB: 140,
16191 OP_2MUL: 141,
16192 OP_2DIV: 142,
16193 OP_NEGATE: 143,
16194 OP_ABS: 144,
16195 OP_NOT: 145,
16196 OP_0NOTEQUAL: 146,
16197
16198 OP_ADD: 147,
16199 OP_SUB: 148,
16200 OP_MUL: 149,
16201 OP_DIV: 150,
16202 OP_MOD: 151,
16203 OP_LSHIFT: 152,
16204 OP_RSHIFT: 153,
16205
16206 OP_BOOLAND: 154,
16207 OP_BOOLOR: 155,
16208 OP_NUMEQUAL: 156,
16209 OP_NUMEQUALVERIFY: 157,
16210 OP_NUMNOTEQUAL: 158,
16211 OP_LESSTHAN: 159,
16212 OP_GREATERTHAN: 160,
16213 OP_LESSTHANOREQUAL: 161,
16214 OP_GREATERTHANOREQUAL: 162,
16215 OP_MIN: 163,
16216 OP_MAX: 164,
16217
16218 OP_WITHIN: 165,
16219
16220 // crypto
16221 OP_RIPEMD160: 166,
16222 OP_SHA1: 167,
16223 OP_SHA256: 168,
16224 OP_HASH160: 169,
16225 OP_HASH256: 170,
16226 OP_CODESEPARATOR: 171,
16227 OP_CHECKSIG: 172,
16228 OP_CHECKSIGVERIFY: 173,
16229 OP_CHECKMULTISIG: 174,
16230 OP_CHECKMULTISIGVERIFY: 175,
16231
16232 // expansion
16233 OP_NOP1: 176,
16234 OP_NOP2: 177,
16235 OP_NOP3: 178,
16236 OP_NOP4: 179,
16237 OP_NOP5: 180,
16238 OP_NOP6: 181,
16239 OP_NOP7: 182,
16240 OP_NOP8: 183,
16241 OP_NOP9: 184,
16242 OP_NOP10: 185,
16243
16244 // template matching params
16245 OP_PUBKEYHASH: 253,
16246 OP_PUBKEY: 254,
16247 OP_INVALIDOPCODE: 255
16248}
16249
16250},{}],68:[function(require,module,exports){
16251(function (Buffer){
16252var assert = require('assert')
16253var bufferutils = require('./bufferutils')
16254var crypto = require('./crypto')
16255var typeForce = require('typeforce')
16256var opcodes = require('./opcodes')
16257
16258function Script (buffer, chunks) {
16259 typeForce('Buffer', buffer)
16260 typeForce('Array', chunks)
16261
16262 this.buffer = buffer
16263 this.chunks = chunks
16264}
16265
16266Script.fromASM = function (asm) {
16267 var strChunks = asm.split(' ')
16268 var chunks = strChunks.map(function (strChunk) {
16269 // opcode
16270 if (strChunk in opcodes) {
16271 return opcodes[strChunk]
16272
16273 // data chunk
16274 } else {
16275 return new Buffer(strChunk, 'hex')
16276 }
16277 })
16278
16279 return Script.fromChunks(chunks)
16280}
16281
16282Script.fromBuffer = function (buffer) {
16283 var chunks = []
16284 var i = 0
16285
16286 while (i < buffer.length) {
16287 var opcode = buffer.readUInt8(i)
16288
16289 // data chunk
16290 if ((opcode > opcodes.OP_0) && (opcode <= opcodes.OP_PUSHDATA4)) {
16291 var d = bufferutils.readPushDataInt(buffer, i)
16292
16293 // did reading a pushDataInt fail? return non-chunked script
16294 if (d === null) return new Script(buffer, [])
16295 i += d.size
16296
16297 // attempt to read too much data?
16298 if (i + d.number > buffer.length) return new Script(buffer, [])
16299
16300 var data = buffer.slice(i, i + d.number)
16301 i += d.number
16302
16303 chunks.push(data)
16304
16305 // opcode
16306 } else {
16307 chunks.push(opcode)
16308
16309 i += 1
16310 }
16311 }
16312
16313 return new Script(buffer, chunks)
16314}
16315
16316Script.fromChunks = function (chunks) {
16317 typeForce('Array', chunks)
16318
16319 var bufferSize = chunks.reduce(function (accum, chunk) {
16320 // data chunk
16321 if (Buffer.isBuffer(chunk)) {
16322 return accum + bufferutils.pushDataSize(chunk.length) + chunk.length
16323 }
16324
16325 // opcode
16326 return accum + 1
16327 }, 0.0)
16328
16329 var buffer = new Buffer(bufferSize)
16330 var offset = 0
16331
16332 chunks.forEach(function (chunk) {
16333 // data chunk
16334 if (Buffer.isBuffer(chunk)) {
16335 offset += bufferutils.writePushDataInt(buffer, chunk.length, offset)
16336
16337 chunk.copy(buffer, offset)
16338 offset += chunk.length
16339
16340 // opcode
16341 } else {
16342 buffer.writeUInt8(chunk, offset)
16343 offset += 1
16344 }
16345 })
16346
16347 assert.equal(offset, buffer.length, 'Could not decode chunks')
16348 return new Script(buffer, chunks)
16349}
16350
16351Script.fromHex = function (hex) {
16352 return Script.fromBuffer(new Buffer(hex, 'hex'))
16353}
16354
16355Script.EMPTY = Script.fromChunks([])
16356
16357Script.prototype.getHash = function () {
16358 return crypto.hash160(this.buffer)
16359}
16360
16361// FIXME: doesn't work for data chunks, maybe time to use buffertools.compare...
16362Script.prototype.without = function (needle) {
16363 return Script.fromChunks(this.chunks.filter(function (op) {
16364 return op !== needle
16365 }))
16366}
16367
16368var reverseOps = []
16369for (var op in opcodes) {
16370 var code = opcodes[op]
16371 reverseOps[code] = op
16372}
16373
16374Script.prototype.toASM = function () {
16375 return this.chunks.map(function (chunk) {
16376 // data chunk
16377 if (Buffer.isBuffer(chunk)) {
16378 return chunk.toString('hex')
16379
16380 // opcode
16381 } else {
16382 return reverseOps[chunk]
16383 }
16384 }).join(' ')
16385}
16386
16387Script.prototype.toBuffer = function () {
16388 return this.buffer
16389}
16390
16391Script.prototype.toHex = function () {
16392 return this.toBuffer().toString('hex')
16393}
16394
16395module.exports = Script
16396
16397}).call(this,require("buffer").Buffer)
16398},{"./bufferutils":57,"./crypto":58,"./opcodes":67,"assert":5,"buffer":7,"typeforce":53}],69:[function(require,module,exports){
16399(function (Buffer){
16400var assert = require('assert')
16401var ops = require('./opcodes')
16402var typeForce = require('typeforce')
16403
16404var ecurve = require('ecurve')
16405var curve = ecurve.getCurveByName('secp256k1')
16406
16407var ECSignature = require('./ecsignature')
16408var Script = require('./script')
16409
16410function isCanonicalPubKey (buffer) {
16411 if (!Buffer.isBuffer(buffer)) return false
16412
16413 try {
16414 ecurve.Point.decodeFrom(curve, buffer)
16415 } catch (e) {
16416 if (!(e.message.match(/Invalid sequence (length|tag)/)))
16417 throw e
16418
16419 return false
16420 }
16421
16422 return true
16423}
16424
16425function isCanonicalSignature (buffer) {
16426 if (!Buffer.isBuffer(buffer)) return false
16427
16428 try {
16429 ECSignature.parseScriptSignature(buffer)
16430 } catch (e) {
16431 if (!(e.message.match(/Not a DER sequence|Invalid sequence length|Expected a DER integer|R length is zero|S length is zero|R value excessively padded|S value excessively padded|R value is negative|S value is negative|Invalid hashType/))) {
16432 throw e
16433 }
16434
16435 return false
16436 }
16437
16438 return true
16439}
16440
16441function isPubKeyHashInput (script) {
16442 return script.chunks.length === 2 &&
16443 isCanonicalSignature(script.chunks[0]) &&
16444 isCanonicalPubKey(script.chunks[1])
16445}
16446
16447function isPubKeyHashOutput (script) {
16448 return script.chunks.length === 5 &&
16449 script.chunks[0] === ops.OP_DUP &&
16450 script.chunks[1] === ops.OP_HASH160 &&
16451 Buffer.isBuffer(script.chunks[2]) &&
16452 script.chunks[2].length === 20 &&
16453 script.chunks[3] === ops.OP_EQUALVERIFY &&
16454 script.chunks[4] === ops.OP_CHECKSIG
16455}
16456
16457function isPubKeyInput (script) {
16458 return script.chunks.length === 1 &&
16459 isCanonicalSignature(script.chunks[0])
16460}
16461
16462function isPubKeyOutput (script) {
16463 return script.chunks.length === 2 &&
16464 isCanonicalPubKey(script.chunks[0]) &&
16465 script.chunks[1] === ops.OP_CHECKSIG
16466}
16467
16468function isScriptHashInput (script, allowIncomplete) {
16469 if (script.chunks.length < 2) return false
16470
16471 var lastChunk = script.chunks[script.chunks.length - 1]
16472 if (!Buffer.isBuffer(lastChunk)) return false
16473
16474 var scriptSig = Script.fromChunks(script.chunks.slice(0, -1))
16475 var redeemScript = Script.fromBuffer(lastChunk)
16476
16477 // is redeemScript a valid script?
16478 if (redeemScript.chunks.length === 0) return false
16479
16480 return classifyInput(scriptSig, allowIncomplete) === classifyOutput(redeemScript)
16481}
16482
16483function isScriptHashOutput (script) {
16484 return script.chunks.length === 3 &&
16485 script.chunks[0] === ops.OP_HASH160 &&
16486 Buffer.isBuffer(script.chunks[1]) &&
16487 script.chunks[1].length === 20 &&
16488 script.chunks[2] === ops.OP_EQUAL
16489}
16490
16491// allowIncomplete is to account for combining signatures
16492// See https://github.com/bitcoin/bitcoin/blob/f425050546644a36b0b8e0eb2f6934a3e0f6f80f/src/script/sign.cpp#L195-L197
16493function isMultisigInput (script, allowIncomplete) {
16494 if (script.chunks.length < 2) return false
16495 if (script.chunks[0] !== ops.OP_0) return false
16496
16497 if (allowIncomplete) {
16498 return script.chunks.slice(1).every(function (chunk) {
16499 return chunk === ops.OP_0 || isCanonicalSignature(chunk)
16500 })
16501 }
16502
16503 return script.chunks.slice(1).every(isCanonicalSignature)
16504}
16505
16506function isMultisigOutput (script) {
16507 if (script.chunks.length < 4) return false
16508 if (script.chunks[script.chunks.length - 1] !== ops.OP_CHECKMULTISIG) return false
16509
16510 var mOp = script.chunks[0]
16511 if (mOp === ops.OP_0) return false
16512 if (mOp < ops.OP_1) return false
16513 if (mOp > ops.OP_16) return false
16514
16515 var nOp = script.chunks[script.chunks.length - 2]
16516 if (nOp === ops.OP_0) return false
16517 if (nOp < ops.OP_1) return false
16518 if (nOp > ops.OP_16) return false
16519
16520 var m = mOp - (ops.OP_1 - 1)
16521 var n = nOp - (ops.OP_1 - 1)
16522 if (n < m) return false
16523
16524 var pubKeys = script.chunks.slice(1, -2)
16525 if (n < pubKeys.length) return false
16526
16527 return pubKeys.every(isCanonicalPubKey)
16528}
16529
16530function isNullDataOutput (script) {
16531 return script.chunks[0] === ops.OP_RETURN
16532}
16533
16534function classifyOutput (script) {
16535 typeForce('Script', script)
16536
16537 if (isPubKeyHashOutput(script)) {
16538 return 'pubkeyhash'
16539 } else if (isScriptHashOutput(script)) {
16540 return 'scripthash'
16541 } else if (isMultisigOutput(script)) {
16542 return 'multisig'
16543 } else if (isPubKeyOutput(script)) {
16544 return 'pubkey'
16545 } else if (isNullDataOutput(script)) {
16546 return 'nulldata'
16547 }
16548
16549 return 'nonstandard'
16550}
16551
16552function classifyInput (script, allowIncomplete) {
16553 typeForce('Script', script)
16554
16555 if (isPubKeyHashInput(script)) {
16556 return 'pubkeyhash'
16557 } else if (isMultisigInput(script, allowIncomplete)) {
16558 return 'multisig'
16559 } else if (isScriptHashInput(script, allowIncomplete)) {
16560 return 'scripthash'
16561 } else if (isPubKeyInput(script)) {
16562 return 'pubkey'
16563 }
16564
16565 return 'nonstandard'
16566}
16567
16568// Standard Script Templates
16569// {pubKey} OP_CHECKSIG
16570function pubKeyOutput (pubKey) {
16571 return Script.fromChunks([
16572 pubKey.toBuffer(),
16573 ops.OP_CHECKSIG
16574 ])
16575}
16576
16577// OP_DUP OP_HASH160 {pubKeyHash} OP_EQUALVERIFY OP_CHECKSIG
16578function pubKeyHashOutput (hash) {
16579 typeForce('Buffer', hash)
16580
16581 return Script.fromChunks([
16582 ops.OP_DUP,
16583 ops.OP_HASH160,
16584 hash,
16585 ops.OP_EQUALVERIFY,
16586 ops.OP_CHECKSIG
16587 ])
16588}
16589
16590// OP_HASH160 {scriptHash} OP_EQUAL
16591function scriptHashOutput (hash) {
16592 typeForce('Buffer', hash)
16593
16594 return Script.fromChunks([
16595 ops.OP_HASH160,
16596 hash,
16597 ops.OP_EQUAL
16598 ])
16599}
16600
16601// m [pubKeys ...] n OP_CHECKMULTISIG
16602function multisigOutput (m, pubKeys) {
16603 typeForce(['ECPubKey'], pubKeys)
16604
16605 assert(pubKeys.length >= m, 'Not enough pubKeys provided')
16606
16607 var pubKeyBuffers = pubKeys.map(function (pubKey) {
16608 return pubKey.toBuffer()
16609 })
16610 var n = pubKeys.length
16611
16612 return Script.fromChunks([].concat(
16613 (ops.OP_1 - 1) + m,
16614 pubKeyBuffers,
16615 (ops.OP_1 - 1) + n,
16616 ops.OP_CHECKMULTISIG
16617 ))
16618}
16619
16620// {signature}
16621function pubKeyInput (signature) {
16622 typeForce('Buffer', signature)
16623
16624 return Script.fromChunks([signature])
16625}
16626
16627// {signature} {pubKey}
16628function pubKeyHashInput (signature, pubKey) {
16629 typeForce('Buffer', signature)
16630
16631 return Script.fromChunks([signature, pubKey.toBuffer()])
16632}
16633
16634// <scriptSig> {serialized scriptPubKey script}
16635function scriptHashInput (scriptSig, scriptPubKey) {
16636 return Script.fromChunks([].concat(
16637 scriptSig.chunks,
16638 scriptPubKey.toBuffer()
16639 ))
16640}
16641
16642// OP_0 [signatures ...]
16643function multisigInput (signatures, scriptPubKey) {
16644 if (scriptPubKey) {
16645 assert(isMultisigOutput(scriptPubKey))
16646
16647 var mOp = scriptPubKey.chunks[0]
16648 var nOp = scriptPubKey.chunks[scriptPubKey.chunks.length - 2]
16649 var m = mOp - (ops.OP_1 - 1)
16650 var n = nOp - (ops.OP_1 - 1)
16651
16652 assert(signatures.length >= m, 'Not enough signatures provided')
16653 assert(signatures.length <= n, 'Too many signatures provided')
16654 }
16655
16656 return Script.fromChunks([].concat(ops.OP_0, signatures))
16657}
16658
16659function nullDataOutput (data) {
16660 return Script.fromChunks([ops.OP_RETURN, data])
16661}
16662
16663module.exports = {
16664 isCanonicalPubKey: isCanonicalPubKey,
16665 isCanonicalSignature: isCanonicalSignature,
16666 isPubKeyHashInput: isPubKeyHashInput,
16667 isPubKeyHashOutput: isPubKeyHashOutput,
16668 isPubKeyInput: isPubKeyInput,
16669 isPubKeyOutput: isPubKeyOutput,
16670 isScriptHashInput: isScriptHashInput,
16671 isScriptHashOutput: isScriptHashOutput,
16672 isMultisigInput: isMultisigInput,
16673 isMultisigOutput: isMultisigOutput,
16674 isNullDataOutput: isNullDataOutput,
16675 classifyOutput: classifyOutput,
16676 classifyInput: classifyInput,
16677 pubKeyOutput: pubKeyOutput,
16678 pubKeyHashOutput: pubKeyHashOutput,
16679 scriptHashOutput: scriptHashOutput,
16680 multisigOutput: multisigOutput,
16681 pubKeyInput: pubKeyInput,
16682 pubKeyHashInput: pubKeyHashInput,
16683 scriptHashInput: scriptHashInput,
16684 multisigInput: multisigInput,
16685 dataOutput: function (data) {
16686 console.warn('dataOutput is deprecated, use nullDataOutput by 2.0.0')
16687 return nullDataOutput(data)
16688 },
16689 nullDataOutput: nullDataOutput
16690}
16691
16692}).call(this,require("buffer").Buffer)
16693},{"./ecsignature":62,"./opcodes":67,"./script":68,"assert":5,"buffer":7,"ecurve":49,"typeforce":53}],70:[function(require,module,exports){
16694(function (Buffer){
16695var assert = require('assert')
16696var bufferutils = require('./bufferutils')
16697var crypto = require('./crypto')
16698var typeForce = require('typeforce')
16699var opcodes = require('./opcodes')
16700var scripts = require('./scripts')
16701
16702var Address = require('./address')
16703var ECSignature = require('./ecsignature')
16704var Script = require('./script')
16705
16706function Transaction () {
16707 this.version = 1
16708 this.locktime = 0
16709 this.ins = []
16710 this.outs = []
16711}
16712
16713Transaction.DEFAULT_SEQUENCE = 0xffffffff
16714Transaction.SIGHASH_ALL = 0x01
16715Transaction.SIGHASH_NONE = 0x02
16716Transaction.SIGHASH_SINGLE = 0x03
16717Transaction.SIGHASH_ANYONECANPAY = 0x80
16718
16719Transaction.fromBuffer = function (buffer, __disableAssert) {
16720 var offset = 0
16721 function readSlice (n) {
16722 offset += n
16723 return buffer.slice(offset - n, offset)
16724 }
16725
16726 function readUInt32 () {
16727 var i = buffer.readUInt32LE(offset)
16728 offset += 4
16729 return i
16730 }
16731
16732 function readUInt64 () {
16733 var i = bufferutils.readUInt64LE(buffer, offset)
16734 offset += 8
16735 return i
16736 }
16737
16738 function readVarInt () {
16739 var vi = bufferutils.readVarInt(buffer, offset)
16740 offset += vi.size
16741 return vi.number
16742 }
16743
16744 function readScript () {
16745 return Script.fromBuffer(readSlice(readVarInt()))
16746 }
16747
16748 function readGenerationScript () {
16749 return new Script(readSlice(readVarInt()), [])
16750 }
16751
16752 var tx = new Transaction()
16753 tx.version = readUInt32()
16754
16755 var vinLen = readVarInt()
16756 for (var i = 0; i < vinLen; ++i) {
16757 var hash = readSlice(32)
16758
16759 if (Transaction.isCoinbaseHash(hash)) {
16760 tx.ins.push({
16761 hash: hash,
16762 index: readUInt32(),
16763 script: readGenerationScript(),
16764 sequence: readUInt32()
16765 })
16766 } else {
16767 tx.ins.push({
16768 hash: hash,
16769 index: readUInt32(),
16770 script: readScript(),
16771 sequence: readUInt32()
16772 })
16773 }
16774 }
16775
16776 var voutLen = readVarInt()
16777 for (i = 0; i < voutLen; ++i) {
16778 tx.outs.push({
16779 value: readUInt64(),
16780 script: readScript()
16781 })
16782 }
16783
16784 tx.locktime = readUInt32()
16785
16786 if (!__disableAssert) {
16787 assert.equal(offset, buffer.length, 'Transaction has unexpected data')
16788 }
16789
16790 return tx
16791}
16792
16793Transaction.fromHex = function (hex) {
16794 return Transaction.fromBuffer(new Buffer(hex, 'hex'))
16795}
16796
16797Transaction.isCoinbaseHash = function (buffer) {
16798 return Array.prototype.every.call(buffer, function (x) {
16799 return x === 0
16800 })
16801}
16802
16803/**
16804 * Create a new txIn.
16805 *
16806 * Can be called with any of:
16807 *
16808 * - A transaction and an index
16809 * - A transaction hash and an index
16810 *
16811 * Note that this method does not sign the created input.
16812 */
16813Transaction.prototype.addInput = function (hash, index, sequence, script) {
16814 if (sequence === undefined || sequence === null) {
16815 sequence = Transaction.DEFAULT_SEQUENCE
16816 }
16817
16818 script = script || Script.EMPTY
16819
16820 if (typeof hash === 'string') {
16821 // TxId hex is big-endian, we need little-endian
16822 hash = bufferutils.reverse(new Buffer(hash, 'hex'))
16823 } else if (hash instanceof Transaction) {
16824 hash = hash.getHash()
16825 }
16826
16827 typeForce('Buffer', hash)
16828 typeForce('Number', index)
16829 typeForce('Number', sequence)
16830 typeForce('Script', script)
16831
16832 assert.equal(hash.length, 32, 'Expected hash length of 32, got ' + hash.length)
16833
16834 // Add the input and return the input's index
16835 return (this.ins.push({
16836 hash: hash,
16837 index: index,
16838 script: script,
16839 sequence: sequence
16840 }) - 1)
16841}
16842
16843/**
16844 * Create a new txOut.
16845 *
16846 * Can be called with:
16847 *
16848 * - A base58 address string and a value
16849 * - An Address object and a value
16850 * - A scriptPubKey Script and a value
16851 */
16852Transaction.prototype.addOutput = function (scriptPubKey, value) {
16853 // Attempt to get a valid address if it's a base58 address string
16854 if (typeof scriptPubKey === 'string') {
16855 scriptPubKey = Address.fromBase58Check(scriptPubKey)
16856 }
16857
16858 // Attempt to get a valid script if it's an Address object
16859 if (scriptPubKey instanceof Address) {
16860 scriptPubKey = scriptPubKey.toOutputScript()
16861 }
16862
16863 typeForce('Script', scriptPubKey)
16864 typeForce('Number', value)
16865
16866 // Add the output and return the output's index
16867 return (this.outs.push({
16868 script: scriptPubKey,
16869 value: value
16870 }) - 1)
16871}
16872
16873Transaction.prototype.clone = function () {
16874 var newTx = new Transaction()
16875 newTx.version = this.version
16876 newTx.locktime = this.locktime
16877
16878 newTx.ins = this.ins.map(function (txIn) {
16879 return {
16880 hash: txIn.hash,
16881 index: txIn.index,
16882 script: txIn.script,
16883 sequence: txIn.sequence
16884 }
16885 })
16886
16887 newTx.outs = this.outs.map(function (txOut) {
16888 return {
16889 script: txOut.script,
16890 value: txOut.value
16891 }
16892 })
16893
16894 return newTx
16895}
16896
16897/**
16898 * Hash transaction for signing a specific input.
16899 *
16900 * Bitcoin uses a different hash for each signed transaction input. This
16901 * method copies the transaction, makes the necessary changes based on the
16902 * hashType, serializes and finally hashes the result. This hash can then be
16903 * used to sign the transaction input in question.
16904 */
16905Transaction.prototype.hashForSignature = function (inIndex, prevOutScript, hashType) {
16906 // FIXME: remove in 2.x.y
16907 if (arguments[0] instanceof Script) {
16908 console.warn('hashForSignature(prevOutScript, inIndex, ...) has been deprecated. Use hashForSignature(inIndex, prevOutScript, ...)')
16909
16910 // swap the arguments (must be stored in tmp, arguments is special)
16911 var tmp = arguments[0]
16912 inIndex = arguments[1]
16913 prevOutScript = tmp
16914 }
16915
16916 typeForce('Number', inIndex)
16917 typeForce('Script', prevOutScript)
16918 typeForce('Number', hashType)
16919
16920 assert(inIndex >= 0, 'Invalid vin index')
16921 assert(inIndex < this.ins.length, 'Invalid vin index')
16922
16923 var txTmp = this.clone()
16924 var hashScript = prevOutScript.without(opcodes.OP_CODESEPARATOR)
16925
16926 // Blank out other inputs' signatures
16927 txTmp.ins.forEach(function (txIn) {
16928 txIn.script = Script.EMPTY
16929 })
16930 txTmp.ins[inIndex].script = hashScript
16931
16932 var hashTypeModifier = hashType & 0x1f
16933
16934 if (hashTypeModifier === Transaction.SIGHASH_NONE) {
16935 assert(false, 'SIGHASH_NONE not yet supported')
16936 } else if (hashTypeModifier === Transaction.SIGHASH_SINGLE) {
16937 assert(false, 'SIGHASH_SINGLE not yet supported')
16938 }
16939
16940 if (hashType & Transaction.SIGHASH_ANYONECANPAY) {
16941 assert(false, 'SIGHASH_ANYONECANPAY not yet supported')
16942 }
16943
16944 var hashTypeBuffer = new Buffer(4)
16945 hashTypeBuffer.writeInt32LE(hashType, 0)
16946
16947 var buffer = Buffer.concat([txTmp.toBuffer(), hashTypeBuffer])
16948 return crypto.hash256(buffer)
16949}
16950
16951Transaction.prototype.getHash = function () {
16952 return crypto.hash256(this.toBuffer())
16953}
16954
16955Transaction.prototype.getId = function () {
16956 // TxHash is little-endian, we need big-endian
16957 return bufferutils.reverse(this.getHash()).toString('hex')
16958}
16959
16960Transaction.prototype.toBuffer = function () {
16961 function scriptSize (script) {
16962 var length = script.buffer.length
16963
16964 return bufferutils.varIntSize(length) + length
16965 }
16966
16967 var buffer = new Buffer(
16968 8 +
16969 bufferutils.varIntSize(this.ins.length) +
16970 bufferutils.varIntSize(this.outs.length) +
16971 this.ins.reduce(function (sum, input) { return sum + 40 + scriptSize(input.script) }, 0) +
16972 this.outs.reduce(function (sum, output) { return sum + 8 + scriptSize(output.script) }, 0)
16973 )
16974
16975 var offset = 0
16976 function writeSlice (slice) {
16977 slice.copy(buffer, offset)
16978 offset += slice.length
16979 }
16980
16981 function writeUInt32 (i) {
16982 buffer.writeUInt32LE(i, offset)
16983 offset += 4
16984 }
16985
16986 function writeUInt64 (i) {
16987 bufferutils.writeUInt64LE(buffer, i, offset)
16988 offset += 8
16989 }
16990
16991 function writeVarInt (i) {
16992 var n = bufferutils.writeVarInt(buffer, i, offset)
16993 offset += n
16994 }
16995
16996 writeUInt32(this.version)
16997 writeVarInt(this.ins.length)
16998
16999 this.ins.forEach(function (txIn) {
17000 writeSlice(txIn.hash)
17001 writeUInt32(txIn.index)
17002 writeVarInt(txIn.script.buffer.length)
17003 writeSlice(txIn.script.buffer)
17004 writeUInt32(txIn.sequence)
17005 })
17006
17007 writeVarInt(this.outs.length)
17008 this.outs.forEach(function (txOut) {
17009 writeUInt64(txOut.value)
17010 writeVarInt(txOut.script.buffer.length)
17011 writeSlice(txOut.script.buffer)
17012 })
17013
17014 writeUInt32(this.locktime)
17015
17016 return buffer
17017}
17018
17019Transaction.prototype.toHex = function () {
17020 return this.toBuffer().toString('hex')
17021}
17022
17023Transaction.prototype.setInputScript = function (index, script) {
17024 typeForce('Number', index)
17025 typeForce('Script', script)
17026
17027 this.ins[index].script = script
17028}
17029
17030// FIXME: remove in 2.x.y
17031Transaction.prototype.sign = function (index, privKey, hashType) {
17032 console.warn('Transaction.prototype.sign is deprecated. Use TransactionBuilder instead.')
17033
17034 var prevOutScript = privKey.pub.getAddress().toOutputScript()
17035 var signature = this.signInput(index, prevOutScript, privKey, hashType)
17036
17037 var scriptSig = scripts.pubKeyHashInput(signature, privKey.pub)
17038 this.setInputScript(index, scriptSig)
17039}
17040
17041// FIXME: remove in 2.x.y
17042Transaction.prototype.signInput = function (index, prevOutScript, privKey, hashType) {
17043 console.warn('Transaction.prototype.signInput is deprecated. Use TransactionBuilder instead.')
17044
17045 hashType = hashType || Transaction.SIGHASH_ALL
17046
17047 var hash = this.hashForSignature(index, prevOutScript, hashType)
17048 var signature = privKey.sign(hash)
17049
17050 return signature.toScriptSignature(hashType)
17051}
17052
17053// FIXME: remove in 2.x.y
17054Transaction.prototype.validateInput = function (index, prevOutScript, pubKey, buffer) {
17055 console.warn('Transaction.prototype.validateInput is deprecated. Use TransactionBuilder instead.')
17056
17057 var parsed = ECSignature.parseScriptSignature(buffer)
17058 var hash = this.hashForSignature(index, prevOutScript, parsed.hashType)
17059
17060 return pubKey.verify(hash, parsed.signature)
17061}
17062
17063module.exports = Transaction
17064
17065}).call(this,require("buffer").Buffer)
17066},{"./address":54,"./bufferutils":57,"./crypto":58,"./ecsignature":62,"./opcodes":67,"./script":68,"./scripts":69,"assert":5,"buffer":7,"typeforce":53}],71:[function(require,module,exports){
17067(function (Buffer){
17068var assert = require('assert')
17069var ops = require('./opcodes')
17070var scripts = require('./scripts')
17071
17072var ECPubKey = require('./ecpubkey')
17073var ECSignature = require('./ecsignature')
17074var Script = require('./script')
17075var Transaction = require('./transaction')
17076
17077function extractInput (txIn) {
17078 var redeemScript
17079 var scriptSig = txIn.script
17080 var prevOutScript
17081 var prevOutType = scripts.classifyInput(scriptSig, true)
17082 var scriptType
17083
17084 // Re-classify if scriptHash
17085 if (prevOutType === 'scripthash') {
17086 redeemScript = Script.fromBuffer(scriptSig.chunks.slice(-1)[0])
17087 prevOutScript = scripts.scriptHashOutput(redeemScript.getHash())
17088
17089 scriptSig = Script.fromChunks(scriptSig.chunks.slice(0, -1))
17090 scriptType = scripts.classifyInput(scriptSig, true)
17091 } else {
17092 scriptType = prevOutType
17093 }
17094
17095 // Extract hashType, pubKeys and signatures
17096 var hashType, parsed, pubKeys, signatures
17097
17098 switch (scriptType) {
17099 case 'pubkeyhash': {
17100 parsed = ECSignature.parseScriptSignature(scriptSig.chunks[0])
17101 hashType = parsed.hashType
17102 pubKeys = [ECPubKey.fromBuffer(scriptSig.chunks[1])]
17103 signatures = [parsed.signature]
17104 prevOutScript = pubKeys[0].getAddress().toOutputScript()
17105
17106 break
17107 }
17108
17109 case 'pubkey': {
17110 parsed = ECSignature.parseScriptSignature(scriptSig.chunks[0])
17111 hashType = parsed.hashType
17112 signatures = [parsed.signature]
17113
17114 if (redeemScript) {
17115 pubKeys = [ECPubKey.fromBuffer(redeemScript.chunks[0])]
17116 }
17117
17118 break
17119 }
17120
17121 case 'multisig': {
17122 signatures = scriptSig.chunks.slice(1).map(function (chunk) {
17123 if (chunk === ops.OP_0) return chunk
17124
17125 var parsed = ECSignature.parseScriptSignature(chunk)
17126 hashType = parsed.hashType
17127
17128 return parsed.signature
17129 })
17130
17131 if (redeemScript) {
17132 pubKeys = redeemScript.chunks.slice(1, -2).map(ECPubKey.fromBuffer)
17133 }
17134
17135 break
17136 }
17137 }
17138
17139 return {
17140 hashType: hashType,
17141 prevOutScript: prevOutScript,
17142 prevOutType: prevOutType,
17143 pubKeys: pubKeys,
17144 redeemScript: redeemScript,
17145 scriptType: scriptType,
17146 signatures: signatures
17147 }
17148}
17149
17150function TransactionBuilder () {
17151 this.prevTxMap = {}
17152 this.prevOutScripts = {}
17153 this.prevOutTypes = {}
17154
17155 this.inputs = []
17156 this.tx = new Transaction()
17157}
17158
17159TransactionBuilder.fromTransaction = function (transaction) {
17160 var txb = new TransactionBuilder()
17161
17162 // Copy other transaction fields
17163 txb.tx.version = transaction.version
17164 txb.tx.locktime = transaction.locktime
17165
17166 // Extract/add inputs
17167 transaction.ins.forEach(function (txIn) {
17168 txb.addInput(txIn.hash, txIn.index, txIn.sequence)
17169 })
17170
17171 // Extract/add outputs
17172 transaction.outs.forEach(function (txOut) {
17173 txb.addOutput(txOut.script, txOut.value)
17174 })
17175
17176 // Extract/add signatures
17177 txb.inputs = transaction.ins.map(function (txIn) {
17178 // TODO: remove me after testcase added
17179 assert(!Transaction.isCoinbaseHash(txIn.hash), 'coinbase inputs not supported')
17180
17181 // Ignore empty scripts
17182 if (txIn.script.buffer.length === 0) return {}
17183
17184 return extractInput(txIn)
17185 })
17186
17187 return txb
17188}
17189
17190TransactionBuilder.prototype.addInput = function (prevTx, index, sequence, prevOutScript) {
17191 var prevOutHash
17192
17193 // txId
17194 if (typeof prevTx === 'string') {
17195 prevOutHash = new Buffer(prevTx, 'hex')
17196
17197 // TxId hex is big-endian, we want little-endian hash
17198 Array.prototype.reverse.call(prevOutHash)
17199
17200 // Transaction
17201 } else if (prevTx instanceof Transaction) {
17202 prevOutHash = prevTx.getHash()
17203 prevOutScript = prevTx.outs[index].script
17204
17205 // txHash
17206 } else {
17207 prevOutHash = prevTx
17208 }
17209
17210 var input = {}
17211 if (prevOutScript) {
17212 var prevOutType = scripts.classifyOutput(prevOutScript)
17213
17214 // if we can, extract pubKey information
17215 switch (prevOutType) {
17216 case 'multisig': {
17217 input.pubKeys = prevOutScript.chunks.slice(1, -2).map(ECPubKey.fromBuffer)
17218 break
17219 }
17220
17221 case 'pubkey': {
17222 input.pubKeys = prevOutScript.chunks.slice(0, 1).map(ECPubKey.fromBuffer)
17223 break
17224 }
17225 }
17226
17227 if (prevOutType !== 'scripthash') {
17228 input.scriptType = prevOutType
17229 }
17230
17231 input.prevOutScript = prevOutScript
17232 input.prevOutType = prevOutType
17233 }
17234
17235 assert(this.inputs.every(function (input2) {
17236 if (input2.hashType === undefined) return true
17237
17238 return input2.hashType & Transaction.SIGHASH_ANYONECANPAY
17239 }), 'No, this would invalidate signatures')
17240
17241 var prevOut = prevOutHash.toString('hex') + ':' + index
17242 assert(!(prevOut in this.prevTxMap), 'Transaction is already an input')
17243
17244 var vin = this.tx.addInput(prevOutHash, index, sequence)
17245 this.inputs[vin] = input
17246 this.prevTxMap[prevOut] = vin
17247
17248 return vin
17249}
17250
17251TransactionBuilder.prototype.addOutput = function (scriptPubKey, value) {
17252 assert(this.inputs.every(function (input) {
17253 if (input.hashType === undefined) return true
17254
17255 return (input.hashType & 0x1f) === Transaction.SIGHASH_SINGLE
17256 }), 'No, this would invalidate signatures')
17257
17258 return this.tx.addOutput(scriptPubKey, value)
17259}
17260
17261TransactionBuilder.prototype.build = function () {
17262 return this.__build(false)
17263}
17264TransactionBuilder.prototype.buildIncomplete = function () {
17265 return this.__build(true)
17266}
17267
17268var canSignTypes = {
17269 'pubkeyhash': true,
17270 'multisig': true,
17271 'pubkey': true
17272}
17273
17274TransactionBuilder.prototype.__build = function (allowIncomplete) {
17275 if (!allowIncomplete) {
17276 assert(this.tx.ins.length > 0, 'Transaction has no inputs')
17277 assert(this.tx.outs.length > 0, 'Transaction has no outputs')
17278 }
17279
17280 var tx = this.tx.clone()
17281
17282 // Create script signatures from signature meta-data
17283 this.inputs.forEach(function (input, index) {
17284 var scriptType = input.scriptType
17285 var scriptSig
17286
17287 if (!allowIncomplete) {
17288 assert(!!scriptType, 'Transaction is not complete')
17289 assert(scriptType in canSignTypes, scriptType + ' not supported')
17290 assert(input.signatures, 'Transaction is missing signatures')
17291 }
17292
17293 if (input.signatures) {
17294 switch (scriptType) {
17295 case 'pubkeyhash': {
17296 var pkhSignature = input.signatures[0].toScriptSignature(input.hashType)
17297 scriptSig = scripts.pubKeyHashInput(pkhSignature, input.pubKeys[0])
17298 break
17299 }
17300
17301 case 'multisig': {
17302 // Array.prototype.map is sparse-compatible
17303 var msSignatures = input.signatures.map(function (signature) {
17304 return signature && signature.toScriptSignature(input.hashType)
17305 })
17306
17307 // fill in blanks with OP_0
17308 if (allowIncomplete) {
17309 for (var i = 0; i < msSignatures.length; ++i) {
17310 if (msSignatures[i]) continue
17311
17312 msSignatures[i] = ops.OP_0
17313 }
17314 } else {
17315 // Array.prototype.filter returns non-sparse array
17316 msSignatures = msSignatures.filter(function (x) { return x })
17317 }
17318
17319 var redeemScript = allowIncomplete ? undefined : input.redeemScript
17320 scriptSig = scripts.multisigInput(msSignatures, redeemScript)
17321 break
17322 }
17323
17324 case 'pubkey': {
17325 var pkSignature = input.signatures[0].toScriptSignature(input.hashType)
17326 scriptSig = scripts.pubKeyInput(pkSignature)
17327 break
17328 }
17329 }
17330 }
17331
17332 // did we build a scriptSig?
17333 if (scriptSig) {
17334 // wrap as scriptHash if necessary
17335 if (input.prevOutType === 'scripthash') {
17336 scriptSig = scripts.scriptHashInput(scriptSig, input.redeemScript)
17337 }
17338
17339 tx.setInputScript(index, scriptSig)
17340 }
17341 })
17342
17343 return tx
17344}
17345
17346TransactionBuilder.prototype.sign = function (index, privKey, redeemScript, hashType) {
17347 assert(index in this.inputs, 'No input at index: ' + index)
17348 hashType = hashType || Transaction.SIGHASH_ALL
17349
17350 var input = this.inputs[index]
17351 var canSign = input.hashType &&
17352 input.prevOutScript &&
17353 input.prevOutType &&
17354 input.pubKeys &&
17355 input.scriptType &&
17356 input.signatures
17357
17358 // are we almost ready to sign?
17359 if (canSign) {
17360 // if redeemScript was provided, enforce consistency
17361 if (redeemScript) {
17362 assert.deepEqual(input.redeemScript, redeemScript, 'Inconsistent redeemScript')
17363 }
17364
17365 assert.equal(input.hashType, hashType, 'Inconsistent hashType')
17366
17367 // no? prepare
17368 } else {
17369 // must be pay-to-scriptHash?
17370 if (redeemScript) {
17371 // if we have a prevOutScript, enforce scriptHash equality to the redeemScript
17372 if (input.prevOutScript) {
17373 assert.equal(input.prevOutType, 'scripthash', 'PrevOutScript must be P2SH')
17374
17375 var scriptHash = input.prevOutScript.chunks[1]
17376 assert.deepEqual(scriptHash, redeemScript.getHash(), 'RedeemScript does not match ' + scriptHash.toString('hex'))
17377 }
17378
17379 var scriptType = scripts.classifyOutput(redeemScript)
17380 assert(scriptType in canSignTypes, 'RedeemScript not supported (' + scriptType + ')')
17381
17382 var pubKeys = []
17383 switch (scriptType) {
17384 case 'multisig': {
17385 pubKeys = redeemScript.chunks.slice(1, -2).map(ECPubKey.fromBuffer)
17386 break
17387 }
17388
17389 case 'pubkeyhash': {
17390 var pkh1 = redeemScript.chunks[2]
17391 var pkh2 = privKey.pub.getAddress().hash
17392
17393 assert.deepEqual(pkh1, pkh2, 'privateKey cannot sign for this input')
17394 pubKeys = [privKey.pub]
17395 break
17396 }
17397
17398 case 'pubkey': {
17399 pubKeys = redeemScript.chunks.slice(0, 1).map(ECPubKey.fromBuffer)
17400 break
17401 }
17402 }
17403
17404 if (!input.prevOutScript) {
17405 input.prevOutScript = scripts.scriptHashOutput(redeemScript.getHash())
17406 input.prevOutType = 'scripthash'
17407 }
17408
17409 input.pubKeys = pubKeys
17410 input.redeemScript = redeemScript
17411 input.scriptType = scriptType
17412
17413 // cannot be pay-to-scriptHash
17414 } else {
17415 assert.notEqual(input.prevOutType, 'scripthash', 'PrevOutScript is P2SH, missing redeemScript')
17416
17417 // can we otherwise sign this?
17418 if (input.scriptType) {
17419 assert(input.pubKeys, input.scriptType + ' not supported')
17420
17421 // we know nothin' Jon Snow, assume pubKeyHash
17422 } else {
17423 input.prevOutScript = privKey.pub.getAddress().toOutputScript()
17424 input.prevOutType = 'pubkeyhash'
17425 input.pubKeys = [privKey.pub]
17426 input.scriptType = input.prevOutType
17427 }
17428 }
17429
17430 input.hashType = hashType
17431 input.signatures = input.signatures || []
17432 }
17433
17434 var signatureScript = input.redeemScript || input.prevOutScript
17435 var signatureHash = this.tx.hashForSignature(index, signatureScript, hashType)
17436
17437 // enforce signature order matches public keys
17438 if (input.scriptType === 'multisig' && input.redeemScript && input.signatures.length !== input.pubKeys.length) {
17439 // maintain a local copy of unmatched signatures
17440 var unmatched = input.signatures.slice()
17441
17442 input.signatures = input.pubKeys.map(function (pubKey) {
17443 var match
17444
17445 // check for any matching signatures
17446 unmatched.some(function (signature, i) {
17447 if (!pubKey.verify(signatureHash, signature)) return false
17448 match = signature
17449
17450 // remove matched signature from unmatched
17451 unmatched.splice(i, 1)
17452
17453 return true
17454 })
17455
17456 return match || undefined
17457 })
17458 }
17459
17460 // enforce in order signing of public keys
17461 assert(input.pubKeys.some(function (pubKey, i) {
17462 if (!privKey.pub.Q.equals(pubKey.Q)) return false
17463
17464 assert(!input.signatures[i], 'Signature already exists')
17465 var signature = privKey.sign(signatureHash)
17466 input.signatures[i] = signature
17467
17468 return true
17469 }, this), 'privateKey cannot sign for this input')
17470}
17471
17472module.exports = TransactionBuilder
17473
17474}).call(this,require("buffer").Buffer)
17475},{"./ecpubkey":61,"./ecsignature":62,"./opcodes":67,"./script":68,"./scripts":69,"./transaction":70,"assert":5,"buffer":7}],72:[function(require,module,exports){
17476(function (Buffer){
17477var assert = require('assert')
17478var bufferutils = require('./bufferutils')
17479var typeForce = require('typeforce')
17480var networks = require('./networks')
17481var randomBytes = require('randombytes')
17482
17483var Address = require('./address')
17484var HDNode = require('./hdnode')
17485var TransactionBuilder = require('./transaction_builder')
17486var Script = require('./script')
17487
17488function Wallet (seed, network) {
17489 console.warn('Wallet is deprecated and will be removed in 2.0.0, see #296')
17490
17491 seed = seed || randomBytes(32)
17492 network = network || networks.bitcoin
17493
17494 // Stored in a closure to make accidental serialization less likely
17495 var masterKey = HDNode.fromSeedBuffer(seed, network)
17496
17497 // HD first-level child derivation method should be hardened
17498 // See https://bitcointalk.org/index.php?topic=405179.msg4415254#msg4415254
17499 var accountZero = masterKey.deriveHardened(0)
17500 var externalAccount = accountZero.derive(0)
17501 var internalAccount = accountZero.derive(1)
17502
17503 this.addresses = []
17504 this.changeAddresses = []
17505 this.network = network
17506 this.unspents = []
17507
17508 // FIXME: remove in 2.0.0
17509 this.unspentMap = {}
17510
17511 // FIXME: remove in 2.0.0
17512 var me = this
17513 this.newMasterKey = function (seed) {
17514 console.warn('newMasterKey is deprecated, please make a new Wallet instance instead')
17515
17516 seed = seed || randomBytes(32)
17517 masterKey = HDNode.fromSeedBuffer(seed, network)
17518
17519 accountZero = masterKey.deriveHardened(0)
17520 externalAccount = accountZero.derive(0)
17521 internalAccount = accountZero.derive(1)
17522
17523 me.addresses = []
17524 me.changeAddresses = []
17525
17526 me.unspents = []
17527 me.unspentMap = {}
17528 }
17529
17530 this.getMasterKey = function () {
17531 return masterKey
17532 }
17533 this.getAccountZero = function () {
17534 return accountZero
17535 }
17536 this.getExternalAccount = function () {
17537 return externalAccount
17538 }
17539 this.getInternalAccount = function () {
17540 return internalAccount
17541 }
17542}
17543
17544Wallet.prototype.createTransaction = function (to, value, options) {
17545 // FIXME: remove in 2.0.0
17546 if (typeof options !== 'object') {
17547 if (options !== undefined) {
17548 console.warn('Non options object parameters are deprecated, use options object instead')
17549
17550 options = {
17551 fixedFee: arguments[2],
17552 changeAddress: arguments[3]
17553 }
17554 }
ab78acc6 17555 }
8b095871
IC
17556
17557 options = options || {}
17558
17559 assert(value > this.network.dustThreshold, value + ' must be above dust threshold (' + this.network.dustThreshold + ' Satoshis)')
17560
17561 var changeAddress = options.changeAddress
17562 var fixedFee = options.fixedFee
17563 var minConf = options.minConf === undefined ? 0 : options.minConf // FIXME: change minConf:1 by default in 2.0.0
17564
17565 // filter by minConf, then pending and sort by descending value
17566 var unspents = this.unspents.filter(function (unspent) {
17567 return unspent.confirmations >= minConf
17568 }).filter(function (unspent) {
17569 return !unspent.pending
17570 }).sort(function (o1, o2) {
17571 return o2.value - o1.value
17572 })
17573
17574 var accum = 0
17575 var addresses = []
17576 var subTotal = value
17577
17578 var txb = new TransactionBuilder()
17579 txb.addOutput(to, value)
17580
17581 for (var i = 0; i < unspents.length; ++i) {
17582 var unspent = unspents[i]
17583 addresses.push(unspent.address)
17584
17585 txb.addInput(unspent.txHash, unspent.index)
17586
17587 var fee = fixedFee === undefined ? estimatePaddedFee(txb.buildIncomplete(), this.network) : fixedFee
17588
17589 accum += unspent.value
17590 subTotal = value + fee
17591
17592 if (accum >= subTotal) {
17593 var change = accum - subTotal
17594
17595 if (change > this.network.dustThreshold) {
17596 txb.addOutput(changeAddress || this.getChangeAddress(), change)
17597 }
17598
17599 break
17600 }
ab78acc6 17601 }
8b095871
IC
17602
17603 assert(accum >= subTotal, 'Not enough funds (incl. fee): ' + accum + ' < ' + subTotal)
17604
17605 return this.signWith(txb, addresses).build()
17606}
17607
17608// FIXME: remove in 2.0.0
17609Wallet.prototype.processPendingTx = function (tx) {
17610 this.__processTx(tx, true)
17611}
17612
17613// FIXME: remove in 2.0.0
17614Wallet.prototype.processConfirmedTx = function (tx) {
17615 this.__processTx(tx, false)
17616}
17617
17618// FIXME: remove in 2.0.0
17619Wallet.prototype.__processTx = function (tx, isPending) {
17620 console.warn('processTransaction is considered harmful, see issue #260 for more information')
17621
17622 var txId = tx.getId()
17623 var txHash = tx.getHash()
17624
17625 tx.outs.forEach(function (txOut, i) {
17626 var address
17627
17628 try {
17629 address = Address.fromOutputScript(txOut.script, this.network).toString()
17630 } catch (e) {
17631 if (!(e.message.match(/has no matching Address/)))
17632 throw e
17633 }
17634
17635 var myAddresses = this.addresses.concat(this.changeAddresses)
17636 if (myAddresses.indexOf(address) > -1) {
17637 var lookup = txId + ':' + i
17638 if (lookup in this.unspentMap) return
17639
17640 // its unique, add it
17641 var unspent = {
17642 address: address,
17643 confirmations: 0, // no way to determine this without more information
17644 index: i,
17645 txHash: txHash,
17646 txId: txId,
17647 value: txOut.value,
17648 pending: isPending
17649 }
17650
17651 this.unspentMap[lookup] = unspent
17652 this.unspents.push(unspent)
17653 }
17654 }, this)
17655
17656 tx.ins.forEach(function (txIn) {
17657 // copy and convert to big-endian hex
17658 var txInId = bufferutils.reverse(txIn.hash).toString('hex')
17659
17660 var lookup = txInId + ':' + txIn.index
17661 if (!(lookup in this.unspentMap)) return
17662
17663 var unspent = this.unspentMap[lookup]
17664
17665 if (isPending) {
17666 unspent.pending = true
17667 unspent.spent = true
17668 } else {
17669 delete this.unspentMap[lookup]
17670
17671 this.unspents = this.unspents.filter(function (unspent2) {
17672 return unspent !== unspent2
17673 })
17674 }
17675 }, this)
17676}
17677
17678Wallet.prototype.generateAddress = function () {
17679 var k = this.addresses.length
17680 var address = this.getExternalAccount().derive(k).getAddress()
17681
17682 this.addresses.push(address.toString())
17683
17684 return this.getReceiveAddress()
17685}
17686
17687Wallet.prototype.generateChangeAddress = function () {
17688 var k = this.changeAddresses.length
17689 var address = this.getInternalAccount().derive(k).getAddress()
17690
17691 this.changeAddresses.push(address.toString())
17692
17693 return this.getChangeAddress()
17694}
17695
17696Wallet.prototype.getAddress = function () {
17697 if (this.addresses.length === 0) {
17698 this.generateAddress()
ab78acc6 17699 }
8b095871
IC
17700
17701 return this.addresses[this.addresses.length - 1]
17702}
17703
17704Wallet.prototype.getBalance = function (minConf) {
17705 minConf = minConf || 0
17706
17707 return this.unspents.filter(function (unspent) {
17708 return unspent.confirmations >= minConf
17709
17710 // FIXME: remove spent filter in 2.0.0
17711 }).filter(function (unspent) {
17712 return !unspent.spent
17713 }).reduce(function (accum, unspent) {
17714 return accum + unspent.value
17715 }, 0)
17716}
17717
17718Wallet.prototype.getChangeAddress = function () {
17719 if (this.changeAddresses.length === 0) {
17720 this.generateChangeAddress()
3af2954a 17721 }
8b095871
IC
17722
17723 return this.changeAddresses[this.changeAddresses.length - 1]
17724}
17725
17726Wallet.prototype.getInternalPrivateKey = function (index) {
17727 return this.getInternalAccount().derive(index).privKey
17728}
17729
17730Wallet.prototype.getPrivateKey = function (index) {
17731 return this.getExternalAccount().derive(index).privKey
17732}
17733
17734Wallet.prototype.getPrivateKeyForAddress = function (address) {
17735 var index
17736
17737 if ((index = this.addresses.indexOf(address)) > -1) {
17738 return this.getPrivateKey(index)
ab78acc6 17739 }
8b095871
IC
17740
17741 if ((index = this.changeAddresses.indexOf(address)) > -1) {
17742 return this.getInternalPrivateKey(index)
17743 }
17744
17745 assert(false, 'Unknown address. Make sure the address is from the keychain and has been generated')
ab78acc6
IC
17746}
17747
8b095871
IC
17748Wallet.prototype.getUnspentOutputs = function (minConf) {
17749 minConf = minConf || 0
17750
17751 return this.unspents.filter(function (unspent) {
17752 return unspent.confirmations >= minConf
17753
17754 // FIXME: remove spent filter in 2.0.0
17755 }).filter(function (unspent) {
17756 return !unspent.spent
17757 }).map(function (unspent) {
17758 return {
17759 address: unspent.address,
17760 confirmations: unspent.confirmations,
17761 index: unspent.index,
17762 txId: unspent.txId,
17763 value: unspent.value,
17764
17765 // FIXME: remove in 2.0.0
17766 hash: unspent.txId,
17767 pending: unspent.pending
17768 }
17769 })
ab78acc6 17770}
3af2954a 17771
8b095871
IC
17772Wallet.prototype.setUnspentOutputs = function (unspents) {
17773 this.unspentMap = {}
17774 this.unspents = unspents.map(function (unspent) {
17775 // FIXME: remove unspent.hash in 2.0.0
17776 var txId = unspent.txId || unspent.hash
17777 var index = unspent.index
3af2954a 17778
8b095871
IC
17779 // FIXME: remove in 2.0.0
17780 if (unspent.hash !== undefined) {
17781 console.warn('unspent.hash is deprecated, use unspent.txId instead')
17782 }
3af2954a 17783
8b095871
IC
17784 // FIXME: remove in 2.0.0
17785 if (index === undefined) {
17786 console.warn('unspent.outputIndex is deprecated, use unspent.index instead')
17787 index = unspent.outputIndex
17788 }
3af2954a 17789
8b095871
IC
17790 typeForce('String', txId)
17791 typeForce('Number', index)
17792 typeForce('Number', unspent.value)
3af2954a 17793
8b095871
IC
17794 assert.equal(txId.length, 64, 'Expected valid txId, got ' + txId)
17795 assert.doesNotThrow(function () {
17796 Address.fromBase58Check(unspent.address)
17797 }, 'Expected Base58 Address, got ' + unspent.address)
17798 assert(isFinite(index), 'Expected finite index, got ' + index)
3af2954a 17799
8b095871
IC
17800 // FIXME: remove branch in 2.0.0
17801 if (unspent.confirmations !== undefined) {
17802 typeForce('Number', unspent.confirmations)
ab78acc6 17803 }
8b095871
IC
17804
17805 var txHash = bufferutils.reverse(new Buffer(txId, 'hex'))
17806
17807 unspent = {
17808 address: unspent.address,
17809 confirmations: unspent.confirmations || 0,
17810 index: index,
17811 txHash: txHash,
17812 txId: txId,
17813 value: unspent.value,
17814
17815 // FIXME: remove in 2.0.0
17816 pending: unspent.pending || false
ab78acc6 17817 }
3af2954a 17818
8b095871
IC
17819 // FIXME: remove in 2.0.0
17820 this.unspentMap[txId + ':' + index] = unspent
17821
17822 return unspent
17823 }, this)
ab78acc6 17824}
3af2954a 17825
8b095871
IC
17826Wallet.prototype.signWith = function (tx, addresses) {
17827 addresses.forEach(function (address, i) {
17828 var privKey = this.getPrivateKeyForAddress(address)
17829
17830 tx.sign(i, privKey)
17831 }, this)
17832
17833 return tx
ab78acc6 17834}
3af2954a 17835
8b095871
IC
17836function estimatePaddedFee (tx, network) {
17837 var tmpTx = tx.clone()
17838 tmpTx.addOutput(Script.EMPTY, network.dustSoftThreshold || 0)
17839
17840 return network.estimateFee(tmpTx)
ab78acc6 17841}
3af2954a 17842
8b095871
IC
17843// FIXME: 1.0.0 shims, remove in 2.0.0
17844Wallet.prototype.getReceiveAddress = Wallet.prototype.getAddress
17845Wallet.prototype.createTx = Wallet.prototype.createTransaction
17846
17847module.exports = Wallet
17848
17849}).call(this,require("buffer").Buffer)
17850},{"./address":54,"./bufferutils":57,"./hdnode":63,"./networks":66,"./script":68,"./transaction_builder":71,"assert":5,"buffer":7,"randombytes":52,"typeforce":53}]},{},[64])(64)
17851});</script>
17852 <script>bitcoin.networks.shadow = {
17853 magicPrefix: '\x19ShadowCash Signed Message:\n',
17854 bip32: {
17855 public: 0xEE80286A,
17856 private: 0xEE8031E8
17857 },
17858 pubKeyHash: 0x3f,
17859 scriptHash: 0x7d,
17860 wif: 0xbf,
17861 dustThreshold: 0,
17862 feePerKb: 1000,
17863 estimateFee: function() { return "unused in this app" },
17864};
17865
17866bitcoin.networks.shadowtn = {
17867 magicPrefix: '\x19ShadowCash Signed Message:\n',
17868 bip32: {
17869 public: 0x76C0FDFB,
17870 private: 0x76C1077A
17871 },
17872 pubKeyHash: 0x7f,
17873 scriptHash: 0xc4,
17874 wif: 0xff,
17875 dustThreshold: 0,
17876 feePerKb: 1000,
17877 estimateFee: function() { return "unused in this app" },
17878};
3af2954a 17879
8b095871
IC
17880bitcoin.networks.clam = {
17881 bip32: {
17882 public: 0xa8c26d64,
17883 private: 0xa8c17826
17884 },
17885 pubKeyHash: 0x89,
17886 wif: 0x85,
17887};
3af2954a 17888
8b095871
IC
17889bitcoin.networks.dash = {
17890 bip32: {
17891 public: 0x0488b21e,
17892 private: 0x0488ade4
17893 },
17894 pubKeyHash: 0x4c,
17895 scriptHash: 0x10,
17896 wif: 0xcc,
17897};
ab78acc6 17898
f88fab20 17899bitcoin.networks.game = {
17900 bip32: {
17901 public: 0x0488b21e,
17902 private: 0x0488ade4
17903 },
17904 pubKeyHash: 0x26,
17905 scriptHash: 0x05,
17906 wif: 0xa6,
17907};
17908
8b095871
IC
17909bitcoin.networks.namecoin = {
17910 bip32: {
17911 public: 0x0488b21e,
17912 private: 0x0488ade4
17913 },
17914 pubKeyHash: 0x34,
17915 //scriptHash: 0x10,
17916 wif: 0x80,
17917};
3af2954a 17918
8b095871
IC
17919bitcoin.networks.peercoin = {
17920 bip32: {
17921 public: 0x0488b21e,
17922 private: 0x0488ade4
17923 },
17924 pubKeyHash: 0x37,
17925 //scriptHash: 0x10,
17926 wif: 0xb7,
17927};
3af2954a 17928
01e81e53
GH
17929bitcoin.networks.slimcoin = {
17930 bip32: {
17931 public: 0xef6adf10,
17932 private: 0xef69ea80
17933 },
17934 pubKeyHash: 0x3f,
17935 scriptHash: 0x7d,
17936 wif: 0x46,
17937};
17938
17939bitcoin.networks.slimcointn = {
17940 bip32: {
17941 public: 0x043587CF,
17942 private: 0x04358394
17943 },
17944 pubKeyHash: 0x6f,
17945 scriptHash: 0xc4,
17946 wif: 0x57,
17947};
17948
8b095871
IC
17949</script>
17950 <script>(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.ethUtil = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
17951(function (global){
17952'use strict';
3af2954a 17953
8b095871
IC
17954// compare and isBuffer taken from https://github.com/feross/buffer/blob/680e9e5e488f22aac27599a57dc844a6315928dd/index.js
17955// original notice:
3af2954a 17956
8b095871
IC
17957/*!
17958 * The buffer module from node.js, for the browser.
17959 *
17960 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
17961 * @license MIT
17962 */
17963function compare(a, b) {
17964 if (a === b) {
17965 return 0;
17966 }
3af2954a 17967
8b095871
IC
17968 var x = a.length;
17969 var y = b.length;
3af2954a 17970
8b095871
IC
17971 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
17972 if (a[i] !== b[i]) {
17973 x = a[i];
17974 y = b[i];
17975 break;
17976 }
17977 }
3af2954a 17978
8b095871
IC
17979 if (x < y) {
17980 return -1;
17981 }
17982 if (y < x) {
17983 return 1;
17984 }
17985 return 0;
ab78acc6 17986}
8b095871
IC
17987function isBuffer(b) {
17988 if (global.Buffer && typeof global.Buffer.isBuffer === 'function') {
17989 return global.Buffer.isBuffer(b);
17990 }
17991 return !!(b != null && b._isBuffer);
ab78acc6 17992}
3af2954a 17993
8b095871
IC
17994// based on node assert, original notice:
17995
17996// http://wiki.commonjs.org/wiki/Unit_Testing/1.0
17997//
17998// THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!
17999//
18000// Originally from narwhal.js (http://narwhaljs.org)
18001// Copyright (c) 2009 Thomas Robinson <280north.com>
18002//
18003// Permission is hereby granted, free of charge, to any person obtaining a copy
18004// of this software and associated documentation files (the 'Software'), to
18005// deal in the Software without restriction, including without limitation the
18006// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
18007// sell copies of the Software, and to permit persons to whom the Software is
18008// furnished to do so, subject to the following conditions:
18009//
18010// The above copyright notice and this permission notice shall be included in
18011// all copies or substantial portions of the Software.
18012//
18013// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18014// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18015// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18016// AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
18017// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
18018// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
18019
18020var util = require('util/');
18021var hasOwn = Object.prototype.hasOwnProperty;
18022var pSlice = Array.prototype.slice;
18023var functionsHaveNames = (function () {
18024 return function foo() {}.name === 'foo';
18025}());
18026function pToString (obj) {
18027 return Object.prototype.toString.call(obj);
18028}
18029function isView(arrbuf) {
18030 if (isBuffer(arrbuf)) {
18031 return false;
ab78acc6 18032 }
8b095871
IC
18033 if (typeof global.ArrayBuffer !== 'function') {
18034 return false;
18035 }
18036 if (typeof ArrayBuffer.isView === 'function') {
18037 return ArrayBuffer.isView(arrbuf);
18038 }
18039 if (!arrbuf) {
18040 return false;
18041 }
18042 if (arrbuf instanceof DataView) {
18043 return true;
18044 }
18045 if (arrbuf.buffer && arrbuf.buffer instanceof ArrayBuffer) {
18046 return true;
18047 }
18048 return false;
ab78acc6 18049}
8b095871
IC
18050// 1. The assert module provides functions that throw
18051// AssertionError's when particular conditions are not met. The
18052// assert module must conform to the following interface.
3af2954a 18053
8b095871 18054var assert = module.exports = ok;
3af2954a 18055
8b095871
IC
18056// 2. The AssertionError is defined in assert.
18057// new assert.AssertionError({ message: message,
18058// actual: actual,
18059// expected: expected })
18060
18061var regex = /\s*function\s+([^\(\s]*)\s*/;
18062// based on https://github.com/ljharb/function.prototype.name/blob/adeeeec8bfcc6068b187d7d9fb3d5bb1d3a30899/implementation.js
18063function getName(func) {
18064 if (!util.isFunction(func)) {
18065 return;
18066 }
18067 if (functionsHaveNames) {
18068 return func.name;
18069 }
18070 var str = func.toString();
18071 var match = str.match(regex);
18072 return match && match[1];
ab78acc6 18073}
8b095871
IC
18074assert.AssertionError = function AssertionError(options) {
18075 this.name = 'AssertionError';
18076 this.actual = options.actual;
18077 this.expected = options.expected;
18078 this.operator = options.operator;
18079 if (options.message) {
18080 this.message = options.message;
18081 this.generatedMessage = false;
18082 } else {
18083 this.message = getMessage(this);
18084 this.generatedMessage = true;
18085 }
18086 var stackStartFunction = options.stackStartFunction || fail;
18087 if (Error.captureStackTrace) {
18088 Error.captureStackTrace(this, stackStartFunction);
18089 } else {
18090 // non v8 browsers so we can have a stacktrace
18091 var err = new Error();
18092 if (err.stack) {
18093 var out = err.stack;
18094
18095 // try to strip useless frames
18096 var fn_name = getName(stackStartFunction);
18097 var idx = out.indexOf('\n' + fn_name);
18098 if (idx >= 0) {
18099 // once we have located the function frame
18100 // we need to strip out everything before it (and its line)
18101 var next_line = out.indexOf('\n', idx + 1);
18102 out = out.substring(next_line + 1);
18103 }
3af2954a 18104
8b095871
IC
18105 this.stack = out;
18106 }
18107 }
18108};
3af2954a 18109
8b095871
IC
18110// assert.AssertionError instanceof Error
18111util.inherits(assert.AssertionError, Error);
3af2954a 18112
8b095871
IC
18113function truncate(s, n) {
18114 if (typeof s === 'string') {
18115 return s.length < n ? s : s.slice(0, n);
18116 } else {
18117 return s;
3af2954a 18118 }
ab78acc6 18119}
8b095871
IC
18120function inspect(something) {
18121 if (functionsHaveNames || !util.isFunction(something)) {
18122 return util.inspect(something);
18123 }
18124 var rawname = getName(something);
18125 var name = rawname ? ': ' + rawname : '';
18126 return '[Function' + name + ']';
18127}
18128function getMessage(self) {
18129 return truncate(inspect(self.actual), 128) + ' ' +
18130 self.operator + ' ' +
18131 truncate(inspect(self.expected), 128);
ab78acc6 18132}
3af2954a 18133
8b095871
IC
18134// At present only the three keys mentioned above are used and
18135// understood by the spec. Implementations or sub modules can pass
18136// other keys to the AssertionError's constructor - they will be
18137// ignored.
3af2954a 18138
8b095871
IC
18139// 3. All of the following functions must throw an AssertionError
18140// when a corresponding condition is not met, with a message that
18141// may be undefined if not provided. All assertion methods provide
18142// both the actual and expected values to the assertion error for
18143// display purposes.
3af2954a 18144
8b095871
IC
18145function fail(actual, expected, message, operator, stackStartFunction) {
18146 throw new assert.AssertionError({
18147 message: message,
18148 actual: actual,
18149 expected: expected,
18150 operator: operator,
18151 stackStartFunction: stackStartFunction
18152 });
ab78acc6 18153}
3af2954a 18154
8b095871
IC
18155// EXTENSION! allows for well behaved errors defined elsewhere.
18156assert.fail = fail;
3af2954a 18157
8b095871
IC
18158// 4. Pure assertion tests whether a value is truthy, as determined
18159// by !!guard.
18160// assert.ok(guard, message_opt);
18161// This statement is equivalent to assert.equal(true, !!guard,
18162// message_opt);. To test strictly for the value true, use
18163// assert.strictEqual(true, guard, message_opt);.
3af2954a 18164
8b095871
IC
18165function ok(value, message) {
18166 if (!value) fail(value, true, message, '==', assert.ok);
ab78acc6 18167}
8b095871 18168assert.ok = ok;
3af2954a 18169
8b095871
IC
18170// 5. The equality assertion tests shallow, coercive equality with
18171// ==.
18172// assert.equal(actual, expected, message_opt);
3af2954a 18173
8b095871
IC
18174assert.equal = function equal(actual, expected, message) {
18175 if (actual != expected) fail(actual, expected, message, '==', assert.equal);
18176};
3af2954a 18177
8b095871
IC
18178// 6. The non-equality assertion tests for whether two objects are not equal
18179// with != assert.notEqual(actual, expected, message_opt);
3af2954a 18180
8b095871
IC
18181assert.notEqual = function notEqual(actual, expected, message) {
18182 if (actual == expected) {
18183 fail(actual, expected, message, '!=', assert.notEqual);
ab78acc6 18184 }
8b095871
IC
18185};
18186
18187// 7. The equivalence assertion tests a deep equality relation.
18188// assert.deepEqual(actual, expected, message_opt);
18189
18190assert.deepEqual = function deepEqual(actual, expected, message) {
18191 if (!_deepEqual(actual, expected, false)) {
18192 fail(actual, expected, message, 'deepEqual', assert.deepEqual);
ab78acc6 18193 }
8b095871 18194};
3af2954a 18195
8b095871
IC
18196assert.deepStrictEqual = function deepStrictEqual(actual, expected, message) {
18197 if (!_deepEqual(actual, expected, true)) {
18198 fail(actual, expected, message, 'deepStrictEqual', assert.deepStrictEqual);
3af2954a 18199 }
8b095871
IC
18200};
18201
18202function _deepEqual(actual, expected, strict, memos) {
18203 // 7.1. All identical values are equivalent, as determined by ===.
18204 if (actual === expected) {
18205 return true;
18206 } else if (isBuffer(actual) && isBuffer(expected)) {
18207 return compare(actual, expected) === 0;
18208
18209 // 7.2. If the expected value is a Date object, the actual value is
18210 // equivalent if it is also a Date object that refers to the same time.
18211 } else if (util.isDate(actual) && util.isDate(expected)) {
18212 return actual.getTime() === expected.getTime();
18213
18214 // 7.3 If the expected value is a RegExp object, the actual value is
18215 // equivalent if it is also a RegExp object with the same source and
18216 // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).
18217 } else if (util.isRegExp(actual) && util.isRegExp(expected)) {
18218 return actual.source === expected.source &&
18219 actual.global === expected.global &&
18220 actual.multiline === expected.multiline &&
18221 actual.lastIndex === expected.lastIndex &&
18222 actual.ignoreCase === expected.ignoreCase;
18223
18224 // 7.4. Other pairs that do not both pass typeof value == 'object',
18225 // equivalence is determined by ==.
18226 } else if ((actual === null || typeof actual !== 'object') &&
18227 (expected === null || typeof expected !== 'object')) {
18228 return strict ? actual === expected : actual == expected;
18229
18230 // If both values are instances of typed arrays, wrap their underlying
18231 // ArrayBuffers in a Buffer each to increase performance
18232 // This optimization requires the arrays to have the same type as checked by
18233 // Object.prototype.toString (aka pToString). Never perform binary
18234 // comparisons for Float*Arrays, though, since e.g. +0 === -0 but their
18235 // bit patterns are not identical.
18236 } else if (isView(actual) && isView(expected) &&
18237 pToString(actual) === pToString(expected) &&
18238 !(actual instanceof Float32Array ||
18239 actual instanceof Float64Array)) {
18240 return compare(new Uint8Array(actual.buffer),
18241 new Uint8Array(expected.buffer)) === 0;
18242
18243 // 7.5 For all other Object pairs, including Array objects, equivalence is
18244 // determined by having the same number of owned properties (as verified
18245 // with Object.prototype.hasOwnProperty.call), the same set of keys
18246 // (although not necessarily the same order), equivalent values for every
18247 // corresponding key, and an identical 'prototype' property. Note: this
18248 // accounts for both named and indexed properties on Arrays.
18249 } else if (isBuffer(actual) !== isBuffer(expected)) {
18250 return false;
18251 } else {
18252 memos = memos || {actual: [], expected: []};
3af2954a 18253
8b095871
IC
18254 var actualIndex = memos.actual.indexOf(actual);
18255 if (actualIndex !== -1) {
18256 if (actualIndex === memos.expected.indexOf(expected)) {
18257 return true;
ab78acc6 18258 }
3af2954a 18259 }
8b095871
IC
18260
18261 memos.actual.push(actual);
18262 memos.expected.push(expected);
18263
18264 return objEquiv(actual, expected, strict, memos);
3af2954a 18265 }
ab78acc6 18266}
3af2954a 18267
8b095871
IC
18268function isArguments(object) {
18269 return Object.prototype.toString.call(object) == '[object Arguments]';
ab78acc6 18270}
3af2954a 18271
8b095871
IC
18272function objEquiv(a, b, strict, actualVisitedObjects) {
18273 if (a === null || a === undefined || b === null || b === undefined)
18274 return false;
18275 // if one is a primitive, the other must be same
18276 if (util.isPrimitive(a) || util.isPrimitive(b))
18277 return a === b;
18278 if (strict && Object.getPrototypeOf(a) !== Object.getPrototypeOf(b))
18279 return false;
18280 var aIsArgs = isArguments(a);
18281 var bIsArgs = isArguments(b);
18282 if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))
18283 return false;
18284 if (aIsArgs) {
18285 a = pSlice.call(a);
18286 b = pSlice.call(b);
18287 return _deepEqual(a, b, strict);
18288 }
18289 var ka = objectKeys(a);
18290 var kb = objectKeys(b);
18291 var key, i;
18292 // having the same number of owned properties (keys incorporates
18293 // hasOwnProperty)
18294 if (ka.length !== kb.length)
18295 return false;
18296 //the same set of keys (although not necessarily the same order),
18297 ka.sort();
18298 kb.sort();
18299 //~~~cheap key test
18300 for (i = ka.length - 1; i >= 0; i--) {
18301 if (ka[i] !== kb[i])
18302 return false;
18303 }
18304 //equivalent values for every corresponding key, and
18305 //~~~possibly expensive deep test
18306 for (i = ka.length - 1; i >= 0; i--) {
18307 key = ka[i];
18308 if (!_deepEqual(a[key], b[key], strict, actualVisitedObjects))
18309 return false;
18310 }
18311 return true;
ab78acc6 18312}
3af2954a 18313
8b095871
IC
18314// 8. The non-equivalence assertion tests for any deep inequality.
18315// assert.notDeepEqual(actual, expected, message_opt);
3af2954a 18316
8b095871
IC
18317assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
18318 if (_deepEqual(actual, expected, false)) {
18319 fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
3af2954a 18320 }
8b095871 18321};
3af2954a 18322
8b095871
IC
18323assert.notDeepStrictEqual = notDeepStrictEqual;
18324function notDeepStrictEqual(actual, expected, message) {
18325 if (_deepEqual(actual, expected, true)) {
18326 fail(actual, expected, message, 'notDeepStrictEqual', notDeepStrictEqual);
18327 }
ab78acc6 18328}
3af2954a 18329
3af2954a 18330
8b095871
IC
18331// 9. The strict equality assertion tests strict equality, as determined by ===.
18332// assert.strictEqual(actual, expected, message_opt);
3af2954a 18333
8b095871
IC
18334assert.strictEqual = function strictEqual(actual, expected, message) {
18335 if (actual !== expected) {
18336 fail(actual, expected, message, '===', assert.strictEqual);
18337 }
18338};
3af2954a 18339
8b095871
IC
18340// 10. The strict non-equality assertion tests for strict inequality, as
18341// determined by !==. assert.notStrictEqual(actual, expected, message_opt);
3af2954a 18342
8b095871
IC
18343assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
18344 if (actual === expected) {
18345 fail(actual, expected, message, '!==', assert.notStrictEqual);
18346 }
18347};
3af2954a 18348
8b095871
IC
18349function expectedException(actual, expected) {
18350 if (!actual || !expected) {
18351 return false;
18352 }
3af2954a 18353
8b095871
IC
18354 if (Object.prototype.toString.call(expected) == '[object RegExp]') {
18355 return expected.test(actual);
18356 }
3af2954a 18357
8b095871
IC
18358 try {
18359 if (actual instanceof expected) {
18360 return true;
18361 }
18362 } catch (e) {
18363 // Ignore. The instanceof check doesn't work for arrow functions.
18364 }
3af2954a 18365
8b095871
IC
18366 if (Error.isPrototypeOf(expected)) {
18367 return false;
18368 }
18369
18370 return expected.call({}, actual) === true;
ab78acc6 18371}
3af2954a 18372
8b095871
IC
18373function _tryBlock(block) {
18374 var error;
18375 try {
18376 block();
18377 } catch (e) {
18378 error = e;
18379 }
18380 return error;
ab78acc6 18381}
3af2954a 18382
8b095871
IC
18383function _throws(shouldThrow, block, expected, message) {
18384 var actual;
18385
18386 if (typeof block !== 'function') {
18387 throw new TypeError('"block" argument must be a function');
3af2954a 18388 }
8b095871
IC
18389
18390 if (typeof expected === 'string') {
18391 message = expected;
18392 expected = null;
ab78acc6 18393 }
8b095871
IC
18394
18395 actual = _tryBlock(block);
18396
18397 message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
18398 (message ? ' ' + message : '.');
18399
18400 if (shouldThrow && !actual) {
18401 fail(actual, expected, 'Missing expected exception' + message);
ab78acc6 18402 }
8b095871
IC
18403
18404 var userProvidedMessage = typeof message === 'string';
18405 var isUnwantedException = !shouldThrow && util.isError(actual);
18406 var isUnexpectedException = !shouldThrow && actual && !expected;
18407
18408 if ((isUnwantedException &&
18409 userProvidedMessage &&
18410 expectedException(actual, expected)) ||
18411 isUnexpectedException) {
18412 fail(actual, expected, 'Got unwanted exception' + message);
ab78acc6 18413 }
3af2954a 18414
8b095871
IC
18415 if ((shouldThrow && actual && expected &&
18416 !expectedException(actual, expected)) || (!shouldThrow && actual)) {
18417 throw actual;
18418 }
ab78acc6 18419}
3af2954a 18420
8b095871
IC
18421// 11. Expected to throw an error:
18422// assert.throws(block, Error_opt, message_opt);
18423
18424assert.throws = function(block, /*optional*/error, /*optional*/message) {
18425 _throws(true, block, error, message);
18426};
18427
18428// EXTENSION! This is annoying to write outside this module.
18429assert.doesNotThrow = function(block, /*optional*/error, /*optional*/message) {
18430 _throws(false, block, error, message);
18431};
18432
18433assert.ifError = function(err) { if (err) throw err; };
18434
18435var objectKeys = Object.keys || function (obj) {
18436 var keys = [];
18437 for (var key in obj) {
18438 if (hasOwn.call(obj, key)) keys.push(key);
3af2954a 18439 }
8b095871
IC
18440 return keys;
18441};
3af2954a 18442
8b095871
IC
18443}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
18444},{"util/":30}],2:[function(require,module,exports){
18445'use strict'
18446
18447exports.byteLength = byteLength
18448exports.toByteArray = toByteArray
18449exports.fromByteArray = fromByteArray
18450
18451var lookup = []
18452var revLookup = []
18453var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array
18454
18455var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
18456for (var i = 0, len = code.length; i < len; ++i) {
18457 lookup[i] = code[i]
18458 revLookup[code.charCodeAt(i)] = i
18459}
18460
18461revLookup['-'.charCodeAt(0)] = 62
18462revLookup['_'.charCodeAt(0)] = 63
18463
18464function placeHoldersCount (b64) {
18465 var len = b64.length
18466 if (len % 4 > 0) {
18467 throw new Error('Invalid string. Length must be a multiple of 4')
18468 }
18469
18470 // the number of equal signs (place holders)
18471 // if there are two placeholders, than the two characters before it
18472 // represent one byte
18473 // if there is only one, then the three characters before it represent 2 bytes
18474 // this is just a cheap hack to not do indexOf twice
18475 return b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0
ab78acc6
IC
18476}
18477
8b095871
IC
18478function byteLength (b64) {
18479 // base64 is 4/3 + up to two characters of the original data
18480 return b64.length * 3 / 4 - placeHoldersCount(b64)
ab78acc6 18481}
3af2954a 18482
8b095871
IC
18483function toByteArray (b64) {
18484 var i, j, l, tmp, placeHolders, arr
18485 var len = b64.length
18486 placeHolders = placeHoldersCount(b64)
18487
18488 arr = new Arr(len * 3 / 4 - placeHolders)
18489
18490 // if there are placeholders, only get up to the last complete 4 chars
18491 l = placeHolders > 0 ? len - 4 : len
18492
18493 var L = 0
18494
18495 for (i = 0, j = 0; i < l; i += 4, j += 3) {
18496 tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)]
18497 arr[L++] = (tmp >> 16) & 0xFF
18498 arr[L++] = (tmp >> 8) & 0xFF
18499 arr[L++] = tmp & 0xFF
18500 }
18501
18502 if (placeHolders === 2) {
18503 tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)
18504 arr[L++] = tmp & 0xFF
18505 } else if (placeHolders === 1) {
18506 tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2)
18507 arr[L++] = (tmp >> 8) & 0xFF
18508 arr[L++] = tmp & 0xFF
18509 }
18510
18511 return arr
ab78acc6 18512}
3af2954a 18513
8b095871
IC
18514function tripletToBase64 (num) {
18515 return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]
ab78acc6 18516}
3af2954a 18517
8b095871
IC
18518function encodeChunk (uint8, start, end) {
18519 var tmp
18520 var output = []
18521 for (var i = start; i < end; i += 3) {
18522 tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
18523 output.push(tripletToBase64(tmp))
18524 }
18525 return output.join('')
ab78acc6 18526}
3af2954a 18527
8b095871
IC
18528function fromByteArray (uint8) {
18529 var tmp
18530 var len = uint8.length
18531 var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes
18532 var output = ''
18533 var parts = []
18534 var maxChunkLength = 16383 // must be multiple of 3
18535
18536 // go through the array every three bytes, we'll deal with trailing stuff later
18537 for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {
18538 parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))
18539 }
18540
18541 // pad the end with zeros, but make sure to not forget the extra bytes
18542 if (extraBytes === 1) {
18543 tmp = uint8[len - 1]
18544 output += lookup[tmp >> 2]
18545 output += lookup[(tmp << 4) & 0x3F]
18546 output += '=='
18547 } else if (extraBytes === 2) {
18548 tmp = (uint8[len - 2] << 8) + (uint8[len - 1])
18549 output += lookup[tmp >> 10]
18550 output += lookup[(tmp >> 4) & 0x3F]
18551 output += lookup[(tmp << 2) & 0x3F]
18552 output += '='
18553 }
18554
18555 parts.push(output)
18556
18557 return parts.join('')
ab78acc6 18558}
3af2954a 18559
8b095871 18560},{}],3:[function(require,module,exports){
3af2954a 18561
8b095871
IC
18562},{}],4:[function(require,module,exports){
18563(function (global){
18564'use strict';
18565
18566var buffer = require('buffer');
18567var Buffer = buffer.Buffer;
18568var SlowBuffer = buffer.SlowBuffer;
18569var MAX_LEN = buffer.kMaxLength || 2147483647;
18570exports.alloc = function alloc(size, fill, encoding) {
18571 if (typeof Buffer.alloc === 'function') {
18572 return Buffer.alloc(size, fill, encoding);
ab78acc6 18573 }
8b095871
IC
18574 if (typeof encoding === 'number') {
18575 throw new TypeError('encoding must not be number');
18576 }
18577 if (typeof size !== 'number') {
18578 throw new TypeError('size must be a number');
18579 }
18580 if (size > MAX_LEN) {
18581 throw new RangeError('size is too large');
18582 }
18583 var enc = encoding;
18584 var _fill = fill;
18585 if (_fill === undefined) {
18586 enc = undefined;
18587 _fill = 0;
18588 }
18589 var buf = new Buffer(size);
18590 if (typeof _fill === 'string') {
18591 var fillBuf = new Buffer(_fill, enc);
18592 var flen = fillBuf.length;
18593 var i = -1;
18594 while (++i < size) {
18595 buf[i] = fillBuf[i % flen];
ab78acc6 18596 }
ab78acc6 18597 } else {
8b095871 18598 buf.fill(_fill);
ab78acc6 18599 }
8b095871 18600 return buf;
ab78acc6 18601}
8b095871
IC
18602exports.allocUnsafe = function allocUnsafe(size) {
18603 if (typeof Buffer.allocUnsafe === 'function') {
18604 return Buffer.allocUnsafe(size);
18605 }
18606 if (typeof size !== 'number') {
18607 throw new TypeError('size must be a number');
18608 }
18609 if (size > MAX_LEN) {
18610 throw new RangeError('size is too large');
18611 }
18612 return new Buffer(size);
ab78acc6 18613}
8b095871
IC
18614exports.from = function from(value, encodingOrOffset, length) {
18615 if (typeof Buffer.from === 'function' && (!global.Uint8Array || Uint8Array.from !== Buffer.from)) {
18616 return Buffer.from(value, encodingOrOffset, length);
18617 }
18618 if (typeof value === 'number') {
18619 throw new TypeError('"value" argument must not be a number');
18620 }
18621 if (typeof value === 'string') {
18622 return new Buffer(value, encodingOrOffset);
18623 }
18624 if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {
18625 var offset = encodingOrOffset;
18626 if (arguments.length === 1) {
18627 return new Buffer(value);
18628 }
18629 if (typeof offset === 'undefined') {
18630 offset = 0;
18631 }
18632 var len = length;
18633 if (typeof len === 'undefined') {
18634 len = value.byteLength - offset;
18635 }
18636 if (offset >= value.byteLength) {
18637 throw new RangeError('\'offset\' is out of bounds');
18638 }
18639 if (len > value.byteLength - offset) {
18640 throw new RangeError('\'length\' is out of bounds');
18641 }
18642 return new Buffer(value.slice(offset, offset + len));
18643 }
18644 if (Buffer.isBuffer(value)) {
18645 var out = new Buffer(value.length);
18646 value.copy(out, 0, 0, value.length);
18647 return out;
18648 }
18649 if (value) {
18650 if (Array.isArray(value) || (typeof ArrayBuffer !== 'undefined' && value.buffer instanceof ArrayBuffer) || 'length' in value) {
18651 return new Buffer(value);
18652 }
18653 if (value.type === 'Buffer' && Array.isArray(value.data)) {
18654 return new Buffer(value.data);
18655 }
18656 }
3af2954a 18657
8b095871 18658 throw new TypeError('First argument must be a string, Buffer, ' + 'ArrayBuffer, Array, or array-like object.');
ab78acc6 18659}
8b095871
IC
18660exports.allocUnsafeSlow = function allocUnsafeSlow(size) {
18661 if (typeof Buffer.allocUnsafeSlow === 'function') {
18662 return Buffer.allocUnsafeSlow(size);
18663 }
18664 if (typeof size !== 'number') {
18665 throw new TypeError('size must be a number');
18666 }
18667 if (size >= MAX_LEN) {
18668 throw new RangeError('size is too large');
18669 }
18670 return new SlowBuffer(size);
ab78acc6 18671}
3af2954a 18672
8b095871
IC
18673}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
18674},{"buffer":5}],5:[function(require,module,exports){
18675/*!
18676 * The buffer module from node.js, for the browser.
18677 *
18678 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
18679 * @license MIT
18680 */
18681/* eslint-disable no-proto */
3af2954a 18682
8b095871 18683'use strict'
3af2954a 18684
8b095871
IC
18685var base64 = require('base64-js')
18686var ieee754 = require('ieee754')
3af2954a 18687
8b095871
IC
18688exports.Buffer = Buffer
18689exports.SlowBuffer = SlowBuffer
18690exports.INSPECT_MAX_BYTES = 50
18691
18692var K_MAX_LENGTH = 0x7fffffff
18693exports.kMaxLength = K_MAX_LENGTH
18694
18695/**
18696 * If `Buffer.TYPED_ARRAY_SUPPORT`:
18697 * === true Use Uint8Array implementation (fastest)
18698 * === false Print warning and recommend using `buffer` v4.x which has an Object
18699 * implementation (most compatible, even IE6)
18700 *
18701 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
18702 * Opera 11.6+, iOS 4.2+.
18703 *
18704 * We report that the browser does not support typed arrays if the are not subclassable
18705 * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`
18706 * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support
18707 * for __proto__ and has a buggy typed array implementation.
18708 */
18709Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport()
18710
18711if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&
18712 typeof console.error === 'function') {
18713 console.error(
18714 'This browser lacks typed array (Uint8Array) support which is required by ' +
18715 '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'
18716 )
ab78acc6 18717}
3af2954a 18718
8b095871
IC
18719function typedArraySupport () {
18720 // Can typed array instances can be augmented?
18721 try {
18722 var arr = new Uint8Array(1)
18723 arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}
18724 return arr.foo() === 42
18725 } catch (e) {
18726 return false
18727 }
ab78acc6 18728}
3af2954a 18729
8b095871
IC
18730function createBuffer (length) {
18731 if (length > K_MAX_LENGTH) {
18732 throw new RangeError('Invalid typed array length')
3af2954a 18733 }
8b095871
IC
18734 // Return an augmented `Uint8Array` instance
18735 var buf = new Uint8Array(length)
18736 buf.__proto__ = Buffer.prototype
18737 return buf
ab78acc6 18738}
3af2954a 18739
8b095871
IC
18740/**
18741 * The Buffer constructor returns instances of `Uint8Array` that have their
18742 * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of
18743 * `Uint8Array`, so the returned instances will have all the node `Buffer` methods
18744 * and the `Uint8Array` methods. Square bracket notation works as expected -- it
18745 * returns a single octet.
18746 *
18747 * The `Uint8Array` prototype remains unmodified.
18748 */
3af2954a 18749
8b095871
IC
18750function Buffer (arg, encodingOrOffset, length) {
18751 // Common case.
18752 if (typeof arg === 'number') {
18753 if (typeof encodingOrOffset === 'string') {
18754 throw new Error(
18755 'If encoding is specified then the first argument must be a string'
18756 )
18757 }
18758 return allocUnsafe(arg)
18759 }
18760 return from(arg, encodingOrOffset, length)
ab78acc6 18761}
3af2954a 18762
8b095871
IC
18763// Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97
18764if (typeof Symbol !== 'undefined' && Symbol.species &&
18765 Buffer[Symbol.species] === Buffer) {
18766 Object.defineProperty(Buffer, Symbol.species, {
18767 value: null,
18768 configurable: true,
18769 enumerable: false,
18770 writable: false
18771 })
ab78acc6 18772}
3af2954a 18773
8b095871 18774Buffer.poolSize = 8192 // not used by this implementation
3af2954a 18775
8b095871
IC
18776function from (value, encodingOrOffset, length) {
18777 if (typeof value === 'number') {
18778 throw new TypeError('"value" argument must not be a number')
18779 }
3af2954a 18780
8b095871
IC
18781 if (value instanceof ArrayBuffer) {
18782 return fromArrayBuffer(value, encodingOrOffset, length)
18783 }
3af2954a 18784
8b095871
IC
18785 if (typeof value === 'string') {
18786 return fromString(value, encodingOrOffset)
18787 }
3af2954a 18788
8b095871 18789 return fromObject(value)
ab78acc6 18790}
3af2954a 18791
8b095871
IC
18792/**
18793 * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError
18794 * if value is a number.
18795 * Buffer.from(str[, encoding])
18796 * Buffer.from(array)
18797 * Buffer.from(buffer)
18798 * Buffer.from(arrayBuffer[, byteOffset[, length]])
18799 **/
18800Buffer.from = function (value, encodingOrOffset, length) {
18801 return from(value, encodingOrOffset, length)
ab78acc6 18802}
3af2954a 18803
8b095871
IC
18804// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:
18805// https://github.com/feross/buffer/pull/148
18806Buffer.prototype.__proto__ = Uint8Array.prototype
18807Buffer.__proto__ = Uint8Array
18808
18809function assertSize (size) {
18810 if (typeof size !== 'number') {
18811 throw new TypeError('"size" argument must be a number')
18812 } else if (size < 0) {
18813 throw new RangeError('"size" argument must not be negative')
18814 }
18815}
18816
18817function alloc (size, fill, encoding) {
18818 assertSize(size)
18819 if (size <= 0) {
18820 return createBuffer(size)
3af2954a 18821 }
8b095871
IC
18822 if (fill !== undefined) {
18823 // Only pay attention to encoding if it's a string. This
18824 // prevents accidentally sending in a number that would
18825 // be interpretted as a start offset.
18826 return typeof encoding === 'string'
18827 ? createBuffer(size).fill(fill, encoding)
18828 : createBuffer(size).fill(fill)
18829 }
18830 return createBuffer(size)
ab78acc6 18831}
3af2954a 18832
8b095871
IC
18833/**
18834 * Creates a new filled Buffer instance.
18835 * alloc(size[, fill[, encoding]])
18836 **/
18837Buffer.alloc = function (size, fill, encoding) {
18838 return alloc(size, fill, encoding)
ab78acc6 18839}
3af2954a 18840
8b095871
IC
18841function allocUnsafe (size) {
18842 assertSize(size)
18843 return createBuffer(size < 0 ? 0 : checked(size) | 0)
ab78acc6 18844}
3af2954a 18845
8b095871
IC
18846/**
18847 * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.
18848 * */
18849Buffer.allocUnsafe = function (size) {
18850 return allocUnsafe(size)
18851}
18852/**
18853 * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.
18854 */
18855Buffer.allocUnsafeSlow = function (size) {
18856 return allocUnsafe(size)
ab78acc6 18857}
3af2954a 18858
8b095871
IC
18859function fromString (string, encoding) {
18860 if (typeof encoding !== 'string' || encoding === '') {
18861 encoding = 'utf8'
18862 }
18863
18864 if (!Buffer.isEncoding(encoding)) {
18865 throw new TypeError('"encoding" must be a valid string encoding')
18866 }
18867
18868 var length = byteLength(string, encoding) | 0
18869 var buf = createBuffer(length)
18870
18871 var actual = buf.write(string, encoding)
18872
18873 if (actual !== length) {
18874 // Writing a hex string, for example, that contains invalid characters will
18875 // cause everything after the first invalid character to be ignored. (e.g.
18876 // 'abxxcd' will be treated as 'ab')
18877 buf = buf.slice(0, actual)
18878 }
18879
18880 return buf
ab78acc6 18881}
3af2954a 18882
8b095871
IC
18883function fromArrayLike (array) {
18884 var length = array.length < 0 ? 0 : checked(array.length) | 0
18885 var buf = createBuffer(length)
18886 for (var i = 0; i < length; i += 1) {
18887 buf[i] = array[i] & 255
18888 }
18889 return buf
18890}
3af2954a 18891
8b095871
IC
18892function fromArrayBuffer (array, byteOffset, length) {
18893 if (byteOffset < 0 || array.byteLength < byteOffset) {
18894 throw new RangeError('\'offset\' is out of bounds')
18895 }
3af2954a 18896
8b095871
IC
18897 if (array.byteLength < byteOffset + (length || 0)) {
18898 throw new RangeError('\'length\' is out of bounds')
ab78acc6
IC
18899 }
18900
8b095871
IC
18901 var buf
18902 if (byteOffset === undefined && length === undefined) {
18903 buf = new Uint8Array(array)
18904 } else if (length === undefined) {
18905 buf = new Uint8Array(array, byteOffset)
18906 } else {
18907 buf = new Uint8Array(array, byteOffset, length)
18908 }
3af2954a 18909
8b095871
IC
18910 // Return an augmented `Uint8Array` instance
18911 buf.__proto__ = Buffer.prototype
18912 return buf
18913}
18914
18915function fromObject (obj) {
18916 if (Buffer.isBuffer(obj)) {
18917 var len = checked(obj.length) | 0
18918 var buf = createBuffer(len)
18919
18920 if (buf.length === 0) {
18921 return buf
ab78acc6 18922 }
8b095871
IC
18923
18924 obj.copy(buf, 0, 0, len)
18925 return buf
18926 }
18927
18928 if (obj) {
18929 if (ArrayBuffer.isView(obj) || 'length' in obj) {
18930 if (typeof obj.length !== 'number' || isnan(obj.length)) {
18931 return createBuffer(0)
ab78acc6 18932 }
8b095871 18933 return fromArrayLike(obj)
ab78acc6 18934 }
3af2954a 18935
8b095871
IC
18936 if (obj.type === 'Buffer' && Array.isArray(obj.data)) {
18937 return fromArrayLike(obj.data)
3af2954a
IC
18938 }
18939 }
8b095871
IC
18940
18941 throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')
ab78acc6 18942}
3af2954a 18943
8b095871
IC
18944function checked (length) {
18945 // Note: cannot use `length < K_MAX_LENGTH` here because that fails when
18946 // length is NaN (which is otherwise coerced to zero.)
18947 if (length >= K_MAX_LENGTH) {
18948 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
18949 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')
ab78acc6 18950 }
8b095871
IC
18951 return length | 0
18952}
18953
18954function SlowBuffer (length) {
18955 if (+length != length) { // eslint-disable-line eqeqeq
18956 length = 0
3af2954a 18957 }
8b095871 18958 return Buffer.alloc(+length)
ab78acc6 18959}
3af2954a 18960
8b095871
IC
18961Buffer.isBuffer = function isBuffer (b) {
18962 return b != null && b._isBuffer === true
ab78acc6 18963}
3af2954a 18964
8b095871
IC
18965Buffer.compare = function compare (a, b) {
18966 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
18967 throw new TypeError('Arguments must be Buffers')
18968 }
18969
18970 if (a === b) return 0
18971
18972 var x = a.length
18973 var y = b.length
18974
18975 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
18976 if (a[i] !== b[i]) {
18977 x = a[i]
18978 y = b[i]
18979 break
ab78acc6
IC
18980 }
18981 }
8b095871
IC
18982
18983 if (x < y) return -1
18984 if (y < x) return 1
18985 return 0
18986}
18987
18988Buffer.isEncoding = function isEncoding (encoding) {
18989 switch (String(encoding).toLowerCase()) {
18990 case 'hex':
18991 case 'utf8':
18992 case 'utf-8':
18993 case 'ascii':
18994 case 'latin1':
18995 case 'binary':
18996 case 'base64':
18997 case 'ucs2':
18998 case 'ucs-2':
18999 case 'utf16le':
19000 case 'utf-16le':
19001 return true
19002 default:
19003 return false
19004 }
ab78acc6
IC
19005}
19006
8b095871
IC
19007Buffer.concat = function concat (list, length) {
19008 if (!Array.isArray(list)) {
19009 throw new TypeError('"list" argument must be an Array of Buffers')
19010 }
ab78acc6 19011
8b095871
IC
19012 if (list.length === 0) {
19013 return Buffer.alloc(0)
19014 }
ab78acc6 19015
8b095871
IC
19016 var i
19017 if (length === undefined) {
19018 length = 0
19019 for (i = 0; i < list.length; ++i) {
19020 length += list[i].length
19021 }
3af2954a 19022 }
8b095871
IC
19023
19024 var buffer = Buffer.allocUnsafe(length)
19025 var pos = 0
19026 for (i = 0; i < list.length; ++i) {
19027 var buf = list[i]
19028 if (!Buffer.isBuffer(buf)) {
19029 throw new TypeError('"list" argument must be an Array of Buffers')
19030 }
19031 buf.copy(buffer, pos)
19032 pos += buf.length
ab78acc6 19033 }
8b095871 19034 return buffer
ab78acc6
IC
19035}
19036
8b095871
IC
19037function byteLength (string, encoding) {
19038 if (Buffer.isBuffer(string)) {
19039 return string.length
19040 }
19041 if (ArrayBuffer.isView(string) || string instanceof ArrayBuffer) {
19042 return string.byteLength
19043 }
19044 if (typeof string !== 'string') {
19045 string = '' + string
19046 }
19047
19048 var len = string.length
19049 if (len === 0) return 0
19050
19051 // Use a for loop to avoid recursion
19052 var loweredCase = false
19053 for (;;) {
19054 switch (encoding) {
19055 case 'ascii':
19056 case 'latin1':
19057 case 'binary':
19058 return len
19059 case 'utf8':
19060 case 'utf-8':
19061 case undefined:
19062 return utf8ToBytes(string).length
19063 case 'ucs2':
19064 case 'ucs-2':
19065 case 'utf16le':
19066 case 'utf-16le':
19067 return len * 2
19068 case 'hex':
19069 return len >>> 1
19070 case 'base64':
19071 return base64ToBytes(string).length
19072 default:
19073 if (loweredCase) return utf8ToBytes(string).length // assume utf8
19074 encoding = ('' + encoding).toLowerCase()
19075 loweredCase = true
ab78acc6 19076 }
3af2954a 19077 }
ab78acc6 19078}
8b095871 19079Buffer.byteLength = byteLength
3af2954a 19080
8b095871
IC
19081function slowToString (encoding, start, end) {
19082 var loweredCase = false
3af2954a 19083
8b095871
IC
19084 // No need to verify that "this.length <= MAX_UINT32" since it's a read-only
19085 // property of a typed array.
3af2954a 19086
8b095871
IC
19087 // This behaves neither like String nor Uint8Array in that we set start/end
19088 // to their upper/lower bounds if the value passed is out of range.
19089 // undefined is handled specially as per ECMA-262 6th Edition,
19090 // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.
19091 if (start === undefined || start < 0) {
19092 start = 0
19093 }
19094 // Return early if start > this.length. Done here to prevent potential uint32
19095 // coercion fail below.
19096 if (start > this.length) {
19097 return ''
19098 }
3af2954a 19099
8b095871
IC
19100 if (end === undefined || end > this.length) {
19101 end = this.length
19102 }
3af2954a 19103
8b095871
IC
19104 if (end <= 0) {
19105 return ''
19106 }
3af2954a 19107
8b095871
IC
19108 // Force coersion to uint32. This will also coerce falsey/NaN values to 0.
19109 end >>>= 0
19110 start >>>= 0
3af2954a 19111
8b095871
IC
19112 if (end <= start) {
19113 return ''
3af2954a
IC
19114 }
19115
8b095871 19116 if (!encoding) encoding = 'utf8'
3af2954a 19117
8b095871
IC
19118 while (true) {
19119 switch (encoding) {
19120 case 'hex':
19121 return hexSlice(this, start, end)
19122
19123 case 'utf8':
19124 case 'utf-8':
19125 return utf8Slice(this, start, end)
19126
19127 case 'ascii':
19128 return asciiSlice(this, start, end)
19129
19130 case 'latin1':
19131 case 'binary':
19132 return latin1Slice(this, start, end)
19133
19134 case 'base64':
19135 return base64Slice(this, start, end)
19136
19137 case 'ucs2':
19138 case 'ucs-2':
19139 case 'utf16le':
19140 case 'utf-16le':
19141 return utf16leSlice(this, start, end)
19142
19143 default:
19144 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
19145 encoding = (encoding + '').toLowerCase()
19146 loweredCase = true
19147 }
19148 }
ab78acc6 19149}
3af2954a 19150
8b095871
IC
19151// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)
19152// to detect a Buffer instance. It's not possible to use `instanceof Buffer`
19153// reliably in a browserify context because there could be multiple different
19154// copies of the 'buffer' package in use. This method works even for Buffer
19155// instances that were created from another copy of the `buffer` package.
19156// See: https://github.com/feross/buffer/issues/154
19157Buffer.prototype._isBuffer = true
19158
19159function swap (b, n, m) {
19160 var i = b[n]
19161 b[n] = b[m]
19162 b[m] = i
ab78acc6 19163}
3af2954a 19164
8b095871
IC
19165Buffer.prototype.swap16 = function swap16 () {
19166 var len = this.length
19167 if (len % 2 !== 0) {
19168 throw new RangeError('Buffer size must be a multiple of 16-bits')
19169 }
19170 for (var i = 0; i < len; i += 2) {
19171 swap(this, i, i + 1)
19172 }
19173 return this
19174}
3af2954a 19175
8b095871
IC
19176Buffer.prototype.swap32 = function swap32 () {
19177 var len = this.length
19178 if (len % 4 !== 0) {
19179 throw new RangeError('Buffer size must be a multiple of 32-bits')
19180 }
19181 for (var i = 0; i < len; i += 4) {
19182 swap(this, i, i + 3)
19183 swap(this, i + 1, i + 2)
19184 }
19185 return this
19186}
3af2954a 19187
8b095871
IC
19188Buffer.prototype.swap64 = function swap64 () {
19189 var len = this.length
19190 if (len % 8 !== 0) {
19191 throw new RangeError('Buffer size must be a multiple of 64-bits')
3af2954a 19192 }
8b095871
IC
19193 for (var i = 0; i < len; i += 8) {
19194 swap(this, i, i + 7)
19195 swap(this, i + 1, i + 6)
19196 swap(this, i + 2, i + 5)
19197 swap(this, i + 3, i + 4)
19198 }
19199 return this
19200}
3af2954a 19201
8b095871
IC
19202Buffer.prototype.toString = function toString () {
19203 var length = this.length
19204 if (length === 0) return ''
19205 if (arguments.length === 0) return utf8Slice(this, 0, length)
19206 return slowToString.apply(this, arguments)
ab78acc6 19207}
3af2954a 19208
8b095871
IC
19209Buffer.prototype.equals = function equals (b) {
19210 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
19211 if (this === b) return true
19212 return Buffer.compare(this, b) === 0
19213}
3af2954a 19214
8b095871
IC
19215Buffer.prototype.inspect = function inspect () {
19216 var str = ''
19217 var max = exports.INSPECT_MAX_BYTES
19218 if (this.length > 0) {
19219 str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
19220 if (this.length > max) str += ' ... '
19221 }
19222 return '<Buffer ' + str + '>'
ab78acc6 19223}
3af2954a 19224
8b095871
IC
19225Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {
19226 if (!Buffer.isBuffer(target)) {
19227 throw new TypeError('Argument must be a Buffer')
19228 }
3af2954a 19229
8b095871
IC
19230 if (start === undefined) {
19231 start = 0
19232 }
19233 if (end === undefined) {
19234 end = target ? target.length : 0
19235 }
19236 if (thisStart === undefined) {
19237 thisStart = 0
19238 }
19239 if (thisEnd === undefined) {
19240 thisEnd = this.length
19241 }
3af2954a 19242
8b095871
IC
19243 if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {
19244 throw new RangeError('out of range index')
19245 }
3af2954a 19246
8b095871
IC
19247 if (thisStart >= thisEnd && start >= end) {
19248 return 0
19249 }
19250 if (thisStart >= thisEnd) {
19251 return -1
19252 }
19253 if (start >= end) {
19254 return 1
19255 }
3af2954a 19256
8b095871
IC
19257 start >>>= 0
19258 end >>>= 0
19259 thisStart >>>= 0
19260 thisEnd >>>= 0
3af2954a 19261
8b095871 19262 if (this === target) return 0
3af2954a 19263
8b095871
IC
19264 var x = thisEnd - thisStart
19265 var y = end - start
19266 var len = Math.min(x, y)
19267
19268 var thisCopy = this.slice(thisStart, thisEnd)
19269 var targetCopy = target.slice(start, end)
19270
19271 for (var i = 0; i < len; ++i) {
19272 if (thisCopy[i] !== targetCopy[i]) {
19273 x = thisCopy[i]
19274 y = targetCopy[i]
19275 break
3af2954a 19276 }
8b095871
IC
19277 }
19278
19279 if (x < y) return -1
19280 if (y < x) return 1
19281 return 0
ab78acc6 19282}
3af2954a 19283
8b095871
IC
19284// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,
19285// OR the last index of `val` in `buffer` at offset <= `byteOffset`.
ab78acc6 19286//
8b095871
IC
19287// Arguments:
19288// - buffer - a Buffer to search
19289// - val - a string, Buffer, or number
19290// - byteOffset - an index into `buffer`; will be clamped to an int32
19291// - encoding - an optional encoding, relevant is val is a string
19292// - dir - true for indexOf, false for lastIndexOf
19293function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {
19294 // Empty buffer means no match
19295 if (buffer.length === 0) return -1
19296
19297 // Normalize byteOffset
19298 if (typeof byteOffset === 'string') {
19299 encoding = byteOffset
19300 byteOffset = 0
19301 } else if (byteOffset > 0x7fffffff) {
19302 byteOffset = 0x7fffffff
19303 } else if (byteOffset < -0x80000000) {
19304 byteOffset = -0x80000000
19305 }
19306 byteOffset = +byteOffset // Coerce to Number.
19307 if (isNaN(byteOffset)) {
19308 // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer
19309 byteOffset = dir ? 0 : (buffer.length - 1)
19310 }
19311
19312 // Normalize byteOffset: negative offsets start from the end of the buffer
19313 if (byteOffset < 0) byteOffset = buffer.length + byteOffset
19314 if (byteOffset >= buffer.length) {
19315 if (dir) return -1
19316 else byteOffset = buffer.length - 1
19317 } else if (byteOffset < 0) {
19318 if (dir) byteOffset = 0
19319 else return -1
19320 }
19321
19322 // Normalize val
19323 if (typeof val === 'string') {
19324 val = Buffer.from(val, encoding)
19325 }
3af2954a 19326
8b095871
IC
19327 // Finally, search either indexOf (if dir is true) or lastIndexOf
19328 if (Buffer.isBuffer(val)) {
19329 // Special case: looking for empty string/buffer always fails
19330 if (val.length === 0) {
19331 return -1
19332 }
19333 return arrayIndexOf(buffer, val, byteOffset, encoding, dir)
19334 } else if (typeof val === 'number') {
19335 val = val & 0xFF // Search for a byte value [0-255]
19336 if (typeof Uint8Array.prototype.indexOf === 'function') {
19337 if (dir) {
19338 return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)
19339 } else {
19340 return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)
19341 }
19342 }
19343 return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)
19344 }
3af2954a 19345
8b095871
IC
19346 throw new TypeError('val must be string, number or Buffer')
19347}
3af2954a 19348
8b095871
IC
19349function arrayIndexOf (arr, val, byteOffset, encoding, dir) {
19350 var indexSize = 1
19351 var arrLength = arr.length
19352 var valLength = val.length
3af2954a 19353
8b095871
IC
19354 if (encoding !== undefined) {
19355 encoding = String(encoding).toLowerCase()
19356 if (encoding === 'ucs2' || encoding === 'ucs-2' ||
19357 encoding === 'utf16le' || encoding === 'utf-16le') {
19358 if (arr.length < 2 || val.length < 2) {
19359 return -1
19360 }
19361 indexSize = 2
19362 arrLength /= 2
19363 valLength /= 2
19364 byteOffset /= 2
19365 }
19366 }
3af2954a 19367
8b095871
IC
19368 function read (buf, i) {
19369 if (indexSize === 1) {
19370 return buf[i]
19371 } else {
19372 return buf.readUInt16BE(i * indexSize)
19373 }
19374 }
3af2954a 19375
8b095871
IC
19376 var i
19377 if (dir) {
19378 var foundIndex = -1
19379 for (i = byteOffset; i < arrLength; i++) {
19380 if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {
19381 if (foundIndex === -1) foundIndex = i
19382 if (i - foundIndex + 1 === valLength) return foundIndex * indexSize
19383 } else {
19384 if (foundIndex !== -1) i -= i - foundIndex
19385 foundIndex = -1
19386 }
19387 }
ab78acc6 19388 } else {
8b095871
IC
19389 if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength
19390 for (i = byteOffset; i >= 0; i--) {
19391 var found = true
19392 for (var j = 0; j < valLength; j++) {
19393 if (read(arr, i + j) !== read(val, j)) {
19394 found = false
19395 break
19396 }
19397 }
19398 if (found) return i
19399 }
ab78acc6 19400 }
3af2954a 19401
8b095871
IC
19402 return -1
19403}
3af2954a 19404
8b095871
IC
19405Buffer.prototype.includes = function includes (val, byteOffset, encoding) {
19406 return this.indexOf(val, byteOffset, encoding) !== -1
19407}
19408
19409Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {
19410 return bidirectionalIndexOf(this, val, byteOffset, encoding, true)
19411}
3af2954a 19412
8b095871
IC
19413Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {
19414 return bidirectionalIndexOf(this, val, byteOffset, encoding, false)
19415}
19416
19417function hexWrite (buf, string, offset, length) {
19418 offset = Number(offset) || 0
19419 var remaining = buf.length - offset
19420 if (!length) {
19421 length = remaining
19422 } else {
19423 length = Number(length)
19424 if (length > remaining) {
19425 length = remaining
3af2954a 19426 }
3af2954a
IC
19427 }
19428
8b095871
IC
19429 // must be an even number of digits
19430 var strLen = string.length
19431 if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')
3af2954a 19432
8b095871
IC
19433 if (length > strLen / 2) {
19434 length = strLen / 2
ab78acc6 19435 }
8b095871
IC
19436 for (var i = 0; i < length; ++i) {
19437 var parsed = parseInt(string.substr(i * 2, 2), 16)
19438 if (isNaN(parsed)) return i
19439 buf[offset + i] = parsed
ab78acc6 19440 }
8b095871 19441 return i
ab78acc6 19442}
3af2954a 19443
8b095871
IC
19444function utf8Write (buf, string, offset, length) {
19445 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
ab78acc6 19446}
3af2954a 19447
8b095871
IC
19448function asciiWrite (buf, string, offset, length) {
19449 return blitBuffer(asciiToBytes(string), buf, offset, length)
ab78acc6 19450}
3af2954a 19451
8b095871
IC
19452function latin1Write (buf, string, offset, length) {
19453 return asciiWrite(buf, string, offset, length)
ab78acc6 19454}
3af2954a 19455
8b095871
IC
19456function base64Write (buf, string, offset, length) {
19457 return blitBuffer(base64ToBytes(string), buf, offset, length)
ab78acc6 19458}
3af2954a 19459
8b095871
IC
19460function ucs2Write (buf, string, offset, length) {
19461 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
19462}
3af2954a 19463
8b095871
IC
19464Buffer.prototype.write = function write (string, offset, length, encoding) {
19465 // Buffer#write(string)
19466 if (offset === undefined) {
19467 encoding = 'utf8'
19468 length = this.length
19469 offset = 0
19470 // Buffer#write(string, encoding)
19471 } else if (length === undefined && typeof offset === 'string') {
19472 encoding = offset
19473 length = this.length
19474 offset = 0
19475 // Buffer#write(string, offset[, length][, encoding])
19476 } else if (isFinite(offset)) {
19477 offset = offset >>> 0
19478 if (isFinite(length)) {
19479 length = length >>> 0
19480 if (encoding === undefined) encoding = 'utf8'
19481 } else {
19482 encoding = length
19483 length = undefined
19484 }
19485 } else {
19486 throw new Error(
19487 'Buffer.write(string, encoding, offset[, length]) is no longer supported'
19488 )
3af2954a
IC
19489 }
19490
8b095871
IC
19491 var remaining = this.length - offset
19492 if (length === undefined || length > remaining) length = remaining
3af2954a 19493
8b095871
IC
19494 if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
19495 throw new RangeError('Attempt to write outside buffer bounds')
ab78acc6 19496 }
3af2954a 19497
8b095871 19498 if (!encoding) encoding = 'utf8'
3af2954a 19499
8b095871
IC
19500 var loweredCase = false
19501 for (;;) {
19502 switch (encoding) {
19503 case 'hex':
19504 return hexWrite(this, string, offset, length)
3af2954a 19505
8b095871
IC
19506 case 'utf8':
19507 case 'utf-8':
19508 return utf8Write(this, string, offset, length)
3af2954a 19509
8b095871
IC
19510 case 'ascii':
19511 return asciiWrite(this, string, offset, length)
3af2954a 19512
8b095871
IC
19513 case 'latin1':
19514 case 'binary':
19515 return latin1Write(this, string, offset, length)
3af2954a 19516
8b095871
IC
19517 case 'base64':
19518 // Warning: maxLength not taken into account in base64Write
19519 return base64Write(this, string, offset, length)
3af2954a 19520
8b095871
IC
19521 case 'ucs2':
19522 case 'ucs-2':
19523 case 'utf16le':
19524 case 'utf-16le':
19525 return ucs2Write(this, string, offset, length)
3af2954a 19526
8b095871
IC
19527 default:
19528 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
19529 encoding = ('' + encoding).toLowerCase()
19530 loweredCase = true
19531 }
3af2954a 19532 }
ab78acc6 19533}
3af2954a 19534
8b095871
IC
19535Buffer.prototype.toJSON = function toJSON () {
19536 return {
19537 type: 'Buffer',
19538 data: Array.prototype.slice.call(this._arr || this, 0)
3af2954a 19539 }
ab78acc6
IC
19540}
19541
8b095871
IC
19542function base64Slice (buf, start, end) {
19543 if (start === 0 && end === buf.length) {
19544 return base64.fromByteArray(buf)
19545 } else {
19546 return base64.fromByteArray(buf.slice(start, end))
3af2954a 19547 }
8b095871 19548}
3af2954a 19549
8b095871
IC
19550function utf8Slice (buf, start, end) {
19551 end = Math.min(buf.length, end)
19552 var res = []
3af2954a 19553
8b095871
IC
19554 var i = start
19555 while (i < end) {
19556 var firstByte = buf[i]
19557 var codePoint = null
19558 var bytesPerSequence = (firstByte > 0xEF) ? 4
19559 : (firstByte > 0xDF) ? 3
19560 : (firstByte > 0xBF) ? 2
19561 : 1
3af2954a 19562
8b095871
IC
19563 if (i + bytesPerSequence <= end) {
19564 var secondByte, thirdByte, fourthByte, tempCodePoint
3af2954a 19565
8b095871
IC
19566 switch (bytesPerSequence) {
19567 case 1:
19568 if (firstByte < 0x80) {
19569 codePoint = firstByte
19570 }
19571 break
19572 case 2:
19573 secondByte = buf[i + 1]
19574 if ((secondByte & 0xC0) === 0x80) {
19575 tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
19576 if (tempCodePoint > 0x7F) {
19577 codePoint = tempCodePoint
19578 }
19579 }
19580 break
19581 case 3:
19582 secondByte = buf[i + 1]
19583 thirdByte = buf[i + 2]
19584 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
19585 tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
19586 if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
19587 codePoint = tempCodePoint
19588 }
19589 }
19590 break
19591 case 4:
19592 secondByte = buf[i + 1]
19593 thirdByte = buf[i + 2]
19594 fourthByte = buf[i + 3]
19595 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
19596 tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
19597 if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
19598 codePoint = tempCodePoint
19599 }
19600 }
19601 }
19602 }
3af2954a 19603
8b095871
IC
19604 if (codePoint === null) {
19605 // we did not generate a valid codePoint so insert a
19606 // replacement char (U+FFFD) and advance only 1 byte
19607 codePoint = 0xFFFD
19608 bytesPerSequence = 1
19609 } else if (codePoint > 0xFFFF) {
19610 // encode to utf16 (surrogate pair dance)
19611 codePoint -= 0x10000
19612 res.push(codePoint >>> 10 & 0x3FF | 0xD800)
19613 codePoint = 0xDC00 | codePoint & 0x3FF
19614 }
19615
19616 res.push(codePoint)
19617 i += bytesPerSequence
3af2954a
IC
19618 }
19619
8b095871 19620 return decodeCodePointsArray(res)
ab78acc6 19621}
3af2954a 19622
8b095871
IC
19623// Based on http://stackoverflow.com/a/22747272/680742, the browser with
19624// the lowest limit is Chrome, with 0x10000 args.
19625// We go 1 magnitude less, for safety
19626var MAX_ARGUMENTS_LENGTH = 0x1000
3af2954a 19627
8b095871
IC
19628function decodeCodePointsArray (codePoints) {
19629 var len = codePoints.length
19630 if (len <= MAX_ARGUMENTS_LENGTH) {
19631 return String.fromCharCode.apply(String, codePoints) // avoid extra slice()
3af2954a
IC
19632 }
19633
8b095871
IC
19634 // Decode in chunks to avoid "call stack size exceeded".
19635 var res = ''
19636 var i = 0
19637 while (i < len) {
19638 res += String.fromCharCode.apply(
19639 String,
19640 codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)
19641 )
3af2954a 19642 }
8b095871
IC
19643 return res
19644}
3af2954a 19645
8b095871
IC
19646function asciiSlice (buf, start, end) {
19647 var ret = ''
19648 end = Math.min(buf.length, end)
3af2954a 19649
8b095871
IC
19650 for (var i = start; i < end; ++i) {
19651 ret += String.fromCharCode(buf[i] & 0x7F)
3af2954a 19652 }
8b095871
IC
19653 return ret
19654}
3af2954a 19655
8b095871
IC
19656function latin1Slice (buf, start, end) {
19657 var ret = ''
19658 end = Math.min(buf.length, end)
3af2954a 19659
8b095871
IC
19660 for (var i = start; i < end; ++i) {
19661 ret += String.fromCharCode(buf[i])
3af2954a 19662 }
8b095871 19663 return ret
ab78acc6 19664}
3af2954a 19665
8b095871
IC
19666function hexSlice (buf, start, end) {
19667 var len = buf.length
3af2954a 19668
8b095871
IC
19669 if (!start || start < 0) start = 0
19670 if (!end || end < 0 || end > len) end = len
3af2954a 19671
8b095871
IC
19672 var out = ''
19673 for (var i = start; i < end; ++i) {
19674 out += toHex(buf[i])
3af2954a 19675 }
8b095871
IC
19676 return out
19677}
3af2954a 19678
8b095871
IC
19679function utf16leSlice (buf, start, end) {
19680 var bytes = buf.slice(start, end)
19681 var res = ''
19682 for (var i = 0; i < bytes.length; i += 2) {
19683 res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))
19684 }
19685 return res
19686}
3af2954a 19687
8b095871
IC
19688Buffer.prototype.slice = function slice (start, end) {
19689 var len = this.length
19690 start = ~~start
19691 end = end === undefined ? len : ~~end
3af2954a 19692
8b095871
IC
19693 if (start < 0) {
19694 start += len
19695 if (start < 0) start = 0
19696 } else if (start > len) {
19697 start = len
19698 }
3af2954a 19699
8b095871
IC
19700 if (end < 0) {
19701 end += len
19702 if (end < 0) end = 0
19703 } else if (end > len) {
19704 end = len
19705 }
3af2954a 19706
8b095871 19707 if (end < start) end = start
3af2954a 19708
8b095871
IC
19709 var newBuf = this.subarray(start, end)
19710 // Return an augmented `Uint8Array` instance
19711 newBuf.__proto__ = Buffer.prototype
19712 return newBuf
19713}
3af2954a 19714
8b095871
IC
19715/*
19716 * Need to make sure that buffer isn't trying to write out of bounds.
ab78acc6 19717 */
8b095871
IC
19718function checkOffset (offset, ext, length) {
19719 if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
19720 if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
ab78acc6 19721}
3af2954a 19722
8b095871
IC
19723Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
19724 offset = offset >>> 0
19725 byteLength = byteLength >>> 0
19726 if (!noAssert) checkOffset(offset, byteLength, this.length)
19727
19728 var val = this[offset]
19729 var mul = 1
19730 var i = 0
19731 while (++i < byteLength && (mul *= 0x100)) {
19732 val += this[offset + i] * mul
3af2954a
IC
19733 }
19734
8b095871
IC
19735 return val
19736}
3af2954a 19737
8b095871
IC
19738Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
19739 offset = offset >>> 0
19740 byteLength = byteLength >>> 0
19741 if (!noAssert) {
19742 checkOffset(offset, byteLength, this.length)
ab78acc6 19743 }
3af2954a 19744
8b095871
IC
19745 var val = this[offset + --byteLength]
19746 var mul = 1
19747 while (byteLength > 0 && (mul *= 0x100)) {
19748 val += this[offset + --byteLength] * mul
ab78acc6 19749 }
3af2954a 19750
8b095871 19751 return val
ab78acc6 19752}
3af2954a 19753
8b095871
IC
19754Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
19755 offset = offset >>> 0
19756 if (!noAssert) checkOffset(offset, 1, this.length)
19757 return this[offset]
ab78acc6 19758}
3af2954a 19759
8b095871
IC
19760Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
19761 offset = offset >>> 0
19762 if (!noAssert) checkOffset(offset, 2, this.length)
19763 return this[offset] | (this[offset + 1] << 8)
19764}
3af2954a 19765
8b095871
IC
19766Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
19767 offset = offset >>> 0
19768 if (!noAssert) checkOffset(offset, 2, this.length)
19769 return (this[offset] << 8) | this[offset + 1]
19770}
3af2954a 19771
8b095871
IC
19772Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
19773 offset = offset >>> 0
19774 if (!noAssert) checkOffset(offset, 4, this.length)
19775
19776 return ((this[offset]) |
19777 (this[offset + 1] << 8) |
19778 (this[offset + 2] << 16)) +
19779 (this[offset + 3] * 0x1000000)
ab78acc6 19780}
3af2954a 19781
8b095871
IC
19782Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
19783 offset = offset >>> 0
19784 if (!noAssert) checkOffset(offset, 4, this.length)
3af2954a 19785
8b095871
IC
19786 return (this[offset] * 0x1000000) +
19787 ((this[offset + 1] << 16) |
19788 (this[offset + 2] << 8) |
19789 this[offset + 3])
19790}
3af2954a 19791
8b095871
IC
19792Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
19793 offset = offset >>> 0
19794 byteLength = byteLength >>> 0
19795 if (!noAssert) checkOffset(offset, byteLength, this.length)
3af2954a 19796
8b095871
IC
19797 var val = this[offset]
19798 var mul = 1
19799 var i = 0
19800 while (++i < byteLength && (mul *= 0x100)) {
19801 val += this[offset + i] * mul
3af2954a 19802 }
8b095871 19803 mul *= 0x80
3af2954a 19804
8b095871 19805 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
3af2954a 19806
8b095871 19807 return val
ab78acc6 19808}
3af2954a 19809
8b095871
IC
19810Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
19811 offset = offset >>> 0
19812 byteLength = byteLength >>> 0
19813 if (!noAssert) checkOffset(offset, byteLength, this.length)
3af2954a 19814
8b095871
IC
19815 var i = byteLength
19816 var mul = 1
19817 var val = this[offset + --i]
19818 while (i > 0 && (mul *= 0x100)) {
19819 val += this[offset + --i] * mul
3af2954a 19820 }
8b095871 19821 mul *= 0x80
3af2954a 19822
8b095871
IC
19823 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
19824
19825 return val
ab78acc6 19826}
3af2954a 19827
8b095871
IC
19828Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
19829 offset = offset >>> 0
19830 if (!noAssert) checkOffset(offset, 1, this.length)
19831 if (!(this[offset] & 0x80)) return (this[offset])
19832 return ((0xff - this[offset] + 1) * -1)
ab78acc6 19833}
3af2954a 19834
8b095871
IC
19835Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
19836 offset = offset >>> 0
19837 if (!noAssert) checkOffset(offset, 2, this.length)
19838 var val = this[offset] | (this[offset + 1] << 8)
19839 return (val & 0x8000) ? val | 0xFFFF0000 : val
ab78acc6 19840}
3af2954a 19841
8b095871
IC
19842Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
19843 offset = offset >>> 0
19844 if (!noAssert) checkOffset(offset, 2, this.length)
19845 var val = this[offset + 1] | (this[offset] << 8)
19846 return (val & 0x8000) ? val | 0xFFFF0000 : val
19847}
ab78acc6 19848
8b095871
IC
19849Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
19850 offset = offset >>> 0
19851 if (!noAssert) checkOffset(offset, 4, this.length)
3af2954a 19852
8b095871
IC
19853 return (this[offset]) |
19854 (this[offset + 1] << 8) |
19855 (this[offset + 2] << 16) |
19856 (this[offset + 3] << 24)
ab78acc6 19857}
3af2954a 19858
8b095871
IC
19859Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
19860 offset = offset >>> 0
19861 if (!noAssert) checkOffset(offset, 4, this.length)
3af2954a 19862
8b095871
IC
19863 return (this[offset] << 24) |
19864 (this[offset + 1] << 16) |
19865 (this[offset + 2] << 8) |
19866 (this[offset + 3])
19867}
3af2954a 19868
8b095871
IC
19869Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
19870 offset = offset >>> 0
19871 if (!noAssert) checkOffset(offset, 4, this.length)
19872 return ieee754.read(this, offset, true, 23, 4)
ab78acc6 19873}
3af2954a 19874
8b095871
IC
19875Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
19876 offset = offset >>> 0
19877 if (!noAssert) checkOffset(offset, 4, this.length)
19878 return ieee754.read(this, offset, false, 23, 4)
ab78acc6 19879}
3af2954a 19880
8b095871
IC
19881Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
19882 offset = offset >>> 0
19883 if (!noAssert) checkOffset(offset, 8, this.length)
19884 return ieee754.read(this, offset, true, 52, 8)
19885}
3af2954a 19886
8b095871
IC
19887Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
19888 offset = offset >>> 0
19889 if (!noAssert) checkOffset(offset, 8, this.length)
19890 return ieee754.read(this, offset, false, 52, 8)
ab78acc6 19891}
3af2954a 19892
8b095871
IC
19893function checkInt (buf, value, offset, ext, max, min) {
19894 if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance')
19895 if (value > max || value < min) throw new RangeError('"value" argument is out of bounds')
19896 if (offset + ext > buf.length) throw new RangeError('Index out of range')
ab78acc6 19897}
3af2954a 19898
8b095871
IC
19899Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
19900 value = +value
19901 offset = offset >>> 0
19902 byteLength = byteLength >>> 0
19903 if (!noAssert) {
19904 var maxBytes = Math.pow(2, 8 * byteLength) - 1
19905 checkInt(this, value, offset, byteLength, maxBytes, 0)
3af2954a
IC
19906 }
19907
8b095871 19908 var mul = 1
ab78acc6 19909 var i = 0
8b095871
IC
19910 this[offset] = value & 0xFF
19911 while (++i < byteLength && (mul *= 0x100)) {
19912 this[offset + i] = (value / mul) & 0xFF
19913 }
3af2954a 19914
8b095871
IC
19915 return offset + byteLength
19916}
19917
19918Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
19919 value = +value
19920 offset = offset >>> 0
19921 byteLength = byteLength >>> 0
19922 if (!noAssert) {
19923 var maxBytes = Math.pow(2, 8 * byteLength) - 1
19924 checkInt(this, value, offset, byteLength, maxBytes, 0)
ab78acc6 19925 }
3af2954a 19926
8b095871
IC
19927 var i = byteLength - 1
19928 var mul = 1
19929 this[offset + i] = value & 0xFF
19930 while (--i >= 0 && (mul *= 0x100)) {
19931 this[offset + i] = (value / mul) & 0xFF
ab78acc6 19932 }
3af2954a 19933
8b095871
IC
19934 return offset + byteLength
19935}
19936
19937Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
19938 value = +value
19939 offset = offset >>> 0
19940 if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
19941 this[offset] = (value & 0xff)
19942 return offset + 1
19943}
19944
19945Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
19946 value = +value
19947 offset = offset >>> 0
19948 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
19949 this[offset] = (value & 0xff)
19950 this[offset + 1] = (value >>> 8)
19951 return offset + 2
19952}
19953
19954Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
19955 value = +value
19956 offset = offset >>> 0
19957 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
19958 this[offset] = (value >>> 8)
19959 this[offset + 1] = (value & 0xff)
19960 return offset + 2
ab78acc6 19961}
3af2954a 19962
8b095871
IC
19963Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
19964 value = +value
19965 offset = offset >>> 0
19966 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
19967 this[offset + 3] = (value >>> 24)
19968 this[offset + 2] = (value >>> 16)
19969 this[offset + 1] = (value >>> 8)
19970 this[offset] = (value & 0xff)
19971 return offset + 4
ab78acc6 19972}
3af2954a 19973
8b095871
IC
19974Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
19975 value = +value
19976 offset = offset >>> 0
19977 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
19978 this[offset] = (value >>> 24)
19979 this[offset + 1] = (value >>> 16)
19980 this[offset + 2] = (value >>> 8)
19981 this[offset + 3] = (value & 0xff)
19982 return offset + 4
19983}
3af2954a 19984
8b095871
IC
19985Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
19986 value = +value
19987 offset = offset >>> 0
19988 if (!noAssert) {
19989 var limit = Math.pow(2, (8 * byteLength) - 1)
19990
19991 checkInt(this, value, offset, byteLength, limit - 1, -limit)
3af2954a
IC
19992 }
19993
8b095871
IC
19994 var i = 0
19995 var mul = 1
19996 var sub = 0
19997 this[offset] = value & 0xFF
19998 while (++i < byteLength && (mul *= 0x100)) {
19999 if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {
20000 sub = 1
ab78acc6 20001 }
8b095871 20002 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
3af2954a
IC
20003 }
20004
8b095871 20005 return offset + byteLength
ab78acc6 20006}
3af2954a 20007
8b095871
IC
20008Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
20009 value = +value
20010 offset = offset >>> 0
20011 if (!noAssert) {
20012 var limit = Math.pow(2, (8 * byteLength) - 1)
ab78acc6 20013
8b095871
IC
20014 checkInt(this, value, offset, byteLength, limit - 1, -limit)
20015 }
ab78acc6 20016
8b095871
IC
20017 var i = byteLength - 1
20018 var mul = 1
20019 var sub = 0
20020 this[offset + i] = value & 0xFF
20021 while (--i >= 0 && (mul *= 0x100)) {
20022 if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {
20023 sub = 1
3af2954a 20024 }
8b095871 20025 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
3af2954a 20026 }
3af2954a 20027
8b095871
IC
20028 return offset + byteLength
20029}
3af2954a 20030
8b095871
IC
20031Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
20032 value = +value
20033 offset = offset >>> 0
20034 if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
20035 if (value < 0) value = 0xff + value + 1
20036 this[offset] = (value & 0xff)
20037 return offset + 1
20038}
3af2954a 20039
8b095871
IC
20040Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
20041 value = +value
20042 offset = offset >>> 0
20043 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
20044 this[offset] = (value & 0xff)
20045 this[offset + 1] = (value >>> 8)
20046 return offset + 2
20047}
3af2954a 20048
8b095871
IC
20049Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
20050 value = +value
20051 offset = offset >>> 0
20052 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
20053 this[offset] = (value >>> 8)
20054 this[offset + 1] = (value & 0xff)
20055 return offset + 2
20056}
3af2954a 20057
8b095871
IC
20058Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
20059 value = +value
20060 offset = offset >>> 0
20061 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
20062 this[offset] = (value & 0xff)
20063 this[offset + 1] = (value >>> 8)
20064 this[offset + 2] = (value >>> 16)
20065 this[offset + 3] = (value >>> 24)
20066 return offset + 4
20067}
3af2954a 20068
8b095871
IC
20069Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
20070 value = +value
20071 offset = offset >>> 0
20072 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
20073 if (value < 0) value = 0xffffffff + value + 1
20074 this[offset] = (value >>> 24)
20075 this[offset + 1] = (value >>> 16)
20076 this[offset + 2] = (value >>> 8)
20077 this[offset + 3] = (value & 0xff)
20078 return offset + 4
20079}
3af2954a 20080
8b095871
IC
20081function checkIEEE754 (buf, value, offset, ext, max, min) {
20082 if (offset + ext > buf.length) throw new RangeError('Index out of range')
20083 if (offset < 0) throw new RangeError('Index out of range')
20084}
3af2954a 20085
8b095871
IC
20086function writeFloat (buf, value, offset, littleEndian, noAssert) {
20087 value = +value
20088 offset = offset >>> 0
20089 if (!noAssert) {
20090 checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
3af2954a 20091 }
8b095871
IC
20092 ieee754.write(buf, value, offset, littleEndian, 23, 4)
20093 return offset + 4
ab78acc6 20094}
3af2954a 20095
8b095871
IC
20096Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
20097 return writeFloat(this, value, offset, true, noAssert)
ab78acc6 20098}
3af2954a 20099
8b095871
IC
20100Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
20101 return writeFloat(this, value, offset, false, noAssert)
ab78acc6 20102}
3af2954a 20103
8b095871
IC
20104function writeDouble (buf, value, offset, littleEndian, noAssert) {
20105 value = +value
20106 offset = offset >>> 0
20107 if (!noAssert) {
20108 checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
3af2954a 20109 }
8b095871
IC
20110 ieee754.write(buf, value, offset, littleEndian, 52, 8)
20111 return offset + 8
ab78acc6 20112}
3af2954a 20113
8b095871
IC
20114Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
20115 return writeDouble(this, value, offset, true, noAssert)
ab78acc6 20116}
3af2954a 20117
8b095871
IC
20118Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
20119 return writeDouble(this, value, offset, false, noAssert)
20120}
3af2954a 20121
8b095871
IC
20122// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
20123Buffer.prototype.copy = function copy (target, targetStart, start, end) {
20124 if (!start) start = 0
20125 if (!end && end !== 0) end = this.length
20126 if (targetStart >= target.length) targetStart = target.length
20127 if (!targetStart) targetStart = 0
20128 if (end > 0 && end < start) end = start
3af2954a 20129
8b095871
IC
20130 // Copy 0 bytes; we're done
20131 if (end === start) return 0
20132 if (target.length === 0 || this.length === 0) return 0
3af2954a 20133
8b095871
IC
20134 // Fatal error conditions
20135 if (targetStart < 0) {
20136 throw new RangeError('targetStart out of bounds')
3af2954a 20137 }
8b095871
IC
20138 if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
20139 if (end < 0) throw new RangeError('sourceEnd out of bounds')
20140
20141 // Are we oob?
20142 if (end > this.length) end = this.length
20143 if (target.length - targetStart < end - start) {
20144 end = target.length - targetStart + start
3af2954a 20145 }
8b095871
IC
20146
20147 var len = end - start
20148 var i
20149
20150 if (this === target && start < targetStart && targetStart < end) {
20151 // descending copy from end
20152 for (i = len - 1; i >= 0; --i) {
20153 target[i + targetStart] = this[i + start]
3af2954a 20154 }
8b095871
IC
20155 } else if (len < 1000) {
20156 // ascending copy from start
20157 for (i = 0; i < len; ++i) {
20158 target[i + targetStart] = this[i + start]
20159 }
20160 } else {
20161 Uint8Array.prototype.set.call(
20162 target,
20163 this.subarray(start, start + len),
20164 targetStart
20165 )
3af2954a
IC
20166 }
20167
8b095871
IC
20168 return len
20169}
20170
20171// Usage:
20172// buffer.fill(number[, offset[, end]])
20173// buffer.fill(buffer[, offset[, end]])
20174// buffer.fill(string[, offset[, end]][, encoding])
20175Buffer.prototype.fill = function fill (val, start, end, encoding) {
20176 // Handle string cases:
20177 if (typeof val === 'string') {
20178 if (typeof start === 'string') {
20179 encoding = start
20180 start = 0
20181 end = this.length
20182 } else if (typeof end === 'string') {
20183 encoding = end
20184 end = this.length
20185 }
20186 if (val.length === 1) {
20187 var code = val.charCodeAt(0)
20188 if (code < 256) {
20189 val = code
3af2954a 20190 }
3af2954a 20191 }
8b095871
IC
20192 if (encoding !== undefined && typeof encoding !== 'string') {
20193 throw new TypeError('encoding must be a string')
20194 }
20195 if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {
20196 throw new TypeError('Unknown encoding: ' + encoding)
20197 }
20198 } else if (typeof val === 'number') {
20199 val = val & 255
ab78acc6 20200 }
3af2954a 20201
8b095871
IC
20202 // Invalid ranges are not set to a default, so can range check early.
20203 if (start < 0 || this.length < start || this.length < end) {
20204 throw new RangeError('Out of range index')
20205 }
3af2954a 20206
8b095871
IC
20207 if (end <= start) {
20208 return this
20209 }
3af2954a 20210
8b095871
IC
20211 start = start >>> 0
20212 end = end === undefined ? this.length : end >>> 0
3af2954a 20213
8b095871
IC
20214 if (!val) val = 0
20215
20216 var i
20217 if (typeof val === 'number') {
20218 for (i = start; i < end; ++i) {
20219 this[i] = val
20220 }
ab78acc6 20221 } else {
8b095871
IC
20222 var bytes = Buffer.isBuffer(val)
20223 ? val
20224 : new Buffer(val, encoding)
20225 var len = bytes.length
20226 for (i = 0; i < end - start; ++i) {
20227 this[i + start] = bytes[i % len]
ab78acc6
IC
20228 }
20229 }
3af2954a 20230
8b095871
IC
20231 return this
20232}
3af2954a 20233
8b095871
IC
20234// HELPER FUNCTIONS
20235// ================
20236
20237var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g
20238
20239function base64clean (str) {
20240 // Node strips out invalid characters like \n and \t from the string, base64-js does not
20241 str = stringtrim(str).replace(INVALID_BASE64_RE, '')
20242 // Node converts strings with length < 2 to ''
20243 if (str.length < 2) return ''
20244 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
20245 while (str.length % 4 !== 0) {
20246 str = str + '='
3af2954a 20247 }
8b095871 20248 return str
ab78acc6
IC
20249}
20250
8b095871
IC
20251function stringtrim (str) {
20252 if (str.trim) return str.trim()
20253 return str.replace(/^\s+|\s+$/g, '')
ab78acc6 20254}
3af2954a 20255
8b095871
IC
20256function toHex (n) {
20257 if (n < 16) return '0' + n.toString(16)
20258 return n.toString(16)
ab78acc6 20259}
3af2954a 20260
8b095871
IC
20261function utf8ToBytes (string, units) {
20262 units = units || Infinity
20263 var codePoint
20264 var length = string.length
20265 var leadSurrogate = null
20266 var bytes = []
3af2954a 20267
8b095871
IC
20268 for (var i = 0; i < length; ++i) {
20269 codePoint = string.charCodeAt(i)
3af2954a 20270
8b095871
IC
20271 // is surrogate component
20272 if (codePoint > 0xD7FF && codePoint < 0xE000) {
20273 // last char was a lead
20274 if (!leadSurrogate) {
20275 // no lead yet
20276 if (codePoint > 0xDBFF) {
20277 // unexpected trail
20278 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
20279 continue
20280 } else if (i + 1 === length) {
20281 // unpaired lead
20282 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
20283 continue
20284 }
3af2954a 20285
8b095871
IC
20286 // valid lead
20287 leadSurrogate = codePoint
20288
20289 continue
20290 }
20291
20292 // 2 leads in a row
20293 if (codePoint < 0xDC00) {
20294 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
20295 leadSurrogate = codePoint
20296 continue
20297 }
20298
20299 // valid surrogate pair
20300 codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000
20301 } else if (leadSurrogate) {
20302 // valid bmp char, but last char was a lead
20303 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
20304 }
20305
20306 leadSurrogate = null
20307
20308 // encode utf8
20309 if (codePoint < 0x80) {
20310 if ((units -= 1) < 0) break
20311 bytes.push(codePoint)
20312 } else if (codePoint < 0x800) {
20313 if ((units -= 2) < 0) break
20314 bytes.push(
20315 codePoint >> 0x6 | 0xC0,
20316 codePoint & 0x3F | 0x80
20317 )
20318 } else if (codePoint < 0x10000) {
20319 if ((units -= 3) < 0) break
20320 bytes.push(
20321 codePoint >> 0xC | 0xE0,
20322 codePoint >> 0x6 & 0x3F | 0x80,
20323 codePoint & 0x3F | 0x80
20324 )
20325 } else if (codePoint < 0x110000) {
20326 if ((units -= 4) < 0) break
20327 bytes.push(
20328 codePoint >> 0x12 | 0xF0,
20329 codePoint >> 0xC & 0x3F | 0x80,
20330 codePoint >> 0x6 & 0x3F | 0x80,
20331 codePoint & 0x3F | 0x80
20332 )
ab78acc6 20333 } else {
8b095871 20334 throw new Error('Invalid code point')
ab78acc6 20335 }
3af2954a
IC
20336 }
20337
8b095871
IC
20338 return bytes
20339}
3af2954a 20340
8b095871
IC
20341function asciiToBytes (str) {
20342 var byteArray = []
20343 for (var i = 0; i < str.length; ++i) {
20344 // Node's code seems to be doing this and not & 0x7F..
20345 byteArray.push(str.charCodeAt(i) & 0xFF)
ab78acc6 20346 }
8b095871
IC
20347 return byteArray
20348}
3af2954a 20349
8b095871
IC
20350function utf16leToBytes (str, units) {
20351 var c, hi, lo
20352 var byteArray = []
20353 for (var i = 0; i < str.length; ++i) {
20354 if ((units -= 2) < 0) break
3af2954a 20355
8b095871
IC
20356 c = str.charCodeAt(i)
20357 hi = c >> 8
20358 lo = c % 256
20359 byteArray.push(lo)
20360 byteArray.push(hi)
20361 }
ebd8d4e8 20362
8b095871
IC
20363 return byteArray
20364}
20365
20366function base64ToBytes (str) {
20367 return base64.toByteArray(base64clean(str))
20368}
20369
20370function blitBuffer (src, dst, offset, length) {
20371 for (var i = 0; i < length; ++i) {
20372 if ((i + offset >= dst.length) || (i >= src.length)) break
20373 dst[i + offset] = src[i]
20374 }
20375 return i
20376}
20377
20378function isnan (val) {
20379 return val !== val // eslint-disable-line no-self-compare
20380}
20381
20382},{"base64-js":2,"ieee754":8}],6:[function(require,module,exports){
20383(function (Buffer){
20384// Copyright Joyent, Inc. and other Node contributors.
20385//
20386// Permission is hereby granted, free of charge, to any person obtaining a
20387// copy of this software and associated documentation files (the
20388// "Software"), to deal in the Software without restriction, including
20389// without limitation the rights to use, copy, modify, merge, publish,
20390// distribute, sublicense, and/or sell copies of the Software, and to permit
20391// persons to whom the Software is furnished to do so, subject to the
20392// following conditions:
20393//
20394// The above copyright notice and this permission notice shall be included
20395// in all copies or substantial portions of the Software.
20396//
20397// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
20398// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
20399// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
20400// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
20401// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
20402// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
20403// USE OR OTHER DEALINGS IN THE SOFTWARE.
20404
20405// NOTE: These type checking functions intentionally don't use `instanceof`
20406// because it is fragile and can be easily faked with `Object.create()`.
ebd8d4e8 20407
8b095871
IC
20408function isArray(arg) {
20409 if (Array.isArray) {
20410 return Array.isArray(arg);
20411 }
20412 return objectToString(arg) === '[object Array]';
20413}
20414exports.isArray = isArray;
ebd8d4e8 20415
8b095871
IC
20416function isBoolean(arg) {
20417 return typeof arg === 'boolean';
20418}
20419exports.isBoolean = isBoolean;
ebd8d4e8 20420
8b095871
IC
20421function isNull(arg) {
20422 return arg === null;
20423}
20424exports.isNull = isNull;
ebd8d4e8 20425
8b095871
IC
20426function isNullOrUndefined(arg) {
20427 return arg == null;
20428}
20429exports.isNullOrUndefined = isNullOrUndefined;
ebd8d4e8 20430
8b095871
IC
20431function isNumber(arg) {
20432 return typeof arg === 'number';
ab78acc6 20433}
8b095871 20434exports.isNumber = isNumber;
212b1b46 20435
8b095871
IC
20436function isString(arg) {
20437 return typeof arg === 'string';
ab78acc6 20438}
8b095871 20439exports.isString = isString;
212b1b46 20440
8b095871
IC
20441function isSymbol(arg) {
20442 return typeof arg === 'symbol';
ab78acc6 20443}
8b095871 20444exports.isSymbol = isSymbol;
ab78acc6 20445
8b095871
IC
20446function isUndefined(arg) {
20447 return arg === void 0;
20448}
20449exports.isUndefined = isUndefined;
ab78acc6 20450
8b095871
IC
20451function isRegExp(re) {
20452 return objectToString(re) === '[object RegExp]';
20453}
20454exports.isRegExp = isRegExp;
ab78acc6 20455
8b095871
IC
20456function isObject(arg) {
20457 return typeof arg === 'object' && arg !== null;
20458}
20459exports.isObject = isObject;
212b1b46 20460
8b095871
IC
20461function isDate(d) {
20462 return objectToString(d) === '[object Date]';
20463}
20464exports.isDate = isDate;
212b1b46 20465
8b095871
IC
20466function isError(e) {
20467 return (objectToString(e) === '[object Error]' || e instanceof Error);
20468}
20469exports.isError = isError;
212b1b46 20470
8b095871
IC
20471function isFunction(arg) {
20472 return typeof arg === 'function';
20473}
20474exports.isFunction = isFunction;
212b1b46 20475
8b095871
IC
20476function isPrimitive(arg) {
20477 return arg === null ||
20478 typeof arg === 'boolean' ||
20479 typeof arg === 'number' ||
20480 typeof arg === 'string' ||
20481 typeof arg === 'symbol' || // ES6 symbol
20482 typeof arg === 'undefined';
ab78acc6 20483}
8b095871 20484exports.isPrimitive = isPrimitive;
212b1b46 20485
8b095871 20486exports.isBuffer = Buffer.isBuffer;
ab78acc6 20487
8b095871
IC
20488function objectToString(o) {
20489 return Object.prototype.toString.call(o);
ab78acc6 20490}
212b1b46 20491
8b095871
IC
20492}).call(this,{"isBuffer":require("../../is-buffer/index.js")})
20493},{"../../is-buffer/index.js":10}],7:[function(require,module,exports){
20494// Copyright Joyent, Inc. and other Node contributors.
20495//
20496// Permission is hereby granted, free of charge, to any person obtaining a
20497// copy of this software and associated documentation files (the
20498// "Software"), to deal in the Software without restriction, including
20499// without limitation the rights to use, copy, modify, merge, publish,
20500// distribute, sublicense, and/or sell copies of the Software, and to permit
20501// persons to whom the Software is furnished to do so, subject to the
20502// following conditions:
20503//
20504// The above copyright notice and this permission notice shall be included
20505// in all copies or substantial portions of the Software.
20506//
20507// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
20508// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
20509// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
20510// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
20511// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
20512// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
20513// USE OR OTHER DEALINGS IN THE SOFTWARE.
212b1b46 20514
8b095871
IC
20515function EventEmitter() {
20516 this._events = this._events || {};
20517 this._maxListeners = this._maxListeners || undefined;
ab78acc6 20518}
8b095871 20519module.exports = EventEmitter;
212b1b46 20520
8b095871
IC
20521// Backwards-compat with node 0.10.x
20522EventEmitter.EventEmitter = EventEmitter;
212b1b46 20523
8b095871
IC
20524EventEmitter.prototype._events = undefined;
20525EventEmitter.prototype._maxListeners = undefined;
212b1b46 20526
8b095871
IC
20527// By default EventEmitters will print a warning if more than 10 listeners are
20528// added to it. This is a useful default which helps finding memory leaks.
20529EventEmitter.defaultMaxListeners = 10;
212b1b46 20530
8b095871
IC
20531// Obviously not all Emitters should be limited to 10. This function allows
20532// that to be increased. Set to zero for unlimited.
20533EventEmitter.prototype.setMaxListeners = function(n) {
20534 if (!isNumber(n) || n < 0 || isNaN(n))
20535 throw TypeError('n must be a positive number');
20536 this._maxListeners = n;
20537 return this;
20538};
212b1b46 20539
8b095871
IC
20540EventEmitter.prototype.emit = function(type) {
20541 var er, handler, len, args, i, listeners;
212b1b46 20542
8b095871
IC
20543 if (!this._events)
20544 this._events = {};
212b1b46 20545
8b095871
IC
20546 // If there is no 'error' event listener then throw.
20547 if (type === 'error') {
20548 if (!this._events.error ||
20549 (isObject(this._events.error) && !this._events.error.length)) {
20550 er = arguments[1];
20551 if (er instanceof Error) {
20552 throw er; // Unhandled 'error' event
20553 } else {
20554 // At least give some kind of context to the user
20555 var err = new Error('Uncaught, unspecified "error" event. (' + er + ')');
20556 err.context = er;
20557 throw err;
20558 }
20559 }
ab78acc6 20560 }
212b1b46 20561
8b095871 20562 handler = this._events[type];
212b1b46 20563
8b095871
IC
20564 if (isUndefined(handler))
20565 return false;
20566
20567 if (isFunction(handler)) {
20568 switch (arguments.length) {
20569 // fast cases
20570 case 1:
20571 handler.call(this);
20572 break;
20573 case 2:
20574 handler.call(this, arguments[1]);
20575 break;
20576 case 3:
20577 handler.call(this, arguments[1], arguments[2]);
20578 break;
20579 // slower
20580 default:
20581 args = Array.prototype.slice.call(arguments, 1);
20582 handler.apply(this, args);
3af2954a 20583 }
8b095871
IC
20584 } else if (isObject(handler)) {
20585 args = Array.prototype.slice.call(arguments, 1);
20586 listeners = handler.slice();
20587 len = listeners.length;
20588 for (i = 0; i < len; i++)
20589 listeners[i].apply(this, args);
3af2954a 20590 }
212b1b46 20591
8b095871
IC
20592 return true;
20593};
ebd8d4e8 20594
8b095871
IC
20595EventEmitter.prototype.addListener = function(type, listener) {
20596 var m;
ebd8d4e8 20597
8b095871
IC
20598 if (!isFunction(listener))
20599 throw TypeError('listener must be a function');
ebd8d4e8 20600
8b095871
IC
20601 if (!this._events)
20602 this._events = {};
3af2954a 20603
8b095871
IC
20604 // To avoid recursion in the case that type === "newListener"! Before
20605 // adding it to the listeners, first emit "newListener".
20606 if (this._events.newListener)
20607 this.emit('newListener', type,
20608 isFunction(listener.listener) ?
20609 listener.listener : listener);
3af2954a 20610
8b095871
IC
20611 if (!this._events[type])
20612 // Optimize the case of one listener. Don't need the extra array object.
20613 this._events[type] = listener;
20614 else if (isObject(this._events[type]))
20615 // If we've already got an array, just append.
20616 this._events[type].push(listener);
20617 else
20618 // Adding the second element, need to change to array.
20619 this._events[type] = [this._events[type], listener];
3af2954a 20620
8b095871
IC
20621 // Check for listener leak
20622 if (isObject(this._events[type]) && !this._events[type].warned) {
20623 if (!isUndefined(this._maxListeners)) {
20624 m = this._maxListeners;
20625 } else {
20626 m = EventEmitter.defaultMaxListeners;
20627 }
3af2954a 20628
8b095871
IC
20629 if (m && m > 0 && this._events[type].length > m) {
20630 this._events[type].warned = true;
20631 console.error('(node) warning: possible EventEmitter memory ' +
20632 'leak detected. %d listeners added. ' +
20633 'Use emitter.setMaxListeners() to increase limit.',
20634 this._events[type].length);
20635 if (typeof console.trace === 'function') {
20636 // not supported in IE 10
20637 console.trace();
20638 }
20639 }
3af2954a
IC
20640 }
20641
8b095871
IC
20642 return this;
20643};
3af2954a 20644
8b095871 20645EventEmitter.prototype.on = EventEmitter.prototype.addListener;
3af2954a 20646
8b095871
IC
20647EventEmitter.prototype.once = function(type, listener) {
20648 if (!isFunction(listener))
20649 throw TypeError('listener must be a function');
3af2954a 20650
8b095871 20651 var fired = false;
ebd8d4e8 20652
8b095871
IC
20653 function g() {
20654 this.removeListener(type, g);
3af2954a 20655
8b095871
IC
20656 if (!fired) {
20657 fired = true;
20658 listener.apply(this, arguments);
20659 }
20660 }
3af2954a 20661
8b095871
IC
20662 g.listener = listener;
20663 this.on(type, g);
ebd8d4e8 20664
8b095871
IC
20665 return this;
20666};
ebd8d4e8 20667
8b095871
IC
20668// emits a 'removeListener' event iff the listener was removed
20669EventEmitter.prototype.removeListener = function(type, listener) {
20670 var list, position, length, i;
ebd8d4e8 20671
8b095871
IC
20672 if (!isFunction(listener))
20673 throw TypeError('listener must be a function');
ebd8d4e8 20674
8b095871
IC
20675 if (!this._events || !this._events[type])
20676 return this;
ab78acc6 20677
8b095871
IC
20678 list = this._events[type];
20679 length = list.length;
20680 position = -1;
ebd8d4e8 20681
8b095871
IC
20682 if (list === listener ||
20683 (isFunction(list.listener) && list.listener === listener)) {
20684 delete this._events[type];
20685 if (this._events.removeListener)
20686 this.emit('removeListener', type, listener);
ebd8d4e8 20687
8b095871
IC
20688 } else if (isObject(list)) {
20689 for (i = length; i-- > 0;) {
20690 if (list[i] === listener ||
20691 (list[i].listener && list[i].listener === listener)) {
20692 position = i;
20693 break;
20694 }
20695 }
20696
20697 if (position < 0)
20698 return this;
20699
20700 if (list.length === 1) {
20701 list.length = 0;
20702 delete this._events[type];
20703 } else {
20704 list.splice(position, 1);
20705 }
20706
20707 if (this._events.removeListener)
20708 this.emit('removeListener', type, listener);
ab78acc6 20709 }
ebd8d4e8 20710
8b095871
IC
20711 return this;
20712};
ebd8d4e8 20713
8b095871
IC
20714EventEmitter.prototype.removeAllListeners = function(type) {
20715 var key, listeners;
ebd8d4e8 20716
8b095871
IC
20717 if (!this._events)
20718 return this;
ab78acc6 20719
8b095871
IC
20720 // not listening for removeListener, no need to emit
20721 if (!this._events.removeListener) {
20722 if (arguments.length === 0)
20723 this._events = {};
20724 else if (this._events[type])
20725 delete this._events[type];
20726 return this;
20727 }
ab78acc6 20728
8b095871
IC
20729 // emit removeListener for all listeners on all events
20730 if (arguments.length === 0) {
20731 for (key in this._events) {
20732 if (key === 'removeListener') continue;
20733 this.removeAllListeners(key);
20734 }
20735 this.removeAllListeners('removeListener');
20736 this._events = {};
20737 return this;
20738 }
ebd8d4e8 20739
8b095871 20740 listeners = this._events[type];
ebd8d4e8 20741
8b095871
IC
20742 if (isFunction(listeners)) {
20743 this.removeListener(type, listeners);
20744 } else if (listeners) {
20745 // LIFO order
20746 while (listeners.length)
20747 this.removeListener(type, listeners[listeners.length - 1]);
20748 }
20749 delete this._events[type];
ebd8d4e8 20750
8b095871
IC
20751 return this;
20752};
ebd8d4e8 20753
8b095871
IC
20754EventEmitter.prototype.listeners = function(type) {
20755 var ret;
20756 if (!this._events || !this._events[type])
20757 ret = [];
20758 else if (isFunction(this._events[type]))
20759 ret = [this._events[type]];
20760 else
20761 ret = this._events[type].slice();
20762 return ret;
20763};
ebd8d4e8 20764
8b095871
IC
20765EventEmitter.prototype.listenerCount = function(type) {
20766 if (this._events) {
20767 var evlistener = this._events[type];
ebd8d4e8 20768
8b095871
IC
20769 if (isFunction(evlistener))
20770 return 1;
20771 else if (evlistener)
20772 return evlistener.length;
20773 }
20774 return 0;
20775};
20776
20777EventEmitter.listenerCount = function(emitter, type) {
20778 return emitter.listenerCount(type);
20779};
20780
20781function isFunction(arg) {
20782 return typeof arg === 'function';
ebd8d4e8
IC
20783}
20784
8b095871
IC
20785function isNumber(arg) {
20786 return typeof arg === 'number';
ebd8d4e8
IC
20787}
20788
8b095871
IC
20789function isObject(arg) {
20790 return typeof arg === 'object' && arg !== null;
ebd8d4e8
IC
20791}
20792
8b095871
IC
20793function isUndefined(arg) {
20794 return arg === void 0;
ebd8d4e8
IC
20795}
20796
8b095871
IC
20797},{}],8:[function(require,module,exports){
20798exports.read = function (buffer, offset, isLE, mLen, nBytes) {
20799 var e, m
20800 var eLen = nBytes * 8 - mLen - 1
20801 var eMax = (1 << eLen) - 1
20802 var eBias = eMax >> 1
20803 var nBits = -7
20804 var i = isLE ? (nBytes - 1) : 0
20805 var d = isLE ? -1 : 1
20806 var s = buffer[offset + i]
ebd8d4e8 20807
8b095871 20808 i += d
ebd8d4e8 20809
8b095871
IC
20810 e = s & ((1 << (-nBits)) - 1)
20811 s >>= (-nBits)
20812 nBits += eLen
20813 for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
ebd8d4e8 20814
8b095871
IC
20815 m = e & ((1 << (-nBits)) - 1)
20816 e >>= (-nBits)
20817 nBits += mLen
20818 for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
ebd8d4e8 20819
8b095871
IC
20820 if (e === 0) {
20821 e = 1 - eBias
20822 } else if (e === eMax) {
20823 return m ? NaN : ((s ? -1 : 1) * Infinity)
20824 } else {
20825 m = m + Math.pow(2, mLen)
20826 e = e - eBias
ab78acc6 20827 }
8b095871 20828 return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
ebd8d4e8
IC
20829}
20830
8b095871
IC
20831exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
20832 var e, m, c
20833 var eLen = nBytes * 8 - mLen - 1
20834 var eMax = (1 << eLen) - 1
20835 var eBias = eMax >> 1
20836 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
20837 var i = isLE ? 0 : (nBytes - 1)
20838 var d = isLE ? 1 : -1
20839 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
ebd8d4e8 20840
8b095871 20841 value = Math.abs(value)
ebd8d4e8 20842
8b095871
IC
20843 if (isNaN(value) || value === Infinity) {
20844 m = isNaN(value) ? 1 : 0
20845 e = eMax
ab78acc6 20846 } else {
8b095871
IC
20847 e = Math.floor(Math.log(value) / Math.LN2)
20848 if (value * (c = Math.pow(2, -e)) < 1) {
20849 e--
20850 c *= 2
20851 }
20852 if (e + eBias >= 1) {
20853 value += rt / c
20854 } else {
20855 value += rt * Math.pow(2, 1 - eBias)
20856 }
20857 if (value * c >= 2) {
20858 e++
20859 c /= 2
20860 }
ebd8d4e8 20861
8b095871
IC
20862 if (e + eBias >= eMax) {
20863 m = 0
20864 e = eMax
20865 } else if (e + eBias >= 1) {
20866 m = (value * c - 1) * Math.pow(2, mLen)
20867 e = e + eBias
20868 } else {
20869 m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
20870 e = 0
20871 }
ebd8d4e8 20872 }
ebd8d4e8 20873
8b095871 20874 for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
ebd8d4e8 20875
8b095871
IC
20876 e = (e << mLen) | m
20877 eLen += mLen
20878 for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
ebd8d4e8 20879
8b095871 20880 buffer[offset + i - d] |= s * 128
ab78acc6
IC
20881}
20882
8b095871
IC
20883},{}],9:[function(require,module,exports){
20884if (typeof Object.create === 'function') {
20885 // implementation from standard node.js 'util' module
20886 module.exports = function inherits(ctor, superCtor) {
20887 ctor.super_ = superCtor
20888 ctor.prototype = Object.create(superCtor.prototype, {
20889 constructor: {
20890 value: ctor,
20891 enumerable: false,
20892 writable: true,
20893 configurable: true
20894 }
20895 });
20896 };
20897} else {
20898 // old school shim for old browsers
20899 module.exports = function inherits(ctor, superCtor) {
20900 ctor.super_ = superCtor
20901 var TempCtor = function () {}
20902 TempCtor.prototype = superCtor.prototype
20903 ctor.prototype = new TempCtor()
20904 ctor.prototype.constructor = ctor
ebd8d4e8 20905 }
8b095871 20906}
ab78acc6 20907
8b095871
IC
20908},{}],10:[function(require,module,exports){
20909/*!
20910 * Determine if an object is a Buffer
20911 *
20912 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
20913 * @license MIT
20914 */
ebd8d4e8 20915
8b095871
IC
20916// The _isBuffer check is for Safari 5-7 support, because it's missing
20917// Object.prototype.constructor. Remove this eventually
20918module.exports = function (obj) {
20919 return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer)
ebd8d4e8
IC
20920}
20921
8b095871
IC
20922function isBuffer (obj) {
20923 return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)
20924}
ebd8d4e8 20925
8b095871
IC
20926// For Node v0.10 support. Remove this eventually.
20927function isSlowBuffer (obj) {
20928 return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0))
20929}
ebd8d4e8 20930
8b095871
IC
20931},{}],11:[function(require,module,exports){
20932var toString = {}.toString;
ab78acc6 20933
8b095871
IC
20934module.exports = Array.isArray || function (arr) {
20935 return toString.call(arr) == '[object Array]';
20936};
ebd8d4e8 20937
8b095871
IC
20938},{}],12:[function(require,module,exports){
20939(function (process){
20940'use strict';
ebd8d4e8 20941
8b095871
IC
20942if (!process.version ||
20943 process.version.indexOf('v0.') === 0 ||
20944 process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) {
20945 module.exports = nextTick;
20946} else {
20947 module.exports = process.nextTick;
20948}
20949
20950function nextTick(fn, arg1, arg2, arg3) {
20951 if (typeof fn !== 'function') {
20952 throw new TypeError('"callback" argument must be a function');
20953 }
20954 var len = arguments.length;
20955 var args, i;
20956 switch (len) {
20957 case 0:
20958 case 1:
20959 return process.nextTick(fn);
20960 case 2:
20961 return process.nextTick(function afterTickOne() {
20962 fn.call(null, arg1);
20963 });
20964 case 3:
20965 return process.nextTick(function afterTickTwo() {
20966 fn.call(null, arg1, arg2);
20967 });
20968 case 4:
20969 return process.nextTick(function afterTickThree() {
20970 fn.call(null, arg1, arg2, arg3);
20971 });
20972 default:
20973 args = new Array(len - 1);
20974 i = 0;
20975 while (i < args.length) {
20976 args[i++] = arguments[i];
20977 }
20978 return process.nextTick(function afterTick() {
20979 fn.apply(null, args);
20980 });
ab78acc6 20981 }
ebd8d4e8
IC
20982}
20983
8b095871
IC
20984}).call(this,require('_process'))
20985},{"_process":13}],13:[function(require,module,exports){
20986// shim for using process in browser
20987var process = module.exports = {};
ebd8d4e8 20988
8b095871
IC
20989// cached from whatever global is present so that test runners that stub it
20990// don't break things. But we need to wrap it in a try catch in case it is
20991// wrapped in strict mode code which doesn't define any globals. It's inside a
20992// function because try/catches deoptimize in certain engines.
ab78acc6 20993
8b095871
IC
20994var cachedSetTimeout;
20995var cachedClearTimeout;
ebd8d4e8 20996
8b095871
IC
20997function defaultSetTimout() {
20998 throw new Error('setTimeout has not been defined');
ab78acc6 20999}
8b095871
IC
21000function defaultClearTimeout () {
21001 throw new Error('clearTimeout has not been defined');
ab78acc6 21002}
8b095871
IC
21003(function () {
21004 try {
21005 if (typeof setTimeout === 'function') {
21006 cachedSetTimeout = setTimeout;
21007 } else {
21008 cachedSetTimeout = defaultSetTimout;
21009 }
21010 } catch (e) {
21011 cachedSetTimeout = defaultSetTimout;
21012 }
21013 try {
21014 if (typeof clearTimeout === 'function') {
21015 cachedClearTimeout = clearTimeout;
21016 } else {
21017 cachedClearTimeout = defaultClearTimeout;
21018 }
21019 } catch (e) {
21020 cachedClearTimeout = defaultClearTimeout;
21021 }
21022} ())
21023function runTimeout(fun) {
21024 if (cachedSetTimeout === setTimeout) {
21025 //normal enviroments in sane situations
21026 return setTimeout(fun, 0);
21027 }
21028 // if setTimeout wasn't available but was latter defined
21029 if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
21030 cachedSetTimeout = setTimeout;
21031 return setTimeout(fun, 0);
21032 }
21033 try {
21034 // when when somebody has screwed with setTimeout but no I.E. maddness
21035 return cachedSetTimeout(fun, 0);
21036 } catch(e){
21037 try {
21038 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
21039 return cachedSetTimeout.call(null, fun, 0);
21040 } catch(e){
21041 // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error
21042 return cachedSetTimeout.call(this, fun, 0);
21043 }
21044 }
21045
ebd8d4e8 21046
ab78acc6 21047}
8b095871
IC
21048function runClearTimeout(marker) {
21049 if (cachedClearTimeout === clearTimeout) {
21050 //normal enviroments in sane situations
21051 return clearTimeout(marker);
21052 }
21053 // if clearTimeout wasn't available but was latter defined
21054 if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
21055 cachedClearTimeout = clearTimeout;
21056 return clearTimeout(marker);
21057 }
21058 try {
21059 // when when somebody has screwed with setTimeout but no I.E. maddness
21060 return cachedClearTimeout(marker);
21061 } catch (e){
21062 try {
21063 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
21064 return cachedClearTimeout.call(null, marker);
21065 } catch (e){
21066 // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.
21067 // Some versions of I.E. have different rules for clearTimeout vs setTimeout
21068 return cachedClearTimeout.call(this, marker);
21069 }
21070 }
21071
21072
ebd8d4e8 21073
ab78acc6 21074}
8b095871
IC
21075var queue = [];
21076var draining = false;
21077var currentQueue;
21078var queueIndex = -1;
ebd8d4e8 21079
8b095871
IC
21080function cleanUpNextTick() {
21081 if (!draining || !currentQueue) {
21082 return;
21083 }
21084 draining = false;
21085 if (currentQueue.length) {
21086 queue = currentQueue.concat(queue);
21087 } else {
21088 queueIndex = -1;
21089 }
21090 if (queue.length) {
21091 drainQueue();
21092 }
ebd8d4e8
IC
21093}
21094
8b095871
IC
21095function drainQueue() {
21096 if (draining) {
21097 return;
21098 }
21099 var timeout = runTimeout(cleanUpNextTick);
21100 draining = true;
21101
21102 var len = queue.length;
21103 while(len) {
21104 currentQueue = queue;
21105 queue = [];
21106 while (++queueIndex < len) {
21107 if (currentQueue) {
21108 currentQueue[queueIndex].run();
21109 }
21110 }
21111 queueIndex = -1;
21112 len = queue.length;
21113 }
21114 currentQueue = null;
21115 draining = false;
21116 runClearTimeout(timeout);
ebd8d4e8
IC
21117}
21118
8b095871
IC
21119process.nextTick = function (fun) {
21120 var args = new Array(arguments.length - 1);
21121 if (arguments.length > 1) {
21122 for (var i = 1; i < arguments.length; i++) {
21123 args[i - 1] = arguments[i];
21124 }
21125 }
21126 queue.push(new Item(fun, args));
21127 if (queue.length === 1 && !draining) {
21128 runTimeout(drainQueue);
21129 }
21130};
21131
21132// v8 likes predictible objects
21133function Item(fun, array) {
21134 this.fun = fun;
21135 this.array = array;
ab78acc6 21136}
8b095871
IC
21137Item.prototype.run = function () {
21138 this.fun.apply(null, this.array);
21139};
21140process.title = 'browser';
21141process.browser = true;
21142process.env = {};
21143process.argv = [];
21144process.version = ''; // empty string to avoid regexp issues
21145process.versions = {};
ebd8d4e8 21146
8b095871
IC
21147function noop() {}
21148
21149process.on = noop;
21150process.addListener = noop;
21151process.once = noop;
21152process.off = noop;
21153process.removeListener = noop;
21154process.removeAllListeners = noop;
21155process.emit = noop;
21156
21157process.binding = function (name) {
21158 throw new Error('process.binding is not supported');
21159};
21160
21161process.cwd = function () { return '/' };
21162process.chdir = function (dir) {
21163 throw new Error('process.chdir is not supported');
21164};
21165process.umask = function() { return 0; };
21166
21167},{}],14:[function(require,module,exports){
21168module.exports = require("./lib/_stream_duplex.js")
21169
21170},{"./lib/_stream_duplex.js":15}],15:[function(require,module,exports){
21171// a duplex stream is just a stream that is both readable and writable.
21172// Since JS doesn't have multiple prototypal inheritance, this class
21173// prototypally inherits from Readable, and then parasitically from
21174// Writable.
21175
21176'use strict';
21177
21178/*<replacement>*/
ab78acc6 21179
8b095871
IC
21180var objectKeys = Object.keys || function (obj) {
21181 var keys = [];
21182 for (var key in obj) {
21183 keys.push(key);
21184 }return keys;
21185};
21186/*</replacement>*/
ebd8d4e8 21187
8b095871 21188module.exports = Duplex;
ebd8d4e8 21189
8b095871
IC
21190/*<replacement>*/
21191var processNextTick = require('process-nextick-args');
21192/*</replacement>*/
ebd8d4e8 21193
8b095871
IC
21194/*<replacement>*/
21195var util = require('core-util-is');
21196util.inherits = require('inherits');
21197/*</replacement>*/
ebd8d4e8 21198
8b095871
IC
21199var Readable = require('./_stream_readable');
21200var Writable = require('./_stream_writable');
ebd8d4e8 21201
8b095871
IC
21202util.inherits(Duplex, Readable);
21203
21204var keys = objectKeys(Writable.prototype);
21205for (var v = 0; v < keys.length; v++) {
21206 var method = keys[v];
21207 if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];
ab78acc6 21208}
ebd8d4e8 21209
8b095871
IC
21210function Duplex(options) {
21211 if (!(this instanceof Duplex)) return new Duplex(options);
ebd8d4e8 21212
8b095871
IC
21213 Readable.call(this, options);
21214 Writable.call(this, options);
ebd8d4e8 21215
8b095871 21216 if (options && options.readable === false) this.readable = false;
ebd8d4e8 21217
8b095871 21218 if (options && options.writable === false) this.writable = false;
ebd8d4e8 21219
8b095871
IC
21220 this.allowHalfOpen = true;
21221 if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;
ebd8d4e8 21222
8b095871 21223 this.once('end', onend);
ebd8d4e8
IC
21224}
21225
8b095871
IC
21226// the no-half-open enforcer
21227function onend() {
21228 // if we allow half-open state, or if the writable side ended,
21229 // then we're ok.
21230 if (this.allowHalfOpen || this._writableState.ended) return;
21231
21232 // no more data can be written.
21233 // But allow more writes to happen in this tick.
21234 processNextTick(onEndNT, this);
ebd8d4e8
IC
21235}
21236
8b095871
IC
21237function onEndNT(self) {
21238 self.end();
21239}
ebd8d4e8 21240
8b095871
IC
21241function forEach(xs, f) {
21242 for (var i = 0, l = xs.length; i < l; i++) {
21243 f(xs[i], i);
21244 }
21245}
21246},{"./_stream_readable":17,"./_stream_writable":19,"core-util-is":6,"inherits":9,"process-nextick-args":12}],16:[function(require,module,exports){
21247// a passthrough stream.
21248// basically just the most minimal sort of Transform stream.
21249// Every written chunk gets output as-is.
ebd8d4e8 21250
8b095871 21251'use strict';
ebd8d4e8 21252
8b095871 21253module.exports = PassThrough;
ebd8d4e8 21254
8b095871 21255var Transform = require('./_stream_transform');
ebd8d4e8 21256
8b095871
IC
21257/*<replacement>*/
21258var util = require('core-util-is');
21259util.inherits = require('inherits');
21260/*</replacement>*/
ebd8d4e8 21261
8b095871 21262util.inherits(PassThrough, Transform);
ebd8d4e8 21263
8b095871
IC
21264function PassThrough(options) {
21265 if (!(this instanceof PassThrough)) return new PassThrough(options);
ebd8d4e8 21266
8b095871 21267 Transform.call(this, options);
ebd8d4e8
IC
21268}
21269
8b095871
IC
21270PassThrough.prototype._transform = function (chunk, encoding, cb) {
21271 cb(null, chunk);
21272};
21273},{"./_stream_transform":18,"core-util-is":6,"inherits":9}],17:[function(require,module,exports){
21274(function (process){
21275'use strict';
ebd8d4e8 21276
8b095871 21277module.exports = Readable;
ebd8d4e8 21278
8b095871
IC
21279/*<replacement>*/
21280var processNextTick = require('process-nextick-args');
21281/*</replacement>*/
ebd8d4e8 21282
8b095871
IC
21283/*<replacement>*/
21284var isArray = require('isarray');
21285/*</replacement>*/
ebd8d4e8 21286
8b095871
IC
21287/*<replacement>*/
21288var Duplex;
21289/*</replacement>*/
ebd8d4e8 21290
8b095871 21291Readable.ReadableState = ReadableState;
ebd8d4e8 21292
8b095871
IC
21293/*<replacement>*/
21294var EE = require('events').EventEmitter;
ebd8d4e8 21295
8b095871
IC
21296var EElistenerCount = function (emitter, type) {
21297 return emitter.listeners(type).length;
21298};
21299/*</replacement>*/
ebd8d4e8 21300
8b095871
IC
21301/*<replacement>*/
21302var Stream;
21303(function () {
21304 try {
21305 Stream = require('st' + 'ream');
21306 } catch (_) {} finally {
21307 if (!Stream) Stream = require('events').EventEmitter;
21308 }
21309})();
21310/*</replacement>*/
ebd8d4e8 21311
8b095871
IC
21312var Buffer = require('buffer').Buffer;
21313/*<replacement>*/
21314var bufferShim = require('buffer-shims');
21315/*</replacement>*/
ab78acc6 21316
8b095871
IC
21317/*<replacement>*/
21318var util = require('core-util-is');
21319util.inherits = require('inherits');
21320/*</replacement>*/
ab78acc6 21321
8b095871
IC
21322/*<replacement>*/
21323var debugUtil = require('util');
21324var debug = void 0;
21325if (debugUtil && debugUtil.debuglog) {
21326 debug = debugUtil.debuglog('stream');
21327} else {
21328 debug = function () {};
21329}
21330/*</replacement>*/
ab78acc6 21331
8b095871
IC
21332var BufferList = require('./internal/streams/BufferList');
21333var StringDecoder;
ab78acc6 21334
8b095871 21335util.inherits(Readable, Stream);
ab78acc6 21336
8b095871
IC
21337function prependListener(emitter, event, fn) {
21338 // Sadly this is not cacheable as some libraries bundle their own
21339 // event emitter implementation with them.
21340 if (typeof emitter.prependListener === 'function') {
21341 return emitter.prependListener(event, fn);
21342 } else {
21343 // This is a hack to make sure that our error handler is attached before any
21344 // userland ones. NEVER DO THIS. This is here only because this code needs
21345 // to continue to work with older versions of Node.js that do not include
21346 // the prependListener() method. The goal is to eventually remove this hack.
21347 if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];
ebd8d4e8 21348 }
ebd8d4e8
IC
21349}
21350
8b095871
IC
21351function ReadableState(options, stream) {
21352 Duplex = Duplex || require('./_stream_duplex');
ebd8d4e8 21353
8b095871 21354 options = options || {};
ebd8d4e8 21355
8b095871
IC
21356 // object stream flag. Used to make read(n) ignore n and to
21357 // make all the buffer merging and length checks go away
21358 this.objectMode = !!options.objectMode;
ebd8d4e8 21359
8b095871 21360 if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.readableObjectMode;
ebd8d4e8 21361
8b095871
IC
21362 // the point at which it stops calling _read() to fill the buffer
21363 // Note: 0 is a valid value, means "don't call _read preemptively ever"
21364 var hwm = options.highWaterMark;
21365 var defaultHwm = this.objectMode ? 16 : 16 * 1024;
21366 this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;
ab78acc6 21367
8b095871
IC
21368 // cast to ints.
21369 this.highWaterMark = ~ ~this.highWaterMark;
ab78acc6 21370
8b095871
IC
21371 // A linked list is used to store data chunks instead of an array because the
21372 // linked list can remove elements from the beginning faster than
21373 // array.shift()
21374 this.buffer = new BufferList();
21375 this.length = 0;
21376 this.pipes = null;
21377 this.pipesCount = 0;
21378 this.flowing = null;
21379 this.ended = false;
21380 this.endEmitted = false;
21381 this.reading = false;
ab78acc6 21382
8b095871
IC
21383 // a flag to be able to tell if the onwrite cb is called immediately,
21384 // or on a later tick. We set this to true at first, because any
21385 // actions that shouldn't happen until "later" should generally also
21386 // not happen before the first write call.
21387 this.sync = true;
ebd8d4e8 21388
8b095871
IC
21389 // whenever we return null, then we set a flag to say
21390 // that we're awaiting a 'readable' event emission.
21391 this.needReadable = false;
21392 this.emittedReadable = false;
21393 this.readableListening = false;
21394 this.resumeScheduled = false;
ebd8d4e8 21395
8b095871
IC
21396 // Crypto is kind of old and crusty. Historically, its default string
21397 // encoding is 'binary' so we have to make this configurable.
21398 // Everything else in the universe uses 'utf8', though.
21399 this.defaultEncoding = options.defaultEncoding || 'utf8';
ebd8d4e8 21400
8b095871
IC
21401 // when piping, we only care about 'readable' events that happen
21402 // after read()ing all the bytes and not getting any pushback.
21403 this.ranOut = false;
ebd8d4e8 21404
8b095871
IC
21405 // the number of writers that are awaiting a drain event in .pipe()s
21406 this.awaitDrain = 0;
ebd8d4e8 21407
8b095871
IC
21408 // if true, a maybeReadMore has been scheduled
21409 this.readingMore = false;
ebd8d4e8 21410
8b095871
IC
21411 this.decoder = null;
21412 this.encoding = null;
21413 if (options.encoding) {
21414 if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
21415 this.decoder = new StringDecoder(options.encoding);
21416 this.encoding = options.encoding;
21417 }
21418}
ebd8d4e8 21419
8b095871
IC
21420function Readable(options) {
21421 Duplex = Duplex || require('./_stream_duplex');
ebd8d4e8 21422
8b095871 21423 if (!(this instanceof Readable)) return new Readable(options);
ebd8d4e8 21424
8b095871 21425 this._readableState = new ReadableState(options, this);
ebd8d4e8 21426
8b095871
IC
21427 // legacy
21428 this.readable = true;
ebd8d4e8 21429
8b095871 21430 if (options && typeof options.read === 'function') this._read = options.read;
ebd8d4e8 21431
8b095871
IC
21432 Stream.call(this);
21433}
ebd8d4e8 21434
8b095871
IC
21435// Manually shove something into the read() buffer.
21436// This returns true if the highWaterMark has not been hit yet,
21437// similar to how Writable.write() returns true if you should
21438// write() some more.
21439Readable.prototype.push = function (chunk, encoding) {
21440 var state = this._readableState;
ebd8d4e8 21441
8b095871
IC
21442 if (!state.objectMode && typeof chunk === 'string') {
21443 encoding = encoding || state.defaultEncoding;
21444 if (encoding !== state.encoding) {
21445 chunk = bufferShim.from(chunk, encoding);
21446 encoding = '';
21447 }
21448 }
ebd8d4e8 21449
8b095871
IC
21450 return readableAddChunk(this, state, chunk, encoding, false);
21451};
ebd8d4e8 21452
8b095871
IC
21453// Unshift should *always* be something directly out of read()
21454Readable.prototype.unshift = function (chunk) {
21455 var state = this._readableState;
21456 return readableAddChunk(this, state, chunk, '', true);
21457};
ebd8d4e8 21458
8b095871
IC
21459Readable.prototype.isPaused = function () {
21460 return this._readableState.flowing === false;
21461};
21462
21463function readableAddChunk(stream, state, chunk, encoding, addToFront) {
21464 var er = chunkInvalid(state, chunk);
21465 if (er) {
21466 stream.emit('error', er);
21467 } else if (chunk === null) {
21468 state.reading = false;
21469 onEofChunk(stream, state);
21470 } else if (state.objectMode || chunk && chunk.length > 0) {
21471 if (state.ended && !addToFront) {
21472 var e = new Error('stream.push() after EOF');
21473 stream.emit('error', e);
21474 } else if (state.endEmitted && addToFront) {
21475 var _e = new Error('stream.unshift() after end event');
21476 stream.emit('error', _e);
21477 } else {
21478 var skipAdd;
21479 if (state.decoder && !addToFront && !encoding) {
21480 chunk = state.decoder.write(chunk);
21481 skipAdd = !state.objectMode && chunk.length === 0;
21482 }
ebd8d4e8 21483
8b095871 21484 if (!addToFront) state.reading = false;
ebd8d4e8 21485
8b095871
IC
21486 // Don't add to the buffer if we've decoded to an empty string chunk and
21487 // we're not in object mode
21488 if (!skipAdd) {
21489 // if we want the data now, just emit it.
21490 if (state.flowing && state.length === 0 && !state.sync) {
21491 stream.emit('data', chunk);
21492 stream.read(0);
21493 } else {
21494 // update the buffer info.
21495 state.length += state.objectMode ? 1 : chunk.length;
21496 if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);
ebd8d4e8 21497
8b095871
IC
21498 if (state.needReadable) emitReadable(stream);
21499 }
21500 }
ab78acc6 21501
8b095871
IC
21502 maybeReadMore(stream, state);
21503 }
21504 } else if (!addToFront) {
21505 state.reading = false;
21506 }
ab78acc6 21507
8b095871
IC
21508 return needMoreData(state);
21509}
ab78acc6 21510
8b095871
IC
21511// if it's past the high water mark, we can push in some more.
21512// Also, if we have no data yet, we can stand some
21513// more bytes. This is to work around cases where hwm=0,
21514// such as the repl. Also, if the push() triggered a
21515// readable event, and the user called read(largeNumber) such that
21516// needReadable was set, then we ought to push more, so that another
21517// 'readable' event will be triggered.
21518function needMoreData(state) {
21519 return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);
21520}
ebd8d4e8 21521
8b095871
IC
21522// backwards compatibility.
21523Readable.prototype.setEncoding = function (enc) {
21524 if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
21525 this._readableState.decoder = new StringDecoder(enc);
21526 this._readableState.encoding = enc;
21527 return this;
21528};
21529
21530// Don't raise the hwm > 8MB
21531var MAX_HWM = 0x800000;
21532function computeNewHighWaterMark(n) {
21533 if (n >= MAX_HWM) {
21534 n = MAX_HWM;
ab78acc6 21535 } else {
8b095871
IC
21536 // Get the next highest power of 2 to prevent increasing hwm excessively in
21537 // tiny amounts
21538 n--;
21539 n |= n >>> 1;
21540 n |= n >>> 2;
21541 n |= n >>> 4;
21542 n |= n >>> 8;
21543 n |= n >>> 16;
21544 n++;
ebd8d4e8 21545 }
8b095871 21546 return n;
ebd8d4e8
IC
21547}
21548
8b095871
IC
21549// This function is designed to be inlinable, so please take care when making
21550// changes to the function body.
21551function howMuchToRead(n, state) {
21552 if (n <= 0 || state.length === 0 && state.ended) return 0;
21553 if (state.objectMode) return 1;
21554 if (n !== n) {
21555 // Only flow one buffer at a time
21556 if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;
21557 }
21558 // If we're asking for more than the current hwm, then raise the hwm.
21559 if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);
21560 if (n <= state.length) return n;
21561 // Don't have enough
21562 if (!state.ended) {
21563 state.needReadable = true;
21564 return 0;
21565 }
21566 return state.length;
21567}
ebd8d4e8 21568
8b095871
IC
21569// you can override either this method, or the async _read(n) below.
21570Readable.prototype.read = function (n) {
21571 debug('read', n);
21572 n = parseInt(n, 10);
21573 var state = this._readableState;
21574 var nOrig = n;
ebd8d4e8 21575
8b095871 21576 if (n !== 0) state.emittedReadable = false;
ab78acc6 21577
8b095871
IC
21578 // if we're doing read(0) to trigger a readable event, but we
21579 // already have a bunch of data in the buffer, then just trigger
21580 // the 'readable' event and move on.
21581 if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {
21582 debug('read: emitReadable', state.length, state.ended);
21583 if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);
21584 return null;
ebd8d4e8 21585 }
ebd8d4e8 21586
8b095871 21587 n = howMuchToRead(n, state);
ebd8d4e8 21588
8b095871
IC
21589 // if we've ended, and we're now clear, then finish it up.
21590 if (n === 0 && state.ended) {
21591 if (state.length === 0) endReadable(this);
21592 return null;
21593 }
ebd8d4e8 21594
8b095871
IC
21595 // All the actual chunk generation logic needs to be
21596 // *below* the call to _read. The reason is that in certain
21597 // synthetic stream cases, such as passthrough streams, _read
21598 // may be a completely synchronous operation which may change
21599 // the state of the read buffer, providing enough data when
21600 // before there was *not* enough.
21601 //
21602 // So, the steps are:
21603 // 1. Figure out what the state of things will be after we do
21604 // a read from the buffer.
21605 //
21606 // 2. If that resulting state will trigger a _read, then call _read.
21607 // Note that this may be asynchronous, or synchronous. Yes, it is
21608 // deeply ugly to write APIs this way, but that still doesn't mean
21609 // that the Readable class should behave improperly, as streams are
21610 // designed to be sync/async agnostic.
21611 // Take note if the _read call is sync or async (ie, if the read call
21612 // has returned yet), so that we know whether or not it's safe to emit
21613 // 'readable' etc.
21614 //
21615 // 3. Actually pull the requested chunks out of the buffer and return.
ebd8d4e8 21616
8b095871
IC
21617 // if we need a readable event, then we need to do some reading.
21618 var doRead = state.needReadable;
21619 debug('need readable', doRead);
ebd8d4e8 21620
8b095871
IC
21621 // if we currently have less than the highWaterMark, then also read some
21622 if (state.length === 0 || state.length - n < state.highWaterMark) {
21623 doRead = true;
21624 debug('length less than watermark', doRead);
21625 }
ebd8d4e8 21626
8b095871
IC
21627 // however, if we've ended, then there's no point, and if we're already
21628 // reading, then it's unnecessary.
21629 if (state.ended || state.reading) {
21630 doRead = false;
21631 debug('reading or ended', doRead);
21632 } else if (doRead) {
21633 debug('do read');
21634 state.reading = true;
21635 state.sync = true;
21636 // if the length is currently zero, then we *need* a readable event.
21637 if (state.length === 0) state.needReadable = true;
21638 // call internal read method
21639 this._read(state.highWaterMark);
21640 state.sync = false;
21641 // If _read pushed data synchronously, then `reading` will be false,
21642 // and we need to re-evaluate how much data we can return to the user.
21643 if (!state.reading) n = howMuchToRead(nOrig, state);
21644 }
ebd8d4e8 21645
8b095871
IC
21646 var ret;
21647 if (n > 0) ret = fromList(n, state);else ret = null;
ebd8d4e8 21648
8b095871
IC
21649 if (ret === null) {
21650 state.needReadable = true;
21651 n = 0;
21652 } else {
21653 state.length -= n;
21654 }
ebd8d4e8 21655
8b095871
IC
21656 if (state.length === 0) {
21657 // If we have nothing in the buffer, then we want to know
21658 // as soon as we *do* get something into the buffer.
21659 if (!state.ended) state.needReadable = true;
ebd8d4e8 21660
8b095871
IC
21661 // If we tried to read() past the EOF, then emit end on the next tick.
21662 if (nOrig !== n && state.ended) endReadable(this);
21663 }
21664
21665 if (ret !== null) this.emit('data', ret);
21666
21667 return ret;
ab78acc6
IC
21668};
21669
8b095871
IC
21670function chunkInvalid(state, chunk) {
21671 var er = null;
21672 if (!Buffer.isBuffer(chunk) && typeof chunk !== 'string' && chunk !== null && chunk !== undefined && !state.objectMode) {
21673 er = new TypeError('Invalid non-string/buffer chunk');
21674 }
21675 return er;
21676}
ab78acc6 21677
8b095871
IC
21678function onEofChunk(stream, state) {
21679 if (state.ended) return;
21680 if (state.decoder) {
21681 var chunk = state.decoder.end();
21682 if (chunk && chunk.length) {
21683 state.buffer.push(chunk);
21684 state.length += state.objectMode ? 1 : chunk.length;
21685 }
21686 }
21687 state.ended = true;
21688
21689 // emit 'readable' now to make sure it gets picked up.
21690 emitReadable(stream);
21691}
21692
21693// Don't emit readable right away in sync mode, because this can trigger
21694// another read() call => stack overflow. This way, it might trigger
21695// a nextTick recursion warning, but that's not so bad.
21696function emitReadable(stream) {
21697 var state = stream._readableState;
21698 state.needReadable = false;
21699 if (!state.emittedReadable) {
21700 debug('emitReadable', state.flowing);
21701 state.emittedReadable = true;
21702 if (state.sync) processNextTick(emitReadable_, stream);else emitReadable_(stream);
21703 }
ebd8d4e8
IC
21704}
21705
8b095871
IC
21706function emitReadable_(stream) {
21707 debug('emit readable');
21708 stream.emit('readable');
21709 flow(stream);
21710}
ebd8d4e8 21711
8b095871
IC
21712// at this point, the user has presumably seen the 'readable' event,
21713// and called read() to consume some data. that may have triggered
21714// in turn another _read(n) call, in which case reading = true if
21715// it's in progress.
21716// However, if we're not ended, or reading, and the length < hwm,
21717// then go ahead and try to read some more preemptively.
21718function maybeReadMore(stream, state) {
21719 if (!state.readingMore) {
21720 state.readingMore = true;
21721 processNextTick(maybeReadMore_, stream, state);
21722 }
21723}
ab78acc6 21724
8b095871
IC
21725function maybeReadMore_(stream, state) {
21726 var len = state.length;
21727 while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {
21728 debug('maybeReadMore read 0');
21729 stream.read(0);
21730 if (len === state.length)
21731 // didn't get any data, stop spinning.
21732 break;else len = state.length;
21733 }
21734 state.readingMore = false;
21735}
ab78acc6 21736
8b095871
IC
21737// abstract method. to be overridden in specific implementation classes.
21738// call cb(er, data) where data is <= n in length.
21739// for virtual (non-string, non-buffer) streams, "length" is somewhat
21740// arbitrary, and perhaps not very meaningful.
21741Readable.prototype._read = function (n) {
21742 this.emit('error', new Error('_read() is not implemented'));
ab78acc6
IC
21743};
21744
8b095871
IC
21745Readable.prototype.pipe = function (dest, pipeOpts) {
21746 var src = this;
21747 var state = this._readableState;
ab78acc6 21748
8b095871
IC
21749 switch (state.pipesCount) {
21750 case 0:
21751 state.pipes = dest;
21752 break;
21753 case 1:
21754 state.pipes = [state.pipes, dest];
21755 break;
21756 default:
21757 state.pipes.push(dest);
21758 break;
ab78acc6 21759 }
8b095871
IC
21760 state.pipesCount += 1;
21761 debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
ab78acc6 21762
8b095871 21763 var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;
ab78acc6 21764
8b095871
IC
21765 var endFn = doEnd ? onend : cleanup;
21766 if (state.endEmitted) processNextTick(endFn);else src.once('end', endFn);
ab78acc6 21767
8b095871
IC
21768 dest.on('unpipe', onunpipe);
21769 function onunpipe(readable) {
21770 debug('onunpipe');
21771 if (readable === src) {
21772 cleanup();
ab78acc6 21773 }
8b095871 21774 }
ebd8d4e8 21775
8b095871
IC
21776 function onend() {
21777 debug('onend');
21778 dest.end();
ebd8d4e8
IC
21779 }
21780
8b095871
IC
21781 // when the dest drains, it reduces the awaitDrain counter
21782 // on the source. This would be more elegant with a .once()
21783 // handler in flow(), but adding and removing repeatedly is
21784 // too slow.
21785 var ondrain = pipeOnDrain(src);
21786 dest.on('drain', ondrain);
ebd8d4e8 21787
8b095871
IC
21788 var cleanedUp = false;
21789 function cleanup() {
21790 debug('cleanup');
21791 // cleanup event handlers once the pipe is broken
21792 dest.removeListener('close', onclose);
21793 dest.removeListener('finish', onfinish);
21794 dest.removeListener('drain', ondrain);
21795 dest.removeListener('error', onerror);
21796 dest.removeListener('unpipe', onunpipe);
21797 src.removeListener('end', onend);
21798 src.removeListener('end', cleanup);
21799 src.removeListener('data', ondata);
ebd8d4e8 21800
8b095871 21801 cleanedUp = true;
ebd8d4e8 21802
8b095871
IC
21803 // if the reader is waiting for a drain event from this
21804 // specific writer, then it would cause it to never start
21805 // flowing again.
21806 // So, if this is awaiting a drain, then we just call it now.
21807 // If we don't know, then assume that we are waiting for one.
21808 if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();
21809 }
ebd8d4e8 21810
8b095871
IC
21811 // If the user pushes more data while we're writing to dest then we'll end up
21812 // in ondata again. However, we only want to increase awaitDrain once because
21813 // dest will only emit one 'drain' event for the multiple writes.
21814 // => Introduce a guard on increasing awaitDrain.
21815 var increasedAwaitDrain = false;
21816 src.on('data', ondata);
21817 function ondata(chunk) {
21818 debug('ondata');
21819 increasedAwaitDrain = false;
21820 var ret = dest.write(chunk);
21821 if (false === ret && !increasedAwaitDrain) {
21822 // If the user unpiped during `dest.write()`, it is possible
21823 // to get stuck in a permanently paused state if that write
21824 // also returned false.
21825 // => Check whether `dest` is still a piping destination.
21826 if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {
21827 debug('false write response, pause', src._readableState.awaitDrain);
21828 src._readableState.awaitDrain++;
21829 increasedAwaitDrain = true;
21830 }
21831 src.pause();
21832 }
21833 }
ebd8d4e8 21834
8b095871
IC
21835 // if the dest has an error, then stop piping into it.
21836 // however, don't suppress the throwing behavior for this.
21837 function onerror(er) {
21838 debug('onerror', er);
21839 unpipe();
21840 dest.removeListener('error', onerror);
21841 if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er);
21842 }
ab78acc6 21843
8b095871
IC
21844 // Make sure our error handler is attached before userland ones.
21845 prependListener(dest, 'error', onerror);
ab78acc6 21846
8b095871
IC
21847 // Both close and finish should trigger unpipe, but only once.
21848 function onclose() {
21849 dest.removeListener('finish', onfinish);
21850 unpipe();
21851 }
21852 dest.once('close', onclose);
21853 function onfinish() {
21854 debug('onfinish');
21855 dest.removeListener('close', onclose);
21856 unpipe();
ab78acc6 21857 }
8b095871 21858 dest.once('finish', onfinish);
ebd8d4e8 21859
8b095871
IC
21860 function unpipe() {
21861 debug('unpipe');
21862 src.unpipe(dest);
21863 }
21864
21865 // tell the dest that it's being piped to
21866 dest.emit('pipe', src);
21867
21868 // start the flow if it hasn't been started already.
21869 if (!state.flowing) {
21870 debug('pipe resume');
21871 src.resume();
21872 }
21873
21874 return dest;
ab78acc6 21875};
ebd8d4e8 21876
8b095871
IC
21877function pipeOnDrain(src) {
21878 return function () {
21879 var state = src._readableState;
21880 debug('pipeOnDrain', state.awaitDrain);
21881 if (state.awaitDrain) state.awaitDrain--;
21882 if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {
21883 state.flowing = true;
21884 flow(src);
21885 }
21886 };
21887}
ebd8d4e8 21888
8b095871
IC
21889Readable.prototype.unpipe = function (dest) {
21890 var state = this._readableState;
ebd8d4e8 21891
8b095871
IC
21892 // if we're not piping anywhere, then do nothing.
21893 if (state.pipesCount === 0) return this;
ebd8d4e8 21894
8b095871
IC
21895 // just one destination. most common case.
21896 if (state.pipesCount === 1) {
21897 // passed in one, but it's not the right one.
21898 if (dest && dest !== state.pipes) return this;
ebd8d4e8 21899
8b095871
IC
21900 if (!dest) dest = state.pipes;
21901
21902 // got a match.
21903 state.pipes = null;
21904 state.pipesCount = 0;
21905 state.flowing = false;
21906 if (dest) dest.emit('unpipe', this);
21907 return this;
ab78acc6 21908 }
ebd8d4e8 21909
8b095871 21910 // slow case. multiple pipe destinations.
ebd8d4e8 21911
8b095871
IC
21912 if (!dest) {
21913 // remove all.
21914 var dests = state.pipes;
21915 var len = state.pipesCount;
21916 state.pipes = null;
21917 state.pipesCount = 0;
21918 state.flowing = false;
ebd8d4e8 21919
8b095871
IC
21920 for (var i = 0; i < len; i++) {
21921 dests[i].emit('unpipe', this);
21922 }return this;
21923 }
ebd8d4e8 21924
8b095871
IC
21925 // try to find the right one.
21926 var index = indexOf(state.pipes, dest);
21927 if (index === -1) return this;
ebd8d4e8 21928
8b095871
IC
21929 state.pipes.splice(index, 1);
21930 state.pipesCount -= 1;
21931 if (state.pipesCount === 1) state.pipes = state.pipes[0];
ebd8d4e8 21932
8b095871 21933 dest.emit('unpipe', this);
ab78acc6 21934
8b095871
IC
21935 return this;
21936};
ab78acc6 21937
8b095871
IC
21938// set up data events if they are asked for
21939// Ensure readable listeners eventually get something
21940Readable.prototype.on = function (ev, fn) {
21941 var res = Stream.prototype.on.call(this, ev, fn);
21942
21943 if (ev === 'data') {
21944 // Start flowing on next tick if stream isn't explicitly paused
21945 if (this._readableState.flowing !== false) this.resume();
21946 } else if (ev === 'readable') {
21947 var state = this._readableState;
21948 if (!state.endEmitted && !state.readableListening) {
21949 state.readableListening = state.needReadable = true;
21950 state.emittedReadable = false;
21951 if (!state.reading) {
21952 processNextTick(nReadingNextTick, this);
21953 } else if (state.length) {
21954 emitReadable(this, state);
ebd8d4e8 21955 }
ab78acc6 21956 }
8b095871 21957 }
ebd8d4e8 21958
8b095871
IC
21959 return res;
21960};
21961Readable.prototype.addListener = Readable.prototype.on;
ab78acc6 21962
8b095871
IC
21963function nReadingNextTick(self) {
21964 debug('readable nexttick read 0');
21965 self.read(0);
21966}
ab78acc6 21967
8b095871
IC
21968// pause() and resume() are remnants of the legacy readable stream API
21969// If the user uses them, then switch into old mode.
21970Readable.prototype.resume = function () {
21971 var state = this._readableState;
21972 if (!state.flowing) {
21973 debug('resume');
21974 state.flowing = true;
21975 resume(this, state);
ebd8d4e8 21976 }
ab78acc6 21977 return this;
ebd8d4e8
IC
21978};
21979
8b095871
IC
21980function resume(stream, state) {
21981 if (!state.resumeScheduled) {
21982 state.resumeScheduled = true;
21983 processNextTick(resume_, stream, state);
ebd8d4e8 21984 }
8b095871 21985}
ab78acc6 21986
8b095871
IC
21987function resume_(stream, state) {
21988 if (!state.reading) {
21989 debug('resume read 0');
21990 stream.read(0);
ebd8d4e8 21991 }
ebd8d4e8 21992
8b095871
IC
21993 state.resumeScheduled = false;
21994 state.awaitDrain = 0;
21995 stream.emit('resume');
21996 flow(stream);
21997 if (state.flowing && !state.reading) stream.read(0);
21998}
ab78acc6 21999
8b095871
IC
22000Readable.prototype.pause = function () {
22001 debug('call pause flowing=%j', this._readableState.flowing);
22002 if (false !== this._readableState.flowing) {
22003 debug('pause');
22004 this._readableState.flowing = false;
22005 this.emit('pause');
ebd8d4e8 22006 }
ab78acc6
IC
22007 return this;
22008};
ebd8d4e8 22009
8b095871
IC
22010function flow(stream) {
22011 var state = stream._readableState;
22012 debug('flow', state.flowing);
22013 while (state.flowing && stream.read() !== null) {}
22014}
ebd8d4e8 22015
8b095871
IC
22016// wrap an old-style stream as the async data source.
22017// This is *not* part of the readable stream interface.
22018// It is an ugly unfortunate mess of history.
22019Readable.prototype.wrap = function (stream) {
22020 var state = this._readableState;
22021 var paused = false;
ebd8d4e8 22022
8b095871
IC
22023 var self = this;
22024 stream.on('end', function () {
22025 debug('wrapped end');
22026 if (state.decoder && !state.ended) {
22027 var chunk = state.decoder.end();
22028 if (chunk && chunk.length) self.push(chunk);
22029 }
ebd8d4e8 22030
8b095871
IC
22031 self.push(null);
22032 });
ebd8d4e8 22033
8b095871
IC
22034 stream.on('data', function (chunk) {
22035 debug('wrapped data');
22036 if (state.decoder) chunk = state.decoder.write(chunk);
ebd8d4e8 22037
8b095871
IC
22038 // don't skip over falsy values in objectMode
22039 if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;
ebd8d4e8 22040
8b095871
IC
22041 var ret = self.push(chunk);
22042 if (!ret) {
22043 paused = true;
22044 stream.pause();
22045 }
22046 });
22047
22048 // proxy all the other methods.
22049 // important when wrapping filters and duplexes.
22050 for (var i in stream) {
22051 if (this[i] === undefined && typeof stream[i] === 'function') {
22052 this[i] = function (method) {
22053 return function () {
22054 return stream[method].apply(stream, arguments);
22055 };
22056 }(i);
22057 }
ab78acc6 22058 }
ebd8d4e8 22059
8b095871
IC
22060 // proxy certain important events.
22061 var events = ['error', 'close', 'destroy', 'pause', 'resume'];
22062 forEach(events, function (ev) {
22063 stream.on(ev, self.emit.bind(self, ev));
22064 });
22065
22066 // when we try to consume some more bytes, simply unpause the
22067 // underlying stream.
22068 self._read = function (n) {
22069 debug('wrapped _read', n);
22070 if (paused) {
22071 paused = false;
22072 stream.resume();
22073 }
22074 };
22075
22076 return self;
ebd8d4e8
IC
22077};
22078
8b095871
IC
22079// exposed for testing purposes only.
22080Readable._fromList = fromList;
ebd8d4e8 22081
8b095871
IC
22082// Pluck off n bytes from an array of buffers.
22083// Length is the combined lengths of all the buffers in the list.
22084// This function is designed to be inlinable, so please take care when making
22085// changes to the function body.
22086function fromList(n, state) {
22087 // nothing buffered
22088 if (state.length === 0) return null;
ab78acc6 22089
8b095871
IC
22090 var ret;
22091 if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {
22092 // read it all, truncate the list
22093 if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.head.data;else ret = state.buffer.concat(state.length);
22094 state.buffer.clear();
22095 } else {
22096 // read part of list
22097 ret = fromListPartial(n, state.buffer, state.decoder);
22098 }
22099
22100 return ret;
22101}
22102
22103// Extracts only enough buffered data to satisfy the amount requested.
22104// This function is designed to be inlinable, so please take care when making
22105// changes to the function body.
22106function fromListPartial(n, list, hasStrings) {
22107 var ret;
22108 if (n < list.head.data.length) {
22109 // slice is the same for buffers and strings
22110 ret = list.head.data.slice(0, n);
22111 list.head.data = list.head.data.slice(n);
22112 } else if (n === list.head.data.length) {
22113 // first chunk is a perfect match
22114 ret = list.shift();
22115 } else {
22116 // result spans more than one buffer
22117 ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);
22118 }
22119 return ret;
ab78acc6 22120}
ebd8d4e8 22121
8b095871
IC
22122// Copies a specified amount of characters from the list of buffered data
22123// chunks.
22124// This function is designed to be inlinable, so please take care when making
22125// changes to the function body.
22126function copyFromBufferString(n, list) {
22127 var p = list.head;
22128 var c = 1;
22129 var ret = p.data;
22130 n -= ret.length;
22131 while (p = p.next) {
22132 var str = p.data;
22133 var nb = n > str.length ? str.length : n;
22134 if (nb === str.length) ret += str;else ret += str.slice(0, n);
22135 n -= nb;
22136 if (n === 0) {
22137 if (nb === str.length) {
22138 ++c;
22139 if (p.next) list.head = p.next;else list.head = list.tail = null;
22140 } else {
22141 list.head = p;
22142 p.data = str.slice(nb);
22143 }
22144 break;
ab78acc6 22145 }
8b095871
IC
22146 ++c;
22147 }
22148 list.length -= c;
22149 return ret;
ab78acc6
IC
22150}
22151
8b095871
IC
22152// Copies a specified amount of bytes from the list of buffered data chunks.
22153// This function is designed to be inlinable, so please take care when making
22154// changes to the function body.
22155function copyFromBuffer(n, list) {
22156 var ret = bufferShim.allocUnsafe(n);
22157 var p = list.head;
22158 var c = 1;
22159 p.data.copy(ret);
22160 n -= p.data.length;
22161 while (p = p.next) {
22162 var buf = p.data;
22163 var nb = n > buf.length ? buf.length : n;
22164 buf.copy(ret, ret.length - n, 0, nb);
22165 n -= nb;
22166 if (n === 0) {
22167 if (nb === buf.length) {
22168 ++c;
22169 if (p.next) list.head = p.next;else list.head = list.tail = null;
22170 } else {
22171 list.head = p;
22172 p.data = buf.slice(nb);
22173 }
22174 break;
ab78acc6 22175 }
8b095871
IC
22176 ++c;
22177 }
22178 list.length -= c;
22179 return ret;
ab78acc6 22180}
ebd8d4e8 22181
8b095871
IC
22182function endReadable(stream) {
22183 var state = stream._readableState;
ab78acc6 22184
8b095871
IC
22185 // If we get here before consuming all the bytes, then that is a
22186 // bug in node. Should never happen.
22187 if (state.length > 0) throw new Error('"endReadable()" called on non-empty stream');
ab78acc6 22188
8b095871
IC
22189 if (!state.endEmitted) {
22190 state.ended = true;
22191 processNextTick(endReadableNT, state, stream);
22192 }
22193}
ebd8d4e8 22194
8b095871
IC
22195function endReadableNT(state, stream) {
22196 // Check that we didn't get one last unshift.
22197 if (!state.endEmitted && state.length === 0) {
22198 state.endEmitted = true;
22199 stream.readable = false;
22200 stream.emit('end');
22201 }
22202}
ebd8d4e8 22203
8b095871
IC
22204function forEach(xs, f) {
22205 for (var i = 0, l = xs.length; i < l; i++) {
22206 f(xs[i], i);
22207 }
22208}
ebd8d4e8 22209
8b095871
IC
22210function indexOf(xs, x) {
22211 for (var i = 0, l = xs.length; i < l; i++) {
22212 if (xs[i] === x) return i;
22213 }
22214 return -1;
22215}
22216}).call(this,require('_process'))
22217},{"./_stream_duplex":15,"./internal/streams/BufferList":20,"_process":13,"buffer":5,"buffer-shims":4,"core-util-is":6,"events":7,"inherits":9,"isarray":11,"process-nextick-args":12,"string_decoder/":26,"util":3}],18:[function(require,module,exports){
22218// a transform stream is a readable/writable stream where you do
22219// something with the data. Sometimes it's called a "filter",
22220// but that's not a great name for it, since that implies a thing where
22221// some bits pass through, and others are simply ignored. (That would
22222// be a valid example of a transform, of course.)
ab78acc6 22223//
8b095871
IC
22224// While the output is causally related to the input, it's not a
22225// necessarily symmetric or synchronous transformation. For example,
22226// a zlib stream might take multiple plain-text writes(), and then
22227// emit a single compressed chunk some time in the future.
ab78acc6 22228//
8b095871 22229// Here's how this works:
ab78acc6 22230//
8b095871
IC
22231// The Transform stream has all the aspects of the readable and writable
22232// stream classes. When you write(chunk), that calls _write(chunk,cb)
22233// internally, and returns false if there's a lot of pending writes
22234// buffered up. When you call read(), that calls _read(n) until
22235// there's enough pending readable data buffered up.
22236//
22237// In a transform stream, the written data is placed in a buffer. When
22238// _read(n) is called, it transforms the queued up data, calling the
22239// buffered _write cb's as it consumes chunks. If consuming a single
22240// written chunk would result in multiple output chunks, then the first
22241// outputted bit calls the readcb, and subsequent chunks just go into
22242// the read buffer, and will cause it to emit 'readable' if necessary.
22243//
22244// This way, back-pressure is actually determined by the reading side,
22245// since _read has to be called to start processing a new chunk. However,
22246// a pathological inflate type of transform can cause excessive buffering
22247// here. For example, imagine a stream where every byte of input is
22248// interpreted as an integer from 0-255, and then results in that many
22249// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in
22250// 1kb of data being output. In this case, you could write a very small
22251// amount of input, and end up with a very large amount of output. In
22252// such a pathological inflating mechanism, there'd be no way to tell
22253// the system to stop doing the transform. A single 4MB write could
22254// cause the system to run out of memory.
22255//
22256// However, even in such a pathological case, only a single written chunk
22257// would be consumed, and then the rest would wait (un-transformed) until
22258// the results of the previous transformed chunk were consumed.
ebd8d4e8 22259
8b095871 22260'use strict';
ebd8d4e8 22261
8b095871 22262module.exports = Transform;
ebd8d4e8 22263
8b095871 22264var Duplex = require('./_stream_duplex');
ebd8d4e8 22265
ab78acc6
IC
22266/*<replacement>*/
22267var util = require('core-util-is');
22268util.inherits = require('inherits');
22269/*</replacement>*/
ebd8d4e8 22270
8b095871 22271util.inherits(Transform, Duplex);
ebd8d4e8 22272
8b095871
IC
22273function TransformState(stream) {
22274 this.afterTransform = function (er, data) {
22275 return afterTransform(stream, er, data);
22276 };
ebd8d4e8 22277
8b095871
IC
22278 this.needTransform = false;
22279 this.transforming = false;
22280 this.writecb = null;
22281 this.writechunk = null;
22282 this.writeencoding = null;
22283}
ebd8d4e8 22284
8b095871
IC
22285function afterTransform(stream, er, data) {
22286 var ts = stream._transformState;
22287 ts.transforming = false;
ebd8d4e8 22288
8b095871 22289 var cb = ts.writecb;
ebd8d4e8 22290
8b095871 22291 if (!cb) return stream.emit('error', new Error('no writecb in Transform class'));
ebd8d4e8 22292
8b095871
IC
22293 ts.writechunk = null;
22294 ts.writecb = null;
ebd8d4e8 22295
8b095871 22296 if (data !== null && data !== undefined) stream.push(data);
ebd8d4e8 22297
8b095871
IC
22298 cb(er);
22299
22300 var rs = stream._readableState;
22301 rs.reading = false;
22302 if (rs.needReadable || rs.length < rs.highWaterMark) {
22303 stream._read(rs.highWaterMark);
22304 }
ebd8d4e8
IC
22305}
22306
8b095871
IC
22307function Transform(options) {
22308 if (!(this instanceof Transform)) return new Transform(options);
ebd8d4e8 22309
8b095871 22310 Duplex.call(this, options);
ebd8d4e8 22311
8b095871
IC
22312 this._transformState = new TransformState(this);
22313
22314 var stream = this;
22315
22316 // start out asking for a readable event once data is transformed.
22317 this._readableState.needReadable = true;
22318
22319 // we have implemented the _read method, and done the other things
22320 // that Readable wants before the first _read call, so unset the
22321 // sync guard flag.
22322 this._readableState.sync = false;
22323
22324 if (options) {
22325 if (typeof options.transform === 'function') this._transform = options.transform;
22326
22327 if (typeof options.flush === 'function') this._flush = options.flush;
ebd8d4e8 22328 }
8b095871
IC
22329
22330 // When the writable side finishes, then flush out anything remaining.
22331 this.once('prefinish', function () {
22332 if (typeof this._flush === 'function') this._flush(function (er, data) {
22333 done(stream, er, data);
22334 });else done(stream);
22335 });
ab78acc6 22336}
ebd8d4e8 22337
8b095871
IC
22338Transform.prototype.push = function (chunk, encoding) {
22339 this._transformState.needTransform = false;
22340 return Duplex.prototype.push.call(this, chunk, encoding);
22341};
22342
22343// This is the part where you do stuff!
22344// override this function in implementation classes.
22345// 'chunk' is an input chunk.
ab78acc6 22346//
8b095871
IC
22347// Call `push(newChunk)` to pass along transformed output
22348// to the readable side. You may call 'push' zero or more times.
ab78acc6 22349//
8b095871
IC
22350// Call `cb(err)` when you are done with this chunk. If you pass
22351// an error, then that'll put the hurt on the whole operation. If you
22352// never call cb(), then you'll never get another chunk.
22353Transform.prototype._transform = function (chunk, encoding, cb) {
22354 throw new Error('_transform() is not implemented');
22355};
ebd8d4e8 22356
8b095871
IC
22357Transform.prototype._write = function (chunk, encoding, cb) {
22358 var ts = this._transformState;
22359 ts.writecb = cb;
22360 ts.writechunk = chunk;
22361 ts.writeencoding = encoding;
22362 if (!ts.transforming) {
22363 var rs = this._readableState;
22364 if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);
22365 }
22366};
ebd8d4e8 22367
8b095871
IC
22368// Doesn't matter what the args are here.
22369// _transform does all the work.
22370// That we got here means that the readable side wants more data.
22371Transform.prototype._read = function (n) {
22372 var ts = this._transformState;
ebd8d4e8 22373
8b095871
IC
22374 if (ts.writechunk !== null && ts.writecb && !ts.transforming) {
22375 ts.transforming = true;
22376 this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
22377 } else {
22378 // mark that we need a transform, so that any data that comes in
22379 // will get processed, now that we've asked for it.
22380 ts.needTransform = true;
22381 }
22382};
ebd8d4e8 22383
8b095871
IC
22384function done(stream, er, data) {
22385 if (er) return stream.emit('error', er);
ebd8d4e8 22386
8b095871 22387 if (data !== null && data !== undefined) stream.push(data);
ebd8d4e8 22388
8b095871
IC
22389 // if there's nothing in the write buffer, then that means
22390 // that nothing more will ever be provided
22391 var ws = stream._writableState;
22392 var ts = stream._transformState;
ebd8d4e8 22393
8b095871 22394 if (ws.length) throw new Error('Calling transform done when ws.length != 0');
ebd8d4e8 22395
8b095871 22396 if (ts.transforming) throw new Error('Calling transform done when still transforming');
ebd8d4e8 22397
8b095871
IC
22398 return stream.push(null);
22399}
22400},{"./_stream_duplex":15,"core-util-is":6,"inherits":9}],19:[function(require,module,exports){
ab78acc6 22401(function (process){
8b095871
IC
22402// A bit simpler than readable streams.
22403// Implement an async ._write(chunk, encoding, cb), and it'll handle all
22404// the drain event emission and buffering.
ebd8d4e8 22405
8b095871
IC
22406'use strict';
22407
22408module.exports = Writable;
ebd8d4e8 22409
ab78acc6 22410/*<replacement>*/
8b095871 22411var processNextTick = require('process-nextick-args');
ab78acc6
IC
22412/*</replacement>*/
22413
ab78acc6 22414/*<replacement>*/
8b095871 22415var asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : processNextTick;
ab78acc6
IC
22416/*</replacement>*/
22417
ab78acc6 22418/*<replacement>*/
8b095871 22419var Duplex;
ab78acc6
IC
22420/*</replacement>*/
22421
8b095871 22422Writable.WritableState = WritableState;
ab78acc6
IC
22423
22424/*<replacement>*/
22425var util = require('core-util-is');
22426util.inherits = require('inherits');
22427/*</replacement>*/
22428
8b095871
IC
22429/*<replacement>*/
22430var internalUtil = {
22431 deprecate: require('util-deprecate')
22432};
22433/*</replacement>*/
ab78acc6 22434
8b095871
IC
22435/*<replacement>*/
22436var Stream;
22437(function () {
22438 try {
22439 Stream = require('st' + 'ream');
22440 } catch (_) {} finally {
22441 if (!Stream) Stream = require('events').EventEmitter;
22442 }
22443})();
22444/*</replacement>*/
ab78acc6 22445
8b095871 22446var Buffer = require('buffer').Buffer;
ab78acc6 22447/*<replacement>*/
8b095871 22448var bufferShim = require('buffer-shims');
ab78acc6
IC
22449/*</replacement>*/
22450
8b095871
IC
22451util.inherits(Writable, Stream);
22452
22453function nop() {}
ab78acc6 22454
8b095871
IC
22455function WriteReq(chunk, encoding, cb) {
22456 this.chunk = chunk;
22457 this.encoding = encoding;
22458 this.callback = cb;
22459 this.next = null;
22460}
ab78acc6 22461
8b095871
IC
22462function WritableState(options, stream) {
22463 Duplex = Duplex || require('./_stream_duplex');
ab78acc6
IC
22464
22465 options = options || {};
22466
8b095871
IC
22467 // object stream flag to indicate whether or not this stream
22468 // contains buffers or objects.
22469 this.objectMode = !!options.objectMode;
22470
22471 if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.writableObjectMode;
22472
22473 // the point at which write() starts returning false
22474 // Note: 0 is a valid value, means that we always return false if
22475 // the entire buffer is not flushed immediately on write()
ab78acc6 22476 var hwm = options.highWaterMark;
8b095871
IC
22477 var defaultHwm = this.objectMode ? 16 : 16 * 1024;
22478 this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;
ab78acc6
IC
22479
22480 // cast to ints.
8b095871 22481 this.highWaterMark = ~ ~this.highWaterMark;
ab78acc6 22482
8b095871
IC
22483 // drain event flag.
22484 this.needDrain = false;
22485 // at the start of calling end()
22486 this.ending = false;
22487 // when end() has been called, and returned
ab78acc6 22488 this.ended = false;
8b095871
IC
22489 // when 'finish' is emitted
22490 this.finished = false;
22491
22492 // should we decode strings into buffers before passing to _write?
22493 // this is here so that some node-core streams can optimize string
22494 // handling at a lower level.
22495 var noDecode = options.decodeStrings === false;
22496 this.decodeStrings = !noDecode;
22497
22498 // Crypto is kind of old and crusty. Historically, its default string
22499 // encoding is 'binary' so we have to make this configurable.
22500 // Everything else in the universe uses 'utf8', though.
22501 this.defaultEncoding = options.defaultEncoding || 'utf8';
22502
22503 // not an actual buffer we keep track of, but a measurement
22504 // of how much we're waiting to get pushed to some underlying
22505 // socket or file.
22506 this.length = 0;
22507
22508 // a flag to see when we're in the middle of a write.
22509 this.writing = false;
22510
22511 // when true all writes will be buffered until .uncork() call
22512 this.corked = 0;
ebd8d4e8 22513
ab78acc6
IC
22514 // a flag to be able to tell if the onwrite cb is called immediately,
22515 // or on a later tick. We set this to true at first, because any
22516 // actions that shouldn't happen until "later" should generally also
22517 // not happen before the first write call.
22518 this.sync = true;
ebd8d4e8 22519
8b095871
IC
22520 // a flag to know if we're processing previously buffered items, which
22521 // may call the _write() callback in the same tick, so that we don't
22522 // end up in an overlapped onwrite situation.
22523 this.bufferProcessing = false;
22524
22525 // the callback that's passed to _write(chunk,cb)
22526 this.onwrite = function (er) {
22527 onwrite(stream, er);
22528 };
22529
22530 // the callback that the user supplies to write(chunk,encoding,cb)
22531 this.writecb = null;
22532
22533 // the amount that is being written when _write is called.
22534 this.writelen = 0;
22535
22536 this.bufferedRequest = null;
22537 this.lastBufferedRequest = null;
22538
22539 // number of pending user-supplied write callbacks
22540 // this must be 0 before 'finish' can be emitted
22541 this.pendingcb = 0;
22542
22543 // emit prefinish if the only thing we're waiting for is _write cbs
22544 // This is relevant for synchronous Transform streams
22545 this.prefinished = false;
22546
22547 // True if the error was already emitted and should not be thrown again
22548 this.errorEmitted = false;
22549
22550 // count buffered requests
22551 this.bufferedRequestCount = 0;
22552
22553 // allocate the first CorkedRequest, there is always
22554 // one allocated and free to use, and we maintain at most two
22555 this.corkedRequestsFree = new CorkedRequest(this);
22556}
22557
22558WritableState.prototype.getBuffer = function getBuffer() {
22559 var current = this.bufferedRequest;
22560 var out = [];
22561 while (current) {
22562 out.push(current);
22563 current = current.next;
22564 }
22565 return out;
22566};
22567
22568(function () {
22569 try {
22570 Object.defineProperty(WritableState.prototype, 'buffer', {
22571 get: internalUtil.deprecate(function () {
22572 return this.getBuffer();
22573 }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.')
22574 });
22575 } catch (_) {}
22576})();
22577
22578// Test _writableState for inheritance to account for Duplex streams,
22579// whose prototype chain only points to Readable.
22580var realHasInstance;
22581if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {
22582 realHasInstance = Function.prototype[Symbol.hasInstance];
22583 Object.defineProperty(Writable, Symbol.hasInstance, {
22584 value: function (object) {
22585 if (realHasInstance.call(this, object)) return true;
22586
22587 return object && object._writableState instanceof WritableState;
22588 }
22589 });
22590} else {
22591 realHasInstance = function (object) {
22592 return object instanceof this;
22593 };
22594}
22595
22596function Writable(options) {
22597 Duplex = Duplex || require('./_stream_duplex');
22598
22599 // Writable ctor is applied to Duplexes, too.
22600 // `realHasInstance` is necessary because using plain `instanceof`
22601 // would return false, as no `_writableState` property is attached.
22602
22603 // Trying to use the custom `instanceof` for Writable here will also break the
22604 // Node.js LazyTransform implementation, which has a non-trivial getter for
22605 // `_writableState` that would lead to infinite recursion.
22606 if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {
22607 return new Writable(options);
22608 }
22609
22610 this._writableState = new WritableState(options, this);
22611
22612 // legacy.
22613 this.writable = true;
22614
22615 if (options) {
22616 if (typeof options.write === 'function') this._write = options.write;
22617
22618 if (typeof options.writev === 'function') this._writev = options.writev;
22619 }
22620
22621 Stream.call(this);
22622}
22623
22624// Otherwise people can pipe Writable streams, which is just wrong.
22625Writable.prototype.pipe = function () {
22626 this.emit('error', new Error('Cannot pipe, not readable'));
22627};
22628
22629function writeAfterEnd(stream, cb) {
22630 var er = new Error('write after end');
22631 // TODO: defer error events consistently everywhere, not just the cb
22632 stream.emit('error', er);
22633 processNextTick(cb, er);
22634}
22635
22636// If we get something that is not a buffer, string, null, or undefined,
22637// and we're not in objectMode, then that's an error.
22638// Otherwise stream chunks are all considered to be of length=1, and the
22639// watermarks determine how many objects to keep in the buffer, rather than
22640// how many bytes or characters.
22641function validChunk(stream, state, chunk, cb) {
22642 var valid = true;
22643 var er = false;
22644 // Always throw error if a null is written
22645 // if we are not in object mode then throw
22646 // if it is not a buffer, string, or undefined.
22647 if (chunk === null) {
22648 er = new TypeError('May not write null values to stream');
22649 } else if (!Buffer.isBuffer(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {
22650 er = new TypeError('Invalid non-string/buffer chunk');
22651 }
22652 if (er) {
22653 stream.emit('error', er);
22654 processNextTick(cb, er);
22655 valid = false;
22656 }
22657 return valid;
22658}
ebd8d4e8 22659
8b095871
IC
22660Writable.prototype.write = function (chunk, encoding, cb) {
22661 var state = this._writableState;
22662 var ret = false;
ab78acc6 22663
8b095871
IC
22664 if (typeof encoding === 'function') {
22665 cb = encoding;
22666 encoding = null;
22667 }
ab78acc6 22668
8b095871 22669 if (Buffer.isBuffer(chunk)) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;
ab78acc6 22670
8b095871 22671 if (typeof cb !== 'function') cb = nop;
ab78acc6 22672
8b095871
IC
22673 if (state.ended) writeAfterEnd(this, cb);else if (validChunk(this, state, chunk, cb)) {
22674 state.pendingcb++;
22675 ret = writeOrBuffer(this, state, chunk, encoding, cb);
22676 }
ab78acc6 22677
8b095871
IC
22678 return ret;
22679};
ab78acc6 22680
8b095871
IC
22681Writable.prototype.cork = function () {
22682 var state = this._writableState;
ab78acc6 22683
8b095871
IC
22684 state.corked++;
22685};
ebd8d4e8 22686
8b095871
IC
22687Writable.prototype.uncork = function () {
22688 var state = this._writableState;
ab78acc6 22689
8b095871
IC
22690 if (state.corked) {
22691 state.corked--;
ab78acc6 22692
8b095871
IC
22693 if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);
22694 }
22695};
ab78acc6 22696
8b095871
IC
22697Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {
22698 // node::ParseEncoding() requires lower case.
22699 if (typeof encoding === 'string') encoding = encoding.toLowerCase();
22700 if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding);
22701 this._writableState.defaultEncoding = encoding;
22702 return this;
22703};
ab78acc6 22704
8b095871
IC
22705function decodeChunk(state, chunk, encoding) {
22706 if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {
22707 chunk = bufferShim.from(chunk, encoding);
22708 }
22709 return chunk;
ab78acc6
IC
22710}
22711
8b095871
IC
22712// if we're already writing something, then just put this
22713// in the queue, and wait our turn. Otherwise, call _write
22714// If we return false, then we need a drain event, so set that flag.
22715function writeOrBuffer(stream, state, chunk, encoding, cb) {
22716 chunk = decodeChunk(state, chunk, encoding);
ab78acc6 22717
8b095871
IC
22718 if (Buffer.isBuffer(chunk)) encoding = 'buffer';
22719 var len = state.objectMode ? 1 : chunk.length;
ebd8d4e8 22720
8b095871 22721 state.length += len;
ebd8d4e8 22722
8b095871
IC
22723 var ret = state.length < state.highWaterMark;
22724 // we must ensure that previous needDrain will not be reset to false.
22725 if (!ret) state.needDrain = true;
ebd8d4e8 22726
8b095871
IC
22727 if (state.writing || state.corked) {
22728 var last = state.lastBufferedRequest;
22729 state.lastBufferedRequest = new WriteReq(chunk, encoding, cb);
22730 if (last) {
22731 last.next = state.lastBufferedRequest;
ebd8d4e8 22732 } else {
8b095871
IC
22733 state.bufferedRequest = state.lastBufferedRequest;
22734 }
22735 state.bufferedRequestCount += 1;
22736 } else {
22737 doWrite(stream, state, false, len, chunk, encoding, cb);
22738 }
ab78acc6 22739
8b095871
IC
22740 return ret;
22741}
ab78acc6 22742
8b095871
IC
22743function doWrite(stream, state, writev, len, chunk, encoding, cb) {
22744 state.writelen = len;
22745 state.writecb = cb;
22746 state.writing = true;
22747 state.sync = true;
22748 if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);
22749 state.sync = false;
22750}
ab78acc6 22751
8b095871
IC
22752function onwriteError(stream, state, sync, er, cb) {
22753 --state.pendingcb;
22754 if (sync) processNextTick(cb, er);else cb(er);
ab78acc6 22755
8b095871
IC
22756 stream._writableState.errorEmitted = true;
22757 stream.emit('error', er);
22758}
ebd8d4e8 22759
8b095871
IC
22760function onwriteStateUpdate(state) {
22761 state.writing = false;
22762 state.writecb = null;
22763 state.length -= state.writelen;
22764 state.writelen = 0;
ab78acc6 22765}
ebd8d4e8 22766
8b095871
IC
22767function onwrite(stream, er) {
22768 var state = stream._writableState;
22769 var sync = state.sync;
22770 var cb = state.writecb;
ab78acc6 22771
8b095871 22772 onwriteStateUpdate(state);
ab78acc6 22773
8b095871
IC
22774 if (er) onwriteError(stream, state, sync, er, cb);else {
22775 // Check if we're actually ready to finish, but don't emit yet
22776 var finished = needFinish(state);
22777
22778 if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {
22779 clearBuffer(stream, state);
22780 }
22781
22782 if (sync) {
22783 /*<replacement>*/
22784 asyncWrite(afterWrite, stream, state, finished, cb);
22785 /*</replacement>*/
22786 } else {
22787 afterWrite(stream, state, finished, cb);
22788 }
22789 }
ab78acc6
IC
22790}
22791
8b095871
IC
22792function afterWrite(stream, state, finished, cb) {
22793 if (!finished) onwriteDrain(stream, state);
22794 state.pendingcb--;
22795 cb();
22796 finishMaybe(stream, state);
22797}
ab78acc6 22798
8b095871
IC
22799// Must force callback to be called on nextTick, so that we don't
22800// emit 'drain' before the write() consumer gets the 'false' return
22801// value, and has a chance to attach a 'drain' listener.
22802function onwriteDrain(stream, state) {
22803 if (state.length === 0 && state.needDrain) {
22804 state.needDrain = false;
22805 stream.emit('drain');
ebd8d4e8 22806 }
ebd8d4e8 22807}
ebd8d4e8 22808
8b095871
IC
22809// if there's something in the buffer waiting, then process it
22810function clearBuffer(stream, state) {
22811 state.bufferProcessing = true;
22812 var entry = state.bufferedRequest;
ebd8d4e8 22813
8b095871
IC
22814 if (stream._writev && entry && entry.next) {
22815 // Fast case, write everything using _writev()
22816 var l = state.bufferedRequestCount;
22817 var buffer = new Array(l);
22818 var holder = state.corkedRequestsFree;
22819 holder.entry = entry;
ebd8d4e8 22820
8b095871
IC
22821 var count = 0;
22822 while (entry) {
22823 buffer[count] = entry;
22824 entry = entry.next;
22825 count += 1;
22826 }
ebd8d4e8 22827
8b095871 22828 doWrite(stream, state, true, state.length, buffer, '', holder.finish);
ebd8d4e8 22829
8b095871
IC
22830 // doWrite is almost always async, defer these to save a bit of time
22831 // as the hot path ends with doWrite
22832 state.pendingcb++;
22833 state.lastBufferedRequest = null;
22834 if (holder.next) {
22835 state.corkedRequestsFree = holder.next;
22836 holder.next = null;
22837 } else {
22838 state.corkedRequestsFree = new CorkedRequest(state);
22839 }
22840 } else {
22841 // Slow case, write chunks one-by-one
22842 while (entry) {
22843 var chunk = entry.chunk;
22844 var encoding = entry.encoding;
22845 var cb = entry.callback;
22846 var len = state.objectMode ? 1 : chunk.length;
ebd8d4e8 22847
8b095871
IC
22848 doWrite(stream, state, false, len, chunk, encoding, cb);
22849 entry = entry.next;
22850 // if we didn't call the onwrite immediately, then
22851 // it means that we need to wait until it does.
22852 // also, that means that the chunk and cb are currently
22853 // being processed, so move the buffer counter past them.
22854 if (state.writing) {
22855 break;
22856 }
22857 }
22858
22859 if (entry === null) state.lastBufferedRequest = null;
ebd8d4e8 22860 }
ab78acc6 22861
8b095871
IC
22862 state.bufferedRequestCount = 0;
22863 state.bufferedRequest = entry;
22864 state.bufferProcessing = false;
ebd8d4e8
IC
22865}
22866
8b095871
IC
22867Writable.prototype._write = function (chunk, encoding, cb) {
22868 cb(new Error('_write() is not implemented'));
22869};
ebd8d4e8 22870
8b095871 22871Writable.prototype._writev = null;
ab78acc6 22872
8b095871
IC
22873Writable.prototype.end = function (chunk, encoding, cb) {
22874 var state = this._writableState;
22875
22876 if (typeof chunk === 'function') {
22877 cb = chunk;
22878 chunk = null;
22879 encoding = null;
22880 } else if (typeof encoding === 'function') {
22881 cb = encoding;
22882 encoding = null;
ab78acc6
IC
22883 }
22884
8b095871 22885 if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);
ab78acc6 22886
8b095871
IC
22887 // .end() fully uncorks
22888 if (state.corked) {
22889 state.corked = 1;
22890 this.uncork();
ab78acc6
IC
22891 }
22892
8b095871
IC
22893 // ignore unnecessary end() calls.
22894 if (!state.ending && !state.finished) endWritable(this, state, cb);
22895};
ab78acc6 22896
8b095871
IC
22897function needFinish(state) {
22898 return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;
22899}
ab78acc6 22900
8b095871
IC
22901function prefinish(stream, state) {
22902 if (!state.prefinished) {
22903 state.prefinished = true;
22904 stream.emit('prefinish');
ab78acc6 22905 }
8b095871 22906}
ab78acc6 22907
8b095871
IC
22908function finishMaybe(stream, state) {
22909 var need = needFinish(state);
22910 if (need) {
22911 if (state.pendingcb === 0) {
22912 prefinish(stream, state);
22913 state.finished = true;
22914 stream.emit('finish');
22915 } else {
22916 prefinish(stream, state);
22917 }
ab78acc6 22918 }
8b095871
IC
22919 return need;
22920}
ab78acc6 22921
8b095871
IC
22922function endWritable(stream, state, cb) {
22923 state.ending = true;
22924 finishMaybe(stream, state);
22925 if (cb) {
22926 if (state.finished) processNextTick(cb);else stream.once('finish', cb);
ab78acc6 22927 }
8b095871
IC
22928 state.ended = true;
22929 stream.writable = false;
22930}
ab78acc6 22931
8b095871
IC
22932// It seems a linked list but it is not
22933// there will be only 2 of these for each stream
22934function CorkedRequest(state) {
22935 var _this = this;
ab78acc6 22936
8b095871
IC
22937 this.next = null;
22938 this.entry = null;
ebd8d4e8 22939
8b095871
IC
22940 this.finish = function (err) {
22941 var entry = _this.entry;
22942 _this.entry = null;
22943 while (entry) {
22944 var cb = entry.callback;
22945 state.pendingcb--;
22946 cb(err);
22947 entry = entry.next;
22948 }
22949 if (state.corkedRequestsFree) {
22950 state.corkedRequestsFree.next = _this;
22951 } else {
22952 state.corkedRequestsFree = _this;
22953 }
22954 };
22955}
22956}).call(this,require('_process'))
22957},{"./_stream_duplex":15,"_process":13,"buffer":5,"buffer-shims":4,"core-util-is":6,"events":7,"inherits":9,"process-nextick-args":12,"util-deprecate":27}],20:[function(require,module,exports){
22958'use strict';
ebd8d4e8 22959
8b095871
IC
22960var Buffer = require('buffer').Buffer;
22961/*<replacement>*/
22962var bufferShim = require('buffer-shims');
22963/*</replacement>*/
ebd8d4e8 22964
8b095871 22965module.exports = BufferList;
ebd8d4e8 22966
8b095871
IC
22967function BufferList() {
22968 this.head = null;
22969 this.tail = null;
22970 this.length = 0;
22971}
ab78acc6 22972
8b095871
IC
22973BufferList.prototype.push = function (v) {
22974 var entry = { data: v, next: null };
22975 if (this.length > 0) this.tail.next = entry;else this.head = entry;
22976 this.tail = entry;
22977 ++this.length;
22978};
22979
22980BufferList.prototype.unshift = function (v) {
22981 var entry = { data: v, next: this.head };
22982 if (this.length === 0) this.tail = entry;
22983 this.head = entry;
22984 ++this.length;
22985};
ab78acc6 22986
8b095871
IC
22987BufferList.prototype.shift = function () {
22988 if (this.length === 0) return;
22989 var ret = this.head.data;
22990 if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;
22991 --this.length;
ab78acc6
IC
22992 return ret;
22993};
22994
8b095871
IC
22995BufferList.prototype.clear = function () {
22996 this.head = this.tail = null;
22997 this.length = 0;
22998};
ebd8d4e8 22999
8b095871
IC
23000BufferList.prototype.join = function (s) {
23001 if (this.length === 0) return '';
23002 var p = this.head;
23003 var ret = '' + p.data;
23004 while (p = p.next) {
23005 ret += s + p.data;
23006 }return ret;
23007};
ebd8d4e8 23008
8b095871
IC
23009BufferList.prototype.concat = function (n) {
23010 if (this.length === 0) return bufferShim.alloc(0);
23011 if (this.length === 1) return this.head.data;
23012 var ret = bufferShim.allocUnsafe(n >>> 0);
23013 var p = this.head;
23014 var i = 0;
23015 while (p) {
23016 p.data.copy(ret, i);
23017 i += p.data.length;
23018 p = p.next;
ebd8d4e8 23019 }
8b095871
IC
23020 return ret;
23021};
23022},{"buffer":5,"buffer-shims":4}],21:[function(require,module,exports){
23023module.exports = require("./lib/_stream_passthrough.js")
ebd8d4e8 23024
8b095871
IC
23025},{"./lib/_stream_passthrough.js":16}],22:[function(require,module,exports){
23026(function (process){
23027var Stream = (function (){
23028 try {
23029 return require('st' + 'ream'); // hack to fix a circular dependency issue when used with browserify
23030 } catch(_){}
23031}());
23032exports = module.exports = require('./lib/_stream_readable.js');
23033exports.Stream = Stream || exports;
23034exports.Readable = exports;
23035exports.Writable = require('./lib/_stream_writable.js');
23036exports.Duplex = require('./lib/_stream_duplex.js');
23037exports.Transform = require('./lib/_stream_transform.js');
23038exports.PassThrough = require('./lib/_stream_passthrough.js');
ab78acc6 23039
8b095871
IC
23040if (!process.browser && process.env.READABLE_STREAM === 'disable' && Stream) {
23041 module.exports = Stream;
ab78acc6 23042}
ebd8d4e8 23043
8b095871
IC
23044}).call(this,require('_process'))
23045},{"./lib/_stream_duplex.js":15,"./lib/_stream_passthrough.js":16,"./lib/_stream_readable.js":17,"./lib/_stream_transform.js":18,"./lib/_stream_writable.js":19,"_process":13}],23:[function(require,module,exports){
23046module.exports = require("./lib/_stream_transform.js")
ebd8d4e8 23047
8b095871
IC
23048},{"./lib/_stream_transform.js":18}],24:[function(require,module,exports){
23049module.exports = require("./lib/_stream_writable.js")
ab78acc6 23050
8b095871
IC
23051},{"./lib/_stream_writable.js":19}],25:[function(require,module,exports){
23052// Copyright Joyent, Inc. and other Node contributors.
23053//
23054// Permission is hereby granted, free of charge, to any person obtaining a
23055// copy of this software and associated documentation files (the
23056// "Software"), to deal in the Software without restriction, including
23057// without limitation the rights to use, copy, modify, merge, publish,
23058// distribute, sublicense, and/or sell copies of the Software, and to permit
23059// persons to whom the Software is furnished to do so, subject to the
23060// following conditions:
23061//
23062// The above copyright notice and this permission notice shall be included
23063// in all copies or substantial portions of the Software.
23064//
23065// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
23066// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
23067// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
23068// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
23069// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
23070// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
23071// USE OR OTHER DEALINGS IN THE SOFTWARE.
23072
23073module.exports = Stream;
23074
23075var EE = require('events').EventEmitter;
23076var inherits = require('inherits');
23077
23078inherits(Stream, EE);
23079Stream.Readable = require('readable-stream/readable.js');
23080Stream.Writable = require('readable-stream/writable.js');
23081Stream.Duplex = require('readable-stream/duplex.js');
23082Stream.Transform = require('readable-stream/transform.js');
23083Stream.PassThrough = require('readable-stream/passthrough.js');
ebd8d4e8 23084
8b095871
IC
23085// Backwards-compat with node 0.4.x
23086Stream.Stream = Stream;
ebd8d4e8 23087
ab78acc6 23088
ab78acc6 23089
8b095871
IC
23090// old-style streams. Note that the pipe method (the only relevant
23091// part of this class) is overridden in the Readable class.
ebd8d4e8 23092
8b095871
IC
23093function Stream() {
23094 EE.call(this);
23095}
ebd8d4e8 23096
8b095871
IC
23097Stream.prototype.pipe = function(dest, options) {
23098 var source = this;
ab78acc6 23099
8b095871
IC
23100 function ondata(chunk) {
23101 if (dest.writable) {
23102 if (false === dest.write(chunk) && source.pause) {
23103 source.pause();
23104 }
ab78acc6
IC
23105 }
23106 }
23107
8b095871
IC
23108 source.on('data', ondata);
23109
23110 function ondrain() {
23111 if (source.readable && source.resume) {
23112 source.resume();
23113 }
ab78acc6
IC
23114 }
23115
ab78acc6
IC
23116 dest.on('drain', ondrain);
23117
8b095871
IC
23118 // If the 'end' option is not supplied, dest.end() will be called when
23119 // source gets the 'end' or 'close' events. Only dest.end() once.
23120 if (!dest._isStdio && (!options || options.end !== false)) {
23121 source.on('end', onend);
23122 source.on('close', onclose);
ab78acc6
IC
23123 }
23124
8b095871
IC
23125 var didOnEnd = false;
23126 function onend() {
23127 if (didOnEnd) return;
23128 didOnEnd = true;
ab78acc6 23129
8b095871 23130 dest.end();
ab78acc6 23131 }
ab78acc6
IC
23132
23133
ab78acc6 23134 function onclose() {
8b095871
IC
23135 if (didOnEnd) return;
23136 didOnEnd = true;
ebd8d4e8 23137
8b095871 23138 if (typeof dest.destroy === 'function') dest.destroy();
ebd8d4e8
IC
23139 }
23140
8b095871
IC
23141 // don't leave dangling pipes when there are errors.
23142 function onerror(er) {
23143 cleanup();
23144 if (EE.listenerCount(this, 'error') === 0) {
23145 throw er; // Unhandled stream error in pipe.
23146 }
ebd8d4e8
IC
23147 }
23148
8b095871
IC
23149 source.on('error', onerror);
23150 dest.on('error', onerror);
ab78acc6 23151
8b095871
IC
23152 // remove all the event listeners that were added.
23153 function cleanup() {
23154 source.removeListener('data', ondata);
23155 dest.removeListener('drain', ondrain);
ab78acc6 23156
8b095871
IC
23157 source.removeListener('end', onend);
23158 source.removeListener('close', onclose);
ab78acc6 23159
8b095871
IC
23160 source.removeListener('error', onerror);
23161 dest.removeListener('error', onerror);
ab78acc6 23162
8b095871
IC
23163 source.removeListener('end', cleanup);
23164 source.removeListener('close', cleanup);
ab78acc6 23165
8b095871
IC
23166 dest.removeListener('close', cleanup);
23167 }
ab78acc6 23168
8b095871
IC
23169 source.on('end', cleanup);
23170 source.on('close', cleanup);
ab78acc6 23171
8b095871 23172 dest.on('close', cleanup);
ebd8d4e8 23173
8b095871 23174 dest.emit('pipe', source);
ab78acc6 23175
8b095871
IC
23176 // Allow for unix-like usage: A.pipe(B).pipe(C)
23177 return dest;
23178};
ab78acc6 23179
8b095871
IC
23180},{"events":7,"inherits":9,"readable-stream/duplex.js":14,"readable-stream/passthrough.js":21,"readable-stream/readable.js":22,"readable-stream/transform.js":23,"readable-stream/writable.js":24}],26:[function(require,module,exports){
23181// Copyright Joyent, Inc. and other Node contributors.
23182//
23183// Permission is hereby granted, free of charge, to any person obtaining a
23184// copy of this software and associated documentation files (the
23185// "Software"), to deal in the Software without restriction, including
23186// without limitation the rights to use, copy, modify, merge, publish,
23187// distribute, sublicense, and/or sell copies of the Software, and to permit
23188// persons to whom the Software is furnished to do so, subject to the
23189// following conditions:
23190//
23191// The above copyright notice and this permission notice shall be included
23192// in all copies or substantial portions of the Software.
23193//
23194// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
23195// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
23196// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
23197// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
23198// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
23199// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
23200// USE OR OTHER DEALINGS IN THE SOFTWARE.
23201
23202var Buffer = require('buffer').Buffer;
ebd8d4e8 23203
8b095871
IC
23204var isBufferEncoding = Buffer.isEncoding
23205 || function(encoding) {
23206 switch (encoding && encoding.toLowerCase()) {
23207 case 'hex': case 'utf8': case 'utf-8': case 'ascii': case 'binary': case 'base64': case 'ucs2': case 'ucs-2': case 'utf16le': case 'utf-16le': case 'raw': return true;
23208 default: return false;
23209 }
23210 }
ab78acc6 23211
ab78acc6 23212
8b095871
IC
23213function assertEncoding(encoding) {
23214 if (encoding && !isBufferEncoding(encoding)) {
23215 throw new Error('Unknown encoding: ' + encoding);
23216 }
23217}
ebd8d4e8 23218
8b095871
IC
23219// StringDecoder provides an interface for efficiently splitting a series of
23220// buffers into a series of JS strings without breaking apart multi-byte
23221// characters. CESU-8 is handled as part of the UTF-8 encoding.
23222//
23223// @TODO Handling all encodings inside a single object makes it very difficult
23224// to reason about this code, so it should be split up in the future.
23225// @TODO There should be a utf8-strict encoding that rejects invalid UTF-8 code
23226// points as used by CESU-8.
23227var StringDecoder = exports.StringDecoder = function(encoding) {
23228 this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, '');
23229 assertEncoding(encoding);
23230 switch (this.encoding) {
23231 case 'utf8':
23232 // CESU-8 represents each of Surrogate Pair by 3-bytes
23233 this.surrogateSize = 3;
23234 break;
23235 case 'ucs2':
23236 case 'utf16le':
23237 // UTF-16 represents each of Surrogate Pair by 2-bytes
23238 this.surrogateSize = 2;
23239 this.detectIncompleteChar = utf16DetectIncompleteChar;
23240 break;
23241 case 'base64':
23242 // Base-64 stores 3 bytes in 4 chars, and pads the remainder.
23243 this.surrogateSize = 3;
23244 this.detectIncompleteChar = base64DetectIncompleteChar;
23245 break;
23246 default:
23247 this.write = passThroughWrite;
23248 return;
23249 }
23250
23251 // Enough space to store all bytes of a single character. UTF-8 needs 4
23252 // bytes, but CESU-8 may require up to 6 (3 bytes per surrogate).
23253 this.charBuffer = new Buffer(6);
23254 // Number of bytes received for the current incomplete multi-byte character.
23255 this.charReceived = 0;
23256 // Number of bytes expected for the current incomplete multi-byte character.
23257 this.charLength = 0;
ab78acc6
IC
23258};
23259
ab78acc6 23260
8b095871
IC
23261// write decodes the given buffer and returns it as JS string that is
23262// guaranteed to not contain any partial multi-byte characters. Any partial
23263// character found at the end of the buffer is buffered up, and will be
23264// returned when calling write again with the remaining bytes.
23265//
23266// Note: Converting a Buffer containing an orphan surrogate to a String
23267// currently works, but converting a String to a Buffer (via `new Buffer`, or
23268// Buffer#write) will replace incomplete surrogates with the unicode
23269// replacement character. See https://codereview.chromium.org/121173009/ .
23270StringDecoder.prototype.write = function(buffer) {
23271 var charStr = '';
23272 // if our last write ended with an incomplete multibyte character
23273 while (this.charLength) {
23274 // determine how many remaining bytes this buffer has to offer for this char
23275 var available = (buffer.length >= this.charLength - this.charReceived) ?
23276 this.charLength - this.charReceived :
23277 buffer.length;
ab78acc6 23278
8b095871
IC
23279 // add the new bytes to the char buffer
23280 buffer.copy(this.charBuffer, this.charReceived, 0, available);
23281 this.charReceived += available;
23282
23283 if (this.charReceived < this.charLength) {
23284 // still not enough chars in this buffer? wait for more ...
23285 return '';
ebd8d4e8 23286 }
ebd8d4e8 23287
8b095871
IC
23288 // remove bytes belonging to the current character from the buffer
23289 buffer = buffer.slice(available, buffer.length);
ab78acc6 23290
8b095871
IC
23291 // get the character that was split
23292 charStr = this.charBuffer.slice(0, this.charLength).toString(this.encoding);
23293
23294 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
23295 var charCode = charStr.charCodeAt(charStr.length - 1);
23296 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
23297 this.charLength += this.surrogateSize;
23298 charStr = '';
23299 continue;
ab78acc6 23300 }
8b095871 23301 this.charReceived = this.charLength = 0;
ebd8d4e8 23302
8b095871
IC
23303 // if there are no more bytes in this buffer, just emit our char
23304 if (buffer.length === 0) {
23305 return charStr;
23306 }
23307 break;
ebd8d4e8 23308 }
ebd8d4e8 23309
8b095871
IC
23310 // determine and set charLength / charReceived
23311 this.detectIncompleteChar(buffer);
ebd8d4e8 23312
8b095871
IC
23313 var end = buffer.length;
23314 if (this.charLength) {
23315 // buffer the incomplete character bytes we got
23316 buffer.copy(this.charBuffer, 0, buffer.length - this.charReceived, end);
23317 end -= this.charReceived;
ab78acc6 23318 }
ebd8d4e8 23319
8b095871
IC
23320 charStr += buffer.toString(this.encoding, 0, end);
23321
23322 var end = charStr.length - 1;
23323 var charCode = charStr.charCodeAt(end);
23324 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
23325 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
23326 var size = this.surrogateSize;
23327 this.charLength += size;
23328 this.charReceived += size;
23329 this.charBuffer.copy(this.charBuffer, size, 0, size);
23330 buffer.copy(this.charBuffer, 0, 0, size);
23331 return charStr.substring(0, end);
ab78acc6 23332 }
ebd8d4e8 23333
8b095871
IC
23334 // or just emit the charStr
23335 return charStr;
23336};
ebd8d4e8 23337
8b095871
IC
23338// detectIncompleteChar determines if there is an incomplete UTF-8 character at
23339// the end of the given buffer. If so, it sets this.charLength to the byte
23340// length that character, and sets this.charReceived to the number of bytes
23341// that are available for this character.
23342StringDecoder.prototype.detectIncompleteChar = function(buffer) {
23343 // determine how many bytes we have to check at the end of this buffer
23344 var i = (buffer.length >= 3) ? 3 : buffer.length;
ab78acc6 23345
8b095871
IC
23346 // Figure out if one of the last i bytes of our buffer announces an
23347 // incomplete char.
23348 for (; i > 0; i--) {
23349 var c = buffer[buffer.length - i];
ebd8d4e8 23350
8b095871 23351 // See http://en.wikipedia.org/wiki/UTF-8#Description
ebd8d4e8 23352
8b095871
IC
23353 // 110XXXXX
23354 if (i == 1 && c >> 5 == 0x06) {
23355 this.charLength = 2;
23356 break;
ebd8d4e8 23357 }
ab78acc6 23358
8b095871
IC
23359 // 1110XXXX
23360 if (i <= 2 && c >> 4 == 0x0E) {
23361 this.charLength = 3;
23362 break;
23363 }
23364
23365 // 11110XXX
23366 if (i <= 3 && c >> 3 == 0x1E) {
23367 this.charLength = 4;
23368 break;
ebd8d4e8
IC
23369 }
23370 }
8b095871
IC
23371 this.charReceived = i;
23372};
ab78acc6 23373
8b095871
IC
23374StringDecoder.prototype.end = function(buffer) {
23375 var res = '';
23376 if (buffer && buffer.length)
23377 res = this.write(buffer);
ab78acc6 23378
8b095871
IC
23379 if (this.charReceived) {
23380 var cr = this.charReceived;
23381 var buf = this.charBuffer;
23382 var enc = this.encoding;
23383 res += buf.slice(0, cr).toString(enc);
23384 }
ab78acc6 23385
8b095871 23386 return res;
ab78acc6
IC
23387};
23388
8b095871
IC
23389function passThroughWrite(buffer) {
23390 return buffer.toString(this.encoding);
23391}
ab78acc6 23392
8b095871
IC
23393function utf16DetectIncompleteChar(buffer) {
23394 this.charReceived = buffer.length % 2;
23395 this.charLength = this.charReceived ? 2 : 0;
23396}
ab78acc6 23397
8b095871
IC
23398function base64DetectIncompleteChar(buffer) {
23399 this.charReceived = buffer.length % 3;
23400 this.charLength = this.charReceived ? 3 : 0;
23401}
ab78acc6 23402
8b095871
IC
23403},{"buffer":5}],27:[function(require,module,exports){
23404(function (global){
ab78acc6 23405
8b095871
IC
23406/**
23407 * Module exports.
23408 */
ebd8d4e8 23409
8b095871 23410module.exports = deprecate;
ebd8d4e8 23411
8b095871
IC
23412/**
23413 * Mark that a method should not be used.
23414 * Returns a modified function which warns once by default.
23415 *
23416 * If `localStorage.noDeprecation = true` is set, then it is a no-op.
23417 *
23418 * If `localStorage.throwDeprecation = true` is set, then deprecated functions
23419 * will throw an Error when invoked.
23420 *
23421 * If `localStorage.traceDeprecation = true` is set, then deprecated functions
23422 * will invoke `console.trace()` instead of `console.error()`.
23423 *
23424 * @param {Function} fn - the function to deprecate
23425 * @param {String} msg - the string to print to the console when `fn` is invoked
23426 * @returns {Function} a new "deprecated" version of `fn`
23427 * @api public
23428 */
ebd8d4e8 23429
8b095871
IC
23430function deprecate (fn, msg) {
23431 if (config('noDeprecation')) {
23432 return fn;
23433 }
ebd8d4e8 23434
8b095871
IC
23435 var warned = false;
23436 function deprecated() {
23437 if (!warned) {
23438 if (config('throwDeprecation')) {
23439 throw new Error(msg);
23440 } else if (config('traceDeprecation')) {
23441 console.trace(msg);
23442 } else {
23443 console.warn(msg);
ab78acc6 23444 }
8b095871 23445 warned = true;
ab78acc6 23446 }
8b095871 23447 return fn.apply(this, arguments);
ebd8d4e8
IC
23448 }
23449
8b095871 23450 return deprecated;
ebd8d4e8
IC
23451}
23452
8b095871
IC
23453/**
23454 * Checks `localStorage` for boolean values for the given `name`.
23455 *
23456 * @param {String} name
23457 * @returns {Boolean}
23458 * @api private
23459 */
ebd8d4e8 23460
8b095871
IC
23461function config (name) {
23462 // accessing global.localStorage can trigger a DOMException in sandboxed iframes
23463 try {
23464 if (!global.localStorage) return false;
23465 } catch (_) {
23466 return false;
ab78acc6 23467 }
8b095871
IC
23468 var val = global.localStorage[name];
23469 if (null == val) return false;
23470 return String(val).toLowerCase() === 'true';
ebd8d4e8 23471}
ebd8d4e8 23472
8b095871
IC
23473}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
23474},{}],28:[function(require,module,exports){
23475arguments[4][9][0].apply(exports,arguments)
23476},{"dup":9}],29:[function(require,module,exports){
23477module.exports = function isBuffer(arg) {
23478 return arg && typeof arg === 'object'
23479 && typeof arg.copy === 'function'
23480 && typeof arg.fill === 'function'
23481 && typeof arg.readUInt8 === 'function';
ebd8d4e8 23482}
8b095871
IC
23483},{}],30:[function(require,module,exports){
23484(function (process,global){
ab78acc6
IC
23485// Copyright Joyent, Inc. and other Node contributors.
23486//
23487// Permission is hereby granted, free of charge, to any person obtaining a
23488// copy of this software and associated documentation files (the
23489// "Software"), to deal in the Software without restriction, including
23490// without limitation the rights to use, copy, modify, merge, publish,
23491// distribute, sublicense, and/or sell copies of the Software, and to permit
23492// persons to whom the Software is furnished to do so, subject to the
23493// following conditions:
23494//
23495// The above copyright notice and this permission notice shall be included
23496// in all copies or substantial portions of the Software.
23497//
23498// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
23499// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
23500// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
23501// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
23502// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
23503// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
23504// USE OR OTHER DEALINGS IN THE SOFTWARE.
ebd8d4e8 23505
8b095871
IC
23506var formatRegExp = /%[sdj%]/g;
23507exports.format = function(f) {
23508 if (!isString(f)) {
23509 var objects = [];
23510 for (var i = 0; i < arguments.length; i++) {
23511 objects.push(inspect(arguments[i]));
23512 }
23513 return objects.join(' ');
23514 }
ebd8d4e8 23515
8b095871
IC
23516 var i = 1;
23517 var args = arguments;
23518 var len = args.length;
23519 var str = String(f).replace(formatRegExp, function(x) {
23520 if (x === '%%') return '%';
23521 if (i >= len) return x;
23522 switch (x) {
23523 case '%s': return String(args[i++]);
23524 case '%d': return Number(args[i++]);
23525 case '%j':
23526 try {
23527 return JSON.stringify(args[i++]);
23528 } catch (_) {
23529 return '[Circular]';
23530 }
23531 default:
23532 return x;
23533 }
23534 });
23535 for (var x = args[i]; i < len; x = args[++i]) {
23536 if (isNull(x) || !isObject(x)) {
23537 str += ' ' + x;
23538 } else {
23539 str += ' ' + inspect(x);
23540 }
23541 }
23542 return str;
23543};
ebd8d4e8 23544
ebd8d4e8 23545
8b095871
IC
23546// Mark that a method should not be used.
23547// Returns a modified function which warns once by default.
23548// If --no-deprecation is set, then it is a no-op.
23549exports.deprecate = function(fn, msg) {
23550 // Allow for deprecating things in the process of starting up.
23551 if (isUndefined(global.process)) {
23552 return function() {
23553 return exports.deprecate(fn, msg).apply(this, arguments);
23554 };
23555 }
23556
23557 if (process.noDeprecation === true) {
23558 return fn;
23559 }
23560
23561 var warned = false;
23562 function deprecated() {
23563 if (!warned) {
23564 if (process.throwDeprecation) {
23565 throw new Error(msg);
23566 } else if (process.traceDeprecation) {
23567 console.trace(msg);
23568 } else {
23569 console.error(msg);
23570 }
23571 warned = true;
23572 }
23573 return fn.apply(this, arguments);
23574 }
23575
23576 return deprecated;
23577};
ebd8d4e8 23578
ab78acc6 23579
8b095871
IC
23580var debugs = {};
23581var debugEnviron;
23582exports.debuglog = function(set) {
23583 if (isUndefined(debugEnviron))
23584 debugEnviron = process.env.NODE_DEBUG || '';
23585 set = set.toUpperCase();
23586 if (!debugs[set]) {
23587 if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
23588 var pid = process.pid;
23589 debugs[set] = function() {
23590 var msg = exports.format.apply(exports, arguments);
23591 console.error('%s %d: %s', set, pid, msg);
23592 };
23593 } else {
23594 debugs[set] = function() {};
23595 }
23596 }
23597 return debugs[set];
23598};
ab78acc6
IC
23599
23600
8b095871
IC
23601/**
23602 * Echos the value of a value. Trys to print the value out
23603 * in the best way possible given the different types.
23604 *
23605 * @param {Object} obj The object to print out.
23606 * @param {Object} opts Optional options object that alters the output.
23607 */
23608/* legacy: obj, showHidden, depth, colors*/
23609function inspect(obj, opts) {
23610 // default options
23611 var ctx = {
23612 seen: [],
23613 stylize: stylizeNoColor
ab78acc6 23614 };
8b095871
IC
23615 // legacy...
23616 if (arguments.length >= 3) ctx.depth = arguments[2];
23617 if (arguments.length >= 4) ctx.colors = arguments[3];
23618 if (isBoolean(opts)) {
23619 // legacy...
23620 ctx.showHidden = opts;
23621 } else if (opts) {
23622 // got an "options" object
23623 exports._extend(ctx, opts);
23624 }
23625 // set default options
23626 if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
23627 if (isUndefined(ctx.depth)) ctx.depth = 2;
23628 if (isUndefined(ctx.colors)) ctx.colors = false;
23629 if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
23630 if (ctx.colors) ctx.stylize = stylizeWithColor;
23631 return formatValue(ctx, obj, ctx.depth);
ebd8d4e8 23632}
8b095871 23633exports.inspect = inspect;
ebd8d4e8 23634
ab78acc6 23635
8b095871
IC
23636// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
23637inspect.colors = {
23638 'bold' : [1, 22],
23639 'italic' : [3, 23],
23640 'underline' : [4, 24],
23641 'inverse' : [7, 27],
23642 'white' : [37, 39],
23643 'grey' : [90, 39],
23644 'black' : [30, 39],
23645 'blue' : [34, 39],
23646 'cyan' : [36, 39],
23647 'green' : [32, 39],
23648 'magenta' : [35, 39],
23649 'red' : [31, 39],
23650 'yellow' : [33, 39]
23651};
ab78acc6 23652
8b095871
IC
23653// Don't use 'blue' not visible on cmd.exe
23654inspect.styles = {
23655 'special': 'cyan',
23656 'number': 'yellow',
23657 'boolean': 'yellow',
23658 'undefined': 'grey',
23659 'null': 'bold',
23660 'string': 'green',
23661 'date': 'magenta',
23662 // "name": intentionally not styling
23663 'regexp': 'red'
23664};
ab78acc6 23665
ab78acc6 23666
8b095871
IC
23667function stylizeWithColor(str, styleType) {
23668 var style = inspect.styles[styleType];
ab78acc6 23669
8b095871
IC
23670 if (style) {
23671 return '\u001b[' + inspect.colors[style][0] + 'm' + str +
23672 '\u001b[' + inspect.colors[style][1] + 'm';
23673 } else {
23674 return str;
ab78acc6 23675 }
ebd8d4e8 23676}
ebd8d4e8 23677
ab78acc6 23678
8b095871
IC
23679function stylizeNoColor(str, styleType) {
23680 return str;
23681}
ab78acc6 23682
ab78acc6 23683
8b095871
IC
23684function arrayToHash(array) {
23685 var hash = {};
ab78acc6 23686
8b095871
IC
23687 array.forEach(function(val, idx) {
23688 hash[val] = true;
ab78acc6 23689 });
ebd8d4e8 23690
8b095871
IC
23691 return hash;
23692}
ab78acc6 23693
ab78acc6 23694
8b095871
IC
23695function formatValue(ctx, value, recurseTimes) {
23696 // Provide a hook for user-specified inspect functions.
23697 // Check that value is an object with an inspect function on it
23698 if (ctx.customInspect &&
23699 value &&
23700 isFunction(value.inspect) &&
23701 // Filter out the util module, it's inspect function is special
23702 value.inspect !== exports.inspect &&
23703 // Also filter out any prototype objects using the circular check.
23704 !(value.constructor && value.constructor.prototype === value)) {
23705 var ret = value.inspect(recurseTimes, ctx);
23706 if (!isString(ret)) {
23707 ret = formatValue(ctx, ret, recurseTimes);
23708 }
23709 return ret;
ab78acc6 23710 }
ebd8d4e8 23711
8b095871
IC
23712 // Primitive types cannot have properties
23713 var primitive = formatPrimitive(ctx, value);
23714 if (primitive) {
23715 return primitive;
ab78acc6 23716 }
ebd8d4e8 23717
8b095871
IC
23718 // Look up the keys of the object.
23719 var keys = Object.keys(value);
23720 var visibleKeys = arrayToHash(keys);
ebd8d4e8 23721
8b095871
IC
23722 if (ctx.showHidden) {
23723 keys = Object.getOwnPropertyNames(value);
23724 }
ebd8d4e8 23725
8b095871
IC
23726 // IE doesn't make error fields non-enumerable
23727 // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx
23728 if (isError(value)
23729 && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {
23730 return formatError(value);
23731 }
ebd8d4e8 23732
8b095871
IC
23733 // Some type of object without properties can be shortcutted.
23734 if (keys.length === 0) {
23735 if (isFunction(value)) {
23736 var name = value.name ? ': ' + value.name : '';
23737 return ctx.stylize('[Function' + name + ']', 'special');
23738 }
23739 if (isRegExp(value)) {
23740 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
23741 }
23742 if (isDate(value)) {
23743 return ctx.stylize(Date.prototype.toString.call(value), 'date');
23744 }
23745 if (isError(value)) {
23746 return formatError(value);
23747 }
23748 }
ab78acc6 23749
8b095871 23750 var base = '', array = false, braces = ['{', '}'];
ab78acc6 23751
8b095871
IC
23752 // Make Array say that they are Array
23753 if (isArray(value)) {
23754 array = true;
23755 braces = ['[', ']'];
23756 }
ebd8d4e8 23757
8b095871
IC
23758 // Make functions say that they are functions
23759 if (isFunction(value)) {
23760 var n = value.name ? ': ' + value.name : '';
23761 base = ' [Function' + n + ']';
23762 }
ebd8d4e8 23763
8b095871
IC
23764 // Make RegExps say that they are RegExps
23765 if (isRegExp(value)) {
23766 base = ' ' + RegExp.prototype.toString.call(value);
23767 }
ebd8d4e8 23768
8b095871
IC
23769 // Make dates with properties first say the date
23770 if (isDate(value)) {
23771 base = ' ' + Date.prototype.toUTCString.call(value);
23772 }
ebd8d4e8 23773
8b095871
IC
23774 // Make error with message first say the error
23775 if (isError(value)) {
23776 base = ' ' + formatError(value);
23777 }
ebd8d4e8 23778
8b095871
IC
23779 if (keys.length === 0 && (!array || value.length == 0)) {
23780 return braces[0] + base + braces[1];
23781 }
ebd8d4e8 23782
8b095871
IC
23783 if (recurseTimes < 0) {
23784 if (isRegExp(value)) {
23785 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
23786 } else {
23787 return ctx.stylize('[Object]', 'special');
23788 }
23789 }
ebd8d4e8 23790
8b095871 23791 ctx.seen.push(value);
ebd8d4e8 23792
8b095871
IC
23793 var output;
23794 if (array) {
23795 output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
23796 } else {
23797 output = keys.map(function(key) {
23798 return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
23799 });
23800 }
ebd8d4e8 23801
8b095871 23802 ctx.seen.pop();
ebd8d4e8 23803
8b095871 23804 return reduceToSingleString(output, base, braces);
ebd8d4e8
IC
23805}
23806
ebd8d4e8 23807
8b095871
IC
23808function formatPrimitive(ctx, value) {
23809 if (isUndefined(value))
23810 return ctx.stylize('undefined', 'undefined');
23811 if (isString(value)) {
23812 var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
23813 .replace(/'/g, "\\'")
23814 .replace(/\\"/g, '"') + '\'';
23815 return ctx.stylize(simple, 'string');
23816 }
23817 if (isNumber(value))
23818 return ctx.stylize('' + value, 'number');
23819 if (isBoolean(value))
23820 return ctx.stylize('' + value, 'boolean');
23821 // For some reason typeof null is "object", so special case here.
23822 if (isNull(value))
23823 return ctx.stylize('null', 'null');
23824}
ebd8d4e8 23825
ebd8d4e8 23826
8b095871
IC
23827function formatError(value) {
23828 return '[' + Error.prototype.toString.call(value) + ']';
23829}
ebd8d4e8 23830
ebd8d4e8 23831
8b095871
IC
23832function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
23833 var output = [];
23834 for (var i = 0, l = value.length; i < l; ++i) {
23835 if (hasOwnProperty(value, String(i))) {
23836 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
23837 String(i), true));
23838 } else {
23839 output.push('');
23840 }
23841 }
23842 keys.forEach(function(key) {
23843 if (!key.match(/^\d+$/)) {
23844 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
23845 key, true));
23846 }
23847 });
23848 return output;
23849}
ebd8d4e8 23850
ebd8d4e8 23851
8b095871
IC
23852function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
23853 var name, str, desc;
23854 desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
23855 if (desc.get) {
23856 if (desc.set) {
23857 str = ctx.stylize('[Getter/Setter]', 'special');
23858 } else {
23859 str = ctx.stylize('[Getter]', 'special');
23860 }
23861 } else {
23862 if (desc.set) {
23863 str = ctx.stylize('[Setter]', 'special');
23864 }
23865 }
23866 if (!hasOwnProperty(visibleKeys, key)) {
23867 name = '[' + key + ']';
23868 }
23869 if (!str) {
23870 if (ctx.seen.indexOf(desc.value) < 0) {
23871 if (isNull(recurseTimes)) {
23872 str = formatValue(ctx, desc.value, null);
23873 } else {
23874 str = formatValue(ctx, desc.value, recurseTimes - 1);
23875 }
23876 if (str.indexOf('\n') > -1) {
23877 if (array) {
23878 str = str.split('\n').map(function(line) {
23879 return ' ' + line;
23880 }).join('\n').substr(2);
23881 } else {
23882 str = '\n' + str.split('\n').map(function(line) {
23883 return ' ' + line;
23884 }).join('\n');
23885 }
23886 }
23887 } else {
23888 str = ctx.stylize('[Circular]', 'special');
23889 }
23890 }
23891 if (isUndefined(name)) {
23892 if (array && key.match(/^\d+$/)) {
23893 return str;
23894 }
23895 name = JSON.stringify('' + key);
23896 if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
23897 name = name.substr(1, name.length - 2);
23898 name = ctx.stylize(name, 'name');
23899 } else {
23900 name = name.replace(/'/g, "\\'")
23901 .replace(/\\"/g, '"')
23902 .replace(/(^"|"$)/g, "'");
23903 name = ctx.stylize(name, 'string');
23904 }
23905 }
ebd8d4e8 23906
8b095871
IC
23907 return name + ': ' + str;
23908}
ebd8d4e8 23909
ebd8d4e8 23910
8b095871
IC
23911function reduceToSingleString(output, base, braces) {
23912 var numLinesEst = 0;
23913 var length = output.reduce(function(prev, cur) {
23914 numLinesEst++;
23915 if (cur.indexOf('\n') >= 0) numLinesEst++;
23916 return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;
23917 }, 0);
ebd8d4e8 23918
8b095871
IC
23919 if (length > 60) {
23920 return braces[0] +
23921 (base === '' ? '' : base + '\n ') +
23922 ' ' +
23923 output.join(',\n ') +
23924 ' ' +
23925 braces[1];
23926 }
ebd8d4e8 23927
8b095871
IC
23928 return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
23929}
ebd8d4e8 23930
ebd8d4e8 23931
8b095871
IC
23932// NOTE: These type checking functions intentionally don't use `instanceof`
23933// because it is fragile and can be easily faked with `Object.create()`.
23934function isArray(ar) {
23935 return Array.isArray(ar);
23936}
23937exports.isArray = isArray;
ebd8d4e8 23938
8b095871
IC
23939function isBoolean(arg) {
23940 return typeof arg === 'boolean';
23941}
23942exports.isBoolean = isBoolean;
ebd8d4e8 23943
8b095871
IC
23944function isNull(arg) {
23945 return arg === null;
23946}
23947exports.isNull = isNull;
ebd8d4e8 23948
8b095871
IC
23949function isNullOrUndefined(arg) {
23950 return arg == null;
ebd8d4e8 23951}
8b095871 23952exports.isNullOrUndefined = isNullOrUndefined;
ebd8d4e8 23953
8b095871
IC
23954function isNumber(arg) {
23955 return typeof arg === 'number';
23956}
23957exports.isNumber = isNumber;
ebd8d4e8 23958
8b095871
IC
23959function isString(arg) {
23960 return typeof arg === 'string';
23961}
23962exports.isString = isString;
ebd8d4e8 23963
8b095871
IC
23964function isSymbol(arg) {
23965 return typeof arg === 'symbol';
23966}
23967exports.isSymbol = isSymbol;
ebd8d4e8 23968
8b095871
IC
23969function isUndefined(arg) {
23970 return arg === void 0;
23971}
23972exports.isUndefined = isUndefined;
ebd8d4e8 23973
8b095871
IC
23974function isRegExp(re) {
23975 return isObject(re) && objectToString(re) === '[object RegExp]';
ebd8d4e8 23976}
8b095871 23977exports.isRegExp = isRegExp;
ebd8d4e8 23978
8b095871
IC
23979function isObject(arg) {
23980 return typeof arg === 'object' && arg !== null;
23981}
23982exports.isObject = isObject;
ebd8d4e8 23983
8b095871
IC
23984function isDate(d) {
23985 return isObject(d) && objectToString(d) === '[object Date]';
23986}
23987exports.isDate = isDate;
ebd8d4e8 23988
8b095871
IC
23989function isError(e) {
23990 return isObject(e) &&
23991 (objectToString(e) === '[object Error]' || e instanceof Error);
ebd8d4e8 23992}
8b095871 23993exports.isError = isError;
ebd8d4e8 23994
8b095871
IC
23995function isFunction(arg) {
23996 return typeof arg === 'function';
ebd8d4e8 23997}
8b095871 23998exports.isFunction = isFunction;
ebd8d4e8 23999
8b095871
IC
24000function isPrimitive(arg) {
24001 return arg === null ||
24002 typeof arg === 'boolean' ||
24003 typeof arg === 'number' ||
24004 typeof arg === 'string' ||
24005 typeof arg === 'symbol' || // ES6 symbol
24006 typeof arg === 'undefined';
24007}
24008exports.isPrimitive = isPrimitive;
ebd8d4e8 24009
8b095871 24010exports.isBuffer = require('./support/isBuffer');
ebd8d4e8 24011
8b095871
IC
24012function objectToString(o) {
24013 return Object.prototype.toString.call(o);
24014}
ab78acc6 24015
ab78acc6 24016
8b095871
IC
24017function pad(n) {
24018 return n < 10 ? '0' + n.toString(10) : n.toString(10);
24019}
ebd8d4e8 24020
ab78acc6 24021
8b095871
IC
24022var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
24023 'Oct', 'Nov', 'Dec'];
ab78acc6 24024
8b095871
IC
24025// 26 Feb 16:19:34
24026function timestamp() {
24027 var d = new Date();
24028 var time = [pad(d.getHours()),
24029 pad(d.getMinutes()),
24030 pad(d.getSeconds())].join(':');
24031 return [d.getDate(), months[d.getMonth()], time].join(' ');
24032}
24033
24034
24035// log is just a thin wrapper to console.log that prepends a timestamp
24036exports.log = function() {
24037 console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
ab78acc6 24038};
ebd8d4e8 24039
ebd8d4e8 24040
8b095871
IC
24041/**
24042 * Inherit the prototype methods from one constructor into another.
24043 *
24044 * The Function.prototype.inherits from lang.js rewritten as a standalone
24045 * function (not on Function.prototype). NOTE: If this file is to be loaded
24046 * during bootstrapping this function needs to be rewritten using some native
24047 * functions as prototype setup using normal JavaScript does not work as
24048 * expected during bootstrapping (see mirror.js in r114903).
24049 *
24050 * @param {function} ctor Constructor function which needs to inherit the
24051 * prototype.
24052 * @param {function} superCtor Constructor function to inherit prototype from.
24053 */
24054exports.inherits = require('inherits');
ebd8d4e8 24055
8b095871
IC
24056exports._extend = function(origin, add) {
24057 // Don't do anything if add isn't an object
24058 if (!add || !isObject(add)) return origin;
24059
24060 var keys = Object.keys(add);
24061 var i = keys.length;
24062 while (i--) {
24063 origin[keys[i]] = add[keys[i]];
ebd8d4e8 24064 }
8b095871 24065 return origin;
ab78acc6 24066};
ebd8d4e8 24067
8b095871
IC
24068function hasOwnProperty(obj, prop) {
24069 return Object.prototype.hasOwnProperty.call(obj, prop);
ebd8d4e8
IC
24070}
24071
8b095871
IC
24072}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
24073},{"./support/isBuffer":29,"_process":13,"inherits":28}],31:[function(require,module,exports){
24074(function (Buffer){
24075const createKeccakHash = require('keccak')
24076const secp256k1 = require('secp256k1')
24077const assert = require('assert')
24078const rlp = require('rlp')
24079const BN = require('bn.js')
24080const createHash = require('create-hash')
24081Object.assign(exports, require('ethjs-util'))
ab78acc6 24082
8b095871
IC
24083/**
24084 * the max integer that this VM can handle (a ```BN```)
24085 * @var {BN} MAX_INTEGER
24086 */
24087exports.MAX_INTEGER = new BN('ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 16)
ab78acc6 24088
8b095871
IC
24089/**
24090 * 2^256 (a ```BN```)
24091 * @var {BN} TWO_POW256
24092 */
24093exports.TWO_POW256 = new BN('10000000000000000000000000000000000000000000000000000000000000000', 16)
ab78acc6 24094
8b095871
IC
24095/**
24096 * SHA3-256 hash of null (a ```String```)
24097 * @var {String} SHA3_NULL_S
24098 */
24099exports.SHA3_NULL_S = 'c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470'
ebd8d4e8 24100
8b095871
IC
24101/**
24102 * SHA3-256 hash of null (a ```Buffer```)
24103 * @var {Buffer} SHA3_NULL
24104 */
24105exports.SHA3_NULL = Buffer.from(exports.SHA3_NULL_S, 'hex')
ebd8d4e8 24106
8b095871
IC
24107/**
24108 * SHA3-256 of an RLP of an empty array (a ```String```)
24109 * @var {String} SHA3_RLP_ARRAY_S
24110 */
24111exports.SHA3_RLP_ARRAY_S = '1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347'
ebd8d4e8 24112
8b095871
IC
24113/**
24114 * SHA3-256 of an RLP of an empty array (a ```Buffer```)
24115 * @var {Buffer} SHA3_RLP_ARRAY
24116 */
24117exports.SHA3_RLP_ARRAY = Buffer.from(exports.SHA3_RLP_ARRAY_S, 'hex')
ebd8d4e8 24118
8b095871
IC
24119/**
24120 * SHA3-256 hash of the RLP of null (a ```String```)
24121 * @var {String} SHA3_RLP_S
24122 */
24123exports.SHA3_RLP_S = '56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421'
ebd8d4e8 24124
8b095871
IC
24125/**
24126 * SHA3-256 hash of the RLP of null (a ```Buffer```)
24127 * @var {Buffer} SHA3_RLP
24128 */
24129exports.SHA3_RLP = Buffer.from(exports.SHA3_RLP_S, 'hex')
ebd8d4e8 24130
8b095871
IC
24131/**
24132 * [`BN`](https://github.com/indutny/bn.js)
24133 * @var {Function}
24134 */
24135exports.BN = BN
ebd8d4e8 24136
8b095871
IC
24137/**
24138 * [`rlp`](https://github.com/ethereumjs/rlp)
24139 * @var {Function}
24140 */
24141exports.rlp = rlp
ebd8d4e8 24142
8b095871
IC
24143/**
24144 * [`secp256k1`](https://github.com/cryptocoinjs/secp256k1-node/)
24145 * @var {Object}
24146 */
24147exports.secp256k1 = secp256k1
ab78acc6 24148
8b095871
IC
24149/**
24150 * Returns a buffer filled with 0s
24151 * @method zeros
24152 * @param {Number} bytes the number of bytes the buffer should be
24153 * @return {Buffer}
24154 */
24155exports.zeros = function (bytes) {
24156 return Buffer.allocUnsafe(bytes).fill(0)
24157}
24158
24159/**
24160 * Left Pads an `Array` or `Buffer` with leading zeros till it has `length` bytes.
24161 * Or it truncates the beginning if it exceeds.
24162 * @method lsetLength
24163 * @param {Buffer|Array} msg the value to pad
24164 * @param {Number} length the number of bytes the output should be
24165 * @param {Boolean} [right=false] whether to start padding form the left or right
24166 * @return {Buffer|Array}
24167 */
24168exports.setLengthLeft = exports.setLength = function (msg, length, right) {
24169 var buf = exports.zeros(length)
24170 msg = exports.toBuffer(msg)
24171 if (right) {
24172 if (msg.length < length) {
24173 msg.copy(buf)
24174 return buf
24175 }
24176 return msg.slice(0, length)
24177 } else {
24178 if (msg.length < length) {
24179 msg.copy(buf, length - msg.length)
24180 return buf
ebd8d4e8 24181 }
8b095871 24182 return msg.slice(-length)
ebd8d4e8
IC
24183 }
24184}
24185
8b095871
IC
24186/**
24187 * Right Pads an `Array` or `Buffer` with leading zeros till it has `length` bytes.
24188 * Or it truncates the beginning if it exceeds.
24189 * @param {Buffer|Array} msg the value to pad
24190 * @param {Number} length the number of bytes the output should be
24191 * @return {Buffer|Array}
24192 */
24193exports.setLengthRight = function (msg, length) {
24194 return exports.setLength(msg, length, true)
ab78acc6
IC
24195}
24196
8b095871
IC
24197/**
24198 * Trims leading zeros from a `Buffer` or an `Array`
24199 * @param {Buffer|Array|String} a
24200 * @return {Buffer|Array|String}
24201 */
24202exports.unpad = exports.stripZeros = function (a) {
24203 a = exports.stripHexPrefix(a)
24204 var first = a[0]
24205 while (a.length > 0 && first.toString() === '0') {
24206 a = a.slice(1)
24207 first = a[0]
24208 }
24209 return a
24210}
24211/**
24212 * Attempts to turn a value into a `Buffer`. As input it supports `Buffer`, `String`, `Number`, null/undefined, `BN` and other objects with a `toArray()` method.
24213 * @param {*} v the value
24214 */
24215exports.toBuffer = function (v) {
24216 if (!Buffer.isBuffer(v)) {
24217 if (Array.isArray(v)) {
24218 v = Buffer.from(v)
24219 } else if (typeof v === 'string') {
24220 if (exports.isHexPrefixed(v)) {
24221 v = Buffer.from(exports.padToEven(exports.stripHexPrefix(v)), 'hex')
24222 } else {
24223 v = Buffer.from(v)
24224 }
24225 } else if (typeof v === 'number') {
24226 v = exports.intToBuffer(v)
24227 } else if (v === null || v === undefined) {
24228 v = Buffer.allocUnsafe(0)
24229 } else if (v.toArray) {
24230 // converts a BN to a Buffer
24231 v = Buffer.from(v.toArray())
24232 } else {
24233 throw new Error('invalid type')
24234 }
ebd8d4e8 24235 }
8b095871 24236 return v
ebd8d4e8
IC
24237}
24238
8b095871
IC
24239/**
24240 * Converts a `Buffer` to a `Number`
24241 * @param {Buffer} buf
24242 * @return {Number}
24243 * @throws If the input number exceeds 53 bits.
24244 */
24245exports.bufferToInt = function (buf) {
24246 return new BN(exports.toBuffer(buf)).toNumber()
24247}
ebd8d4e8 24248
8b095871
IC
24249/**
24250 * Converts a `Buffer` into a hex `String`
24251 * @param {Buffer} buf
24252 * @return {String}
24253 */
24254exports.bufferToHex = function (buf) {
24255 buf = exports.toBuffer(buf)
24256 return '0x' + buf.toString('hex')
24257}
ab78acc6 24258
8b095871
IC
24259/**
24260 * Interprets a `Buffer` as a signed integer and returns a `BN`. Assumes 256-bit numbers.
24261 * @param {Buffer} num
24262 * @return {BN}
24263 */
24264exports.fromSigned = function (num) {
24265 return new BN(num).fromTwos(256)
24266}
ab78acc6 24267
8b095871
IC
24268/**
24269 * Converts a `BN` to an unsigned integer and returns it as a `Buffer`. Assumes 256-bit numbers.
24270 * @param {BN} num
24271 * @return {Buffer}
24272 */
24273exports.toUnsigned = function (num) {
24274 return Buffer.from(num.toTwos(256).toArray())
24275}
ab78acc6 24276
8b095871
IC
24277/**
24278 * Creates SHA-3 hash of the input
24279 * @param {Buffer|Array|String|Number} a the input data
24280 * @param {Number} [bits=256] the SHA width
24281 * @return {Buffer}
24282 */
24283exports.sha3 = function (a, bits) {
24284 a = exports.toBuffer(a)
24285 if (!bits) bits = 256
ab78acc6 24286
8b095871
IC
24287 return createKeccakHash('keccak' + bits).update(a).digest()
24288}
ab78acc6 24289
8b095871
IC
24290/**
24291 * Creates SHA256 hash of the input
24292 * @param {Buffer|Array|String|Number} a the input data
24293 * @return {Buffer}
24294 */
24295exports.sha256 = function (a) {
24296 a = exports.toBuffer(a)
24297 return createHash('sha256').update(a).digest()
24298}
ab78acc6 24299
8b095871
IC
24300/**
24301 * Creates RIPEMD160 hash of the input
24302 * @param {Buffer|Array|String|Number} a the input data
24303 * @param {Boolean} padded whether it should be padded to 256 bits or not
24304 * @return {Buffer}
24305 */
24306exports.ripemd160 = function (a, padded) {
24307 a = exports.toBuffer(a)
24308 var hash = createHash('rmd160').update(a).digest()
24309 if (padded === true) {
24310 return exports.setLength(hash, 32)
24311 } else {
24312 return hash
ebd8d4e8 24313 }
8b095871 24314}
ebd8d4e8 24315
8b095871
IC
24316/**
24317 * Creates SHA-3 hash of the RLP encoded version of the input
24318 * @param {Buffer|Array|String|Number} a the input data
24319 * @return {Buffer}
24320 */
24321exports.rlphash = function (a) {
24322 return exports.sha3(rlp.encode(a))
ebd8d4e8
IC
24323}
24324
8b095871
IC
24325/**
24326 * Checks if the private key satisfies the rules of the curve secp256k1.
24327 * @param {Buffer} privateKey
24328 * @return {Boolean}
24329 */
24330exports.isValidPrivate = function (privateKey) {
24331 return secp256k1.privateKeyVerify(privateKey)
24332}
ebd8d4e8 24333
8b095871
IC
24334/**
24335 * Checks if the public key satisfies the rules of the curve secp256k1
24336 * and the requirements of Ethereum.
24337 * @param {Buffer} publicKey The two points of an uncompressed key, unless sanitize is enabled
24338 * @param {Boolean} [sanitize=false] Accept public keys in other formats
24339 * @return {Boolean}
24340 */
24341exports.isValidPublic = function (publicKey, sanitize) {
24342 if (publicKey.length === 64) {
24343 // Convert to SEC1 for secp256k1
24344 return secp256k1.publicKeyVerify(Buffer.concat([ Buffer.from([4]), publicKey ]))
24345 }
ebd8d4e8 24346
8b095871
IC
24347 if (!sanitize) {
24348 return false
24349 }
ebd8d4e8 24350
8b095871
IC
24351 return secp256k1.publicKeyVerify(publicKey)
24352}
ebd8d4e8 24353
8b095871
IC
24354/**
24355 * Returns the ethereum address of a given public key.
24356 * Accepts "Ethereum public keys" and SEC1 encoded keys.
24357 * @param {Buffer} pubKey The two points of an uncompressed key, unless sanitize is enabled
24358 * @param {Boolean} [sanitize=false] Accept public keys in other formats
24359 * @return {Buffer}
24360 */
24361exports.pubToAddress = exports.publicToAddress = function (pubKey, sanitize) {
24362 pubKey = exports.toBuffer(pubKey)
24363 if (sanitize && (pubKey.length !== 64)) {
24364 pubKey = secp256k1.publicKeyConvert(pubKey, false).slice(1)
ab78acc6 24365 }
8b095871
IC
24366 assert(pubKey.length === 64)
24367 // Only take the lower 160bits of the hash
24368 return exports.sha3(pubKey).slice(-20)
24369}
ebd8d4e8 24370
8b095871
IC
24371/**
24372 * Returns the ethereum public key of a given private key
24373 * @param {Buffer} privateKey A private key must be 256 bits wide
24374 * @return {Buffer}
24375 */
24376var privateToPublic = exports.privateToPublic = function (privateKey) {
24377 privateKey = exports.toBuffer(privateKey)
24378 // skip the type flag and use the X, Y points
24379 return secp256k1.publicKeyCreate(privateKey, false).slice(1)
24380}
ab78acc6 24381
8b095871
IC
24382/**
24383 * Converts a public key to the Ethereum format.
24384 * @param {Buffer} publicKey
24385 * @return {Buffer}
24386 */
24387exports.importPublic = function (publicKey) {
24388 publicKey = exports.toBuffer(publicKey)
24389 if (publicKey.length !== 64) {
24390 publicKey = secp256k1.publicKeyConvert(publicKey, false).slice(1)
ebd8d4e8 24391 }
8b095871
IC
24392 return publicKey
24393}
ab78acc6 24394
8b095871
IC
24395/**
24396 * ECDSA sign
24397 * @param {Buffer} msgHash
24398 * @param {Buffer} privateKey
24399 * @return {Object}
24400 */
24401exports.ecsign = function (msgHash, privateKey) {
24402 var sig = secp256k1.sign(msgHash, privateKey)
ab78acc6 24403
8b095871
IC
24404 var ret = {}
24405 ret.r = sig.signature.slice(0, 32)
24406 ret.s = sig.signature.slice(32, 64)
24407 ret.v = sig.recovery + 27
24408 return ret
ebd8d4e8
IC
24409}
24410
8b095871
IC
24411/**
24412 * Returns the keccak-256 hash of `message`, prefixed with the header used by the `eth_sign` RPC call.
24413 * The output of this function can be fed into `ecsign` to produce the same signature as the `eth_sign`
24414 * call for a given `message`, or fed to `ecrecover` along with a signature to recover the public key
24415 * used to produce the signature.
24416 * @param message
24417 * @returns {Buffer} hash
24418 */
24419exports.hashPersonalMessage = function (message) {
24420 var prefix = exports.toBuffer('\u0019Ethereum Signed Message:\n' + message.length.toString())
24421 return exports.sha3(Buffer.concat([prefix, message]))
ebd8d4e8
IC
24422}
24423
8b095871
IC
24424/**
24425 * ECDSA public key recovery from signature
24426 * @param {Buffer} msgHash
24427 * @param {Number} v
24428 * @param {Buffer} r
24429 * @param {Buffer} s
24430 * @return {Buffer} publicKey
24431 */
24432exports.ecrecover = function (msgHash, v, r, s) {
24433 var signature = Buffer.concat([exports.setLength(r, 32), exports.setLength(s, 32)], 64)
24434 var recovery = v - 27
24435 if (recovery !== 0 && recovery !== 1) {
24436 throw new Error('Invalid signature v value')
ab78acc6 24437 }
8b095871
IC
24438 var senderPubKey = secp256k1.recover(msgHash, signature, recovery)
24439 return secp256k1.publicKeyConvert(senderPubKey, false).slice(1)
ab78acc6 24440}
ebd8d4e8 24441
8b095871
IC
24442/**
24443 * Convert signature parameters into the format of `eth_sign` RPC method
24444 * @param {Number} v
24445 * @param {Buffer} r
24446 * @param {Buffer} s
24447 * @return {String} sig
24448 */
24449exports.toRpcSig = function (v, r, s) {
24450 // NOTE: with potential introduction of chainId this might need to be updated
24451 if (v !== 27 && v !== 28) {
24452 throw new Error('Invalid recovery id')
24453 }
24454
24455 // geth (and the RPC eth_sign method) uses the 65 byte format used by Bitcoin
24456 // FIXME: this might change in the future - https://github.com/ethereum/go-ethereum/issues/2053
24457 return exports.bufferToHex(Buffer.concat([
24458 exports.setLengthLeft(r, 32),
24459 exports.setLengthLeft(s, 32),
24460 exports.toBuffer(v - 27)
24461 ]))
ebd8d4e8
IC
24462}
24463
8b095871
IC
24464/**
24465 * Convert signature format of the `eth_sign` RPC method to signature parameters
24466 * NOTE: all because of a bug in geth: https://github.com/ethereum/go-ethereum/issues/2053
24467 * @param {String} sig
24468 * @return {Object}
24469 */
24470exports.fromRpcSig = function (sig) {
24471 sig = exports.toBuffer(sig)
ebd8d4e8 24472
8b095871
IC
24473 // NOTE: with potential introduction of chainId this might need to be updated
24474 if (sig.length !== 65) {
24475 throw new Error('Invalid signature length')
24476 }
24477
24478 var v = sig[64]
24479 // support both versions of `eth_sign` responses
24480 if (v < 27) {
24481 v += 27
24482 }
24483
24484 return {
24485 v: v,
24486 r: sig.slice(0, 32),
24487 s: sig.slice(32, 64)
24488 }
ebd8d4e8
IC
24489}
24490
8b095871
IC
24491/**
24492 * Returns the ethereum address of a given private key
24493 * @param {Buffer} privateKey A private key must be 256 bits wide
24494 * @return {Buffer}
24495 */
24496exports.privateToAddress = function (privateKey) {
24497 return exports.publicToAddress(privateToPublic(privateKey))
ab78acc6 24498}
ebd8d4e8 24499
8b095871
IC
24500/**
24501 * Checks if the address is a valid. Accepts checksummed addresses too
24502 * @param {String} address
24503 * @return {Boolean}
24504 */
24505exports.isValidAddress = function (address) {
24506 return /^0x[0-9a-fA-F]{40}$/i.test(address)
ab78acc6 24507}
ebd8d4e8 24508
8b095871
IC
24509/**
24510 * Returns a checksummed address
24511 * @param {String} address
24512 * @return {String}
24513 */
24514exports.toChecksumAddress = function (address) {
24515 address = exports.stripHexPrefix(address).toLowerCase()
24516 var hash = exports.sha3(address).toString('hex')
24517 var ret = '0x'
24518
24519 for (var i = 0; i < address.length; i++) {
24520 if (parseInt(hash[i], 16) >= 8) {
24521 ret += address[i].toUpperCase()
24522 } else {
24523 ret += address[i]
24524 }
24525 }
24526
24527 return ret
ebd8d4e8
IC
24528}
24529
8b095871
IC
24530/**
24531 * Checks if the address is a valid checksummed address
24532 * @param {Buffer} address
24533 * @return {Boolean}
24534 */
24535exports.isValidChecksumAddress = function (address) {
24536 return exports.isValidAddress(address) && (exports.toChecksumAddress(address) === address)
ab78acc6 24537}
ebd8d4e8 24538
8b095871
IC
24539/**
24540 * Generates an address of a newly created contract
24541 * @param {Buffer} from the address which is creating this new address
24542 * @param {Buffer} nonce the nonce of the from account
24543 * @return {Buffer}
24544 */
24545exports.generateAddress = function (from, nonce) {
24546 from = exports.toBuffer(from)
24547 nonce = new BN(nonce)
24548
24549 if (nonce.isZero()) {
24550 // in RLP we want to encode null in the case of zero nonce
24551 // read the RLP documentation for an answer if you dare
24552 nonce = null
24553 } else {
24554 nonce = Buffer.from(nonce.toArray())
24555 }
24556
24557 // Only take the lower 160bits of the hash
24558 return exports.rlphash([from, nonce]).slice(-20)
ab78acc6 24559}
ebd8d4e8 24560
8b095871
IC
24561/**
24562 * Returns true if the supplied address belongs to a precompiled account
24563 * @param {Buffer|String} address
24564 * @return {Boolean}
24565 */
24566exports.isPrecompiled = function (address) {
24567 var a = exports.unpad(address)
24568 return a.length === 1 && a[0] > 0 && a[0] < 5
ebd8d4e8
IC
24569}
24570
8b095871
IC
24571/**
24572 * Adds "0x" to a given `String` if it does not already start with "0x"
24573 * @param {String} str
24574 * @return {String}
24575 */
24576exports.addHexPrefix = function (str) {
24577 if (typeof str !== 'string') {
24578 return str
24579 }
24580
24581 return exports.isHexPrefixed(str) ? str : '0x' + str
ebd8d4e8
IC
24582}
24583
8b095871
IC
24584/**
24585 * Validate ECDSA signature
24586 * @method isValidSignature
24587 * @param {Buffer} v
24588 * @param {Buffer} r
24589 * @param {Buffer} s
24590 * @param {Boolean} [homestead=true]
24591 * @return {Boolean}
24592 */
24593
24594exports.isValidSignature = function (v, r, s, homestead) {
24595 const SECP256K1_N_DIV_2 = new BN('7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0', 16)
24596 const SECP256K1_N = new BN('fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141', 16)
24597
24598 if (r.length !== 32 || s.length !== 32) {
24599 return false
24600 }
24601
24602 if (v !== 27 && v !== 28) {
24603 return false
24604 }
24605
24606 r = new BN(r)
24607 s = new BN(s)
24608
24609 if (r.isZero() || r.gt(SECP256K1_N) || s.isZero() || s.gt(SECP256K1_N)) {
24610 return false
24611 }
24612
24613 if ((homestead === false) && (new BN(s).cmp(SECP256K1_N_DIV_2) === 1)) {
24614 return false
24615 }
24616
24617 return true
ebd8d4e8
IC
24618}
24619
8b095871
IC
24620/**
24621 * Converts a `Buffer` or `Array` to JSON
24622 * @param {Buffer|Array} ba
24623 * @return {Array|String|null}
24624 */
24625exports.baToJSON = function (ba) {
24626 if (Buffer.isBuffer(ba)) {
24627 return '0x' + ba.toString('hex')
24628 } else if (ba instanceof Array) {
24629 var array = []
24630 for (var i = 0; i < ba.length; i++) {
24631 array.push(exports.baToJSON(ba[i]))
24632 }
24633 return array
24634 }
ab78acc6 24635}
ebd8d4e8 24636
8b095871
IC
24637/**
24638 * Defines properties on a `Object`. It make the assumption that underlying data is binary.
24639 * @param {Object} self the `Object` to define properties on
24640 * @param {Array} fields an array fields to define. Fields can contain:
24641 * * `name` - the name of the properties
24642 * * `length` - the number of bytes the field can have
24643 * * `allowLess` - if the field can be less than the length
24644 * * `allowEmpty`
24645 * @param {*} data data to be validated against the definitions
24646 */
24647exports.defineProperties = function (self, fields, data) {
24648 self.raw = []
24649 self._fields = []
24650
24651 // attach the `toJSON`
24652 self.toJSON = function (label) {
24653 if (label) {
24654 var obj = {}
24655 self._fields.forEach(function (field) {
24656 obj[field] = '0x' + self[field].toString('hex')
24657 })
24658 return obj
24659 }
24660 return exports.baToJSON(this.raw)
24661 }
24662
24663 self.serialize = function serialize () {
24664 return rlp.encode(self.raw)
24665 }
24666
24667 fields.forEach(function (field, i) {
24668 self._fields.push(field.name)
24669 function getter () {
24670 return self.raw[i]
24671 }
24672 function setter (v) {
24673 v = exports.toBuffer(v)
24674
24675 if (v.toString('hex') === '00' && !field.allowZero) {
24676 v = Buffer.allocUnsafe(0)
24677 }
24678
24679 if (field.allowLess && field.length) {
24680 v = exports.stripZeros(v)
24681 assert(field.length >= v.length, 'The field ' + field.name + ' must not have more ' + field.length + ' bytes')
24682 } else if (!(field.allowZero && v.length === 0) && field.length) {
24683 assert(field.length === v.length, 'The field ' + field.name + ' must have byte length of ' + field.length)
24684 }
24685
24686 self.raw[i] = v
24687 }
24688
24689 Object.defineProperty(self, field.name, {
24690 enumerable: true,
24691 configurable: true,
24692 get: getter,
24693 set: setter
24694 })
24695
24696 if (field.default) {
24697 self[field.name] = field.default
24698 }
24699
24700 // attach alias
24701 if (field.alias) {
24702 Object.defineProperty(self, field.alias, {
24703 enumerable: false,
24704 configurable: true,
24705 set: setter,
24706 get: getter
24707 })
24708 }
24709 })
24710
24711 // if the constuctor is passed data
24712 if (data) {
24713 if (typeof data === 'string') {
24714 data = Buffer.from(exports.stripHexPrefix(data), 'hex')
24715 }
24716
24717 if (Buffer.isBuffer(data)) {
24718 data = rlp.decode(data)
24719 }
24720
24721 if (Array.isArray(data)) {
24722 if (data.length > self._fields.length) {
24723 throw (new Error('wrong number of fields in data'))
24724 }
24725
24726 // make sure all the items are buffers
24727 data.forEach(function (d, i) {
24728 self[self._fields[i]] = exports.toBuffer(d)
24729 })
24730 } else if (typeof data === 'object') {
24731 const keys = Object.keys(data)
24732 fields.forEach(function (field) {
24733 if (keys.indexOf(field.name) !== -1) self[field.name] = data[field.name]
24734 if (keys.indexOf(field.alias) !== -1) self[field.alias] = data[field.alias]
24735 })
24736 } else {
24737 throw new Error('invalid data')
24738 }
24739 }
ab78acc6 24740}
ebd8d4e8 24741
8b095871
IC
24742}).call(this,require("buffer").Buffer)
24743},{"assert":1,"bn.js":33,"buffer":5,"create-hash":36,"ethjs-util":56,"keccak":65,"rlp":72,"secp256k1":73}],32:[function(require,module,exports){
24744(function (Buffer){
24745// Reference https://github.com/bitcoin/bips/blob/master/bip-0066.mediawiki
24746// Format: 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S]
24747// NOTE: SIGHASH byte ignored AND restricted, truncate before use
24748
24749function check (buffer) {
24750 if (buffer.length < 8) return false
24751 if (buffer.length > 72) return false
24752 if (buffer[0] !== 0x30) return false
24753 if (buffer[1] !== buffer.length - 2) return false
24754 if (buffer[2] !== 0x02) return false
24755
24756 var lenR = buffer[3]
24757 if (lenR === 0) return false
24758 if (5 + lenR >= buffer.length) return false
24759 if (buffer[4 + lenR] !== 0x02) return false
24760
24761 var lenS = buffer[5 + lenR]
24762 if (lenS === 0) return false
24763 if ((6 + lenR + lenS) !== buffer.length) return false
24764
24765 if (buffer[4] & 0x80) return false
24766 if (lenR > 1 && (buffer[4] === 0x00) && !(buffer[5] & 0x80)) return false
24767
24768 if (buffer[lenR + 6] & 0x80) return false
24769 if (lenS > 1 && (buffer[lenR + 6] === 0x00) && !(buffer[lenR + 7] & 0x80)) return false
24770 return true
ab78acc6 24771}
ab78acc6 24772
8b095871
IC
24773function decode (buffer) {
24774 if (buffer.length < 8) throw new Error('DER sequence length is too short')
24775 if (buffer.length > 72) throw new Error('DER sequence length is too long')
24776 if (buffer[0] !== 0x30) throw new Error('Expected DER sequence')
24777 if (buffer[1] !== buffer.length - 2) throw new Error('DER sequence length is invalid')
24778 if (buffer[2] !== 0x02) throw new Error('Expected DER integer')
24779
24780 var lenR = buffer[3]
24781 if (lenR === 0) throw new Error('R length is zero')
24782 if (5 + lenR >= buffer.length) throw new Error('R length is too long')
24783 if (buffer[4 + lenR] !== 0x02) throw new Error('Expected DER integer (2)')
24784
24785 var lenS = buffer[5 + lenR]
24786 if (lenS === 0) throw new Error('S length is zero')
24787 if ((6 + lenR + lenS) !== buffer.length) throw new Error('S length is invalid')
24788
24789 if (buffer[4] & 0x80) throw new Error('R value is negative')
24790 if (lenR > 1 && (buffer[4] === 0x00) && !(buffer[5] & 0x80)) throw new Error('R value excessively padded')
24791
24792 if (buffer[lenR + 6] & 0x80) throw new Error('S value is negative')
24793 if (lenS > 1 && (buffer[lenR + 6] === 0x00) && !(buffer[lenR + 7] & 0x80)) throw new Error('S value excessively padded')
24794
24795 // non-BIP66 - extract R, S values
24796 return {
24797 r: buffer.slice(4, 4 + lenR),
24798 s: buffer.slice(6 + lenR)
24799 }
ebd8d4e8
IC
24800}
24801
8b095871
IC
24802/*
24803 * Expects r and s to be positive DER integers.
24804 *
24805 * The DER format uses the most significant bit as a sign bit (& 0x80).
24806 * If the significant bit is set AND the integer is positive, a 0x00 is prepended.
24807 *
24808 * Examples:
24809 *
24810 * 0 => 0x00
24811 * 1 => 0x01
24812 * -1 => 0xff
24813 * 127 => 0x7f
24814 * -127 => 0x81
24815 * 128 => 0x0080
24816 * -128 => 0x80
24817 * 255 => 0x00ff
24818 * -255 => 0xff01
24819 * 16300 => 0x3fac
24820 * -16300 => 0xc054
24821 * 62300 => 0x00f35c
24822 * -62300 => 0xff0ca4
24823*/
24824function encode (r, s) {
24825 var lenR = r.length
24826 var lenS = s.length
24827 if (lenR === 0) throw new Error('R length is zero')
24828 if (lenS === 0) throw new Error('S length is zero')
24829 if (lenR > 33) throw new Error('R length is too long')
24830 if (lenS > 33) throw new Error('S length is too long')
24831 if (r[0] & 0x80) throw new Error('R value is negative')
24832 if (s[0] & 0x80) throw new Error('S value is negative')
24833 if (lenR > 1 && (r[0] === 0x00) && !(r[1] & 0x80)) throw new Error('R value excessively padded')
24834 if (lenS > 1 && (s[0] === 0x00) && !(s[1] & 0x80)) throw new Error('S value excessively padded')
24835
24836 var signature = new Buffer(6 + lenR + lenS)
24837
24838 // 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S]
24839 signature[0] = 0x30
24840 signature[1] = signature.length - 2
24841 signature[2] = 0x02
24842 signature[3] = r.length
24843 r.copy(signature, 4)
24844 signature[4 + lenR] = 0x02
24845 signature[5 + lenR] = s.length
24846 s.copy(signature, 6 + lenR)
24847
24848 return signature
ebd8d4e8
IC
24849}
24850
8b095871
IC
24851module.exports = {
24852 check: check,
24853 decode: decode,
24854 encode: encode
ebd8d4e8 24855}
8b095871 24856
ab78acc6 24857}).call(this,require("buffer").Buffer)
8b095871
IC
24858},{"buffer":5}],33:[function(require,module,exports){
24859(function (module, exports) {
24860 'use strict';
ebd8d4e8 24861
8b095871
IC
24862 // Utils
24863 function assert (val, msg) {
24864 if (!val) throw new Error(msg || 'Assertion failed');
24865 }
ebd8d4e8 24866
8b095871
IC
24867 // Could use `inherits` module, but don't want to move from single file
24868 // architecture yet.
24869 function inherits (ctor, superCtor) {
24870 ctor.super_ = superCtor;
24871 var TempCtor = function () {};
24872 TempCtor.prototype = superCtor.prototype;
24873 ctor.prototype = new TempCtor();
24874 ctor.prototype.constructor = ctor;
24875 }
ebd8d4e8 24876
8b095871 24877 // BN
ab78acc6 24878
8b095871
IC
24879 function BN (number, base, endian) {
24880 if (BN.isBN(number)) {
24881 return number;
24882 }
ab78acc6 24883
8b095871
IC
24884 this.negative = 0;
24885 this.words = null;
24886 this.length = 0;
ab78acc6 24887
8b095871
IC
24888 // Reduction context
24889 this.red = null;
ab78acc6 24890
8b095871
IC
24891 if (number !== null) {
24892 if (base === 'le' || base === 'be') {
24893 endian = base;
24894 base = 10;
24895 }
ab78acc6 24896
8b095871
IC
24897 this._init(number || 0, base || 10, endian || 'be');
24898 }
24899 }
24900 if (typeof module === 'object') {
24901 module.exports = BN;
24902 } else {
24903 exports.BN = BN;
24904 }
ab78acc6 24905
8b095871
IC
24906 BN.BN = BN;
24907 BN.wordSize = 26;
ab78acc6 24908
8b095871
IC
24909 var Buffer;
24910 try {
24911 Buffer = require('buf' + 'fer').Buffer;
24912 } catch (e) {
24913 }
ab78acc6 24914
8b095871
IC
24915 BN.isBN = function isBN (num) {
24916 if (num instanceof BN) {
24917 return true;
24918 }
ab78acc6 24919
8b095871
IC
24920 return num !== null && typeof num === 'object' &&
24921 num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);
24922 };
ebd8d4e8 24923
8b095871
IC
24924 BN.max = function max (left, right) {
24925 if (left.cmp(right) > 0) return left;
24926 return right;
24927 };
ebd8d4e8 24928
8b095871
IC
24929 BN.min = function min (left, right) {
24930 if (left.cmp(right) < 0) return left;
24931 return right;
24932 };
24933
24934 BN.prototype._init = function init (number, base, endian) {
24935 if (typeof number === 'number') {
24936 return this._initNumber(number, base, endian);
ab78acc6 24937 }
ebd8d4e8 24938
8b095871
IC
24939 if (typeof number === 'object') {
24940 return this._initArray(number, base, endian);
24941 }
ebd8d4e8 24942
8b095871
IC
24943 if (base === 'hex') {
24944 base = 16;
24945 }
24946 assert(base === (base | 0) && base >= 2 && base <= 36);
24947
24948 number = number.toString().replace(/\s+/g, '');
24949 var start = 0;
24950 if (number[0] === '-') {
24951 start++;
24952 }
24953
24954 if (base === 16) {
24955 this._parseHex(number, start);
24956 } else {
24957 this._parseBase(number, base, start);
ab78acc6 24958 }
ebd8d4e8 24959
8b095871
IC
24960 if (number[0] === '-') {
24961 this.negative = 1;
24962 }
ebd8d4e8 24963
8b095871 24964 this.strip();
ebd8d4e8 24965
8b095871 24966 if (endian !== 'le') return;
ebd8d4e8 24967
8b095871
IC
24968 this._initArray(this.toArray(), base, endian);
24969 };
ebd8d4e8 24970
8b095871
IC
24971 BN.prototype._initNumber = function _initNumber (number, base, endian) {
24972 if (number < 0) {
24973 this.negative = 1;
24974 number = -number;
24975 }
24976 if (number < 0x4000000) {
24977 this.words = [ number & 0x3ffffff ];
24978 this.length = 1;
24979 } else if (number < 0x10000000000000) {
24980 this.words = [
24981 number & 0x3ffffff,
24982 (number / 0x4000000) & 0x3ffffff
24983 ];
24984 this.length = 2;
24985 } else {
24986 assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)
24987 this.words = [
24988 number & 0x3ffffff,
24989 (number / 0x4000000) & 0x3ffffff,
24990 1
24991 ];
24992 this.length = 3;
24993 }
ebd8d4e8 24994
8b095871 24995 if (endian !== 'le') return;
ebd8d4e8 24996
8b095871
IC
24997 // Reverse the bytes
24998 this._initArray(this.toArray(), base, endian);
24999 };
ebd8d4e8 25000
8b095871
IC
25001 BN.prototype._initArray = function _initArray (number, base, endian) {
25002 // Perhaps a Uint8Array
25003 assert(typeof number.length === 'number');
25004 if (number.length <= 0) {
25005 this.words = [ 0 ];
25006 this.length = 1;
25007 return this;
ab78acc6 25008 }
ebd8d4e8 25009
8b095871
IC
25010 this.length = Math.ceil(number.length / 3);
25011 this.words = new Array(this.length);
25012 for (var i = 0; i < this.length; i++) {
25013 this.words[i] = 0;
25014 }
ebd8d4e8 25015
8b095871
IC
25016 var j, w;
25017 var off = 0;
25018 if (endian === 'be') {
25019 for (i = number.length - 1, j = 0; i >= 0; i -= 3) {
25020 w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);
25021 this.words[j] |= (w << off) & 0x3ffffff;
25022 this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;
25023 off += 24;
25024 if (off >= 26) {
25025 off -= 26;
25026 j++;
25027 }
25028 }
25029 } else if (endian === 'le') {
25030 for (i = 0, j = 0; i < number.length; i += 3) {
25031 w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);
25032 this.words[j] |= (w << off) & 0x3ffffff;
25033 this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;
25034 off += 24;
25035 if (off >= 26) {
25036 off -= 26;
25037 j++;
25038 }
25039 }
25040 }
25041 return this.strip();
25042 };
ebd8d4e8 25043
8b095871
IC
25044 function parseHex (str, start, end) {
25045 var r = 0;
25046 var len = Math.min(str.length, end);
25047 for (var i = start; i < len; i++) {
25048 var c = str.charCodeAt(i) - 48;
ab78acc6 25049
8b095871 25050 r <<= 4;
ab78acc6 25051
8b095871
IC
25052 // 'a' - 'f'
25053 if (c >= 49 && c <= 54) {
25054 r |= c - 49 + 0xa;
ab78acc6 25055
8b095871
IC
25056 // 'A' - 'F'
25057 } else if (c >= 17 && c <= 22) {
25058 r |= c - 17 + 0xa;
ebd8d4e8 25059
8b095871
IC
25060 // '0' - '9'
25061 } else {
25062 r |= c & 0xf;
25063 }
25064 }
25065 return r;
25066 }
25067
25068 BN.prototype._parseHex = function _parseHex (number, start) {
25069 // Create possibly bigger array to ensure that it fits the number
25070 this.length = Math.ceil((number.length - start) / 6);
25071 this.words = new Array(this.length);
25072 for (var i = 0; i < this.length; i++) {
25073 this.words[i] = 0;
25074 }
25075
25076 var j, w;
25077 // Scan 24-bit chunks and add them to the number
25078 var off = 0;
25079 for (i = number.length - 6, j = 0; i >= start; i -= 6) {
25080 w = parseHex(number, i, i + 6);
25081 this.words[j] |= (w << off) & 0x3ffffff;
25082 // NOTE: `0x3fffff` is intentional here, 26bits max shift + 24bit hex limb
25083 this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;
25084 off += 24;
25085 if (off >= 26) {
25086 off -= 26;
25087 j++;
25088 }
25089 }
25090 if (i + 6 !== start) {
25091 w = parseHex(number, start, i + 6);
25092 this.words[j] |= (w << off) & 0x3ffffff;
25093 this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;
25094 }
25095 this.strip();
25096 };
ebd8d4e8 25097
8b095871
IC
25098 function parseBase (str, start, end, mul) {
25099 var r = 0;
25100 var len = Math.min(str.length, end);
25101 for (var i = start; i < len; i++) {
25102 var c = str.charCodeAt(i) - 48;
ebd8d4e8 25103
8b095871 25104 r *= mul;
ebd8d4e8 25105
8b095871
IC
25106 // 'a'
25107 if (c >= 49) {
25108 r += c - 49 + 0xa;
ebd8d4e8 25109
8b095871
IC
25110 // 'A'
25111 } else if (c >= 17) {
25112 r += c - 17 + 0xa;
ebd8d4e8 25113
8b095871
IC
25114 // '0' - '9'
25115 } else {
25116 r += c;
25117 }
25118 }
25119 return r;
25120 }
ebd8d4e8 25121
8b095871
IC
25122 BN.prototype._parseBase = function _parseBase (number, base, start) {
25123 // Initialize as zero
25124 this.words = [ 0 ];
25125 this.length = 1;
ebd8d4e8 25126
8b095871
IC
25127 // Find length of limb in base
25128 for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {
25129 limbLen++;
25130 }
25131 limbLen--;
25132 limbPow = (limbPow / base) | 0;
ebd8d4e8 25133
8b095871
IC
25134 var total = number.length - start;
25135 var mod = total % limbLen;
25136 var end = Math.min(total, total - mod) + start;
ebd8d4e8 25137
8b095871
IC
25138 var word = 0;
25139 for (var i = start; i < end; i += limbLen) {
25140 word = parseBase(number, i, i + limbLen, base);
ebd8d4e8 25141
8b095871
IC
25142 this.imuln(limbPow);
25143 if (this.words[0] + word < 0x4000000) {
25144 this.words[0] += word;
25145 } else {
25146 this._iaddn(word);
25147 }
25148 }
ebd8d4e8 25149
8b095871
IC
25150 if (mod !== 0) {
25151 var pow = 1;
25152 word = parseBase(number, i, number.length, base);
ebd8d4e8 25153
8b095871
IC
25154 for (i = 0; i < mod; i++) {
25155 pow *= base;
25156 }
ab78acc6 25157
8b095871
IC
25158 this.imuln(pow);
25159 if (this.words[0] + word < 0x4000000) {
25160 this.words[0] += word;
25161 } else {
25162 this._iaddn(word);
25163 }
25164 }
25165 };
ab78acc6 25166
8b095871
IC
25167 BN.prototype.copy = function copy (dest) {
25168 dest.words = new Array(this.length);
25169 for (var i = 0; i < this.length; i++) {
25170 dest.words[i] = this.words[i];
ab78acc6 25171 }
8b095871
IC
25172 dest.length = this.length;
25173 dest.negative = this.negative;
25174 dest.red = this.red;
25175 };
ab78acc6 25176
8b095871
IC
25177 BN.prototype.clone = function clone () {
25178 var r = new BN(null);
25179 this.copy(r);
25180 return r;
25181 };
ab78acc6 25182
8b095871
IC
25183 BN.prototype._expand = function _expand (size) {
25184 while (this.length < size) {
25185 this.words[this.length++] = 0;
25186 }
25187 return this;
25188 };
ab78acc6 25189
8b095871
IC
25190 // Remove leading `0` from `this`
25191 BN.prototype.strip = function strip () {
25192 while (this.length > 1 && this.words[this.length - 1] === 0) {
25193 this.length--;
ab78acc6 25194 }
8b095871
IC
25195 return this._normSign();
25196 };
ebd8d4e8 25197
8b095871
IC
25198 BN.prototype._normSign = function _normSign () {
25199 // -0 = 0
25200 if (this.length === 1 && this.words[0] === 0) {
25201 this.negative = 0;
ab78acc6 25202 }
8b095871
IC
25203 return this;
25204 };
ebd8d4e8 25205
8b095871
IC
25206 BN.prototype.inspect = function inspect () {
25207 return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';
25208 };
ebd8d4e8 25209
8b095871 25210 /*
ebd8d4e8 25211
8b095871
IC
25212 var zeros = [];
25213 var groupSizes = [];
25214 var groupBases = [];
ebd8d4e8 25215
8b095871
IC
25216 var s = '';
25217 var i = -1;
25218 while (++i < BN.wordSize) {
25219 zeros[i] = s;
25220 s += '0';
25221 }
25222 groupSizes[0] = 0;
25223 groupSizes[1] = 0;
25224 groupBases[0] = 0;
25225 groupBases[1] = 0;
25226 var base = 2 - 1;
25227 while (++base < 36 + 1) {
25228 var groupSize = 0;
25229 var groupBase = 1;
25230 while (groupBase < (1 << BN.wordSize) / base) {
25231 groupBase *= base;
25232 groupSize += 1;
25233 }
25234 groupSizes[base] = groupSize;
25235 groupBases[base] = groupBase;
ebd8d4e8
IC
25236 }
25237
8b095871 25238 */
ebd8d4e8 25239
8b095871
IC
25240 var zeros = [
25241 '',
25242 '0',
25243 '00',
25244 '000',
25245 '0000',
25246 '00000',
25247 '000000',
25248 '0000000',
25249 '00000000',
25250 '000000000',
25251 '0000000000',
25252 '00000000000',
25253 '000000000000',
25254 '0000000000000',
25255 '00000000000000',
25256 '000000000000000',
25257 '0000000000000000',
25258 '00000000000000000',
25259 '000000000000000000',
25260 '0000000000000000000',
25261 '00000000000000000000',
25262 '000000000000000000000',
25263 '0000000000000000000000',
25264 '00000000000000000000000',
25265 '000000000000000000000000',
25266 '0000000000000000000000000'
25267 ];
25268
25269 var groupSizes = [
25270 0, 0,
25271 25, 16, 12, 11, 10, 9, 8,
25272 8, 7, 7, 7, 7, 6, 6,
25273 6, 6, 6, 6, 6, 5, 5,
25274 5, 5, 5, 5, 5, 5, 5,
25275 5, 5, 5, 5, 5, 5, 5
25276 ];
25277
25278 var groupBases = [
25279 0, 0,
25280 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,
25281 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,
25282 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,
25283 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,
25284 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176
25285 ];
25286
25287 BN.prototype.toString = function toString (base, padding) {
25288 base = base || 10;
25289 padding = padding | 0 || 1;
25290
25291 var out;
25292 if (base === 16 || base === 'hex') {
25293 out = '';
25294 var off = 0;
25295 var carry = 0;
25296 for (var i = 0; i < this.length; i++) {
25297 var w = this.words[i];
25298 var word = (((w << off) | carry) & 0xffffff).toString(16);
25299 carry = (w >>> (24 - off)) & 0xffffff;
25300 if (carry !== 0 || i !== this.length - 1) {
25301 out = zeros[6 - word.length] + word + out;
25302 } else {
25303 out = word + out;
25304 }
25305 off += 2;
25306 if (off >= 26) {
25307 off -= 26;
25308 i--;
25309 }
25310 }
25311 if (carry !== 0) {
25312 out = carry.toString(16) + out;
25313 }
25314 while (out.length % padding !== 0) {
25315 out = '0' + out;
25316 }
25317 if (this.negative !== 0) {
25318 out = '-' + out;
25319 }
25320 return out;
25321 }
25322
25323 if (base === (base | 0) && base >= 2 && base <= 36) {
25324 // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));
25325 var groupSize = groupSizes[base];
25326 // var groupBase = Math.pow(base, groupSize);
25327 var groupBase = groupBases[base];
25328 out = '';
25329 var c = this.clone();
25330 c.negative = 0;
25331 while (!c.isZero()) {
25332 var r = c.modn(groupBase).toString(base);
25333 c = c.idivn(groupBase);
25334
25335 if (!c.isZero()) {
25336 out = zeros[groupSize - r.length] + r + out;
25337 } else {
25338 out = r + out;
25339 }
25340 }
25341 if (this.isZero()) {
25342 out = '0' + out;
25343 }
25344 while (out.length % padding !== 0) {
25345 out = '0' + out;
25346 }
25347 if (this.negative !== 0) {
25348 out = '-' + out;
25349 }
25350 return out;
25351 }
25352
25353 assert(false, 'Base should be between 2 and 36');
25354 };
25355
25356 BN.prototype.toNumber = function toNumber () {
25357 var ret = this.words[0];
25358 if (this.length === 2) {
25359 ret += this.words[1] * 0x4000000;
25360 } else if (this.length === 3 && this.words[2] === 0x01) {
25361 // NOTE: at this stage it is known that the top bit is set
25362 ret += 0x10000000000000 + (this.words[1] * 0x4000000);
25363 } else if (this.length > 2) {
25364 assert(false, 'Number can only safely store up to 53 bits');
25365 }
25366 return (this.negative !== 0) ? -ret : ret;
25367 };
25368
25369 BN.prototype.toJSON = function toJSON () {
25370 return this.toString(16);
25371 };
25372
25373 BN.prototype.toBuffer = function toBuffer (endian, length) {
25374 assert(typeof Buffer !== 'undefined');
25375 return this.toArrayLike(Buffer, endian, length);
25376 };
ebd8d4e8 25377
8b095871
IC
25378 BN.prototype.toArray = function toArray (endian, length) {
25379 return this.toArrayLike(Array, endian, length);
25380 };
ebd8d4e8 25381
8b095871
IC
25382 BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {
25383 var byteLength = this.byteLength();
25384 var reqLength = length || Math.max(1, byteLength);
25385 assert(byteLength <= reqLength, 'byte array longer than desired length');
25386 assert(reqLength > 0, 'Requested array length <= 0');
25387
25388 this.strip();
25389 var littleEndian = endian === 'le';
25390 var res = new ArrayType(reqLength);
25391
25392 var b, i;
25393 var q = this.clone();
25394 if (!littleEndian) {
25395 // Assume big-endian
25396 for (i = 0; i < reqLength - byteLength; i++) {
25397 res[i] = 0;
25398 }
ebd8d4e8 25399
8b095871
IC
25400 for (i = 0; !q.isZero(); i++) {
25401 b = q.andln(0xff);
25402 q.iushrn(8);
ebd8d4e8 25403
8b095871
IC
25404 res[reqLength - i - 1] = b;
25405 }
25406 } else {
25407 for (i = 0; !q.isZero(); i++) {
25408 b = q.andln(0xff);
25409 q.iushrn(8);
ebd8d4e8 25410
8b095871
IC
25411 res[i] = b;
25412 }
25413
25414 for (; i < reqLength; i++) {
25415 res[i] = 0;
25416 }
ab78acc6 25417 }
ebd8d4e8 25418
8b095871
IC
25419 return res;
25420 };
ebd8d4e8 25421
8b095871
IC
25422 if (Math.clz32) {
25423 BN.prototype._countBits = function _countBits (w) {
25424 return 32 - Math.clz32(w);
25425 };
25426 } else {
25427 BN.prototype._countBits = function _countBits (w) {
25428 var t = w;
25429 var r = 0;
25430 if (t >= 0x1000) {
25431 r += 13;
25432 t >>>= 13;
25433 }
25434 if (t >= 0x40) {
25435 r += 7;
25436 t >>>= 7;
25437 }
25438 if (t >= 0x8) {
25439 r += 4;
25440 t >>>= 4;
25441 }
25442 if (t >= 0x02) {
25443 r += 2;
25444 t >>>= 2;
25445 }
25446 return r + t;
25447 };
ebd8d4e8
IC
25448 }
25449
8b095871
IC
25450 BN.prototype._zeroBits = function _zeroBits (w) {
25451 // Short-cut
25452 if (w === 0) return 26;
ebd8d4e8 25453
8b095871
IC
25454 var t = w;
25455 var r = 0;
25456 if ((t & 0x1fff) === 0) {
25457 r += 13;
25458 t >>>= 13;
25459 }
25460 if ((t & 0x7f) === 0) {
25461 r += 7;
25462 t >>>= 7;
25463 }
25464 if ((t & 0xf) === 0) {
25465 r += 4;
25466 t >>>= 4;
25467 }
25468 if ((t & 0x3) === 0) {
25469 r += 2;
25470 t >>>= 2;
25471 }
25472 if ((t & 0x1) === 0) {
25473 r++;
25474 }
25475 return r;
25476 };
ebd8d4e8 25477
8b095871
IC
25478 // Return number of used bits in a BN
25479 BN.prototype.bitLength = function bitLength () {
25480 var w = this.words[this.length - 1];
25481 var hi = this._countBits(w);
25482 return (this.length - 1) * 26 + hi;
25483 };
ebd8d4e8 25484
8b095871
IC
25485 function toBitArray (num) {
25486 var w = new Array(num.bitLength());
ebd8d4e8 25487
8b095871
IC
25488 for (var bit = 0; bit < w.length; bit++) {
25489 var off = (bit / 26) | 0;
25490 var wbit = bit % 26;
ebd8d4e8 25491
8b095871 25492 w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;
ab78acc6 25493 }
8b095871
IC
25494
25495 return w;
ab78acc6 25496 }
ebd8d4e8 25497
8b095871
IC
25498 // Number of trailing zero bits
25499 BN.prototype.zeroBits = function zeroBits () {
25500 if (this.isZero()) return 0;
25501
25502 var r = 0;
25503 for (var i = 0; i < this.length; i++) {
25504 var b = this._zeroBits(this.words[i]);
25505 r += b;
25506 if (b !== 26) break;
ab78acc6 25507 }
8b095871
IC
25508 return r;
25509 };
25510
25511 BN.prototype.byteLength = function byteLength () {
25512 return Math.ceil(this.bitLength() / 8);
25513 };
25514
25515 BN.prototype.toTwos = function toTwos (width) {
25516 if (this.negative !== 0) {
25517 return this.abs().inotn(width).iaddn(1);
ab78acc6 25518 }
8b095871
IC
25519 return this.clone();
25520 };
ebd8d4e8 25521
8b095871
IC
25522 BN.prototype.fromTwos = function fromTwos (width) {
25523 if (this.testn(width - 1)) {
25524 return this.notn(width).iaddn(1).ineg();
25525 }
25526 return this.clone();
25527 };
ebd8d4e8 25528
8b095871
IC
25529 BN.prototype.isNeg = function isNeg () {
25530 return this.negative !== 0;
25531 };
ebd8d4e8 25532
8b095871
IC
25533 // Return negative clone of `this`
25534 BN.prototype.neg = function neg () {
25535 return this.clone().ineg();
25536 };
ebd8d4e8 25537
8b095871
IC
25538 BN.prototype.ineg = function ineg () {
25539 if (!this.isZero()) {
25540 this.negative ^= 1;
ab78acc6 25541 }
ebd8d4e8 25542
8b095871
IC
25543 return this;
25544 };
ebd8d4e8 25545
8b095871
IC
25546 // Or `num` with `this` in-place
25547 BN.prototype.iuor = function iuor (num) {
25548 while (this.length < num.length) {
25549 this.words[this.length++] = 0;
25550 }
ebd8d4e8 25551
8b095871
IC
25552 for (var i = 0; i < num.length; i++) {
25553 this.words[i] = this.words[i] | num.words[i];
ebd8d4e8 25554 }
ebd8d4e8 25555
8b095871
IC
25556 return this.strip();
25557 };
ebd8d4e8 25558
8b095871
IC
25559 BN.prototype.ior = function ior (num) {
25560 assert((this.negative | num.negative) === 0);
25561 return this.iuor(num);
ab78acc6 25562 };
ebd8d4e8 25563
8b095871
IC
25564 // Or `num` with `this`
25565 BN.prototype.or = function or (num) {
25566 if (this.length > num.length) return this.clone().ior(num);
25567 return num.clone().ior(this);
25568 };
ebd8d4e8 25569
8b095871
IC
25570 BN.prototype.uor = function uor (num) {
25571 if (this.length > num.length) return this.clone().iuor(num);
25572 return num.clone().iuor(this);
25573 };
ebd8d4e8 25574
8b095871
IC
25575 // And `num` with `this` in-place
25576 BN.prototype.iuand = function iuand (num) {
25577 // b = min-length(num, this)
25578 var b;
25579 if (this.length > num.length) {
25580 b = num;
25581 } else {
25582 b = this;
25583 }
25584
25585 for (var i = 0; i < b.length; i++) {
25586 this.words[i] = this.words[i] & num.words[i];
25587 }
ebd8d4e8 25588
8b095871 25589 this.length = b.length;
ebd8d4e8 25590
8b095871
IC
25591 return this.strip();
25592 };
ebd8d4e8 25593
8b095871
IC
25594 BN.prototype.iand = function iand (num) {
25595 assert((this.negative | num.negative) === 0);
25596 return this.iuand(num);
25597 };
ebd8d4e8 25598
8b095871
IC
25599 // And `num` with `this`
25600 BN.prototype.and = function and (num) {
25601 if (this.length > num.length) return this.clone().iand(num);
25602 return num.clone().iand(this);
25603 };
ebd8d4e8 25604
8b095871
IC
25605 BN.prototype.uand = function uand (num) {
25606 if (this.length > num.length) return this.clone().iuand(num);
25607 return num.clone().iuand(this);
25608 };
ebd8d4e8 25609
8b095871
IC
25610 // Xor `num` with `this` in-place
25611 BN.prototype.iuxor = function iuxor (num) {
25612 // a.length > b.length
25613 var a;
25614 var b;
25615 if (this.length > num.length) {
25616 a = this;
25617 b = num;
25618 } else {
25619 a = num;
25620 b = this;
25621 }
ebd8d4e8 25622
8b095871
IC
25623 for (var i = 0; i < b.length; i++) {
25624 this.words[i] = a.words[i] ^ b.words[i];
25625 }
ebd8d4e8 25626
8b095871
IC
25627 if (this !== a) {
25628 for (; i < a.length; i++) {
25629 this.words[i] = a.words[i];
25630 }
25631 }
ebd8d4e8 25632
8b095871 25633 this.length = a.length;
ebd8d4e8 25634
8b095871
IC
25635 return this.strip();
25636 };
ebd8d4e8 25637
8b095871
IC
25638 BN.prototype.ixor = function ixor (num) {
25639 assert((this.negative | num.negative) === 0);
25640 return this.iuxor(num);
25641 };
ebd8d4e8 25642
8b095871
IC
25643 // Xor `num` with `this`
25644 BN.prototype.xor = function xor (num) {
25645 if (this.length > num.length) return this.clone().ixor(num);
25646 return num.clone().ixor(this);
25647 };
ebd8d4e8 25648
8b095871
IC
25649 BN.prototype.uxor = function uxor (num) {
25650 if (this.length > num.length) return this.clone().iuxor(num);
25651 return num.clone().iuxor(this);
25652 };
ebd8d4e8 25653
8b095871
IC
25654 // Not ``this`` with ``width`` bitwidth
25655 BN.prototype.inotn = function inotn (width) {
25656 assert(typeof width === 'number' && width >= 0);
ebd8d4e8 25657
8b095871
IC
25658 var bytesNeeded = Math.ceil(width / 26) | 0;
25659 var bitsLeft = width % 26;
ebd8d4e8 25660
8b095871
IC
25661 // Extend the buffer with leading zeroes
25662 this._expand(bytesNeeded);
25663
25664 if (bitsLeft > 0) {
25665 bytesNeeded--;
ab78acc6 25666 }
8b095871
IC
25667
25668 // Handle complete words
25669 for (var i = 0; i < bytesNeeded; i++) {
25670 this.words[i] = ~this.words[i] & 0x3ffffff;
ab78acc6 25671 }
8b095871
IC
25672
25673 // Handle the residue
25674 if (bitsLeft > 0) {
25675 this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));
ab78acc6 25676 }
ebd8d4e8 25677
8b095871
IC
25678 // And remove leading zeroes
25679 return this.strip();
25680 };
ebd8d4e8 25681
8b095871
IC
25682 BN.prototype.notn = function notn (width) {
25683 return this.clone().inotn(width);
25684 };
ebd8d4e8 25685
8b095871
IC
25686 // Set `bit` of `this`
25687 BN.prototype.setn = function setn (bit, val) {
25688 assert(typeof bit === 'number' && bit >= 0);
ebd8d4e8 25689
8b095871
IC
25690 var off = (bit / 26) | 0;
25691 var wbit = bit % 26;
ebd8d4e8 25692
8b095871 25693 this._expand(off + 1);
ebd8d4e8 25694
8b095871
IC
25695 if (val) {
25696 this.words[off] = this.words[off] | (1 << wbit);
25697 } else {
25698 this.words[off] = this.words[off] & ~(1 << wbit);
25699 }
ebd8d4e8 25700
8b095871
IC
25701 return this.strip();
25702 };
ebd8d4e8 25703
8b095871
IC
25704 // Add `num` to `this` in-place
25705 BN.prototype.iadd = function iadd (num) {
25706 var r;
25707
25708 // negative + positive
25709 if (this.negative !== 0 && num.negative === 0) {
25710 this.negative = 0;
25711 r = this.isub(num);
25712 this.negative ^= 1;
25713 return this._normSign();
25714
25715 // positive + negative
25716 } else if (this.negative === 0 && num.negative !== 0) {
25717 num.negative = 0;
25718 r = this.isub(num);
25719 num.negative = 1;
25720 return r._normSign();
25721 }
25722
25723 // a.length > b.length
25724 var a, b;
25725 if (this.length > num.length) {
25726 a = this;
25727 b = num;
ab78acc6 25728 } else {
8b095871
IC
25729 a = num;
25730 b = this;
25731 }
25732
25733 var carry = 0;
25734 for (var i = 0; i < b.length; i++) {
25735 r = (a.words[i] | 0) + (b.words[i] | 0) + carry;
25736 this.words[i] = r & 0x3ffffff;
25737 carry = r >>> 26;
25738 }
25739 for (; carry !== 0 && i < a.length; i++) {
25740 r = (a.words[i] | 0) + carry;
25741 this.words[i] = r & 0x3ffffff;
25742 carry = r >>> 26;
25743 }
25744
25745 this.length = a.length;
25746 if (carry !== 0) {
25747 this.words[this.length] = carry;
25748 this.length++;
25749 // Copy the rest of the words
25750 } else if (a !== this) {
25751 for (; i < a.length; i++) {
25752 this.words[i] = a.words[i];
25753 }
ab78acc6 25754 }
ebd8d4e8 25755
8b095871
IC
25756 return this;
25757 };
ebd8d4e8 25758
8b095871
IC
25759 // Add `num` to `this`
25760 BN.prototype.add = function add (num) {
25761 var res;
25762 if (num.negative !== 0 && this.negative === 0) {
25763 num.negative = 0;
25764 res = this.sub(num);
25765 num.negative ^= 1;
25766 return res;
25767 } else if (num.negative === 0 && this.negative !== 0) {
25768 this.negative = 0;
25769 res = num.sub(this);
25770 this.negative = 1;
25771 return res;
25772 }
ebd8d4e8 25773
8b095871 25774 if (this.length > num.length) return this.clone().iadd(num);
ebd8d4e8 25775
8b095871
IC
25776 return num.clone().iadd(this);
25777 };
ebd8d4e8 25778
8b095871
IC
25779 // Subtract `num` from `this` in-place
25780 BN.prototype.isub = function isub (num) {
25781 // this - (-num) = this + num
25782 if (num.negative !== 0) {
25783 num.negative = 0;
25784 var r = this.iadd(num);
25785 num.negative = 1;
25786 return r._normSign();
25787
25788 // -this - num = -(this + num)
25789 } else if (this.negative !== 0) {
25790 this.negative = 0;
25791 this.iadd(num);
25792 this.negative = 1;
25793 return this._normSign();
25794 }
25795
25796 // At this point both numbers are positive
25797 var cmp = this.cmp(num);
25798
25799 // Optimization - zeroify
25800 if (cmp === 0) {
25801 this.negative = 0;
25802 this.length = 1;
25803 this.words[0] = 0;
25804 return this;
25805 }
ebd8d4e8 25806
8b095871
IC
25807 // a > b
25808 var a, b;
25809 if (cmp > 0) {
25810 a = this;
25811 b = num;
25812 } else {
25813 a = num;
25814 b = this;
25815 }
ebd8d4e8 25816
8b095871
IC
25817 var carry = 0;
25818 for (var i = 0; i < b.length; i++) {
25819 r = (a.words[i] | 0) - (b.words[i] | 0) + carry;
25820 carry = r >> 26;
25821 this.words[i] = r & 0x3ffffff;
25822 }
25823 for (; carry !== 0 && i < a.length; i++) {
25824 r = (a.words[i] | 0) + carry;
25825 carry = r >> 26;
25826 this.words[i] = r & 0x3ffffff;
25827 }
ebd8d4e8 25828
8b095871
IC
25829 // Copy rest of the words
25830 if (carry === 0 && i < a.length && a !== this) {
25831 for (; i < a.length; i++) {
25832 this.words[i] = a.words[i];
25833 }
25834 }
ebd8d4e8 25835
8b095871 25836 this.length = Math.max(this.length, i);
ebd8d4e8 25837
8b095871
IC
25838 if (a !== this) {
25839 this.negative = 1;
ab78acc6 25840 }
ebd8d4e8 25841
8b095871
IC
25842 return this.strip();
25843 };
ebd8d4e8 25844
8b095871
IC
25845 // Subtract `num` from `this`
25846 BN.prototype.sub = function sub (num) {
25847 return this.clone().isub(num);
25848 };
25849
25850 function smallMulTo (self, num, out) {
25851 out.negative = num.negative ^ self.negative;
25852 var len = (self.length + num.length) | 0;
25853 out.length = len;
25854 len = (len - 1) | 0;
25855
25856 // Peel one iteration (compiler can't do it, because of code complexity)
25857 var a = self.words[0] | 0;
25858 var b = num.words[0] | 0;
25859 var r = a * b;
25860
25861 var lo = r & 0x3ffffff;
25862 var carry = (r / 0x4000000) | 0;
25863 out.words[0] = lo;
25864
25865 for (var k = 1; k < len; k++) {
25866 // Sum all words with the same `i + j = k` and accumulate `ncarry`,
25867 // note that ncarry could be >= 0x3ffffff
25868 var ncarry = carry >>> 26;
25869 var rword = carry & 0x3ffffff;
25870 var maxJ = Math.min(k, num.length - 1);
25871 for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {
25872 var i = (k - j) | 0;
25873 a = self.words[i] | 0;
25874 b = num.words[j] | 0;
25875 r = a * b + rword;
25876 ncarry += (r / 0x4000000) | 0;
25877 rword = r & 0x3ffffff;
25878 }
25879 out.words[k] = rword | 0;
25880 carry = ncarry | 0;
25881 }
25882 if (carry !== 0) {
25883 out.words[k] = carry | 0;
ab78acc6 25884 } else {
8b095871
IC
25885 out.length--;
25886 }
25887
25888 return out.strip();
25889 }
25890
25891 // TODO(indutny): it may be reasonable to omit it for users who don't need
25892 // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit
25893 // multiplication (like elliptic secp256k1).
25894 var comb10MulTo = function comb10MulTo (self, num, out) {
25895 var a = self.words;
25896 var b = num.words;
25897 var o = out.words;
25898 var c = 0;
25899 var lo;
25900 var mid;
25901 var hi;
25902 var a0 = a[0] | 0;
25903 var al0 = a0 & 0x1fff;
25904 var ah0 = a0 >>> 13;
25905 var a1 = a[1] | 0;
25906 var al1 = a1 & 0x1fff;
25907 var ah1 = a1 >>> 13;
25908 var a2 = a[2] | 0;
25909 var al2 = a2 & 0x1fff;
25910 var ah2 = a2 >>> 13;
25911 var a3 = a[3] | 0;
25912 var al3 = a3 & 0x1fff;
25913 var ah3 = a3 >>> 13;
25914 var a4 = a[4] | 0;
25915 var al4 = a4 & 0x1fff;
25916 var ah4 = a4 >>> 13;
25917 var a5 = a[5] | 0;
25918 var al5 = a5 & 0x1fff;
25919 var ah5 = a5 >>> 13;
25920 var a6 = a[6] | 0;
25921 var al6 = a6 & 0x1fff;
25922 var ah6 = a6 >>> 13;
25923 var a7 = a[7] | 0;
25924 var al7 = a7 & 0x1fff;
25925 var ah7 = a7 >>> 13;
25926 var a8 = a[8] | 0;
25927 var al8 = a8 & 0x1fff;
25928 var ah8 = a8 >>> 13;
25929 var a9 = a[9] | 0;
25930 var al9 = a9 & 0x1fff;
25931 var ah9 = a9 >>> 13;
25932 var b0 = b[0] | 0;
25933 var bl0 = b0 & 0x1fff;
25934 var bh0 = b0 >>> 13;
25935 var b1 = b[1] | 0;
25936 var bl1 = b1 & 0x1fff;
25937 var bh1 = b1 >>> 13;
25938 var b2 = b[2] | 0;
25939 var bl2 = b2 & 0x1fff;
25940 var bh2 = b2 >>> 13;
25941 var b3 = b[3] | 0;
25942 var bl3 = b3 & 0x1fff;
25943 var bh3 = b3 >>> 13;
25944 var b4 = b[4] | 0;
25945 var bl4 = b4 & 0x1fff;
25946 var bh4 = b4 >>> 13;
25947 var b5 = b[5] | 0;
25948 var bl5 = b5 & 0x1fff;
25949 var bh5 = b5 >>> 13;
25950 var b6 = b[6] | 0;
25951 var bl6 = b6 & 0x1fff;
25952 var bh6 = b6 >>> 13;
25953 var b7 = b[7] | 0;
25954 var bl7 = b7 & 0x1fff;
25955 var bh7 = b7 >>> 13;
25956 var b8 = b[8] | 0;
25957 var bl8 = b8 & 0x1fff;
25958 var bh8 = b8 >>> 13;
25959 var b9 = b[9] | 0;
25960 var bl9 = b9 & 0x1fff;
25961 var bh9 = b9 >>> 13;
25962
25963 out.negative = self.negative ^ num.negative;
25964 out.length = 19;
25965 /* k = 0 */
25966 lo = Math.imul(al0, bl0);
25967 mid = Math.imul(al0, bh0);
25968 mid = (mid + Math.imul(ah0, bl0)) | 0;
25969 hi = Math.imul(ah0, bh0);
25970 var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
25971 c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;
25972 w0 &= 0x3ffffff;
25973 /* k = 1 */
25974 lo = Math.imul(al1, bl0);
25975 mid = Math.imul(al1, bh0);
25976 mid = (mid + Math.imul(ah1, bl0)) | 0;
25977 hi = Math.imul(ah1, bh0);
25978 lo = (lo + Math.imul(al0, bl1)) | 0;
25979 mid = (mid + Math.imul(al0, bh1)) | 0;
25980 mid = (mid + Math.imul(ah0, bl1)) | 0;
25981 hi = (hi + Math.imul(ah0, bh1)) | 0;
25982 var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
25983 c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;
25984 w1 &= 0x3ffffff;
25985 /* k = 2 */
25986 lo = Math.imul(al2, bl0);
25987 mid = Math.imul(al2, bh0);
25988 mid = (mid + Math.imul(ah2, bl0)) | 0;
25989 hi = Math.imul(ah2, bh0);
25990 lo = (lo + Math.imul(al1, bl1)) | 0;
25991 mid = (mid + Math.imul(al1, bh1)) | 0;
25992 mid = (mid + Math.imul(ah1, bl1)) | 0;
25993 hi = (hi + Math.imul(ah1, bh1)) | 0;
25994 lo = (lo + Math.imul(al0, bl2)) | 0;
25995 mid = (mid + Math.imul(al0, bh2)) | 0;
25996 mid = (mid + Math.imul(ah0, bl2)) | 0;
25997 hi = (hi + Math.imul(ah0, bh2)) | 0;
25998 var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
25999 c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;
26000 w2 &= 0x3ffffff;
26001 /* k = 3 */
26002 lo = Math.imul(al3, bl0);
26003 mid = Math.imul(al3, bh0);
26004 mid = (mid + Math.imul(ah3, bl0)) | 0;
26005 hi = Math.imul(ah3, bh0);
26006 lo = (lo + Math.imul(al2, bl1)) | 0;
26007 mid = (mid + Math.imul(al2, bh1)) | 0;
26008 mid = (mid + Math.imul(ah2, bl1)) | 0;
26009 hi = (hi + Math.imul(ah2, bh1)) | 0;
26010 lo = (lo + Math.imul(al1, bl2)) | 0;
26011 mid = (mid + Math.imul(al1, bh2)) | 0;
26012 mid = (mid + Math.imul(ah1, bl2)) | 0;
26013 hi = (hi + Math.imul(ah1, bh2)) | 0;
26014 lo = (lo + Math.imul(al0, bl3)) | 0;
26015 mid = (mid + Math.imul(al0, bh3)) | 0;
26016 mid = (mid + Math.imul(ah0, bl3)) | 0;
26017 hi = (hi + Math.imul(ah0, bh3)) | 0;
26018 var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
26019 c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;
26020 w3 &= 0x3ffffff;
26021 /* k = 4 */
26022 lo = Math.imul(al4, bl0);
26023 mid = Math.imul(al4, bh0);
26024 mid = (mid + Math.imul(ah4, bl0)) | 0;
26025 hi = Math.imul(ah4, bh0);
26026 lo = (lo + Math.imul(al3, bl1)) | 0;
26027 mid = (mid + Math.imul(al3, bh1)) | 0;
26028 mid = (mid + Math.imul(ah3, bl1)) | 0;
26029 hi = (hi + Math.imul(ah3, bh1)) | 0;
26030 lo = (lo + Math.imul(al2, bl2)) | 0;
26031 mid = (mid + Math.imul(al2, bh2)) | 0;
26032 mid = (mid + Math.imul(ah2, bl2)) | 0;
26033 hi = (hi + Math.imul(ah2, bh2)) | 0;
26034 lo = (lo + Math.imul(al1, bl3)) | 0;
26035 mid = (mid + Math.imul(al1, bh3)) | 0;
26036 mid = (mid + Math.imul(ah1, bl3)) | 0;
26037 hi = (hi + Math.imul(ah1, bh3)) | 0;
26038 lo = (lo + Math.imul(al0, bl4)) | 0;
26039 mid = (mid + Math.imul(al0, bh4)) | 0;
26040 mid = (mid + Math.imul(ah0, bl4)) | 0;
26041 hi = (hi + Math.imul(ah0, bh4)) | 0;
26042 var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
26043 c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;
26044 w4 &= 0x3ffffff;
26045 /* k = 5 */
26046 lo = Math.imul(al5, bl0);
26047 mid = Math.imul(al5, bh0);
26048 mid = (mid + Math.imul(ah5, bl0)) | 0;
26049 hi = Math.imul(ah5, bh0);
26050 lo = (lo + Math.imul(al4, bl1)) | 0;
26051 mid = (mid + Math.imul(al4, bh1)) | 0;
26052 mid = (mid + Math.imul(ah4, bl1)) | 0;
26053 hi = (hi + Math.imul(ah4, bh1)) | 0;
26054 lo = (lo + Math.imul(al3, bl2)) | 0;
26055 mid = (mid + Math.imul(al3, bh2)) | 0;
26056 mid = (mid + Math.imul(ah3, bl2)) | 0;
26057 hi = (hi + Math.imul(ah3, bh2)) | 0;
26058 lo = (lo + Math.imul(al2, bl3)) | 0;
26059 mid = (mid + Math.imul(al2, bh3)) | 0;
26060 mid = (mid + Math.imul(ah2, bl3)) | 0;
26061 hi = (hi + Math.imul(ah2, bh3)) | 0;
26062 lo = (lo + Math.imul(al1, bl4)) | 0;
26063 mid = (mid + Math.imul(al1, bh4)) | 0;
26064 mid = (mid + Math.imul(ah1, bl4)) | 0;
26065 hi = (hi + Math.imul(ah1, bh4)) | 0;
26066 lo = (lo + Math.imul(al0, bl5)) | 0;
26067 mid = (mid + Math.imul(al0, bh5)) | 0;
26068 mid = (mid + Math.imul(ah0, bl5)) | 0;
26069 hi = (hi + Math.imul(ah0, bh5)) | 0;
26070 var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
26071 c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;
26072 w5 &= 0x3ffffff;
26073 /* k = 6 */
26074 lo = Math.imul(al6, bl0);
26075 mid = Math.imul(al6, bh0);
26076 mid = (mid + Math.imul(ah6, bl0)) | 0;
26077 hi = Math.imul(ah6, bh0);
26078 lo = (lo + Math.imul(al5, bl1)) | 0;
26079 mid = (mid + Math.imul(al5, bh1)) | 0;
26080 mid = (mid + Math.imul(ah5, bl1)) | 0;
26081 hi = (hi + Math.imul(ah5, bh1)) | 0;
26082 lo = (lo + Math.imul(al4, bl2)) | 0;
26083 mid = (mid + Math.imul(al4, bh2)) | 0;
26084 mid = (mid + Math.imul(ah4, bl2)) | 0;
26085 hi = (hi + Math.imul(ah4, bh2)) | 0;
26086 lo = (lo + Math.imul(al3, bl3)) | 0;
26087 mid = (mid + Math.imul(al3, bh3)) | 0;
26088 mid = (mid + Math.imul(ah3, bl3)) | 0;
26089 hi = (hi + Math.imul(ah3, bh3)) | 0;
26090 lo = (lo + Math.imul(al2, bl4)) | 0;
26091 mid = (mid + Math.imul(al2, bh4)) | 0;
26092 mid = (mid + Math.imul(ah2, bl4)) | 0;
26093 hi = (hi + Math.imul(ah2, bh4)) | 0;
26094 lo = (lo + Math.imul(al1, bl5)) | 0;
26095 mid = (mid + Math.imul(al1, bh5)) | 0;
26096 mid = (mid + Math.imul(ah1, bl5)) | 0;
26097 hi = (hi + Math.imul(ah1, bh5)) | 0;
26098 lo = (lo + Math.imul(al0, bl6)) | 0;
26099 mid = (mid + Math.imul(al0, bh6)) | 0;
26100 mid = (mid + Math.imul(ah0, bl6)) | 0;
26101 hi = (hi + Math.imul(ah0, bh6)) | 0;
26102 var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
26103 c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;
26104 w6 &= 0x3ffffff;
26105 /* k = 7 */
26106 lo = Math.imul(al7, bl0);
26107 mid = Math.imul(al7, bh0);
26108 mid = (mid + Math.imul(ah7, bl0)) | 0;
26109 hi = Math.imul(ah7, bh0);
26110 lo = (lo + Math.imul(al6, bl1)) | 0;
26111 mid = (mid + Math.imul(al6, bh1)) | 0;
26112 mid = (mid + Math.imul(ah6, bl1)) | 0;
26113 hi = (hi + Math.imul(ah6, bh1)) | 0;
26114 lo = (lo + Math.imul(al5, bl2)) | 0;
26115 mid = (mid + Math.imul(al5, bh2)) | 0;
26116 mid = (mid + Math.imul(ah5, bl2)) | 0;
26117 hi = (hi + Math.imul(ah5, bh2)) | 0;
26118 lo = (lo + Math.imul(al4, bl3)) | 0;
26119 mid = (mid + Math.imul(al4, bh3)) | 0;
26120 mid = (mid + Math.imul(ah4, bl3)) | 0;
26121 hi = (hi + Math.imul(ah4, bh3)) | 0;
26122 lo = (lo + Math.imul(al3, bl4)) | 0;
26123 mid = (mid + Math.imul(al3, bh4)) | 0;
26124 mid = (mid + Math.imul(ah3, bl4)) | 0;
26125 hi = (hi + Math.imul(ah3, bh4)) | 0;
26126 lo = (lo + Math.imul(al2, bl5)) | 0;
26127 mid = (mid + Math.imul(al2, bh5)) | 0;
26128 mid = (mid + Math.imul(ah2, bl5)) | 0;
26129 hi = (hi + Math.imul(ah2, bh5)) | 0;
26130 lo = (lo + Math.imul(al1, bl6)) | 0;
26131 mid = (mid + Math.imul(al1, bh6)) | 0;
26132 mid = (mid + Math.imul(ah1, bl6)) | 0;
26133 hi = (hi + Math.imul(ah1, bh6)) | 0;
26134 lo = (lo + Math.imul(al0, bl7)) | 0;
26135 mid = (mid + Math.imul(al0, bh7)) | 0;
26136 mid = (mid + Math.imul(ah0, bl7)) | 0;
26137 hi = (hi + Math.imul(ah0, bh7)) | 0;
26138 var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
26139 c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;
26140 w7 &= 0x3ffffff;
26141 /* k = 8 */
26142 lo = Math.imul(al8, bl0);
26143 mid = Math.imul(al8, bh0);
26144 mid = (mid + Math.imul(ah8, bl0)) | 0;
26145 hi = Math.imul(ah8, bh0);
26146 lo = (lo + Math.imul(al7, bl1)) | 0;
26147 mid = (mid + Math.imul(al7, bh1)) | 0;
26148 mid = (mid + Math.imul(ah7, bl1)) | 0;
26149 hi = (hi + Math.imul(ah7, bh1)) | 0;
26150 lo = (lo + Math.imul(al6, bl2)) | 0;
26151 mid = (mid + Math.imul(al6, bh2)) | 0;
26152 mid = (mid + Math.imul(ah6, bl2)) | 0;
26153 hi = (hi + Math.imul(ah6, bh2)) | 0;
26154 lo = (lo + Math.imul(al5, bl3)) | 0;
26155 mid = (mid + Math.imul(al5, bh3)) | 0;
26156 mid = (mid + Math.imul(ah5, bl3)) | 0;
26157 hi = (hi + Math.imul(ah5, bh3)) | 0;
26158 lo = (lo + Math.imul(al4, bl4)) | 0;
26159 mid = (mid + Math.imul(al4, bh4)) | 0;
26160 mid = (mid + Math.imul(ah4, bl4)) | 0;
26161 hi = (hi + Math.imul(ah4, bh4)) | 0;
26162 lo = (lo + Math.imul(al3, bl5)) | 0;
26163 mid = (mid + Math.imul(al3, bh5)) | 0;
26164 mid = (mid + Math.imul(ah3, bl5)) | 0;
26165 hi = (hi + Math.imul(ah3, bh5)) | 0;
26166 lo = (lo + Math.imul(al2, bl6)) | 0;
26167 mid = (mid + Math.imul(al2, bh6)) | 0;
26168 mid = (mid + Math.imul(ah2, bl6)) | 0;
26169 hi = (hi + Math.imul(ah2, bh6)) | 0;
26170 lo = (lo + Math.imul(al1, bl7)) | 0;
26171 mid = (mid + Math.imul(al1, bh7)) | 0;
26172 mid = (mid + Math.imul(ah1, bl7)) | 0;
26173 hi = (hi + Math.imul(ah1, bh7)) | 0;
26174 lo = (lo + Math.imul(al0, bl8)) | 0;
26175 mid = (mid + Math.imul(al0, bh8)) | 0;
26176 mid = (mid + Math.imul(ah0, bl8)) | 0;
26177 hi = (hi + Math.imul(ah0, bh8)) | 0;
26178 var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
26179 c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;
26180 w8 &= 0x3ffffff;
26181 /* k = 9 */
26182 lo = Math.imul(al9, bl0);
26183 mid = Math.imul(al9, bh0);
26184 mid = (mid + Math.imul(ah9, bl0)) | 0;
26185 hi = Math.imul(ah9, bh0);
26186 lo = (lo + Math.imul(al8, bl1)) | 0;
26187 mid = (mid + Math.imul(al8, bh1)) | 0;
26188 mid = (mid + Math.imul(ah8, bl1)) | 0;
26189 hi = (hi + Math.imul(ah8, bh1)) | 0;
26190 lo = (lo + Math.imul(al7, bl2)) | 0;
26191 mid = (mid + Math.imul(al7, bh2)) | 0;
26192 mid = (mid + Math.imul(ah7, bl2)) | 0;
26193 hi = (hi + Math.imul(ah7, bh2)) | 0;
26194 lo = (lo + Math.imul(al6, bl3)) | 0;
26195 mid = (mid + Math.imul(al6, bh3)) | 0;
26196 mid = (mid + Math.imul(ah6, bl3)) | 0;
26197 hi = (hi + Math.imul(ah6, bh3)) | 0;
26198 lo = (lo + Math.imul(al5, bl4)) | 0;
26199 mid = (mid + Math.imul(al5, bh4)) | 0;
26200 mid = (mid + Math.imul(ah5, bl4)) | 0;
26201 hi = (hi + Math.imul(ah5, bh4)) | 0;
26202 lo = (lo + Math.imul(al4, bl5)) | 0;
26203 mid = (mid + Math.imul(al4, bh5)) | 0;
26204 mid = (mid + Math.imul(ah4, bl5)) | 0;
26205 hi = (hi + Math.imul(ah4, bh5)) | 0;
26206 lo = (lo + Math.imul(al3, bl6)) | 0;
26207 mid = (mid + Math.imul(al3, bh6)) | 0;
26208 mid = (mid + Math.imul(ah3, bl6)) | 0;
26209 hi = (hi + Math.imul(ah3, bh6)) | 0;
26210 lo = (lo + Math.imul(al2, bl7)) | 0;
26211 mid = (mid + Math.imul(al2, bh7)) | 0;
26212 mid = (mid + Math.imul(ah2, bl7)) | 0;
26213 hi = (hi + Math.imul(ah2, bh7)) | 0;
26214 lo = (lo + Math.imul(al1, bl8)) | 0;
26215 mid = (mid + Math.imul(al1, bh8)) | 0;
26216 mid = (mid + Math.imul(ah1, bl8)) | 0;
26217 hi = (hi + Math.imul(ah1, bh8)) | 0;
26218 lo = (lo + Math.imul(al0, bl9)) | 0;
26219 mid = (mid + Math.imul(al0, bh9)) | 0;
26220 mid = (mid + Math.imul(ah0, bl9)) | 0;
26221 hi = (hi + Math.imul(ah0, bh9)) | 0;
26222 var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
26223 c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;
26224 w9 &= 0x3ffffff;
26225 /* k = 10 */
26226 lo = Math.imul(al9, bl1);
26227 mid = Math.imul(al9, bh1);
26228 mid = (mid + Math.imul(ah9, bl1)) | 0;
26229 hi = Math.imul(ah9, bh1);
26230 lo = (lo + Math.imul(al8, bl2)) | 0;
26231 mid = (mid + Math.imul(al8, bh2)) | 0;
26232 mid = (mid + Math.imul(ah8, bl2)) | 0;
26233 hi = (hi + Math.imul(ah8, bh2)) | 0;
26234 lo = (lo + Math.imul(al7, bl3)) | 0;
26235 mid = (mid + Math.imul(al7, bh3)) | 0;
26236 mid = (mid + Math.imul(ah7, bl3)) | 0;
26237 hi = (hi + Math.imul(ah7, bh3)) | 0;
26238 lo = (lo + Math.imul(al6, bl4)) | 0;
26239 mid = (mid + Math.imul(al6, bh4)) | 0;
26240 mid = (mid + Math.imul(ah6, bl4)) | 0;
26241 hi = (hi + Math.imul(ah6, bh4)) | 0;
26242 lo = (lo + Math.imul(al5, bl5)) | 0;
26243 mid = (mid + Math.imul(al5, bh5)) | 0;
26244 mid = (mid + Math.imul(ah5, bl5)) | 0;
26245 hi = (hi + Math.imul(ah5, bh5)) | 0;
26246 lo = (lo + Math.imul(al4, bl6)) | 0;
26247 mid = (mid + Math.imul(al4, bh6)) | 0;
26248 mid = (mid + Math.imul(ah4, bl6)) | 0;
26249 hi = (hi + Math.imul(ah4, bh6)) | 0;
26250 lo = (lo + Math.imul(al3, bl7)) | 0;
26251 mid = (mid + Math.imul(al3, bh7)) | 0;
26252 mid = (mid + Math.imul(ah3, bl7)) | 0;
26253 hi = (hi + Math.imul(ah3, bh7)) | 0;
26254 lo = (lo + Math.imul(al2, bl8)) | 0;
26255 mid = (mid + Math.imul(al2, bh8)) | 0;
26256 mid = (mid + Math.imul(ah2, bl8)) | 0;
26257 hi = (hi + Math.imul(ah2, bh8)) | 0;
26258 lo = (lo + Math.imul(al1, bl9)) | 0;
26259 mid = (mid + Math.imul(al1, bh9)) | 0;
26260 mid = (mid + Math.imul(ah1, bl9)) | 0;
26261 hi = (hi + Math.imul(ah1, bh9)) | 0;
26262 var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
26263 c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;
26264 w10 &= 0x3ffffff;
26265 /* k = 11 */
26266 lo = Math.imul(al9, bl2);
26267 mid = Math.imul(al9, bh2);
26268 mid = (mid + Math.imul(ah9, bl2)) | 0;
26269 hi = Math.imul(ah9, bh2);
26270 lo = (lo + Math.imul(al8, bl3)) | 0;
26271 mid = (mid + Math.imul(al8, bh3)) | 0;
26272 mid = (mid + Math.imul(ah8, bl3)) | 0;
26273 hi = (hi + Math.imul(ah8, bh3)) | 0;
26274 lo = (lo + Math.imul(al7, bl4)) | 0;
26275 mid = (mid + Math.imul(al7, bh4)) | 0;
26276 mid = (mid + Math.imul(ah7, bl4)) | 0;
26277 hi = (hi + Math.imul(ah7, bh4)) | 0;
26278 lo = (lo + Math.imul(al6, bl5)) | 0;
26279 mid = (mid + Math.imul(al6, bh5)) | 0;
26280 mid = (mid + Math.imul(ah6, bl5)) | 0;
26281 hi = (hi + Math.imul(ah6, bh5)) | 0;
26282 lo = (lo + Math.imul(al5, bl6)) | 0;
26283 mid = (mid + Math.imul(al5, bh6)) | 0;
26284 mid = (mid + Math.imul(ah5, bl6)) | 0;
26285 hi = (hi + Math.imul(ah5, bh6)) | 0;
26286 lo = (lo + Math.imul(al4, bl7)) | 0;
26287 mid = (mid + Math.imul(al4, bh7)) | 0;
26288 mid = (mid + Math.imul(ah4, bl7)) | 0;
26289 hi = (hi + Math.imul(ah4, bh7)) | 0;
26290 lo = (lo + Math.imul(al3, bl8)) | 0;
26291 mid = (mid + Math.imul(al3, bh8)) | 0;
26292 mid = (mid + Math.imul(ah3, bl8)) | 0;
26293 hi = (hi + Math.imul(ah3, bh8)) | 0;
26294 lo = (lo + Math.imul(al2, bl9)) | 0;
26295 mid = (mid + Math.imul(al2, bh9)) | 0;
26296 mid = (mid + Math.imul(ah2, bl9)) | 0;
26297 hi = (hi + Math.imul(ah2, bh9)) | 0;
26298 var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
26299 c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;
26300 w11 &= 0x3ffffff;
26301 /* k = 12 */
26302 lo = Math.imul(al9, bl3);
26303 mid = Math.imul(al9, bh3);
26304 mid = (mid + Math.imul(ah9, bl3)) | 0;
26305 hi = Math.imul(ah9, bh3);
26306 lo = (lo + Math.imul(al8, bl4)) | 0;
26307 mid = (mid + Math.imul(al8, bh4)) | 0;
26308 mid = (mid + Math.imul(ah8, bl4)) | 0;
26309 hi = (hi + Math.imul(ah8, bh4)) | 0;
26310 lo = (lo + Math.imul(al7, bl5)) | 0;
26311 mid = (mid + Math.imul(al7, bh5)) | 0;
26312 mid = (mid + Math.imul(ah7, bl5)) | 0;
26313 hi = (hi + Math.imul(ah7, bh5)) | 0;
26314 lo = (lo + Math.imul(al6, bl6)) | 0;
26315 mid = (mid + Math.imul(al6, bh6)) | 0;
26316 mid = (mid + Math.imul(ah6, bl6)) | 0;
26317 hi = (hi + Math.imul(ah6, bh6)) | 0;
26318 lo = (lo + Math.imul(al5, bl7)) | 0;
26319 mid = (mid + Math.imul(al5, bh7)) | 0;
26320 mid = (mid + Math.imul(ah5, bl7)) | 0;
26321 hi = (hi + Math.imul(ah5, bh7)) | 0;
26322 lo = (lo + Math.imul(al4, bl8)) | 0;
26323 mid = (mid + Math.imul(al4, bh8)) | 0;
26324 mid = (mid + Math.imul(ah4, bl8)) | 0;
26325 hi = (hi + Math.imul(ah4, bh8)) | 0;
26326 lo = (lo + Math.imul(al3, bl9)) | 0;
26327 mid = (mid + Math.imul(al3, bh9)) | 0;
26328 mid = (mid + Math.imul(ah3, bl9)) | 0;
26329 hi = (hi + Math.imul(ah3, bh9)) | 0;
26330 var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
26331 c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;
26332 w12 &= 0x3ffffff;
26333 /* k = 13 */
26334 lo = Math.imul(al9, bl4);
26335 mid = Math.imul(al9, bh4);
26336 mid = (mid + Math.imul(ah9, bl4)) | 0;
26337 hi = Math.imul(ah9, bh4);
26338 lo = (lo + Math.imul(al8, bl5)) | 0;
26339 mid = (mid + Math.imul(al8, bh5)) | 0;
26340 mid = (mid + Math.imul(ah8, bl5)) | 0;
26341 hi = (hi + Math.imul(ah8, bh5)) | 0;
26342 lo = (lo + Math.imul(al7, bl6)) | 0;
26343 mid = (mid + Math.imul(al7, bh6)) | 0;
26344 mid = (mid + Math.imul(ah7, bl6)) | 0;
26345 hi = (hi + Math.imul(ah7, bh6)) | 0;
26346 lo = (lo + Math.imul(al6, bl7)) | 0;
26347 mid = (mid + Math.imul(al6, bh7)) | 0;
26348 mid = (mid + Math.imul(ah6, bl7)) | 0;
26349 hi = (hi + Math.imul(ah6, bh7)) | 0;
26350 lo = (lo + Math.imul(al5, bl8)) | 0;
26351 mid = (mid + Math.imul(al5, bh8)) | 0;
26352 mid = (mid + Math.imul(ah5, bl8)) | 0;
26353 hi = (hi + Math.imul(ah5, bh8)) | 0;
26354 lo = (lo + Math.imul(al4, bl9)) | 0;
26355 mid = (mid + Math.imul(al4, bh9)) | 0;
26356 mid = (mid + Math.imul(ah4, bl9)) | 0;
26357 hi = (hi + Math.imul(ah4, bh9)) | 0;
26358 var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
26359 c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;
26360 w13 &= 0x3ffffff;
26361 /* k = 14 */
26362 lo = Math.imul(al9, bl5);
26363 mid = Math.imul(al9, bh5);
26364 mid = (mid + Math.imul(ah9, bl5)) | 0;
26365 hi = Math.imul(ah9, bh5);
26366 lo = (lo + Math.imul(al8, bl6)) | 0;
26367 mid = (mid + Math.imul(al8, bh6)) | 0;
26368 mid = (mid + Math.imul(ah8, bl6)) | 0;
26369 hi = (hi + Math.imul(ah8, bh6)) | 0;
26370 lo = (lo + Math.imul(al7, bl7)) | 0;
26371 mid = (mid + Math.imul(al7, bh7)) | 0;
26372 mid = (mid + Math.imul(ah7, bl7)) | 0;
26373 hi = (hi + Math.imul(ah7, bh7)) | 0;
26374 lo = (lo + Math.imul(al6, bl8)) | 0;
26375 mid = (mid + Math.imul(al6, bh8)) | 0;
26376 mid = (mid + Math.imul(ah6, bl8)) | 0;
26377 hi = (hi + Math.imul(ah6, bh8)) | 0;
26378 lo = (lo + Math.imul(al5, bl9)) | 0;
26379 mid = (mid + Math.imul(al5, bh9)) | 0;
26380 mid = (mid + Math.imul(ah5, bl9)) | 0;
26381 hi = (hi + Math.imul(ah5, bh9)) | 0;
26382 var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
26383 c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;
26384 w14 &= 0x3ffffff;
26385 /* k = 15 */
26386 lo = Math.imul(al9, bl6);
26387 mid = Math.imul(al9, bh6);
26388 mid = (mid + Math.imul(ah9, bl6)) | 0;
26389 hi = Math.imul(ah9, bh6);
26390 lo = (lo + Math.imul(al8, bl7)) | 0;
26391 mid = (mid + Math.imul(al8, bh7)) | 0;
26392 mid = (mid + Math.imul(ah8, bl7)) | 0;
26393 hi = (hi + Math.imul(ah8, bh7)) | 0;
26394 lo = (lo + Math.imul(al7, bl8)) | 0;
26395 mid = (mid + Math.imul(al7, bh8)) | 0;
26396 mid = (mid + Math.imul(ah7, bl8)) | 0;
26397 hi = (hi + Math.imul(ah7, bh8)) | 0;
26398 lo = (lo + Math.imul(al6, bl9)) | 0;
26399 mid = (mid + Math.imul(al6, bh9)) | 0;
26400 mid = (mid + Math.imul(ah6, bl9)) | 0;
26401 hi = (hi + Math.imul(ah6, bh9)) | 0;
26402 var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
26403 c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;
26404 w15 &= 0x3ffffff;
26405 /* k = 16 */
26406 lo = Math.imul(al9, bl7);
26407 mid = Math.imul(al9, bh7);
26408 mid = (mid + Math.imul(ah9, bl7)) | 0;
26409 hi = Math.imul(ah9, bh7);
26410 lo = (lo + Math.imul(al8, bl8)) | 0;
26411 mid = (mid + Math.imul(al8, bh8)) | 0;
26412 mid = (mid + Math.imul(ah8, bl8)) | 0;
26413 hi = (hi + Math.imul(ah8, bh8)) | 0;
26414 lo = (lo + Math.imul(al7, bl9)) | 0;
26415 mid = (mid + Math.imul(al7, bh9)) | 0;
26416 mid = (mid + Math.imul(ah7, bl9)) | 0;
26417 hi = (hi + Math.imul(ah7, bh9)) | 0;
26418 var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
26419 c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;
26420 w16 &= 0x3ffffff;
26421 /* k = 17 */
26422 lo = Math.imul(al9, bl8);
26423 mid = Math.imul(al9, bh8);
26424 mid = (mid + Math.imul(ah9, bl8)) | 0;
26425 hi = Math.imul(ah9, bh8);
26426 lo = (lo + Math.imul(al8, bl9)) | 0;
26427 mid = (mid + Math.imul(al8, bh9)) | 0;
26428 mid = (mid + Math.imul(ah8, bl9)) | 0;
26429 hi = (hi + Math.imul(ah8, bh9)) | 0;
26430 var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
26431 c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;
26432 w17 &= 0x3ffffff;
26433 /* k = 18 */
26434 lo = Math.imul(al9, bl9);
26435 mid = Math.imul(al9, bh9);
26436 mid = (mid + Math.imul(ah9, bl9)) | 0;
26437 hi = Math.imul(ah9, bh9);
26438 var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
26439 c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;
26440 w18 &= 0x3ffffff;
26441 o[0] = w0;
26442 o[1] = w1;
26443 o[2] = w2;
26444 o[3] = w3;
26445 o[4] = w4;
26446 o[5] = w5;
26447 o[6] = w6;
26448 o[7] = w7;
26449 o[8] = w8;
26450 o[9] = w9;
26451 o[10] = w10;
26452 o[11] = w11;
26453 o[12] = w12;
26454 o[13] = w13;
26455 o[14] = w14;
26456 o[15] = w15;
26457 o[16] = w16;
26458 o[17] = w17;
26459 o[18] = w18;
26460 if (c !== 0) {
26461 o[19] = c;
26462 out.length++;
ab78acc6 26463 }
8b095871
IC
26464 return out;
26465 };
26466
26467 // Polyfill comb
26468 if (!Math.imul) {
26469 comb10MulTo = smallMulTo;
26470 }
26471
26472 function bigMulTo (self, num, out) {
26473 out.negative = num.negative ^ self.negative;
26474 out.length = self.length + num.length;
26475
26476 var carry = 0;
26477 var hncarry = 0;
26478 for (var k = 0; k < out.length - 1; k++) {
26479 // Sum all words with the same `i + j = k` and accumulate `ncarry`,
26480 // note that ncarry could be >= 0x3ffffff
26481 var ncarry = hncarry;
26482 hncarry = 0;
26483 var rword = carry & 0x3ffffff;
26484 var maxJ = Math.min(k, num.length - 1);
26485 for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {
26486 var i = k - j;
26487 var a = self.words[i] | 0;
26488 var b = num.words[j] | 0;
26489 var r = a * b;
26490
26491 var lo = r & 0x3ffffff;
26492 ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;
26493 lo = (lo + rword) | 0;
26494 rword = lo & 0x3ffffff;
26495 ncarry = (ncarry + (lo >>> 26)) | 0;
26496
26497 hncarry += ncarry >>> 26;
26498 ncarry &= 0x3ffffff;
26499 }
26500 out.words[k] = rword;
26501 carry = ncarry;
26502 ncarry = hncarry;
26503 }
26504 if (carry !== 0) {
26505 out.words[k] = carry;
26506 } else {
26507 out.length--;
ab78acc6 26508 }
8b095871
IC
26509
26510 return out.strip();
ab78acc6 26511 }
8b095871
IC
26512
26513 function jumboMulTo (self, num, out) {
26514 var fftm = new FFTM();
26515 return fftm.mulp(self, num, out);
ab78acc6 26516 }
8b095871
IC
26517
26518 BN.prototype.mulTo = function mulTo (num, out) {
26519 var res;
26520 var len = this.length + num.length;
26521 if (this.length === 10 && num.length === 10) {
26522 res = comb10MulTo(this, num, out);
26523 } else if (len < 63) {
26524 res = smallMulTo(this, num, out);
26525 } else if (len < 1024) {
26526 res = bigMulTo(this, num, out);
ab78acc6 26527 } else {
8b095871 26528 res = jumboMulTo(this, num, out);
ab78acc6 26529 }
8b095871
IC
26530
26531 return res;
26532 };
26533
26534 // Cooley-Tukey algorithm for FFT
26535 // slightly revisited to rely on looping instead of recursion
26536
26537 function FFTM (x, y) {
26538 this.x = x;
26539 this.y = y;
ab78acc6 26540 }
8b095871
IC
26541
26542 FFTM.prototype.makeRBT = function makeRBT (N) {
26543 var t = new Array(N);
26544 var l = BN.prototype._countBits(N) - 1;
26545 for (var i = 0; i < N; i++) {
26546 t[i] = this.revBin(i, l, N);
26547 }
26548
26549 return t;
26550 };
26551
26552 // Returns binary-reversed representation of `x`
26553 FFTM.prototype.revBin = function revBin (x, l, N) {
26554 if (x === 0 || x === N - 1) return x;
26555
26556 var rb = 0;
26557 for (var i = 0; i < l; i++) {
26558 rb |= (x & 1) << (l - i - 1);
26559 x >>= 1;
26560 }
26561
26562 return rb;
26563 };
26564
26565 // Performs "tweedling" phase, therefore 'emulating'
26566 // behaviour of the recursive algorithm
26567 FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {
26568 for (var i = 0; i < N; i++) {
26569 rtws[i] = rws[rbt[i]];
26570 itws[i] = iws[rbt[i]];
26571 }
26572 };
26573
26574 FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {
26575 this.permute(rbt, rws, iws, rtws, itws, N);
26576
26577 for (var s = 1; s < N; s <<= 1) {
26578 var l = s << 1;
26579
26580 var rtwdf = Math.cos(2 * Math.PI / l);
26581 var itwdf = Math.sin(2 * Math.PI / l);
26582
26583 for (var p = 0; p < N; p += l) {
26584 var rtwdf_ = rtwdf;
26585 var itwdf_ = itwdf;
26586
26587 for (var j = 0; j < s; j++) {
26588 var re = rtws[p + j];
26589 var ie = itws[p + j];
26590
26591 var ro = rtws[p + j + s];
26592 var io = itws[p + j + s];
26593
26594 var rx = rtwdf_ * ro - itwdf_ * io;
26595
26596 io = rtwdf_ * io + itwdf_ * ro;
26597 ro = rx;
26598
26599 rtws[p + j] = re + ro;
26600 itws[p + j] = ie + io;
26601
26602 rtws[p + j + s] = re - ro;
26603 itws[p + j + s] = ie - io;
26604
26605 /* jshint maxdepth : false */
26606 if (j !== l) {
26607 rx = rtwdf * rtwdf_ - itwdf * itwdf_;
26608
26609 itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;
26610 rtwdf_ = rx;
26611 }
26612 }
26613 }
ab78acc6 26614 }
8b095871
IC
26615 };
26616
26617 FFTM.prototype.guessLen13b = function guessLen13b (n, m) {
26618 var N = Math.max(m, n) | 1;
26619 var odd = N & 1;
26620 var i = 0;
26621 for (N = N / 2 | 0; N; N = N >>> 1) {
26622 i++;
ab78acc6 26623 }
ebd8d4e8 26624
8b095871
IC
26625 return 1 << i + 1 + odd;
26626 };
ebd8d4e8 26627
8b095871
IC
26628 FFTM.prototype.conjugate = function conjugate (rws, iws, N) {
26629 if (N <= 1) return;
ebd8d4e8 26630
8b095871
IC
26631 for (var i = 0; i < N / 2; i++) {
26632 var t = rws[i];
ebd8d4e8 26633
8b095871
IC
26634 rws[i] = rws[N - i - 1];
26635 rws[N - i - 1] = t;
ebd8d4e8 26636
8b095871 26637 t = iws[i];
ebd8d4e8 26638
8b095871
IC
26639 iws[i] = -iws[N - i - 1];
26640 iws[N - i - 1] = -t;
26641 }
26642 };
ebd8d4e8 26643
8b095871
IC
26644 FFTM.prototype.normalize13b = function normalize13b (ws, N) {
26645 var carry = 0;
26646 for (var i = 0; i < N / 2; i++) {
26647 var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +
26648 Math.round(ws[2 * i] / N) +
26649 carry;
ebd8d4e8 26650
8b095871 26651 ws[i] = w & 0x3ffffff;
ebd8d4e8 26652
8b095871
IC
26653 if (w < 0x4000000) {
26654 carry = 0;
26655 } else {
26656 carry = w / 0x4000000 | 0;
26657 }
26658 }
ebd8d4e8 26659
8b095871
IC
26660 return ws;
26661 };
ebd8d4e8 26662
8b095871
IC
26663 FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {
26664 var carry = 0;
26665 for (var i = 0; i < len; i++) {
26666 carry = carry + (ws[i] | 0);
ebd8d4e8 26667
8b095871
IC
26668 rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;
26669 rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;
26670 }
ebd8d4e8 26671
8b095871
IC
26672 // Pad with zeroes
26673 for (i = 2 * len; i < N; ++i) {
26674 rws[i] = 0;
26675 }
ebd8d4e8 26676
8b095871
IC
26677 assert(carry === 0);
26678 assert((carry & ~0x1fff) === 0);
26679 };
ebd8d4e8 26680
8b095871
IC
26681 FFTM.prototype.stub = function stub (N) {
26682 var ph = new Array(N);
26683 for (var i = 0; i < N; i++) {
26684 ph[i] = 0;
26685 }
ebd8d4e8 26686
8b095871
IC
26687 return ph;
26688 };
ebd8d4e8 26689
8b095871
IC
26690 FFTM.prototype.mulp = function mulp (x, y, out) {
26691 var N = 2 * this.guessLen13b(x.length, y.length);
ebd8d4e8 26692
8b095871 26693 var rbt = this.makeRBT(N);
ebd8d4e8 26694
8b095871 26695 var _ = this.stub(N);
ebd8d4e8 26696
8b095871
IC
26697 var rws = new Array(N);
26698 var rwst = new Array(N);
26699 var iwst = new Array(N);
ebd8d4e8 26700
8b095871
IC
26701 var nrws = new Array(N);
26702 var nrwst = new Array(N);
26703 var niwst = new Array(N);
ebd8d4e8 26704
8b095871
IC
26705 var rmws = out.words;
26706 rmws.length = N;
ebd8d4e8 26707
8b095871
IC
26708 this.convert13b(x.words, x.length, rws, N);
26709 this.convert13b(y.words, y.length, nrws, N);
ebd8d4e8 26710
8b095871
IC
26711 this.transform(rws, _, rwst, iwst, N, rbt);
26712 this.transform(nrws, _, nrwst, niwst, N, rbt);
ebd8d4e8 26713
8b095871
IC
26714 for (var i = 0; i < N; i++) {
26715 var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];
26716 iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];
26717 rwst[i] = rx;
26718 }
ebd8d4e8 26719
8b095871
IC
26720 this.conjugate(rwst, iwst, N);
26721 this.transform(rwst, iwst, rmws, _, N, rbt);
26722 this.conjugate(rmws, _, N);
26723 this.normalize13b(rmws, N);
ebd8d4e8 26724
8b095871
IC
26725 out.negative = x.negative ^ y.negative;
26726 out.length = x.length + y.length;
26727 return out.strip();
26728 };
ebd8d4e8 26729
8b095871
IC
26730 // Multiply `this` by `num`
26731 BN.prototype.mul = function mul (num) {
26732 var out = new BN(null);
26733 out.words = new Array(this.length + num.length);
26734 return this.mulTo(num, out);
26735 };
ab78acc6 26736
8b095871
IC
26737 // Multiply employing FFT
26738 BN.prototype.mulf = function mulf (num) {
26739 var out = new BN(null);
26740 out.words = new Array(this.length + num.length);
26741 return jumboMulTo(this, num, out);
26742 };
ebd8d4e8 26743
8b095871
IC
26744 // In-place Multiplication
26745 BN.prototype.imul = function imul (num) {
26746 return this.clone().mulTo(num, this);
26747 };
ab78acc6 26748
8b095871
IC
26749 BN.prototype.imuln = function imuln (num) {
26750 assert(typeof num === 'number');
26751 assert(num < 0x4000000);
ab78acc6 26752
8b095871
IC
26753 // Carry
26754 var carry = 0;
26755 for (var i = 0; i < this.length; i++) {
26756 var w = (this.words[i] | 0) * num;
26757 var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);
26758 carry >>= 26;
26759 carry += (w / 0x4000000) | 0;
26760 // NOTE: lo is 27bit maximum
26761 carry += lo >>> 26;
26762 this.words[i] = lo & 0x3ffffff;
26763 }
ab78acc6 26764
8b095871
IC
26765 if (carry !== 0) {
26766 this.words[i] = carry;
26767 this.length++;
26768 }
ab78acc6 26769
8b095871
IC
26770 return this;
26771 };
ab78acc6 26772
8b095871
IC
26773 BN.prototype.muln = function muln (num) {
26774 return this.clone().imuln(num);
26775 };
ebd8d4e8 26776
8b095871
IC
26777 // `this` * `this`
26778 BN.prototype.sqr = function sqr () {
26779 return this.mul(this);
26780 };
ebd8d4e8 26781
8b095871
IC
26782 // `this` * `this` in-place
26783 BN.prototype.isqr = function isqr () {
26784 return this.imul(this.clone());
26785 };
ab78acc6 26786
8b095871
IC
26787 // Math.pow(`this`, `num`)
26788 BN.prototype.pow = function pow (num) {
26789 var w = toBitArray(num);
26790 if (w.length === 0) return new BN(1);
ab78acc6 26791
8b095871
IC
26792 // Skip leading zeroes
26793 var res = this;
26794 for (var i = 0; i < w.length; i++, res = res.sqr()) {
26795 if (w[i] !== 0) break;
26796 }
ebd8d4e8 26797
8b095871
IC
26798 if (++i < w.length) {
26799 for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {
26800 if (w[i] === 0) continue;
ebd8d4e8 26801
8b095871
IC
26802 res = res.mul(q);
26803 }
ab78acc6
IC
26804 }
26805
8b095871
IC
26806 return res;
26807 };
ab78acc6 26808
8b095871
IC
26809 // Shift-left in-place
26810 BN.prototype.iushln = function iushln (bits) {
26811 assert(typeof bits === 'number' && bits >= 0);
26812 var r = bits % 26;
26813 var s = (bits - r) / 26;
26814 var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);
26815 var i;
26816
26817 if (r !== 0) {
26818 var carry = 0;
26819
26820 for (i = 0; i < this.length; i++) {
26821 var newCarry = this.words[i] & carryMask;
26822 var c = ((this.words[i] | 0) - newCarry) << r;
26823 this.words[i] = c | carry;
26824 carry = newCarry >>> (26 - r);
26825 }
26826
26827 if (carry) {
26828 this.words[i] = carry;
26829 this.length++;
26830 }
ab78acc6 26831 }
ebd8d4e8 26832
8b095871
IC
26833 if (s !== 0) {
26834 for (i = this.length - 1; i >= 0; i--) {
26835 this.words[i + s] = this.words[i];
26836 }
ebd8d4e8 26837
8b095871
IC
26838 for (i = 0; i < s; i++) {
26839 this.words[i] = 0;
26840 }
ebd8d4e8 26841
8b095871
IC
26842 this.length += s;
26843 }
ebd8d4e8 26844
8b095871
IC
26845 return this.strip();
26846 };
ebd8d4e8 26847
8b095871
IC
26848 BN.prototype.ishln = function ishln (bits) {
26849 // TODO(indutny): implement me
26850 assert(this.negative === 0);
26851 return this.iushln(bits);
26852 };
ebd8d4e8 26853
8b095871
IC
26854 // Shift-right in-place
26855 // NOTE: `hint` is a lowest bit before trailing zeroes
26856 // NOTE: if `extended` is present - it will be filled with destroyed bits
26857 BN.prototype.iushrn = function iushrn (bits, hint, extended) {
26858 assert(typeof bits === 'number' && bits >= 0);
26859 var h;
26860 if (hint) {
26861 h = (hint - (hint % 26)) / 26;
26862 } else {
26863 h = 0;
26864 }
ebd8d4e8 26865
8b095871
IC
26866 var r = bits % 26;
26867 var s = Math.min((bits - r) / 26, this.length);
26868 var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);
26869 var maskedWords = extended;
26870
26871 h -= s;
26872 h = Math.max(0, h);
26873
26874 // Extended mode, copy masked part
26875 if (maskedWords) {
26876 for (var i = 0; i < s; i++) {
26877 maskedWords.words[i] = this.words[i];
26878 }
26879 maskedWords.length = s;
ab78acc6 26880 }
ebd8d4e8 26881
8b095871
IC
26882 if (s === 0) {
26883 // No-op, we should not move anything at all
26884 } else if (this.length > s) {
26885 this.length -= s;
26886 for (i = 0; i < this.length; i++) {
26887 this.words[i] = this.words[i + s];
26888 }
26889 } else {
26890 this.words[0] = 0;
26891 this.length = 1;
26892 }
ab78acc6 26893
8b095871
IC
26894 var carry = 0;
26895 for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {
26896 var word = this.words[i] | 0;
26897 this.words[i] = (carry << (26 - r)) | (word >>> r);
26898 carry = word & mask;
ab78acc6 26899 }
ebd8d4e8 26900
8b095871
IC
26901 // Push carried bits as a mask
26902 if (maskedWords && carry !== 0) {
26903 maskedWords.words[maskedWords.length++] = carry;
26904 }
26905
26906 if (this.length === 0) {
26907 this.words[0] = 0;
26908 this.length = 1;
26909 }
26910
26911 return this.strip();
26912 };
26913
26914 BN.prototype.ishrn = function ishrn (bits, hint, extended) {
26915 // TODO(indutny): implement me
26916 assert(this.negative === 0);
26917 return this.iushrn(bits, hint, extended);
26918 };
26919
26920 // Shift-left
26921 BN.prototype.shln = function shln (bits) {
26922 return this.clone().ishln(bits);
26923 };
26924
26925 BN.prototype.ushln = function ushln (bits) {
26926 return this.clone().iushln(bits);
26927 };
26928
26929 // Shift-right
26930 BN.prototype.shrn = function shrn (bits) {
26931 return this.clone().ishrn(bits);
26932 };
ebd8d4e8 26933
8b095871
IC
26934 BN.prototype.ushrn = function ushrn (bits) {
26935 return this.clone().iushrn(bits);
26936 };
ebd8d4e8 26937
8b095871
IC
26938 // Test if n bit is set
26939 BN.prototype.testn = function testn (bit) {
26940 assert(typeof bit === 'number' && bit >= 0);
26941 var r = bit % 26;
26942 var s = (bit - r) / 26;
26943 var q = 1 << r;
ebd8d4e8 26944
8b095871
IC
26945 // Fast case: bit is much higher than all existing words
26946 if (this.length <= s) return false;
ab78acc6 26947
8b095871
IC
26948 // Check bit and return
26949 var w = this.words[s];
ab78acc6 26950
8b095871
IC
26951 return !!(w & q);
26952 };
ab78acc6 26953
8b095871
IC
26954 // Return only lowers bits of number (in-place)
26955 BN.prototype.imaskn = function imaskn (bits) {
26956 assert(typeof bits === 'number' && bits >= 0);
26957 var r = bits % 26;
26958 var s = (bits - r) / 26;
ab78acc6 26959
8b095871 26960 assert(this.negative === 0, 'imaskn works only with positive numbers');
ab78acc6 26961
8b095871
IC
26962 if (this.length <= s) {
26963 return this;
26964 }
ab78acc6 26965
8b095871
IC
26966 if (r !== 0) {
26967 s++;
26968 }
26969 this.length = Math.min(s, this.length);
ab78acc6 26970
8b095871
IC
26971 if (r !== 0) {
26972 var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);
26973 this.words[this.length - 1] &= mask;
26974 }
ab78acc6 26975
8b095871
IC
26976 return this.strip();
26977 };
ab78acc6 26978
8b095871
IC
26979 // Return only lowers bits of number
26980 BN.prototype.maskn = function maskn (bits) {
26981 return this.clone().imaskn(bits);
26982 };
ebd8d4e8 26983
8b095871
IC
26984 // Add plain number `num` to `this`
26985 BN.prototype.iaddn = function iaddn (num) {
26986 assert(typeof num === 'number');
26987 assert(num < 0x4000000);
26988 if (num < 0) return this.isubn(-num);
26989
26990 // Possible sign change
26991 if (this.negative !== 0) {
26992 if (this.length === 1 && (this.words[0] | 0) < num) {
26993 this.words[0] = num - (this.words[0] | 0);
26994 this.negative = 0;
26995 return this;
26996 }
ebd8d4e8 26997
8b095871
IC
26998 this.negative = 0;
26999 this.isubn(num);
27000 this.negative = 1;
27001 return this;
27002 }
ebd8d4e8 27003
8b095871
IC
27004 // Add without checks
27005 return this._iaddn(num);
27006 };
ebd8d4e8 27007
8b095871
IC
27008 BN.prototype._iaddn = function _iaddn (num) {
27009 this.words[0] += num;
ebd8d4e8 27010
8b095871
IC
27011 // Carry
27012 for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {
27013 this.words[i] -= 0x4000000;
27014 if (i === this.length - 1) {
27015 this.words[i + 1] = 1;
27016 } else {
27017 this.words[i + 1]++;
27018 }
27019 }
27020 this.length = Math.max(this.length, i + 1);
ebd8d4e8 27021
8b095871
IC
27022 return this;
27023 };
ebd8d4e8 27024
8b095871
IC
27025 // Subtract plain number `num` from `this`
27026 BN.prototype.isubn = function isubn (num) {
27027 assert(typeof num === 'number');
27028 assert(num < 0x4000000);
27029 if (num < 0) return this.iaddn(-num);
ebd8d4e8 27030
8b095871
IC
27031 if (this.negative !== 0) {
27032 this.negative = 0;
27033 this.iaddn(num);
27034 this.negative = 1;
27035 return this;
27036 }
ebd8d4e8 27037
8b095871 27038 this.words[0] -= num;
ab78acc6 27039
8b095871
IC
27040 if (this.length === 1 && this.words[0] < 0) {
27041 this.words[0] = -this.words[0];
27042 this.negative = 1;
27043 } else {
27044 // Carry
27045 for (var i = 0; i < this.length && this.words[i] < 0; i++) {
27046 this.words[i] += 0x4000000;
27047 this.words[i + 1] -= 1;
27048 }
27049 }
ebd8d4e8 27050
8b095871
IC
27051 return this.strip();
27052 };
ab78acc6 27053
8b095871
IC
27054 BN.prototype.addn = function addn (num) {
27055 return this.clone().iaddn(num);
27056 };
ab78acc6 27057
8b095871
IC
27058 BN.prototype.subn = function subn (num) {
27059 return this.clone().isubn(num);
27060 };
ab78acc6 27061
8b095871
IC
27062 BN.prototype.iabs = function iabs () {
27063 this.negative = 0;
ab78acc6 27064
8b095871
IC
27065 return this;
27066 };
ab78acc6 27067
8b095871
IC
27068 BN.prototype.abs = function abs () {
27069 return this.clone().iabs();
27070 };
ab78acc6 27071
8b095871
IC
27072 BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {
27073 var len = num.length + shift;
27074 var i;
ab78acc6 27075
8b095871 27076 this._expand(len);
ab78acc6 27077
8b095871
IC
27078 var w;
27079 var carry = 0;
27080 for (i = 0; i < num.length; i++) {
27081 w = (this.words[i + shift] | 0) + carry;
27082 var right = (num.words[i] | 0) * mul;
27083 w -= right & 0x3ffffff;
27084 carry = (w >> 26) - ((right / 0x4000000) | 0);
27085 this.words[i + shift] = w & 0x3ffffff;
27086 }
27087 for (; i < this.length - shift; i++) {
27088 w = (this.words[i + shift] | 0) + carry;
27089 carry = w >> 26;
27090 this.words[i + shift] = w & 0x3ffffff;
27091 }
ebd8d4e8 27092
8b095871 27093 if (carry === 0) return this.strip();
ab78acc6 27094
8b095871
IC
27095 // Subtraction overflow
27096 assert(carry === -1);
27097 carry = 0;
27098 for (i = 0; i < this.length; i++) {
27099 w = -(this.words[i] | 0) + carry;
27100 carry = w >> 26;
27101 this.words[i] = w & 0x3ffffff;
27102 }
27103 this.negative = 1;
ab78acc6 27104
8b095871
IC
27105 return this.strip();
27106 };
ab78acc6 27107
8b095871
IC
27108 BN.prototype._wordDiv = function _wordDiv (num, mode) {
27109 var shift = this.length - num.length;
ebd8d4e8 27110
8b095871
IC
27111 var a = this.clone();
27112 var b = num;
ab78acc6 27113
8b095871
IC
27114 // Normalize
27115 var bhi = b.words[b.length - 1] | 0;
27116 var bhiBits = this._countBits(bhi);
27117 shift = 26 - bhiBits;
27118 if (shift !== 0) {
27119 b = b.ushln(shift);
27120 a.iushln(shift);
27121 bhi = b.words[b.length - 1] | 0;
27122 }
ebd8d4e8 27123
8b095871
IC
27124 // Initialize quotient
27125 var m = a.length - b.length;
27126 var q;
ab78acc6 27127
8b095871
IC
27128 if (mode !== 'mod') {
27129 q = new BN(null);
27130 q.length = m + 1;
27131 q.words = new Array(q.length);
27132 for (var i = 0; i < q.length; i++) {
27133 q.words[i] = 0;
27134 }
27135 }
ebd8d4e8 27136
8b095871
IC
27137 var diff = a.clone()._ishlnsubmul(b, 1, m);
27138 if (diff.negative === 0) {
27139 a = diff;
27140 if (q) {
27141 q.words[m] = 1;
27142 }
27143 }
ebd8d4e8 27144
8b095871
IC
27145 for (var j = m - 1; j >= 0; j--) {
27146 var qj = (a.words[b.length + j] | 0) * 0x4000000 +
27147 (a.words[b.length + j - 1] | 0);
ebd8d4e8 27148
8b095871
IC
27149 // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max
27150 // (0x7ffffff)
27151 qj = Math.min((qj / bhi) | 0, 0x3ffffff);
ebd8d4e8 27152
8b095871
IC
27153 a._ishlnsubmul(b, qj, j);
27154 while (a.negative !== 0) {
27155 qj--;
27156 a.negative = 0;
27157 a._ishlnsubmul(b, 1, j);
27158 if (!a.isZero()) {
27159 a.negative ^= 1;
27160 }
27161 }
27162 if (q) {
27163 q.words[j] = qj;
27164 }
27165 }
27166 if (q) {
27167 q.strip();
27168 }
27169 a.strip();
ebd8d4e8 27170
8b095871
IC
27171 // Denormalize
27172 if (mode !== 'div' && shift !== 0) {
27173 a.iushrn(shift);
27174 }
ebd8d4e8 27175
8b095871
IC
27176 return {
27177 div: q || null,
27178 mod: a
27179 };
27180 };
ebd8d4e8 27181
8b095871
IC
27182 // NOTE: 1) `mode` can be set to `mod` to request mod only,
27183 // to `div` to request div only, or be absent to
27184 // request both div & mod
27185 // 2) `positive` is true if unsigned mod is requested
27186 BN.prototype.divmod = function divmod (num, mode, positive) {
27187 assert(!num.isZero());
27188
27189 if (this.isZero()) {
27190 return {
27191 div: new BN(0),
27192 mod: new BN(0)
27193 };
27194 }
ebd8d4e8 27195
8b095871
IC
27196 var div, mod, res;
27197 if (this.negative !== 0 && num.negative === 0) {
27198 res = this.neg().divmod(num, mode);
ebd8d4e8 27199
8b095871
IC
27200 if (mode !== 'mod') {
27201 div = res.div.neg();
27202 }
ebd8d4e8 27203
8b095871
IC
27204 if (mode !== 'div') {
27205 mod = res.mod.neg();
27206 if (positive && mod.negative !== 0) {
27207 mod.iadd(num);
27208 }
27209 }
ebd8d4e8 27210
8b095871
IC
27211 return {
27212 div: div,
27213 mod: mod
27214 };
27215 }
ebd8d4e8 27216
8b095871
IC
27217 if (this.negative === 0 && num.negative !== 0) {
27218 res = this.divmod(num.neg(), mode);
ebd8d4e8 27219
8b095871
IC
27220 if (mode !== 'mod') {
27221 div = res.div.neg();
27222 }
ebd8d4e8 27223
8b095871
IC
27224 return {
27225 div: div,
27226 mod: res.mod
27227 };
27228 }
ebd8d4e8 27229
8b095871
IC
27230 if ((this.negative & num.negative) !== 0) {
27231 res = this.neg().divmod(num.neg(), mode);
ebd8d4e8 27232
8b095871
IC
27233 if (mode !== 'div') {
27234 mod = res.mod.neg();
27235 if (positive && mod.negative !== 0) {
27236 mod.isub(num);
27237 }
27238 }
ebd8d4e8 27239
8b095871
IC
27240 return {
27241 div: res.div,
27242 mod: mod
27243 };
27244 }
ebd8d4e8 27245
8b095871 27246 // Both numbers are positive at this point
ebd8d4e8 27247
8b095871
IC
27248 // Strip both numbers to approximate shift value
27249 if (num.length > this.length || this.cmp(num) < 0) {
27250 return {
27251 div: new BN(0),
27252 mod: this
27253 };
27254 }
ebd8d4e8 27255
8b095871
IC
27256 // Very short reduction
27257 if (num.length === 1) {
27258 if (mode === 'div') {
27259 return {
27260 div: this.divn(num.words[0]),
27261 mod: null
27262 };
27263 }
ebd8d4e8 27264
8b095871
IC
27265 if (mode === 'mod') {
27266 return {
27267 div: null,
27268 mod: new BN(this.modn(num.words[0]))
27269 };
27270 }
ebd8d4e8 27271
8b095871
IC
27272 return {
27273 div: this.divn(num.words[0]),
27274 mod: new BN(this.modn(num.words[0]))
27275 };
27276 }
ebd8d4e8 27277
8b095871
IC
27278 return this._wordDiv(num, mode);
27279 };
ab78acc6 27280
8b095871
IC
27281 // Find `this` / `num`
27282 BN.prototype.div = function div (num) {
27283 return this.divmod(num, 'div', false).div;
27284 };
ab78acc6 27285
8b095871
IC
27286 // Find `this` % `num`
27287 BN.prototype.mod = function mod (num) {
27288 return this.divmod(num, 'mod', false).mod;
27289 };
ab78acc6 27290
8b095871
IC
27291 BN.prototype.umod = function umod (num) {
27292 return this.divmod(num, 'mod', true).mod;
27293 };
ebd8d4e8 27294
8b095871
IC
27295 // Find Round(`this` / `num`)
27296 BN.prototype.divRound = function divRound (num) {
27297 var dm = this.divmod(num);
ebd8d4e8 27298
8b095871
IC
27299 // Fast case - exact division
27300 if (dm.mod.isZero()) return dm.div;
ebd8d4e8 27301
8b095871 27302 var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;
ebd8d4e8 27303
8b095871
IC
27304 var half = num.ushrn(1);
27305 var r2 = num.andln(1);
27306 var cmp = mod.cmp(half);
ebd8d4e8 27307
8b095871
IC
27308 // Round down
27309 if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;
ebd8d4e8 27310
8b095871
IC
27311 // Round up
27312 return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);
27313 };
ab78acc6 27314
8b095871
IC
27315 BN.prototype.modn = function modn (num) {
27316 assert(num <= 0x3ffffff);
27317 var p = (1 << 26) % num;
ab78acc6 27318
8b095871
IC
27319 var acc = 0;
27320 for (var i = this.length - 1; i >= 0; i--) {
27321 acc = (p * acc + (this.words[i] | 0)) % num;
ab78acc6 27322 }
ab78acc6 27323
8b095871
IC
27324 return acc;
27325 };
27326
27327 // In-place division by number
27328 BN.prototype.idivn = function idivn (num) {
27329 assert(num <= 0x3ffffff);
27330
27331 var carry = 0;
27332 for (var i = this.length - 1; i >= 0; i--) {
27333 var w = (this.words[i] | 0) + carry * 0x4000000;
27334 this.words[i] = (w / num) | 0;
27335 carry = w % num;
ebd8d4e8 27336 }
ebd8d4e8 27337
8b095871
IC
27338 return this.strip();
27339 };
ab78acc6 27340
8b095871
IC
27341 BN.prototype.divn = function divn (num) {
27342 return this.clone().idivn(num);
27343 };
ebd8d4e8 27344
8b095871
IC
27345 BN.prototype.egcd = function egcd (p) {
27346 assert(p.negative === 0);
27347 assert(!p.isZero());
ebd8d4e8 27348
8b095871
IC
27349 var x = this;
27350 var y = p.clone();
27351
27352 if (x.negative !== 0) {
27353 x = x.umod(p);
27354 } else {
27355 x = x.clone();
27356 }
27357
27358 // A * x + B * y = x
27359 var A = new BN(1);
27360 var B = new BN(0);
27361
27362 // C * x + D * y = y
27363 var C = new BN(0);
27364 var D = new BN(1);
27365
27366 var g = 0;
27367
27368 while (x.isEven() && y.isEven()) {
27369 x.iushrn(1);
27370 y.iushrn(1);
27371 ++g;
27372 }
ebd8d4e8 27373
8b095871
IC
27374 var yp = y.clone();
27375 var xp = x.clone();
ebd8d4e8 27376
8b095871
IC
27377 while (!x.isZero()) {
27378 for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);
27379 if (i > 0) {
27380 x.iushrn(i);
27381 while (i-- > 0) {
27382 if (A.isOdd() || B.isOdd()) {
27383 A.iadd(yp);
27384 B.isub(xp);
27385 }
ebd8d4e8 27386
8b095871
IC
27387 A.iushrn(1);
27388 B.iushrn(1);
27389 }
27390 }
ebd8d4e8 27391
8b095871
IC
27392 for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);
27393 if (j > 0) {
27394 y.iushrn(j);
27395 while (j-- > 0) {
27396 if (C.isOdd() || D.isOdd()) {
27397 C.iadd(yp);
27398 D.isub(xp);
27399 }
ab78acc6 27400
8b095871
IC
27401 C.iushrn(1);
27402 D.iushrn(1);
27403 }
27404 }
ebd8d4e8 27405
8b095871
IC
27406 if (x.cmp(y) >= 0) {
27407 x.isub(y);
27408 A.isub(C);
27409 B.isub(D);
27410 } else {
27411 y.isub(x);
27412 C.isub(A);
27413 D.isub(B);
27414 }
27415 }
ebd8d4e8 27416
8b095871
IC
27417 return {
27418 a: C,
27419 b: D,
27420 gcd: y.iushln(g)
27421 };
27422 };
ebd8d4e8 27423
8b095871
IC
27424 // This is reduced incarnation of the binary EEA
27425 // above, designated to invert members of the
27426 // _prime_ fields F(p) at a maximal speed
27427 BN.prototype._invmp = function _invmp (p) {
27428 assert(p.negative === 0);
27429 assert(!p.isZero());
ebd8d4e8 27430
8b095871
IC
27431 var a = this;
27432 var b = p.clone();
ebd8d4e8 27433
8b095871
IC
27434 if (a.negative !== 0) {
27435 a = a.umod(p);
27436 } else {
27437 a = a.clone();
27438 }
ebd8d4e8 27439
8b095871
IC
27440 var x1 = new BN(1);
27441 var x2 = new BN(0);
ebd8d4e8 27442
8b095871 27443 var delta = b.clone();
ebd8d4e8 27444
8b095871
IC
27445 while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {
27446 for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);
27447 if (i > 0) {
27448 a.iushrn(i);
27449 while (i-- > 0) {
27450 if (x1.isOdd()) {
27451 x1.iadd(delta);
27452 }
ebd8d4e8 27453
8b095871
IC
27454 x1.iushrn(1);
27455 }
27456 }
ab78acc6 27457
8b095871
IC
27458 for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);
27459 if (j > 0) {
27460 b.iushrn(j);
27461 while (j-- > 0) {
27462 if (x2.isOdd()) {
27463 x2.iadd(delta);
27464 }
ebd8d4e8 27465
8b095871
IC
27466 x2.iushrn(1);
27467 }
27468 }
ebd8d4e8 27469
8b095871
IC
27470 if (a.cmp(b) >= 0) {
27471 a.isub(b);
27472 x1.isub(x2);
27473 } else {
27474 b.isub(a);
27475 x2.isub(x1);
27476 }
27477 }
ebd8d4e8 27478
8b095871
IC
27479 var res;
27480 if (a.cmpn(1) === 0) {
27481 res = x1;
27482 } else {
27483 res = x2;
27484 }
ebd8d4e8 27485
8b095871
IC
27486 if (res.cmpn(0) < 0) {
27487 res.iadd(p);
ab78acc6
IC
27488 }
27489
8b095871
IC
27490 return res;
27491 };
ebd8d4e8 27492
8b095871
IC
27493 BN.prototype.gcd = function gcd (num) {
27494 if (this.isZero()) return num.abs();
27495 if (num.isZero()) return this.abs();
27496
27497 var a = this.clone();
27498 var b = num.clone();
27499 a.negative = 0;
27500 b.negative = 0;
27501
27502 // Remove common factor of two
27503 for (var shift = 0; a.isEven() && b.isEven(); shift++) {
27504 a.iushrn(1);
27505 b.iushrn(1);
ab78acc6 27506 }
ab78acc6 27507
8b095871
IC
27508 do {
27509 while (a.isEven()) {
27510 a.iushrn(1);
27511 }
27512 while (b.isEven()) {
27513 b.iushrn(1);
27514 }
ebd8d4e8 27515
8b095871
IC
27516 var r = a.cmp(b);
27517 if (r < 0) {
27518 // Swap `a` and `b` to make `a` always bigger than `b`
27519 var t = a;
27520 a = b;
27521 b = t;
27522 } else if (r === 0 || b.cmpn(1) === 0) {
27523 break;
27524 }
ab78acc6 27525
8b095871
IC
27526 a.isub(b);
27527 } while (true);
ab78acc6 27528
8b095871
IC
27529 return b.iushln(shift);
27530 };
ab78acc6 27531
8b095871
IC
27532 // Invert number in the field F(num)
27533 BN.prototype.invm = function invm (num) {
27534 return this.egcd(num).a.umod(num);
27535 };
ebd8d4e8 27536
8b095871
IC
27537 BN.prototype.isEven = function isEven () {
27538 return (this.words[0] & 1) === 0;
27539 };
ab78acc6 27540
8b095871
IC
27541 BN.prototype.isOdd = function isOdd () {
27542 return (this.words[0] & 1) === 1;
27543 };
ebd8d4e8 27544
8b095871
IC
27545 // And first word and num
27546 BN.prototype.andln = function andln (num) {
27547 return this.words[0] & num;
27548 };
ebd8d4e8 27549
8b095871
IC
27550 // Increment at the bit position in-line
27551 BN.prototype.bincn = function bincn (bit) {
27552 assert(typeof bit === 'number');
27553 var r = bit % 26;
27554 var s = (bit - r) / 26;
27555 var q = 1 << r;
27556
27557 // Fast case: bit is much higher than all existing words
27558 if (this.length <= s) {
27559 this._expand(s + 1);
27560 this.words[s] |= q;
27561 return this;
27562 }
ebd8d4e8 27563
8b095871
IC
27564 // Add bit and propagate, if needed
27565 var carry = q;
27566 for (var i = s; carry !== 0 && i < this.length; i++) {
27567 var w = this.words[i] | 0;
27568 w += carry;
27569 carry = w >>> 26;
27570 w &= 0x3ffffff;
27571 this.words[i] = w;
27572 }
27573 if (carry !== 0) {
27574 this.words[i] = carry;
27575 this.length++;
27576 }
27577 return this;
27578 };
ebd8d4e8 27579
8b095871
IC
27580 BN.prototype.isZero = function isZero () {
27581 return this.length === 1 && this.words[0] === 0;
27582 };
ebd8d4e8 27583
8b095871
IC
27584 BN.prototype.cmpn = function cmpn (num) {
27585 var negative = num < 0;
ebd8d4e8 27586
8b095871
IC
27587 if (this.negative !== 0 && !negative) return -1;
27588 if (this.negative === 0 && negative) return 1;
ab78acc6 27589
8b095871 27590 this.strip();
ab78acc6 27591
8b095871
IC
27592 var res;
27593 if (this.length > 1) {
27594 res = 1;
27595 } else {
27596 if (negative) {
27597 num = -num;
27598 }
ebd8d4e8 27599
8b095871 27600 assert(num <= 0x3ffffff, 'Number is too big');
ebd8d4e8 27601
8b095871
IC
27602 var w = this.words[0] | 0;
27603 res = w === num ? 0 : w < num ? -1 : 1;
27604 }
27605 if (this.negative !== 0) return -res | 0;
27606 return res;
27607 };
ebd8d4e8 27608
8b095871
IC
27609 // Compare two numbers and return:
27610 // 1 - if `this` > `num`
27611 // 0 - if `this` == `num`
27612 // -1 - if `this` < `num`
27613 BN.prototype.cmp = function cmp (num) {
27614 if (this.negative !== 0 && num.negative === 0) return -1;
27615 if (this.negative === 0 && num.negative !== 0) return 1;
27616
27617 var res = this.ucmp(num);
27618 if (this.negative !== 0) return -res | 0;
27619 return res;
27620 };
ebd8d4e8 27621
8b095871
IC
27622 // Unsigned comparison
27623 BN.prototype.ucmp = function ucmp (num) {
27624 // At this point both numbers have the same sign
27625 if (this.length > num.length) return 1;
27626 if (this.length < num.length) return -1;
27627
27628 var res = 0;
27629 for (var i = this.length - 1; i >= 0; i--) {
27630 var a = this.words[i] | 0;
27631 var b = num.words[i] | 0;
27632
27633 if (a === b) continue;
27634 if (a < b) {
27635 res = -1;
27636 } else if (a > b) {
27637 res = 1;
27638 }
27639 break;
27640 }
27641 return res;
27642 };
ebd8d4e8 27643
8b095871
IC
27644 BN.prototype.gtn = function gtn (num) {
27645 return this.cmpn(num) === 1;
27646 };
ebd8d4e8 27647
8b095871
IC
27648 BN.prototype.gt = function gt (num) {
27649 return this.cmp(num) === 1;
27650 };
ebd8d4e8 27651
8b095871
IC
27652 BN.prototype.gten = function gten (num) {
27653 return this.cmpn(num) >= 0;
27654 };
ab78acc6 27655
8b095871
IC
27656 BN.prototype.gte = function gte (num) {
27657 return this.cmp(num) >= 0;
27658 };
ab78acc6 27659
8b095871
IC
27660 BN.prototype.ltn = function ltn (num) {
27661 return this.cmpn(num) === -1;
27662 };
ab78acc6 27663
8b095871
IC
27664 BN.prototype.lt = function lt (num) {
27665 return this.cmp(num) === -1;
27666 };
ebd8d4e8 27667
8b095871
IC
27668 BN.prototype.lten = function lten (num) {
27669 return this.cmpn(num) <= 0;
27670 };
ab78acc6 27671
8b095871
IC
27672 BN.prototype.lte = function lte (num) {
27673 return this.cmp(num) <= 0;
27674 };
ab78acc6 27675
8b095871
IC
27676 BN.prototype.eqn = function eqn (num) {
27677 return this.cmpn(num) === 0;
27678 };
ab78acc6 27679
8b095871
IC
27680 BN.prototype.eq = function eq (num) {
27681 return this.cmp(num) === 0;
27682 };
ebd8d4e8 27683
8b095871
IC
27684 //
27685 // A reduce context, could be using montgomery or something better, depending
27686 // on the `m` itself.
27687 //
27688 BN.red = function red (num) {
27689 return new Red(num);
27690 };
ab78acc6 27691
8b095871
IC
27692 BN.prototype.toRed = function toRed (ctx) {
27693 assert(!this.red, 'Already a number in reduction context');
27694 assert(this.negative === 0, 'red works only with positives');
27695 return ctx.convertTo(this)._forceRed(ctx);
27696 };
27697
27698 BN.prototype.fromRed = function fromRed () {
27699 assert(this.red, 'fromRed works only with numbers in reduction context');
27700 return this.red.convertFrom(this);
27701 };
27702
27703 BN.prototype._forceRed = function _forceRed (ctx) {
27704 this.red = ctx;
27705 return this;
27706 };
27707
27708 BN.prototype.forceRed = function forceRed (ctx) {
27709 assert(!this.red, 'Already a number in reduction context');
27710 return this._forceRed(ctx);
27711 };
27712
27713 BN.prototype.redAdd = function redAdd (num) {
27714 assert(this.red, 'redAdd works only with red numbers');
27715 return this.red.add(this, num);
27716 };
ebd8d4e8 27717
8b095871
IC
27718 BN.prototype.redIAdd = function redIAdd (num) {
27719 assert(this.red, 'redIAdd works only with red numbers');
27720 return this.red.iadd(this, num);
27721 };
ab78acc6 27722
8b095871
IC
27723 BN.prototype.redSub = function redSub (num) {
27724 assert(this.red, 'redSub works only with red numbers');
27725 return this.red.sub(this, num);
27726 };
ab78acc6 27727
8b095871
IC
27728 BN.prototype.redISub = function redISub (num) {
27729 assert(this.red, 'redISub works only with red numbers');
27730 return this.red.isub(this, num);
27731 };
ebd8d4e8 27732
8b095871
IC
27733 BN.prototype.redShl = function redShl (num) {
27734 assert(this.red, 'redShl works only with red numbers');
27735 return this.red.shl(this, num);
27736 };
ebd8d4e8 27737
8b095871
IC
27738 BN.prototype.redMul = function redMul (num) {
27739 assert(this.red, 'redMul works only with red numbers');
27740 this.red._verify2(this, num);
27741 return this.red.mul(this, num);
27742 };
ebd8d4e8 27743
8b095871
IC
27744 BN.prototype.redIMul = function redIMul (num) {
27745 assert(this.red, 'redMul works only with red numbers');
27746 this.red._verify2(this, num);
27747 return this.red.imul(this, num);
27748 };
ebd8d4e8 27749
8b095871
IC
27750 BN.prototype.redSqr = function redSqr () {
27751 assert(this.red, 'redSqr works only with red numbers');
27752 this.red._verify1(this);
27753 return this.red.sqr(this);
27754 };
ebd8d4e8 27755
8b095871
IC
27756 BN.prototype.redISqr = function redISqr () {
27757 assert(this.red, 'redISqr works only with red numbers');
27758 this.red._verify1(this);
27759 return this.red.isqr(this);
27760 };
ebd8d4e8 27761
8b095871
IC
27762 // Square root over p
27763 BN.prototype.redSqrt = function redSqrt () {
27764 assert(this.red, 'redSqrt works only with red numbers');
27765 this.red._verify1(this);
27766 return this.red.sqrt(this);
27767 };
ebd8d4e8 27768
8b095871
IC
27769 BN.prototype.redInvm = function redInvm () {
27770 assert(this.red, 'redInvm works only with red numbers');
27771 this.red._verify1(this);
27772 return this.red.invm(this);
27773 };
ebd8d4e8 27774
8b095871
IC
27775 // Return negative clone of `this` % `red modulo`
27776 BN.prototype.redNeg = function redNeg () {
27777 assert(this.red, 'redNeg works only with red numbers');
27778 this.red._verify1(this);
27779 return this.red.neg(this);
27780 };
ebd8d4e8 27781
8b095871
IC
27782 BN.prototype.redPow = function redPow (num) {
27783 assert(this.red && !num.red, 'redPow(normalNum)');
27784 this.red._verify1(this);
27785 return this.red.pow(this, num);
27786 };
ebd8d4e8 27787
8b095871
IC
27788 // Prime numbers with efficient reduction
27789 var primes = {
27790 k256: null,
27791 p224: null,
27792 p192: null,
27793 p25519: null
27794 };
ebd8d4e8 27795
8b095871
IC
27796 // Pseudo-Mersenne prime
27797 function MPrime (name, p) {
27798 // P = 2 ^ N - K
27799 this.name = name;
27800 this.p = new BN(p, 16);
27801 this.n = this.p.bitLength();
27802 this.k = new BN(1).iushln(this.n).isub(this.p);
ebd8d4e8 27803
8b095871
IC
27804 this.tmp = this._tmp();
27805 }
ebd8d4e8 27806
8b095871
IC
27807 MPrime.prototype._tmp = function _tmp () {
27808 var tmp = new BN(null);
27809 tmp.words = new Array(Math.ceil(this.n / 13));
27810 return tmp;
27811 };
ebd8d4e8 27812
8b095871
IC
27813 MPrime.prototype.ireduce = function ireduce (num) {
27814 // Assumes that `num` is less than `P^2`
27815 // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)
27816 var r = num;
27817 var rlen;
ebd8d4e8 27818
8b095871
IC
27819 do {
27820 this.split(r, this.tmp);
27821 r = this.imulK(r);
27822 r = r.iadd(this.tmp);
27823 rlen = r.bitLength();
27824 } while (rlen > this.n);
27825
27826 var cmp = rlen < this.n ? -1 : r.ucmp(this.p);
27827 if (cmp === 0) {
27828 r.words[0] = 0;
27829 r.length = 1;
27830 } else if (cmp > 0) {
27831 r.isub(this.p);
27832 } else {
27833 r.strip();
27834 }
ebd8d4e8 27835
8b095871
IC
27836 return r;
27837 };
ebd8d4e8 27838
8b095871
IC
27839 MPrime.prototype.split = function split (input, out) {
27840 input.iushrn(this.n, 0, out);
27841 };
ebd8d4e8 27842
8b095871
IC
27843 MPrime.prototype.imulK = function imulK (num) {
27844 return num.imul(this.k);
27845 };
ebd8d4e8 27846
8b095871
IC
27847 function K256 () {
27848 MPrime.call(
27849 this,
27850 'k256',
27851 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');
27852 }
27853 inherits(K256, MPrime);
ebd8d4e8 27854
8b095871
IC
27855 K256.prototype.split = function split (input, output) {
27856 // 256 = 9 * 26 + 22
27857 var mask = 0x3fffff;
ebd8d4e8 27858
8b095871
IC
27859 var outLen = Math.min(input.length, 9);
27860 for (var i = 0; i < outLen; i++) {
27861 output.words[i] = input.words[i];
27862 }
27863 output.length = outLen;
ebd8d4e8 27864
8b095871
IC
27865 if (input.length <= 9) {
27866 input.words[0] = 0;
27867 input.length = 1;
27868 return;
27869 }
ebd8d4e8 27870
8b095871
IC
27871 // Shift by 9 limbs
27872 var prev = input.words[9];
27873 output.words[output.length++] = prev & mask;
ebd8d4e8 27874
8b095871
IC
27875 for (i = 10; i < input.length; i++) {
27876 var next = input.words[i] | 0;
27877 input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);
27878 prev = next;
27879 }
27880 prev >>>= 22;
27881 input.words[i - 10] = prev;
27882 if (prev === 0 && input.length > 10) {
27883 input.length -= 10;
27884 } else {
27885 input.length -= 9;
27886 }
27887 };
ebd8d4e8 27888
8b095871
IC
27889 K256.prototype.imulK = function imulK (num) {
27890 // K = 0x1000003d1 = [ 0x40, 0x3d1 ]
27891 num.words[num.length] = 0;
27892 num.words[num.length + 1] = 0;
27893 num.length += 2;
27894
27895 // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390
27896 var lo = 0;
27897 for (var i = 0; i < num.length; i++) {
27898 var w = num.words[i] | 0;
27899 lo += w * 0x3d1;
27900 num.words[i] = lo & 0x3ffffff;
27901 lo = w * 0x40 + ((lo / 0x4000000) | 0);
27902 }
27903
27904 // Fast length reduction
27905 if (num.words[num.length - 1] === 0) {
27906 num.length--;
27907 if (num.words[num.length - 1] === 0) {
27908 num.length--;
27909 }
27910 }
27911 return num;
27912 };
ebd8d4e8 27913
8b095871
IC
27914 function P224 () {
27915 MPrime.call(
27916 this,
27917 'p224',
27918 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');
27919 }
27920 inherits(P224, MPrime);
ebd8d4e8 27921
8b095871
IC
27922 function P192 () {
27923 MPrime.call(
27924 this,
27925 'p192',
27926 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');
27927 }
27928 inherits(P192, MPrime);
ebd8d4e8 27929
8b095871
IC
27930 function P25519 () {
27931 // 2 ^ 255 - 19
27932 MPrime.call(
27933 this,
27934 '25519',
27935 '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');
27936 }
27937 inherits(P25519, MPrime);
ebd8d4e8 27938
8b095871
IC
27939 P25519.prototype.imulK = function imulK (num) {
27940 // K = 0x13
27941 var carry = 0;
27942 for (var i = 0; i < num.length; i++) {
27943 var hi = (num.words[i] | 0) * 0x13 + carry;
27944 var lo = hi & 0x3ffffff;
27945 hi >>>= 26;
ebd8d4e8 27946
8b095871
IC
27947 num.words[i] = lo;
27948 carry = hi;
27949 }
27950 if (carry !== 0) {
27951 num.words[num.length++] = carry;
27952 }
27953 return num;
27954 };
ebd8d4e8 27955
8b095871
IC
27956 // Exported mostly for testing purposes, use plain name instead
27957 BN._prime = function prime (name) {
27958 // Cached version of prime
27959 if (primes[name]) return primes[name];
27960
27961 var prime;
27962 if (name === 'k256') {
27963 prime = new K256();
27964 } else if (name === 'p224') {
27965 prime = new P224();
27966 } else if (name === 'p192') {
27967 prime = new P192();
27968 } else if (name === 'p25519') {
27969 prime = new P25519();
27970 } else {
27971 throw new Error('Unknown prime ' + name);
27972 }
27973 primes[name] = prime;
ab78acc6 27974
8b095871
IC
27975 return prime;
27976 };
ab78acc6 27977
8b095871
IC
27978 //
27979 // Base reduction engine
27980 //
27981 function Red (m) {
27982 if (typeof m === 'string') {
27983 var prime = BN._prime(m);
27984 this.m = prime.p;
27985 this.prime = prime;
27986 } else {
27987 assert(m.gtn(1), 'modulus must be greater than 1');
27988 this.m = m;
27989 this.prime = null;
27990 }
27991 }
ab78acc6 27992
8b095871
IC
27993 Red.prototype._verify1 = function _verify1 (a) {
27994 assert(a.negative === 0, 'red works only with positives');
27995 assert(a.red, 'red works only with red numbers');
27996 };
ab78acc6 27997
8b095871
IC
27998 Red.prototype._verify2 = function _verify2 (a, b) {
27999 assert((a.negative | b.negative) === 0, 'red works only with positives');
28000 assert(a.red && a.red === b.red,
28001 'red works only with red numbers');
28002 };
ebd8d4e8 28003
8b095871
IC
28004 Red.prototype.imod = function imod (a) {
28005 if (this.prime) return this.prime.ireduce(a)._forceRed(this);
28006 return a.umod(this.m)._forceRed(this);
28007 };
ebd8d4e8 28008
8b095871
IC
28009 Red.prototype.neg = function neg (a) {
28010 if (a.isZero()) {
28011 return a.clone();
28012 }
ebd8d4e8 28013
8b095871
IC
28014 return this.m.sub(a)._forceRed(this);
28015 };
ab78acc6 28016
8b095871
IC
28017 Red.prototype.add = function add (a, b) {
28018 this._verify2(a, b);
ab78acc6 28019
8b095871
IC
28020 var res = a.add(b);
28021 if (res.cmp(this.m) >= 0) {
28022 res.isub(this.m);
28023 }
28024 return res._forceRed(this);
28025 };
ab78acc6 28026
8b095871
IC
28027 Red.prototype.iadd = function iadd (a, b) {
28028 this._verify2(a, b);
ab78acc6 28029
8b095871
IC
28030 var res = a.iadd(b);
28031 if (res.cmp(this.m) >= 0) {
28032 res.isub(this.m);
28033 }
28034 return res;
28035 };
ab78acc6 28036
8b095871
IC
28037 Red.prototype.sub = function sub (a, b) {
28038 this._verify2(a, b);
ab78acc6 28039
8b095871
IC
28040 var res = a.sub(b);
28041 if (res.cmpn(0) < 0) {
28042 res.iadd(this.m);
28043 }
28044 return res._forceRed(this);
28045 };
ab78acc6 28046
8b095871
IC
28047 Red.prototype.isub = function isub (a, b) {
28048 this._verify2(a, b);
ebd8d4e8 28049
8b095871
IC
28050 var res = a.isub(b);
28051 if (res.cmpn(0) < 0) {
28052 res.iadd(this.m);
28053 }
28054 return res;
28055 };
ebd8d4e8 28056
8b095871
IC
28057 Red.prototype.shl = function shl (a, num) {
28058 this._verify1(a);
28059 return this.imod(a.ushln(num));
28060 };
ebd8d4e8 28061
8b095871
IC
28062 Red.prototype.imul = function imul (a, b) {
28063 this._verify2(a, b);
28064 return this.imod(a.imul(b));
28065 };
ebd8d4e8 28066
8b095871
IC
28067 Red.prototype.mul = function mul (a, b) {
28068 this._verify2(a, b);
28069 return this.imod(a.mul(b));
28070 };
ebd8d4e8 28071
8b095871
IC
28072 Red.prototype.isqr = function isqr (a) {
28073 return this.imul(a, a.clone());
28074 };
28075
28076 Red.prototype.sqr = function sqr (a) {
28077 return this.mul(a, a);
28078 };
ebd8d4e8 28079
8b095871
IC
28080 Red.prototype.sqrt = function sqrt (a) {
28081 if (a.isZero()) return a.clone();
ebd8d4e8 28082
8b095871
IC
28083 var mod3 = this.m.andln(3);
28084 assert(mod3 % 2 === 1);
ebd8d4e8 28085
8b095871
IC
28086 // Fast case
28087 if (mod3 === 3) {
28088 var pow = this.m.add(new BN(1)).iushrn(2);
28089 return this.pow(a, pow);
28090 }
ebd8d4e8 28091
8b095871
IC
28092 // Tonelli-Shanks algorithm (Totally unoptimized and slow)
28093 //
28094 // Find Q and S, that Q * 2 ^ S = (P - 1)
28095 var q = this.m.subn(1);
28096 var s = 0;
28097 while (!q.isZero() && q.andln(1) === 0) {
28098 s++;
28099 q.iushrn(1);
28100 }
28101 assert(!q.isZero());
ebd8d4e8 28102
8b095871
IC
28103 var one = new BN(1).toRed(this);
28104 var nOne = one.redNeg();
ebd8d4e8 28105
8b095871
IC
28106 // Find quadratic non-residue
28107 // NOTE: Max is such because of generalized Riemann hypothesis.
28108 var lpow = this.m.subn(1).iushrn(1);
28109 var z = this.m.bitLength();
28110 z = new BN(2 * z * z).toRed(this);
ebd8d4e8 28111
8b095871
IC
28112 while (this.pow(z, lpow).cmp(nOne) !== 0) {
28113 z.redIAdd(nOne);
28114 }
ebd8d4e8 28115
8b095871
IC
28116 var c = this.pow(z, q);
28117 var r = this.pow(a, q.addn(1).iushrn(1));
28118 var t = this.pow(a, q);
28119 var m = s;
28120 while (t.cmp(one) !== 0) {
28121 var tmp = t;
28122 for (var i = 0; tmp.cmp(one) !== 0; i++) {
28123 tmp = tmp.redSqr();
28124 }
28125 assert(i < m);
28126 var b = this.pow(c, new BN(1).iushln(m - i - 1));
ebd8d4e8 28127
8b095871
IC
28128 r = r.redMul(b);
28129 c = b.redSqr();
28130 t = t.redMul(c);
28131 m = i;
28132 }
ebd8d4e8 28133
8b095871
IC
28134 return r;
28135 };
ebd8d4e8 28136
8b095871
IC
28137 Red.prototype.invm = function invm (a) {
28138 var inv = a._invmp(this.m);
28139 if (inv.negative !== 0) {
28140 inv.negative = 0;
28141 return this.imod(inv).redNeg();
28142 } else {
28143 return this.imod(inv);
28144 }
28145 };
ebd8d4e8 28146
8b095871
IC
28147 Red.prototype.pow = function pow (a, num) {
28148 if (num.isZero()) return new BN(1);
28149 if (num.cmpn(1) === 0) return a.clone();
ebd8d4e8 28150
8b095871
IC
28151 var windowSize = 4;
28152 var wnd = new Array(1 << windowSize);
28153 wnd[0] = new BN(1).toRed(this);
28154 wnd[1] = a;
28155 for (var i = 2; i < wnd.length; i++) {
28156 wnd[i] = this.mul(wnd[i - 1], a);
28157 }
ebd8d4e8 28158
8b095871
IC
28159 var res = wnd[0];
28160 var current = 0;
28161 var currentLen = 0;
28162 var start = num.bitLength() % 26;
28163 if (start === 0) {
28164 start = 26;
28165 }
ebd8d4e8 28166
8b095871
IC
28167 for (i = num.length - 1; i >= 0; i--) {
28168 var word = num.words[i];
28169 for (var j = start - 1; j >= 0; j--) {
28170 var bit = (word >> j) & 1;
28171 if (res !== wnd[0]) {
28172 res = this.sqr(res);
28173 }
ebd8d4e8 28174
8b095871
IC
28175 if (bit === 0 && current === 0) {
28176 currentLen = 0;
28177 continue;
28178 }
ebd8d4e8 28179
8b095871
IC
28180 current <<= 1;
28181 current |= bit;
28182 currentLen++;
28183 if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;
ebd8d4e8 28184
8b095871
IC
28185 res = this.mul(res, wnd[current]);
28186 currentLen = 0;
28187 current = 0;
28188 }
28189 start = 26;
28190 }
ebd8d4e8 28191
8b095871
IC
28192 return res;
28193 };
ebd8d4e8 28194
8b095871
IC
28195 Red.prototype.convertTo = function convertTo (num) {
28196 var r = num.umod(this.m);
ebd8d4e8 28197
8b095871
IC
28198 return r === num ? r.clone() : r;
28199 };
ebd8d4e8 28200
8b095871
IC
28201 Red.prototype.convertFrom = function convertFrom (num) {
28202 var res = num.clone();
28203 res.red = null;
28204 return res;
28205 };
ebd8d4e8 28206
8b095871
IC
28207 //
28208 // Montgomery method engine
28209 //
ebd8d4e8 28210
8b095871
IC
28211 BN.mont = function mont (num) {
28212 return new Mont(num);
28213 };
ebd8d4e8 28214
8b095871
IC
28215 function Mont (m) {
28216 Red.call(this, m);
ebd8d4e8 28217
8b095871
IC
28218 this.shift = this.m.bitLength();
28219 if (this.shift % 26 !== 0) {
28220 this.shift += 26 - (this.shift % 26);
28221 }
ebd8d4e8 28222
8b095871
IC
28223 this.r = new BN(1).iushln(this.shift);
28224 this.r2 = this.imod(this.r.sqr());
28225 this.rinv = this.r._invmp(this.m);
28226
28227 this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);
28228 this.minv = this.minv.umod(this.r);
28229 this.minv = this.r.sub(this.minv);
ebd8d4e8 28230 }
8b095871 28231 inherits(Mont, Red);
ebd8d4e8 28232
8b095871
IC
28233 Mont.prototype.convertTo = function convertTo (num) {
28234 return this.imod(num.ushln(this.shift));
28235 };
ab78acc6 28236
8b095871
IC
28237 Mont.prototype.convertFrom = function convertFrom (num) {
28238 var r = this.imod(num.mul(this.rinv));
28239 r.red = null;
28240 return r;
28241 };
ebd8d4e8 28242
8b095871
IC
28243 Mont.prototype.imul = function imul (a, b) {
28244 if (a.isZero() || b.isZero()) {
28245 a.words[0] = 0;
28246 a.length = 1;
28247 return a;
28248 }
ebd8d4e8 28249
8b095871
IC
28250 var t = a.imul(b);
28251 var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
28252 var u = t.isub(c).iushrn(this.shift);
28253 var res = u;
ab78acc6 28254
8b095871
IC
28255 if (u.cmp(this.m) >= 0) {
28256 res = u.isub(this.m);
28257 } else if (u.cmpn(0) < 0) {
28258 res = u.iadd(this.m);
28259 }
ab78acc6 28260
8b095871
IC
28261 return res._forceRed(this);
28262 };
ab78acc6 28263
8b095871
IC
28264 Mont.prototype.mul = function mul (a, b) {
28265 if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);
ab78acc6 28266
8b095871
IC
28267 var t = a.mul(b);
28268 var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
28269 var u = t.isub(c).iushrn(this.shift);
28270 var res = u;
28271 if (u.cmp(this.m) >= 0) {
28272 res = u.isub(this.m);
28273 } else if (u.cmpn(0) < 0) {
28274 res = u.iadd(this.m);
28275 }
ab78acc6 28276
8b095871
IC
28277 return res._forceRed(this);
28278 };
ab78acc6 28279
8b095871
IC
28280 Mont.prototype.invm = function invm (a) {
28281 // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R
28282 var res = this.imod(a._invmp(this.m).mul(this.r2));
28283 return res._forceRed(this);
28284 };
28285})(typeof module === 'undefined' || module, this);
ab78acc6 28286
8b095871
IC
28287},{}],34:[function(require,module,exports){
28288var r;
ebd8d4e8 28289
8b095871
IC
28290module.exports = function rand(len) {
28291 if (!r)
28292 r = new Rand(null);
ebd8d4e8 28293
8b095871
IC
28294 return r.generate(len);
28295};
ab78acc6 28296
8b095871
IC
28297function Rand(rand) {
28298 this.rand = rand;
ab78acc6 28299}
8b095871 28300module.exports.Rand = Rand;
ab78acc6 28301
8b095871
IC
28302Rand.prototype.generate = function generate(len) {
28303 return this._rand(len);
28304};
ab78acc6 28305
8b095871
IC
28306if (typeof self === 'object') {
28307 if (self.crypto && self.crypto.getRandomValues) {
28308 // Modern browsers
28309 Rand.prototype._rand = function _rand(n) {
28310 var arr = new Uint8Array(n);
28311 self.crypto.getRandomValues(arr);
28312 return arr;
28313 };
28314 } else if (self.msCrypto && self.msCrypto.getRandomValues) {
28315 // IE
28316 Rand.prototype._rand = function _rand(n) {
28317 var arr = new Uint8Array(n);
28318 self.msCrypto.getRandomValues(arr);
28319 return arr;
28320 };
28321 } else {
28322 // Old junk
28323 Rand.prototype._rand = function() {
28324 throw new Error('Not implemented yet');
28325 };
28326 }
28327} else {
28328 // Node.js or Web worker with no crypto support
28329 try {
28330 var crypto = require('crypto');
ab78acc6 28331
8b095871
IC
28332 Rand.prototype._rand = function _rand(n) {
28333 return crypto.randomBytes(n);
28334 };
28335 } catch (e) {
28336 // Emulate crypto API using randy
28337 Rand.prototype._rand = function _rand(n) {
28338 var res = new Uint8Array(n);
28339 for (var i = 0; i < res.length; i++)
28340 res[i] = this.rand.getByte();
28341 return res;
28342 };
28343 }
28344}
28345
28346},{"crypto":3}],35:[function(require,module,exports){
28347(function (Buffer){
28348var Transform = require('stream').Transform
28349var inherits = require('inherits')
28350var StringDecoder = require('string_decoder').StringDecoder
28351module.exports = CipherBase
28352inherits(CipherBase, Transform)
28353function CipherBase (hashMode) {
28354 Transform.call(this)
28355 this.hashMode = typeof hashMode === 'string'
28356 if (this.hashMode) {
28357 this[hashMode] = this._finalOrDigest
28358 } else {
28359 this.final = this._finalOrDigest
28360 }
28361 this._decoder = null
28362 this._encoding = null
28363}
28364CipherBase.prototype.update = function (data, inputEnc, outputEnc) {
28365 if (typeof data === 'string') {
28366 data = new Buffer(data, inputEnc)
28367 }
28368 var outData = this._update(data)
28369 if (this.hashMode) {
28370 return this
28371 }
28372 if (outputEnc) {
28373 outData = this._toString(outData, outputEnc)
28374 }
28375 return outData
28376}
ab78acc6 28377
8b095871 28378CipherBase.prototype.setAutoPadding = function () {}
ab78acc6 28379
8b095871
IC
28380CipherBase.prototype.getAuthTag = function () {
28381 throw new Error('trying to get auth tag in unsupported state')
28382}
ab78acc6 28383
8b095871
IC
28384CipherBase.prototype.setAuthTag = function () {
28385 throw new Error('trying to set auth tag in unsupported state')
28386}
ab78acc6 28387
8b095871
IC
28388CipherBase.prototype.setAAD = function () {
28389 throw new Error('trying to set aad in unsupported state')
28390}
ab78acc6 28391
8b095871
IC
28392CipherBase.prototype._transform = function (data, _, next) {
28393 var err
28394 try {
28395 if (this.hashMode) {
28396 this._update(data)
28397 } else {
28398 this.push(this._update(data))
28399 }
28400 } catch (e) {
28401 err = e
28402 } finally {
28403 next(err)
28404 }
28405}
28406CipherBase.prototype._flush = function (done) {
28407 var err
28408 try {
28409 this.push(this._final())
28410 } catch (e) {
28411 err = e
28412 } finally {
28413 done(err)
28414 }
28415}
28416CipherBase.prototype._finalOrDigest = function (outputEnc) {
28417 var outData = this._final() || new Buffer('')
28418 if (outputEnc) {
28419 outData = this._toString(outData, outputEnc, true)
28420 }
28421 return outData
28422}
ebd8d4e8 28423
8b095871
IC
28424CipherBase.prototype._toString = function (value, enc, fin) {
28425 if (!this._decoder) {
28426 this._decoder = new StringDecoder(enc)
28427 this._encoding = enc
28428 }
28429 if (this._encoding !== enc) {
28430 throw new Error('can\'t switch encodings')
28431 }
28432 var out = this._decoder.write(value)
28433 if (fin) {
28434 out += this._decoder.end()
ab78acc6 28435 }
8b095871
IC
28436 return out
28437}
ab78acc6 28438
8b095871
IC
28439}).call(this,require("buffer").Buffer)
28440},{"buffer":5,"inherits":63,"stream":25,"string_decoder":26}],36:[function(require,module,exports){
28441(function (Buffer){
28442'use strict';
28443var inherits = require('inherits')
28444var md5 = require('./md5')
28445var rmd160 = require('ripemd160')
28446var sha = require('sha.js')
ebd8d4e8 28447
8b095871 28448var Base = require('cipher-base')
ebd8d4e8 28449
8b095871
IC
28450function HashNoConstructor(hash) {
28451 Base.call(this, 'digest')
ebd8d4e8 28452
8b095871
IC
28453 this._hash = hash
28454 this.buffers = []
28455}
ebd8d4e8 28456
8b095871 28457inherits(HashNoConstructor, Base)
ebd8d4e8 28458
8b095871
IC
28459HashNoConstructor.prototype._update = function (data) {
28460 this.buffers.push(data)
28461}
ebd8d4e8 28462
8b095871
IC
28463HashNoConstructor.prototype._final = function () {
28464 var buf = Buffer.concat(this.buffers)
28465 var r = this._hash(buf)
28466 this.buffers = null
ebd8d4e8 28467
8b095871
IC
28468 return r
28469}
ab78acc6 28470
8b095871
IC
28471function Hash(hash) {
28472 Base.call(this, 'digest')
ab78acc6 28473
8b095871
IC
28474 this._hash = hash
28475}
ab78acc6 28476
8b095871 28477inherits(Hash, Base)
ab78acc6 28478
8b095871
IC
28479Hash.prototype._update = function (data) {
28480 this._hash.update(data)
28481}
ab78acc6 28482
8b095871
IC
28483Hash.prototype._final = function () {
28484 return this._hash.digest()
28485}
ab78acc6 28486
8b095871
IC
28487module.exports = function createHash (alg) {
28488 alg = alg.toLowerCase()
28489 if ('md5' === alg) return new HashNoConstructor(md5)
28490 if ('rmd160' === alg || 'ripemd160' === alg) return new HashNoConstructor(rmd160)
28491
28492 return new Hash(sha(alg))
ab78acc6
IC
28493}
28494
8b095871
IC
28495}).call(this,require("buffer").Buffer)
28496},{"./md5":38,"buffer":5,"cipher-base":35,"inherits":63,"ripemd160":71,"sha.js":80}],37:[function(require,module,exports){
28497(function (Buffer){
28498'use strict';
28499var intSize = 4;
28500var zeroBuffer = new Buffer(intSize); zeroBuffer.fill(0);
28501var chrsz = 8;
ab78acc6 28502
8b095871
IC
28503function toArray(buf, bigEndian) {
28504 if ((buf.length % intSize) !== 0) {
28505 var len = buf.length + (intSize - (buf.length % intSize));
28506 buf = Buffer.concat([buf, zeroBuffer], len);
ab78acc6
IC
28507 }
28508
8b095871
IC
28509 var arr = [];
28510 var fn = bigEndian ? buf.readInt32BE : buf.readInt32LE;
28511 for (var i = 0; i < buf.length; i += intSize) {
28512 arr.push(fn.call(buf, i));
28513 }
28514 return arr;
ab78acc6
IC
28515}
28516
8b095871
IC
28517function toBuffer(arr, size, bigEndian) {
28518 var buf = new Buffer(size);
28519 var fn = bigEndian ? buf.writeInt32BE : buf.writeInt32LE;
28520 for (var i = 0; i < arr.length; i++) {
28521 fn.call(buf, arr[i], i * 4, true);
28522 }
28523 return buf;
28524}
ab78acc6 28525
8b095871
IC
28526function hash(buf, fn, hashSize, bigEndian) {
28527 if (!Buffer.isBuffer(buf)) buf = new Buffer(buf);
28528 var arr = fn(toArray(buf, bigEndian), buf.length * chrsz);
28529 return toBuffer(arr, hashSize, bigEndian);
28530}
28531exports.hash = hash;
ab78acc6 28532}).call(this,require("buffer").Buffer)
8b095871 28533},{"buffer":5}],38:[function(require,module,exports){
ab78acc6 28534'use strict';
8b095871
IC
28535/*
28536 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
28537 * Digest Algorithm, as defined in RFC 1321.
28538 * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
28539 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
28540 * Distributed under the BSD License
28541 * See http://pajhome.org.uk/crypt/md5 for more info.
28542 */
ebd8d4e8 28543
8b095871 28544var helpers = require('./helpers');
ebd8d4e8 28545
8b095871
IC
28546/*
28547 * Calculate the MD5 of an array of little-endian words, and a bit length
28548 */
28549function core_md5(x, len)
28550{
28551 /* append padding */
28552 x[len >> 5] |= 0x80 << ((len) % 32);
28553 x[(((len + 64) >>> 9) << 4) + 14] = len;
ebd8d4e8 28554
8b095871
IC
28555 var a = 1732584193;
28556 var b = -271733879;
28557 var c = -1732584194;
28558 var d = 271733878;
ebd8d4e8 28559
8b095871
IC
28560 for(var i = 0; i < x.length; i += 16)
28561 {
28562 var olda = a;
28563 var oldb = b;
28564 var oldc = c;
28565 var oldd = d;
ebd8d4e8 28566
8b095871
IC
28567 a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936);
28568 d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586);
28569 c = md5_ff(c, d, a, b, x[i+ 2], 17, 606105819);
28570 b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330);
28571 a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897);
28572 d = md5_ff(d, a, b, c, x[i+ 5], 12, 1200080426);
28573 c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341);
28574 b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983);
28575 a = md5_ff(a, b, c, d, x[i+ 8], 7 , 1770035416);
28576 d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417);
28577 c = md5_ff(c, d, a, b, x[i+10], 17, -42063);
28578 b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162);
28579 a = md5_ff(a, b, c, d, x[i+12], 7 , 1804603682);
28580 d = md5_ff(d, a, b, c, x[i+13], 12, -40341101);
28581 c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290);
28582 b = md5_ff(b, c, d, a, x[i+15], 22, 1236535329);
ebd8d4e8 28583
8b095871
IC
28584 a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510);
28585 d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632);
28586 c = md5_gg(c, d, a, b, x[i+11], 14, 643717713);
28587 b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302);
28588 a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691);
28589 d = md5_gg(d, a, b, c, x[i+10], 9 , 38016083);
28590 c = md5_gg(c, d, a, b, x[i+15], 14, -660478335);
28591 b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848);
28592 a = md5_gg(a, b, c, d, x[i+ 9], 5 , 568446438);
28593 d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690);
28594 c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961);
28595 b = md5_gg(b, c, d, a, x[i+ 8], 20, 1163531501);
28596 a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467);
28597 d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784);
28598 c = md5_gg(c, d, a, b, x[i+ 7], 14, 1735328473);
28599 b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734);
ebd8d4e8 28600
8b095871
IC
28601 a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558);
28602 d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463);
28603 c = md5_hh(c, d, a, b, x[i+11], 16, 1839030562);
28604 b = md5_hh(b, c, d, a, x[i+14], 23, -35309556);
28605 a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060);
28606 d = md5_hh(d, a, b, c, x[i+ 4], 11, 1272893353);
28607 c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632);
28608 b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640);
28609 a = md5_hh(a, b, c, d, x[i+13], 4 , 681279174);
28610 d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222);
28611 c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979);
28612 b = md5_hh(b, c, d, a, x[i+ 6], 23, 76029189);
28613 a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487);
28614 d = md5_hh(d, a, b, c, x[i+12], 11, -421815835);
28615 c = md5_hh(c, d, a, b, x[i+15], 16, 530742520);
28616 b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651);
ebd8d4e8 28617
8b095871
IC
28618 a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844);
28619 d = md5_ii(d, a, b, c, x[i+ 7], 10, 1126891415);
28620 c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905);
28621 b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055);
28622 a = md5_ii(a, b, c, d, x[i+12], 6 , 1700485571);
28623 d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606);
28624 c = md5_ii(c, d, a, b, x[i+10], 15, -1051523);
28625 b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799);
28626 a = md5_ii(a, b, c, d, x[i+ 8], 6 , 1873313359);
28627 d = md5_ii(d, a, b, c, x[i+15], 10, -30611744);
28628 c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380);
28629 b = md5_ii(b, c, d, a, x[i+13], 21, 1309151649);
28630 a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070);
28631 d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379);
28632 c = md5_ii(c, d, a, b, x[i+ 2], 15, 718787259);
28633 b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551);
ebd8d4e8 28634
8b095871
IC
28635 a = safe_add(a, olda);
28636 b = safe_add(b, oldb);
28637 c = safe_add(c, oldc);
28638 d = safe_add(d, oldd);
ab78acc6 28639 }
8b095871 28640 return Array(a, b, c, d);
ebd8d4e8 28641
ab78acc6 28642}
ebd8d4e8 28643
8b095871
IC
28644/*
28645 * These functions implement the four basic operations the algorithm uses.
28646 */
28647function md5_cmn(q, a, b, x, s, t)
28648{
28649 return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b);
ab78acc6 28650}
8b095871
IC
28651function md5_ff(a, b, c, d, x, s, t)
28652{
28653 return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
ab78acc6 28654}
8b095871
IC
28655function md5_gg(a, b, c, d, x, s, t)
28656{
28657 return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
ab78acc6 28658}
8b095871
IC
28659function md5_hh(a, b, c, d, x, s, t)
28660{
28661 return md5_cmn(b ^ c ^ d, a, b, x, s, t);
28662}
28663function md5_ii(a, b, c, d, x, s, t)
28664{
28665 return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
ab78acc6 28666}
ebd8d4e8 28667
8b095871
IC
28668/*
28669 * Add integers, wrapping at 2^32. This uses 16-bit operations internally
28670 * to work around bugs in some JS interpreters.
28671 */
28672function safe_add(x, y)
28673{
28674 var lsw = (x & 0xFFFF) + (y & 0xFFFF);
28675 var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
28676 return (msw << 16) | (lsw & 0xFFFF);
ab78acc6 28677}
ebd8d4e8 28678
8b095871
IC
28679/*
28680 * Bitwise rotate a 32-bit number to the left.
28681 */
28682function bit_rol(num, cnt)
28683{
28684 return (num << cnt) | (num >>> (32 - cnt));
28685}
ebd8d4e8 28686
8b095871
IC
28687module.exports = function md5(buf) {
28688 return helpers.hash(buf, core_md5, 16);
28689};
28690},{"./helpers":37}],39:[function(require,module,exports){
28691'use strict';
ebd8d4e8 28692
8b095871 28693var elliptic = exports;
ebd8d4e8 28694
8b095871
IC
28695elliptic.version = require('../package.json').version;
28696elliptic.utils = require('./elliptic/utils');
28697elliptic.rand = require('brorand');
28698elliptic.hmacDRBG = require('./elliptic/hmac-drbg');
28699elliptic.curve = require('./elliptic/curve');
28700elliptic.curves = require('./elliptic/curves');
ebd8d4e8 28701
8b095871
IC
28702// Protocols
28703elliptic.ec = require('./elliptic/ec');
28704elliptic.eddsa = require('./elliptic/eddsa');
ebd8d4e8 28705
8b095871
IC
28706},{"../package.json":55,"./elliptic/curve":42,"./elliptic/curves":45,"./elliptic/ec":46,"./elliptic/eddsa":49,"./elliptic/hmac-drbg":52,"./elliptic/utils":54,"brorand":34}],40:[function(require,module,exports){
28707'use strict';
ebd8d4e8 28708
8b095871
IC
28709var BN = require('bn.js');
28710var elliptic = require('../../elliptic');
28711var utils = elliptic.utils;
28712var getNAF = utils.getNAF;
28713var getJSF = utils.getJSF;
28714var assert = utils.assert;
28715
28716function BaseCurve(type, conf) {
28717 this.type = type;
28718 this.p = new BN(conf.p, 16);
28719
28720 // Use Montgomery, when there is no fast reduction for the prime
28721 this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p);
28722
28723 // Useful for many curves
28724 this.zero = new BN(0).toRed(this.red);
28725 this.one = new BN(1).toRed(this.red);
28726 this.two = new BN(2).toRed(this.red);
28727
28728 // Curve configuration, optional
28729 this.n = conf.n && new BN(conf.n, 16);
28730 this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed);
28731
28732 // Temporary arrays
28733 this._wnafT1 = new Array(4);
28734 this._wnafT2 = new Array(4);
28735 this._wnafT3 = new Array(4);
28736 this._wnafT4 = new Array(4);
28737
28738 // Generalized Greg Maxwell's trick
28739 var adjustCount = this.n && this.p.div(this.n);
28740 if (!adjustCount || adjustCount.cmpn(100) > 0) {
28741 this.redN = null;
28742 } else {
28743 this._maxwellTrick = true;
28744 this.redN = this.n.toRed(this.red);
ebd8d4e8 28745 }
ebd8d4e8 28746}
8b095871 28747module.exports = BaseCurve;
ebd8d4e8 28748
8b095871
IC
28749BaseCurve.prototype.point = function point() {
28750 throw new Error('Not implemented');
28751};
ebd8d4e8 28752
8b095871
IC
28753BaseCurve.prototype.validate = function validate() {
28754 throw new Error('Not implemented');
28755};
ebd8d4e8 28756
8b095871
IC
28757BaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) {
28758 assert(p.precomputed);
28759 var doubles = p._getDoubles();
ebd8d4e8 28760
8b095871
IC
28761 var naf = getNAF(k, 1);
28762 var I = (1 << (doubles.step + 1)) - (doubles.step % 2 === 0 ? 2 : 1);
28763 I /= 3;
ebd8d4e8 28764
8b095871
IC
28765 // Translate into more windowed form
28766 var repr = [];
28767 for (var j = 0; j < naf.length; j += doubles.step) {
28768 var nafW = 0;
28769 for (var k = j + doubles.step - 1; k >= j; k--)
28770 nafW = (nafW << 1) + naf[k];
28771 repr.push(nafW);
28772 }
ebd8d4e8 28773
8b095871
IC
28774 var a = this.jpoint(null, null, null);
28775 var b = this.jpoint(null, null, null);
28776 for (var i = I; i > 0; i--) {
28777 for (var j = 0; j < repr.length; j++) {
28778 var nafW = repr[j];
28779 if (nafW === i)
28780 b = b.mixedAdd(doubles.points[j]);
28781 else if (nafW === -i)
28782 b = b.mixedAdd(doubles.points[j].neg());
28783 }
28784 a = a.add(b);
28785 }
28786 return a.toP();
28787};
ebd8d4e8 28788
8b095871
IC
28789BaseCurve.prototype._wnafMul = function _wnafMul(p, k) {
28790 var w = 4;
ebd8d4e8 28791
8b095871
IC
28792 // Precompute window
28793 var nafPoints = p._getNAFPoints(w);
28794 w = nafPoints.wnd;
28795 var wnd = nafPoints.points;
ebd8d4e8 28796
8b095871
IC
28797 // Get NAF form
28798 var naf = getNAF(k, w);
ebd8d4e8 28799
8b095871
IC
28800 // Add `this`*(N+1) for every w-NAF index
28801 var acc = this.jpoint(null, null, null);
28802 for (var i = naf.length - 1; i >= 0; i--) {
28803 // Count zeroes
28804 for (var k = 0; i >= 0 && naf[i] === 0; i--)
28805 k++;
28806 if (i >= 0)
28807 k++;
28808 acc = acc.dblp(k);
ebd8d4e8 28809
8b095871
IC
28810 if (i < 0)
28811 break;
28812 var z = naf[i];
28813 assert(z !== 0);
28814 if (p.type === 'affine') {
28815 // J +- P
28816 if (z > 0)
28817 acc = acc.mixedAdd(wnd[(z - 1) >> 1]);
28818 else
28819 acc = acc.mixedAdd(wnd[(-z - 1) >> 1].neg());
28820 } else {
28821 // J +- J
28822 if (z > 0)
28823 acc = acc.add(wnd[(z - 1) >> 1]);
28824 else
28825 acc = acc.add(wnd[(-z - 1) >> 1].neg());
28826 }
ebd8d4e8 28827 }
8b095871
IC
28828 return p.type === 'affine' ? acc.toP() : acc;
28829};
ebd8d4e8 28830
8b095871
IC
28831BaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW,
28832 points,
28833 coeffs,
28834 len,
28835 jacobianResult) {
28836 var wndWidth = this._wnafT1;
28837 var wnd = this._wnafT2;
28838 var naf = this._wnafT3;
28839
28840 // Fill all arrays
28841 var max = 0;
28842 for (var i = 0; i < len; i++) {
28843 var p = points[i];
28844 var nafPoints = p._getNAFPoints(defW);
28845 wndWidth[i] = nafPoints.wnd;
28846 wnd[i] = nafPoints.points;
28847 }
28848
28849 // Comb small window NAFs
28850 for (var i = len - 1; i >= 1; i -= 2) {
28851 var a = i - 1;
28852 var b = i;
28853 if (wndWidth[a] !== 1 || wndWidth[b] !== 1) {
28854 naf[a] = getNAF(coeffs[a], wndWidth[a]);
28855 naf[b] = getNAF(coeffs[b], wndWidth[b]);
28856 max = Math.max(naf[a].length, max);
28857 max = Math.max(naf[b].length, max);
28858 continue;
28859 }
ebd8d4e8 28860
8b095871
IC
28861 var comb = [
28862 points[a], /* 1 */
28863 null, /* 3 */
28864 null, /* 5 */
28865 points[b] /* 7 */
28866 ];
28867
28868 // Try to avoid Projective points, if possible
28869 if (points[a].y.cmp(points[b].y) === 0) {
28870 comb[1] = points[a].add(points[b]);
28871 comb[2] = points[a].toJ().mixedAdd(points[b].neg());
28872 } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) {
28873 comb[1] = points[a].toJ().mixedAdd(points[b]);
28874 comb[2] = points[a].add(points[b].neg());
28875 } else {
28876 comb[1] = points[a].toJ().mixedAdd(points[b]);
28877 comb[2] = points[a].toJ().mixedAdd(points[b].neg());
28878 }
ebd8d4e8 28879
8b095871
IC
28880 var index = [
28881 -3, /* -1 -1 */
28882 -1, /* -1 0 */
28883 -5, /* -1 1 */
28884 -7, /* 0 -1 */
28885 0, /* 0 0 */
28886 7, /* 0 1 */
28887 5, /* 1 -1 */
28888 1, /* 1 0 */
28889 3 /* 1 1 */
28890 ];
ebd8d4e8 28891
8b095871
IC
28892 var jsf = getJSF(coeffs[a], coeffs[b]);
28893 max = Math.max(jsf[0].length, max);
28894 naf[a] = new Array(max);
28895 naf[b] = new Array(max);
28896 for (var j = 0; j < max; j++) {
28897 var ja = jsf[0][j] | 0;
28898 var jb = jsf[1][j] | 0;
ebd8d4e8 28899
8b095871
IC
28900 naf[a][j] = index[(ja + 1) * 3 + (jb + 1)];
28901 naf[b][j] = 0;
28902 wnd[a] = comb;
28903 }
28904 }
ebd8d4e8 28905
8b095871
IC
28906 var acc = this.jpoint(null, null, null);
28907 var tmp = this._wnafT4;
28908 for (var i = max; i >= 0; i--) {
28909 var k = 0;
ebd8d4e8 28910
8b095871
IC
28911 while (i >= 0) {
28912 var zero = true;
28913 for (var j = 0; j < len; j++) {
28914 tmp[j] = naf[j][i] | 0;
28915 if (tmp[j] !== 0)
28916 zero = false;
28917 }
28918 if (!zero)
28919 break;
28920 k++;
28921 i--;
28922 }
28923 if (i >= 0)
28924 k++;
28925 acc = acc.dblp(k);
28926 if (i < 0)
28927 break;
ebd8d4e8 28928
8b095871
IC
28929 for (var j = 0; j < len; j++) {
28930 var z = tmp[j];
28931 var p;
28932 if (z === 0)
28933 continue;
28934 else if (z > 0)
28935 p = wnd[j][(z - 1) >> 1];
28936 else if (z < 0)
28937 p = wnd[j][(-z - 1) >> 1].neg();
28938
28939 if (p.type === 'affine')
28940 acc = acc.mixedAdd(p);
28941 else
28942 acc = acc.add(p);
28943 }
28944 }
28945 // Zeroify references
28946 for (var i = 0; i < len; i++)
28947 wnd[i] = null;
ebd8d4e8 28948
8b095871
IC
28949 if (jacobianResult)
28950 return acc;
28951 else
28952 return acc.toP();
28953};
ebd8d4e8 28954
8b095871
IC
28955function BasePoint(curve, type) {
28956 this.curve = curve;
28957 this.type = type;
28958 this.precomputed = null;
28959}
28960BaseCurve.BasePoint = BasePoint;
ebd8d4e8 28961
8b095871
IC
28962BasePoint.prototype.eq = function eq(/*other*/) {
28963 throw new Error('Not implemented');
28964};
ebd8d4e8 28965
8b095871
IC
28966BasePoint.prototype.validate = function validate() {
28967 return this.curve.validate(this);
28968};
ebd8d4e8 28969
8b095871
IC
28970BaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) {
28971 bytes = utils.toArray(bytes, enc);
ebd8d4e8 28972
8b095871 28973 var len = this.p.byteLength();
ebd8d4e8 28974
8b095871
IC
28975 // uncompressed, hybrid-odd, hybrid-even
28976 if ((bytes[0] === 0x04 || bytes[0] === 0x06 || bytes[0] === 0x07) &&
28977 bytes.length - 1 === 2 * len) {
28978 if (bytes[0] === 0x06)
28979 assert(bytes[bytes.length - 1] % 2 === 0);
28980 else if (bytes[0] === 0x07)
28981 assert(bytes[bytes.length - 1] % 2 === 1);
ebd8d4e8 28982
8b095871
IC
28983 var res = this.point(bytes.slice(1, 1 + len),
28984 bytes.slice(1 + len, 1 + 2 * len));
ebd8d4e8 28985
8b095871
IC
28986 return res;
28987 } else if ((bytes[0] === 0x02 || bytes[0] === 0x03) &&
28988 bytes.length - 1 === len) {
28989 return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 0x03);
ebd8d4e8 28990 }
8b095871
IC
28991 throw new Error('Unknown point format');
28992};
ebd8d4e8 28993
8b095871
IC
28994BasePoint.prototype.encodeCompressed = function encodeCompressed(enc) {
28995 return this.encode(enc, true);
28996};
28997
28998BasePoint.prototype._encode = function _encode(compact) {
28999 var len = this.curve.p.byteLength();
29000 var x = this.getX().toArray('be', len);
29001
29002 if (compact)
29003 return [ this.getY().isEven() ? 0x02 : 0x03 ].concat(x);
29004
29005 return [ 0x04 ].concat(x, this.getY().toArray('be', len)) ;
29006};
29007
29008BasePoint.prototype.encode = function encode(enc, compact) {
29009 return utils.encode(this._encode(compact), enc);
29010};
29011
29012BasePoint.prototype.precompute = function precompute(power) {
29013 if (this.precomputed)
29014 return this;
29015
29016 var precomputed = {
29017 doubles: null,
29018 naf: null,
29019 beta: null
29020 };
29021 precomputed.naf = this._getNAFPoints(8);
29022 precomputed.doubles = this._getDoubles(4, power);
29023 precomputed.beta = this._getBeta();
29024 this.precomputed = precomputed;
29025
29026 return this;
29027};
29028
29029BasePoint.prototype._hasDoubles = function _hasDoubles(k) {
29030 if (!this.precomputed)
29031 return false;
29032
29033 var doubles = this.precomputed.doubles;
29034 if (!doubles)
29035 return false;
29036
29037 return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step);
29038};
29039
29040BasePoint.prototype._getDoubles = function _getDoubles(step, power) {
29041 if (this.precomputed && this.precomputed.doubles)
29042 return this.precomputed.doubles;
29043
29044 var doubles = [ this ];
29045 var acc = this;
29046 for (var i = 0; i < power; i += step) {
29047 for (var j = 0; j < step; j++)
29048 acc = acc.dbl();
29049 doubles.push(acc);
ebd8d4e8 29050 }
8b095871
IC
29051 return {
29052 step: step,
29053 points: doubles
29054 };
29055};
ebd8d4e8 29056
8b095871
IC
29057BasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) {
29058 if (this.precomputed && this.precomputed.naf)
29059 return this.precomputed.naf;
ebd8d4e8 29060
8b095871
IC
29061 var res = [ this ];
29062 var max = (1 << wnd) - 1;
29063 var dbl = max === 1 ? null : this.dbl();
29064 for (var i = 1; i < max; i++)
29065 res[i] = res[i - 1].add(dbl);
29066 return {
29067 wnd: wnd,
29068 points: res
29069 };
29070};
ebd8d4e8 29071
8b095871
IC
29072BasePoint.prototype._getBeta = function _getBeta() {
29073 return null;
29074};
ebd8d4e8 29075
8b095871
IC
29076BasePoint.prototype.dblp = function dblp(k) {
29077 var r = this;
29078 for (var i = 0; i < k; i++)
29079 r = r.dbl();
29080 return r;
29081};
ebd8d4e8 29082
8b095871
IC
29083},{"../../elliptic":39,"bn.js":33}],41:[function(require,module,exports){
29084'use strict';
ebd8d4e8 29085
8b095871
IC
29086var curve = require('../curve');
29087var elliptic = require('../../elliptic');
29088var BN = require('bn.js');
29089var inherits = require('inherits');
29090var Base = curve.base;
ebd8d4e8 29091
8b095871 29092var assert = elliptic.utils.assert;
ebd8d4e8 29093
8b095871
IC
29094function EdwardsCurve(conf) {
29095 // NOTE: Important as we are creating point in Base.call()
29096 this.twisted = (conf.a | 0) !== 1;
29097 this.mOneA = this.twisted && (conf.a | 0) === -1;
29098 this.extended = this.mOneA;
29099
29100 Base.call(this, 'edwards', conf);
29101
29102 this.a = new BN(conf.a, 16).umod(this.red.m);
29103 this.a = this.a.toRed(this.red);
29104 this.c = new BN(conf.c, 16).toRed(this.red);
29105 this.c2 = this.c.redSqr();
29106 this.d = new BN(conf.d, 16).toRed(this.red);
29107 this.dd = this.d.redAdd(this.d);
29108
29109 assert(!this.twisted || this.c.fromRed().cmpn(1) === 0);
29110 this.oneC = (conf.c | 0) === 1;
ebd8d4e8 29111}
8b095871
IC
29112inherits(EdwardsCurve, Base);
29113module.exports = EdwardsCurve;
ebd8d4e8 29114
8b095871
IC
29115EdwardsCurve.prototype._mulA = function _mulA(num) {
29116 if (this.mOneA)
29117 return num.redNeg();
29118 else
29119 return this.a.redMul(num);
29120};
ebd8d4e8 29121
8b095871
IC
29122EdwardsCurve.prototype._mulC = function _mulC(num) {
29123 if (this.oneC)
29124 return num;
29125 else
29126 return this.c.redMul(num);
29127};
ebd8d4e8 29128
8b095871
IC
29129// Just for compatibility with Short curve
29130EdwardsCurve.prototype.jpoint = function jpoint(x, y, z, t) {
29131 return this.point(x, y, z, t);
29132};
ebd8d4e8 29133
8b095871
IC
29134EdwardsCurve.prototype.pointFromX = function pointFromX(x, odd) {
29135 x = new BN(x, 16);
29136 if (!x.red)
29137 x = x.toRed(this.red);
ebd8d4e8 29138
8b095871
IC
29139 var x2 = x.redSqr();
29140 var rhs = this.c2.redSub(this.a.redMul(x2));
29141 var lhs = this.one.redSub(this.c2.redMul(this.d).redMul(x2));
29142
29143 var y2 = rhs.redMul(lhs.redInvm());
29144 var y = y2.redSqrt();
29145 if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)
29146 throw new Error('invalid point');
29147
29148 var isOdd = y.fromRed().isOdd();
29149 if (odd && !isOdd || !odd && isOdd)
29150 y = y.redNeg();
29151
29152 return this.point(x, y);
29153};
29154
29155EdwardsCurve.prototype.pointFromY = function pointFromY(y, odd) {
29156 y = new BN(y, 16);
29157 if (!y.red)
29158 y = y.toRed(this.red);
29159
29160 // x^2 = (y^2 - 1) / (d y^2 + 1)
29161 var y2 = y.redSqr();
29162 var lhs = y2.redSub(this.one);
29163 var rhs = y2.redMul(this.d).redAdd(this.one);
29164 var x2 = lhs.redMul(rhs.redInvm());
29165
29166 if (x2.cmp(this.zero) === 0) {
29167 if (odd)
29168 throw new Error('invalid point');
29169 else
29170 return this.point(this.zero, y);
ebd8d4e8
IC
29171 }
29172
8b095871
IC
29173 var x = x2.redSqrt();
29174 if (x.redSqr().redSub(x2).cmp(this.zero) !== 0)
29175 throw new Error('invalid point');
ebd8d4e8 29176
8b095871
IC
29177 if (x.isOdd() !== odd)
29178 x = x.redNeg();
ebd8d4e8 29179
8b095871
IC
29180 return this.point(x, y);
29181};
ebd8d4e8 29182
8b095871
IC
29183EdwardsCurve.prototype.validate = function validate(point) {
29184 if (point.isInfinity())
29185 return true;
ebd8d4e8 29186
8b095871
IC
29187 // Curve: A * X^2 + Y^2 = C^2 * (1 + D * X^2 * Y^2)
29188 point.normalize();
ebd8d4e8 29189
8b095871
IC
29190 var x2 = point.x.redSqr();
29191 var y2 = point.y.redSqr();
29192 var lhs = x2.redMul(this.a).redAdd(y2);
29193 var rhs = this.c2.redMul(this.one.redAdd(this.d.redMul(x2).redMul(y2)));
ebd8d4e8 29194
8b095871
IC
29195 return lhs.cmp(rhs) === 0;
29196};
ebd8d4e8 29197
8b095871
IC
29198function Point(curve, x, y, z, t) {
29199 Base.BasePoint.call(this, curve, 'projective');
29200 if (x === null && y === null && z === null) {
29201 this.x = this.curve.zero;
29202 this.y = this.curve.one;
29203 this.z = this.curve.one;
29204 this.t = this.curve.zero;
29205 this.zOne = true;
29206 } else {
29207 this.x = new BN(x, 16);
29208 this.y = new BN(y, 16);
29209 this.z = z ? new BN(z, 16) : this.curve.one;
29210 this.t = t && new BN(t, 16);
29211 if (!this.x.red)
29212 this.x = this.x.toRed(this.curve.red);
29213 if (!this.y.red)
29214 this.y = this.y.toRed(this.curve.red);
29215 if (!this.z.red)
29216 this.z = this.z.toRed(this.curve.red);
29217 if (this.t && !this.t.red)
29218 this.t = this.t.toRed(this.curve.red);
29219 this.zOne = this.z === this.curve.one;
29220
29221 // Use extended coordinates
29222 if (this.curve.extended && !this.t) {
29223 this.t = this.x.redMul(this.y);
29224 if (!this.zOne)
29225 this.t = this.t.redMul(this.z.redInvm());
29226 }
29227 }
29228}
29229inherits(Point, Base.BasePoint);
29230
29231EdwardsCurve.prototype.pointFromJSON = function pointFromJSON(obj) {
29232 return Point.fromJSON(this, obj);
29233};
29234
29235EdwardsCurve.prototype.point = function point(x, y, z, t) {
29236 return new Point(this, x, y, z, t);
29237};
29238
29239Point.fromJSON = function fromJSON(curve, obj) {
29240 return new Point(curve, obj[0], obj[1], obj[2]);
29241};
29242
29243Point.prototype.inspect = function inspect() {
29244 if (this.isInfinity())
29245 return '<EC Point Infinity>';
29246 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
29247 ' y: ' + this.y.fromRed().toString(16, 2) +
29248 ' z: ' + this.z.fromRed().toString(16, 2) + '>';
29249};
29250
29251Point.prototype.isInfinity = function isInfinity() {
29252 // XXX This code assumes that zero is always zero in red
29253 return this.x.cmpn(0) === 0 &&
29254 this.y.cmp(this.z) === 0;
29255};
29256
29257Point.prototype._extDbl = function _extDbl() {
29258 // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html
29259 // #doubling-dbl-2008-hwcd
29260 // 4M + 4S
29261
29262 // A = X1^2
29263 var a = this.x.redSqr();
29264 // B = Y1^2
29265 var b = this.y.redSqr();
29266 // C = 2 * Z1^2
29267 var c = this.z.redSqr();
29268 c = c.redIAdd(c);
29269 // D = a * A
29270 var d = this.curve._mulA(a);
29271 // E = (X1 + Y1)^2 - A - B
29272 var e = this.x.redAdd(this.y).redSqr().redISub(a).redISub(b);
29273 // G = D + B
29274 var g = d.redAdd(b);
29275 // F = G - C
29276 var f = g.redSub(c);
29277 // H = D - B
29278 var h = d.redSub(b);
29279 // X3 = E * F
29280 var nx = e.redMul(f);
29281 // Y3 = G * H
29282 var ny = g.redMul(h);
29283 // T3 = E * H
29284 var nt = e.redMul(h);
29285 // Z3 = F * G
29286 var nz = f.redMul(g);
29287 return this.curve.point(nx, ny, nz, nt);
29288};
29289
29290Point.prototype._projDbl = function _projDbl() {
29291 // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html
29292 // #doubling-dbl-2008-bbjlp
29293 // #doubling-dbl-2007-bl
29294 // and others
29295 // Generally 3M + 4S or 2M + 4S
29296
29297 // B = (X1 + Y1)^2
29298 var b = this.x.redAdd(this.y).redSqr();
29299 // C = X1^2
29300 var c = this.x.redSqr();
29301 // D = Y1^2
29302 var d = this.y.redSqr();
29303
29304 var nx;
29305 var ny;
29306 var nz;
29307 if (this.curve.twisted) {
29308 // E = a * C
29309 var e = this.curve._mulA(c);
29310 // F = E + D
29311 var f = e.redAdd(d);
29312 if (this.zOne) {
29313 // X3 = (B - C - D) * (F - 2)
29314 nx = b.redSub(c).redSub(d).redMul(f.redSub(this.curve.two));
29315 // Y3 = F * (E - D)
29316 ny = f.redMul(e.redSub(d));
29317 // Z3 = F^2 - 2 * F
29318 nz = f.redSqr().redSub(f).redSub(f);
29319 } else {
29320 // H = Z1^2
29321 var h = this.z.redSqr();
29322 // J = F - 2 * H
29323 var j = f.redSub(h).redISub(h);
29324 // X3 = (B-C-D)*J
29325 nx = b.redSub(c).redISub(d).redMul(j);
29326 // Y3 = F * (E - D)
29327 ny = f.redMul(e.redSub(d));
29328 // Z3 = F * J
29329 nz = f.redMul(j);
29330 }
29331 } else {
29332 // E = C + D
29333 var e = c.redAdd(d);
29334 // H = (c * Z1)^2
29335 var h = this.curve._mulC(this.c.redMul(this.z)).redSqr();
29336 // J = E - 2 * H
29337 var j = e.redSub(h).redSub(h);
29338 // X3 = c * (B - E) * J
29339 nx = this.curve._mulC(b.redISub(e)).redMul(j);
29340 // Y3 = c * E * (C - D)
29341 ny = this.curve._mulC(e).redMul(c.redISub(d));
29342 // Z3 = E * J
29343 nz = e.redMul(j);
29344 }
29345 return this.curve.point(nx, ny, nz);
29346};
29347
29348Point.prototype.dbl = function dbl() {
29349 if (this.isInfinity())
29350 return this;
29351
29352 // Double in extended coordinates
29353 if (this.curve.extended)
29354 return this._extDbl();
29355 else
29356 return this._projDbl();
29357};
29358
29359Point.prototype._extAdd = function _extAdd(p) {
29360 // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html
29361 // #addition-add-2008-hwcd-3
29362 // 8M
29363
29364 // A = (Y1 - X1) * (Y2 - X2)
29365 var a = this.y.redSub(this.x).redMul(p.y.redSub(p.x));
29366 // B = (Y1 + X1) * (Y2 + X2)
29367 var b = this.y.redAdd(this.x).redMul(p.y.redAdd(p.x));
29368 // C = T1 * k * T2
29369 var c = this.t.redMul(this.curve.dd).redMul(p.t);
29370 // D = Z1 * 2 * Z2
29371 var d = this.z.redMul(p.z.redAdd(p.z));
29372 // E = B - A
29373 var e = b.redSub(a);
29374 // F = D - C
29375 var f = d.redSub(c);
29376 // G = D + C
29377 var g = d.redAdd(c);
29378 // H = B + A
29379 var h = b.redAdd(a);
29380 // X3 = E * F
29381 var nx = e.redMul(f);
29382 // Y3 = G * H
29383 var ny = g.redMul(h);
29384 // T3 = E * H
29385 var nt = e.redMul(h);
29386 // Z3 = F * G
29387 var nz = f.redMul(g);
29388 return this.curve.point(nx, ny, nz, nt);
29389};
29390
29391Point.prototype._projAdd = function _projAdd(p) {
29392 // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html
29393 // #addition-add-2008-bbjlp
29394 // #addition-add-2007-bl
29395 // 10M + 1S
29396
29397 // A = Z1 * Z2
29398 var a = this.z.redMul(p.z);
29399 // B = A^2
29400 var b = a.redSqr();
29401 // C = X1 * X2
29402 var c = this.x.redMul(p.x);
29403 // D = Y1 * Y2
29404 var d = this.y.redMul(p.y);
29405 // E = d * C * D
29406 var e = this.curve.d.redMul(c).redMul(d);
29407 // F = B - E
29408 var f = b.redSub(e);
29409 // G = B + E
29410 var g = b.redAdd(e);
29411 // X3 = A * F * ((X1 + Y1) * (X2 + Y2) - C - D)
29412 var tmp = this.x.redAdd(this.y).redMul(p.x.redAdd(p.y)).redISub(c).redISub(d);
29413 var nx = a.redMul(f).redMul(tmp);
29414 var ny;
29415 var nz;
29416 if (this.curve.twisted) {
29417 // Y3 = A * G * (D - a * C)
29418 ny = a.redMul(g).redMul(d.redSub(this.curve._mulA(c)));
29419 // Z3 = F * G
29420 nz = f.redMul(g);
29421 } else {
29422 // Y3 = A * G * (D - C)
29423 ny = a.redMul(g).redMul(d.redSub(c));
29424 // Z3 = c * F * G
29425 nz = this.curve._mulC(f).redMul(g);
ebd8d4e8 29426 }
8b095871
IC
29427 return this.curve.point(nx, ny, nz);
29428};
ebd8d4e8 29429
8b095871
IC
29430Point.prototype.add = function add(p) {
29431 if (this.isInfinity())
29432 return p;
29433 if (p.isInfinity())
29434 return this;
ebd8d4e8 29435
8b095871
IC
29436 if (this.curve.extended)
29437 return this._extAdd(p);
29438 else
29439 return this._projAdd(p);
29440};
ebd8d4e8 29441
8b095871
IC
29442Point.prototype.mul = function mul(k) {
29443 if (this._hasDoubles(k))
29444 return this.curve._fixedNafMul(this, k);
29445 else
29446 return this.curve._wnafMul(this, k);
29447};
ebd8d4e8 29448
8b095871
IC
29449Point.prototype.mulAdd = function mulAdd(k1, p, k2) {
29450 return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, false);
29451};
ebd8d4e8 29452
8b095871
IC
29453Point.prototype.jmulAdd = function jmulAdd(k1, p, k2) {
29454 return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, true);
29455};
ebd8d4e8 29456
8b095871
IC
29457Point.prototype.normalize = function normalize() {
29458 if (this.zOne)
29459 return this;
29460
29461 // Normalize coordinates
29462 var zi = this.z.redInvm();
29463 this.x = this.x.redMul(zi);
29464 this.y = this.y.redMul(zi);
29465 if (this.t)
29466 this.t = this.t.redMul(zi);
29467 this.z = this.curve.one;
29468 this.zOne = true;
29469 return this;
29470};
29471
29472Point.prototype.neg = function neg() {
29473 return this.curve.point(this.x.redNeg(),
29474 this.y,
29475 this.z,
29476 this.t && this.t.redNeg());
29477};
29478
29479Point.prototype.getX = function getX() {
29480 this.normalize();
29481 return this.x.fromRed();
29482};
29483
29484Point.prototype.getY = function getY() {
29485 this.normalize();
29486 return this.y.fromRed();
29487};
29488
29489Point.prototype.eq = function eq(other) {
29490 return this === other ||
29491 this.getX().cmp(other.getX()) === 0 &&
29492 this.getY().cmp(other.getY()) === 0;
29493};
29494
29495Point.prototype.eqXToP = function eqXToP(x) {
29496 var rx = x.toRed(this.curve.red).redMul(this.z);
29497 if (this.x.cmp(rx) === 0)
29498 return true;
ebd8d4e8 29499
8b095871
IC
29500 var xc = x.clone();
29501 var t = this.curve.redN.redMul(this.z);
29502 for (;;) {
29503 xc.iadd(this.curve.n);
29504 if (xc.cmp(this.curve.p) >= 0)
29505 return false;
ebd8d4e8 29506
8b095871
IC
29507 rx.redIAdd(t);
29508 if (this.x.cmp(rx) === 0)
29509 return true;
ebd8d4e8 29510 }
8b095871
IC
29511 return false;
29512};
ebd8d4e8 29513
8b095871
IC
29514// Compatibility with BaseCurve
29515Point.prototype.toP = Point.prototype.normalize;
29516Point.prototype.mixedAdd = Point.prototype.add;
ebd8d4e8 29517
8b095871
IC
29518},{"../../elliptic":39,"../curve":42,"bn.js":33,"inherits":63}],42:[function(require,module,exports){
29519'use strict';
ebd8d4e8 29520
8b095871 29521var curve = exports;
ebd8d4e8 29522
8b095871
IC
29523curve.base = require('./base');
29524curve.short = require('./short');
29525curve.mont = require('./mont');
29526curve.edwards = require('./edwards');
ebd8d4e8 29527
8b095871
IC
29528},{"./base":40,"./edwards":41,"./mont":43,"./short":44}],43:[function(require,module,exports){
29529'use strict';
ebd8d4e8 29530
8b095871
IC
29531var curve = require('../curve');
29532var BN = require('bn.js');
29533var inherits = require('inherits');
29534var Base = curve.base;
ebd8d4e8 29535
8b095871
IC
29536var elliptic = require('../../elliptic');
29537var utils = elliptic.utils;
ebd8d4e8 29538
8b095871
IC
29539function MontCurve(conf) {
29540 Base.call(this, 'mont', conf);
ebd8d4e8 29541
8b095871
IC
29542 this.a = new BN(conf.a, 16).toRed(this.red);
29543 this.b = new BN(conf.b, 16).toRed(this.red);
29544 this.i4 = new BN(4).toRed(this.red).redInvm();
29545 this.two = new BN(2).toRed(this.red);
29546 this.a24 = this.i4.redMul(this.a.redAdd(this.two));
ebd8d4e8 29547}
8b095871
IC
29548inherits(MontCurve, Base);
29549module.exports = MontCurve;
ebd8d4e8 29550
8b095871
IC
29551MontCurve.prototype.validate = function validate(point) {
29552 var x = point.normalize().x;
29553 var x2 = x.redSqr();
29554 var rhs = x2.redMul(x).redAdd(x2.redMul(this.a)).redAdd(x);
29555 var y = rhs.redSqrt();
ebd8d4e8 29556
8b095871
IC
29557 return y.redSqr().cmp(rhs) === 0;
29558};
ebd8d4e8 29559
8b095871
IC
29560function Point(curve, x, z) {
29561 Base.BasePoint.call(this, curve, 'projective');
29562 if (x === null && z === null) {
29563 this.x = this.curve.one;
29564 this.z = this.curve.zero;
29565 } else {
29566 this.x = new BN(x, 16);
29567 this.z = new BN(z, 16);
29568 if (!this.x.red)
29569 this.x = this.x.toRed(this.curve.red);
29570 if (!this.z.red)
29571 this.z = this.z.toRed(this.curve.red);
29572 }
29573}
29574inherits(Point, Base.BasePoint);
ebd8d4e8 29575
8b095871
IC
29576MontCurve.prototype.decodePoint = function decodePoint(bytes, enc) {
29577 return this.point(utils.toArray(bytes, enc), 1);
29578};
ebd8d4e8 29579
8b095871
IC
29580MontCurve.prototype.point = function point(x, z) {
29581 return new Point(this, x, z);
29582};
ebd8d4e8 29583
8b095871
IC
29584MontCurve.prototype.pointFromJSON = function pointFromJSON(obj) {
29585 return Point.fromJSON(this, obj);
29586};
ebd8d4e8 29587
8b095871
IC
29588Point.prototype.precompute = function precompute() {
29589 // No-op
29590};
ebd8d4e8 29591
8b095871
IC
29592Point.prototype._encode = function _encode() {
29593 return this.getX().toArray('be', this.curve.p.byteLength());
29594};
ebd8d4e8 29595
8b095871
IC
29596Point.fromJSON = function fromJSON(curve, obj) {
29597 return new Point(curve, obj[0], obj[1] || curve.one);
29598};
ebd8d4e8 29599
8b095871
IC
29600Point.prototype.inspect = function inspect() {
29601 if (this.isInfinity())
29602 return '<EC Point Infinity>';
29603 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
29604 ' z: ' + this.z.fromRed().toString(16, 2) + '>';
29605};
ebd8d4e8 29606
8b095871
IC
29607Point.prototype.isInfinity = function isInfinity() {
29608 // XXX This code assumes that zero is always zero in red
29609 return this.z.cmpn(0) === 0;
29610};
ebd8d4e8 29611
8b095871
IC
29612Point.prototype.dbl = function dbl() {
29613 // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#doubling-dbl-1987-m-3
29614 // 2M + 2S + 4A
29615
29616 // A = X1 + Z1
29617 var a = this.x.redAdd(this.z);
29618 // AA = A^2
29619 var aa = a.redSqr();
29620 // B = X1 - Z1
29621 var b = this.x.redSub(this.z);
29622 // BB = B^2
29623 var bb = b.redSqr();
29624 // C = AA - BB
29625 var c = aa.redSub(bb);
29626 // X3 = AA * BB
29627 var nx = aa.redMul(bb);
29628 // Z3 = C * (BB + A24 * C)
29629 var nz = c.redMul(bb.redAdd(this.curve.a24.redMul(c)));
29630 return this.curve.point(nx, nz);
29631};
ebd8d4e8 29632
8b095871
IC
29633Point.prototype.add = function add() {
29634 throw new Error('Not supported on Montgomery curve');
29635};
ebd8d4e8 29636
8b095871
IC
29637Point.prototype.diffAdd = function diffAdd(p, diff) {
29638 // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#diffadd-dadd-1987-m-3
29639 // 4M + 2S + 6A
29640
29641 // A = X2 + Z2
29642 var a = this.x.redAdd(this.z);
29643 // B = X2 - Z2
29644 var b = this.x.redSub(this.z);
29645 // C = X3 + Z3
29646 var c = p.x.redAdd(p.z);
29647 // D = X3 - Z3
29648 var d = p.x.redSub(p.z);
29649 // DA = D * A
29650 var da = d.redMul(a);
29651 // CB = C * B
29652 var cb = c.redMul(b);
29653 // X5 = Z1 * (DA + CB)^2
29654 var nx = diff.z.redMul(da.redAdd(cb).redSqr());
29655 // Z5 = X1 * (DA - CB)^2
29656 var nz = diff.x.redMul(da.redISub(cb).redSqr());
29657 return this.curve.point(nx, nz);
29658};
ebd8d4e8 29659
8b095871
IC
29660Point.prototype.mul = function mul(k) {
29661 var t = k.clone();
29662 var a = this; // (N / 2) * Q + Q
29663 var b = this.curve.point(null, null); // (N / 2) * Q
29664 var c = this; // Q
29665
29666 for (var bits = []; t.cmpn(0) !== 0; t.iushrn(1))
29667 bits.push(t.andln(1));
29668
29669 for (var i = bits.length - 1; i >= 0; i--) {
29670 if (bits[i] === 0) {
29671 // N * Q + Q = ((N / 2) * Q + Q)) + (N / 2) * Q
29672 a = a.diffAdd(b, c);
29673 // N * Q = 2 * ((N / 2) * Q + Q))
29674 b = b.dbl();
29675 } else {
29676 // N * Q = ((N / 2) * Q + Q) + ((N / 2) * Q)
29677 b = a.diffAdd(b, c);
29678 // N * Q + Q = 2 * ((N / 2) * Q + Q)
29679 a = a.dbl();
29680 }
ebd8d4e8 29681 }
8b095871
IC
29682 return b;
29683};
ebd8d4e8 29684
8b095871
IC
29685Point.prototype.mulAdd = function mulAdd() {
29686 throw new Error('Not supported on Montgomery curve');
29687};
ebd8d4e8 29688
8b095871
IC
29689Point.prototype.jumlAdd = function jumlAdd() {
29690 throw new Error('Not supported on Montgomery curve');
29691};
ebd8d4e8 29692
8b095871
IC
29693Point.prototype.eq = function eq(other) {
29694 return this.getX().cmp(other.getX()) === 0;
29695};
ebd8d4e8 29696
8b095871
IC
29697Point.prototype.normalize = function normalize() {
29698 this.x = this.x.redMul(this.z.redInvm());
29699 this.z = this.curve.one;
29700 return this;
29701};
ebd8d4e8 29702
8b095871
IC
29703Point.prototype.getX = function getX() {
29704 // Normalize coordinates
29705 this.normalize();
29706
29707 return this.x.fromRed();
29708};
29709
29710},{"../../elliptic":39,"../curve":42,"bn.js":33,"inherits":63}],44:[function(require,module,exports){
ab78acc6 29711'use strict';
ebd8d4e8 29712
8b095871
IC
29713var curve = require('../curve');
29714var elliptic = require('../../elliptic');
29715var BN = require('bn.js');
29716var inherits = require('inherits');
29717var Base = curve.base;
ab78acc6 29718
8b095871 29719var assert = elliptic.utils.assert;
ebd8d4e8 29720
8b095871
IC
29721function ShortCurve(conf) {
29722 Base.call(this, 'short', conf);
ebd8d4e8 29723
8b095871
IC
29724 this.a = new BN(conf.a, 16).toRed(this.red);
29725 this.b = new BN(conf.b, 16).toRed(this.red);
29726 this.tinv = this.two.redInvm();
ab78acc6 29727
8b095871
IC
29728 this.zeroA = this.a.fromRed().cmpn(0) === 0;
29729 this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0;
ab78acc6 29730
8b095871
IC
29731 // If the curve is endomorphic, precalculate beta and lambda
29732 this.endo = this._getEndomorphism(conf);
29733 this._endoWnafT1 = new Array(4);
29734 this._endoWnafT2 = new Array(4);
ebd8d4e8 29735}
8b095871
IC
29736inherits(ShortCurve, Base);
29737module.exports = ShortCurve;
ebd8d4e8 29738
8b095871
IC
29739ShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) {
29740 // No efficient endomorphism
29741 if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1)
29742 return;
ebd8d4e8 29743
8b095871
IC
29744 // Compute beta and lambda, that lambda * P = (beta * Px; Py)
29745 var beta;
29746 var lambda;
29747 if (conf.beta) {
29748 beta = new BN(conf.beta, 16).toRed(this.red);
29749 } else {
29750 var betas = this._getEndoRoots(this.p);
29751 // Choose the smallest beta
29752 beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1];
29753 beta = beta.toRed(this.red);
29754 }
29755 if (conf.lambda) {
29756 lambda = new BN(conf.lambda, 16);
29757 } else {
29758 // Choose the lambda that is matching selected beta
29759 var lambdas = this._getEndoRoots(this.n);
29760 if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) {
29761 lambda = lambdas[0];
29762 } else {
29763 lambda = lambdas[1];
29764 assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0);
29765 }
29766 }
ab78acc6 29767
8b095871
IC
29768 // Get basis vectors, used for balanced length-two representation
29769 var basis;
29770 if (conf.basis) {
29771 basis = conf.basis.map(function(vec) {
29772 return {
29773 a: new BN(vec.a, 16),
29774 b: new BN(vec.b, 16)
29775 };
29776 });
29777 } else {
29778 basis = this._getEndoBasis(lambda);
29779 }
ab78acc6 29780
8b095871
IC
29781 return {
29782 beta: beta,
29783 lambda: lambda,
29784 basis: basis
29785 };
29786};
ab78acc6 29787
8b095871
IC
29788ShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) {
29789 // Find roots of for x^2 + x + 1 in F
29790 // Root = (-1 +- Sqrt(-3)) / 2
29791 //
29792 var red = num === this.p ? this.red : BN.mont(num);
29793 var tinv = new BN(2).toRed(red).redInvm();
29794 var ntinv = tinv.redNeg();
ab78acc6 29795
8b095871 29796 var s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv);
ab78acc6 29797
8b095871
IC
29798 var l1 = ntinv.redAdd(s).fromRed();
29799 var l2 = ntinv.redSub(s).fromRed();
29800 return [ l1, l2 ];
29801};
ab78acc6 29802
8b095871
IC
29803ShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) {
29804 // aprxSqrt >= sqrt(this.n)
29805 var aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2));
29806
29807 // 3.74
29808 // Run EGCD, until r(L + 1) < aprxSqrt
29809 var u = lambda;
29810 var v = this.n.clone();
29811 var x1 = new BN(1);
29812 var y1 = new BN(0);
29813 var x2 = new BN(0);
29814 var y2 = new BN(1);
29815
29816 // NOTE: all vectors are roots of: a + b * lambda = 0 (mod n)
29817 var a0;
29818 var b0;
29819 // First vector
29820 var a1;
29821 var b1;
29822 // Second vector
29823 var a2;
29824 var b2;
29825
29826 var prevR;
29827 var i = 0;
29828 var r;
29829 var x;
29830 while (u.cmpn(0) !== 0) {
29831 var q = v.div(u);
29832 r = v.sub(q.mul(u));
29833 x = x2.sub(q.mul(x1));
29834 var y = y2.sub(q.mul(y1));
29835
29836 if (!a1 && r.cmp(aprxSqrt) < 0) {
29837 a0 = prevR.neg();
29838 b0 = x1;
29839 a1 = r.neg();
29840 b1 = x;
29841 } else if (a1 && ++i === 2) {
29842 break;
ab78acc6 29843 }
8b095871 29844 prevR = r;
ab78acc6 29845
8b095871
IC
29846 v = u;
29847 u = r;
29848 x2 = x1;
29849 x1 = x;
29850 y2 = y1;
29851 y1 = y;
ebd8d4e8 29852 }
8b095871
IC
29853 a2 = r.neg();
29854 b2 = x;
ab78acc6 29855
8b095871
IC
29856 var len1 = a1.sqr().add(b1.sqr());
29857 var len2 = a2.sqr().add(b2.sqr());
29858 if (len2.cmp(len1) >= 0) {
29859 a2 = a0;
29860 b2 = b0;
29861 }
ebd8d4e8 29862
8b095871
IC
29863 // Normalize signs
29864 if (a1.negative) {
29865 a1 = a1.neg();
29866 b1 = b1.neg();
29867 }
29868 if (a2.negative) {
29869 a2 = a2.neg();
29870 b2 = b2.neg();
29871 }
ebd8d4e8 29872
8b095871
IC
29873 return [
29874 { a: a1, b: b1 },
29875 { a: a2, b: b2 }
29876 ];
29877};
ab78acc6 29878
8b095871
IC
29879ShortCurve.prototype._endoSplit = function _endoSplit(k) {
29880 var basis = this.endo.basis;
29881 var v1 = basis[0];
29882 var v2 = basis[1];
ab78acc6 29883
8b095871
IC
29884 var c1 = v2.b.mul(k).divRound(this.n);
29885 var c2 = v1.b.neg().mul(k).divRound(this.n);
ab78acc6 29886
8b095871
IC
29887 var p1 = c1.mul(v1.a);
29888 var p2 = c2.mul(v2.a);
29889 var q1 = c1.mul(v1.b);
29890 var q2 = c2.mul(v2.b);
ab78acc6 29891
8b095871
IC
29892 // Calculate answer
29893 var k1 = k.sub(p1).sub(p2);
29894 var k2 = q1.add(q2).neg();
29895 return { k1: k1, k2: k2 };
29896};
ab78acc6 29897
8b095871
IC
29898ShortCurve.prototype.pointFromX = function pointFromX(x, odd) {
29899 x = new BN(x, 16);
29900 if (!x.red)
29901 x = x.toRed(this.red);
ab78acc6 29902
8b095871
IC
29903 var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b);
29904 var y = y2.redSqrt();
29905 if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)
29906 throw new Error('invalid point');
ab78acc6 29907
8b095871
IC
29908 // XXX Is there any way to tell if the number is odd without converting it
29909 // to non-red form?
29910 var isOdd = y.fromRed().isOdd();
29911 if (odd && !isOdd || !odd && isOdd)
29912 y = y.redNeg();
ab78acc6 29913
8b095871
IC
29914 return this.point(x, y);
29915};
ab78acc6 29916
8b095871
IC
29917ShortCurve.prototype.validate = function validate(point) {
29918 if (point.inf)
29919 return true;
ab78acc6 29920
8b095871
IC
29921 var x = point.x;
29922 var y = point.y;
ab78acc6 29923
8b095871
IC
29924 var ax = this.a.redMul(x);
29925 var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b);
29926 return y.redSqr().redISub(rhs).cmpn(0) === 0;
29927};
ab78acc6 29928
8b095871
IC
29929ShortCurve.prototype._endoWnafMulAdd =
29930 function _endoWnafMulAdd(points, coeffs, jacobianResult) {
29931 var npoints = this._endoWnafT1;
29932 var ncoeffs = this._endoWnafT2;
29933 for (var i = 0; i < points.length; i++) {
29934 var split = this._endoSplit(coeffs[i]);
29935 var p = points[i];
29936 var beta = p._getBeta();
ab78acc6 29937
8b095871
IC
29938 if (split.k1.negative) {
29939 split.k1.ineg();
29940 p = p.neg(true);
29941 }
29942 if (split.k2.negative) {
29943 split.k2.ineg();
29944 beta = beta.neg(true);
ab78acc6 29945 }
ab78acc6 29946
8b095871
IC
29947 npoints[i * 2] = p;
29948 npoints[i * 2 + 1] = beta;
29949 ncoeffs[i * 2] = split.k1;
29950 ncoeffs[i * 2 + 1] = split.k2;
29951 }
29952 var res = this._wnafMulAdd(1, npoints, ncoeffs, i * 2, jacobianResult);
ab78acc6 29953
8b095871
IC
29954 // Clean-up references to points and coefficients
29955 for (var j = 0; j < i * 2; j++) {
29956 npoints[j] = null;
29957 ncoeffs[j] = null;
29958 }
29959 return res;
29960};
29961
29962function Point(curve, x, y, isRed) {
29963 Base.BasePoint.call(this, curve, 'affine');
29964 if (x === null && y === null) {
29965 this.x = null;
29966 this.y = null;
29967 this.inf = true;
29968 } else {
29969 this.x = new BN(x, 16);
29970 this.y = new BN(y, 16);
29971 // Force redgomery representation when loading from JSON
29972 if (isRed) {
29973 this.x.forceRed(this.curve.red);
29974 this.y.forceRed(this.curve.red);
ab78acc6 29975 }
8b095871
IC
29976 if (!this.x.red)
29977 this.x = this.x.toRed(this.curve.red);
29978 if (!this.y.red)
29979 this.y = this.y.toRed(this.curve.red);
29980 this.inf = false;
29981 }
29982}
29983inherits(Point, Base.BasePoint);
ab78acc6 29984
8b095871
IC
29985ShortCurve.prototype.point = function point(x, y, isRed) {
29986 return new Point(this, x, y, isRed);
29987};
ab78acc6 29988
8b095871
IC
29989ShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) {
29990 return Point.fromJSON(this, obj, red);
29991};
ab78acc6 29992
8b095871
IC
29993Point.prototype._getBeta = function _getBeta() {
29994 if (!this.curve.endo)
29995 return;
ab78acc6 29996
8b095871
IC
29997 var pre = this.precomputed;
29998 if (pre && pre.beta)
29999 return pre.beta;
ab78acc6 30000
8b095871
IC
30001 var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y);
30002 if (pre) {
30003 var curve = this.curve;
30004 var endoMul = function(p) {
30005 return curve.point(p.x.redMul(curve.endo.beta), p.y);
30006 };
30007 pre.beta = beta;
30008 beta.precomputed = {
30009 beta: null,
30010 naf: pre.naf && {
30011 wnd: pre.naf.wnd,
30012 points: pre.naf.points.map(endoMul)
30013 },
30014 doubles: pre.doubles && {
30015 step: pre.doubles.step,
30016 points: pre.doubles.points.map(endoMul)
30017 }
ab78acc6 30018 };
ab78acc6 30019 }
8b095871 30020 return beta;
ab78acc6
IC
30021};
30022
8b095871
IC
30023Point.prototype.toJSON = function toJSON() {
30024 if (!this.precomputed)
30025 return [ this.x, this.y ];
ab78acc6 30026
8b095871
IC
30027 return [ this.x, this.y, this.precomputed && {
30028 doubles: this.precomputed.doubles && {
30029 step: this.precomputed.doubles.step,
30030 points: this.precomputed.doubles.points.slice(1)
30031 },
30032 naf: this.precomputed.naf && {
30033 wnd: this.precomputed.naf.wnd,
30034 points: this.precomputed.naf.points.slice(1)
30035 }
30036 } ];
30037};
ab78acc6 30038
8b095871
IC
30039Point.fromJSON = function fromJSON(curve, obj, red) {
30040 if (typeof obj === 'string')
30041 obj = JSON.parse(obj);
30042 var res = curve.point(obj[0], obj[1], red);
30043 if (!obj[2])
30044 return res;
ab78acc6 30045
8b095871
IC
30046 function obj2point(obj) {
30047 return curve.point(obj[0], obj[1], red);
30048 }
30049
30050 var pre = obj[2];
30051 res.precomputed = {
30052 beta: null,
30053 doubles: pre.doubles && {
30054 step: pre.doubles.step,
30055 points: [ res ].concat(pre.doubles.points.map(obj2point))
30056 },
30057 naf: pre.naf && {
30058 wnd: pre.naf.wnd,
30059 points: [ res ].concat(pre.naf.points.map(obj2point))
ab78acc6 30060 }
8b095871
IC
30061 };
30062 return res;
30063};
ab78acc6 30064
8b095871
IC
30065Point.prototype.inspect = function inspect() {
30066 if (this.isInfinity())
30067 return '<EC Point Infinity>';
30068 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
30069 ' y: ' + this.y.fromRed().toString(16, 2) + '>';
30070};
ab78acc6 30071
8b095871
IC
30072Point.prototype.isInfinity = function isInfinity() {
30073 return this.inf;
30074};
ebd8d4e8 30075
8b095871
IC
30076Point.prototype.add = function add(p) {
30077 // O + P = P
30078 if (this.inf)
30079 return p;
ab78acc6 30080
8b095871
IC
30081 // P + O = P
30082 if (p.inf)
30083 return this;
ab78acc6 30084
8b095871
IC
30085 // P + P = 2P
30086 if (this.eq(p))
30087 return this.dbl();
ab78acc6 30088
8b095871
IC
30089 // P + (-P) = O
30090 if (this.neg().eq(p))
30091 return this.curve.point(null, null);
ab78acc6 30092
8b095871
IC
30093 // P + Q = O
30094 if (this.x.cmp(p.x) === 0)
30095 return this.curve.point(null, null);
ebd8d4e8 30096
8b095871
IC
30097 var c = this.y.redSub(p.y);
30098 if (c.cmpn(0) !== 0)
30099 c = c.redMul(this.x.redSub(p.x).redInvm());
30100 var nx = c.redSqr().redISub(this.x).redISub(p.x);
30101 var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);
30102 return this.curve.point(nx, ny);
30103};
ab78acc6 30104
8b095871
IC
30105Point.prototype.dbl = function dbl() {
30106 if (this.inf)
30107 return this;
ebd8d4e8 30108
8b095871
IC
30109 // 2P = O
30110 var ys1 = this.y.redAdd(this.y);
30111 if (ys1.cmpn(0) === 0)
30112 return this.curve.point(null, null);
ebd8d4e8 30113
8b095871 30114 var a = this.curve.a;
ebd8d4e8 30115
8b095871
IC
30116 var x2 = this.x.redSqr();
30117 var dyinv = ys1.redInvm();
30118 var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv);
ebd8d4e8 30119
8b095871
IC
30120 var nx = c.redSqr().redISub(this.x.redAdd(this.x));
30121 var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);
30122 return this.curve.point(nx, ny);
30123};
ebd8d4e8 30124
8b095871
IC
30125Point.prototype.getX = function getX() {
30126 return this.x.fromRed();
30127};
ab78acc6 30128
8b095871
IC
30129Point.prototype.getY = function getY() {
30130 return this.y.fromRed();
30131};
ebd8d4e8 30132
8b095871
IC
30133Point.prototype.mul = function mul(k) {
30134 k = new BN(k, 16);
ebd8d4e8 30135
8b095871
IC
30136 if (this._hasDoubles(k))
30137 return this.curve._fixedNafMul(this, k);
30138 else if (this.curve.endo)
30139 return this.curve._endoWnafMulAdd([ this ], [ k ]);
30140 else
30141 return this.curve._wnafMul(this, k);
30142};
ebd8d4e8 30143
8b095871
IC
30144Point.prototype.mulAdd = function mulAdd(k1, p2, k2) {
30145 var points = [ this, p2 ];
30146 var coeffs = [ k1, k2 ];
30147 if (this.curve.endo)
30148 return this.curve._endoWnafMulAdd(points, coeffs);
30149 else
30150 return this.curve._wnafMulAdd(1, points, coeffs, 2);
30151};
ebd8d4e8 30152
8b095871
IC
30153Point.prototype.jmulAdd = function jmulAdd(k1, p2, k2) {
30154 var points = [ this, p2 ];
30155 var coeffs = [ k1, k2 ];
30156 if (this.curve.endo)
30157 return this.curve._endoWnafMulAdd(points, coeffs, true);
30158 else
30159 return this.curve._wnafMulAdd(1, points, coeffs, 2, true);
30160};
ebd8d4e8 30161
8b095871
IC
30162Point.prototype.eq = function eq(p) {
30163 return this === p ||
30164 this.inf === p.inf &&
30165 (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0);
30166};
ebd8d4e8 30167
8b095871
IC
30168Point.prototype.neg = function neg(_precompute) {
30169 if (this.inf)
30170 return this;
ebd8d4e8 30171
8b095871
IC
30172 var res = this.curve.point(this.x, this.y.redNeg());
30173 if (_precompute && this.precomputed) {
30174 var pre = this.precomputed;
30175 var negate = function(p) {
30176 return p.neg();
30177 };
30178 res.precomputed = {
30179 naf: pre.naf && {
30180 wnd: pre.naf.wnd,
30181 points: pre.naf.points.map(negate)
30182 },
30183 doubles: pre.doubles && {
30184 step: pre.doubles.step,
30185 points: pre.doubles.points.map(negate)
30186 }
30187 };
30188 }
30189 return res;
30190};
ebd8d4e8 30191
8b095871
IC
30192Point.prototype.toJ = function toJ() {
30193 if (this.inf)
30194 return this.curve.jpoint(null, null, null);
ebd8d4e8 30195
8b095871
IC
30196 var res = this.curve.jpoint(this.x, this.y, this.curve.one);
30197 return res;
30198};
ebd8d4e8 30199
8b095871
IC
30200function JPoint(curve, x, y, z) {
30201 Base.BasePoint.call(this, curve, 'jacobian');
30202 if (x === null && y === null && z === null) {
30203 this.x = this.curve.one;
30204 this.y = this.curve.one;
30205 this.z = new BN(0);
30206 } else {
30207 this.x = new BN(x, 16);
30208 this.y = new BN(y, 16);
30209 this.z = new BN(z, 16);
30210 }
30211 if (!this.x.red)
30212 this.x = this.x.toRed(this.curve.red);
30213 if (!this.y.red)
30214 this.y = this.y.toRed(this.curve.red);
30215 if (!this.z.red)
30216 this.z = this.z.toRed(this.curve.red);
ebd8d4e8 30217
8b095871 30218 this.zOne = this.z === this.curve.one;
ab78acc6 30219}
8b095871 30220inherits(JPoint, Base.BasePoint);
ab78acc6 30221
8b095871
IC
30222ShortCurve.prototype.jpoint = function jpoint(x, y, z) {
30223 return new JPoint(this, x, y, z);
30224};
ab78acc6 30225
8b095871
IC
30226JPoint.prototype.toP = function toP() {
30227 if (this.isInfinity())
30228 return this.curve.point(null, null);
ab78acc6 30229
8b095871
IC
30230 var zinv = this.z.redInvm();
30231 var zinv2 = zinv.redSqr();
30232 var ax = this.x.redMul(zinv2);
30233 var ay = this.y.redMul(zinv2).redMul(zinv);
ab78acc6 30234
8b095871
IC
30235 return this.curve.point(ax, ay);
30236};
ab78acc6 30237
8b095871
IC
30238JPoint.prototype.neg = function neg() {
30239 return this.curve.jpoint(this.x, this.y.redNeg(), this.z);
30240};
ab78acc6 30241
8b095871
IC
30242JPoint.prototype.add = function add(p) {
30243 // O + P = P
30244 if (this.isInfinity())
30245 return p;
ab78acc6 30246
8b095871
IC
30247 // P + O = P
30248 if (p.isInfinity())
30249 return this;
ab78acc6 30250
8b095871
IC
30251 // 12M + 4S + 7A
30252 var pz2 = p.z.redSqr();
30253 var z2 = this.z.redSqr();
30254 var u1 = this.x.redMul(pz2);
30255 var u2 = p.x.redMul(z2);
30256 var s1 = this.y.redMul(pz2.redMul(p.z));
30257 var s2 = p.y.redMul(z2.redMul(this.z));
30258
30259 var h = u1.redSub(u2);
30260 var r = s1.redSub(s2);
30261 if (h.cmpn(0) === 0) {
30262 if (r.cmpn(0) !== 0)
30263 return this.curve.jpoint(null, null, null);
30264 else
30265 return this.dbl();
30266 }
ab78acc6 30267
8b095871
IC
30268 var h2 = h.redSqr();
30269 var h3 = h2.redMul(h);
30270 var v = u1.redMul(h2);
ab78acc6 30271
8b095871
IC
30272 var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);
30273 var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));
30274 var nz = this.z.redMul(p.z).redMul(h);
ab78acc6 30275
8b095871
IC
30276 return this.curve.jpoint(nx, ny, nz);
30277};
ab78acc6 30278
8b095871
IC
30279JPoint.prototype.mixedAdd = function mixedAdd(p) {
30280 // O + P = P
30281 if (this.isInfinity())
30282 return p.toJ();
ab78acc6 30283
8b095871
IC
30284 // P + O = P
30285 if (p.isInfinity())
30286 return this;
ab78acc6 30287
8b095871
IC
30288 // 8M + 3S + 7A
30289 var z2 = this.z.redSqr();
30290 var u1 = this.x;
30291 var u2 = p.x.redMul(z2);
30292 var s1 = this.y;
30293 var s2 = p.y.redMul(z2).redMul(this.z);
30294
30295 var h = u1.redSub(u2);
30296 var r = s1.redSub(s2);
30297 if (h.cmpn(0) === 0) {
30298 if (r.cmpn(0) !== 0)
30299 return this.curve.jpoint(null, null, null);
30300 else
30301 return this.dbl();
ab78acc6
IC
30302 }
30303
8b095871
IC
30304 var h2 = h.redSqr();
30305 var h3 = h2.redMul(h);
30306 var v = u1.redMul(h2);
ab78acc6 30307
8b095871
IC
30308 var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);
30309 var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));
30310 var nz = this.z.redMul(h);
ab78acc6 30311
8b095871
IC
30312 return this.curve.jpoint(nx, ny, nz);
30313};
ab78acc6 30314
8b095871
IC
30315JPoint.prototype.dblp = function dblp(pow) {
30316 if (pow === 0)
30317 return this;
30318 if (this.isInfinity())
30319 return this;
30320 if (!pow)
30321 return this.dbl();
30322
30323 if (this.curve.zeroA || this.curve.threeA) {
30324 var r = this;
30325 for (var i = 0; i < pow; i++)
30326 r = r.dbl();
30327 return r;
30328 }
30329
30330 // 1M + 2S + 1A + N * (4S + 5M + 8A)
30331 // N = 1 => 6M + 6S + 9A
30332 var a = this.curve.a;
30333 var tinv = this.curve.tinv;
30334
30335 var jx = this.x;
30336 var jy = this.y;
30337 var jz = this.z;
30338 var jz4 = jz.redSqr().redSqr();
30339
30340 // Reuse results
30341 var jyd = jy.redAdd(jy);
30342 for (var i = 0; i < pow; i++) {
30343 var jx2 = jx.redSqr();
30344 var jyd2 = jyd.redSqr();
30345 var jyd4 = jyd2.redSqr();
30346 var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));
30347
30348 var t1 = jx.redMul(jyd2);
30349 var nx = c.redSqr().redISub(t1.redAdd(t1));
30350 var t2 = t1.redISub(nx);
30351 var dny = c.redMul(t2);
30352 dny = dny.redIAdd(dny).redISub(jyd4);
30353 var nz = jyd.redMul(jz);
30354 if (i + 1 < pow)
30355 jz4 = jz4.redMul(jyd4);
30356
30357 jx = nx;
30358 jz = nz;
30359 jyd = dny;
30360 }
30361
30362 return this.curve.jpoint(jx, jyd.redMul(tinv), jz);
30363};
ab78acc6 30364
8b095871
IC
30365JPoint.prototype.dbl = function dbl() {
30366 if (this.isInfinity())
30367 return this;
ab78acc6 30368
8b095871
IC
30369 if (this.curve.zeroA)
30370 return this._zeroDbl();
30371 else if (this.curve.threeA)
30372 return this._threeDbl();
30373 else
30374 return this._dbl();
30375};
ab78acc6 30376
8b095871
IC
30377JPoint.prototype._zeroDbl = function _zeroDbl() {
30378 var nx;
30379 var ny;
30380 var nz;
30381 // Z = 1
30382 if (this.zOne) {
30383 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html
30384 // #doubling-mdbl-2007-bl
30385 // 1M + 5S + 14A
30386
30387 // XX = X1^2
30388 var xx = this.x.redSqr();
30389 // YY = Y1^2
30390 var yy = this.y.redSqr();
30391 // YYYY = YY^2
30392 var yyyy = yy.redSqr();
30393 // S = 2 * ((X1 + YY)^2 - XX - YYYY)
30394 var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
30395 s = s.redIAdd(s);
30396 // M = 3 * XX + a; a = 0
30397 var m = xx.redAdd(xx).redIAdd(xx);
30398 // T = M ^ 2 - 2*S
30399 var t = m.redSqr().redISub(s).redISub(s);
30400
30401 // 8 * YYYY
30402 var yyyy8 = yyyy.redIAdd(yyyy);
30403 yyyy8 = yyyy8.redIAdd(yyyy8);
30404 yyyy8 = yyyy8.redIAdd(yyyy8);
30405
30406 // X3 = T
30407 nx = t;
30408 // Y3 = M * (S - T) - 8 * YYYY
30409 ny = m.redMul(s.redISub(t)).redISub(yyyy8);
30410 // Z3 = 2*Y1
30411 nz = this.y.redAdd(this.y);
30412 } else {
30413 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html
30414 // #doubling-dbl-2009-l
30415 // 2M + 5S + 13A
30416
30417 // A = X1^2
30418 var a = this.x.redSqr();
30419 // B = Y1^2
30420 var b = this.y.redSqr();
30421 // C = B^2
30422 var c = b.redSqr();
30423 // D = 2 * ((X1 + B)^2 - A - C)
30424 var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c);
30425 d = d.redIAdd(d);
30426 // E = 3 * A
30427 var e = a.redAdd(a).redIAdd(a);
30428 // F = E^2
30429 var f = e.redSqr();
30430
30431 // 8 * C
30432 var c8 = c.redIAdd(c);
30433 c8 = c8.redIAdd(c8);
30434 c8 = c8.redIAdd(c8);
30435
30436 // X3 = F - 2 * D
30437 nx = f.redISub(d).redISub(d);
30438 // Y3 = E * (D - X3) - 8 * C
30439 ny = e.redMul(d.redISub(nx)).redISub(c8);
30440 // Z3 = 2 * Y1 * Z1
30441 nz = this.y.redMul(this.z);
30442 nz = nz.redIAdd(nz);
30443 }
30444
30445 return this.curve.jpoint(nx, ny, nz);
30446};
ab78acc6 30447
8b095871
IC
30448JPoint.prototype._threeDbl = function _threeDbl() {
30449 var nx;
30450 var ny;
30451 var nz;
30452 // Z = 1
30453 if (this.zOne) {
30454 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html
30455 // #doubling-mdbl-2007-bl
30456 // 1M + 5S + 15A
30457
30458 // XX = X1^2
30459 var xx = this.x.redSqr();
30460 // YY = Y1^2
30461 var yy = this.y.redSqr();
30462 // YYYY = YY^2
30463 var yyyy = yy.redSqr();
30464 // S = 2 * ((X1 + YY)^2 - XX - YYYY)
30465 var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
30466 s = s.redIAdd(s);
30467 // M = 3 * XX + a
30468 var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a);
30469 // T = M^2 - 2 * S
30470 var t = m.redSqr().redISub(s).redISub(s);
30471 // X3 = T
30472 nx = t;
30473 // Y3 = M * (S - T) - 8 * YYYY
30474 var yyyy8 = yyyy.redIAdd(yyyy);
30475 yyyy8 = yyyy8.redIAdd(yyyy8);
30476 yyyy8 = yyyy8.redIAdd(yyyy8);
30477 ny = m.redMul(s.redISub(t)).redISub(yyyy8);
30478 // Z3 = 2 * Y1
30479 nz = this.y.redAdd(this.y);
30480 } else {
30481 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b
30482 // 3M + 5S
30483
30484 // delta = Z1^2
30485 var delta = this.z.redSqr();
30486 // gamma = Y1^2
30487 var gamma = this.y.redSqr();
30488 // beta = X1 * gamma
30489 var beta = this.x.redMul(gamma);
30490 // alpha = 3 * (X1 - delta) * (X1 + delta)
30491 var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta));
30492 alpha = alpha.redAdd(alpha).redIAdd(alpha);
30493 // X3 = alpha^2 - 8 * beta
30494 var beta4 = beta.redIAdd(beta);
30495 beta4 = beta4.redIAdd(beta4);
30496 var beta8 = beta4.redAdd(beta4);
30497 nx = alpha.redSqr().redISub(beta8);
30498 // Z3 = (Y1 + Z1)^2 - gamma - delta
30499 nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta);
30500 // Y3 = alpha * (4 * beta - X3) - 8 * gamma^2
30501 var ggamma8 = gamma.redSqr();
30502 ggamma8 = ggamma8.redIAdd(ggamma8);
30503 ggamma8 = ggamma8.redIAdd(ggamma8);
30504 ggamma8 = ggamma8.redIAdd(ggamma8);
30505 ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8);
30506 }
30507
30508 return this.curve.jpoint(nx, ny, nz);
30509};
ab78acc6 30510
8b095871
IC
30511JPoint.prototype._dbl = function _dbl() {
30512 var a = this.curve.a;
ab78acc6 30513
8b095871
IC
30514 // 4M + 6S + 10A
30515 var jx = this.x;
30516 var jy = this.y;
30517 var jz = this.z;
30518 var jz4 = jz.redSqr().redSqr();
ab78acc6 30519
8b095871
IC
30520 var jx2 = jx.redSqr();
30521 var jy2 = jy.redSqr();
ebd8d4e8 30522
8b095871 30523 var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));
ebd8d4e8 30524
8b095871
IC
30525 var jxd4 = jx.redAdd(jx);
30526 jxd4 = jxd4.redIAdd(jxd4);
30527 var t1 = jxd4.redMul(jy2);
30528 var nx = c.redSqr().redISub(t1.redAdd(t1));
30529 var t2 = t1.redISub(nx);
ebd8d4e8 30530
8b095871
IC
30531 var jyd8 = jy2.redSqr();
30532 jyd8 = jyd8.redIAdd(jyd8);
30533 jyd8 = jyd8.redIAdd(jyd8);
30534 jyd8 = jyd8.redIAdd(jyd8);
30535 var ny = c.redMul(t2).redISub(jyd8);
30536 var nz = jy.redAdd(jy).redMul(jz);
ebd8d4e8 30537
8b095871
IC
30538 return this.curve.jpoint(nx, ny, nz);
30539};
ebd8d4e8 30540
8b095871
IC
30541JPoint.prototype.trpl = function trpl() {
30542 if (!this.curve.zeroA)
30543 return this.dbl().add(this);
30544
30545 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl
30546 // 5M + 10S + ...
30547
30548 // XX = X1^2
30549 var xx = this.x.redSqr();
30550 // YY = Y1^2
30551 var yy = this.y.redSqr();
30552 // ZZ = Z1^2
30553 var zz = this.z.redSqr();
30554 // YYYY = YY^2
30555 var yyyy = yy.redSqr();
30556 // M = 3 * XX + a * ZZ2; a = 0
30557 var m = xx.redAdd(xx).redIAdd(xx);
30558 // MM = M^2
30559 var mm = m.redSqr();
30560 // E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM
30561 var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
30562 e = e.redIAdd(e);
30563 e = e.redAdd(e).redIAdd(e);
30564 e = e.redISub(mm);
30565 // EE = E^2
30566 var ee = e.redSqr();
30567 // T = 16*YYYY
30568 var t = yyyy.redIAdd(yyyy);
30569 t = t.redIAdd(t);
30570 t = t.redIAdd(t);
30571 t = t.redIAdd(t);
30572 // U = (M + E)^2 - MM - EE - T
30573 var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t);
30574 // X3 = 4 * (X1 * EE - 4 * YY * U)
30575 var yyu4 = yy.redMul(u);
30576 yyu4 = yyu4.redIAdd(yyu4);
30577 yyu4 = yyu4.redIAdd(yyu4);
30578 var nx = this.x.redMul(ee).redISub(yyu4);
30579 nx = nx.redIAdd(nx);
30580 nx = nx.redIAdd(nx);
30581 // Y3 = 8 * Y1 * (U * (T - U) - E * EE)
30582 var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee)));
30583 ny = ny.redIAdd(ny);
30584 ny = ny.redIAdd(ny);
30585 ny = ny.redIAdd(ny);
30586 // Z3 = (Z1 + E)^2 - ZZ - EE
30587 var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee);
30588
30589 return this.curve.jpoint(nx, ny, nz);
30590};
ebd8d4e8 30591
8b095871
IC
30592JPoint.prototype.mul = function mul(k, kbase) {
30593 k = new BN(k, kbase);
ebd8d4e8 30594
8b095871
IC
30595 return this.curve._wnafMul(this, k);
30596};
ebd8d4e8 30597
8b095871
IC
30598JPoint.prototype.eq = function eq(p) {
30599 if (p.type === 'affine')
30600 return this.eq(p.toJ());
ebd8d4e8 30601
8b095871
IC
30602 if (this === p)
30603 return true;
ebd8d4e8 30604
8b095871
IC
30605 // x1 * z2^2 == x2 * z1^2
30606 var z2 = this.z.redSqr();
30607 var pz2 = p.z.redSqr();
30608 if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0)
30609 return false;
ebd8d4e8 30610
8b095871
IC
30611 // y1 * z2^3 == y2 * z1^3
30612 var z3 = z2.redMul(this.z);
30613 var pz3 = pz2.redMul(p.z);
30614 return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0;
30615};
ab78acc6 30616
8b095871
IC
30617JPoint.prototype.eqXToP = function eqXToP(x) {
30618 var zs = this.z.redSqr();
30619 var rx = x.toRed(this.curve.red).redMul(zs);
30620 if (this.x.cmp(rx) === 0)
30621 return true;
ebd8d4e8 30622
8b095871
IC
30623 var xc = x.clone();
30624 var t = this.curve.redN.redMul(zs);
30625 for (;;) {
30626 xc.iadd(this.curve.n);
30627 if (xc.cmp(this.curve.p) >= 0)
30628 return false;
ebd8d4e8 30629
8b095871
IC
30630 rx.redIAdd(t);
30631 if (this.x.cmp(rx) === 0)
30632 return true;
30633 }
30634 return false;
30635};
ebd8d4e8 30636
8b095871
IC
30637JPoint.prototype.inspect = function inspect() {
30638 if (this.isInfinity())
30639 return '<EC JPoint Infinity>';
30640 return '<EC JPoint x: ' + this.x.toString(16, 2) +
30641 ' y: ' + this.y.toString(16, 2) +
30642 ' z: ' + this.z.toString(16, 2) + '>';
30643};
ebd8d4e8 30644
8b095871
IC
30645JPoint.prototype.isInfinity = function isInfinity() {
30646 // XXX This code assumes that zero is always zero in red
30647 return this.z.cmpn(0) === 0;
30648};
ebd8d4e8 30649
8b095871
IC
30650},{"../../elliptic":39,"../curve":42,"bn.js":33,"inherits":63}],45:[function(require,module,exports){
30651'use strict';
ebd8d4e8 30652
8b095871 30653var curves = exports;
ebd8d4e8 30654
8b095871
IC
30655var hash = require('hash.js');
30656var elliptic = require('../elliptic');
ebd8d4e8 30657
8b095871 30658var assert = elliptic.utils.assert;
ebd8d4e8 30659
8b095871
IC
30660function PresetCurve(options) {
30661 if (options.type === 'short')
30662 this.curve = new elliptic.curve.short(options);
30663 else if (options.type === 'edwards')
30664 this.curve = new elliptic.curve.edwards(options);
30665 else
30666 this.curve = new elliptic.curve.mont(options);
30667 this.g = this.curve.g;
30668 this.n = this.curve.n;
30669 this.hash = options.hash;
30670
30671 assert(this.g.validate(), 'Invalid curve');
30672 assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, G*N != O');
30673}
30674curves.PresetCurve = PresetCurve;
30675
30676function defineCurve(name, options) {
30677 Object.defineProperty(curves, name, {
30678 configurable: true,
30679 enumerable: true,
30680 get: function() {
30681 var curve = new PresetCurve(options);
30682 Object.defineProperty(curves, name, {
30683 configurable: true,
30684 enumerable: true,
30685 value: curve
30686 });
30687 return curve;
30688 }
30689 });
ebd8d4e8
IC
30690}
30691
8b095871
IC
30692defineCurve('p192', {
30693 type: 'short',
30694 prime: 'p192',
30695 p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff',
30696 a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc',
30697 b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1',
30698 n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831',
30699 hash: hash.sha256,
30700 gRed: false,
30701 g: [
30702 '188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012',
30703 '07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811'
30704 ]
30705});
ebd8d4e8 30706
8b095871
IC
30707defineCurve('p224', {
30708 type: 'short',
30709 prime: 'p224',
30710 p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001',
30711 a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe',
30712 b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4',
30713 n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d',
30714 hash: hash.sha256,
30715 gRed: false,
30716 g: [
30717 'b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21',
30718 'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34'
30719 ]
30720});
ebd8d4e8 30721
8b095871
IC
30722defineCurve('p256', {
30723 type: 'short',
30724 prime: null,
30725 p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff',
30726 a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc',
30727 b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b',
30728 n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551',
30729 hash: hash.sha256,
30730 gRed: false,
30731 g: [
30732 '6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296',
30733 '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5'
30734 ]
30735});
ebd8d4e8 30736
8b095871
IC
30737defineCurve('p384', {
30738 type: 'short',
30739 prime: null,
30740 p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
30741 'fffffffe ffffffff 00000000 00000000 ffffffff',
30742 a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
30743 'fffffffe ffffffff 00000000 00000000 fffffffc',
30744 b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' +
30745 '5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef',
30746 n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' +
30747 'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973',
30748 hash: hash.sha384,
30749 gRed: false,
30750 g: [
30751 'aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 ' +
30752 '5502f25d bf55296c 3a545e38 72760ab7',
30753 '3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 ' +
30754 '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f'
30755 ]
30756});
ebd8d4e8 30757
8b095871
IC
30758defineCurve('p521', {
30759 type: 'short',
30760 prime: null,
30761 p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
30762 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
30763 'ffffffff ffffffff ffffffff ffffffff ffffffff',
30764 a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
30765 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
30766 'ffffffff ffffffff ffffffff ffffffff fffffffc',
30767 b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' +
30768 '99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' +
30769 '3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00',
30770 n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
30771 'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' +
30772 'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409',
30773 hash: hash.sha512,
30774 gRed: false,
30775 g: [
30776 '000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 ' +
30777 '053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 ' +
30778 'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66',
30779 '00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 ' +
30780 '579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 ' +
30781 '3fad0761 353c7086 a272c240 88be9476 9fd16650'
30782 ]
30783});
ebd8d4e8 30784
8b095871
IC
30785defineCurve('curve25519', {
30786 type: 'mont',
30787 prime: 'p25519',
30788 p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',
30789 a: '76d06',
30790 b: '1',
30791 n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',
30792 hash: hash.sha256,
30793 gRed: false,
30794 g: [
30795 '9'
30796 ]
30797});
ebd8d4e8 30798
8b095871
IC
30799defineCurve('ed25519', {
30800 type: 'edwards',
30801 prime: 'p25519',
30802 p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',
30803 a: '-1',
30804 c: '1',
30805 // -121665 * (121666^(-1)) (mod P)
30806 d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3',
30807 n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',
30808 hash: hash.sha256,
30809 gRed: false,
30810 g: [
30811 '216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a',
30812
30813 // 4/5
30814 '6666666666666666666666666666666666666666666666666666666666666658'
30815 ]
30816});
ebd8d4e8 30817
8b095871
IC
30818var pre;
30819try {
30820 pre = require('./precomputed/secp256k1');
30821} catch (e) {
30822 pre = undefined;
30823}
30824
30825defineCurve('secp256k1', {
30826 type: 'short',
30827 prime: 'k256',
30828 p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f',
30829 a: '0',
30830 b: '7',
30831 n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141',
30832 h: '1',
30833 hash: hash.sha256,
30834
30835 // Precomputed endomorphism
30836 beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee',
30837 lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72',
30838 basis: [
30839 {
30840 a: '3086d221a7d46bcde86c90e49284eb15',
30841 b: '-e4437ed6010e88286f547fa90abfe4c3'
30842 },
30843 {
30844 a: '114ca50f7a8e2f3f657c1108d9d44cfd8',
30845 b: '3086d221a7d46bcde86c90e49284eb15'
30846 }
30847 ],
ebd8d4e8 30848
8b095871
IC
30849 gRed: false,
30850 g: [
30851 '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798',
30852 '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8',
30853 pre
30854 ]
30855});
ebd8d4e8 30856
8b095871
IC
30857},{"../elliptic":39,"./precomputed/secp256k1":53,"hash.js":57}],46:[function(require,module,exports){
30858'use strict';
ebd8d4e8 30859
8b095871
IC
30860var BN = require('bn.js');
30861var elliptic = require('../../elliptic');
30862var utils = elliptic.utils;
30863var assert = utils.assert;
ebd8d4e8 30864
8b095871
IC
30865var KeyPair = require('./key');
30866var Signature = require('./signature');
ebd8d4e8 30867
8b095871
IC
30868function EC(options) {
30869 if (!(this instanceof EC))
30870 return new EC(options);
ebd8d4e8 30871
8b095871
IC
30872 // Shortcut `elliptic.ec(curve-name)`
30873 if (typeof options === 'string') {
30874 assert(elliptic.curves.hasOwnProperty(options), 'Unknown curve ' + options);
30875
30876 options = elliptic.curves[options];
ebd8d4e8
IC
30877 }
30878
8b095871
IC
30879 // Shortcut for `elliptic.ec(elliptic.curves.curveName)`
30880 if (options instanceof elliptic.curves.PresetCurve)
30881 options = { curve: options };
ebd8d4e8 30882
8b095871
IC
30883 this.curve = options.curve.curve;
30884 this.n = this.curve.n;
30885 this.nh = this.n.ushrn(1);
30886 this.g = this.curve.g;
ebd8d4e8 30887
8b095871
IC
30888 // Point on curve
30889 this.g = options.curve.g;
30890 this.g.precompute(options.curve.n.bitLength() + 1);
ebd8d4e8 30891
8b095871
IC
30892 // Hash for function for DRBG
30893 this.hash = options.hash || options.curve.hash;
ebd8d4e8 30894}
8b095871 30895module.exports = EC;
ebd8d4e8 30896
8b095871
IC
30897EC.prototype.keyPair = function keyPair(options) {
30898 return new KeyPair(this, options);
30899};
30900
30901EC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) {
30902 return KeyPair.fromPrivate(this, priv, enc);
30903};
30904
30905EC.prototype.keyFromPublic = function keyFromPublic(pub, enc) {
30906 return KeyPair.fromPublic(this, pub, enc);
30907};
30908
30909EC.prototype.genKeyPair = function genKeyPair(options) {
30910 if (!options)
30911 options = {};
30912
30913 // Instantiate Hmac_DRBG
30914 var drbg = new elliptic.hmacDRBG({
30915 hash: this.hash,
30916 pers: options.pers,
30917 entropy: options.entropy || elliptic.rand(this.hash.hmacStrength),
30918 nonce: this.n.toArray()
30919 });
ebd8d4e8 30920
8b095871
IC
30921 var bytes = this.n.byteLength();
30922 var ns2 = this.n.sub(new BN(2));
30923 do {
30924 var priv = new BN(drbg.generate(bytes));
30925 if (priv.cmp(ns2) > 0)
30926 continue;
ebd8d4e8 30927
8b095871
IC
30928 priv.iaddn(1);
30929 return this.keyFromPrivate(priv);
30930 } while (true);
30931};
ebd8d4e8 30932
8b095871
IC
30933EC.prototype._truncateToN = function truncateToN(msg, truncOnly) {
30934 var delta = msg.byteLength() * 8 - this.n.bitLength();
30935 if (delta > 0)
30936 msg = msg.ushrn(delta);
30937 if (!truncOnly && msg.cmp(this.n) >= 0)
30938 return msg.sub(this.n);
30939 else
30940 return msg;
30941};
ebd8d4e8 30942
8b095871
IC
30943EC.prototype.sign = function sign(msg, key, enc, options) {
30944 if (typeof enc === 'object') {
30945 options = enc;
30946 enc = null;
ebd8d4e8 30947 }
8b095871
IC
30948 if (!options)
30949 options = {};
ebd8d4e8 30950
8b095871
IC
30951 key = this.keyFromPrivate(key, enc);
30952 msg = this._truncateToN(new BN(msg, 16));
ebd8d4e8 30953
8b095871
IC
30954 // Zero-extend key to provide enough entropy
30955 var bytes = this.n.byteLength();
30956 var bkey = key.getPrivate().toArray('be', bytes);
ab78acc6 30957
8b095871
IC
30958 // Zero-extend nonce to have the same byte size as N
30959 var nonce = msg.toArray('be', bytes);
ab78acc6 30960
8b095871
IC
30961 // Instantiate Hmac_DRBG
30962 var drbg = new elliptic.hmacDRBG({
30963 hash: this.hash,
30964 entropy: bkey,
30965 nonce: nonce,
30966 pers: options.pers,
30967 persEnc: options.persEnc
30968 });
ab78acc6 30969
8b095871
IC
30970 // Number of bytes to generate
30971 var ns1 = this.n.sub(new BN(1));
ebd8d4e8 30972
8b095871
IC
30973 for (var iter = 0; true; iter++) {
30974 var k = options.k ?
30975 options.k(iter) :
30976 new BN(drbg.generate(this.n.byteLength()));
30977 k = this._truncateToN(k, true);
30978 if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0)
30979 continue;
ebd8d4e8 30980
8b095871
IC
30981 var kp = this.g.mul(k);
30982 if (kp.isInfinity())
30983 continue;
ebd8d4e8 30984
8b095871
IC
30985 var kpX = kp.getX();
30986 var r = kpX.umod(this.n);
30987 if (r.cmpn(0) === 0)
30988 continue;
ebd8d4e8 30989
8b095871
IC
30990 var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg));
30991 s = s.umod(this.n);
30992 if (s.cmpn(0) === 0)
30993 continue;
ebd8d4e8 30994
8b095871
IC
30995 var recoveryParam = (kp.getY().isOdd() ? 1 : 0) |
30996 (kpX.cmp(r) !== 0 ? 2 : 0);
ebd8d4e8 30997
8b095871
IC
30998 // Use complement of `s`, if it is > `n / 2`
30999 if (options.canonical && s.cmp(this.nh) > 0) {
31000 s = this.n.sub(s);
31001 recoveryParam ^= 1;
31002 }
ebd8d4e8 31003
8b095871
IC
31004 return new Signature({ r: r, s: s, recoveryParam: recoveryParam });
31005 }
31006};
ebd8d4e8 31007
8b095871
IC
31008EC.prototype.verify = function verify(msg, signature, key, enc) {
31009 msg = this._truncateToN(new BN(msg, 16));
31010 key = this.keyFromPublic(key, enc);
31011 signature = new Signature(signature, 'hex');
ebd8d4e8 31012
8b095871
IC
31013 // Perform primitive values validation
31014 var r = signature.r;
31015 var s = signature.s;
31016 if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0)
31017 return false;
31018 if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0)
31019 return false;
ebd8d4e8 31020
8b095871
IC
31021 // Validate signature
31022 var sinv = s.invm(this.n);
31023 var u1 = sinv.mul(msg).umod(this.n);
31024 var u2 = sinv.mul(r).umod(this.n);
ebd8d4e8 31025
8b095871
IC
31026 if (!this.curve._maxwellTrick) {
31027 var p = this.g.mulAdd(u1, key.getPublic(), u2);
31028 if (p.isInfinity())
31029 return false;
ebd8d4e8 31030
8b095871
IC
31031 return p.getX().umod(this.n).cmp(r) === 0;
31032 }
ab78acc6 31033
8b095871
IC
31034 // NOTE: Greg Maxwell's trick, inspired by:
31035 // https://git.io/vad3K
ebd8d4e8 31036
8b095871
IC
31037 var p = this.g.jmulAdd(u1, key.getPublic(), u2);
31038 if (p.isInfinity())
31039 return false;
ab78acc6 31040
8b095871
IC
31041 // Compare `p.x` of Jacobian point with `r`,
31042 // this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the
31043 // inverse of `p.z^2`
31044 return p.eqXToP(r);
31045};
ab78acc6 31046
8b095871
IC
31047EC.prototype.recoverPubKey = function(msg, signature, j, enc) {
31048 assert((3 & j) === j, 'The recovery param is more than two bits');
31049 signature = new Signature(signature, enc);
ab78acc6 31050
8b095871
IC
31051 var n = this.n;
31052 var e = new BN(msg);
31053 var r = signature.r;
31054 var s = signature.s;
ab78acc6 31055
8b095871
IC
31056 // A set LSB signifies that the y-coordinate is odd
31057 var isYOdd = j & 1;
31058 var isSecondKey = j >> 1;
31059 if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey)
31060 throw new Error('Unable to find sencond key candinate');
31061
31062 // 1.1. Let x = r + jn.
31063 if (isSecondKey)
31064 r = this.curve.pointFromX(r.add(this.curve.n), isYOdd);
31065 else
31066 r = this.curve.pointFromX(r, isYOdd);
ab78acc6 31067
8b095871
IC
31068 var rInv = signature.r.invm(n);
31069 var s1 = n.sub(e).mul(rInv).umod(n);
31070 var s2 = s.mul(rInv).umod(n);
ab78acc6 31071
8b095871
IC
31072 // 1.6.1 Compute Q = r^-1 (sR - eG)
31073 // Q = r^-1 (sR + -eG)
31074 return this.g.mulAdd(s1, r, s2);
31075};
ab78acc6 31076
8b095871
IC
31077EC.prototype.getKeyRecoveryParam = function(e, signature, Q, enc) {
31078 signature = new Signature(signature, enc);
31079 if (signature.recoveryParam !== null)
31080 return signature.recoveryParam;
ab78acc6 31081
8b095871
IC
31082 for (var i = 0; i < 4; i++) {
31083 var Qprime;
31084 try {
31085 Qprime = this.recoverPubKey(e, signature, i);
31086 } catch (e) {
31087 continue;
ab78acc6 31088 }
ab78acc6 31089
8b095871
IC
31090 if (Qprime.eq(Q))
31091 return i;
31092 }
31093 throw new Error('Unable to find valid recovery factor');
31094};
ebd8d4e8 31095
8b095871
IC
31096},{"../../elliptic":39,"./key":47,"./signature":48,"bn.js":33}],47:[function(require,module,exports){
31097'use strict';
ebd8d4e8 31098
8b095871
IC
31099var BN = require('bn.js');
31100var elliptic = require('../../elliptic');
31101var utils = elliptic.utils;
31102var assert = utils.assert;
ebd8d4e8 31103
8b095871
IC
31104function KeyPair(ec, options) {
31105 this.ec = ec;
31106 this.priv = null;
31107 this.pub = null;
ebd8d4e8 31108
8b095871
IC
31109 // KeyPair(ec, { priv: ..., pub: ... })
31110 if (options.priv)
31111 this._importPrivate(options.priv, options.privEnc);
31112 if (options.pub)
31113 this._importPublic(options.pub, options.pubEnc);
31114}
31115module.exports = KeyPair;
ebd8d4e8 31116
8b095871
IC
31117KeyPair.fromPublic = function fromPublic(ec, pub, enc) {
31118 if (pub instanceof KeyPair)
31119 return pub;
ebd8d4e8 31120
8b095871
IC
31121 return new KeyPair(ec, {
31122 pub: pub,
31123 pubEnc: enc
31124 });
31125};
ebd8d4e8 31126
8b095871
IC
31127KeyPair.fromPrivate = function fromPrivate(ec, priv, enc) {
31128 if (priv instanceof KeyPair)
31129 return priv;
ebd8d4e8 31130
8b095871
IC
31131 return new KeyPair(ec, {
31132 priv: priv,
31133 privEnc: enc
31134 });
31135};
ebd8d4e8 31136
8b095871
IC
31137KeyPair.prototype.validate = function validate() {
31138 var pub = this.getPublic();
ebd8d4e8 31139
8b095871
IC
31140 if (pub.isInfinity())
31141 return { result: false, reason: 'Invalid public key' };
31142 if (!pub.validate())
31143 return { result: false, reason: 'Public key is not a point' };
31144 if (!pub.mul(this.ec.curve.n).isInfinity())
31145 return { result: false, reason: 'Public key * N != O' };
ab78acc6 31146
8b095871
IC
31147 return { result: true, reason: null };
31148};
ebd8d4e8 31149
8b095871
IC
31150KeyPair.prototype.getPublic = function getPublic(compact, enc) {
31151 // compact is optional argument
31152 if (typeof compact === 'string') {
31153 enc = compact;
31154 compact = null;
ebd8d4e8
IC
31155 }
31156
8b095871
IC
31157 if (!this.pub)
31158 this.pub = this.ec.g.mul(this.priv);
ebd8d4e8 31159
8b095871
IC
31160 if (!enc)
31161 return this.pub;
ebd8d4e8 31162
8b095871
IC
31163 return this.pub.encode(enc, compact);
31164};
ebd8d4e8 31165
8b095871
IC
31166KeyPair.prototype.getPrivate = function getPrivate(enc) {
31167 if (enc === 'hex')
31168 return this.priv.toString(16, 2);
31169 else
31170 return this.priv;
31171};
ab78acc6 31172
8b095871
IC
31173KeyPair.prototype._importPrivate = function _importPrivate(key, enc) {
31174 this.priv = new BN(key, enc || 16);
ab78acc6 31175
8b095871
IC
31176 // Ensure that the priv won't be bigger than n, otherwise we may fail
31177 // in fixed multiplication method
31178 this.priv = this.priv.umod(this.ec.curve.n);
31179};
ab78acc6 31180
8b095871
IC
31181KeyPair.prototype._importPublic = function _importPublic(key, enc) {
31182 if (key.x || key.y) {
31183 // Montgomery points only have an `x` coordinate.
31184 // Weierstrass/Edwards points on the other hand have both `x` and
31185 // `y` coordinates.
31186 if (this.ec.curve.type === 'mont') {
31187 assert(key.x, 'Need x coordinate');
31188 } else if (this.ec.curve.type === 'short' ||
31189 this.ec.curve.type === 'edwards') {
31190 assert(key.x && key.y, 'Need both x and y coordinate');
31191 }
31192 this.pub = this.ec.curve.point(key.x, key.y);
31193 return;
31194 }
31195 this.pub = this.ec.curve.decodePoint(key, enc);
31196};
ebd8d4e8 31197
8b095871
IC
31198// ECDH
31199KeyPair.prototype.derive = function derive(pub) {
31200 return pub.mul(this.priv).getX();
31201};
ebd8d4e8 31202
8b095871
IC
31203// ECDSA
31204KeyPair.prototype.sign = function sign(msg, enc, options) {
31205 return this.ec.sign(msg, this, enc, options);
31206};
ebd8d4e8 31207
8b095871
IC
31208KeyPair.prototype.verify = function verify(msg, signature) {
31209 return this.ec.verify(msg, signature, this);
31210};
ebd8d4e8 31211
8b095871
IC
31212KeyPair.prototype.inspect = function inspect() {
31213 return '<Key priv: ' + (this.priv && this.priv.toString(16, 2)) +
31214 ' pub: ' + (this.pub && this.pub.inspect()) + ' >';
31215};
ebd8d4e8 31216
8b095871
IC
31217},{"../../elliptic":39,"bn.js":33}],48:[function(require,module,exports){
31218'use strict';
ebd8d4e8 31219
8b095871 31220var BN = require('bn.js');
ebd8d4e8 31221
8b095871
IC
31222var elliptic = require('../../elliptic');
31223var utils = elliptic.utils;
31224var assert = utils.assert;
ebd8d4e8 31225
8b095871
IC
31226function Signature(options, enc) {
31227 if (options instanceof Signature)
31228 return options;
ebd8d4e8 31229
8b095871
IC
31230 if (this._importDER(options, enc))
31231 return;
ebd8d4e8 31232
8b095871
IC
31233 assert(options.r && options.s, 'Signature without r or s');
31234 this.r = new BN(options.r, 16);
31235 this.s = new BN(options.s, 16);
31236 if (options.recoveryParam === undefined)
31237 this.recoveryParam = null;
31238 else
31239 this.recoveryParam = options.recoveryParam;
31240}
31241module.exports = Signature;
31242
31243function Position() {
31244 this.place = 0;
31245}
31246
31247function getLength(buf, p) {
31248 var initial = buf[p.place++];
31249 if (!(initial & 0x80)) {
31250 return initial;
31251 }
31252 var octetLen = initial & 0xf;
31253 var val = 0;
31254 for (var i = 0, off = p.place; i < octetLen; i++, off++) {
31255 val <<= 8;
31256 val |= buf[off];
31257 }
31258 p.place = off;
31259 return val;
31260}
31261
31262function rmPadding(buf) {
31263 var i = 0;
31264 var len = buf.length - 1;
31265 while (!buf[i] && !(buf[i + 1] & 0x80) && i < len) {
31266 i++;
31267 }
31268 if (i === 0) {
31269 return buf;
31270 }
31271 return buf.slice(i);
31272}
ebd8d4e8 31273
8b095871
IC
31274Signature.prototype._importDER = function _importDER(data, enc) {
31275 data = utils.toArray(data, enc);
31276 var p = new Position();
31277 if (data[p.place++] !== 0x30) {
31278 return false;
31279 }
31280 var len = getLength(data, p);
31281 if ((len + p.place) !== data.length) {
31282 return false;
31283 }
31284 if (data[p.place++] !== 0x02) {
31285 return false;
31286 }
31287 var rlen = getLength(data, p);
31288 var r = data.slice(p.place, rlen + p.place);
31289 p.place += rlen;
31290 if (data[p.place++] !== 0x02) {
31291 return false;
31292 }
31293 var slen = getLength(data, p);
31294 if (data.length !== slen + p.place) {
31295 return false;
31296 }
31297 var s = data.slice(p.place, slen + p.place);
31298 if (r[0] === 0 && (r[1] & 0x80)) {
31299 r = r.slice(1);
31300 }
31301 if (s[0] === 0 && (s[1] & 0x80)) {
31302 s = s.slice(1);
31303 }
ab78acc6 31304
8b095871
IC
31305 this.r = new BN(r);
31306 this.s = new BN(s);
31307 this.recoveryParam = null;
ebd8d4e8 31308
8b095871
IC
31309 return true;
31310};
ab78acc6 31311
8b095871
IC
31312function constructLength(arr, len) {
31313 if (len < 0x80) {
31314 arr.push(len);
31315 return;
31316 }
31317 var octets = 1 + (Math.log(len) / Math.LN2 >>> 3);
31318 arr.push(octets | 0x80);
31319 while (--octets) {
31320 arr.push((len >>> (octets << 3)) & 0xff);
31321 }
31322 arr.push(len);
31323}
31324
31325Signature.prototype.toDER = function toDER(enc) {
31326 var r = this.r.toArray();
31327 var s = this.s.toArray();
31328
31329 // Pad values
31330 if (r[0] & 0x80)
31331 r = [ 0 ].concat(r);
31332 // Pad values
31333 if (s[0] & 0x80)
31334 s = [ 0 ].concat(s);
31335
31336 r = rmPadding(r);
31337 s = rmPadding(s);
31338
31339 while (!s[0] && !(s[1] & 0x80)) {
31340 s = s.slice(1);
31341 }
31342 var arr = [ 0x02 ];
31343 constructLength(arr, r.length);
31344 arr = arr.concat(r);
31345 arr.push(0x02);
31346 constructLength(arr, s.length);
31347 var backHalf = arr.concat(s);
31348 var res = [ 0x30 ];
31349 constructLength(res, backHalf.length);
31350 res = res.concat(backHalf);
31351 return utils.encode(res, enc);
31352};
ab78acc6 31353
8b095871
IC
31354},{"../../elliptic":39,"bn.js":33}],49:[function(require,module,exports){
31355'use strict';
ebd8d4e8 31356
8b095871
IC
31357var hash = require('hash.js');
31358var elliptic = require('../../elliptic');
31359var utils = elliptic.utils;
31360var assert = utils.assert;
31361var parseBytes = utils.parseBytes;
31362var KeyPair = require('./key');
31363var Signature = require('./signature');
ab78acc6 31364
8b095871
IC
31365function EDDSA(curve) {
31366 assert(curve === 'ed25519', 'only tested with ed25519 so far');
ebd8d4e8 31367
8b095871
IC
31368 if (!(this instanceof EDDSA))
31369 return new EDDSA(curve);
ab78acc6 31370
8b095871
IC
31371 var curve = elliptic.curves[curve].curve;
31372 this.curve = curve;
31373 this.g = curve.g;
31374 this.g.precompute(curve.n.bitLength() + 1);
ebd8d4e8 31375
8b095871
IC
31376 this.pointClass = curve.point().constructor;
31377 this.encodingLength = Math.ceil(curve.n.bitLength() / 8);
31378 this.hash = hash.sha512;
31379}
ebd8d4e8 31380
8b095871 31381module.exports = EDDSA;
ebd8d4e8 31382
8b095871
IC
31383/**
31384* @param {Array|String} message - message bytes
31385* @param {Array|String|KeyPair} secret - secret bytes or a keypair
31386* @returns {Signature} - signature
31387*/
31388EDDSA.prototype.sign = function sign(message, secret) {
31389 message = parseBytes(message);
31390 var key = this.keyFromSecret(secret);
31391 var r = this.hashInt(key.messagePrefix(), message);
31392 var R = this.g.mul(r);
31393 var Rencoded = this.encodePoint(R);
31394 var s_ = this.hashInt(Rencoded, key.pubBytes(), message)
31395 .mul(key.priv());
31396 var S = r.add(s_).umod(this.curve.n);
31397 return this.makeSignature({ R: R, S: S, Rencoded: Rencoded });
31398};
ebd8d4e8 31399
8b095871
IC
31400/**
31401* @param {Array} message - message bytes
31402* @param {Array|String|Signature} sig - sig bytes
31403* @param {Array|String|Point|KeyPair} pub - public key
31404* @returns {Boolean} - true if public key matches sig of message
31405*/
31406EDDSA.prototype.verify = function verify(message, sig, pub) {
31407 message = parseBytes(message);
31408 sig = this.makeSignature(sig);
31409 var key = this.keyFromPublic(pub);
31410 var h = this.hashInt(sig.Rencoded(), key.pubBytes(), message);
31411 var SG = this.g.mul(sig.S());
31412 var RplusAh = sig.R().add(key.pub().mul(h));
31413 return RplusAh.eq(SG);
31414};
ebd8d4e8 31415
8b095871
IC
31416EDDSA.prototype.hashInt = function hashInt() {
31417 var hash = this.hash();
31418 for (var i = 0; i < arguments.length; i++)
31419 hash.update(arguments[i]);
31420 return utils.intFromLE(hash.digest()).umod(this.curve.n);
31421};
ebd8d4e8 31422
8b095871
IC
31423EDDSA.prototype.keyFromPublic = function keyFromPublic(pub) {
31424 return KeyPair.fromPublic(this, pub);
31425};
ebd8d4e8 31426
8b095871
IC
31427EDDSA.prototype.keyFromSecret = function keyFromSecret(secret) {
31428 return KeyPair.fromSecret(this, secret);
31429};
31430
31431EDDSA.prototype.makeSignature = function makeSignature(sig) {
31432 if (sig instanceof Signature)
31433 return sig;
31434 return new Signature(this, sig);
31435};
ebd8d4e8
IC
31436
31437/**
8b095871
IC
31438* * https://tools.ietf.org/html/draft-josefsson-eddsa-ed25519-03#section-5.2
31439*
31440* EDDSA defines methods for encoding and decoding points and integers. These are
31441* helper convenience methods, that pass along to utility functions implied
31442* parameters.
31443*
31444*/
31445EDDSA.prototype.encodePoint = function encodePoint(point) {
31446 var enc = point.getY().toArray('le', this.encodingLength);
31447 enc[this.encodingLength - 1] |= point.getX().isOdd() ? 0x80 : 0;
31448 return enc;
31449};
ebd8d4e8 31450
8b095871
IC
31451EDDSA.prototype.decodePoint = function decodePoint(bytes) {
31452 bytes = utils.parseBytes(bytes);
ebd8d4e8 31453
8b095871
IC
31454 var lastIx = bytes.length - 1;
31455 var normed = bytes.slice(0, lastIx).concat(bytes[lastIx] & ~0x80);
31456 var xIsOdd = (bytes[lastIx] & 0x80) !== 0;
ebd8d4e8 31457
8b095871
IC
31458 var y = utils.intFromLE(normed);
31459 return this.curve.pointFromY(y, xIsOdd);
31460};
ebd8d4e8 31461
8b095871
IC
31462EDDSA.prototype.encodeInt = function encodeInt(num) {
31463 return num.toArray('le', this.encodingLength);
31464};
ebd8d4e8 31465
8b095871
IC
31466EDDSA.prototype.decodeInt = function decodeInt(bytes) {
31467 return utils.intFromLE(bytes);
31468};
ebd8d4e8 31469
8b095871
IC
31470EDDSA.prototype.isPoint = function isPoint(val) {
31471 return val instanceof this.pointClass;
31472};
ebd8d4e8 31473
8b095871
IC
31474},{"../../elliptic":39,"./key":50,"./signature":51,"hash.js":57}],50:[function(require,module,exports){
31475'use strict';
ebd8d4e8 31476
8b095871
IC
31477var elliptic = require('../../elliptic');
31478var utils = elliptic.utils;
31479var assert = utils.assert;
31480var parseBytes = utils.parseBytes;
31481var cachedProperty = utils.cachedProperty;
ebd8d4e8 31482
8b095871
IC
31483/**
31484* @param {EDDSA} eddsa - instance
31485* @param {Object} params - public/private key parameters
31486*
31487* @param {Array<Byte>} [params.secret] - secret seed bytes
31488* @param {Point} [params.pub] - public key point (aka `A` in eddsa terms)
31489* @param {Array<Byte>} [params.pub] - public key point encoded as bytes
31490*
31491*/
31492function KeyPair(eddsa, params) {
31493 this.eddsa = eddsa;
31494 this._secret = parseBytes(params.secret);
31495 if (eddsa.isPoint(params.pub))
31496 this._pub = params.pub;
31497 else
31498 this._pubBytes = parseBytes(params.pub);
ebd8d4e8
IC
31499}
31500
8b095871
IC
31501KeyPair.fromPublic = function fromPublic(eddsa, pub) {
31502 if (pub instanceof KeyPair)
31503 return pub;
31504 return new KeyPair(eddsa, { pub: pub });
31505};
ebd8d4e8 31506
8b095871
IC
31507KeyPair.fromSecret = function fromSecret(eddsa, secret) {
31508 if (secret instanceof KeyPair)
31509 return secret;
31510 return new KeyPair(eddsa, { secret: secret });
31511};
ebd8d4e8 31512
8b095871
IC
31513KeyPair.prototype.secret = function secret() {
31514 return this._secret;
31515};
ebd8d4e8 31516
8b095871
IC
31517cachedProperty(KeyPair, 'pubBytes', function pubBytes() {
31518 return this.eddsa.encodePoint(this.pub());
31519});
ebd8d4e8 31520
8b095871
IC
31521cachedProperty(KeyPair, 'pub', function pub() {
31522 if (this._pubBytes)
31523 return this.eddsa.decodePoint(this._pubBytes);
31524 return this.eddsa.g.mul(this.priv());
31525});
ebd8d4e8 31526
8b095871
IC
31527cachedProperty(KeyPair, 'privBytes', function privBytes() {
31528 var eddsa = this.eddsa;
31529 var hash = this.hash();
31530 var lastIx = eddsa.encodingLength - 1;
ebd8d4e8 31531
8b095871
IC
31532 var a = hash.slice(0, eddsa.encodingLength);
31533 a[0] &= 248;
31534 a[lastIx] &= 127;
31535 a[lastIx] |= 64;
ebd8d4e8 31536
8b095871
IC
31537 return a;
31538});
ebd8d4e8 31539
8b095871
IC
31540cachedProperty(KeyPair, 'priv', function priv() {
31541 return this.eddsa.decodeInt(this.privBytes());
31542});
ebd8d4e8 31543
8b095871
IC
31544cachedProperty(KeyPair, 'hash', function hash() {
31545 return this.eddsa.hash().update(this.secret()).digest();
31546});
ebd8d4e8 31547
8b095871
IC
31548cachedProperty(KeyPair, 'messagePrefix', function messagePrefix() {
31549 return this.hash().slice(this.eddsa.encodingLength);
31550});
ebd8d4e8 31551
8b095871
IC
31552KeyPair.prototype.sign = function sign(message) {
31553 assert(this._secret, 'KeyPair can only verify');
31554 return this.eddsa.sign(message, this);
31555};
ebd8d4e8 31556
8b095871
IC
31557KeyPair.prototype.verify = function verify(message, sig) {
31558 return this.eddsa.verify(message, sig, this);
31559};
ebd8d4e8 31560
8b095871
IC
31561KeyPair.prototype.getSecret = function getSecret(enc) {
31562 assert(this._secret, 'KeyPair is public only');
31563 return utils.encode(this.secret(), enc);
31564};
ebd8d4e8 31565
8b095871
IC
31566KeyPair.prototype.getPublic = function getPublic(enc) {
31567 return utils.encode(this.pubBytes(), enc);
31568};
ebd8d4e8 31569
8b095871 31570module.exports = KeyPair;
ebd8d4e8 31571
8b095871
IC
31572},{"../../elliptic":39}],51:[function(require,module,exports){
31573'use strict';
ebd8d4e8 31574
8b095871
IC
31575var BN = require('bn.js');
31576var elliptic = require('../../elliptic');
31577var utils = elliptic.utils;
31578var assert = utils.assert;
31579var cachedProperty = utils.cachedProperty;
31580var parseBytes = utils.parseBytes;
ebd8d4e8 31581
8b095871
IC
31582/**
31583* @param {EDDSA} eddsa - eddsa instance
31584* @param {Array<Bytes>|Object} sig -
31585* @param {Array<Bytes>|Point} [sig.R] - R point as Point or bytes
31586* @param {Array<Bytes>|bn} [sig.S] - S scalar as bn or bytes
31587* @param {Array<Bytes>} [sig.Rencoded] - R point encoded
31588* @param {Array<Bytes>} [sig.Sencoded] - S scalar encoded
31589*/
31590function Signature(eddsa, sig) {
31591 this.eddsa = eddsa;
ebd8d4e8 31592
8b095871
IC
31593 if (typeof sig !== 'object')
31594 sig = parseBytes(sig);
ebd8d4e8 31595
8b095871
IC
31596 if (Array.isArray(sig)) {
31597 sig = {
31598 R: sig.slice(0, eddsa.encodingLength),
31599 S: sig.slice(eddsa.encodingLength)
31600 };
ab78acc6 31601 }
ebd8d4e8 31602
8b095871 31603 assert(sig.R && sig.S, 'Signature without R or S');
ebd8d4e8 31604
8b095871
IC
31605 if (eddsa.isPoint(sig.R))
31606 this._R = sig.R;
31607 if (sig.S instanceof BN)
31608 this._S = sig.S;
31609
31610 this._Rencoded = Array.isArray(sig.R) ? sig.R : sig.Rencoded;
31611 this._Sencoded = Array.isArray(sig.S) ? sig.S : sig.Sencoded;
ebd8d4e8
IC
31612}
31613
8b095871
IC
31614cachedProperty(Signature, 'S', function S() {
31615 return this.eddsa.decodeInt(this.Sencoded());
31616});
ab78acc6 31617
8b095871
IC
31618cachedProperty(Signature, 'R', function R() {
31619 return this.eddsa.decodePoint(this.Rencoded());
31620});
ebd8d4e8 31621
8b095871
IC
31622cachedProperty(Signature, 'Rencoded', function Rencoded() {
31623 return this.eddsa.encodePoint(this.R());
31624});
ebd8d4e8 31625
8b095871
IC
31626cachedProperty(Signature, 'Sencoded', function Sencoded() {
31627 return this.eddsa.encodeInt(this.S());
31628});
ebd8d4e8 31629
8b095871
IC
31630Signature.prototype.toBytes = function toBytes() {
31631 return this.Rencoded().concat(this.Sencoded());
31632};
ebd8d4e8 31633
8b095871
IC
31634Signature.prototype.toHex = function toHex() {
31635 return utils.encode(this.toBytes(), 'hex').toUpperCase();
31636};
ebd8d4e8 31637
8b095871 31638module.exports = Signature;
ebd8d4e8 31639
8b095871
IC
31640},{"../../elliptic":39,"bn.js":33}],52:[function(require,module,exports){
31641'use strict';
ebd8d4e8 31642
8b095871
IC
31643var hash = require('hash.js');
31644var elliptic = require('../elliptic');
31645var utils = elliptic.utils;
31646var assert = utils.assert;
ebd8d4e8 31647
8b095871
IC
31648function HmacDRBG(options) {
31649 if (!(this instanceof HmacDRBG))
31650 return new HmacDRBG(options);
31651 this.hash = options.hash;
31652 this.predResist = !!options.predResist;
ab78acc6 31653
8b095871
IC
31654 this.outLen = this.hash.outSize;
31655 this.minEntropy = options.minEntropy || this.hash.hmacStrength;
ab78acc6 31656
8b095871
IC
31657 this.reseed = null;
31658 this.reseedInterval = null;
31659 this.K = null;
31660 this.V = null;
ebd8d4e8 31661
8b095871
IC
31662 var entropy = utils.toArray(options.entropy, options.entropyEnc);
31663 var nonce = utils.toArray(options.nonce, options.nonceEnc);
31664 var pers = utils.toArray(options.pers, options.persEnc);
31665 assert(entropy.length >= (this.minEntropy / 8),
31666 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');
31667 this._init(entropy, nonce, pers);
ebd8d4e8 31668}
8b095871 31669module.exports = HmacDRBG;
ebd8d4e8 31670
8b095871
IC
31671HmacDRBG.prototype._init = function init(entropy, nonce, pers) {
31672 var seed = entropy.concat(nonce).concat(pers);
ebd8d4e8 31673
8b095871
IC
31674 this.K = new Array(this.outLen / 8);
31675 this.V = new Array(this.outLen / 8);
31676 for (var i = 0; i < this.V.length; i++) {
31677 this.K[i] = 0x00;
31678 this.V[i] = 0x01;
31679 }
ebd8d4e8 31680
8b095871
IC
31681 this._update(seed);
31682 this.reseed = 1;
31683 this.reseedInterval = 0x1000000000000; // 2^48
31684};
ebd8d4e8 31685
8b095871
IC
31686HmacDRBG.prototype._hmac = function hmac() {
31687 return new hash.hmac(this.hash, this.K);
31688};
ebd8d4e8 31689
8b095871
IC
31690HmacDRBG.prototype._update = function update(seed) {
31691 var kmac = this._hmac()
31692 .update(this.V)
31693 .update([ 0x00 ]);
31694 if (seed)
31695 kmac = kmac.update(seed);
31696 this.K = kmac.digest();
31697 this.V = this._hmac().update(this.V).digest();
31698 if (!seed)
31699 return;
31700
31701 this.K = this._hmac()
31702 .update(this.V)
31703 .update([ 0x01 ])
31704 .update(seed)
31705 .digest();
31706 this.V = this._hmac().update(this.V).digest();
31707};
31708
31709HmacDRBG.prototype.reseed = function reseed(entropy, entropyEnc, add, addEnc) {
31710 // Optional entropy enc
31711 if (typeof entropyEnc !== 'string') {
31712 addEnc = add;
31713 add = entropyEnc;
31714 entropyEnc = null;
ebd8d4e8 31715 }
ebd8d4e8 31716
8b095871
IC
31717 entropy = utils.toBuffer(entropy, entropyEnc);
31718 add = utils.toBuffer(add, addEnc);
ebd8d4e8 31719
8b095871
IC
31720 assert(entropy.length >= (this.minEntropy / 8),
31721 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');
ebd8d4e8 31722
8b095871
IC
31723 this._update(entropy.concat(add || []));
31724 this.reseed = 1;
31725};
ebd8d4e8 31726
8b095871
IC
31727HmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) {
31728 if (this.reseed > this.reseedInterval)
31729 throw new Error('Reseed is required');
ebd8d4e8 31730
8b095871
IC
31731 // Optional encoding
31732 if (typeof enc !== 'string') {
31733 addEnc = add;
31734 add = enc;
31735 enc = null;
31736 }
ebd8d4e8 31737
8b095871
IC
31738 // Optional additional data
31739 if (add) {
31740 add = utils.toArray(add, addEnc);
31741 this._update(add);
ebd8d4e8
IC
31742 }
31743
8b095871
IC
31744 var temp = [];
31745 while (temp.length < len) {
31746 this.V = this._hmac().update(this.V).digest();
31747 temp = temp.concat(this.V);
ebd8d4e8
IC
31748 }
31749
8b095871
IC
31750 var res = temp.slice(0, len);
31751 this._update(add);
31752 this.reseed++;
31753 return utils.encode(res, enc);
31754};
ebd8d4e8 31755
8b095871
IC
31756},{"../elliptic":39,"hash.js":57}],53:[function(require,module,exports){
31757module.exports = {
31758 doubles: {
31759 step: 4,
31760 points: [
31761 [
31762 'e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a',
31763 'f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821'
31764 ],
31765 [
31766 '8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508',
31767 '11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf'
31768 ],
31769 [
31770 '175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739',
31771 'd3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695'
31772 ],
31773 [
31774 '363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640',
31775 '4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9'
31776 ],
31777 [
31778 '8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c',
31779 '4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36'
31780 ],
31781 [
31782 '723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda',
31783 '96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f'
31784 ],
31785 [
31786 'eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa',
31787 '5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999'
31788 ],
31789 [
31790 '100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0',
31791 'cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09'
31792 ],
31793 [
31794 'e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d',
31795 '9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d'
31796 ],
31797 [
31798 'feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d',
31799 'e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088'
31800 ],
31801 [
31802 'da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1',
31803 '9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d'
31804 ],
31805 [
31806 '53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0',
31807 '5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8'
31808 ],
31809 [
31810 '8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047',
31811 '10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a'
31812 ],
31813 [
31814 '385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862',
31815 '283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453'
31816 ],
31817 [
31818 '6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7',
31819 '7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160'
31820 ],
31821 [
31822 '3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd',
31823 '56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0'
31824 ],
31825 [
31826 '85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83',
31827 '7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6'
31828 ],
31829 [
31830 '948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a',
31831 '53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589'
31832 ],
31833 [
31834 '6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8',
31835 'bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17'
31836 ],
31837 [
31838 'e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d',
31839 '4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda'
31840 ],
31841 [
31842 'e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725',
31843 '7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd'
31844 ],
31845 [
31846 '213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754',
31847 '4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2'
31848 ],
31849 [
31850 '4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c',
31851 '17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6'
31852 ],
31853 [
31854 'fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6',
31855 '6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f'
31856 ],
31857 [
31858 '76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39',
31859 'c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01'
31860 ],
31861 [
31862 'c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891',
31863 '893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3'
31864 ],
31865 [
31866 'd895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b',
31867 'febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f'
31868 ],
31869 [
31870 'b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03',
31871 '2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7'
31872 ],
31873 [
31874 'e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d',
31875 'eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78'
31876 ],
31877 [
31878 'a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070',
31879 '7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1'
31880 ],
31881 [
31882 '90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4',
31883 'e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150'
31884 ],
31885 [
31886 '8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da',
31887 '662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82'
31888 ],
31889 [
31890 'e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11',
31891 '1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc'
31892 ],
31893 [
31894 '8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e',
31895 'efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b'
31896 ],
31897 [
31898 'e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41',
31899 '2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51'
31900 ],
31901 [
31902 'b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef',
31903 '67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45'
31904 ],
31905 [
31906 'd68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8',
31907 'db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120'
31908 ],
31909 [
31910 '324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d',
31911 '648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84'
31912 ],
31913 [
31914 '4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96',
31915 '35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d'
31916 ],
31917 [
31918 '9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd',
31919 'ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d'
31920 ],
31921 [
31922 '6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5',
31923 '9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8'
31924 ],
31925 [
31926 'a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266',
31927 '40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8'
31928 ],
31929 [
31930 '7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71',
31931 '34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac'
31932 ],
31933 [
31934 '928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac',
31935 'c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f'
31936 ],
31937 [
31938 '85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751',
31939 '1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962'
31940 ],
31941 [
31942 'ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e',
31943 '493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907'
31944 ],
31945 [
31946 '827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241',
31947 'c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec'
31948 ],
31949 [
31950 'eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3',
31951 'be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d'
31952 ],
31953 [
31954 'e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f',
31955 '4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414'
31956 ],
31957 [
31958 '1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19',
31959 'aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd'
31960 ],
31961 [
31962 '146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be',
31963 'b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0'
31964 ],
31965 [
31966 'fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9',
31967 '6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811'
31968 ],
31969 [
31970 'da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2',
31971 '8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1'
31972 ],
31973 [
31974 'a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13',
31975 '7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c'
31976 ],
31977 [
31978 '174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c',
31979 'ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73'
31980 ],
31981 [
31982 '959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba',
31983 '2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd'
31984 ],
31985 [
31986 'd2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151',
31987 'e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405'
31988 ],
31989 [
31990 '64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073',
31991 'd99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589'
31992 ],
31993 [
31994 '8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458',
31995 '38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e'
31996 ],
31997 [
31998 '13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b',
31999 '69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27'
32000 ],
32001 [
32002 'bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366',
32003 'd3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1'
32004 ],
32005 [
32006 '8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa',
32007 '40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482'
32008 ],
32009 [
32010 '8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0',
32011 '620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945'
32012 ],
32013 [
32014 'dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787',
32015 '7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573'
32016 ],
32017 [
32018 'f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e',
32019 'ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82'
32020 ]
32021 ]
32022 },
32023 naf: {
32024 wnd: 7,
32025 points: [
32026 [
32027 'f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9',
32028 '388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672'
32029 ],
32030 [
32031 '2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4',
32032 'd8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6'
32033 ],
32034 [
32035 '5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc',
32036 '6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da'
32037 ],
32038 [
32039 'acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe',
32040 'cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37'
32041 ],
32042 [
32043 '774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb',
32044 'd984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b'
32045 ],
32046 [
32047 'f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8',
32048 'ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81'
32049 ],
32050 [
32051 'd7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e',
32052 '581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58'
32053 ],
32054 [
32055 'defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34',
32056 '4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77'
32057 ],
32058 [
32059 '2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c',
32060 '85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a'
32061 ],
32062 [
32063 '352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5',
32064 '321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c'
32065 ],
32066 [
32067 '2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f',
32068 '2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67'
32069 ],
32070 [
32071 '9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714',
32072 '73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402'
32073 ],
32074 [
32075 'daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729',
32076 'a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55'
32077 ],
32078 [
32079 'c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db',
32080 '2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482'
32081 ],
32082 [
32083 '6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4',
32084 'e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82'
32085 ],
32086 [
32087 '1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5',
32088 'b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396'
32089 ],
32090 [
32091 '605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479',
32092 '2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49'
32093 ],
32094 [
32095 '62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d',
32096 '80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf'
32097 ],
32098 [
32099 '80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f',
32100 '1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a'
32101 ],
32102 [
32103 '7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb',
32104 'd0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7'
32105 ],
32106 [
32107 'd528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9',
32108 'eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933'
32109 ],
32110 [
32111 '49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963',
32112 '758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a'
32113 ],
32114 [
32115 '77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74',
32116 '958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6'
32117 ],
32118 [
32119 'f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530',
32120 'e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37'
32121 ],
32122 [
32123 '463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b',
32124 '5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e'
32125 ],
32126 [
32127 'f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247',
32128 'cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6'
32129 ],
32130 [
32131 'caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1',
32132 'cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476'
32133 ],
32134 [
32135 '2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120',
32136 '4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40'
32137 ],
32138 [
32139 '7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435',
32140 '91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61'
32141 ],
32142 [
32143 '754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18',
32144 '673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683'
32145 ],
32146 [
32147 'e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8',
32148 '59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5'
32149 ],
32150 [
32151 '186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb',
32152 '3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b'
32153 ],
32154 [
32155 'df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f',
32156 '55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417'
32157 ],
32158 [
32159 '5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143',
32160 'efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868'
32161 ],
32162 [
32163 '290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba',
32164 'e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a'
32165 ],
32166 [
32167 'af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45',
32168 'f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6'
32169 ],
32170 [
32171 '766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a',
32172 '744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996'
32173 ],
32174 [
32175 '59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e',
32176 'c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e'
32177 ],
32178 [
32179 'f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8',
32180 'e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d'
32181 ],
32182 [
32183 '7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c',
32184 '30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2'
32185 ],
32186 [
32187 '948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519',
32188 'e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e'
32189 ],
32190 [
32191 '7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab',
32192 '100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437'
32193 ],
32194 [
32195 '3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca',
32196 'ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311'
32197 ],
32198 [
32199 'd3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf',
32200 '8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4'
32201 ],
32202 [
32203 '1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610',
32204 '68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575'
32205 ],
32206 [
32207 '733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4',
32208 'f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d'
32209 ],
32210 [
32211 '15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c',
32212 'd56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d'
32213 ],
32214 [
32215 'a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940',
32216 'edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629'
32217 ],
32218 [
32219 'e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980',
32220 'a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06'
32221 ],
32222 [
32223 '311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3',
32224 '66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374'
32225 ],
32226 [
32227 '34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf',
32228 '9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee'
32229 ],
32230 [
32231 'f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63',
32232 '4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1'
32233 ],
32234 [
32235 'd7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448',
32236 'fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b'
32237 ],
32238 [
32239 '32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf',
32240 '5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661'
32241 ],
32242 [
32243 '7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5',
32244 '8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6'
32245 ],
32246 [
32247 'ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6',
32248 '8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e'
32249 ],
32250 [
32251 '16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5',
32252 '5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d'
32253 ],
32254 [
32255 'eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99',
32256 'f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc'
32257 ],
32258 [
32259 '78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51',
32260 'f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4'
32261 ],
32262 [
32263 '494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5',
32264 '42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c'
32265 ],
32266 [
32267 'a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5',
32268 '204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b'
32269 ],
32270 [
32271 'c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997',
32272 '4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913'
32273 ],
32274 [
32275 '841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881',
32276 '73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154'
32277 ],
32278 [
32279 '5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5',
32280 '39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865'
32281 ],
32282 [
32283 '36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66',
32284 'd2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc'
32285 ],
32286 [
32287 '336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726',
32288 'ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224'
32289 ],
32290 [
32291 '8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede',
32292 '6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e'
32293 ],
32294 [
32295 '1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94',
32296 '60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6'
32297 ],
32298 [
32299 '85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31',
32300 '3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511'
32301 ],
32302 [
32303 '29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51',
32304 'b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b'
32305 ],
32306 [
32307 'a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252',
32308 'ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2'
32309 ],
32310 [
32311 '4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5',
32312 'cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c'
32313 ],
32314 [
32315 'd24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b',
32316 '6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3'
32317 ],
32318 [
32319 'ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4',
32320 '322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d'
32321 ],
32322 [
32323 'af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f',
32324 '6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700'
32325 ],
32326 [
32327 'e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889',
32328 '2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4'
32329 ],
32330 [
32331 '591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246',
32332 'b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196'
32333 ],
32334 [
32335 '11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984',
32336 '998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4'
32337 ],
32338 [
32339 '3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a',
32340 'b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257'
32341 ],
32342 [
32343 'cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030',
32344 'bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13'
32345 ],
32346 [
32347 'c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197',
32348 '6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096'
32349 ],
32350 [
32351 'c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593',
32352 'c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38'
32353 ],
32354 [
32355 'a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef',
32356 '21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f'
32357 ],
32358 [
32359 '347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38',
32360 '60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448'
32361 ],
32362 [
32363 'da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a',
32364 '49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a'
32365 ],
32366 [
32367 'c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111',
32368 '5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4'
32369 ],
32370 [
32371 '4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502',
32372 '7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437'
32373 ],
32374 [
32375 '3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea',
32376 'be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7'
32377 ],
32378 [
32379 'cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26',
32380 '8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d'
32381 ],
32382 [
32383 'b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986',
32384 '39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a'
32385 ],
32386 [
32387 'd4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e',
32388 '62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54'
32389 ],
32390 [
32391 '48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4',
32392 '25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77'
32393 ],
32394 [
32395 'dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda',
32396 'ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517'
32397 ],
32398 [
32399 '6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859',
32400 'cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10'
32401 ],
32402 [
32403 'e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f',
32404 'f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125'
32405 ],
32406 [
32407 'eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c',
32408 '6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e'
32409 ],
32410 [
32411 '13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942',
32412 'fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1'
32413 ],
32414 [
32415 'ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a',
32416 '1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2'
32417 ],
32418 [
32419 'b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80',
32420 '5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423'
32421 ],
32422 [
32423 'ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d',
32424 '438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8'
32425 ],
32426 [
32427 '8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1',
32428 'cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758'
32429 ],
32430 [
32431 '52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63',
32432 'c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375'
32433 ],
32434 [
32435 'e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352',
32436 '6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d'
32437 ],
32438 [
32439 '7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193',
32440 'ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec'
32441 ],
32442 [
32443 '5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00',
32444 '9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0'
32445 ],
32446 [
32447 '32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58',
32448 'ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c'
32449 ],
32450 [
32451 'e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7',
32452 'd3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4'
32453 ],
32454 [
32455 '8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8',
32456 'c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f'
32457 ],
32458 [
32459 '4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e',
32460 '67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649'
32461 ],
32462 [
32463 '3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d',
32464 'cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826'
32465 ],
32466 [
32467 '674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b',
32468 '299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5'
32469 ],
32470 [
32471 'd32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f',
32472 'f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87'
32473 ],
32474 [
32475 '30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6',
32476 '462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b'
32477 ],
32478 [
32479 'be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297',
32480 '62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc'
32481 ],
32482 [
32483 '93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a',
32484 '7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c'
32485 ],
32486 [
32487 'b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c',
32488 'ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f'
32489 ],
32490 [
32491 'd5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52',
32492 '4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a'
32493 ],
32494 [
32495 'd3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb',
32496 'bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46'
32497 ],
32498 [
32499 '463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065',
32500 'bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f'
32501 ],
32502 [
32503 '7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917',
32504 '603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03'
32505 ],
32506 [
32507 '74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9',
32508 'cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08'
32509 ],
32510 [
32511 '30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3',
32512 '553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8'
32513 ],
32514 [
32515 '9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57',
32516 '712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373'
32517 ],
32518 [
32519 '176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66',
32520 'ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3'
32521 ],
32522 [
32523 '75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8',
32524 '9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8'
32525 ],
32526 [
32527 '809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721',
32528 '9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1'
32529 ],
32530 [
32531 '1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180',
32532 '4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9'
32533 ]
32534 ]
32535 }
32536};
ebd8d4e8 32537
8b095871
IC
32538},{}],54:[function(require,module,exports){
32539'use strict';
ebd8d4e8 32540
8b095871
IC
32541var utils = exports;
32542var BN = require('bn.js');
ebd8d4e8 32543
8b095871
IC
32544utils.assert = function assert(val, msg) {
32545 if (!val)
32546 throw new Error(msg || 'Assertion failed');
32547};
ebd8d4e8 32548
8b095871
IC
32549function toArray(msg, enc) {
32550 if (Array.isArray(msg))
32551 return msg.slice();
32552 if (!msg)
32553 return [];
32554 var res = [];
32555 if (typeof msg !== 'string') {
32556 for (var i = 0; i < msg.length; i++)
32557 res[i] = msg[i] | 0;
32558 return res;
32559 }
32560 if (!enc) {
32561 for (var i = 0; i < msg.length; i++) {
32562 var c = msg.charCodeAt(i);
32563 var hi = c >> 8;
32564 var lo = c & 0xff;
32565 if (hi)
32566 res.push(hi, lo);
32567 else
32568 res.push(lo);
32569 }
32570 } else if (enc === 'hex') {
32571 msg = msg.replace(/[^a-z0-9]+/ig, '');
32572 if (msg.length % 2 !== 0)
32573 msg = '0' + msg;
32574 for (var i = 0; i < msg.length; i += 2)
32575 res.push(parseInt(msg[i] + msg[i + 1], 16));
ebd8d4e8 32576 }
8b095871 32577 return res;
ebd8d4e8 32578}
8b095871 32579utils.toArray = toArray;
ebd8d4e8 32580
8b095871
IC
32581function zero2(word) {
32582 if (word.length === 1)
32583 return '0' + word;
32584 else
32585 return word;
32586}
32587utils.zero2 = zero2;
ab78acc6 32588
8b095871
IC
32589function toHex(msg) {
32590 var res = '';
32591 for (var i = 0; i < msg.length; i++)
32592 res += zero2(msg[i].toString(16));
32593 return res;
32594}
32595utils.toHex = toHex;
ebd8d4e8 32596
8b095871
IC
32597utils.encode = function encode(arr, enc) {
32598 if (enc === 'hex')
32599 return toHex(arr);
32600 else
32601 return arr;
32602};
ebd8d4e8 32603
8b095871
IC
32604// Represent num in a w-NAF form
32605function getNAF(num, w) {
32606 var naf = [];
32607 var ws = 1 << (w + 1);
32608 var k = num.clone();
32609 while (k.cmpn(1) >= 0) {
32610 var z;
32611 if (k.isOdd()) {
32612 var mod = k.andln(ws - 1);
32613 if (mod > (ws >> 1) - 1)
32614 z = (ws >> 1) - mod;
32615 else
32616 z = mod;
32617 k.isubn(z);
32618 } else {
32619 z = 0;
32620 }
32621 naf.push(z);
32622
32623 // Optimization, shift by word if possible
32624 var shift = (k.cmpn(0) !== 0 && k.andln(ws - 1) === 0) ? (w + 1) : 1;
32625 for (var i = 1; i < shift; i++)
32626 naf.push(0);
32627 k.iushrn(shift);
32628 }
32629
32630 return naf;
32631}
32632utils.getNAF = getNAF;
32633
32634// Represent k1, k2 in a Joint Sparse Form
32635function getJSF(k1, k2) {
32636 var jsf = [
32637 [],
32638 []
32639 ];
32640
32641 k1 = k1.clone();
32642 k2 = k2.clone();
32643 var d1 = 0;
32644 var d2 = 0;
32645 while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) {
32646
32647 // First phase
32648 var m14 = (k1.andln(3) + d1) & 3;
32649 var m24 = (k2.andln(3) + d2) & 3;
32650 if (m14 === 3)
32651 m14 = -1;
32652 if (m24 === 3)
32653 m24 = -1;
32654 var u1;
32655 if ((m14 & 1) === 0) {
32656 u1 = 0;
32657 } else {
32658 var m8 = (k1.andln(7) + d1) & 7;
32659 if ((m8 === 3 || m8 === 5) && m24 === 2)
32660 u1 = -m14;
32661 else
32662 u1 = m14;
32663 }
32664 jsf[0].push(u1);
ebd8d4e8 32665
8b095871
IC
32666 var u2;
32667 if ((m24 & 1) === 0) {
32668 u2 = 0;
32669 } else {
32670 var m8 = (k2.andln(7) + d2) & 7;
32671 if ((m8 === 3 || m8 === 5) && m14 === 2)
32672 u2 = -m24;
32673 else
32674 u2 = m24;
32675 }
32676 jsf[1].push(u2);
ebd8d4e8 32677
8b095871
IC
32678 // Second phase
32679 if (2 * d1 === u1 + 1)
32680 d1 = 1 - d1;
32681 if (2 * d2 === u2 + 1)
32682 d2 = 1 - d2;
32683 k1.iushrn(1);
32684 k2.iushrn(1);
32685 }
ebd8d4e8 32686
8b095871
IC
32687 return jsf;
32688}
32689utils.getJSF = getJSF;
ab78acc6 32690
8b095871
IC
32691function cachedProperty(obj, name, computer) {
32692 var key = '_' + name;
32693 obj.prototype[name] = function cachedProperty() {
32694 return this[key] !== undefined ? this[key] :
32695 this[key] = computer.call(this);
32696 };
32697}
32698utils.cachedProperty = cachedProperty;
ebd8d4e8 32699
8b095871
IC
32700function parseBytes(bytes) {
32701 return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') :
32702 bytes;
32703}
32704utils.parseBytes = parseBytes;
ebd8d4e8 32705
8b095871
IC
32706function intFromLE(bytes) {
32707 return new BN(bytes, 'hex', 'le');
32708}
32709utils.intFromLE = intFromLE;
ebd8d4e8 32710
8b095871
IC
32711
32712},{"bn.js":33}],55:[function(require,module,exports){
32713module.exports={
32714 "_args": [
32715 [
32716 {
32717 "raw": "elliptic@^6.2.3",
32718 "scope": null,
32719 "escapedName": "elliptic",
32720 "name": "elliptic",
32721 "rawSpec": "^6.2.3",
32722 "spec": ">=6.2.3 <7.0.0",
32723 "type": "range"
32724 },
32725 "/home/user/ethereum/ethereumjs-util/node_modules/secp256k1"
32726 ]
32727 ],
32728 "_from": "elliptic@>=6.2.3 <7.0.0",
32729 "_id": "elliptic@6.3.3",
32730 "_inCache": true,
32731 "_location": "/elliptic",
32732 "_nodeVersion": "7.0.0",
32733 "_npmOperationalInternal": {
32734 "host": "packages-18-east.internal.npmjs.com",
32735 "tmp": "tmp/elliptic-6.3.3.tgz_1486422837740_0.10658654430881143"
32736 },
32737 "_npmUser": {
32738 "name": "indutny",
32739 "email": "fedor@indutny.com"
32740 },
32741 "_npmVersion": "3.10.8",
32742 "_phantomChildren": {},
32743 "_requested": {
32744 "raw": "elliptic@^6.2.3",
32745 "scope": null,
32746 "escapedName": "elliptic",
32747 "name": "elliptic",
32748 "rawSpec": "^6.2.3",
32749 "spec": ">=6.2.3 <7.0.0",
32750 "type": "range"
32751 },
32752 "_requiredBy": [
32753 "/browserify-sign",
32754 "/create-ecdh",
32755 "/secp256k1"
32756 ],
32757 "_resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.3.3.tgz",
32758 "_shasum": "5482d9646d54bcb89fd7d994fc9e2e9568876e3f",
32759 "_shrinkwrap": null,
32760 "_spec": "elliptic@^6.2.3",
32761 "_where": "/home/user/ethereum/ethereumjs-util/node_modules/secp256k1",
32762 "author": {
32763 "name": "Fedor Indutny",
32764 "email": "fedor@indutny.com"
32765 },
32766 "bugs": {
32767 "url": "https://github.com/indutny/elliptic/issues"
32768 },
32769 "dependencies": {
32770 "bn.js": "^4.4.0",
32771 "brorand": "^1.0.1",
32772 "hash.js": "^1.0.0",
32773 "inherits": "^2.0.1"
32774 },
32775 "description": "EC cryptography",
32776 "devDependencies": {
32777 "brfs": "^1.4.3",
32778 "coveralls": "^2.11.3",
32779 "grunt": "^0.4.5",
32780 "grunt-browserify": "^5.0.0",
32781 "grunt-cli": "^1.2.0",
32782 "grunt-contrib-connect": "^1.0.0",
32783 "grunt-contrib-copy": "^1.0.0",
32784 "grunt-contrib-uglify": "^1.0.1",
32785 "grunt-mocha-istanbul": "^3.0.1",
32786 "grunt-saucelabs": "^8.6.2",
32787 "istanbul": "^0.4.2",
32788 "jscs": "^2.9.0",
32789 "jshint": "^2.6.0",
32790 "mocha": "^2.1.0"
32791 },
32792 "directories": {},
32793 "dist": {
32794 "shasum": "5482d9646d54bcb89fd7d994fc9e2e9568876e3f",
32795 "tarball": "https://registry.npmjs.org/elliptic/-/elliptic-6.3.3.tgz"
32796 },
32797 "files": [
32798 "lib"
32799 ],
32800 "gitHead": "63aee8d697e9b7fac37ece24222029117a890a7e",
32801 "homepage": "https://github.com/indutny/elliptic",
32802 "keywords": [
32803 "EC",
32804 "Elliptic",
32805 "curve",
32806 "Cryptography"
32807 ],
32808 "license": "MIT",
32809 "main": "lib/elliptic.js",
32810 "maintainers": [
32811 {
32812 "name": "indutny",
32813 "email": "fedor@indutny.com"
32814 }
32815 ],
32816 "name": "elliptic",
32817 "optionalDependencies": {},
32818 "readme": "ERROR: No README data found!",
32819 "repository": {
32820 "type": "git",
32821 "url": "git+ssh://git@github.com/indutny/elliptic.git"
32822 },
32823 "scripts": {
32824 "jscs": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js",
32825 "jshint": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js",
32826 "lint": "npm run jscs && npm run jshint",
32827 "test": "npm run lint && npm run unit",
32828 "unit": "istanbul test _mocha --reporter=spec test/index.js",
32829 "version": "grunt dist && git add dist/"
32830 },
32831 "version": "6.3.3"
ebd8d4e8
IC
32832}
32833
8b095871
IC
32834},{}],56:[function(require,module,exports){
32835(function (Buffer){
32836'use strict';
ab78acc6 32837
8b095871
IC
32838var isHexPrefixed = require('is-hex-prefixed');
32839var stripHexPrefix = require('strip-hex-prefix');
ebd8d4e8 32840
8b095871
IC
32841/**
32842 * Pads a `String` to have an even length
32843 * @param {String} value
32844 * @return {String} output
32845 */
32846function padToEven(value) {
32847 var a = value; // eslint-disable-line
32848
32849 if (typeof a !== 'string') {
32850 throw new Error('[ethjs-util] while padding to even, value must be string, is currently ' + typeof a + ', while padToEven.');
32851 }
32852
32853 if (a.length % 2) {
32854 a = '0' + a;
32855 }
32856
32857 return a;
ebd8d4e8
IC
32858}
32859
8b095871
IC
32860/**
32861 * Converts a `Number` into a hex `String`
32862 * @param {Number} i
32863 * @return {String}
32864 */
32865function intToHex(i) {
32866 var hex = i.toString(16); // eslint-disable-line
ebd8d4e8 32867
8b095871
IC
32868 return '0x' + padToEven(hex);
32869}
ab78acc6 32870
8b095871
IC
32871/**
32872 * Converts an `Number` to a `Buffer`
32873 * @param {Number} i
32874 * @return {Buffer}
32875 */
32876function intToBuffer(i) {
32877 var hex = intToHex(i);
ab78acc6 32878
8b095871
IC
32879 return new Buffer(hex.slice(2), 'hex');
32880}
ebd8d4e8 32881
8b095871
IC
32882/**
32883 * Get the binary size of a string
32884 * @param {String} str
32885 * @return {Number}
32886 */
32887function getBinarySize(str) {
32888 if (typeof str !== 'string') {
32889 throw new Error('[ethjs-util] while getting binary size, method getBinarySize requires input \'str\' to be type String, got \'' + typeof str + '\'.');
32890 }
ebd8d4e8 32891
8b095871
IC
32892 return Buffer.byteLength(str, 'utf8');
32893}
32894
32895/**
32896 * Returns TRUE if the first specified array contains all elements
32897 * from the second one. FALSE otherwise.
32898 *
32899 * @param {array} superset
32900 * @param {array} subset
32901 *
32902 * @returns {boolean}
32903 */
32904function arrayContainsArray(superset, subset, some) {
32905 if (Array.isArray(superset) !== true) {
32906 throw new Error('[ethjs-util] method arrayContainsArray requires input \'superset\' to be an array got type \'' + typeof superset + '\'');
32907 }
32908 if (Array.isArray(subset) !== true) {
32909 throw new Error('[ethjs-util] method arrayContainsArray requires input \'subset\' to be an array got type \'' + typeof subset + '\'');
ebd8d4e8
IC
32910 }
32911
8b095871
IC
32912 return subset[Boolean(some) && 'some' || 'every'](function (value) {
32913 return superset.indexOf(value) >= 0;
32914 });
ebd8d4e8
IC
32915}
32916
8b095871
IC
32917/**
32918 * Should be called to get utf8 from it's hex representation
32919 *
32920 * @method toUtf8
32921 * @param {String} string in hex
32922 * @returns {String} ascii string representation of hex value
32923 */
32924function toUtf8(hex) {
32925 var bufferValue = new Buffer(padToEven(stripHexPrefix(hex).replace(/^0+|0+$/g, '')), 'hex');
ebd8d4e8 32926
8b095871
IC
32927 return bufferValue.toString('utf8');
32928}
ab78acc6 32929
8b095871
IC
32930/**
32931 * Should be called to get ascii from it's hex representation
32932 *
32933 * @method toAscii
32934 * @param {String} string in hex
32935 * @returns {String} ascii string representation of hex value
32936 */
32937function toAscii(hex) {
32938 var str = ''; // eslint-disable-line
32939 var i = 0,
32940 l = hex.length; // eslint-disable-line
ebd8d4e8 32941
8b095871
IC
32942 if (hex.substring(0, 2) === '0x') {
32943 i = 2;
32944 }
ebd8d4e8 32945
8b095871
IC
32946 for (; i < l; i += 2) {
32947 var code = parseInt(hex.substr(i, 2), 16);
32948 str += String.fromCharCode(code);
ebd8d4e8 32949 }
8b095871
IC
32950
32951 return str;
ebd8d4e8
IC
32952}
32953
8b095871
IC
32954/**
32955 * Should be called to get hex representation (prefixed by 0x) of utf8 string
32956 *
32957 * @method fromUtf8
32958 * @param {String} string
32959 * @param {Number} optional padding
32960 * @returns {String} hex representation of input string
32961 */
32962function fromUtf8(stringValue) {
32963 var str = new Buffer(stringValue, 'utf8');
ebd8d4e8 32964
8b095871
IC
32965 return '0x' + padToEven(str.toString('hex')).replace(/^0+|0+$/g, '');
32966}
ab78acc6 32967
8b095871
IC
32968/**
32969 * Should be called to get hex representation (prefixed by 0x) of ascii string
32970 *
32971 * @method fromAscii
32972 * @param {String} string
32973 * @param {Number} optional padding
32974 * @returns {String} hex representation of input string
32975 */
32976function fromAscii(stringValue) {
32977 var hex = ''; // eslint-disable-line
32978 for (var i = 0; i < stringValue.length; i++) {
32979 // eslint-disable-line
32980 var code = stringValue.charCodeAt(i);
32981 var n = code.toString(16);
32982 hex += n.length < 2 ? '0' + n : n;
32983 }
ab78acc6 32984
8b095871
IC
32985 return '0x' + hex;
32986}
ebd8d4e8 32987
8b095871
IC
32988/**
32989 * getKeys([{a: 1, b: 2}, {a: 3, b: 4}], 'a') => [1, 3]
32990 *
32991 * @method getKeys get specific key from inner object array of objects
32992 * @param {String} params
32993 * @param {String} key
32994 * @param {Boolean} allowEmpty
32995 * @returns {Array} output just a simple array of output keys
32996 */
32997function getKeys(params, key, allowEmpty) {
32998 if (!Array.isArray(params)) {
32999 throw new Error('[ethjs-util] method getKeys expecting type Array as \'params\' input, got \'' + typeof params + '\'');
33000 }
33001 if (typeof key !== 'string') {
33002 throw new Error('[ethjs-util] method getKeys expecting type String for input \'key\' got \'' + typeof key + '\'.');
33003 }
ebd8d4e8 33004
8b095871 33005 var result = []; // eslint-disable-line
ebd8d4e8 33006
8b095871
IC
33007 for (var i = 0; i < params.length; i++) {
33008 // eslint-disable-line
33009 var value = params[i][key]; // eslint-disable-line
33010 if (allowEmpty && !value) {
33011 value = '';
33012 } else if (typeof value !== 'string') {
33013 throw new Error('invalid abi');
33014 }
33015 result.push(value);
33016 }
ebd8d4e8 33017
8b095871 33018 return result;
ebd8d4e8
IC
33019}
33020
8b095871
IC
33021/**
33022 * Is the string a hex string.
33023 *
33024 * @method check if string is hex string of specific length
33025 * @param {String} value
33026 * @param {Number} length
33027 * @returns {Boolean} output the string is a hex string
33028 */
33029function isHexString(value, length) {
33030 if (typeof value !== 'string' || !value.match(/^0x[0-9A-Fa-f]*$/)) {
33031 return false;
ab78acc6
IC
33032 }
33033
8b095871
IC
33034 if (length && value.length !== 2 + 2 * length) {
33035 return false;
33036 }
ebd8d4e8 33037
8b095871
IC
33038 return true;
33039}
ab78acc6 33040
8b095871
IC
33041module.exports = {
33042 arrayContainsArray: arrayContainsArray,
33043 intToBuffer: intToBuffer,
33044 getBinarySize: getBinarySize,
33045 isHexPrefixed: isHexPrefixed,
33046 stripHexPrefix: stripHexPrefix,
33047 padToEven: padToEven,
33048 intToHex: intToHex,
33049 fromAscii: fromAscii,
33050 fromUtf8: fromUtf8,
33051 toAscii: toAscii,
33052 toUtf8: toUtf8,
33053 getKeys: getKeys,
33054 isHexString: isHexString
33055};
33056}).call(this,require("buffer").Buffer)
33057},{"buffer":5,"is-hex-prefixed":64,"strip-hex-prefix":87}],57:[function(require,module,exports){
33058var hash = exports;
33059
33060hash.utils = require('./hash/utils');
33061hash.common = require('./hash/common');
33062hash.sha = require('./hash/sha');
33063hash.ripemd = require('./hash/ripemd');
33064hash.hmac = require('./hash/hmac');
33065
33066// Proxy hash functions to the main object
33067hash.sha1 = hash.sha.sha1;
33068hash.sha256 = hash.sha.sha256;
33069hash.sha224 = hash.sha.sha224;
33070hash.sha384 = hash.sha.sha384;
33071hash.sha512 = hash.sha.sha512;
33072hash.ripemd160 = hash.ripemd.ripemd160;
33073
33074},{"./hash/common":58,"./hash/hmac":59,"./hash/ripemd":60,"./hash/sha":61,"./hash/utils":62}],58:[function(require,module,exports){
33075var hash = require('../hash');
33076var utils = hash.utils;
33077var assert = utils.assert;
33078
33079function BlockHash() {
33080 this.pending = null;
33081 this.pendingTotal = 0;
33082 this.blockSize = this.constructor.blockSize;
33083 this.outSize = this.constructor.outSize;
33084 this.hmacStrength = this.constructor.hmacStrength;
33085 this.padLength = this.constructor.padLength / 8;
33086 this.endian = 'big';
33087
33088 this._delta8 = this.blockSize / 8;
33089 this._delta32 = this.blockSize / 32;
33090}
33091exports.BlockHash = BlockHash;
33092
33093BlockHash.prototype.update = function update(msg, enc) {
33094 // Convert message to array, pad it, and join into 32bit blocks
33095 msg = utils.toArray(msg, enc);
33096 if (!this.pending)
33097 this.pending = msg;
33098 else
33099 this.pending = this.pending.concat(msg);
33100 this.pendingTotal += msg.length;
ab78acc6 33101
8b095871
IC
33102 // Enough data, try updating
33103 if (this.pending.length >= this._delta8) {
33104 msg = this.pending;
ebd8d4e8 33105
8b095871
IC
33106 // Process pending data in blocks
33107 var r = msg.length % this._delta8;
33108 this.pending = msg.slice(msg.length - r, msg.length);
33109 if (this.pending.length === 0)
33110 this.pending = null;
ebd8d4e8 33111
8b095871
IC
33112 msg = utils.join32(msg, 0, msg.length - r, this.endian);
33113 for (var i = 0; i < msg.length; i += this._delta32)
33114 this._update(msg, i, i + this._delta32);
ebd8d4e8
IC
33115 }
33116
8b095871
IC
33117 return this;
33118};
ebd8d4e8 33119
8b095871
IC
33120BlockHash.prototype.digest = function digest(enc) {
33121 this.update(this._pad());
33122 assert(this.pending === null);
ebd8d4e8 33123
8b095871
IC
33124 return this._digest(enc);
33125};
ebd8d4e8 33126
8b095871
IC
33127BlockHash.prototype._pad = function pad() {
33128 var len = this.pendingTotal;
33129 var bytes = this._delta8;
33130 var k = bytes - ((len + this.padLength) % bytes);
33131 var res = new Array(k + this.padLength);
33132 res[0] = 0x80;
33133 for (var i = 1; i < k; i++)
33134 res[i] = 0;
33135
33136 // Append length
33137 len <<= 3;
33138 if (this.endian === 'big') {
33139 for (var t = 8; t < this.padLength; t++)
33140 res[i++] = 0;
33141
33142 res[i++] = 0;
33143 res[i++] = 0;
33144 res[i++] = 0;
33145 res[i++] = 0;
33146 res[i++] = (len >>> 24) & 0xff;
33147 res[i++] = (len >>> 16) & 0xff;
33148 res[i++] = (len >>> 8) & 0xff;
33149 res[i++] = len & 0xff;
ebd8d4e8 33150 } else {
8b095871
IC
33151 res[i++] = len & 0xff;
33152 res[i++] = (len >>> 8) & 0xff;
33153 res[i++] = (len >>> 16) & 0xff;
33154 res[i++] = (len >>> 24) & 0xff;
33155 res[i++] = 0;
33156 res[i++] = 0;
33157 res[i++] = 0;
33158 res[i++] = 0;
ebd8d4e8 33159
8b095871
IC
33160 for (var t = 8; t < this.padLength; t++)
33161 res[i++] = 0;
ebd8d4e8
IC
33162 }
33163
8b095871
IC
33164 return res;
33165};
ebd8d4e8 33166
8b095871
IC
33167},{"../hash":57}],59:[function(require,module,exports){
33168var hmac = exports;
ebd8d4e8 33169
8b095871
IC
33170var hash = require('../hash');
33171var utils = hash.utils;
33172var assert = utils.assert;
ebd8d4e8 33173
8b095871
IC
33174function Hmac(hash, key, enc) {
33175 if (!(this instanceof Hmac))
33176 return new Hmac(hash, key, enc);
33177 this.Hash = hash;
33178 this.blockSize = hash.blockSize / 8;
33179 this.outSize = hash.outSize / 8;
33180 this.inner = null;
33181 this.outer = null;
ebd8d4e8 33182
8b095871 33183 this._init(utils.toArray(key, enc));
ebd8d4e8 33184}
8b095871 33185module.exports = Hmac;
ebd8d4e8 33186
8b095871
IC
33187Hmac.prototype._init = function init(key) {
33188 // Shorten key, if needed
33189 if (key.length > this.blockSize)
33190 key = new this.Hash().update(key).digest();
33191 assert(key.length <= this.blockSize);
ebd8d4e8 33192
8b095871
IC
33193 // Add padding to key
33194 for (var i = key.length; i < this.blockSize; i++)
33195 key.push(0);
ab78acc6 33196
8b095871
IC
33197 for (var i = 0; i < key.length; i++)
33198 key[i] ^= 0x36;
33199 this.inner = new this.Hash().update(key);
ab78acc6 33200
8b095871
IC
33201 // 0x36 ^ 0x5c = 0x6a
33202 for (var i = 0; i < key.length; i++)
33203 key[i] ^= 0x6a;
33204 this.outer = new this.Hash().update(key);
33205};
ebd8d4e8 33206
8b095871
IC
33207Hmac.prototype.update = function update(msg, enc) {
33208 this.inner.update(msg, enc);
33209 return this;
33210};
ab78acc6 33211
8b095871
IC
33212Hmac.prototype.digest = function digest(enc) {
33213 this.outer.update(this.inner.digest());
33214 return this.outer.digest(enc);
33215};
ab78acc6 33216
8b095871
IC
33217},{"../hash":57}],60:[function(require,module,exports){
33218var hash = require('../hash');
33219var utils = hash.utils;
33220
33221var rotl32 = utils.rotl32;
33222var sum32 = utils.sum32;
33223var sum32_3 = utils.sum32_3;
33224var sum32_4 = utils.sum32_4;
33225var BlockHash = hash.common.BlockHash;
33226
33227function RIPEMD160() {
33228 if (!(this instanceof RIPEMD160))
33229 return new RIPEMD160();
33230
33231 BlockHash.call(this);
33232
33233 this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];
33234 this.endian = 'little';
33235}
33236utils.inherits(RIPEMD160, BlockHash);
33237exports.ripemd160 = RIPEMD160;
33238
33239RIPEMD160.blockSize = 512;
33240RIPEMD160.outSize = 160;
33241RIPEMD160.hmacStrength = 192;
33242RIPEMD160.padLength = 64;
33243
33244RIPEMD160.prototype._update = function update(msg, start) {
33245 var A = this.h[0];
33246 var B = this.h[1];
33247 var C = this.h[2];
33248 var D = this.h[3];
33249 var E = this.h[4];
33250 var Ah = A;
33251 var Bh = B;
33252 var Ch = C;
33253 var Dh = D;
33254 var Eh = E;
33255 for (var j = 0; j < 80; j++) {
33256 var T = sum32(
33257 rotl32(
33258 sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),
33259 s[j]),
33260 E);
33261 A = E;
33262 E = D;
33263 D = rotl32(C, 10);
33264 C = B;
33265 B = T;
33266 T = sum32(
33267 rotl32(
33268 sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),
33269 sh[j]),
33270 Eh);
33271 Ah = Eh;
33272 Eh = Dh;
33273 Dh = rotl32(Ch, 10);
33274 Ch = Bh;
33275 Bh = T;
33276 }
33277 T = sum32_3(this.h[1], C, Dh);
33278 this.h[1] = sum32_3(this.h[2], D, Eh);
33279 this.h[2] = sum32_3(this.h[3], E, Ah);
33280 this.h[3] = sum32_3(this.h[4], A, Bh);
33281 this.h[4] = sum32_3(this.h[0], B, Ch);
33282 this.h[0] = T;
33283};
ebd8d4e8 33284
8b095871
IC
33285RIPEMD160.prototype._digest = function digest(enc) {
33286 if (enc === 'hex')
33287 return utils.toHex32(this.h, 'little');
33288 else
33289 return utils.split32(this.h, 'little');
33290};
ebd8d4e8 33291
8b095871
IC
33292function f(j, x, y, z) {
33293 if (j <= 15)
33294 return x ^ y ^ z;
33295 else if (j <= 31)
33296 return (x & y) | ((~x) & z);
33297 else if (j <= 47)
33298 return (x | (~y)) ^ z;
33299 else if (j <= 63)
33300 return (x & z) | (y & (~z));
33301 else
33302 return x ^ (y | (~z));
33303}
33304
33305function K(j) {
33306 if (j <= 15)
33307 return 0x00000000;
33308 else if (j <= 31)
33309 return 0x5a827999;
33310 else if (j <= 47)
33311 return 0x6ed9eba1;
33312 else if (j <= 63)
33313 return 0x8f1bbcdc;
33314 else
33315 return 0xa953fd4e;
33316}
33317
33318function Kh(j) {
33319 if (j <= 15)
33320 return 0x50a28be6;
33321 else if (j <= 31)
33322 return 0x5c4dd124;
33323 else if (j <= 47)
33324 return 0x6d703ef3;
33325 else if (j <= 63)
33326 return 0x7a6d76e9;
33327 else
33328 return 0x00000000;
33329}
ebd8d4e8 33330
8b095871
IC
33331var r = [
33332 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
33333 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
33334 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
33335 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
33336 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
33337];
ebd8d4e8 33338
8b095871
IC
33339var rh = [
33340 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
33341 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
33342 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
33343 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
33344 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
33345];
ebd8d4e8 33346
8b095871
IC
33347var s = [
33348 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
33349 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
33350 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
33351 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
33352 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
33353];
ebd8d4e8 33354
8b095871
IC
33355var sh = [
33356 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
33357 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
33358 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
33359 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
33360 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
33361];
ebd8d4e8 33362
8b095871
IC
33363},{"../hash":57}],61:[function(require,module,exports){
33364var hash = require('../hash');
33365var utils = hash.utils;
33366var assert = utils.assert;
33367
33368var rotr32 = utils.rotr32;
33369var rotl32 = utils.rotl32;
33370var sum32 = utils.sum32;
33371var sum32_4 = utils.sum32_4;
33372var sum32_5 = utils.sum32_5;
33373var rotr64_hi = utils.rotr64_hi;
33374var rotr64_lo = utils.rotr64_lo;
33375var shr64_hi = utils.shr64_hi;
33376var shr64_lo = utils.shr64_lo;
33377var sum64 = utils.sum64;
33378var sum64_hi = utils.sum64_hi;
33379var sum64_lo = utils.sum64_lo;
33380var sum64_4_hi = utils.sum64_4_hi;
33381var sum64_4_lo = utils.sum64_4_lo;
33382var sum64_5_hi = utils.sum64_5_hi;
33383var sum64_5_lo = utils.sum64_5_lo;
33384var BlockHash = hash.common.BlockHash;
33385
33386var sha256_K = [
33387 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,
33388 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
33389 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,
33390 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
33391 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,
33392 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
33393 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,
33394 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
33395 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,
33396 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
33397 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,
33398 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
33399 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,
33400 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
33401 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,
33402 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2
33403];
ebd8d4e8 33404
8b095871
IC
33405var sha512_K = [
33406 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
33407 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
33408 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
33409 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
33410 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
33411 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
33412 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
33413 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
33414 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
33415 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
33416 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
33417 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
33418 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
33419 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
33420 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
33421 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
33422 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
33423 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
33424 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
33425 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
33426 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
33427 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
33428 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
33429 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
33430 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
33431 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
33432 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
33433 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
33434 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
33435 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
33436 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
33437 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
33438 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
33439 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
33440 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
33441 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
33442 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
33443 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
33444 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
33445 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
33446];
ebd8d4e8 33447
8b095871
IC
33448var sha1_K = [
33449 0x5A827999, 0x6ED9EBA1,
33450 0x8F1BBCDC, 0xCA62C1D6
33451];
ebd8d4e8 33452
8b095871
IC
33453function SHA256() {
33454 if (!(this instanceof SHA256))
33455 return new SHA256();
33456
33457 BlockHash.call(this);
33458 this.h = [ 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,
33459 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19 ];
33460 this.k = sha256_K;
33461 this.W = new Array(64);
33462}
33463utils.inherits(SHA256, BlockHash);
33464exports.sha256 = SHA256;
33465
33466SHA256.blockSize = 512;
33467SHA256.outSize = 256;
33468SHA256.hmacStrength = 192;
33469SHA256.padLength = 64;
33470
33471SHA256.prototype._update = function _update(msg, start) {
33472 var W = this.W;
33473
33474 for (var i = 0; i < 16; i++)
33475 W[i] = msg[start + i];
33476 for (; i < W.length; i++)
33477 W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);
33478
33479 var a = this.h[0];
33480 var b = this.h[1];
33481 var c = this.h[2];
33482 var d = this.h[3];
33483 var e = this.h[4];
33484 var f = this.h[5];
33485 var g = this.h[6];
33486 var h = this.h[7];
33487
33488 assert(this.k.length === W.length);
33489 for (var i = 0; i < W.length; i++) {
33490 var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);
33491 var T2 = sum32(s0_256(a), maj32(a, b, c));
33492 h = g;
33493 g = f;
33494 f = e;
33495 e = sum32(d, T1);
33496 d = c;
33497 c = b;
33498 b = a;
33499 a = sum32(T1, T2);
33500 }
33501
33502 this.h[0] = sum32(this.h[0], a);
33503 this.h[1] = sum32(this.h[1], b);
33504 this.h[2] = sum32(this.h[2], c);
33505 this.h[3] = sum32(this.h[3], d);
33506 this.h[4] = sum32(this.h[4], e);
33507 this.h[5] = sum32(this.h[5], f);
33508 this.h[6] = sum32(this.h[6], g);
33509 this.h[7] = sum32(this.h[7], h);
33510};
ebd8d4e8 33511
8b095871
IC
33512SHA256.prototype._digest = function digest(enc) {
33513 if (enc === 'hex')
33514 return utils.toHex32(this.h, 'big');
33515 else
33516 return utils.split32(this.h, 'big');
33517};
ebd8d4e8 33518
8b095871
IC
33519function SHA224() {
33520 if (!(this instanceof SHA224))
33521 return new SHA224();
ebd8d4e8 33522
8b095871
IC
33523 SHA256.call(this);
33524 this.h = [ 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,
33525 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];
33526}
33527utils.inherits(SHA224, SHA256);
33528exports.sha224 = SHA224;
ebd8d4e8 33529
8b095871
IC
33530SHA224.blockSize = 512;
33531SHA224.outSize = 224;
33532SHA224.hmacStrength = 192;
33533SHA224.padLength = 64;
ebd8d4e8 33534
8b095871
IC
33535SHA224.prototype._digest = function digest(enc) {
33536 // Just truncate output
33537 if (enc === 'hex')
33538 return utils.toHex32(this.h.slice(0, 7), 'big');
33539 else
33540 return utils.split32(this.h.slice(0, 7), 'big');
33541};
33542
33543function SHA512() {
33544 if (!(this instanceof SHA512))
33545 return new SHA512();
33546
33547 BlockHash.call(this);
33548 this.h = [ 0x6a09e667, 0xf3bcc908,
33549 0xbb67ae85, 0x84caa73b,
33550 0x3c6ef372, 0xfe94f82b,
33551 0xa54ff53a, 0x5f1d36f1,
33552 0x510e527f, 0xade682d1,
33553 0x9b05688c, 0x2b3e6c1f,
33554 0x1f83d9ab, 0xfb41bd6b,
33555 0x5be0cd19, 0x137e2179 ];
33556 this.k = sha512_K;
33557 this.W = new Array(160);
33558}
33559utils.inherits(SHA512, BlockHash);
33560exports.sha512 = SHA512;
33561
33562SHA512.blockSize = 1024;
33563SHA512.outSize = 512;
33564SHA512.hmacStrength = 192;
33565SHA512.padLength = 128;
33566
33567SHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {
33568 var W = this.W;
33569
33570 // 32 x 32bit words
33571 for (var i = 0; i < 32; i++)
33572 W[i] = msg[start + i];
33573 for (; i < W.length; i += 2) {
33574 var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2
33575 var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);
33576 var c1_hi = W[i - 14]; // i - 7
33577 var c1_lo = W[i - 13];
33578 var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15
33579 var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);
33580 var c3_hi = W[i - 32]; // i - 16
33581 var c3_lo = W[i - 31];
33582
33583 W[i] = sum64_4_hi(c0_hi, c0_lo,
33584 c1_hi, c1_lo,
33585 c2_hi, c2_lo,
33586 c3_hi, c3_lo);
33587 W[i + 1] = sum64_4_lo(c0_hi, c0_lo,
33588 c1_hi, c1_lo,
33589 c2_hi, c2_lo,
33590 c3_hi, c3_lo);
ebd8d4e8 33591 }
8b095871
IC
33592};
33593
33594SHA512.prototype._update = function _update(msg, start) {
33595 this._prepareBlock(msg, start);
33596
33597 var W = this.W;
33598
33599 var ah = this.h[0];
33600 var al = this.h[1];
33601 var bh = this.h[2];
33602 var bl = this.h[3];
33603 var ch = this.h[4];
33604 var cl = this.h[5];
33605 var dh = this.h[6];
33606 var dl = this.h[7];
33607 var eh = this.h[8];
33608 var el = this.h[9];
33609 var fh = this.h[10];
33610 var fl = this.h[11];
33611 var gh = this.h[12];
33612 var gl = this.h[13];
33613 var hh = this.h[14];
33614 var hl = this.h[15];
33615
33616 assert(this.k.length === W.length);
33617 for (var i = 0; i < W.length; i += 2) {
33618 var c0_hi = hh;
33619 var c0_lo = hl;
33620 var c1_hi = s1_512_hi(eh, el);
33621 var c1_lo = s1_512_lo(eh, el);
33622 var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);
33623 var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);
33624 var c3_hi = this.k[i];
33625 var c3_lo = this.k[i + 1];
33626 var c4_hi = W[i];
33627 var c4_lo = W[i + 1];
33628
33629 var T1_hi = sum64_5_hi(c0_hi, c0_lo,
33630 c1_hi, c1_lo,
33631 c2_hi, c2_lo,
33632 c3_hi, c3_lo,
33633 c4_hi, c4_lo);
33634 var T1_lo = sum64_5_lo(c0_hi, c0_lo,
33635 c1_hi, c1_lo,
33636 c2_hi, c2_lo,
33637 c3_hi, c3_lo,
33638 c4_hi, c4_lo);
33639
33640 var c0_hi = s0_512_hi(ah, al);
33641 var c0_lo = s0_512_lo(ah, al);
33642 var c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);
33643 var c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);
33644
33645 var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);
33646 var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);
33647
33648 hh = gh;
33649 hl = gl;
33650
33651 gh = fh;
33652 gl = fl;
33653
33654 fh = eh;
33655 fl = el;
33656
33657 eh = sum64_hi(dh, dl, T1_hi, T1_lo);
33658 el = sum64_lo(dl, dl, T1_hi, T1_lo);
33659
33660 dh = ch;
33661 dl = cl;
33662
33663 ch = bh;
33664 cl = bl;
33665
33666 bh = ah;
33667 bl = al;
33668
33669 ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);
33670 al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);
33671 }
33672
33673 sum64(this.h, 0, ah, al);
33674 sum64(this.h, 2, bh, bl);
33675 sum64(this.h, 4, ch, cl);
33676 sum64(this.h, 6, dh, dl);
33677 sum64(this.h, 8, eh, el);
33678 sum64(this.h, 10, fh, fl);
33679 sum64(this.h, 12, gh, gl);
33680 sum64(this.h, 14, hh, hl);
33681};
33682
33683SHA512.prototype._digest = function digest(enc) {
33684 if (enc === 'hex')
33685 return utils.toHex32(this.h, 'big');
33686 else
33687 return utils.split32(this.h, 'big');
33688};
33689
33690function SHA384() {
33691 if (!(this instanceof SHA384))
33692 return new SHA384();
33693
33694 SHA512.call(this);
33695 this.h = [ 0xcbbb9d5d, 0xc1059ed8,
33696 0x629a292a, 0x367cd507,
33697 0x9159015a, 0x3070dd17,
33698 0x152fecd8, 0xf70e5939,
33699 0x67332667, 0xffc00b31,
33700 0x8eb44a87, 0x68581511,
33701 0xdb0c2e0d, 0x64f98fa7,
33702 0x47b5481d, 0xbefa4fa4 ];
33703}
33704utils.inherits(SHA384, SHA512);
33705exports.sha384 = SHA384;
33706
33707SHA384.blockSize = 1024;
33708SHA384.outSize = 384;
33709SHA384.hmacStrength = 192;
33710SHA384.padLength = 128;
33711
33712SHA384.prototype._digest = function digest(enc) {
33713 if (enc === 'hex')
33714 return utils.toHex32(this.h.slice(0, 12), 'big');
33715 else
33716 return utils.split32(this.h.slice(0, 12), 'big');
33717};
ebd8d4e8 33718
8b095871
IC
33719function SHA1() {
33720 if (!(this instanceof SHA1))
33721 return new SHA1();
ebd8d4e8 33722
8b095871
IC
33723 BlockHash.call(this);
33724 this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe,
33725 0x10325476, 0xc3d2e1f0 ];
33726 this.W = new Array(80);
33727}
ebd8d4e8 33728
8b095871
IC
33729utils.inherits(SHA1, BlockHash);
33730exports.sha1 = SHA1;
ebd8d4e8 33731
8b095871
IC
33732SHA1.blockSize = 512;
33733SHA1.outSize = 160;
33734SHA1.hmacStrength = 80;
33735SHA1.padLength = 64;
ebd8d4e8 33736
8b095871
IC
33737SHA1.prototype._update = function _update(msg, start) {
33738 var W = this.W;
ebd8d4e8 33739
8b095871
IC
33740 for (var i = 0; i < 16; i++)
33741 W[i] = msg[start + i];
ebd8d4e8 33742
8b095871
IC
33743 for(; i < W.length; i++)
33744 W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);
ebd8d4e8 33745
8b095871
IC
33746 var a = this.h[0];
33747 var b = this.h[1];
33748 var c = this.h[2];
33749 var d = this.h[3];
33750 var e = this.h[4];
ebd8d4e8 33751
8b095871
IC
33752 for (var i = 0; i < W.length; i++) {
33753 var s = ~~(i / 20);
33754 var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);
33755 e = d;
33756 d = c;
33757 c = rotl32(b, 30);
33758 b = a;
33759 a = t;
ebd8d4e8
IC
33760 }
33761
8b095871
IC
33762 this.h[0] = sum32(this.h[0], a);
33763 this.h[1] = sum32(this.h[1], b);
33764 this.h[2] = sum32(this.h[2], c);
33765 this.h[3] = sum32(this.h[3], d);
33766 this.h[4] = sum32(this.h[4], e);
33767};
ebd8d4e8 33768
8b095871
IC
33769SHA1.prototype._digest = function digest(enc) {
33770 if (enc === 'hex')
33771 return utils.toHex32(this.h, 'big');
33772 else
33773 return utils.split32(this.h, 'big');
33774};
33775
33776function ch32(x, y, z) {
33777 return (x & y) ^ ((~x) & z);
ebd8d4e8
IC
33778}
33779
8b095871
IC
33780function maj32(x, y, z) {
33781 return (x & y) ^ (x & z) ^ (y & z);
ebd8d4e8
IC
33782}
33783
8b095871
IC
33784function p32(x, y, z) {
33785 return x ^ y ^ z;
33786}
ebd8d4e8 33787
8b095871
IC
33788function s0_256(x) {
33789 return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);
33790}
ebd8d4e8 33791
8b095871
IC
33792function s1_256(x) {
33793 return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);
ab78acc6
IC
33794}
33795
8b095871
IC
33796function g0_256(x) {
33797 return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);
33798}
ab78acc6 33799
8b095871
IC
33800function g1_256(x) {
33801 return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);
33802}
ab78acc6 33803
8b095871
IC
33804function ft_1(s, x, y, z) {
33805 if (s === 0)
33806 return ch32(x, y, z);
33807 if (s === 1 || s === 3)
33808 return p32(x, y, z);
33809 if (s === 2)
33810 return maj32(x, y, z);
33811}
ebd8d4e8 33812
8b095871
IC
33813function ch64_hi(xh, xl, yh, yl, zh, zl) {
33814 var r = (xh & yh) ^ ((~xh) & zh);
33815 if (r < 0)
33816 r += 0x100000000;
33817 return r;
33818}
ebd8d4e8 33819
8b095871
IC
33820function ch64_lo(xh, xl, yh, yl, zh, zl) {
33821 var r = (xl & yl) ^ ((~xl) & zl);
33822 if (r < 0)
33823 r += 0x100000000;
33824 return r;
ebd8d4e8
IC
33825}
33826
8b095871
IC
33827function maj64_hi(xh, xl, yh, yl, zh, zl) {
33828 var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);
33829 if (r < 0)
33830 r += 0x100000000;
33831 return r;
33832}
ebd8d4e8 33833
8b095871
IC
33834function maj64_lo(xh, xl, yh, yl, zh, zl) {
33835 var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);
33836 if (r < 0)
33837 r += 0x100000000;
33838 return r;
33839}
ebd8d4e8 33840
8b095871
IC
33841function s0_512_hi(xh, xl) {
33842 var c0_hi = rotr64_hi(xh, xl, 28);
33843 var c1_hi = rotr64_hi(xl, xh, 2); // 34
33844 var c2_hi = rotr64_hi(xl, xh, 7); // 39
33845
33846 var r = c0_hi ^ c1_hi ^ c2_hi;
33847 if (r < 0)
33848 r += 0x100000000;
33849 return r;
ebd8d4e8
IC
33850}
33851
8b095871
IC
33852function s0_512_lo(xh, xl) {
33853 var c0_lo = rotr64_lo(xh, xl, 28);
33854 var c1_lo = rotr64_lo(xl, xh, 2); // 34
33855 var c2_lo = rotr64_lo(xl, xh, 7); // 39
ab78acc6 33856
8b095871
IC
33857 var r = c0_lo ^ c1_lo ^ c2_lo;
33858 if (r < 0)
33859 r += 0x100000000;
33860 return r;
33861}
ebd8d4e8 33862
8b095871
IC
33863function s1_512_hi(xh, xl) {
33864 var c0_hi = rotr64_hi(xh, xl, 14);
33865 var c1_hi = rotr64_hi(xh, xl, 18);
33866 var c2_hi = rotr64_hi(xl, xh, 9); // 41
ebd8d4e8 33867
8b095871
IC
33868 var r = c0_hi ^ c1_hi ^ c2_hi;
33869 if (r < 0)
33870 r += 0x100000000;
33871 return r;
ebd8d4e8
IC
33872}
33873
8b095871
IC
33874function s1_512_lo(xh, xl) {
33875 var c0_lo = rotr64_lo(xh, xl, 14);
33876 var c1_lo = rotr64_lo(xh, xl, 18);
33877 var c2_lo = rotr64_lo(xl, xh, 9); // 41
33878
33879 var r = c0_lo ^ c1_lo ^ c2_lo;
33880 if (r < 0)
33881 r += 0x100000000;
33882 return r;
ebd8d4e8
IC
33883}
33884
8b095871
IC
33885function g0_512_hi(xh, xl) {
33886 var c0_hi = rotr64_hi(xh, xl, 1);
33887 var c1_hi = rotr64_hi(xh, xl, 8);
33888 var c2_hi = shr64_hi(xh, xl, 7);
ebd8d4e8 33889
8b095871
IC
33890 var r = c0_hi ^ c1_hi ^ c2_hi;
33891 if (r < 0)
33892 r += 0x100000000;
33893 return r;
33894}
33895
33896function g0_512_lo(xh, xl) {
33897 var c0_lo = rotr64_lo(xh, xl, 1);
33898 var c1_lo = rotr64_lo(xh, xl, 8);
33899 var c2_lo = shr64_lo(xh, xl, 7);
33900
33901 var r = c0_lo ^ c1_lo ^ c2_lo;
33902 if (r < 0)
33903 r += 0x100000000;
33904 return r;
33905}
33906
33907function g1_512_hi(xh, xl) {
33908 var c0_hi = rotr64_hi(xh, xl, 19);
33909 var c1_hi = rotr64_hi(xl, xh, 29); // 61
33910 var c2_hi = shr64_hi(xh, xl, 6);
33911
33912 var r = c0_hi ^ c1_hi ^ c2_hi;
33913 if (r < 0)
33914 r += 0x100000000;
33915 return r;
33916}
33917
33918function g1_512_lo(xh, xl) {
33919 var c0_lo = rotr64_lo(xh, xl, 19);
33920 var c1_lo = rotr64_lo(xl, xh, 29); // 61
33921 var c2_lo = shr64_lo(xh, xl, 6);
33922
33923 var r = c0_lo ^ c1_lo ^ c2_lo;
33924 if (r < 0)
33925 r += 0x100000000;
33926 return r;
33927}
33928
33929},{"../hash":57}],62:[function(require,module,exports){
33930var utils = exports;
33931var inherits = require('inherits');
33932
33933function toArray(msg, enc) {
33934 if (Array.isArray(msg))
33935 return msg.slice();
33936 if (!msg)
33937 return [];
33938 var res = [];
33939 if (typeof msg === 'string') {
33940 if (!enc) {
33941 for (var i = 0; i < msg.length; i++) {
33942 var c = msg.charCodeAt(i);
33943 var hi = c >> 8;
33944 var lo = c & 0xff;
33945 if (hi)
33946 res.push(hi, lo);
33947 else
33948 res.push(lo);
33949 }
33950 } else if (enc === 'hex') {
33951 msg = msg.replace(/[^a-z0-9]+/ig, '');
33952 if (msg.length % 2 !== 0)
33953 msg = '0' + msg;
33954 for (var i = 0; i < msg.length; i += 2)
33955 res.push(parseInt(msg[i] + msg[i + 1], 16));
33956 }
33957 } else {
33958 for (var i = 0; i < msg.length; i++)
33959 res[i] = msg[i] | 0;
ebd8d4e8 33960 }
8b095871 33961 return res;
ebd8d4e8 33962}
8b095871 33963utils.toArray = toArray;
ebd8d4e8 33964
8b095871
IC
33965function toHex(msg) {
33966 var res = '';
33967 for (var i = 0; i < msg.length; i++)
33968 res += zero2(msg[i].toString(16));
33969 return res;
33970}
33971utils.toHex = toHex;
ebd8d4e8 33972
8b095871
IC
33973function htonl(w) {
33974 var res = (w >>> 24) |
33975 ((w >>> 8) & 0xff00) |
33976 ((w << 8) & 0xff0000) |
33977 ((w & 0xff) << 24);
33978 return res >>> 0;
33979}
33980utils.htonl = htonl;
ebd8d4e8 33981
8b095871
IC
33982function toHex32(msg, endian) {
33983 var res = '';
33984 for (var i = 0; i < msg.length; i++) {
33985 var w = msg[i];
33986 if (endian === 'little')
33987 w = htonl(w);
33988 res += zero8(w.toString(16));
33989 }
33990 return res;
33991}
33992utils.toHex32 = toHex32;
ebd8d4e8 33993
8b095871
IC
33994function zero2(word) {
33995 if (word.length === 1)
33996 return '0' + word;
33997 else
33998 return word;
33999}
34000utils.zero2 = zero2;
34001
34002function zero8(word) {
34003 if (word.length === 7)
34004 return '0' + word;
34005 else if (word.length === 6)
34006 return '00' + word;
34007 else if (word.length === 5)
34008 return '000' + word;
34009 else if (word.length === 4)
34010 return '0000' + word;
34011 else if (word.length === 3)
34012 return '00000' + word;
34013 else if (word.length === 2)
34014 return '000000' + word;
34015 else if (word.length === 1)
34016 return '0000000' + word;
34017 else
34018 return word;
34019}
34020utils.zero8 = zero8;
34021
34022function join32(msg, start, end, endian) {
34023 var len = end - start;
34024 assert(len % 4 === 0);
34025 var res = new Array(len / 4);
34026 for (var i = 0, k = start; i < res.length; i++, k += 4) {
34027 var w;
34028 if (endian === 'big')
34029 w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];
34030 else
34031 w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];
34032 res[i] = w >>> 0;
34033 }
34034 return res;
34035}
34036utils.join32 = join32;
34037
34038function split32(msg, endian) {
34039 var res = new Array(msg.length * 4);
34040 for (var i = 0, k = 0; i < msg.length; i++, k += 4) {
34041 var m = msg[i];
34042 if (endian === 'big') {
34043 res[k] = m >>> 24;
34044 res[k + 1] = (m >>> 16) & 0xff;
34045 res[k + 2] = (m >>> 8) & 0xff;
34046 res[k + 3] = m & 0xff;
34047 } else {
34048 res[k + 3] = m >>> 24;
34049 res[k + 2] = (m >>> 16) & 0xff;
34050 res[k + 1] = (m >>> 8) & 0xff;
34051 res[k] = m & 0xff;
34052 }
ebd8d4e8 34053 }
8b095871 34054 return res;
ebd8d4e8 34055}
8b095871 34056utils.split32 = split32;
ebd8d4e8 34057
8b095871
IC
34058function rotr32(w, b) {
34059 return (w >>> b) | (w << (32 - b));
34060}
34061utils.rotr32 = rotr32;
ebd8d4e8 34062
8b095871
IC
34063function rotl32(w, b) {
34064 return (w << b) | (w >>> (32 - b));
34065}
34066utils.rotl32 = rotl32;
ebd8d4e8 34067
8b095871
IC
34068function sum32(a, b) {
34069 return (a + b) >>> 0;
34070}
34071utils.sum32 = sum32;
ebd8d4e8 34072
8b095871
IC
34073function sum32_3(a, b, c) {
34074 return (a + b + c) >>> 0;
34075}
34076utils.sum32_3 = sum32_3;
ebd8d4e8 34077
8b095871
IC
34078function sum32_4(a, b, c, d) {
34079 return (a + b + c + d) >>> 0;
34080}
34081utils.sum32_4 = sum32_4;
ebd8d4e8 34082
8b095871
IC
34083function sum32_5(a, b, c, d, e) {
34084 return (a + b + c + d + e) >>> 0;
34085}
34086utils.sum32_5 = sum32_5;
ebd8d4e8 34087
8b095871
IC
34088function assert(cond, msg) {
34089 if (!cond)
34090 throw new Error(msg || 'Assertion failed');
34091}
34092utils.assert = assert;
ab78acc6 34093
8b095871 34094utils.inherits = inherits;
ab78acc6 34095
8b095871
IC
34096function sum64(buf, pos, ah, al) {
34097 var bh = buf[pos];
34098 var bl = buf[pos + 1];
ab78acc6 34099
8b095871
IC
34100 var lo = (al + bl) >>> 0;
34101 var hi = (lo < al ? 1 : 0) + ah + bh;
34102 buf[pos] = hi >>> 0;
34103 buf[pos + 1] = lo;
34104}
34105exports.sum64 = sum64;
ebd8d4e8 34106
8b095871
IC
34107function sum64_hi(ah, al, bh, bl) {
34108 var lo = (al + bl) >>> 0;
34109 var hi = (lo < al ? 1 : 0) + ah + bh;
34110 return hi >>> 0;
34111};
34112exports.sum64_hi = sum64_hi;
ebd8d4e8 34113
8b095871
IC
34114function sum64_lo(ah, al, bh, bl) {
34115 var lo = al + bl;
34116 return lo >>> 0;
34117};
34118exports.sum64_lo = sum64_lo;
34119
34120function sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {
34121 var carry = 0;
34122 var lo = al;
34123 lo = (lo + bl) >>> 0;
34124 carry += lo < al ? 1 : 0;
34125 lo = (lo + cl) >>> 0;
34126 carry += lo < cl ? 1 : 0;
34127 lo = (lo + dl) >>> 0;
34128 carry += lo < dl ? 1 : 0;
34129
34130 var hi = ah + bh + ch + dh + carry;
34131 return hi >>> 0;
34132};
34133exports.sum64_4_hi = sum64_4_hi;
ebd8d4e8 34134
8b095871
IC
34135function sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {
34136 var lo = al + bl + cl + dl;
34137 return lo >>> 0;
34138};
34139exports.sum64_4_lo = sum64_4_lo;
34140
34141function sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {
34142 var carry = 0;
34143 var lo = al;
34144 lo = (lo + bl) >>> 0;
34145 carry += lo < al ? 1 : 0;
34146 lo = (lo + cl) >>> 0;
34147 carry += lo < cl ? 1 : 0;
34148 lo = (lo + dl) >>> 0;
34149 carry += lo < dl ? 1 : 0;
34150 lo = (lo + el) >>> 0;
34151 carry += lo < el ? 1 : 0;
34152
34153 var hi = ah + bh + ch + dh + eh + carry;
34154 return hi >>> 0;
34155};
34156exports.sum64_5_hi = sum64_5_hi;
34157
34158function sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {
34159 var lo = al + bl + cl + dl + el;
34160
34161 return lo >>> 0;
34162};
34163exports.sum64_5_lo = sum64_5_lo;
34164
34165function rotr64_hi(ah, al, num) {
34166 var r = (al << (32 - num)) | (ah >>> num);
34167 return r >>> 0;
34168};
34169exports.rotr64_hi = rotr64_hi;
34170
34171function rotr64_lo(ah, al, num) {
34172 var r = (ah << (32 - num)) | (al >>> num);
34173 return r >>> 0;
34174};
34175exports.rotr64_lo = rotr64_lo;
34176
34177function shr64_hi(ah, al, num) {
34178 return ah >>> num;
34179};
34180exports.shr64_hi = shr64_hi;
34181
34182function shr64_lo(ah, al, num) {
34183 var r = (ah << (32 - num)) | (al >>> num);
34184 return r >>> 0;
34185};
34186exports.shr64_lo = shr64_lo;
34187
34188},{"inherits":63}],63:[function(require,module,exports){
34189arguments[4][9][0].apply(exports,arguments)
34190},{"dup":9}],64:[function(require,module,exports){
34191/**
34192 * Returns a `Boolean` on whether or not the a `String` starts with '0x'
34193 * @param {String} str the string input value
34194 * @return {Boolean} a boolean if it is or is not hex prefixed
34195 * @throws if the str input is not a string
34196 */
34197module.exports = function isHexPrefixed(str) {
34198 if (typeof str !== 'string') {
34199 throw new Error("[is-hex-prefixed] value must be type 'string', is currently type " + (typeof str) + ", while checking isHexPrefixed.");
34200 }
34201
34202 return str.slice(0, 2) === '0x';
ebd8d4e8
IC
34203}
34204
8b095871
IC
34205},{}],65:[function(require,module,exports){
34206'use strict'
34207module.exports = require('./lib/api')(require('./lib/keccak'))
34208
34209},{"./lib/api":66,"./lib/keccak":70}],66:[function(require,module,exports){
34210'use strict'
34211var createKeccak = require('./keccak')
34212var createShake = require('./shake')
34213
34214module.exports = function (KeccakState) {
34215 var Keccak = createKeccak(KeccakState)
34216 var Shake = createShake(KeccakState)
34217
34218 return function (algorithm, options) {
34219 var hash = typeof algorithm === 'string' ? algorithm.toLowerCase() : algorithm
34220 switch (hash) {
34221 case 'keccak224': return new Keccak(1152, 448, null, 224, options)
34222 case 'keccak256': return new Keccak(1088, 512, null, 256, options)
34223 case 'keccak384': return new Keccak(832, 768, null, 384, options)
34224 case 'keccak512': return new Keccak(576, 1024, null, 512, options)
34225
34226 case 'sha3-224': return new Keccak(1152, 448, 0x06, 224, options)
34227 case 'sha3-256': return new Keccak(1088, 512, 0x06, 256, options)
34228 case 'sha3-384': return new Keccak(832, 768, 0x06, 384, options)
34229 case 'sha3-512': return new Keccak(576, 1024, 0x06, 512, options)
34230
34231 case 'shake128': return new Shake(1344, 256, 0x1f, options)
34232 case 'shake256': return new Shake(1088, 512, 0x1f, options)
34233
34234 default: throw new Error('Invald algorithm: ' + algorithm)
34235 }
34236 }
34237}
34238
34239},{"./keccak":67,"./shake":68}],67:[function(require,module,exports){
ebd8d4e8 34240(function (Buffer){
8b095871
IC
34241'use strict'
34242var Transform = require('stream').Transform
34243var inherits = require('inherits')
34244
34245module.exports = function (KeccakState) {
34246 function Keccak (rate, capacity, delimitedSuffix, hashBitLength, options) {
34247 Transform.call(this, options)
34248
34249 this._rate = rate
34250 this._capacity = capacity
34251 this._delimitedSuffix = delimitedSuffix
34252 this._hashBitLength = hashBitLength
34253 this._options = options
34254
34255 this._state = new KeccakState()
34256 this._state.initialize(rate, capacity)
34257 this._finalized = false
34258 }
34259
34260 inherits(Keccak, Transform)
34261
34262 Keccak.prototype._transform = function (chunk, encoding, callback) {
34263 var error = null
34264 try {
34265 this.update(chunk, encoding)
34266 } catch (err) {
34267 error = err
34268 }
34269
34270 callback(error)
34271 }
34272
34273 Keccak.prototype._flush = function (callback) {
34274 var error = null
34275 try {
34276 this.push(this.digest())
34277 } catch (err) {
34278 error = err
34279 }
34280
34281 callback(error)
34282 }
34283
34284 Keccak.prototype.update = function (data, encoding) {
34285 if (!Buffer.isBuffer(data) && typeof data !== 'string') throw new TypeError('Data must be a string or a buffer')
34286 if (this._finalized) throw new Error('Digest already called')
34287 if (!Buffer.isBuffer(data)) data = Buffer.from(data, encoding)
34288
34289 this._state.absorb(data)
34290
34291 return this
34292 }
34293
34294 Keccak.prototype.digest = function (encoding) {
34295 if (this._finalized) throw new Error('Digest already called')
34296 this._finalized = true
34297
34298 if (this._delimitedSuffix) this._state.absorbLastFewBits(this._delimitedSuffix)
34299 var digest = this._state.squeeze(this._hashBitLength / 8)
34300 if (encoding !== undefined) digest = digest.toString(encoding)
34301
34302 this._resetState()
34303
34304 return digest
34305 }
34306
34307 // remove result from memory
34308 Keccak.prototype._resetState = function () {
34309 this._state.initialize(this._rate, this._capacity)
34310 return this
34311 }
34312
34313 // because sometimes we need hash right now and little later
34314 Keccak.prototype._clone = function () {
34315 var clone = new Keccak(this._rate, this._capacity, this._delimitedSuffix, this._hashBitLength, this._options)
34316 this._state.copy(clone._state)
34317 clone._finalized = this._finalized
34318
34319 return clone
34320 }
34321
34322 return Keccak
34323}
34324
34325}).call(this,require("buffer").Buffer)
34326},{"buffer":5,"inherits":63,"stream":25}],68:[function(require,module,exports){
34327(function (Buffer){
34328'use strict'
34329var Transform = require('stream').Transform
34330var inherits = require('inherits')
34331
34332module.exports = function (KeccakState) {
34333 function Shake (rate, capacity, delimitedSuffix, options) {
34334 Transform.call(this, options)
34335
34336 this._rate = rate
34337 this._capacity = capacity
34338 this._delimitedSuffix = delimitedSuffix
34339 this._options = options
34340
34341 this._state = new KeccakState()
34342 this._state.initialize(rate, capacity)
34343 this._finalized = false
34344 }
34345
34346 inherits(Shake, Transform)
34347
34348 Shake.prototype._transform = function (chunk, encoding, callback) {
34349 var error = null
34350 try {
34351 this.update(chunk, encoding)
34352 } catch (err) {
34353 error = err
34354 }
ebd8d4e8 34355
8b095871
IC
34356 callback(error)
34357 }
ebd8d4e8 34358
8b095871 34359 Shake.prototype._flush = function () {}
ebd8d4e8 34360
8b095871
IC
34361 Shake.prototype._read = function (size) {
34362 this.push(this.squeeze(size))
34363 }
ebd8d4e8 34364
8b095871
IC
34365 Shake.prototype.update = function (data, encoding) {
34366 if (!Buffer.isBuffer(data) && typeof data !== 'string') throw new TypeError('Data must be a string or a buffer')
34367 if (this._finalized) throw new Error('Squeeze already called')
34368 if (!Buffer.isBuffer(data)) data = Buffer.from(data, encoding)
34369
34370 this._state.absorb(data)
34371
34372 return this
34373 }
34374
34375 Shake.prototype.squeeze = function (dataByteLength, encoding) {
34376 if (!this._finalized) {
34377 this._finalized = true
34378 this._state.absorbLastFewBits(this._delimitedSuffix)
ebd8d4e8 34379 }
ebd8d4e8 34380
8b095871
IC
34381 var data = this._state.squeeze(dataByteLength)
34382 if (encoding !== undefined) data = data.toString(encoding)
ebd8d4e8 34383
8b095871
IC
34384 return data
34385 }
ebd8d4e8 34386
8b095871
IC
34387 Shake.prototype._resetState = function () {
34388 this._state.initialize(this._rate, this._capacity)
34389 return this
34390 }
ebd8d4e8 34391
8b095871
IC
34392 Shake.prototype._clone = function () {
34393 var clone = new Shake(this._rate, this._capacity, this._delimitedSuffix, this._options)
34394 this._state.copy(clone._state)
34395 clone._finalized = this._finalized
ab78acc6 34396
8b095871
IC
34397 return clone
34398 }
ebd8d4e8 34399
8b095871
IC
34400 return Shake
34401}
ab78acc6 34402
8b095871
IC
34403}).call(this,require("buffer").Buffer)
34404},{"buffer":5,"inherits":63,"stream":25}],69:[function(require,module,exports){
34405'use strict'
34406var P1600_ROUND_CONSTANTS = [1, 0, 32898, 0, 32906, 2147483648, 2147516416, 2147483648, 32907, 0, 2147483649, 0, 2147516545, 2147483648, 32777, 2147483648, 138, 0, 136, 0, 2147516425, 0, 2147483658, 0, 2147516555, 0, 139, 2147483648, 32905, 2147483648, 32771, 2147483648, 32770, 2147483648, 128, 2147483648, 32778, 0, 2147483658, 2147483648, 2147516545, 2147483648, 32896, 2147483648, 2147483649, 0, 2147516424, 2147483648]
34407
34408exports.p1600 = function (s) {
34409 for (var round = 0; round < 24; ++round) {
34410 // theta
34411 var lo0 = s[0] ^ s[10] ^ s[20] ^ s[30] ^ s[40]
34412 var hi0 = s[1] ^ s[11] ^ s[21] ^ s[31] ^ s[41]
34413 var lo1 = s[2] ^ s[12] ^ s[22] ^ s[32] ^ s[42]
34414 var hi1 = s[3] ^ s[13] ^ s[23] ^ s[33] ^ s[43]
34415 var lo2 = s[4] ^ s[14] ^ s[24] ^ s[34] ^ s[44]
34416 var hi2 = s[5] ^ s[15] ^ s[25] ^ s[35] ^ s[45]
34417 var lo3 = s[6] ^ s[16] ^ s[26] ^ s[36] ^ s[46]
34418 var hi3 = s[7] ^ s[17] ^ s[27] ^ s[37] ^ s[47]
34419 var lo4 = s[8] ^ s[18] ^ s[28] ^ s[38] ^ s[48]
34420 var hi4 = s[9] ^ s[19] ^ s[29] ^ s[39] ^ s[49]
34421
34422 var lo = lo4 ^ (lo1 << 1 | hi1 >>> 31)
34423 var hi = hi4 ^ (hi1 << 1 | lo1 >>> 31)
34424 var t1slo0 = s[0] ^ lo
34425 var t1shi0 = s[1] ^ hi
34426 var t1slo5 = s[10] ^ lo
34427 var t1shi5 = s[11] ^ hi
34428 var t1slo10 = s[20] ^ lo
34429 var t1shi10 = s[21] ^ hi
34430 var t1slo15 = s[30] ^ lo
34431 var t1shi15 = s[31] ^ hi
34432 var t1slo20 = s[40] ^ lo
34433 var t1shi20 = s[41] ^ hi
34434 lo = lo0 ^ (lo2 << 1 | hi2 >>> 31)
34435 hi = hi0 ^ (hi2 << 1 | lo2 >>> 31)
34436 var t1slo1 = s[2] ^ lo
34437 var t1shi1 = s[3] ^ hi
34438 var t1slo6 = s[12] ^ lo
34439 var t1shi6 = s[13] ^ hi
34440 var t1slo11 = s[22] ^ lo
34441 var t1shi11 = s[23] ^ hi
34442 var t1slo16 = s[32] ^ lo
34443 var t1shi16 = s[33] ^ hi
34444 var t1slo21 = s[42] ^ lo
34445 var t1shi21 = s[43] ^ hi
34446 lo = lo1 ^ (lo3 << 1 | hi3 >>> 31)
34447 hi = hi1 ^ (hi3 << 1 | lo3 >>> 31)
34448 var t1slo2 = s[4] ^ lo
34449 var t1shi2 = s[5] ^ hi
34450 var t1slo7 = s[14] ^ lo
34451 var t1shi7 = s[15] ^ hi
34452 var t1slo12 = s[24] ^ lo
34453 var t1shi12 = s[25] ^ hi
34454 var t1slo17 = s[34] ^ lo
34455 var t1shi17 = s[35] ^ hi
34456 var t1slo22 = s[44] ^ lo
34457 var t1shi22 = s[45] ^ hi
34458 lo = lo2 ^ (lo4 << 1 | hi4 >>> 31)
34459 hi = hi2 ^ (hi4 << 1 | lo4 >>> 31)
34460 var t1slo3 = s[6] ^ lo
34461 var t1shi3 = s[7] ^ hi
34462 var t1slo8 = s[16] ^ lo
34463 var t1shi8 = s[17] ^ hi
34464 var t1slo13 = s[26] ^ lo
34465 var t1shi13 = s[27] ^ hi
34466 var t1slo18 = s[36] ^ lo
34467 var t1shi18 = s[37] ^ hi
34468 var t1slo23 = s[46] ^ lo
34469 var t1shi23 = s[47] ^ hi
34470 lo = lo3 ^ (lo0 << 1 | hi0 >>> 31)
34471 hi = hi3 ^ (hi0 << 1 | lo0 >>> 31)
34472 var t1slo4 = s[8] ^ lo
34473 var t1shi4 = s[9] ^ hi
34474 var t1slo9 = s[18] ^ lo
34475 var t1shi9 = s[19] ^ hi
34476 var t1slo14 = s[28] ^ lo
34477 var t1shi14 = s[29] ^ hi
34478 var t1slo19 = s[38] ^ lo
34479 var t1shi19 = s[39] ^ hi
34480 var t1slo24 = s[48] ^ lo
34481 var t1shi24 = s[49] ^ hi
34482
34483 // rho & pi
34484 var t2slo0 = t1slo0
34485 var t2shi0 = t1shi0
34486 var t2slo16 = (t1shi5 << 4 | t1slo5 >>> 28)
34487 var t2shi16 = (t1slo5 << 4 | t1shi5 >>> 28)
34488 var t2slo7 = (t1slo10 << 3 | t1shi10 >>> 29)
34489 var t2shi7 = (t1shi10 << 3 | t1slo10 >>> 29)
34490 var t2slo23 = (t1shi15 << 9 | t1slo15 >>> 23)
34491 var t2shi23 = (t1slo15 << 9 | t1shi15 >>> 23)
34492 var t2slo14 = (t1slo20 << 18 | t1shi20 >>> 14)
34493 var t2shi14 = (t1shi20 << 18 | t1slo20 >>> 14)
34494 var t2slo10 = (t1slo1 << 1 | t1shi1 >>> 31)
34495 var t2shi10 = (t1shi1 << 1 | t1slo1 >>> 31)
34496 var t2slo1 = (t1shi6 << 12 | t1slo6 >>> 20)
34497 var t2shi1 = (t1slo6 << 12 | t1shi6 >>> 20)
34498 var t2slo17 = (t1slo11 << 10 | t1shi11 >>> 22)
34499 var t2shi17 = (t1shi11 << 10 | t1slo11 >>> 22)
34500 var t2slo8 = (t1shi16 << 13 | t1slo16 >>> 19)
34501 var t2shi8 = (t1slo16 << 13 | t1shi16 >>> 19)
34502 var t2slo24 = (t1slo21 << 2 | t1shi21 >>> 30)
34503 var t2shi24 = (t1shi21 << 2 | t1slo21 >>> 30)
34504 var t2slo20 = (t1shi2 << 30 | t1slo2 >>> 2)
34505 var t2shi20 = (t1slo2 << 30 | t1shi2 >>> 2)
34506 var t2slo11 = (t1slo7 << 6 | t1shi7 >>> 26)
34507 var t2shi11 = (t1shi7 << 6 | t1slo7 >>> 26)
34508 var t2slo2 = (t1shi12 << 11 | t1slo12 >>> 21)
34509 var t2shi2 = (t1slo12 << 11 | t1shi12 >>> 21)
34510 var t2slo18 = (t1slo17 << 15 | t1shi17 >>> 17)
34511 var t2shi18 = (t1shi17 << 15 | t1slo17 >>> 17)
34512 var t2slo9 = (t1shi22 << 29 | t1slo22 >>> 3)
34513 var t2shi9 = (t1slo22 << 29 | t1shi22 >>> 3)
34514 var t2slo5 = (t1slo3 << 28 | t1shi3 >>> 4)
34515 var t2shi5 = (t1shi3 << 28 | t1slo3 >>> 4)
34516 var t2slo21 = (t1shi8 << 23 | t1slo8 >>> 9)
34517 var t2shi21 = (t1slo8 << 23 | t1shi8 >>> 9)
34518 var t2slo12 = (t1slo13 << 25 | t1shi13 >>> 7)
34519 var t2shi12 = (t1shi13 << 25 | t1slo13 >>> 7)
34520 var t2slo3 = (t1slo18 << 21 | t1shi18 >>> 11)
34521 var t2shi3 = (t1shi18 << 21 | t1slo18 >>> 11)
34522 var t2slo19 = (t1shi23 << 24 | t1slo23 >>> 8)
34523 var t2shi19 = (t1slo23 << 24 | t1shi23 >>> 8)
34524 var t2slo15 = (t1slo4 << 27 | t1shi4 >>> 5)
34525 var t2shi15 = (t1shi4 << 27 | t1slo4 >>> 5)
34526 var t2slo6 = (t1slo9 << 20 | t1shi9 >>> 12)
34527 var t2shi6 = (t1shi9 << 20 | t1slo9 >>> 12)
34528 var t2slo22 = (t1shi14 << 7 | t1slo14 >>> 25)
34529 var t2shi22 = (t1slo14 << 7 | t1shi14 >>> 25)
34530 var t2slo13 = (t1slo19 << 8 | t1shi19 >>> 24)
34531 var t2shi13 = (t1shi19 << 8 | t1slo19 >>> 24)
34532 var t2slo4 = (t1slo24 << 14 | t1shi24 >>> 18)
34533 var t2shi4 = (t1shi24 << 14 | t1slo24 >>> 18)
34534
34535 // chi
34536 s[0] = t2slo0 ^ (~t2slo1 & t2slo2)
34537 s[1] = t2shi0 ^ (~t2shi1 & t2shi2)
34538 s[10] = t2slo5 ^ (~t2slo6 & t2slo7)
34539 s[11] = t2shi5 ^ (~t2shi6 & t2shi7)
34540 s[20] = t2slo10 ^ (~t2slo11 & t2slo12)
34541 s[21] = t2shi10 ^ (~t2shi11 & t2shi12)
34542 s[30] = t2slo15 ^ (~t2slo16 & t2slo17)
34543 s[31] = t2shi15 ^ (~t2shi16 & t2shi17)
34544 s[40] = t2slo20 ^ (~t2slo21 & t2slo22)
34545 s[41] = t2shi20 ^ (~t2shi21 & t2shi22)
34546 s[2] = t2slo1 ^ (~t2slo2 & t2slo3)
34547 s[3] = t2shi1 ^ (~t2shi2 & t2shi3)
34548 s[12] = t2slo6 ^ (~t2slo7 & t2slo8)
34549 s[13] = t2shi6 ^ (~t2shi7 & t2shi8)
34550 s[22] = t2slo11 ^ (~t2slo12 & t2slo13)
34551 s[23] = t2shi11 ^ (~t2shi12 & t2shi13)
34552 s[32] = t2slo16 ^ (~t2slo17 & t2slo18)
34553 s[33] = t2shi16 ^ (~t2shi17 & t2shi18)
34554 s[42] = t2slo21 ^ (~t2slo22 & t2slo23)
34555 s[43] = t2shi21 ^ (~t2shi22 & t2shi23)
34556 s[4] = t2slo2 ^ (~t2slo3 & t2slo4)
34557 s[5] = t2shi2 ^ (~t2shi3 & t2shi4)
34558 s[14] = t2slo7 ^ (~t2slo8 & t2slo9)
34559 s[15] = t2shi7 ^ (~t2shi8 & t2shi9)
34560 s[24] = t2slo12 ^ (~t2slo13 & t2slo14)
34561 s[25] = t2shi12 ^ (~t2shi13 & t2shi14)
34562 s[34] = t2slo17 ^ (~t2slo18 & t2slo19)
34563 s[35] = t2shi17 ^ (~t2shi18 & t2shi19)
34564 s[44] = t2slo22 ^ (~t2slo23 & t2slo24)
34565 s[45] = t2shi22 ^ (~t2shi23 & t2shi24)
34566 s[6] = t2slo3 ^ (~t2slo4 & t2slo0)
34567 s[7] = t2shi3 ^ (~t2shi4 & t2shi0)
34568 s[16] = t2slo8 ^ (~t2slo9 & t2slo5)
34569 s[17] = t2shi8 ^ (~t2shi9 & t2shi5)
34570 s[26] = t2slo13 ^ (~t2slo14 & t2slo10)
34571 s[27] = t2shi13 ^ (~t2shi14 & t2shi10)
34572 s[36] = t2slo18 ^ (~t2slo19 & t2slo15)
34573 s[37] = t2shi18 ^ (~t2shi19 & t2shi15)
34574 s[46] = t2slo23 ^ (~t2slo24 & t2slo20)
34575 s[47] = t2shi23 ^ (~t2shi24 & t2shi20)
34576 s[8] = t2slo4 ^ (~t2slo0 & t2slo1)
34577 s[9] = t2shi4 ^ (~t2shi0 & t2shi1)
34578 s[18] = t2slo9 ^ (~t2slo5 & t2slo6)
34579 s[19] = t2shi9 ^ (~t2shi5 & t2shi6)
34580 s[28] = t2slo14 ^ (~t2slo10 & t2slo11)
34581 s[29] = t2shi14 ^ (~t2shi10 & t2shi11)
34582 s[38] = t2slo19 ^ (~t2slo15 & t2slo16)
34583 s[39] = t2shi19 ^ (~t2shi15 & t2shi16)
34584 s[48] = t2slo24 ^ (~t2slo20 & t2slo21)
34585 s[49] = t2shi24 ^ (~t2shi20 & t2shi21)
34586
34587 // iota
34588 s[0] ^= P1600_ROUND_CONSTANTS[round * 2]
34589 s[1] ^= P1600_ROUND_CONSTANTS[round * 2 + 1]
34590 }
34591}
34592
34593},{}],70:[function(require,module,exports){
34594(function (Buffer){
34595'use strict'
34596var keccakState = require('./keccak-state-unroll')
ebd8d4e8 34597
8b095871
IC
34598function Keccak () {
34599 // much faster than `new Array(50)`
34600 this.state = [
34601 0, 0, 0, 0, 0,
34602 0, 0, 0, 0, 0,
34603 0, 0, 0, 0, 0,
34604 0, 0, 0, 0, 0,
34605 0, 0, 0, 0, 0
34606 ]
ebd8d4e8 34607
8b095871
IC
34608 this.blockSize = null
34609 this.count = 0
34610 this.squeezing = false
34611}
ebd8d4e8 34612
8b095871
IC
34613Keccak.prototype.initialize = function (rate, capacity) {
34614 for (var i = 0; i < 50; ++i) this.state[i] = 0
34615 this.blockSize = rate / 8
34616 this.count = 0
34617 this.squeezing = false
34618}
34619
34620Keccak.prototype.absorb = function (data) {
34621 for (var i = 0; i < data.length; ++i) {
34622 this.state[~~(this.count / 4)] ^= data[i] << (8 * (this.count % 4))
34623 this.count += 1
34624 if (this.count === this.blockSize) {
34625 keccakState.p1600(this.state)
34626 this.count = 0
ebd8d4e8
IC
34627 }
34628 }
8b095871 34629}
ebd8d4e8 34630
8b095871
IC
34631Keccak.prototype.absorbLastFewBits = function (bits) {
34632 this.state[~~(this.count / 4)] ^= bits << (8 * (this.count % 4))
34633 if ((bits & 0x80) !== 0 && this.count === (this.blockSize - 1)) keccakState.p1600(this.state)
34634 this.state[~~((this.blockSize - 1) / 4)] ^= 0x80 << (8 * ((this.blockSize - 1) % 4))
34635 keccakState.p1600(this.state)
34636 this.count = 0
34637 this.squeezing = true
ebd8d4e8
IC
34638}
34639
8b095871
IC
34640Keccak.prototype.squeeze = function (length) {
34641 if (!this.squeezing) this.absorbLastFewBits(0x01)
ebd8d4e8 34642
8b095871
IC
34643 var output = Buffer.allocUnsafe(length)
34644 for (var i = 0; i < length; ++i) {
34645 output[i] = (this.state[~~(this.count / 4)] >>> (8 * (this.count % 4))) & 0xff
34646 this.count += 1
34647 if (this.count === this.blockSize) {
34648 keccakState.p1600(this.state)
34649 this.count = 0
ebd8d4e8 34650 }
8b095871 34651 }
ebd8d4e8 34652
8b095871
IC
34653 return output
34654}
ebd8d4e8 34655
8b095871
IC
34656Keccak.prototype.copy = function (dest) {
34657 for (var i = 0; i < 50; ++i) dest.state[i] = this.state[i]
34658 dest.blockSize = this.blockSize
34659 dest.count = this.count
34660 dest.squeezing = this.squeezing
34661}
ebd8d4e8 34662
8b095871 34663module.exports = Keccak
ebd8d4e8 34664
8b095871
IC
34665}).call(this,require("buffer").Buffer)
34666},{"./keccak-state-unroll":69,"buffer":5}],71:[function(require,module,exports){
34667(function (Buffer){
34668/*
34669CryptoJS v3.1.2
34670code.google.com/p/crypto-js
34671(c) 2009-2013 by Jeff Mott. All rights reserved.
34672code.google.com/p/crypto-js/wiki/License
34673*/
34674/** @preserve
34675(c) 2012 by Cédric Mesnil. All rights reserved.
ebd8d4e8 34676
8b095871 34677Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
ebd8d4e8 34678
8b095871
IC
34679 - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
34680 - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
34681
34682THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34683*/
34684
34685// constants table
34686var zl = [
34687 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
34688 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
34689 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
34690 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
34691 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
34692]
34693
34694var zr = [
34695 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
34696 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
34697 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
34698 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
34699 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
34700]
34701
34702var sl = [
34703 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
34704 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
34705 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
34706 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
34707 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
34708]
34709
34710var sr = [
34711 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
34712 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
34713 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
34714 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
34715 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
34716]
34717
34718var hl = [0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]
34719var hr = [0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]
34720
34721function bytesToWords (bytes) {
34722 var words = []
34723 for (var i = 0, b = 0; i < bytes.length; i++, b += 8) {
34724 words[b >>> 5] |= bytes[i] << (24 - b % 32)
34725 }
34726 return words
ebd8d4e8
IC
34727}
34728
8b095871
IC
34729function wordsToBytes (words) {
34730 var bytes = []
34731 for (var b = 0; b < words.length * 32; b += 8) {
34732 bytes.push((words[b >>> 5] >>> (24 - b % 32)) & 0xFF)
34733 }
34734 return bytes
ebd8d4e8
IC
34735}
34736
8b095871
IC
34737function processBlock (H, M, offset) {
34738 // swap endian
34739 for (var i = 0; i < 16; i++) {
34740 var offset_i = offset + i
34741 var M_offset_i = M[offset_i]
ebd8d4e8 34742
8b095871
IC
34743 // Swap
34744 M[offset_i] = (
34745 (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |
34746 (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)
34747 )
34748 }
ebd8d4e8 34749
8b095871
IC
34750 // Working variables
34751 var al, bl, cl, dl, el
34752 var ar, br, cr, dr, er
34753
34754 ar = al = H[0]
34755 br = bl = H[1]
34756 cr = cl = H[2]
34757 dr = dl = H[3]
34758 er = el = H[4]
34759
34760 // computation
34761 var t
34762 for (i = 0; i < 80; i += 1) {
34763 t = (al + M[offset + zl[i]]) | 0
34764 if (i < 16) {
34765 t += f1(bl, cl, dl) + hl[0]
34766 } else if (i < 32) {
34767 t += f2(bl, cl, dl) + hl[1]
34768 } else if (i < 48) {
34769 t += f3(bl, cl, dl) + hl[2]
34770 } else if (i < 64) {
34771 t += f4(bl, cl, dl) + hl[3]
34772 } else {// if (i<80) {
34773 t += f5(bl, cl, dl) + hl[4]
34774 }
34775 t = t | 0
34776 t = rotl(t, sl[i])
34777 t = (t + el) | 0
34778 al = el
34779 el = dl
34780 dl = rotl(cl, 10)
34781 cl = bl
34782 bl = t
34783
34784 t = (ar + M[offset + zr[i]]) | 0
34785 if (i < 16) {
34786 t += f5(br, cr, dr) + hr[0]
34787 } else if (i < 32) {
34788 t += f4(br, cr, dr) + hr[1]
34789 } else if (i < 48) {
34790 t += f3(br, cr, dr) + hr[2]
34791 } else if (i < 64) {
34792 t += f2(br, cr, dr) + hr[3]
34793 } else {// if (i<80) {
34794 t += f1(br, cr, dr) + hr[4]
34795 }
34796
34797 t = t | 0
34798 t = rotl(t, sr[i])
34799 t = (t + er) | 0
34800 ar = er
34801 er = dr
34802 dr = rotl(cr, 10)
34803 cr = br
34804 br = t
34805 }
34806
34807 // intermediate hash value
34808 t = (H[1] + cl + dr) | 0
34809 H[1] = (H[2] + dl + er) | 0
34810 H[2] = (H[3] + el + ar) | 0
34811 H[3] = (H[4] + al + br) | 0
34812 H[4] = (H[0] + bl + cr) | 0
34813 H[0] = t
ebd8d4e8
IC
34814}
34815
8b095871
IC
34816function f1 (x, y, z) {
34817 return ((x) ^ (y) ^ (z))
ebd8d4e8
IC
34818}
34819
8b095871
IC
34820function f2 (x, y, z) {
34821 return (((x) & (y)) | ((~x) & (z)))
34822}
ebd8d4e8 34823
8b095871
IC
34824function f3 (x, y, z) {
34825 return (((x) | (~(y))) ^ (z))
ebd8d4e8
IC
34826}
34827
8b095871
IC
34828function f4 (x, y, z) {
34829 return (((x) & (z)) | ((y) & (~(z))))
ebd8d4e8
IC
34830}
34831
8b095871
IC
34832function f5 (x, y, z) {
34833 return ((x) ^ ((y) | (~(z))))
ebd8d4e8
IC
34834}
34835
8b095871
IC
34836function rotl (x, n) {
34837 return (x << n) | (x >>> (32 - n))
34838}
ebd8d4e8 34839
8b095871
IC
34840function ripemd160 (message) {
34841 var H = [0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]
ebd8d4e8 34842
8b095871
IC
34843 if (typeof message === 'string') {
34844 message = new Buffer(message, 'utf8')
34845 }
ebd8d4e8 34846
8b095871 34847 var m = bytesToWords(message)
ebd8d4e8 34848
8b095871
IC
34849 var nBitsLeft = message.length * 8
34850 var nBitsTotal = message.length * 8
ebd8d4e8 34851
8b095871
IC
34852 // Add padding
34853 m[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32)
34854 m[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (
34855 (((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff) |
34856 (((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00)
34857 )
ebd8d4e8 34858
8b095871
IC
34859 for (var i = 0; i < m.length; i += 16) {
34860 processBlock(H, m, i)
ebd8d4e8
IC
34861 }
34862
8b095871
IC
34863 // swap endian
34864 for (i = 0; i < 5; i++) {
34865 // shortcut
34866 var H_i = H[i]
ebd8d4e8 34867
8b095871
IC
34868 // Swap
34869 H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |
34870 (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00)
ebd8d4e8
IC
34871 }
34872
8b095871
IC
34873 var digestbytes = wordsToBytes(H)
34874 return new Buffer(digestbytes)
ebd8d4e8
IC
34875}
34876
8b095871 34877module.exports = ripemd160
ebd8d4e8 34878
8b095871
IC
34879}).call(this,require("buffer").Buffer)
34880},{"buffer":5}],72:[function(require,module,exports){
34881(function (Buffer){
34882const assert = require('assert')
34883/**
34884 * RLP Encoding based on: https://github.com/ethereum/wiki/wiki/%5BEnglish%5D-RLP
34885 * This function takes in a data, convert it to buffer if not, and a length for recursion
34886 *
34887 * @param {Buffer,String,Integer,Array} data - will be converted to buffer
34888 * @returns {Buffer} - returns buffer of encoded data
34889 **/
34890exports.encode = function (input) {
34891 if (input instanceof Array) {
34892 var output = []
34893 for (var i = 0; i < input.length; i++) {
34894 output.push(exports.encode(input[i]))
34895 }
34896 var buf = Buffer.concat(output)
34897 return Buffer.concat([encodeLength(buf.length, 192), buf])
34898 } else {
34899 input = toBuffer(input)
34900 if (input.length === 1 && input[0] < 128) {
34901 return input
34902 } else {
34903 return Buffer.concat([encodeLength(input.length, 128), input])
34904 }
34905 }
ebd8d4e8
IC
34906}
34907
8b095871
IC
34908function safeParseInt (v, base) {
34909 if (v.slice(0, 2) === '00') {
34910 throw (new Error('invalid RLP: extra zeros'))
34911 }
ebd8d4e8 34912
8b095871 34913 return parseInt(v, base)
ebd8d4e8
IC
34914}
34915
8b095871
IC
34916function encodeLength (len, offset) {
34917 if (len < 56) {
34918 return new Buffer([len + offset])
34919 } else {
34920 var hexLength = intToHex(len)
34921 var lLength = hexLength.length / 2
34922 var firstByte = intToHex(offset + 55 + lLength)
34923 return new Buffer(firstByte + hexLength, 'hex')
34924 }
34925}
ebd8d4e8 34926
8b095871
IC
34927/**
34928 * RLP Decoding based on: {@link https://github.com/ethereum/wiki/wiki/%5BEnglish%5D-RLP|RLP}
34929 * @param {Buffer,String,Integer,Array} data - will be converted to buffer
34930 * @returns {Array} - returns decode Array of Buffers containg the original message
34931 **/
34932exports.decode = function (input, stream) {
34933 if (!input || input.length === 0) {
34934 return new Buffer([])
34935 }
ebd8d4e8 34936
8b095871
IC
34937 input = toBuffer(input)
34938 var decoded = _decode(input)
ab78acc6 34939
8b095871
IC
34940 if (stream) {
34941 return decoded
34942 }
ebd8d4e8 34943
8b095871
IC
34944 assert.equal(decoded.remainder.length, 0, 'invalid remainder')
34945 return decoded.data
ebd8d4e8
IC
34946}
34947
8b095871
IC
34948exports.getLength = function (input) {
34949 if (!input || input.length === 0) {
34950 return new Buffer([])
ab78acc6
IC
34951 }
34952
8b095871
IC
34953 input = toBuffer(input)
34954 var firstByte = input[0]
34955 if (firstByte <= 0x7f) {
34956 return input.length
34957 } else if (firstByte <= 0xb7) {
34958 return firstByte - 0x7f
34959 } else if (firstByte <= 0xbf) {
34960 return firstByte - 0xb6
34961 } else if (firstByte <= 0xf7) {
34962 // a list between 0-55 bytes long
34963 return firstByte - 0xbf
34964 } else {
34965 // a list over 55 bytes long
34966 var llength = firstByte - 0xf6
34967 var length = safeParseInt(input.slice(1, llength).toString('hex'), 16)
34968 return llength + length
34969 }
ebd8d4e8
IC
34970}
34971
8b095871
IC
34972function _decode (input) {
34973 var length, llength, data, innerRemainder, d
34974 var decoded = []
34975 var firstByte = input[0]
ebd8d4e8 34976
8b095871
IC
34977 if (firstByte <= 0x7f) {
34978 // a single byte whose value is in the [0x00, 0x7f] range, that byte is its own RLP encoding.
34979 return {
34980 data: input.slice(0, 1),
34981 remainder: input.slice(1)
34982 }
34983 } else if (firstByte <= 0xb7) {
34984 // string is 0-55 bytes long. A single byte with value 0x80 plus the length of the string followed by the string
34985 // The range of the first byte is [0x80, 0xb7]
34986 length = firstByte - 0x7f
ebd8d4e8 34987
8b095871
IC
34988 // set 0x80 null to 0
34989 if (firstByte === 0x80) {
34990 data = new Buffer([])
34991 } else {
34992 data = input.slice(1, length)
34993 }
ebd8d4e8 34994
8b095871
IC
34995 if (length === 2 && data[0] < 0x80) {
34996 throw new Error('invalid rlp encoding: byte must be less 0x80')
34997 }
ebd8d4e8 34998
8b095871
IC
34999 return {
35000 data: data,
35001 remainder: input.slice(length)
35002 }
35003 } else if (firstByte <= 0xbf) {
35004 llength = firstByte - 0xb6
35005 length = safeParseInt(input.slice(1, llength).toString('hex'), 16)
35006 data = input.slice(llength, length + llength)
35007 if (data.length < length) {
35008 throw (new Error('invalid RLP'))
35009 }
ebd8d4e8 35010
8b095871
IC
35011 return {
35012 data: data,
35013 remainder: input.slice(length + llength)
35014 }
35015 } else if (firstByte <= 0xf7) {
35016 // a list between 0-55 bytes long
35017 length = firstByte - 0xbf
35018 innerRemainder = input.slice(1, length)
35019 while (innerRemainder.length) {
35020 d = _decode(innerRemainder)
35021 decoded.push(d.data)
35022 innerRemainder = d.remainder
35023 }
ebd8d4e8 35024
8b095871
IC
35025 return {
35026 data: decoded,
35027 remainder: input.slice(length)
35028 }
35029 } else {
35030 // a list over 55 bytes long
35031 llength = firstByte - 0xf6
35032 length = safeParseInt(input.slice(1, llength).toString('hex'), 16)
35033 var totalLength = llength + length
35034 if (totalLength > input.length) {
35035 throw new Error('invalid rlp: total length is larger than the data')
35036 }
ab78acc6 35037
8b095871
IC
35038 innerRemainder = input.slice(llength, totalLength)
35039 if (innerRemainder.length === 0) {
35040 throw new Error('invalid rlp, List has a invalid length')
35041 }
ab78acc6 35042
8b095871
IC
35043 while (innerRemainder.length) {
35044 d = _decode(innerRemainder)
35045 decoded.push(d.data)
35046 innerRemainder = d.remainder
35047 }
35048 return {
35049 data: decoded,
35050 remainder: input.slice(totalLength)
35051 }
ab78acc6 35052 }
8b095871 35053}
ab78acc6 35054
8b095871
IC
35055function isHexPrefixed (str) {
35056 return str.slice(0, 2) === '0x'
ab78acc6
IC
35057}
35058
8b095871
IC
35059// Removes 0x from a given String
35060function stripHexPrefix (str) {
35061 if (typeof str !== 'string') {
35062 return str
35063 }
35064 return isHexPrefixed(str) ? str.slice(2) : str
35065}
ab78acc6 35066
8b095871
IC
35067function intToHex (i) {
35068 var hex = i.toString(16)
35069 if (hex.length % 2) {
35070 hex = '0' + hex
ab78acc6
IC
35071 }
35072
8b095871 35073 return hex
ebd8d4e8
IC
35074}
35075
8b095871
IC
35076function padToEven (a) {
35077 if (a.length % 2) a = '0' + a
35078 return a
ebd8d4e8
IC
35079}
35080
8b095871
IC
35081function intToBuffer (i) {
35082 var hex = intToHex(i)
35083 return new Buffer(hex, 'hex')
ebd8d4e8
IC
35084}
35085
8b095871
IC
35086function toBuffer (v) {
35087 if (!Buffer.isBuffer(v)) {
35088 if (typeof v === 'string') {
35089 if (isHexPrefixed(v)) {
35090 v = new Buffer(padToEven(stripHexPrefix(v)), 'hex')
35091 } else {
35092 v = new Buffer(v)
35093 }
35094 } else if (typeof v === 'number') {
35095 if (!v) {
35096 v = new Buffer([])
35097 } else {
35098 v = intToBuffer(v)
35099 }
35100 } else if (v === null || v === undefined) {
35101 v = new Buffer([])
35102 } else if (v.toArray) {
35103 // converts a BN to a Buffer
35104 v = new Buffer(v.toArray())
35105 } else {
35106 throw new Error('invalid type')
35107 }
35108 }
35109 return v
ebd8d4e8
IC
35110}
35111
8b095871
IC
35112}).call(this,require("buffer").Buffer)
35113},{"assert":1,"buffer":5}],73:[function(require,module,exports){
35114'use strict'
35115module.exports = require('./lib')(require('./lib/elliptic'))
ebd8d4e8 35116
8b095871
IC
35117},{"./lib":77,"./lib/elliptic":76}],74:[function(require,module,exports){
35118(function (Buffer){
35119'use strict'
35120var toString = Object.prototype.toString
ebd8d4e8 35121
8b095871
IC
35122// TypeError
35123exports.isArray = function (value, message) {
35124 if (!Array.isArray(value)) throw TypeError(message)
ebd8d4e8
IC
35125}
35126
8b095871
IC
35127exports.isBoolean = function (value, message) {
35128 if (toString.call(value) !== '[object Boolean]') throw TypeError(message)
35129}
ebd8d4e8 35130
8b095871
IC
35131exports.isBuffer = function (value, message) {
35132 if (!Buffer.isBuffer(value)) throw TypeError(message)
ebd8d4e8
IC
35133}
35134
8b095871
IC
35135exports.isFunction = function (value, message) {
35136 if (toString.call(value) !== '[object Function]') throw TypeError(message)
ebd8d4e8
IC
35137}
35138
8b095871
IC
35139exports.isNumber = function (value, message) {
35140 if (toString.call(value) !== '[object Number]') throw TypeError(message)
35141}
ab78acc6 35142
8b095871
IC
35143exports.isObject = function (value, message) {
35144 if (toString.call(value) !== '[object Object]') throw TypeError(message)
35145}
ebd8d4e8 35146
8b095871
IC
35147// RangeError
35148exports.isBufferLength = function (buffer, length, message) {
35149 if (buffer.length !== length) throw RangeError(message)
35150}
ebd8d4e8 35151
8b095871
IC
35152exports.isBufferLength2 = function (buffer, length1, length2, message) {
35153 if (buffer.length !== length1 && buffer.length !== length2) throw RangeError(message)
ab78acc6
IC
35154}
35155
8b095871
IC
35156exports.isLengthGTZero = function (value, message) {
35157 if (value.length === 0) throw RangeError(message)
ebd8d4e8
IC
35158}
35159
8b095871
IC
35160exports.isNumberInInterval = function (number, x, y, message) {
35161 if (number <= x || number >= y) throw RangeError(message)
ebd8d4e8
IC
35162}
35163
8b095871
IC
35164}).call(this,{"isBuffer":require("../../../../../.nvm/versions/node/v7.5.0/lib/node_modules/browserify/node_modules/is-buffer/index.js")})
35165},{"../../../../../.nvm/versions/node/v7.5.0/lib/node_modules/browserify/node_modules/is-buffer/index.js":10}],75:[function(require,module,exports){
ebd8d4e8 35166(function (Buffer){
8b095871
IC
35167'use strict'
35168var bip66 = require('bip66')
35169
35170var EC_PRIVKEY_EXPORT_DER_COMPRESSED = new Buffer([
35171 // begin
35172 0x30, 0x81, 0xd3, 0x02, 0x01, 0x01, 0x04, 0x20,
35173 // private key
35174 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
35175 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
35176 // middle
35177 0xa0, 0x81, 0x85, 0x30, 0x81, 0x82, 0x02, 0x01, 0x01, 0x30, 0x2c, 0x06, 0x07, 0x2a, 0x86, 0x48,
35178 0xcE, 0x3d, 0x01, 0x01, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
35179 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
35180 0xff, 0xff, 0xfE, 0xff, 0xff, 0xfc, 0x2f, 0x30, 0x06, 0x04, 0x01, 0x00, 0x04, 0x01, 0x07, 0x04,
35181 0x21, 0x02, 0x79, 0xbE, 0x66, 0x7E, 0xf9, 0xdc, 0xbb, 0xac, 0x55, 0xa0, 0x62, 0x95, 0xcE, 0x87,
35182 0x0b, 0x07, 0x02, 0x9b, 0xfc, 0xdb, 0x2d, 0xcE, 0x28, 0xd9, 0x59, 0xf2, 0x81, 0x5b, 0x16, 0xf8,
35183 0x17, 0x98, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
35184 0xff, 0xff, 0xff, 0xff, 0xfE, 0xba, 0xaE, 0xdc, 0xE6, 0xaf, 0x48, 0xa0, 0x3b, 0xbf, 0xd2, 0x5E,
35185 0x8c, 0xd0, 0x36, 0x41, 0x41, 0x02, 0x01, 0x01, 0xa1, 0x24, 0x03, 0x22, 0x00,
35186 // public key
35187 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
35188 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
35189 0x00
35190])
35191
35192var EC_PRIVKEY_EXPORT_DER_UNCOMPRESSED = new Buffer([
35193 // begin
35194 0x30, 0x82, 0x01, 0x13, 0x02, 0x01, 0x01, 0x04, 0x20,
35195 // private key
35196 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
35197 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
35198 // middle
35199 0xa0, 0x81, 0xa5, 0x30, 0x81, 0xa2, 0x02, 0x01, 0x01, 0x30, 0x2c, 0x06, 0x07, 0x2a, 0x86, 0x48,
35200 0xcE, 0x3d, 0x01, 0x01, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
35201 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
35202 0xff, 0xff, 0xfE, 0xff, 0xff, 0xfc, 0x2f, 0x30, 0x06, 0x04, 0x01, 0x00, 0x04, 0x01, 0x07, 0x04,
35203 0x41, 0x04, 0x79, 0xbE, 0x66, 0x7E, 0xf9, 0xdc, 0xbb, 0xac, 0x55, 0xa0, 0x62, 0x95, 0xcE, 0x87,
35204 0x0b, 0x07, 0x02, 0x9b, 0xfc, 0xdb, 0x2d, 0xcE, 0x28, 0xd9, 0x59, 0xf2, 0x81, 0x5b, 0x16, 0xf8,
35205 0x17, 0x98, 0x48, 0x3a, 0xda, 0x77, 0x26, 0xa3, 0xc4, 0x65, 0x5d, 0xa4, 0xfb, 0xfc, 0x0E, 0x11,
35206 0x08, 0xa8, 0xfd, 0x17, 0xb4, 0x48, 0xa6, 0x85, 0x54, 0x19, 0x9c, 0x47, 0xd0, 0x8f, 0xfb, 0x10,
35207 0xd4, 0xb8, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
35208 0xff, 0xff, 0xff, 0xff, 0xfE, 0xba, 0xaE, 0xdc, 0xE6, 0xaf, 0x48, 0xa0, 0x3b, 0xbf, 0xd2, 0x5E,
35209 0x8c, 0xd0, 0x36, 0x41, 0x41, 0x02, 0x01, 0x01, 0xa1, 0x44, 0x03, 0x42, 0x00,
35210 // public key
35211 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
35212 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
35213 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
35214 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
35215 0x00
35216])
35217
35218var ZERO_BUFFER_32 = new Buffer([
35219 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
35220 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
35221])
35222
35223exports.privateKeyExport = function (privateKey, publicKey, compressed) {
35224 var result = new Buffer(compressed ? EC_PRIVKEY_EXPORT_DER_COMPRESSED : EC_PRIVKEY_EXPORT_DER_UNCOMPRESSED)
35225 privateKey.copy(result, compressed ? 8 : 9)
35226 publicKey.copy(result, compressed ? 181 : 214)
35227 return result
35228}
35229
35230exports.privateKeyImport = function (privateKey) {
35231 var length = privateKey.length
35232
35233 // sequence header
35234 var index = 0
35235 if (length < index + 1 || privateKey[index] !== 0x30) return
35236 index += 1
35237
35238 // sequence length constructor
35239 if (length < index + 1 || !(privateKey[index] & 0x80)) return
35240
35241 var lenb = privateKey[index] & 0x7f
35242 index += 1
35243 if (lenb < 1 || lenb > 2) return
35244 if (length < index + lenb) return
35245
35246 // sequence length
35247 var len = privateKey[index + lenb - 1] | (lenb > 1 ? privateKey[index + lenb - 2] << 8 : 0)
35248 index += lenb
35249 if (length < index + len) return
35250
35251 // sequence element 0: version number (=1)
35252 if (length < index + 3 ||
35253 privateKey[index] !== 0x02 ||
35254 privateKey[index + 1] !== 0x01 ||
35255 privateKey[index + 2] !== 0x01) {
35256 return
35257 }
35258 index += 3
ab78acc6 35259
8b095871
IC
35260 // sequence element 1: octet string, up to 32 bytes
35261 if (length < index + 2 ||
35262 privateKey[index] !== 0x04 ||
35263 privateKey[index + 1] > 0x20 ||
35264 length < index + 2 + privateKey[index + 1]) {
35265 return
35266 }
ab78acc6 35267
8b095871 35268 return privateKey.slice(index + 2, index + 2 + privateKey[index + 1])
ab78acc6 35269}
ebd8d4e8 35270
8b095871
IC
35271exports.signatureExport = function (sigObj) {
35272 var r = Buffer.concat([new Buffer([0]), sigObj.r])
35273 for (var lenR = 33, posR = 0; lenR > 1 && r[posR] === 0x00 && !(r[posR + 1] & 0x80); --lenR, ++posR);
ebd8d4e8 35274
8b095871
IC
35275 var s = Buffer.concat([new Buffer([0]), sigObj.s])
35276 for (var lenS = 33, posS = 0; lenS > 1 && s[posS] === 0x00 && !(s[posS + 1] & 0x80); --lenS, ++posS);
ab78acc6 35277
8b095871
IC
35278 return bip66.encode(r.slice(posR), s.slice(posS))
35279}
ab78acc6 35280
8b095871
IC
35281exports.signatureImport = function (sig) {
35282 var r = new Buffer(ZERO_BUFFER_32)
35283 var s = new Buffer(ZERO_BUFFER_32)
ab78acc6 35284
8b095871
IC
35285 try {
35286 var sigObj = bip66.decode(sig)
35287 if (sigObj.r.length === 33 && sigObj.r[0] === 0x00) sigObj.r = sigObj.r.slice(1)
35288 if (sigObj.r.length > 32) throw new Error('R length is too long')
35289 if (sigObj.s.length === 33 && sigObj.s[0] === 0x00) sigObj.s = sigObj.s.slice(1)
35290 if (sigObj.s.length > 32) throw new Error('S length is too long')
35291 } catch (err) {
35292 return
ab78acc6
IC
35293 }
35294
8b095871
IC
35295 sigObj.r.copy(r, 32 - sigObj.r.length)
35296 sigObj.s.copy(s, 32 - sigObj.s.length)
ab78acc6 35297
8b095871
IC
35298 return { r: r, s: s }
35299}
ab78acc6 35300
8b095871
IC
35301exports.signatureImportLax = function (sig) {
35302 var r = new Buffer(ZERO_BUFFER_32)
35303 var s = new Buffer(ZERO_BUFFER_32)
ab78acc6 35304
8b095871
IC
35305 var length = sig.length
35306 var index = 0
ab78acc6 35307
8b095871
IC
35308 // sequence tag byte
35309 if (sig[index++] !== 0x30) return
35310
35311 // sequence length byte
35312 var lenbyte = sig[index++]
35313 if (lenbyte & 0x80) {
35314 index += lenbyte - 0x80
35315 if (index > length) return
ab78acc6
IC
35316 }
35317
8b095871
IC
35318 // sequence tag byte for r
35319 if (sig[index++] !== 0x02) return
35320
35321 // length for r
35322 var rlen = sig[index++]
35323 if (rlen & 0x80) {
35324 lenbyte = rlen - 0x80
35325 if (index + lenbyte > length) return
35326 for (; lenbyte > 0 && sig[index] === 0x00; index += 1, lenbyte -= 1);
35327 for (rlen = 0; lenbyte > 0; index += 1, lenbyte -= 1) rlen = (rlen << 8) + sig[index]
ab78acc6 35328 }
8b095871
IC
35329 if (rlen > length - index) return
35330 var rindex = index
35331 index += rlen
ab78acc6 35332
8b095871
IC
35333 // sequence tag byte for s
35334 if (sig[index++] !== 0x02) return
ab78acc6 35335
8b095871
IC
35336 // length for s
35337 var slen = sig[index++]
35338 if (slen & 0x80) {
35339 lenbyte = slen - 0x80
35340 if (index + lenbyte > length) return
35341 for (; lenbyte > 0 && sig[index] === 0x00; index += 1, lenbyte -= 1);
35342 for (slen = 0; lenbyte > 0; index += 1, lenbyte -= 1) slen = (slen << 8) + sig[index]
ab78acc6 35343 }
8b095871
IC
35344 if (slen > length - index) return
35345 var sindex = index
35346 index += slen
ab78acc6 35347
8b095871
IC
35348 // ignore leading zeros in r
35349 for (; rlen > 0 && sig[rindex] === 0x00; rlen -= 1, rindex += 1);
35350 // copy r value
35351 if (rlen > 32) return
35352 var rvalue = sig.slice(rindex, rindex + rlen)
35353 rvalue.copy(r, 32 - rvalue.length)
ab78acc6 35354
8b095871
IC
35355 // ignore leading zeros in s
35356 for (; slen > 0 && sig[sindex] === 0x00; slen -= 1, sindex += 1);
35357 // copy s value
35358 if (slen > 32) return
35359 var svalue = sig.slice(sindex, sindex + slen)
35360 svalue.copy(s, 32 - svalue.length)
35361
35362 return { r: r, s: s }
ab78acc6
IC
35363}
35364
8b095871
IC
35365}).call(this,require("buffer").Buffer)
35366},{"bip66":32,"buffer":5}],76:[function(require,module,exports){
35367(function (Buffer){
35368'use strict'
35369var createHash = require('create-hash')
35370var BN = require('bn.js')
35371var EC = require('elliptic').ec
35372
35373var messages = require('../messages.json')
35374
35375var ec = new EC('secp256k1')
35376var ecparams = ec.curve
35377
35378function loadCompressedPublicKey (first, xBuffer) {
35379 var x = new BN(xBuffer)
35380
35381 // overflow
35382 if (x.cmp(ecparams.p) >= 0) return null
35383 x = x.toRed(ecparams.red)
35384
35385 // compute corresponding Y
35386 var y = x.redSqr().redIMul(x).redIAdd(ecparams.b).redSqrt()
35387 if ((first === 0x03) !== y.isOdd()) y = y.redNeg()
35388
35389 return ec.keyPair({ pub: { x: x, y: y } })
ebd8d4e8
IC
35390}
35391
8b095871
IC
35392function loadUncompressedPublicKey (first, xBuffer, yBuffer) {
35393 var x = new BN(xBuffer)
35394 var y = new BN(yBuffer)
ebd8d4e8 35395
8b095871
IC
35396 // overflow
35397 if (x.cmp(ecparams.p) >= 0 || y.cmp(ecparams.p) >= 0) return null
ebd8d4e8 35398
8b095871
IC
35399 x = x.toRed(ecparams.red)
35400 y = y.toRed(ecparams.red)
ebd8d4e8 35401
8b095871
IC
35402 // is odd flag
35403 if ((first === 0x06 || first === 0x07) && y.isOdd() !== (first === 0x07)) return null
ab78acc6 35404
8b095871
IC
35405 // x*x*x + b = y*y
35406 var x3 = x.redSqr().redIMul(x)
35407 if (!y.redSqr().redISub(x3.redIAdd(ecparams.b)).isZero()) return null
ebd8d4e8 35408
8b095871 35409 return ec.keyPair({ pub: { x: x, y: y } })
ebd8d4e8
IC
35410}
35411
8b095871
IC
35412function loadPublicKey (publicKey) {
35413 var first = publicKey[0]
35414 switch (first) {
35415 case 0x02:
35416 case 0x03:
35417 if (publicKey.length !== 33) return null
35418 return loadCompressedPublicKey(first, publicKey.slice(1, 33))
35419 case 0x04:
35420 case 0x06:
35421 case 0x07:
35422 if (publicKey.length !== 65) return null
35423 return loadUncompressedPublicKey(first, publicKey.slice(1, 33), publicKey.slice(33, 65))
35424 default:
35425 return null
ebd8d4e8 35426 }
8b095871 35427}
ebd8d4e8 35428
8b095871
IC
35429exports.privateKeyVerify = function (privateKey) {
35430 var bn = new BN(privateKey)
35431 return bn.cmp(ecparams.n) < 0 && !bn.isZero()
35432}
ebd8d4e8 35433
8b095871
IC
35434exports.privateKeyExport = function (privateKey, compressed) {
35435 var d = new BN(privateKey)
35436 if (d.cmp(ecparams.n) >= 0 || d.isZero()) throw new Error(messages.EC_PRIVATE_KEY_EXPORT_DER_FAIL)
ab78acc6 35437
8b095871 35438 return new Buffer(ec.keyFromPrivate(privateKey).getPublic(compressed, true))
ebd8d4e8
IC
35439}
35440
8b095871
IC
35441exports.privateKeyTweakAdd = function (privateKey, tweak) {
35442 var bn = new BN(tweak)
35443 if (bn.cmp(ecparams.n) >= 0) throw new Error(messages.EC_PRIVATE_KEY_TWEAK_ADD_FAIL)
ab78acc6 35444
8b095871
IC
35445 bn.iadd(new BN(privateKey))
35446 if (bn.cmp(ecparams.n) >= 0) bn.isub(ecparams.n)
35447 if (bn.isZero()) throw new Error(messages.EC_PRIVATE_KEY_TWEAK_ADD_FAIL)
ab78acc6 35448
8b095871
IC
35449 return bn.toArrayLike(Buffer, 'be', 32)
35450}
35451
35452exports.privateKeyTweakMul = function (privateKey, tweak) {
35453 var bn = new BN(tweak)
35454 if (bn.cmp(ecparams.n) >= 0 || bn.isZero()) throw new Error(messages.EC_PRIVATE_KEY_TWEAK_MUL_FAIL)
35455
35456 bn.imul(new BN(privateKey))
35457 if (bn.cmp(ecparams.n)) bn = bn.umod(ecparams.n)
35458
35459 return bn.toArrayLike(Buffer, 'be', 32)
35460}
35461
35462exports.publicKeyCreate = function (privateKey, compressed) {
35463 var d = new BN(privateKey)
35464 if (d.cmp(ecparams.n) >= 0 || d.isZero()) throw new Error(messages.EC_PUBLIC_KEY_CREATE_FAIL)
35465
35466 return new Buffer(ec.keyFromPrivate(privateKey).getPublic(compressed, true))
35467}
35468
35469exports.publicKeyConvert = function (publicKey, compressed) {
35470 var pair = loadPublicKey(publicKey)
35471 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
ab78acc6 35472
8b095871 35473 return new Buffer(pair.getPublic(compressed, true))
ab78acc6
IC
35474}
35475
8b095871
IC
35476exports.publicKeyVerify = function (publicKey) {
35477 return loadPublicKey(publicKey) !== null
35478}
ab78acc6 35479
8b095871
IC
35480exports.publicKeyTweakAdd = function (publicKey, tweak, compressed) {
35481 var pair = loadPublicKey(publicKey)
35482 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
ab78acc6 35483
8b095871
IC
35484 tweak = new BN(tweak)
35485 if (tweak.cmp(ecparams.n) >= 0) throw new Error(messages.EC_PUBLIC_KEY_TWEAK_ADD_FAIL)
ab78acc6 35486
8b095871
IC
35487 return new Buffer(ecparams.g.mul(tweak).add(pair.pub).encode(true, compressed))
35488}
ab78acc6 35489
8b095871
IC
35490exports.publicKeyTweakMul = function (publicKey, tweak, compressed) {
35491 var pair = loadPublicKey(publicKey)
35492 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
ab78acc6 35493
8b095871
IC
35494 tweak = new BN(tweak)
35495 if (tweak.cmp(ecparams.n) >= 0 || tweak.isZero()) throw new Error(messages.EC_PUBLIC_KEY_TWEAK_MUL_FAIL)
ab78acc6 35496
8b095871
IC
35497 return new Buffer(pair.pub.mul(tweak).encode(true, compressed))
35498}
ab78acc6 35499
8b095871
IC
35500exports.publicKeyCombine = function (publicKeys, compressed) {
35501 var pairs = new Array(publicKeys.length)
35502 for (var i = 0; i < publicKeys.length; ++i) {
35503 pairs[i] = loadPublicKey(publicKeys[i])
35504 if (pairs[i] === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
ab78acc6
IC
35505 }
35506
8b095871
IC
35507 var point = pairs[0].pub
35508 for (var j = 1; j < pairs.length; ++j) point = point.add(pairs[j].pub)
35509 if (point.isInfinity()) throw new Error(messages.EC_PUBLIC_KEY_COMBINE_FAIL)
ab78acc6 35510
8b095871
IC
35511 return new Buffer(point.encode(true, compressed))
35512}
ab78acc6 35513
8b095871
IC
35514exports.signatureNormalize = function (signature) {
35515 var r = new BN(signature.slice(0, 32))
35516 var s = new BN(signature.slice(32, 64))
35517 if (r.cmp(ecparams.n) >= 0 || s.cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL)
35518
35519 var result = new Buffer(signature)
35520 if (s.cmp(ec.nh) === 1) ecparams.n.sub(s).toArrayLike(Buffer, 'be', 32).copy(result, 32)
35521
35522 return result
ab78acc6
IC
35523}
35524
8b095871
IC
35525exports.signatureExport = function (signature) {
35526 var r = signature.slice(0, 32)
35527 var s = signature.slice(32, 64)
35528 if (new BN(r).cmp(ecparams.n) >= 0 || new BN(s).cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL)
35529
35530 return { r: r, s: s }
ab78acc6
IC
35531}
35532
8b095871
IC
35533exports.signatureImport = function (sigObj) {
35534 var r = new BN(sigObj.r)
35535 if (r.cmp(ecparams.n) >= 0) r = new BN(0)
35536
35537 var s = new BN(sigObj.s)
35538 if (s.cmp(ecparams.n) >= 0) s = new BN(0)
35539
35540 return Buffer.concat([
35541 r.toArrayLike(Buffer, 'be', 32),
35542 s.toArrayLike(Buffer, 'be', 32)
35543 ])
ab78acc6
IC
35544}
35545
8b095871
IC
35546exports.sign = function (message, privateKey, noncefn, data) {
35547 if (typeof noncefn === 'function') {
35548 var getNonce = noncefn
35549 noncefn = function (counter) {
35550 var nonce = getNonce(message, privateKey, null, data, counter)
35551 if (!Buffer.isBuffer(nonce) || nonce.length !== 32) throw new Error(messages.ECDSA_SIGN_FAIL)
ebd8d4e8 35552
8b095871
IC
35553 return new BN(nonce)
35554 }
ab78acc6 35555 }
ebd8d4e8 35556
8b095871
IC
35557 var d = new BN(privateKey)
35558 if (d.cmp(ecparams.n) >= 0 || d.isZero()) throw new Error(messages.ECDSA_SIGN_FAIL)
ebd8d4e8 35559
8b095871
IC
35560 var result = ec.sign(message, privateKey, { canonical: true, k: noncefn, pers: data })
35561 return {
35562 signature: Buffer.concat([
35563 result.r.toArrayLike(Buffer, 'be', 32),
35564 result.s.toArrayLike(Buffer, 'be', 32)
35565 ]),
35566 recovery: result.recoveryParam
ebd8d4e8 35567 }
8b095871 35568}
ab78acc6 35569
8b095871
IC
35570exports.verify = function (message, signature, publicKey) {
35571 var sigObj = {r: signature.slice(0, 32), s: signature.slice(32, 64)}
ab78acc6 35572
8b095871
IC
35573 var sigr = new BN(sigObj.r)
35574 var sigs = new BN(sigObj.s)
35575 if (sigr.cmp(ecparams.n) >= 0 || sigs.cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL)
35576 if (sigs.cmp(ec.nh) === 1 || sigr.isZero() || sigs.isZero()) return false
ab78acc6 35577
8b095871
IC
35578 var pair = loadPublicKey(publicKey)
35579 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
ebd8d4e8 35580
8b095871
IC
35581 return ec.verify(message, sigObj, {x: pair.pub.x, y: pair.pub.y})
35582}
ebd8d4e8 35583
8b095871
IC
35584exports.recover = function (message, signature, recovery, compressed) {
35585 var sigObj = {r: signature.slice(0, 32), s: signature.slice(32, 64)}
ebd8d4e8 35586
8b095871
IC
35587 var sigr = new BN(sigObj.r)
35588 var sigs = new BN(sigObj.s)
35589 if (sigr.cmp(ecparams.n) >= 0 || sigs.cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL)
ebd8d4e8 35590
8b095871
IC
35591 try {
35592 if (sigr.isZero() || sigs.isZero()) throw new Error()
ebd8d4e8 35593
8b095871
IC
35594 var point = ec.recoverPubKey(message, sigObj, recovery)
35595 return new Buffer(point.encode(true, compressed))
35596 } catch (err) {
35597 throw new Error(messages.ECDSA_RECOVER_FAIL)
35598 }
ebd8d4e8
IC
35599}
35600
8b095871
IC
35601exports.ecdh = function (publicKey, privateKey) {
35602 var shared = exports.ecdhUnsafe(publicKey, privateKey, true)
35603 return createHash('sha256').update(shared).digest()
ebd8d4e8
IC
35604}
35605
8b095871
IC
35606exports.ecdhUnsafe = function (publicKey, privateKey, compressed) {
35607 var pair = loadPublicKey(publicKey)
35608 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
ab78acc6 35609
8b095871
IC
35610 var scalar = new BN(privateKey)
35611 if (scalar.cmp(ecparams.n) >= 0 || scalar.isZero()) throw new Error(messages.ECDH_FAIL)
35612
35613 return new Buffer(pair.pub.mul(scalar).encode(true, compressed))
ab78acc6
IC
35614}
35615
8b095871
IC
35616}).call(this,require("buffer").Buffer)
35617},{"../messages.json":78,"bn.js":33,"buffer":5,"create-hash":36,"elliptic":39}],77:[function(require,module,exports){
35618'use strict'
35619var assert = require('./assert')
35620var der = require('./der')
35621var messages = require('./messages.json')
ab78acc6 35622
8b095871
IC
35623function initCompressedValue (value, defaultValue) {
35624 if (value === undefined) return defaultValue
ab78acc6 35625
8b095871
IC
35626 assert.isBoolean(value, messages.COMPRESSED_TYPE_INVALID)
35627 return value
ab78acc6
IC
35628}
35629
8b095871
IC
35630module.exports = function (secp256k1) {
35631 return {
35632 privateKeyVerify: function (privateKey) {
35633 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
35634 return privateKey.length === 32 && secp256k1.privateKeyVerify(privateKey)
35635 },
ab78acc6 35636
8b095871
IC
35637 privateKeyExport: function (privateKey, compressed) {
35638 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
35639 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
ab78acc6 35640
8b095871
IC
35641 compressed = initCompressedValue(compressed, true)
35642 var publicKey = secp256k1.privateKeyExport(privateKey, compressed)
ab78acc6 35643
8b095871
IC
35644 return der.privateKeyExport(privateKey, publicKey, compressed)
35645 },
ab78acc6 35646
8b095871
IC
35647 privateKeyImport: function (privateKey) {
35648 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
ab78acc6 35649
8b095871
IC
35650 privateKey = der.privateKeyImport(privateKey)
35651 if (privateKey && privateKey.length === 32 && secp256k1.privateKeyVerify(privateKey)) return privateKey
ab78acc6 35652
8b095871
IC
35653 throw new Error(messages.EC_PRIVATE_KEY_IMPORT_DER_FAIL)
35654 },
ab78acc6 35655
8b095871
IC
35656 privateKeyTweakAdd: function (privateKey, tweak) {
35657 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
35658 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
ab78acc6 35659
8b095871
IC
35660 assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID)
35661 assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID)
ab78acc6 35662
8b095871
IC
35663 return secp256k1.privateKeyTweakAdd(privateKey, tweak)
35664 },
ab78acc6 35665
8b095871
IC
35666 privateKeyTweakMul: function (privateKey, tweak) {
35667 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
35668 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
ab78acc6 35669
8b095871
IC
35670 assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID)
35671 assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID)
ab78acc6 35672
8b095871
IC
35673 return secp256k1.privateKeyTweakMul(privateKey, tweak)
35674 },
ab78acc6 35675
8b095871
IC
35676 publicKeyCreate: function (privateKey, compressed) {
35677 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
35678 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
ab78acc6 35679
8b095871 35680 compressed = initCompressedValue(compressed, true)
ab78acc6 35681
8b095871
IC
35682 return secp256k1.publicKeyCreate(privateKey, compressed)
35683 },
ab78acc6 35684
8b095871
IC
35685 publicKeyConvert: function (publicKey, compressed) {
35686 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
35687 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
ab78acc6 35688
8b095871
IC
35689 compressed = initCompressedValue(compressed, true)
35690
35691 return secp256k1.publicKeyConvert(publicKey, compressed)
35692 },
35693
35694 publicKeyVerify: function (publicKey) {
35695 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
35696 return secp256k1.publicKeyVerify(publicKey)
35697 },
35698
35699 publicKeyTweakAdd: function (publicKey, tweak, compressed) {
35700 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
35701 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
35702
35703 assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID)
35704 assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID)
35705
35706 compressed = initCompressedValue(compressed, true)
35707
35708 return secp256k1.publicKeyTweakAdd(publicKey, tweak, compressed)
35709 },
35710
35711 publicKeyTweakMul: function (publicKey, tweak, compressed) {
35712 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
35713 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
35714
35715 assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID)
35716 assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID)
35717
35718 compressed = initCompressedValue(compressed, true)
35719
35720 return secp256k1.publicKeyTweakMul(publicKey, tweak, compressed)
35721 },
35722
35723 publicKeyCombine: function (publicKeys, compressed) {
35724 assert.isArray(publicKeys, messages.EC_PUBLIC_KEYS_TYPE_INVALID)
35725 assert.isLengthGTZero(publicKeys, messages.EC_PUBLIC_KEYS_LENGTH_INVALID)
35726 for (var i = 0; i < publicKeys.length; ++i) {
35727 assert.isBuffer(publicKeys[i], messages.EC_PUBLIC_KEY_TYPE_INVALID)
35728 assert.isBufferLength2(publicKeys[i], 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
ab78acc6
IC
35729 }
35730
8b095871 35731 compressed = initCompressedValue(compressed, true)
ab78acc6 35732
8b095871
IC
35733 return secp256k1.publicKeyCombine(publicKeys, compressed)
35734 },
ab78acc6 35735
8b095871
IC
35736 signatureNormalize: function (signature) {
35737 assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID)
35738 assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
ab78acc6 35739
8b095871
IC
35740 return secp256k1.signatureNormalize(signature)
35741 },
ab78acc6 35742
8b095871
IC
35743 signatureExport: function (signature) {
35744 assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID)
35745 assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
35746
35747 var sigObj = secp256k1.signatureExport(signature)
35748 return der.signatureExport(sigObj)
35749 },
35750
35751 signatureImport: function (sig) {
35752 assert.isBuffer(sig, messages.ECDSA_SIGNATURE_TYPE_INVALID)
35753 assert.isLengthGTZero(sig, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
35754
35755 var sigObj = der.signatureImport(sig)
35756 if (sigObj) return secp256k1.signatureImport(sigObj)
35757
35758 throw new Error(messages.ECDSA_SIGNATURE_PARSE_DER_FAIL)
35759 },
35760
35761 signatureImportLax: function (sig) {
35762 assert.isBuffer(sig, messages.ECDSA_SIGNATURE_TYPE_INVALID)
35763 assert.isLengthGTZero(sig, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
35764
35765 var sigObj = der.signatureImportLax(sig)
35766 if (sigObj) return secp256k1.signatureImport(sigObj)
35767
35768 throw new Error(messages.ECDSA_SIGNATURE_PARSE_DER_FAIL)
35769 },
35770
35771 sign: function (message, privateKey, options) {
35772 assert.isBuffer(message, messages.MSG32_TYPE_INVALID)
35773 assert.isBufferLength(message, 32, messages.MSG32_LENGTH_INVALID)
35774
35775 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
35776 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
35777
35778 var data = null
35779 var noncefn = null
35780 if (options !== undefined) {
35781 assert.isObject(options, messages.OPTIONS_TYPE_INVALID)
35782
35783 if (options.data !== undefined) {
35784 assert.isBuffer(options.data, messages.OPTIONS_DATA_TYPE_INVALID)
35785 assert.isBufferLength(options.data, 32, messages.OPTIONS_DATA_LENGTH_INVALID)
35786 data = options.data
35787 }
35788
35789 if (options.noncefn !== undefined) {
35790 assert.isFunction(options.noncefn, messages.OPTIONS_NONCEFN_TYPE_INVALID)
35791 noncefn = options.noncefn
35792 }
ab78acc6
IC
35793 }
35794
8b095871
IC
35795 return secp256k1.sign(message, privateKey, noncefn, data)
35796 },
ab78acc6 35797
8b095871
IC
35798 verify: function (message, signature, publicKey) {
35799 assert.isBuffer(message, messages.MSG32_TYPE_INVALID)
35800 assert.isBufferLength(message, 32, messages.MSG32_LENGTH_INVALID)
ab78acc6 35801
8b095871
IC
35802 assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID)
35803 assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
ab78acc6 35804
8b095871
IC
35805 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
35806 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
35807
35808 return secp256k1.verify(message, signature, publicKey)
35809 },
ab78acc6 35810
8b095871
IC
35811 recover: function (message, signature, recovery, compressed) {
35812 assert.isBuffer(message, messages.MSG32_TYPE_INVALID)
35813 assert.isBufferLength(message, 32, messages.MSG32_LENGTH_INVALID)
ab78acc6 35814
8b095871
IC
35815 assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID)
35816 assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
ab78acc6 35817
8b095871
IC
35818 assert.isNumber(recovery, messages.RECOVERY_ID_TYPE_INVALID)
35819 assert.isNumberInInterval(recovery, -1, 4, messages.RECOVERY_ID_VALUE_INVALID)
ab78acc6 35820
8b095871 35821 compressed = initCompressedValue(compressed, true)
ab78acc6 35822
8b095871
IC
35823 return secp256k1.recover(message, signature, recovery, compressed)
35824 },
ab78acc6 35825
8b095871
IC
35826 ecdh: function (publicKey, privateKey) {
35827 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
35828 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
ab78acc6 35829
8b095871
IC
35830 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
35831 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
ab78acc6 35832
8b095871
IC
35833 return secp256k1.ecdh(publicKey, privateKey)
35834 },
ab78acc6 35835
8b095871
IC
35836 ecdhUnsafe: function (publicKey, privateKey, compressed) {
35837 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
35838 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
ab78acc6 35839
8b095871
IC
35840 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
35841 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
ab78acc6 35842
8b095871 35843 compressed = initCompressedValue(compressed, true)
ab78acc6 35844
8b095871
IC
35845 return secp256k1.ecdhUnsafe(publicKey, privateKey, compressed)
35846 }
35847 }
35848}
ab78acc6 35849
8b095871
IC
35850},{"./assert":74,"./der":75,"./messages.json":78}],78:[function(require,module,exports){
35851module.exports={
35852 "COMPRESSED_TYPE_INVALID": "compressed should be a boolean",
35853 "EC_PRIVATE_KEY_TYPE_INVALID": "private key should be a Buffer",
35854 "EC_PRIVATE_KEY_LENGTH_INVALID": "private key length is invalid",
35855 "EC_PRIVATE_KEY_TWEAK_ADD_FAIL": "tweak out of range or resulting private key is invalid",
35856 "EC_PRIVATE_KEY_TWEAK_MUL_FAIL": "tweak out of range",
35857 "EC_PRIVATE_KEY_EXPORT_DER_FAIL": "couldn't export to DER format",
35858 "EC_PRIVATE_KEY_IMPORT_DER_FAIL": "couldn't import from DER format",
35859 "EC_PUBLIC_KEYS_TYPE_INVALID": "public keys should be an Array",
35860 "EC_PUBLIC_KEYS_LENGTH_INVALID": "public keys Array should have at least 1 element",
35861 "EC_PUBLIC_KEY_TYPE_INVALID": "public key should be a Buffer",
35862 "EC_PUBLIC_KEY_LENGTH_INVALID": "public key length is invalid",
35863 "EC_PUBLIC_KEY_PARSE_FAIL": "the public key could not be parsed or is invalid",
35864 "EC_PUBLIC_KEY_CREATE_FAIL": "private was invalid, try again",
35865 "EC_PUBLIC_KEY_TWEAK_ADD_FAIL": "tweak out of range or resulting public key is invalid",
35866 "EC_PUBLIC_KEY_TWEAK_MUL_FAIL": "tweak out of range",
35867 "EC_PUBLIC_KEY_COMBINE_FAIL": "the sum of the public keys is not valid",
35868 "ECDH_FAIL": "scalar was invalid (zero or overflow)",
35869 "ECDSA_SIGNATURE_TYPE_INVALID": "signature should be a Buffer",
35870 "ECDSA_SIGNATURE_LENGTH_INVALID": "signature length is invalid",
35871 "ECDSA_SIGNATURE_PARSE_FAIL": "couldn't parse signature",
35872 "ECDSA_SIGNATURE_PARSE_DER_FAIL": "couldn't parse DER signature",
35873 "ECDSA_SIGNATURE_SERIALIZE_DER_FAIL": "couldn't serialize signature to DER format",
35874 "ECDSA_SIGN_FAIL": "nonce generation function failed or private key is invalid",
35875 "ECDSA_RECOVER_FAIL": "couldn't recover public key from signature",
35876 "MSG32_TYPE_INVALID": "message should be a Buffer",
35877 "MSG32_LENGTH_INVALID": "message length is invalid",
35878 "OPTIONS_TYPE_INVALID": "options should be an Object",
35879 "OPTIONS_DATA_TYPE_INVALID": "options.data should be a Buffer",
35880 "OPTIONS_DATA_LENGTH_INVALID": "options.data length is invalid",
35881 "OPTIONS_NONCEFN_TYPE_INVALID": "options.noncefn should be a Function",
35882 "RECOVERY_ID_TYPE_INVALID": "recovery should be a Number",
35883 "RECOVERY_ID_VALUE_INVALID": "recovery should have value between -1 and 4",
35884 "TWEAK_TYPE_INVALID": "tweak should be a Buffer",
35885 "TWEAK_LENGTH_INVALID": "tweak length is invalid"
35886}
35887
35888},{}],79:[function(require,module,exports){
35889(function (Buffer){
35890// prototype class for hash functions
35891function Hash (blockSize, finalSize) {
35892 this._block = new Buffer(blockSize)
35893 this._finalSize = finalSize
35894 this._blockSize = blockSize
35895 this._len = 0
35896 this._s = 0
35897}
35898
35899Hash.prototype.update = function (data, enc) {
35900 if (typeof data === 'string') {
35901 enc = enc || 'utf8'
35902 data = new Buffer(data, enc)
ab78acc6
IC
35903 }
35904
8b095871
IC
35905 var l = this._len += data.length
35906 var s = this._s || 0
35907 var f = 0
35908 var buffer = this._block
ab78acc6 35909
8b095871
IC
35910 while (s < l) {
35911 var t = Math.min(data.length, f + this._blockSize - (s % this._blockSize))
35912 var ch = (t - f)
ab78acc6 35913
8b095871
IC
35914 for (var i = 0; i < ch; i++) {
35915 buffer[(s % this._blockSize) + i] = data[i + f]
ab78acc6
IC
35916 }
35917
8b095871
IC
35918 s += ch
35919 f += ch
ab78acc6 35920
8b095871
IC
35921 if ((s % this._blockSize) === 0) {
35922 this._update(buffer)
35923 }
ab78acc6 35924 }
8b095871 35925 this._s = s
ab78acc6 35926
8b095871
IC
35927 return this
35928}
ab78acc6 35929
8b095871
IC
35930Hash.prototype.digest = function (enc) {
35931 // Suppose the length of the message M, in bits, is l
35932 var l = this._len * 8
ab78acc6 35933
8b095871
IC
35934 // Append the bit 1 to the end of the message
35935 this._block[this._len % this._blockSize] = 0x80
ab78acc6 35936
8b095871
IC
35937 // and then k zero bits, where k is the smallest non-negative solution to the equation (l + 1 + k) === finalSize mod blockSize
35938 this._block.fill(0, this._len % this._blockSize + 1)
ab78acc6 35939
8b095871
IC
35940 if (l % (this._blockSize * 8) >= this._finalSize * 8) {
35941 this._update(this._block)
35942 this._block.fill(0)
35943 }
ab78acc6 35944
8b095871
IC
35945 // to this append the block which is equal to the number l written in binary
35946 // TODO: handle case where l is > Math.pow(2, 29)
35947 this._block.writeInt32BE(l, this._blockSize - 4)
ebd8d4e8 35948
8b095871 35949 var hash = this._update(this._block) || this._hash()
ebd8d4e8 35950
8b095871 35951 return enc ? hash.toString(enc) : hash
ab78acc6 35952}
ebd8d4e8 35953
8b095871
IC
35954Hash.prototype._update = function () {
35955 throw new Error('_update must be implemented by subclass')
ab78acc6 35956}
8b095871
IC
35957
35958module.exports = Hash
35959
35960}).call(this,require("buffer").Buffer)
35961},{"buffer":5}],80:[function(require,module,exports){
35962var exports = module.exports = function SHA (algorithm) {
35963 algorithm = algorithm.toLowerCase()
35964
35965 var Algorithm = exports[algorithm]
35966 if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')
35967
35968 return new Algorithm()
ab78acc6 35969}
ebd8d4e8 35970
8b095871
IC
35971exports.sha = require('./sha')
35972exports.sha1 = require('./sha1')
35973exports.sha224 = require('./sha224')
35974exports.sha256 = require('./sha256')
35975exports.sha384 = require('./sha384')
35976exports.sha512 = require('./sha512')
35977
35978},{"./sha":81,"./sha1":82,"./sha224":83,"./sha256":84,"./sha384":85,"./sha512":86}],81:[function(require,module,exports){
35979(function (Buffer){
35980/*
35981 * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined
35982 * in FIPS PUB 180-1
35983 * This source code is derived from sha1.js of the same repository.
35984 * The difference between SHA-0 and SHA-1 is just a bitwise rotate left
35985 * operation was added.
35986 */
35987
35988var inherits = require('inherits')
35989var Hash = require('./hash')
35990
35991var K = [
35992 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
35993]
35994
35995var W = new Array(80)
35996
35997function Sha () {
35998 this.init()
35999 this._w = W
36000
36001 Hash.call(this, 64, 56)
ab78acc6 36002}
ebd8d4e8 36003
8b095871 36004inherits(Sha, Hash)
ebd8d4e8 36005
8b095871
IC
36006Sha.prototype.init = function () {
36007 this._a = 0x67452301
36008 this._b = 0xefcdab89
36009 this._c = 0x98badcfe
36010 this._d = 0x10325476
36011 this._e = 0xc3d2e1f0
ebd8d4e8 36012
8b095871
IC
36013 return this
36014}
ebd8d4e8 36015
8b095871
IC
36016function rotl5 (num) {
36017 return (num << 5) | (num >>> 27)
36018}
ebd8d4e8 36019
8b095871
IC
36020function rotl30 (num) {
36021 return (num << 30) | (num >>> 2)
36022}
ebd8d4e8 36023
8b095871
IC
36024function ft (s, b, c, d) {
36025 if (s === 0) return (b & c) | ((~b) & d)
36026 if (s === 2) return (b & c) | (b & d) | (c & d)
36027 return b ^ c ^ d
36028}
ebd8d4e8 36029
8b095871
IC
36030Sha.prototype._update = function (M) {
36031 var W = this._w
ebd8d4e8 36032
8b095871
IC
36033 var a = this._a | 0
36034 var b = this._b | 0
36035 var c = this._c | 0
36036 var d = this._d | 0
36037 var e = this._e | 0
ebd8d4e8 36038
8b095871
IC
36039 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
36040 for (; i < 80; ++i) W[i] = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]
ebd8d4e8 36041
8b095871
IC
36042 for (var j = 0; j < 80; ++j) {
36043 var s = ~~(j / 20)
36044 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
ebd8d4e8 36045
8b095871
IC
36046 e = d
36047 d = c
36048 c = rotl30(b)
36049 b = a
36050 a = t
36051 }
36052
36053 this._a = (a + this._a) | 0
36054 this._b = (b + this._b) | 0
36055 this._c = (c + this._c) | 0
36056 this._d = (d + this._d) | 0
36057 this._e = (e + this._e) | 0
36058}
36059
36060Sha.prototype._hash = function () {
36061 var H = new Buffer(20)
ab78acc6 36062
8b095871
IC
36063 H.writeInt32BE(this._a | 0, 0)
36064 H.writeInt32BE(this._b | 0, 4)
36065 H.writeInt32BE(this._c | 0, 8)
36066 H.writeInt32BE(this._d | 0, 12)
36067 H.writeInt32BE(this._e | 0, 16)
ebd8d4e8 36068
8b095871 36069 return H
ebd8d4e8
IC
36070}
36071
8b095871 36072module.exports = Sha
ebd8d4e8 36073
8b095871
IC
36074}).call(this,require("buffer").Buffer)
36075},{"./hash":79,"buffer":5,"inherits":63}],82:[function(require,module,exports){
36076(function (Buffer){
36077/*
36078 * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
36079 * in FIPS PUB 180-1
36080 * Version 2.1a Copyright Paul Johnston 2000 - 2002.
36081 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
36082 * Distributed under the BSD License
36083 * See http://pajhome.org.uk/crypt/md5 for details.
36084 */
ebd8d4e8 36085
8b095871
IC
36086var inherits = require('inherits')
36087var Hash = require('./hash')
ebd8d4e8 36088
8b095871
IC
36089var K = [
36090 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
36091]
ebd8d4e8 36092
8b095871 36093var W = new Array(80)
ab78acc6 36094
8b095871
IC
36095function Sha1 () {
36096 this.init()
36097 this._w = W
ebd8d4e8 36098
8b095871
IC
36099 Hash.call(this, 64, 56)
36100}
ebd8d4e8 36101
8b095871 36102inherits(Sha1, Hash)
ebd8d4e8 36103
8b095871
IC
36104Sha1.prototype.init = function () {
36105 this._a = 0x67452301
36106 this._b = 0xefcdab89
36107 this._c = 0x98badcfe
36108 this._d = 0x10325476
36109 this._e = 0xc3d2e1f0
ebd8d4e8 36110
8b095871
IC
36111 return this
36112}
ebd8d4e8 36113
8b095871
IC
36114function rotl1 (num) {
36115 return (num << 1) | (num >>> 31)
36116}
ebd8d4e8 36117
8b095871
IC
36118function rotl5 (num) {
36119 return (num << 5) | (num >>> 27)
36120}
ebd8d4e8 36121
8b095871
IC
36122function rotl30 (num) {
36123 return (num << 30) | (num >>> 2)
36124}
ebd8d4e8 36125
8b095871
IC
36126function ft (s, b, c, d) {
36127 if (s === 0) return (b & c) | ((~b) & d)
36128 if (s === 2) return (b & c) | (b & d) | (c & d)
36129 return b ^ c ^ d
36130}
ebd8d4e8 36131
8b095871
IC
36132Sha1.prototype._update = function (M) {
36133 var W = this._w
ebd8d4e8 36134
8b095871
IC
36135 var a = this._a | 0
36136 var b = this._b | 0
36137 var c = this._c | 0
36138 var d = this._d | 0
36139 var e = this._e | 0
ebd8d4e8 36140
8b095871
IC
36141 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
36142 for (; i < 80; ++i) W[i] = rotl1(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16])
36143
36144 for (var j = 0; j < 80; ++j) {
36145 var s = ~~(j / 20)
36146 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
36147
36148 e = d
36149 d = c
36150 c = rotl30(b)
36151 b = a
36152 a = t
ab78acc6
IC
36153 }
36154
8b095871
IC
36155 this._a = (a + this._a) | 0
36156 this._b = (b + this._b) | 0
36157 this._c = (c + this._c) | 0
36158 this._d = (d + this._d) | 0
36159 this._e = (e + this._e) | 0
36160}
ab78acc6 36161
8b095871
IC
36162Sha1.prototype._hash = function () {
36163 var H = new Buffer(20)
ab78acc6 36164
8b095871
IC
36165 H.writeInt32BE(this._a | 0, 0)
36166 H.writeInt32BE(this._b | 0, 4)
36167 H.writeInt32BE(this._c | 0, 8)
36168 H.writeInt32BE(this._d | 0, 12)
36169 H.writeInt32BE(this._e | 0, 16)
ab78acc6 36170
8b095871
IC
36171 return H
36172}
ab78acc6 36173
8b095871 36174module.exports = Sha1
ab78acc6 36175
8b095871
IC
36176}).call(this,require("buffer").Buffer)
36177},{"./hash":79,"buffer":5,"inherits":63}],83:[function(require,module,exports){
36178(function (Buffer){
36179/**
36180 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
36181 * in FIPS 180-2
36182 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
36183 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
36184 *
36185 */
ab78acc6 36186
8b095871
IC
36187var inherits = require('inherits')
36188var Sha256 = require('./sha256')
36189var Hash = require('./hash')
ab78acc6 36190
8b095871 36191var W = new Array(64)
ab78acc6 36192
8b095871
IC
36193function Sha224 () {
36194 this.init()
ab78acc6 36195
8b095871 36196 this._w = W // new Array(64)
ebd8d4e8 36197
8b095871
IC
36198 Hash.call(this, 64, 56)
36199}
ebd8d4e8 36200
8b095871 36201inherits(Sha224, Sha256)
ebd8d4e8 36202
8b095871
IC
36203Sha224.prototype.init = function () {
36204 this._a = 0xc1059ed8
36205 this._b = 0x367cd507
36206 this._c = 0x3070dd17
36207 this._d = 0xf70e5939
36208 this._e = 0xffc00b31
36209 this._f = 0x68581511
36210 this._g = 0x64f98fa7
36211 this._h = 0xbefa4fa4
ebd8d4e8 36212
8b095871
IC
36213 return this
36214}
ab78acc6 36215
8b095871
IC
36216Sha224.prototype._hash = function () {
36217 var H = new Buffer(28)
ebd8d4e8 36218
8b095871
IC
36219 H.writeInt32BE(this._a, 0)
36220 H.writeInt32BE(this._b, 4)
36221 H.writeInt32BE(this._c, 8)
36222 H.writeInt32BE(this._d, 12)
36223 H.writeInt32BE(this._e, 16)
36224 H.writeInt32BE(this._f, 20)
36225 H.writeInt32BE(this._g, 24)
ab78acc6 36226
8b095871
IC
36227 return H
36228}
ebd8d4e8 36229
8b095871 36230module.exports = Sha224
ebd8d4e8 36231
8b095871
IC
36232}).call(this,require("buffer").Buffer)
36233},{"./hash":79,"./sha256":84,"buffer":5,"inherits":63}],84:[function(require,module,exports){
36234(function (Buffer){
36235/**
36236 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
36237 * in FIPS 180-2
36238 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
36239 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
36240 *
36241 */
ebd8d4e8 36242
8b095871
IC
36243var inherits = require('inherits')
36244var Hash = require('./hash')
ab78acc6 36245
8b095871
IC
36246var K = [
36247 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,
36248 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,
36249 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,
36250 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,
36251 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,
36252 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,
36253 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,
36254 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,
36255 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,
36256 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,
36257 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,
36258 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,
36259 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,
36260 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,
36261 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,
36262 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2
36263]
ebd8d4e8 36264
8b095871 36265var W = new Array(64)
ebd8d4e8 36266
8b095871
IC
36267function Sha256 () {
36268 this.init()
ebd8d4e8 36269
8b095871 36270 this._w = W // new Array(64)
ebd8d4e8 36271
8b095871 36272 Hash.call(this, 64, 56)
ab78acc6 36273}
ebd8d4e8 36274
8b095871 36275inherits(Sha256, Hash)
ebd8d4e8 36276
8b095871
IC
36277Sha256.prototype.init = function () {
36278 this._a = 0x6a09e667
36279 this._b = 0xbb67ae85
36280 this._c = 0x3c6ef372
36281 this._d = 0xa54ff53a
36282 this._e = 0x510e527f
36283 this._f = 0x9b05688c
36284 this._g = 0x1f83d9ab
36285 this._h = 0x5be0cd19
ebd8d4e8 36286
8b095871
IC
36287 return this
36288}
ebd8d4e8 36289
8b095871
IC
36290function ch (x, y, z) {
36291 return z ^ (x & (y ^ z))
36292}
ebd8d4e8 36293
8b095871
IC
36294function maj (x, y, z) {
36295 return (x & y) | (z & (x | y))
36296}
ebd8d4e8 36297
8b095871
IC
36298function sigma0 (x) {
36299 return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10)
36300}
ebd8d4e8 36301
8b095871
IC
36302function sigma1 (x) {
36303 return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7)
36304}
ebd8d4e8 36305
8b095871
IC
36306function gamma0 (x) {
36307 return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3)
36308}
ebd8d4e8 36309
8b095871
IC
36310function gamma1 (x) {
36311 return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10)
36312}
ab78acc6 36313
8b095871
IC
36314Sha256.prototype._update = function (M) {
36315 var W = this._w
ebd8d4e8 36316
8b095871
IC
36317 var a = this._a | 0
36318 var b = this._b | 0
36319 var c = this._c | 0
36320 var d = this._d | 0
36321 var e = this._e | 0
36322 var f = this._f | 0
36323 var g = this._g | 0
36324 var h = this._h | 0
ab78acc6 36325
8b095871
IC
36326 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
36327 for (; i < 64; ++i) W[i] = (gamma1(W[i - 2]) + W[i - 7] + gamma0(W[i - 15]) + W[i - 16]) | 0
ab78acc6 36328
8b095871
IC
36329 for (var j = 0; j < 64; ++j) {
36330 var T1 = (h + sigma1(e) + ch(e, f, g) + K[j] + W[j]) | 0
36331 var T2 = (sigma0(a) + maj(a, b, c)) | 0
ebd8d4e8 36332
8b095871
IC
36333 h = g
36334 g = f
36335 f = e
36336 e = (d + T1) | 0
36337 d = c
36338 c = b
36339 b = a
36340 a = (T1 + T2) | 0
ebd8d4e8
IC
36341 }
36342
8b095871
IC
36343 this._a = (a + this._a) | 0
36344 this._b = (b + this._b) | 0
36345 this._c = (c + this._c) | 0
36346 this._d = (d + this._d) | 0
36347 this._e = (e + this._e) | 0
36348 this._f = (f + this._f) | 0
36349 this._g = (g + this._g) | 0
36350 this._h = (h + this._h) | 0
ab78acc6 36351}
ebd8d4e8 36352
8b095871
IC
36353Sha256.prototype._hash = function () {
36354 var H = new Buffer(32)
ebd8d4e8 36355
8b095871
IC
36356 H.writeInt32BE(this._a, 0)
36357 H.writeInt32BE(this._b, 4)
36358 H.writeInt32BE(this._c, 8)
36359 H.writeInt32BE(this._d, 12)
36360 H.writeInt32BE(this._e, 16)
36361 H.writeInt32BE(this._f, 20)
36362 H.writeInt32BE(this._g, 24)
36363 H.writeInt32BE(this._h, 28)
36364
36365 return H
ab78acc6 36366}
ebd8d4e8 36367
8b095871 36368module.exports = Sha256
ebd8d4e8 36369
8b095871
IC
36370}).call(this,require("buffer").Buffer)
36371},{"./hash":79,"buffer":5,"inherits":63}],85:[function(require,module,exports){
36372(function (Buffer){
36373var inherits = require('inherits')
36374var SHA512 = require('./sha512')
36375var Hash = require('./hash')
ebd8d4e8 36376
8b095871 36377var W = new Array(160)
ebd8d4e8 36378
8b095871
IC
36379function Sha384 () {
36380 this.init()
36381 this._w = W
ab78acc6 36382
8b095871
IC
36383 Hash.call(this, 128, 112)
36384}
ab78acc6 36385
8b095871 36386inherits(Sha384, SHA512)
ebd8d4e8 36387
8b095871
IC
36388Sha384.prototype.init = function () {
36389 this._ah = 0xcbbb9d5d
36390 this._bh = 0x629a292a
36391 this._ch = 0x9159015a
36392 this._dh = 0x152fecd8
36393 this._eh = 0x67332667
36394 this._fh = 0x8eb44a87
36395 this._gh = 0xdb0c2e0d
36396 this._hh = 0x47b5481d
36397
36398 this._al = 0xc1059ed8
36399 this._bl = 0x367cd507
36400 this._cl = 0x3070dd17
36401 this._dl = 0xf70e5939
36402 this._el = 0xffc00b31
36403 this._fl = 0x68581511
36404 this._gl = 0x64f98fa7
36405 this._hl = 0xbefa4fa4
ebd8d4e8 36406
8b095871
IC
36407 return this
36408}
ebd8d4e8 36409
8b095871
IC
36410Sha384.prototype._hash = function () {
36411 var H = new Buffer(48)
ebd8d4e8 36412
8b095871
IC
36413 function writeInt64BE (h, l, offset) {
36414 H.writeInt32BE(h, offset)
36415 H.writeInt32BE(l, offset + 4)
36416 }
ebd8d4e8 36417
8b095871
IC
36418 writeInt64BE(this._ah, this._al, 0)
36419 writeInt64BE(this._bh, this._bl, 8)
36420 writeInt64BE(this._ch, this._cl, 16)
36421 writeInt64BE(this._dh, this._dl, 24)
36422 writeInt64BE(this._eh, this._el, 32)
36423 writeInt64BE(this._fh, this._fl, 40)
ebd8d4e8 36424
8b095871 36425 return H
ab78acc6 36426}
ebd8d4e8 36427
8b095871
IC
36428module.exports = Sha384
36429
36430}).call(this,require("buffer").Buffer)
36431},{"./hash":79,"./sha512":86,"buffer":5,"inherits":63}],86:[function(require,module,exports){
36432(function (Buffer){
36433var inherits = require('inherits')
36434var Hash = require('./hash')
36435
36436var K = [
36437 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
36438 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
36439 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
36440 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
36441 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
36442 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
36443 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
36444 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
36445 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
36446 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
36447 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
36448 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
36449 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
36450 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
36451 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
36452 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
36453 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
36454 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
36455 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
36456 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
36457 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
36458 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
36459 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
36460 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
36461 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
36462 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
36463 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
36464 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
36465 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
36466 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
36467 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
36468 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
36469 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
36470 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
36471 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
36472 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
36473 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
36474 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
36475 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
36476 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
36477]
36478
36479var W = new Array(160)
ebd8d4e8 36480
8b095871
IC
36481function Sha512 () {
36482 this.init()
36483 this._w = W
ebd8d4e8 36484
8b095871 36485 Hash.call(this, 128, 112)
ab78acc6 36486}
ebd8d4e8 36487
8b095871 36488inherits(Sha512, Hash)
ebd8d4e8 36489
8b095871
IC
36490Sha512.prototype.init = function () {
36491 this._ah = 0x6a09e667
36492 this._bh = 0xbb67ae85
36493 this._ch = 0x3c6ef372
36494 this._dh = 0xa54ff53a
36495 this._eh = 0x510e527f
36496 this._fh = 0x9b05688c
36497 this._gh = 0x1f83d9ab
36498 this._hh = 0x5be0cd19
36499
36500 this._al = 0xf3bcc908
36501 this._bl = 0x84caa73b
36502 this._cl = 0xfe94f82b
36503 this._dl = 0x5f1d36f1
36504 this._el = 0xade682d1
36505 this._fl = 0x2b3e6c1f
36506 this._gl = 0xfb41bd6b
36507 this._hl = 0x137e2179
ebd8d4e8 36508
8b095871 36509 return this
ab78acc6 36510}
ebd8d4e8 36511
8b095871
IC
36512function Ch (x, y, z) {
36513 return z ^ (x & (y ^ z))
36514}
ebd8d4e8 36515
8b095871
IC
36516function maj (x, y, z) {
36517 return (x & y) | (z & (x | y))
ab78acc6 36518}
ebd8d4e8 36519
8b095871
IC
36520function sigma0 (x, xl) {
36521 return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25)
36522}
ebd8d4e8 36523
8b095871
IC
36524function sigma1 (x, xl) {
36525 return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23)
36526}
ab78acc6 36527
8b095871
IC
36528function Gamma0 (x, xl) {
36529 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7)
ab78acc6 36530}
ebd8d4e8 36531
8b095871
IC
36532function Gamma0l (x, xl) {
36533 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25)
36534}
ebd8d4e8 36535
8b095871
IC
36536function Gamma1 (x, xl) {
36537 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6)
ab78acc6
IC
36538}
36539
8b095871
IC
36540function Gamma1l (x, xl) {
36541 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26)
ab78acc6
IC
36542}
36543
8b095871
IC
36544function getCarry (a, b) {
36545 return (a >>> 0) < (b >>> 0) ? 1 : 0
ab78acc6
IC
36546}
36547
8b095871
IC
36548Sha512.prototype._update = function (M) {
36549 var W = this._w
ebd8d4e8 36550
8b095871
IC
36551 var ah = this._ah | 0
36552 var bh = this._bh | 0
36553 var ch = this._ch | 0
36554 var dh = this._dh | 0
36555 var eh = this._eh | 0
36556 var fh = this._fh | 0
36557 var gh = this._gh | 0
36558 var hh = this._hh | 0
ebd8d4e8 36559
8b095871
IC
36560 var al = this._al | 0
36561 var bl = this._bl | 0
36562 var cl = this._cl | 0
36563 var dl = this._dl | 0
36564 var el = this._el | 0
36565 var fl = this._fl | 0
36566 var gl = this._gl | 0
36567 var hl = this._hl | 0
ebd8d4e8 36568
8b095871
IC
36569 for (var i = 0; i < 32; i += 2) {
36570 W[i] = M.readInt32BE(i * 4)
36571 W[i + 1] = M.readInt32BE(i * 4 + 4)
36572 }
36573 for (; i < 160; i += 2) {
36574 var xh = W[i - 15 * 2]
36575 var xl = W[i - 15 * 2 + 1]
36576 var gamma0 = Gamma0(xh, xl)
36577 var gamma0l = Gamma0l(xl, xh)
ebd8d4e8 36578
8b095871
IC
36579 xh = W[i - 2 * 2]
36580 xl = W[i - 2 * 2 + 1]
36581 var gamma1 = Gamma1(xh, xl)
36582 var gamma1l = Gamma1l(xl, xh)
ebd8d4e8 36583
8b095871
IC
36584 // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]
36585 var Wi7h = W[i - 7 * 2]
36586 var Wi7l = W[i - 7 * 2 + 1]
ebd8d4e8 36587
8b095871
IC
36588 var Wi16h = W[i - 16 * 2]
36589 var Wi16l = W[i - 16 * 2 + 1]
ab78acc6 36590
8b095871
IC
36591 var Wil = (gamma0l + Wi7l) | 0
36592 var Wih = (gamma0 + Wi7h + getCarry(Wil, gamma0l)) | 0
36593 Wil = (Wil + gamma1l) | 0
36594 Wih = (Wih + gamma1 + getCarry(Wil, gamma1l)) | 0
36595 Wil = (Wil + Wi16l) | 0
36596 Wih = (Wih + Wi16h + getCarry(Wil, Wi16l)) | 0
ebd8d4e8 36597
8b095871
IC
36598 W[i] = Wih
36599 W[i + 1] = Wil
36600 }
ebd8d4e8 36601
8b095871
IC
36602 for (var j = 0; j < 160; j += 2) {
36603 Wih = W[j]
36604 Wil = W[j + 1]
ebd8d4e8 36605
8b095871
IC
36606 var majh = maj(ah, bh, ch)
36607 var majl = maj(al, bl, cl)
ebd8d4e8 36608
8b095871
IC
36609 var sigma0h = sigma0(ah, al)
36610 var sigma0l = sigma0(al, ah)
36611 var sigma1h = sigma1(eh, el)
36612 var sigma1l = sigma1(el, eh)
ab78acc6 36613
8b095871
IC
36614 // t1 = h + sigma1 + ch + K[j] + W[j]
36615 var Kih = K[j]
36616 var Kil = K[j + 1]
ab78acc6 36617
8b095871
IC
36618 var chh = Ch(eh, fh, gh)
36619 var chl = Ch(el, fl, gl)
ebd8d4e8 36620
8b095871
IC
36621 var t1l = (hl + sigma1l) | 0
36622 var t1h = (hh + sigma1h + getCarry(t1l, hl)) | 0
36623 t1l = (t1l + chl) | 0
36624 t1h = (t1h + chh + getCarry(t1l, chl)) | 0
36625 t1l = (t1l + Kil) | 0
36626 t1h = (t1h + Kih + getCarry(t1l, Kil)) | 0
36627 t1l = (t1l + Wil) | 0
36628 t1h = (t1h + Wih + getCarry(t1l, Wil)) | 0
ebd8d4e8 36629
8b095871
IC
36630 // t2 = sigma0 + maj
36631 var t2l = (sigma0l + majl) | 0
36632 var t2h = (sigma0h + majh + getCarry(t2l, sigma0l)) | 0
ebd8d4e8 36633
8b095871
IC
36634 hh = gh
36635 hl = gl
36636 gh = fh
36637 gl = fl
36638 fh = eh
36639 fl = el
36640 el = (dl + t1l) | 0
36641 eh = (dh + t1h + getCarry(el, dl)) | 0
36642 dh = ch
36643 dl = cl
36644 ch = bh
36645 cl = bl
36646 bh = ah
36647 bl = al
36648 al = (t1l + t2l) | 0
36649 ah = (t1h + t2h + getCarry(al, t1l)) | 0
36650 }
ab78acc6 36651
8b095871
IC
36652 this._al = (this._al + al) | 0
36653 this._bl = (this._bl + bl) | 0
36654 this._cl = (this._cl + cl) | 0
36655 this._dl = (this._dl + dl) | 0
36656 this._el = (this._el + el) | 0
36657 this._fl = (this._fl + fl) | 0
36658 this._gl = (this._gl + gl) | 0
36659 this._hl = (this._hl + hl) | 0
ab78acc6 36660
8b095871
IC
36661 this._ah = (this._ah + ah + getCarry(this._al, al)) | 0
36662 this._bh = (this._bh + bh + getCarry(this._bl, bl)) | 0
36663 this._ch = (this._ch + ch + getCarry(this._cl, cl)) | 0
36664 this._dh = (this._dh + dh + getCarry(this._dl, dl)) | 0
36665 this._eh = (this._eh + eh + getCarry(this._el, el)) | 0
36666 this._fh = (this._fh + fh + getCarry(this._fl, fl)) | 0
36667 this._gh = (this._gh + gh + getCarry(this._gl, gl)) | 0
36668 this._hh = (this._hh + hh + getCarry(this._hl, hl)) | 0
ab78acc6
IC
36669}
36670
8b095871
IC
36671Sha512.prototype._hash = function () {
36672 var H = new Buffer(64)
ab78acc6 36673
8b095871
IC
36674 function writeInt64BE (h, l, offset) {
36675 H.writeInt32BE(h, offset)
36676 H.writeInt32BE(l, offset + 4)
36677 }
ab78acc6 36678
8b095871
IC
36679 writeInt64BE(this._ah, this._al, 0)
36680 writeInt64BE(this._bh, this._bl, 8)
36681 writeInt64BE(this._ch, this._cl, 16)
36682 writeInt64BE(this._dh, this._dl, 24)
36683 writeInt64BE(this._eh, this._el, 32)
36684 writeInt64BE(this._fh, this._fl, 40)
36685 writeInt64BE(this._gh, this._gl, 48)
36686 writeInt64BE(this._hh, this._hl, 56)
ab78acc6 36687
8b095871 36688 return H
ebd8d4e8
IC
36689}
36690
8b095871 36691module.exports = Sha512
ebd8d4e8 36692
ab78acc6 36693}).call(this,require("buffer").Buffer)
8b095871
IC
36694},{"./hash":79,"buffer":5,"inherits":63}],87:[function(require,module,exports){
36695var isHexPrefixed = require('is-hex-prefixed');
d5dc92fd 36696
8b095871
IC
36697/**
36698 * Removes '0x' from a given `String` is present
36699 * @param {String} str the string value
36700 * @return {String|Optional} a string by pass if necessary
36701 */
36702module.exports = function stripHexPrefix(str) {
36703 if (typeof str !== 'string') {
36704 return str;
36705 }
07ac4350 36706
8b095871
IC
36707 return isHexPrefixed(str) ? str.slice(2) : str;
36708}
07ac4350 36709
8b095871
IC
36710},{"is-hex-prefixed":64}]},{},[31])(31)
36711});</script>
ab78acc6 36712 <script>// Select components from sjcl to suit the crypto operations bip39 requires.
80c4dd2a
IC
36713
36714//// base.js
36715
36716/** @fileOverview Javascript cryptography implementation.
36717 *
36718 * Crush to remove comments, shorten variable names and
36719 * generally reduce transmission size.
36720 *
36721 * @author Emily Stark
36722 * @author Mike Hamburg
36723 * @author Dan Boneh
36724 */
36725
36726"use strict";
36727/*jslint indent: 2, bitwise: false, nomen: false, plusplus: false, white: false, regexp: false */
36728/*global document, window, escape, unescape, module, require, Uint32Array */
36729
36730/** @namespace The Stanford Javascript Crypto Library, top-level namespace. */
36731var sjcl = {
36732 /** @namespace Symmetric ciphers. */
36733 cipher: {},
36734
36735 /** @namespace Hash functions. Right now only SHA256 is implemented. */
36736 hash: {},
36737
36738 /** @namespace Key exchange functions. Right now only SRP is implemented. */
36739 keyexchange: {},
36740
36741 /** @namespace Block cipher modes of operation. */
36742 mode: {},
36743
36744 /** @namespace Miscellaneous. HMAC and PBKDF2. */
36745 misc: {},
36746
36747 /**
36748 * @namespace Bit array encoders and decoders.
36749 *
36750 * @description
36751 * The members of this namespace are functions which translate between
36752 * SJCL's bitArrays and other objects (usually strings). Because it
36753 * isn't always clear which direction is encoding and which is decoding,
36754 * the method names are "fromBits" and "toBits".
36755 */
36756 codec: {},
36757
36758 /** @namespace Exceptions. */
36759 exception: {
36760 /** @constructor Ciphertext is corrupt. */
36761 corrupt: function(message) {
36762 this.toString = function() { return "CORRUPT: "+this.message; };
36763 this.message = message;
36764 },
36765
36766 /** @constructor Invalid parameter. */
36767 invalid: function(message) {
36768 this.toString = function() { return "INVALID: "+this.message; };
36769 this.message = message;
36770 },
36771
36772 /** @constructor Bug or missing feature in SJCL. @constructor */
36773 bug: function(message) {
36774 this.toString = function() { return "BUG: "+this.message; };
36775 this.message = message;
36776 },
36777
36778 /** @constructor Something isn't ready. */
36779 notReady: function(message) {
36780 this.toString = function() { return "NOT READY: "+this.message; };
36781 this.message = message;
ebd8d4e8 36782 }
80c4dd2a
IC
36783 }
36784};
36785
36786if(typeof module !== 'undefined' && module.exports){
36787 module.exports = sjcl;
36788}
36789if (typeof define === "function") {
36790 define([], function () {
36791 return sjcl;
36792 });
36793}
36794
36795
36796//// bitArray.js
36797
36798/** @fileOverview Arrays of bits, encoded as arrays of Numbers.
36799 *
36800 * @author Emily Stark
36801 * @author Mike Hamburg
36802 * @author Dan Boneh
36803 */
36804
36805/** @namespace Arrays of bits, encoded as arrays of Numbers.
36806 *
36807 * @description
36808 * <p>
36809 * These objects are the currency accepted by SJCL's crypto functions.
36810 * </p>
36811 *
36812 * <p>
36813 * Most of our crypto primitives operate on arrays of 4-byte words internally,
36814 * but many of them can take arguments that are not a multiple of 4 bytes.
36815 * This library encodes arrays of bits (whose size need not be a multiple of 8
36816 * bits) as arrays of 32-bit words. The bits are packed, big-endian, into an
36817 * array of words, 32 bits at a time. Since the words are double-precision
36818 * floating point numbers, they fit some extra data. We use this (in a private,
36819 * possibly-changing manner) to encode the number of bits actually present
36820 * in the last word of the array.
36821 * </p>
36822 *
36823 * <p>
36824 * Because bitwise ops clear this out-of-band data, these arrays can be passed
36825 * to ciphers like AES which want arrays of words.
36826 * </p>
36827 */
36828sjcl.bitArray = {
36829 /**
36830 * Array slices in units of bits.
36831 * @param {bitArray} a The array to slice.
36832 * @param {Number} bstart The offset to the start of the slice, in bits.
36833 * @param {Number} bend The offset to the end of the slice, in bits. If this is undefined,
36834 * slice until the end of the array.
36835 * @return {bitArray} The requested slice.
36836 */
36837 bitSlice: function (a, bstart, bend) {
36838 a = sjcl.bitArray._shiftRight(a.slice(bstart/32), 32 - (bstart & 31)).slice(1);
36839 return (bend === undefined) ? a : sjcl.bitArray.clamp(a, bend-bstart);
36840 },
36841
36842 /**
36843 * Extract a number packed into a bit array.
36844 * @param {bitArray} a The array to slice.
36845 * @param {Number} bstart The offset to the start of the slice, in bits.
36846 * @param {Number} length The length of the number to extract.
36847 * @return {Number} The requested slice.
36848 */
36849 extract: function(a, bstart, blength) {
36850 // FIXME: this Math.floor is not necessary at all, but for some reason
36851 // seems to suppress a bug in the Chromium JIT.
36852 var x, sh = Math.floor((-bstart-blength) & 31);
36853 if ((bstart + blength - 1 ^ bstart) & -32) {
36854 // it crosses a boundary
36855 x = (a[bstart/32|0] << (32 - sh)) ^ (a[bstart/32+1|0] >>> sh);
36856 } else {
36857 // within a single word
36858 x = a[bstart/32|0] >>> sh;
ebd8d4e8 36859 }
80c4dd2a
IC
36860 return x & ((1<<blength) - 1);
36861 },
36862
36863 /**
36864 * Concatenate two bit arrays.
36865 * @param {bitArray} a1 The first array.
36866 * @param {bitArray} a2 The second array.
36867 * @return {bitArray} The concatenation of a1 and a2.
36868 */
36869 concat: function (a1, a2) {
36870 if (a1.length === 0 || a2.length === 0) {
36871 return a1.concat(a2);
36872 }
36873
36874 var last = a1[a1.length-1], shift = sjcl.bitArray.getPartial(last);
36875 if (shift === 32) {
36876 return a1.concat(a2);
36877 } else {
36878 return sjcl.bitArray._shiftRight(a2, shift, last|0, a1.slice(0,a1.length-1));
ebd8d4e8 36879 }
80c4dd2a
IC
36880 },
36881
36882 /**
36883 * Find the length of an array of bits.
36884 * @param {bitArray} a The array.
36885 * @return {Number} The length of a, in bits.
36886 */
36887 bitLength: function (a) {
36888 var l = a.length, x;
36889 if (l === 0) { return 0; }
36890 x = a[l - 1];
36891 return (l-1) * 32 + sjcl.bitArray.getPartial(x);
36892 },
36893
36894 /**
36895 * Truncate an array.
36896 * @param {bitArray} a The array.
36897 * @param {Number} len The length to truncate to, in bits.
36898 * @return {bitArray} A new array, truncated to len bits.
36899 */
36900 clamp: function (a, len) {
36901 if (a.length * 32 < len) { return a; }
36902 a = a.slice(0, Math.ceil(len / 32));
36903 var l = a.length;
36904 len = len & 31;
36905 if (l > 0 && len) {
36906 a[l-1] = sjcl.bitArray.partial(len, a[l-1] & 0x80000000 >> (len-1), 1);
36907 }
36908 return a;
36909 },
36910
36911 /**
36912 * Make a partial word for a bit array.
36913 * @param {Number} len The number of bits in the word.
36914 * @param {Number} x The bits.
36915 * @param {Number} [0] _end Pass 1 if x has already been shifted to the high side.
36916 * @return {Number} The partial word.
36917 */
36918 partial: function (len, x, _end) {
36919 if (len === 32) { return x; }
36920 return (_end ? x|0 : x << (32-len)) + len * 0x10000000000;
36921 },
36922
36923 /**
36924 * Get the number of bits used by a partial word.
36925 * @param {Number} x The partial word.
36926 * @return {Number} The number of bits used by the partial word.
36927 */
36928 getPartial: function (x) {
36929 return Math.round(x/0x10000000000) || 32;
36930 },
36931
36932 /**
36933 * Compare two arrays for equality in a predictable amount of time.
36934 * @param {bitArray} a The first array.
36935 * @param {bitArray} b The second array.
36936 * @return {boolean} true if a == b; false otherwise.
36937 */
36938 equal: function (a, b) {
36939 if (sjcl.bitArray.bitLength(a) !== sjcl.bitArray.bitLength(b)) {
36940 return false;
ebd8d4e8 36941 }
80c4dd2a
IC
36942 var x = 0, i;
36943 for (i=0; i<a.length; i++) {
36944 x |= a[i]^b[i];
ebd8d4e8 36945 }
80c4dd2a
IC
36946 return (x === 0);
36947 },
36948
36949 /** Shift an array right.
36950 * @param {bitArray} a The array to shift.
36951 * @param {Number} shift The number of bits to shift.
36952 * @param {Number} [carry=0] A byte to carry in
36953 * @param {bitArray} [out=[]] An array to prepend to the output.
36954 * @private
36955 */
36956 _shiftRight: function (a, shift, carry, out) {
36957 var i, last2=0, shift2;
36958 if (out === undefined) { out = []; }
36959
36960 for (; shift >= 32; shift -= 32) {
36961 out.push(carry);
36962 carry = 0;
36963 }
36964 if (shift === 0) {
36965 return out.concat(a);
36966 }
36967
36968 for (i=0; i<a.length; i++) {
36969 out.push(carry | a[i]>>>shift);
36970 carry = a[i] << (32-shift);
36971 }
36972 last2 = a.length ? a[a.length-1] : 0;
36973 shift2 = sjcl.bitArray.getPartial(last2);
36974 out.push(sjcl.bitArray.partial(shift+shift2 & 31, (shift + shift2 > 32) ? carry : out.pop(),1));
36975 return out;
36976 },
36977
36978 /** xor a block of 4 words together.
36979 * @private
36980 */
36981 _xor4: function(x,y) {
36982 return [x[0]^y[0],x[1]^y[1],x[2]^y[2],x[3]^y[3]];
36983 },
36984
36985 /** byteswap a word array inplace.
36986 * (does not handle partial words)
36987 * @param {sjcl.bitArray} a word array
36988 * @return {sjcl.bitArray} byteswapped array
36989 */
36990 byteswapM: function(a) {
36991 var i, v, m = 0xff00;
36992 for (i = 0; i < a.length; ++i) {
36993 v = a[i];
36994 a[i] = (v >>> 24) | ((v >>> 8) & m) | ((v & m) << 8) | (v << 24);
ebd8d4e8 36995 }
80c4dd2a
IC
36996 return a;
36997 }
36998};
36999
37000
37001//// codecString.js
37002
37003/** @fileOverview Bit array codec implementations.
37004 *
37005 * @author Emily Stark
37006 * @author Mike Hamburg
37007 * @author Dan Boneh
37008 */
37009
37010/** @namespace UTF-8 strings */
37011sjcl.codec.utf8String = {
37012 /** Convert from a bitArray to a UTF-8 string. */
37013 fromBits: function (arr) {
37014 var out = "", bl = sjcl.bitArray.bitLength(arr), i, tmp;
37015 for (i=0; i<bl/8; i++) {
37016 if ((i&3) === 0) {
37017 tmp = arr[i/4];
37018 }
37019 out += String.fromCharCode(tmp >>> 24);
37020 tmp <<= 8;
ebd8d4e8 37021 }
80c4dd2a
IC
37022 return decodeURIComponent(escape(out));
37023 },
37024
37025 /** Convert from a UTF-8 string to a bitArray. */
37026 toBits: function (str) {
37027 str = unescape(encodeURIComponent(str));
37028 var out = [], i, tmp=0;
37029 for (i=0; i<str.length; i++) {
37030 tmp = tmp << 8 | str.charCodeAt(i);
37031 if ((i&3) === 3) {
37032 out.push(tmp);
37033 tmp = 0;
37034 }
ebd8d4e8 37035 }
80c4dd2a
IC
37036 if (i&3) {
37037 out.push(sjcl.bitArray.partial(8*(i&3), tmp));
ebd8d4e8 37038 }
80c4dd2a
IC
37039 return out;
37040 }
37041};
37042
37043
37044//// codecHex.js
37045
37046/** @fileOverview Bit array codec implementations.
37047 *
37048 * @author Emily Stark
37049 * @author Mike Hamburg
37050 * @author Dan Boneh
37051 */
37052
37053/** @namespace Hexadecimal */
37054sjcl.codec.hex = {
37055 /** Convert from a bitArray to a hex string. */
37056 fromBits: function (arr) {
37057 var out = "", i;
37058 for (i=0; i<arr.length; i++) {
37059 out += ((arr[i]|0)+0xF00000000000).toString(16).substr(4);
ebd8d4e8 37060 }
80c4dd2a
IC
37061 return out.substr(0, sjcl.bitArray.bitLength(arr)/4);//.replace(/(.{8})/g, "$1 ");
37062 },
37063 /** Convert from a hex string to a bitArray. */
37064 toBits: function (str) {
37065 var i, out=[], len;
37066 str = str.replace(/\s|0x/g, "");
37067 len = str.length;
37068 str = str + "00000000";
37069 for (i=0; i<str.length; i+=8) {
37070 out.push(parseInt(str.substr(i,8),16)^0);
ebd8d4e8 37071 }
80c4dd2a
IC
37072 return sjcl.bitArray.clamp(out, len*4);
37073 }
37074};
37075
37076
37077//// sha512.js
37078
37079/** @fileOverview Javascript SHA-512 implementation.
37080 *
37081 * This implementation was written for CryptoJS by Jeff Mott and adapted for
37082 * SJCL by Stefan Thomas.
37083 *
37084 * CryptoJS (c) 2009–2012 by Jeff Mott. All rights reserved.
37085 * Released with New BSD License
37086 *
37087 * @author Emily Stark
37088 * @author Mike Hamburg
37089 * @author Dan Boneh
37090 * @author Jeff Mott
37091 * @author Stefan Thomas
37092 */
37093
37094/**
37095 * Context for a SHA-512 operation in progress.
37096 * @constructor
37097 * @class Secure Hash Algorithm, 512 bits.
37098 */
37099sjcl.hash.sha512 = function (hash) {
37100 if (!this._key[0]) { this._precompute(); }
37101 if (hash) {
37102 this._h = hash._h.slice(0);
37103 this._buffer = hash._buffer.slice(0);
37104 this._length = hash._length;
37105 } else {
37106 this.reset();
37107 }
37108};
37109
37110/**
37111 * Hash a string or an array of words.
37112 * @static
37113 * @param {bitArray|String} data the data to hash.
37114 * @return {bitArray} The hash value, an array of 16 big-endian words.
37115 */
37116sjcl.hash.sha512.hash = function (data) {
37117 return (new sjcl.hash.sha512()).update(data).finalize();
37118};
37119
37120sjcl.hash.sha512.prototype = {
37121 /**
37122 * The hash's block size, in bits.
37123 * @constant
37124 */
37125 blockSize: 1024,
37126
37127 /**
37128 * Reset the hash state.
37129 * @return this
37130 */
37131 reset:function () {
37132 this._h = this._init.slice(0);
37133 this._buffer = [];
37134 this._length = 0;
37135 return this;
37136 },
37137
37138 /**
37139 * Input several words to the hash.
37140 * @param {bitArray|String} data the data to hash.
37141 * @return this
37142 */
37143 update: function (data) {
37144 if (typeof data === "string") {
37145 data = sjcl.codec.utf8String.toBits(data);
ebd8d4e8 37146 }
80c4dd2a
IC
37147 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
37148 ol = this._length,
37149 nl = this._length = ol + sjcl.bitArray.bitLength(data);
37150 for (i = 1024+ol & -1024; i <= nl; i+= 1024) {
37151 this._block(b.splice(0,32));
ebd8d4e8 37152 }
80c4dd2a
IC
37153 return this;
37154 },
37155
37156 /**
37157 * Complete hashing and output the hash value.
37158 * @return {bitArray} The hash value, an array of 16 big-endian words.
37159 */
37160 finalize:function () {
37161 var i, b = this._buffer, h = this._h;
37162
37163 // Round out and push the buffer
37164 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(1,1)]);
37165
37166 // Round out the buffer to a multiple of 32 words, less the 4 length words.
37167 for (i = b.length + 4; i & 31; i++) {
37168 b.push(0);
ebd8d4e8 37169 }
80c4dd2a
IC
37170
37171 // append the length
37172 b.push(0);
37173 b.push(0);
37174 b.push(Math.floor(this._length / 0x100000000));
37175 b.push(this._length | 0);
37176
37177 while (b.length) {
37178 this._block(b.splice(0,32));
ebd8d4e8 37179 }
80c4dd2a
IC
37180
37181 this.reset();
37182 return h;
37183 },
37184
37185 /**
37186 * The SHA-512 initialization vector, to be precomputed.
37187 * @private
37188 */
37189 _init:[],
37190
37191 /**
37192 * Least significant 24 bits of SHA512 initialization values.
37193 *
37194 * Javascript only has 53 bits of precision, so we compute the 40 most
37195 * significant bits and add the remaining 24 bits as constants.
37196 *
37197 * @private
37198 */
37199 _initr: [ 0xbcc908, 0xcaa73b, 0x94f82b, 0x1d36f1, 0xe682d1, 0x3e6c1f, 0x41bd6b, 0x7e2179 ],
37200
37201 /*
37202 _init:
37203 [0x6a09e667, 0xf3bcc908, 0xbb67ae85, 0x84caa73b, 0x3c6ef372, 0xfe94f82b, 0xa54ff53a, 0x5f1d36f1,
37204 0x510e527f, 0xade682d1, 0x9b05688c, 0x2b3e6c1f, 0x1f83d9ab, 0xfb41bd6b, 0x5be0cd19, 0x137e2179],
37205 */
37206
37207 /**
37208 * The SHA-512 hash key, to be precomputed.
37209 * @private
37210 */
37211 _key:[],
37212
37213 /**
37214 * Least significant 24 bits of SHA512 key values.
37215 * @private
37216 */
37217 _keyr:
37218 [0x28ae22, 0xef65cd, 0x4d3b2f, 0x89dbbc, 0x48b538, 0x05d019, 0x194f9b, 0x6d8118,
37219 0x030242, 0x706fbe, 0xe4b28c, 0xffb4e2, 0x7b896f, 0x1696b1, 0xc71235, 0x692694,
37220 0xf14ad2, 0x4f25e3, 0x8cd5b5, 0xac9c65, 0x2b0275, 0xa6e483, 0x41fbd4, 0x1153b5,
37221 0x66dfab, 0xb43210, 0xfb213f, 0xef0ee4, 0xa88fc2, 0x0aa725, 0x03826f, 0x0e6e70,
37222 0xd22ffc, 0x26c926, 0xc42aed, 0x95b3df, 0xaf63de, 0x77b2a8, 0xedaee6, 0x82353b,
37223 0xf10364, 0x423001, 0xf89791, 0x54be30, 0xef5218, 0x65a910, 0x71202a, 0xbbd1b8,
37224 0xd2d0c8, 0x41ab53, 0x8eeb99, 0x9b48a8, 0xc95a63, 0x418acb, 0x63e373, 0xb2b8a3,
37225 0xefb2fc, 0x172f60, 0xf0ab72, 0x6439ec, 0x631e28, 0x82bde9, 0xc67915, 0x72532b,
37226 0x26619c, 0xc0c207, 0xe0eb1e, 0x6ed178, 0x176fba, 0xc898a6, 0xf90dae, 0x1c471b,
37227 0x047d84, 0xc72493, 0xc9bebc, 0x100d4c, 0x3e42b6, 0x657e2a, 0xd6faec, 0x475817],
37228
37229 /*
37230 _key:
37231 [0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd, 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
37232 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019, 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
37233 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe, 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
37234 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1, 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
37235 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3, 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
37236 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483, 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
37237 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210, 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
37238 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725, 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
37239 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926, 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
37240 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8, 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
37241 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001, 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
37242 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910, 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
37243 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53, 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
37244 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb, 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
37245 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60, 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
37246 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9, 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
37247 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207, 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
37248 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6, 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
37249 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493, 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
37250 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a, 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817],
37251 */
37252
37253 /**
37254 * Function to precompute _init and _key.
37255 * @private
37256 */
37257 _precompute: function () {
37258 // XXX: This code is for precomputing the SHA256 constants, change for
37259 // SHA512 and re-enable.
37260 var i = 0, prime = 2, factor;
37261
37262 function frac(x) { return (x-Math.floor(x)) * 0x100000000 | 0; }
37263 function frac2(x) { return (x-Math.floor(x)) * 0x10000000000 & 0xff; }
37264
37265 outer: for (; i<80; prime++) {
37266 for (factor=2; factor*factor <= prime; factor++) {
37267 if (prime % factor === 0) {
37268 // not a prime
37269 continue outer;
ebd8d4e8 37270 }
80c4dd2a
IC
37271 }
37272
37273 if (i<8) {
37274 this._init[i*2] = frac(Math.pow(prime, 1/2));
37275 this._init[i*2+1] = (frac2(Math.pow(prime, 1/2)) << 24) | this._initr[i];
37276 }
37277 this._key[i*2] = frac(Math.pow(prime, 1/3));
37278 this._key[i*2+1] = (frac2(Math.pow(prime, 1/3)) << 24) | this._keyr[i];
37279 i++;
ebd8d4e8 37280 }
80c4dd2a
IC
37281 },
37282
37283 /**
37284 * Perform one cycle of SHA-512.
37285 * @param {bitArray} words one block of words.
37286 * @private
37287 */
37288 _block:function (words) {
37289 var i, wrh, wrl,
37290 w = words.slice(0),
37291 h = this._h,
37292 k = this._key,
37293 h0h = h[ 0], h0l = h[ 1], h1h = h[ 2], h1l = h[ 3],
37294 h2h = h[ 4], h2l = h[ 5], h3h = h[ 6], h3l = h[ 7],
37295 h4h = h[ 8], h4l = h[ 9], h5h = h[10], h5l = h[11],
37296 h6h = h[12], h6l = h[13], h7h = h[14], h7l = h[15];
37297
37298 // Working variables
37299 var ah = h0h, al = h0l, bh = h1h, bl = h1l,
37300 ch = h2h, cl = h2l, dh = h3h, dl = h3l,
37301 eh = h4h, el = h4l, fh = h5h, fl = h5l,
37302 gh = h6h, gl = h6l, hh = h7h, hl = h7l;
37303
37304 for (i=0; i<80; i++) {
37305 // load up the input word for this round
37306 if (i<16) {
37307 wrh = w[i * 2];
37308 wrl = w[i * 2 + 1];
37309 } else {
37310 // Gamma0
37311 var gamma0xh = w[(i-15) * 2];
37312 var gamma0xl = w[(i-15) * 2 + 1];
37313 var gamma0h =
37314 ((gamma0xl << 31) | (gamma0xh >>> 1)) ^
37315 ((gamma0xl << 24) | (gamma0xh >>> 8)) ^
37316 (gamma0xh >>> 7);
37317 var gamma0l =
37318 ((gamma0xh << 31) | (gamma0xl >>> 1)) ^
37319 ((gamma0xh << 24) | (gamma0xl >>> 8)) ^
37320 ((gamma0xh << 25) | (gamma0xl >>> 7));
37321
37322 // Gamma1
37323 var gamma1xh = w[(i-2) * 2];
37324 var gamma1xl = w[(i-2) * 2 + 1];
37325 var gamma1h =
37326 ((gamma1xl << 13) | (gamma1xh >>> 19)) ^
37327 ((gamma1xh << 3) | (gamma1xl >>> 29)) ^
37328 (gamma1xh >>> 6);
37329 var gamma1l =
37330 ((gamma1xh << 13) | (gamma1xl >>> 19)) ^
37331 ((gamma1xl << 3) | (gamma1xh >>> 29)) ^
37332 ((gamma1xh << 26) | (gamma1xl >>> 6));
37333
37334 // Shortcuts
37335 var wr7h = w[(i-7) * 2];
37336 var wr7l = w[(i-7) * 2 + 1];
37337
37338 var wr16h = w[(i-16) * 2];
37339 var wr16l = w[(i-16) * 2 + 1];
37340
37341 // W(round) = gamma0 + W(round - 7) + gamma1 + W(round - 16)
37342 wrl = gamma0l + wr7l;
37343 wrh = gamma0h + wr7h + ((wrl >>> 0) < (gamma0l >>> 0) ? 1 : 0);
37344 wrl += gamma1l;
37345 wrh += gamma1h + ((wrl >>> 0) < (gamma1l >>> 0) ? 1 : 0);
37346 wrl += wr16l;
37347 wrh += wr16h + ((wrl >>> 0) < (wr16l >>> 0) ? 1 : 0);
37348 }
37349
37350 w[i*2] = wrh |= 0;
37351 w[i*2 + 1] = wrl |= 0;
37352
37353 // Ch
37354 var chh = (eh & fh) ^ (~eh & gh);
37355 var chl = (el & fl) ^ (~el & gl);
37356
37357 // Maj
37358 var majh = (ah & bh) ^ (ah & ch) ^ (bh & ch);
37359 var majl = (al & bl) ^ (al & cl) ^ (bl & cl);
37360
37361 // Sigma0
37362 var sigma0h = ((al << 4) | (ah >>> 28)) ^ ((ah << 30) | (al >>> 2)) ^ ((ah << 25) | (al >>> 7));
37363 var sigma0l = ((ah << 4) | (al >>> 28)) ^ ((al << 30) | (ah >>> 2)) ^ ((al << 25) | (ah >>> 7));
37364
37365 // Sigma1
37366 var sigma1h = ((el << 18) | (eh >>> 14)) ^ ((el << 14) | (eh >>> 18)) ^ ((eh << 23) | (el >>> 9));
37367 var sigma1l = ((eh << 18) | (el >>> 14)) ^ ((eh << 14) | (el >>> 18)) ^ ((el << 23) | (eh >>> 9));
37368
37369 // K(round)
37370 var krh = k[i*2];
37371 var krl = k[i*2+1];
37372
37373 // t1 = h + sigma1 + ch + K(round) + W(round)
37374 var t1l = hl + sigma1l;
37375 var t1h = hh + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0);
37376 t1l += chl;
37377 t1h += chh + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0);
37378 t1l += krl;
37379 t1h += krh + ((t1l >>> 0) < (krl >>> 0) ? 1 : 0);
37380 t1l = t1l + wrl|0; // FF32..FF34 perf issue https://bugzilla.mozilla.org/show_bug.cgi?id=1054972
37381 t1h += wrh + ((t1l >>> 0) < (wrl >>> 0) ? 1 : 0);
37382
37383 // t2 = sigma0 + maj
37384 var t2l = sigma0l + majl;
37385 var t2h = sigma0h + majh + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0);
37386
37387 // Update working variables
37388 hh = gh;
37389 hl = gl;
37390 gh = fh;
37391 gl = fl;
37392 fh = eh;
37393 fl = el;
37394 el = (dl + t1l) | 0;
37395 eh = (dh + t1h + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;
37396 dh = ch;
37397 dl = cl;
37398 ch = bh;
37399 cl = bl;
37400 bh = ah;
37401 bl = al;
37402 al = (t1l + t2l) | 0;
37403 ah = (t1h + t2h + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0;
37404 }
37405
37406 // Intermediate hash
37407 h0l = h[1] = (h0l + al) | 0;
37408 h[0] = (h0h + ah + ((h0l >>> 0) < (al >>> 0) ? 1 : 0)) | 0;
37409 h1l = h[3] = (h1l + bl) | 0;
37410 h[2] = (h1h + bh + ((h1l >>> 0) < (bl >>> 0) ? 1 : 0)) | 0;
37411 h2l = h[5] = (h2l + cl) | 0;
37412 h[4] = (h2h + ch + ((h2l >>> 0) < (cl >>> 0) ? 1 : 0)) | 0;
37413 h3l = h[7] = (h3l + dl) | 0;
37414 h[6] = (h3h + dh + ((h3l >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;
37415 h4l = h[9] = (h4l + el) | 0;
37416 h[8] = (h4h + eh + ((h4l >>> 0) < (el >>> 0) ? 1 : 0)) | 0;
37417 h5l = h[11] = (h5l + fl) | 0;
37418 h[10] = (h5h + fh + ((h5l >>> 0) < (fl >>> 0) ? 1 : 0)) | 0;
37419 h6l = h[13] = (h6l + gl) | 0;
37420 h[12] = (h6h + gh + ((h6l >>> 0) < (gl >>> 0) ? 1 : 0)) | 0;
37421 h7l = h[15] = (h7l + hl) | 0;
37422 h[14] = (h7h + hh + ((h7l >>> 0) < (hl >>> 0) ? 1 : 0)) | 0;
37423 }
37424};
37425
37426
37427//// hmac.js
37428
37429/** @fileOverview HMAC implementation.
37430 *
37431 * @author Emily Stark
37432 * @author Mike Hamburg
37433 * @author Dan Boneh
37434 */
37435
37436/** HMAC with the specified hash function.
37437 * @constructor
37438 * @param {bitArray} key the key for HMAC.
37439 * @param {Object} [hash=sjcl.hash.sha256] The hash function to use.
37440 */
37441sjcl.misc.hmac = function (key, Hash) {
37442 this._hash = Hash = Hash || sjcl.hash.sha256;
37443 var exKey = [[],[]], i,
37444 bs = Hash.prototype.blockSize / 32;
37445 this._baseHash = [new Hash(), new Hash()];
37446
37447 if (key.length > bs) {
37448 key = Hash.hash(key);
37449 }
37450
37451 for (i=0; i<bs; i++) {
37452 exKey[0][i] = key[i]^0x36363636;
37453 exKey[1][i] = key[i]^0x5C5C5C5C;
37454 }
37455
37456 this._baseHash[0].update(exKey[0]);
37457 this._baseHash[1].update(exKey[1]);
37458 this._resultHash = new Hash(this._baseHash[0]);
37459};
37460
37461/** HMAC with the specified hash function. Also called encrypt since it's a prf.
37462 * @param {bitArray|String} data The data to mac.
37463 */
37464sjcl.misc.hmac.prototype.encrypt = sjcl.misc.hmac.prototype.mac = function (data) {
37465 if (!this._updated) {
37466 this.update(data);
37467 return this.digest(data);
37468 } else {
37469 throw new sjcl.exception.invalid("encrypt on already updated hmac called!");
37470 }
37471};
37472
37473sjcl.misc.hmac.prototype.reset = function () {
37474 this._resultHash = new this._hash(this._baseHash[0]);
37475 this._updated = false;
37476};
37477
37478sjcl.misc.hmac.prototype.update = function (data) {
37479 this._updated = true;
37480 this._resultHash.update(data);
37481};
37482
37483sjcl.misc.hmac.prototype.digest = function () {
37484 var w = this._resultHash.finalize(), result = new (this._hash)(this._baseHash[1]).update(w).finalize();
37485
37486 this.reset();
37487
37488 return result;
37489};
37490
37491
37492//// pbkdf2.js
37493
37494
37495/** @fileOverview Password-based key-derivation function, version 2.0.
37496 *
37497 * @author Emily Stark
37498 * @author Mike Hamburg
37499 * @author Dan Boneh
37500 */
37501
37502/** Password-Based Key-Derivation Function, version 2.0.
37503 *
37504 * Generate keys from passwords using PBKDF2-HMAC-SHA256.
37505 *
37506 * This is the method specified by RSA's PKCS #5 standard.
37507 *
37508 * @param {bitArray|String} password The password.
37509 * @param {bitArray|String} salt The salt. Should have lots of entropy.
37510 * @param {Number} [count=1000] The number of iterations. Higher numbers make the function slower but more secure.
37511 * @param {Number} [length] The length of the derived key. Defaults to the
37512 output size of the hash function.
37513 * @param {Object} [Prff=sjcl.misc.hmac] The pseudorandom function family.
37514 * @return {bitArray} the derived key.
37515 */
37516sjcl.misc.pbkdf2 = function (password, salt, count, length, Prff) {
37517 count = count || 1000;
37518
37519 if (length < 0 || count < 0) {
37520 throw sjcl.exception.invalid("invalid params to pbkdf2");
37521 }
37522
37523 if (typeof password === "string") {
37524 password = sjcl.codec.utf8String.toBits(password);
37525 }
37526
37527 if (typeof salt === "string") {
37528 salt = sjcl.codec.utf8String.toBits(salt);
37529 }
37530
37531 Prff = Prff || sjcl.misc.hmac;
37532
37533 var prf = new Prff(password),
37534 u, ui, i, j, k, out = [], b = sjcl.bitArray;
37535
37536 for (k = 1; 32 * out.length < (length || 1); k++) {
37537 u = ui = prf.encrypt(b.concat(salt,[k]));
37538
37539 for (i=1; i<count; i++) {
37540 ui = prf.encrypt(ui);
37541 for (j=0; j<ui.length; j++) {
37542 u[j] ^= ui[j];
37543 }
ebd8d4e8 37544 }
80c4dd2a
IC
37545
37546 out = out.concat(u);
37547 }
37548
37549 if (length) { out = b.clamp(out, length); }
37550
37551 return out;
37552};
37553
37554
37555//// sha256.js
37556
37557/** @fileOverview Javascript SHA-256 implementation.
37558 *
37559 * An older version of this implementation is available in the public
37560 * domain, but this one is (c) Emily Stark, Mike Hamburg, Dan Boneh,
37561 * Stanford University 2008-2010 and BSD-licensed for liability
37562 * reasons.
37563 *
37564 * Special thanks to Aldo Cortesi for pointing out several bugs in
37565 * this code.
37566 *
37567 * @author Emily Stark
37568 * @author Mike Hamburg
37569 * @author Dan Boneh
37570 */
37571
37572/**
37573 * Context for a SHA-256 operation in progress.
37574 * @constructor
37575 * @class Secure Hash Algorithm, 256 bits.
37576 */
37577sjcl.hash.sha256 = function (hash) {
37578 if (!this._key[0]) { this._precompute(); }
37579 if (hash) {
37580 this._h = hash._h.slice(0);
37581 this._buffer = hash._buffer.slice(0);
37582 this._length = hash._length;
37583 } else {
37584 this.reset();
37585 }
37586};
37587
37588/**
37589 * Hash a string or an array of words.
37590 * @static
37591 * @param {bitArray|String} data the data to hash.
37592 * @return {bitArray} The hash value, an array of 16 big-endian words.
37593 */
37594sjcl.hash.sha256.hash = function (data) {
37595 return (new sjcl.hash.sha256()).update(data).finalize();
37596};
37597
37598sjcl.hash.sha256.prototype = {
37599 /**
37600 * The hash's block size, in bits.
37601 * @constant
37602 */
37603 blockSize: 512,
37604
37605 /**
37606 * Reset the hash state.
37607 * @return this
37608 */
37609 reset:function () {
37610 this._h = this._init.slice(0);
37611 this._buffer = [];
37612 this._length = 0;
37613 return this;
37614 },
37615
37616 /**
37617 * Input several words to the hash.
37618 * @param {bitArray|String} data the data to hash.
37619 * @return this
37620 */
37621 update: function (data) {
37622 if (typeof data === "string") {
37623 data = sjcl.codec.utf8String.toBits(data);
37624 }
37625 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
37626 ol = this._length,
37627 nl = this._length = ol + sjcl.bitArray.bitLength(data);
37628 for (i = 512+ol & -512; i <= nl; i+= 512) {
37629 this._block(b.splice(0,16));
ebd8d4e8 37630 }
3af2954a 37631 return this;
80c4dd2a
IC
37632 },
37633
37634 /**
37635 * Complete hashing and output the hash value.
37636 * @return {bitArray} The hash value, an array of 8 big-endian words.
37637 */
37638 finalize:function () {
37639 var i, b = this._buffer, h = this._h;
37640
37641 // Round out and push the buffer
37642 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(1,1)]);
37643
37644 // Round out the buffer to a multiple of 16 words, less the 2 length words.
37645 for (i = b.length + 2; i & 15; i++) {
37646 b.push(0);
37647 }
37648
37649 // append the length
37650 b.push(Math.floor(this._length / 0x100000000));
37651 b.push(this._length | 0);
37652
37653 while (b.length) {
37654 this._block(b.splice(0,16));
37655 }
37656
37657 this.reset();
37658 return h;
37659 },
37660
37661 /**
37662 * The SHA-256 initialization vector, to be precomputed.
37663 * @private
37664 */
37665 _init:[],
37666 /*
37667 _init:[0x6a09e667,0xbb67ae85,0x3c6ef372,0xa54ff53a,0x510e527f,0x9b05688c,0x1f83d9ab,0x5be0cd19],
37668 */
37669
37670 /**
37671 * The SHA-256 hash key, to be precomputed.
37672 * @private
37673 */
37674 _key:[],
37675 /*
37676 _key:
37677 [0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
37678 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
37679 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
37680 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
37681 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
37682 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
37683 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
37684 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2],
37685 */
37686
37687
37688 /**
37689 * Function to precompute _init and _key.
37690 * @private
37691 */
37692 _precompute: function () {
37693 var i = 0, prime = 2, factor;
37694
37695 function frac(x) { return (x-Math.floor(x)) * 0x100000000 | 0; }
37696
37697 outer: for (; i<64; prime++) {
37698 for (factor=2; factor*factor <= prime; factor++) {
37699 if (prime % factor === 0) {
37700 // not a prime
37701 continue outer;
ebd8d4e8 37702 }
80c4dd2a
IC
37703 }
37704
37705 if (i<8) {
37706 this._init[i] = frac(Math.pow(prime, 1/2));
37707 }
37708 this._key[i] = frac(Math.pow(prime, 1/3));
37709 i++;
ebd8d4e8 37710 }
80c4dd2a
IC
37711 },
37712
37713 /**
37714 * Perform one cycle of SHA-256.
37715 * @param {bitArray} words one block of words.
37716 * @private
37717 */
37718 _block:function (words) {
37719 var i, tmp, a, b,
37720 w = words.slice(0),
37721 h = this._h,
37722 k = this._key,
37723 h0 = h[0], h1 = h[1], h2 = h[2], h3 = h[3],
37724 h4 = h[4], h5 = h[5], h6 = h[6], h7 = h[7];
37725
37726 /* Rationale for placement of |0 :
37727 * If a value can overflow is original 32 bits by a factor of more than a few
37728 * million (2^23 ish), there is a possibility that it might overflow the
37729 * 53-bit mantissa and lose precision.
37730 *
37731 * To avoid this, we clamp back to 32 bits by |'ing with 0 on any value that
37732 * propagates around the loop, and on the hash state h[]. I don't believe
37733 * that the clamps on h4 and on h0 are strictly necessary, but it's close
37734 * (for h4 anyway), and better safe than sorry.
37735 *
37736 * The clamps on h[] are necessary for the output to be correct even in the
37737 * common case and for short inputs.
37738 */
37739 for (i=0; i<64; i++) {
37740 // load up the input word for this round
37741 if (i<16) {
37742 tmp = w[i];
37743 } else {
37744 a = w[(i+1 ) & 15];
37745 b = w[(i+14) & 15];
37746 tmp = w[i&15] = ((a>>>7 ^ a>>>18 ^ a>>>3 ^ a<<25 ^ a<<14) +
37747 (b>>>17 ^ b>>>19 ^ b>>>10 ^ b<<15 ^ b<<13) +
37748 w[i&15] + w[(i+9) & 15]) | 0;
37749 }
37750
37751 tmp = (tmp + h7 + (h4>>>6 ^ h4>>>11 ^ h4>>>25 ^ h4<<26 ^ h4<<21 ^ h4<<7) + (h6 ^ h4&(h5^h6)) + k[i]); // | 0;
37752
37753 // shift register
37754 h7 = h6; h6 = h5; h5 = h4;
37755 h4 = h3 + tmp | 0;
37756 h3 = h2; h2 = h1; h1 = h0;
37757
37758 h0 = (tmp + ((h1&h2) ^ (h3&(h1^h2))) + (h1>>>2 ^ h1>>>13 ^ h1>>>22 ^ h1<<30 ^ h1<<19 ^ h1<<10)) | 0;
37759 }
37760
37761 h[0] = h[0]+h0 | 0;
37762 h[1] = h[1]+h1 | 0;
37763 h[2] = h[2]+h2 | 0;
37764 h[3] = h[3]+h3 | 0;
37765 h[4] = h[4]+h4 | 0;
37766 h[5] = h[5]+h5 | 0;
37767 h[6] = h[6]+h6 | 0;
37768 h[7] = h[7]+h7 | 0;
37769 }
37770};
ea87f1d3
IC
37771</script>
37772 <script>// An extremely basic translation library
37773//
37774// Example usage:
37775//
37776// Set some html to be translated. Do this using the 'data-translate' attribute:
37777//
37778// <div data-translate>Test</div>
37779// <div data-translate-html><em>keep em tag</em></div>
52da415f
IC
37780// <input data-translate-placeholder placeholder="Example placeholder">
37781// <span data-translate-title title="Example title"></span>
ea87f1d3
IC
37782//
37783// Obtain all the phrases to be translated via js debug console:
37784//
37785// Translate.phrasesAsJson();
37786//
37787// Use that template to translate the phrases into another language.
37788// Leave the key the same. Change the value to the new language.
37789//
37790// Create a js file to load the new phrases. In this example for Spanish,
37791// es.js will contain the following code:
37792//
37793// Translate.loadForeignPhrases("es", {
37794// "Test": "Test in Spanish",
37795// "<em>keep em tag</em>": "<em>keep em tag in Spanish</em>",
52da415f
IC
37796// "Example placeholder": "Example placeholder in Spanish"
37797// "Example title": "Example title in Spanish"
ea87f1d3
IC
37798// });
37799//
37800// In your UI put a listener for clicking on the Spanish button:
37801//
37802// mySpanishButton.addEventListener("click", function() {
37803// Translate.setLanguage("es");
37804// });
37805// myEnglishButton.addEventListener("click", function() {
37806// Translate.setLanguage("en");
37807// });
37808
37809Translate = new (function() {
37810
37811 var defaultLanguage = "en";
37812
37813 var allPhrases = {};
37814 allPhrases[defaultLanguage] = {};
37815
37816 // Node types
37817
37818 var text = {
37819 selector: "[data-translate]",
37820 getKey: function() {
37821 return this.textContent.trim().replace(/\s+/g, " ");
37822 },
37823 setPhrase: function(p) {
37824 this.textContent = p;
37825 },
37826 }
37827
37828 var html = {
37829 selector: "[data-translate-html]",
37830 getKey: function() {
37831 return this.innerHTML.trim().replace(/\s+/g, " ");
37832 },
37833 setPhrase: function(p) {
37834 this.innerHTML = p;
37835 },
37836 }
37837
37838 var placeholder = {
37839 selector: "[data-translate-placeholder]",
37840 getKey: function() {
37841 return this.getAttribute("placeholder").trim().replace(/\s+/g, " ");
37842 },
37843 setPhrase: function(p) {
37844 this.setAttribute("placeholder", p);
37845 },
37846 }
37847
52da415f
IC
37848 var title = {
37849 selector: "[data-translate-title]",
37850 getKey: function() {
37851 return this.getAttribute("title").trim().replace(/\s+/g, " ");
37852 },
37853 setPhrase: function(p) {
37854 this.setAttribute("title", p);
37855 },
37856 }
37857
ea87f1d3
IC
37858 // Get elements to be translated
37859 var allEls = getEls(text)
37860 .concat(getEls(html))
52da415f
IC
37861 .concat(getEls(placeholder))
37862 .concat(getEls(title));
ea87f1d3
IC
37863
37864 // Provides access to phrases from a non-default language.
37865 // See phrases_en.js for example usage.
37866 this.loadForeignPhrases = function(language, phrases) {
37867 allPhrases[language] = phrases;
37868 }
37869
37870 // Displays a different language, eg "en" or "fr"
37871 this.setLanguage = function(language) {
37872 for (var i=0; i<allEls.length; i++) {
37873 var el = allEls[i];
37874 var key = el.key;
37875 if (!(language in allPhrases)) {
37876 console.log(language + " not in allPhrases");
37877 return;
37878 }
37879 if (!(key in allPhrases[language])) {
37880 console.log(language + " does not contain phrase: " + key);
37881 return;
37882 }
37883 var phrase = allPhrases[language][key];
37884 el.setPhrase(phrase);
37885 }
37886 }
37887
37888 // Converts the phrases to a key-pair json file.
37889 // This is a good way to export phrases for use in translation tools.
37890 this.phrasesAsJson = function(language) {
37891 var keys = [];
37892 for (var i=0; i<allEls.length; i++) {
37893 var el = allEls[i];
37894 var key = el.key;
37895 keys.push(key);
37896 }
37897 keys.sort();
37898 var output = {};
37899 for (var i=0; i<keys.length; i++) {
37900 var key = keys[i];
37901 var translated = "";
37902 if (language in allPhrases && key in allPhrases[language]) {
37903 translated = allPhrases[language][key];
37904 }
37905 output[key] = translated;
37906 }
37907 return JSON.stringify(output, null, 2);
37908 }
37909
37910 function getEls(nodeType) {
37911 var nodes = document.querySelectorAll(nodeType.selector);
37912 var els = [];
37913 for (var i=0; i<nodes.length; i++) {
37914 var node = nodes[i];
37915 node.getKey = nodeType.getKey;
37916 node.setPhrase = nodeType.setPhrase;
37917 node.key = node.getKey();
37918 allPhrases[defaultLanguage][node.key] = node.key;
37919 els.push(node);
37920 }
37921 return els;
37922 }
37923
37924})();
37925</script>
37926 <script>Translate.loadForeignPhrases("en",
37927{
37928 "<code>m/44'/0'/0'/0</code> generates public addresses": "<code>m/44'/0'/0'/0</code> generates public addresses",
37929 "<code>m/44'/0'/0'/1</code> generates change addresses": "<code>m/44'/0'/0'/1</code> generates change addresses",
37930 "<code>m/44'/0'/0'</code> generates extended keys for import / export": "<code>m/44'/0'/0'</code> generates extended keys for import / export",
37931 "<code>m/44'/0'/1'</code> for the next account. Continue incrementing for more accounts (most use a single account).": "<code>m/44'/0'/1'</code> for the next account. Continue incrementing for more accounts (most use a single account).",
37932 "Accepts binary, base 6, 6-sided dice, base 10, hexadecimal, cards": "Accepts binary, base 6, 6-sided dice, base 10, hexadecimal, cards",
37933 "Account": "Account",
37934 "Address": "Address",
37935 "Alternatively, download the file from the repository": "Alternatively, download the file from the repository",
37936 "BIP32 Derivation Path": "BIP32 Derivation Path",
37937 "BIP32 Extended Key": "BIP32 Extended Key",
37938 "BIP32 Extended Key (addresses only)": "BIP32 Extended Key (addresses only)",
37939 "BIP32 Root Key": "BIP32 Root Key",
37940 "BIP39 Mnemonic": "BIP39 Mnemonic",
37941 "BIP39 Passphrase (optional)": "BIP39 Passphrase (optional)",
37942 "BIP39 Seed": "BIP39 Seed",
37943 "Base 10": "Base 10",
37944 "Base 6": "Base 6",
37945 "Be careful - it can be easy to make mistakes if you don't know what you're doing.": "Be careful - it can be easy to make mistakes if you don't know what you're doing.",
37946 "Binary": "Binary",
37947 "Bitcoin Core": "Bitcoin Core",
37948 "Bits Per Event": "Bits Per Event",
37949 "Block Explorers": "Block Explorers",
37950 "Can be used with": "Can be used with",
37951 "Card": "Card",
37952 "Coin": "Coin",
37953 "Dice": "Dice",
37954 "Do <strong>NOT</strong> use phrases from books, lyrics from songs, your birthday or steet address, keyboard mashing, or anything you <i>think</i> is random, because chances are overwhelming it isn't random enough for the needs of this tool.": "Do <strong>NOT</strong> use phrases from books, lyrics from songs, your birthday or steet address, keyboard mashing, or anything you <i>think</i> is random, because chances are overwhelming it isn't random enough for the needs of this tool.",
37955 "Double-click that file to open it in a browser on any offline computer.": "Double-click that file to open it in a browser on any offline computer.",
37956 "Entropy": "Entropy",
37957 "Entropy Type": "Entropy Type",
37958 "Entropy is an advanced feature. Your mnemonic may be insecure if this feature is used incorrectly.": "Entropy is an advanced feature. Your mnemonic may be insecure if this feature is used incorrectly.",
37959 "Entropy values must be sourced from a <a href=\"https://en.wikipedia.org/wiki/Random_number_generation\" target=\"_blank\">strong source of randomness</a>.": "Entropy values must be sourced from a <a href=\"https://en.wikipedia.org/wiki/Random_number_generation\" target=\"_blank\">strong source of randomness</a>.",
37960 "Event Count": "Event Count",
37961 "External / Internal": "External / Internal",
37962 "Filtered Entropy": "Filtered Entropy",
37963 "For more info see the <a href=\"http://www.mycelium.com/\" target=\"_blank\">Mycelium Wallet homepage</a>": "For more info see the <a href=\"http://www.mycelium.com/\" target=\"_blank\">Mycelium Wallet homepage</a>",
37964 "For more info see the <a href=\"https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki\" target=\"_blank\">BIP39 spec</a>.": "For more info see the <a href=\"https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki\" target=\"_blank\">BIP39 spec</a>.",
37965 "For more info see the <a href=\"https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki\" target=\"_blank\">BIP44 spec</a>.": "For more info see the <a href=\"https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki\" target=\"_blank\">BIP44 spec</a>.",
37966 "For more info see the <a href=\"https://github.com/bitcoin/bitcoin/pull/8035\" target=\"_blank\">Bitcoin Core BIP32 implementation</a>": "For more info see the <a href=\"https://github.com/bitcoin/bitcoin/pull/8035\" target=\"_blank\">Bitcoin Core BIP32 implementation</a>",
37967 "For more info see the BIP32 spec": "For more info see the BIP32 spec",
37968 "From entropy length (3 words per 32 bits)": "From entropy length (3 words per 32 bits)",
37969 "Generate a random mnemonic, or enter your own below": "Generate a random mnemonic, or enter your own below",
37970 "Get the source code from the repository": "Get the source code from the repository",
37971 "Hex": "Hex",
37972 "Hierarchical Deterministic Wallets": "Hierarchical Deterministic Wallets",
37973 "If cryptographic randomness isn't available in your browser, this page will show a warning and the generate button will not work.": "If cryptographic randomness isn't available in your browser, this page will show a warning and the generate button will not work.",
37974 "In that case you might choose to use your own source of entropy.": "In that case you might choose to use your own source of entropy.",
37975 "In your browser, select file save-as, and save this page as a file.": "In your browser, select file save-as, and save this page as a file.",
37976 "Libraries": "Libraries",
37977 "Mnemonic Language": "Mnemonic Language",
37978 "Mnemonic Length": "Mnemonic Length",
37979 "Mnemonic code for generating deterministic keys": "Mnemonic code for generating deterministic keys",
37980 "More info": "More info",
37981 "Multi-Account Hierarchy for Deterministic Wallets": "Multi-Account Hierarchy for Deterministic Wallets",
37982 "Mycelium Wallet": "Mycelium Wallet",
37983 "Note these addreses are derived from the BIP32 Extended Key": "Note these addreses are derived from the BIP32 Extended Key",
37984 "Offline Usage": "Offline Usage",
37985 "Only enter the <code>xpub</code> extended key into block explorer search fields, never the <code>xprv</code> key.": "Only enter the <code>xpub</code> extended key into block explorer search fields, never the <code>xprv</code> key.",
37986 "Path": "Path",
37987 "Private Key": "Private Key",
37988 "Private Keys": "Private Keys",
37989 "Public Key": "Public Key",
37990 "Purpose": "Purpose",
37991 "Raw Binary": "Raw Binary",
37992 "Read more": "Read more",
37993 "Read more at the <a href=\"https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki\" target=\"_blank\">official BIP32 spec</a>": "Read more at the <a href=\"https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki\" target=\"_blank\">official BIP32 spec</a>",
37994 "Read more at the <a href=\"https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki\">official BIP39 spec</a>": "Read more at the <a href=\"https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki\">official BIP39 spec</a>",
37995 "Read more at the <a href=\"https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki\" target=\"_blank\">official BIP44 spec</a>": "Read more at the <a href=\"https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki\" target=\"_blank\">official BIP44 spec</a>",
37996 "See the demo at <a href=\"http://bip32.org/\" target=\"_blank\">bip32.org</a>": "See the demo at <a href=\"http://bip32.org/\" target=\"_blank\">bip32.org</a>",
37997 "Show": "Show",
37998 "Show more rows": "Show more rows",
37999 "Strength": "Strength",
38000 "Supply my own source of entropy": "Supply my own source of entropy",
38001 "The built in random generator can generally be trusted more than your own intuition about randomness.": "The built in random generator can generally be trusted more than your own intuition about randomness.",
38002 "The random mnemonic generator on this page uses a <a href=\"https://developer.mozilla.org/en-US/docs/Web/API/RandomSource/getRandomValues\" target=\"_blank\">cryptographically secure random number generator</a>.": "The random mnemonic generator on this page uses a <a href=\"https://developer.mozilla.org/en-US/docs/Web/API/RandomSource/getRandomValues\" target=\"_blank\">cryptographically secure random number generator</a>.",
38003 "This means flipping a fair coin, rolling a fair dice, noise measurements etc.": "This means flipping a fair coin, rolling a fair dice, noise measurements etc.",
38004 "This project is 100% open-source code": "This project is 100% open-source code",
38005 "Toggle": "Toggle",
38006 "Total Bits": "Total Bits",
38007 "Use hardened addresses": "Use hardened addresses",
38008 "Use path <code>m/0'/0'</code> with hardened addresses.": "Use path <code>m/0'/0'</code> with hardened addresses.",
38009 "Use path <code>m/44'/0'/0'</code>.": "Use path <code>m/44'/0'/0'</code>.",
38010 "Use private keys at <a href=\"https://web.archive.org/web/20150707020924/https://brainwallet.org/\" target=\"_blank\">brainwallet.org</a>.": "Use private keys at <a href=\"https://web.archive.org/web/20150707020924/https://brainwallet.org/\" target=\"_blank\">brainwallet.org</a>.",
38011 "Valid entropy values include:": "Valid entropy values include:",
38012 "Warning": "Warning",
38013 "Word Count": "Word Count",
38014 "You are not a good source of entropy.": "You are not a good source of entropy.",
38015 "You can enter an existing BIP39 mnemonic, or generate a new random one. Typing your own twelve words will probably not work how you expect, since the words require a particular structure (the last word is a checksum).": "You can enter an existing BIP39 mnemonic, or generate a new random one. Typing your own twelve words will probably not work how you expect, since the words require a particular structure (the last word is a checksum).",
38016 "You can use this tool without having to be online.": "You can use this tool without having to be online.",
38017 "words": "words"
38018}
38019);
dc55c6b0 38020</script>
ab78acc6 38021 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
3af2954a 38022WORDLISTS["english"] = [
ebd8d4e8
IC
38023"abandon","ability","able","about","above","absent","absorb","abstract","absurd","abuse",
38024"access","accident","account","accuse","achieve","acid","acoustic","acquire","across","act",
38025"action","actor","actress","actual","adapt","add","addict","address","adjust","admit",
38026"adult","advance","advice","aerobic","affair","afford","afraid","again","age","agent",
38027"agree","ahead","aim","air","airport","aisle","alarm","album","alcohol","alert",
38028"alien","all","alley","allow","almost","alone","alpha","already","also","alter",
38029"always","amateur","amazing","among","amount","amused","analyst","anchor","ancient","anger",
38030"angle","angry","animal","ankle","announce","annual","another","answer","antenna","antique",
38031"anxiety","any","apart","apology","appear","apple","approve","april","arch","arctic",
38032"area","arena","argue","arm","armed","armor","army","around","arrange","arrest",
38033"arrive","arrow","art","artefact","artist","artwork","ask","aspect","assault","asset",
38034"assist","assume","asthma","athlete","atom","attack","attend","attitude","attract","auction",
38035"audit","august","aunt","author","auto","autumn","average","avocado","avoid","awake",
38036"aware","away","awesome","awful","awkward","axis","baby","bachelor","bacon","badge",
38037"bag","balance","balcony","ball","bamboo","banana","banner","bar","barely","bargain",
38038"barrel","base","basic","basket","battle","beach","bean","beauty","because","become",
38039"beef","before","begin","behave","behind","believe","below","belt","bench","benefit",
38040"best","betray","better","between","beyond","bicycle","bid","bike","bind","biology",
38041"bird","birth","bitter","black","blade","blame","blanket","blast","bleak","bless",
38042"blind","blood","blossom","blouse","blue","blur","blush","board","boat","body",
38043"boil","bomb","bone","bonus","book","boost","border","boring","borrow","boss",
38044"bottom","bounce","box","boy","bracket","brain","brand","brass","brave","bread",
38045"breeze","brick","bridge","brief","bright","bring","brisk","broccoli","broken","bronze",
38046"broom","brother","brown","brush","bubble","buddy","budget","buffalo","build","bulb",
38047"bulk","bullet","bundle","bunker","burden","burger","burst","bus","business","busy",
38048"butter","buyer","buzz","cabbage","cabin","cable","cactus","cage","cake","call",
38049"calm","camera","camp","can","canal","cancel","candy","cannon","canoe","canvas",
38050"canyon","capable","capital","captain","car","carbon","card","cargo","carpet","carry",
38051"cart","case","cash","casino","castle","casual","cat","catalog","catch","category",
38052"cattle","caught","cause","caution","cave","ceiling","celery","cement","census","century",
38053"cereal","certain","chair","chalk","champion","change","chaos","chapter","charge","chase",
38054"chat","cheap","check","cheese","chef","cherry","chest","chicken","chief","child",
38055"chimney","choice","choose","chronic","chuckle","chunk","churn","cigar","cinnamon","circle",
38056"citizen","city","civil","claim","clap","clarify","claw","clay","clean","clerk",
38057"clever","click","client","cliff","climb","clinic","clip","clock","clog","close",
38058"cloth","cloud","clown","club","clump","cluster","clutch","coach","coast","coconut",
38059"code","coffee","coil","coin","collect","color","column","combine","come","comfort",
38060"comic","common","company","concert","conduct","confirm","congress","connect","consider","control",
38061"convince","cook","cool","copper","copy","coral","core","corn","correct","cost",
38062"cotton","couch","country","couple","course","cousin","cover","coyote","crack","cradle",
38063"craft","cram","crane","crash","crater","crawl","crazy","cream","credit","creek",
38064"crew","cricket","crime","crisp","critic","crop","cross","crouch","crowd","crucial",
38065"cruel","cruise","crumble","crunch","crush","cry","crystal","cube","culture","cup",
38066"cupboard","curious","current","curtain","curve","cushion","custom","cute","cycle","dad",
38067"damage","damp","dance","danger","daring","dash","daughter","dawn","day","deal",
38068"debate","debris","decade","december","decide","decline","decorate","decrease","deer","defense",
38069"define","defy","degree","delay","deliver","demand","demise","denial","dentist","deny",
38070"depart","depend","deposit","depth","deputy","derive","describe","desert","design","desk",
38071"despair","destroy","detail","detect","develop","device","devote","diagram","dial","diamond",
38072"diary","dice","diesel","diet","differ","digital","dignity","dilemma","dinner","dinosaur",
38073"direct","dirt","disagree","discover","disease","dish","dismiss","disorder","display","distance",
38074"divert","divide","divorce","dizzy","doctor","document","dog","doll","dolphin","domain",
38075"donate","donkey","donor","door","dose","double","dove","draft","dragon","drama",
38076"drastic","draw","dream","dress","drift","drill","drink","drip","drive","drop",
38077"drum","dry","duck","dumb","dune","during","dust","dutch","duty","dwarf",
38078"dynamic","eager","eagle","early","earn","earth","easily","east","easy","echo",
38079"ecology","economy","edge","edit","educate","effort","egg","eight","either","elbow",
38080"elder","electric","elegant","element","elephant","elevator","elite","else","embark","embody",
38081"embrace","emerge","emotion","employ","empower","empty","enable","enact","end","endless",
38082"endorse","enemy","energy","enforce","engage","engine","enhance","enjoy","enlist","enough",
38083"enrich","enroll","ensure","enter","entire","entry","envelope","episode","equal","equip",
38084"era","erase","erode","erosion","error","erupt","escape","essay","essence","estate",
38085"eternal","ethics","evidence","evil","evoke","evolve","exact","example","excess","exchange",
38086"excite","exclude","excuse","execute","exercise","exhaust","exhibit","exile","exist","exit",
38087"exotic","expand","expect","expire","explain","expose","express","extend","extra","eye",
38088"eyebrow","fabric","face","faculty","fade","faint","faith","fall","false","fame",
38089"family","famous","fan","fancy","fantasy","farm","fashion","fat","fatal","father",
38090"fatigue","fault","favorite","feature","february","federal","fee","feed","feel","female",
38091"fence","festival","fetch","fever","few","fiber","fiction","field","figure","file",
38092"film","filter","final","find","fine","finger","finish","fire","firm","first",
38093"fiscal","fish","fit","fitness","fix","flag","flame","flash","flat","flavor",
38094"flee","flight","flip","float","flock","floor","flower","fluid","flush","fly",
38095"foam","focus","fog","foil","fold","follow","food","foot","force","forest",
38096"forget","fork","fortune","forum","forward","fossil","foster","found","fox","fragile",
38097"frame","frequent","fresh","friend","fringe","frog","front","frost","frown","frozen",
38098"fruit","fuel","fun","funny","furnace","fury","future","gadget","gain","galaxy",
38099"gallery","game","gap","garage","garbage","garden","garlic","garment","gas","gasp",
38100"gate","gather","gauge","gaze","general","genius","genre","gentle","genuine","gesture",
38101"ghost","giant","gift","giggle","ginger","giraffe","girl","give","glad","glance",
38102"glare","glass","glide","glimpse","globe","gloom","glory","glove","glow","glue",
38103"goat","goddess","gold","good","goose","gorilla","gospel","gossip","govern","gown",
38104"grab","grace","grain","grant","grape","grass","gravity","great","green","grid",
38105"grief","grit","grocery","group","grow","grunt","guard","guess","guide","guilt",
38106"guitar","gun","gym","habit","hair","half","hammer","hamster","hand","happy",
38107"harbor","hard","harsh","harvest","hat","have","hawk","hazard","head","health",
38108"heart","heavy","hedgehog","height","hello","helmet","help","hen","hero","hidden",
38109"high","hill","hint","hip","hire","history","hobby","hockey","hold","hole",
38110"holiday","hollow","home","honey","hood","hope","horn","horror","horse","hospital",
38111"host","hotel","hour","hover","hub","huge","human","humble","humor","hundred",
38112"hungry","hunt","hurdle","hurry","hurt","husband","hybrid","ice","icon","idea",
38113"identify","idle","ignore","ill","illegal","illness","image","imitate","immense","immune",
38114"impact","impose","improve","impulse","inch","include","income","increase","index","indicate",
38115"indoor","industry","infant","inflict","inform","inhale","inherit","initial","inject","injury",
38116"inmate","inner","innocent","input","inquiry","insane","insect","inside","inspire","install",
38117"intact","interest","into","invest","invite","involve","iron","island","isolate","issue",
38118"item","ivory","jacket","jaguar","jar","jazz","jealous","jeans","jelly","jewel",
38119"job","join","joke","journey","joy","judge","juice","jump","jungle","junior",
38120"junk","just","kangaroo","keen","keep","ketchup","key","kick","kid","kidney",
38121"kind","kingdom","kiss","kit","kitchen","kite","kitten","kiwi","knee","knife",
38122"knock","know","lab","label","labor","ladder","lady","lake","lamp","language",
38123"laptop","large","later","latin","laugh","laundry","lava","law","lawn","lawsuit",
38124"layer","lazy","leader","leaf","learn","leave","lecture","left","leg","legal",
38125"legend","leisure","lemon","lend","length","lens","leopard","lesson","letter","level",
38126"liar","liberty","library","license","life","lift","light","like","limb","limit",
38127"link","lion","liquid","list","little","live","lizard","load","loan","lobster",
38128"local","lock","logic","lonely","long","loop","lottery","loud","lounge","love",
38129"loyal","lucky","luggage","lumber","lunar","lunch","luxury","lyrics","machine","mad",
38130"magic","magnet","maid","mail","main","major","make","mammal","man","manage",
38131"mandate","mango","mansion","manual","maple","marble","march","margin","marine","market",
38132"marriage","mask","mass","master","match","material","math","matrix","matter","maximum",
38133"maze","meadow","mean","measure","meat","mechanic","medal","media","melody","melt",
38134"member","memory","mention","menu","mercy","merge","merit","merry","mesh","message",
38135"metal","method","middle","midnight","milk","million","mimic","mind","minimum","minor",
38136"minute","miracle","mirror","misery","miss","mistake","mix","mixed","mixture","mobile",
38137"model","modify","mom","moment","monitor","monkey","monster","month","moon","moral",
38138"more","morning","mosquito","mother","motion","motor","mountain","mouse","move","movie",
38139"much","muffin","mule","multiply","muscle","museum","mushroom","music","must","mutual",
38140"myself","mystery","myth","naive","name","napkin","narrow","nasty","nation","nature",
38141"near","neck","need","negative","neglect","neither","nephew","nerve","nest","net",
38142"network","neutral","never","news","next","nice","night","noble","noise","nominee",
38143"noodle","normal","north","nose","notable","note","nothing","notice","novel","now",
38144"nuclear","number","nurse","nut","oak","obey","object","oblige","obscure","observe",
38145"obtain","obvious","occur","ocean","october","odor","off","offer","office","often",
38146"oil","okay","old","olive","olympic","omit","once","one","onion","online",
38147"only","open","opera","opinion","oppose","option","orange","orbit","orchard","order",
38148"ordinary","organ","orient","original","orphan","ostrich","other","outdoor","outer","output",
38149"outside","oval","oven","over","own","owner","oxygen","oyster","ozone","pact",
38150"paddle","page","pair","palace","palm","panda","panel","panic","panther","paper",
38151"parade","parent","park","parrot","party","pass","patch","path","patient","patrol",
38152"pattern","pause","pave","payment","peace","peanut","pear","peasant","pelican","pen",
38153"penalty","pencil","people","pepper","perfect","permit","person","pet","phone","photo",
38154"phrase","physical","piano","picnic","picture","piece","pig","pigeon","pill","pilot",
38155"pink","pioneer","pipe","pistol","pitch","pizza","place","planet","plastic","plate",
38156"play","please","pledge","pluck","plug","plunge","poem","poet","point","polar",
38157"pole","police","pond","pony","pool","popular","portion","position","possible","post",
38158"potato","pottery","poverty","powder","power","practice","praise","predict","prefer","prepare",
38159"present","pretty","prevent","price","pride","primary","print","priority","prison","private",
38160"prize","problem","process","produce","profit","program","project","promote","proof","property",
38161"prosper","protect","proud","provide","public","pudding","pull","pulp","pulse","pumpkin",
38162"punch","pupil","puppy","purchase","purity","purpose","purse","push","put","puzzle",
38163"pyramid","quality","quantum","quarter","question","quick","quit","quiz","quote","rabbit",
38164"raccoon","race","rack","radar","radio","rail","rain","raise","rally","ramp",
38165"ranch","random","range","rapid","rare","rate","rather","raven","raw","razor",
38166"ready","real","reason","rebel","rebuild","recall","receive","recipe","record","recycle",
38167"reduce","reflect","reform","refuse","region","regret","regular","reject","relax","release",
38168"relief","rely","remain","remember","remind","remove","render","renew","rent","reopen",
38169"repair","repeat","replace","report","require","rescue","resemble","resist","resource","response",
38170"result","retire","retreat","return","reunion","reveal","review","reward","rhythm","rib",
38171"ribbon","rice","rich","ride","ridge","rifle","right","rigid","ring","riot",
38172"ripple","risk","ritual","rival","river","road","roast","robot","robust","rocket",
38173"romance","roof","rookie","room","rose","rotate","rough","round","route","royal",
38174"rubber","rude","rug","rule","run","runway","rural","sad","saddle","sadness",
38175"safe","sail","salad","salmon","salon","salt","salute","same","sample","sand",
38176"satisfy","satoshi","sauce","sausage","save","say","scale","scan","scare","scatter",
38177"scene","scheme","school","science","scissors","scorpion","scout","scrap","screen","script",
38178"scrub","sea","search","season","seat","second","secret","section","security","seed",
38179"seek","segment","select","sell","seminar","senior","sense","sentence","series","service",
38180"session","settle","setup","seven","shadow","shaft","shallow","share","shed","shell",
38181"sheriff","shield","shift","shine","ship","shiver","shock","shoe","shoot","shop",
38182"short","shoulder","shove","shrimp","shrug","shuffle","shy","sibling","sick","side",
38183"siege","sight","sign","silent","silk","silly","silver","similar","simple","since",
38184"sing","siren","sister","situate","six","size","skate","sketch","ski","skill",
38185"skin","skirt","skull","slab","slam","sleep","slender","slice","slide","slight",
38186"slim","slogan","slot","slow","slush","small","smart","smile","smoke","smooth",
38187"snack","snake","snap","sniff","snow","soap","soccer","social","sock","soda",
38188"soft","solar","soldier","solid","solution","solve","someone","song","soon","sorry",
38189"sort","soul","sound","soup","source","south","space","spare","spatial","spawn",
38190"speak","special","speed","spell","spend","sphere","spice","spider","spike","spin",
38191"spirit","split","spoil","sponsor","spoon","sport","spot","spray","spread","spring",
38192"spy","square","squeeze","squirrel","stable","stadium","staff","stage","stairs","stamp",
38193"stand","start","state","stay","steak","steel","stem","step","stereo","stick",
38194"still","sting","stock","stomach","stone","stool","story","stove","strategy","street",
38195"strike","strong","struggle","student","stuff","stumble","style","subject","submit","subway",
38196"success","such","sudden","suffer","sugar","suggest","suit","summer","sun","sunny",
38197"sunset","super","supply","supreme","sure","surface","surge","surprise","surround","survey",
38198"suspect","sustain","swallow","swamp","swap","swarm","swear","sweet","swift","swim",
38199"swing","switch","sword","symbol","symptom","syrup","system","table","tackle","tag",
38200"tail","talent","talk","tank","tape","target","task","taste","tattoo","taxi",
38201"teach","team","tell","ten","tenant","tennis","tent","term","test","text",
38202"thank","that","theme","then","theory","there","they","thing","this","thought",
38203"three","thrive","throw","thumb","thunder","ticket","tide","tiger","tilt","timber",
38204"time","tiny","tip","tired","tissue","title","toast","tobacco","today","toddler",
38205"toe","together","toilet","token","tomato","tomorrow","tone","tongue","tonight","tool",
38206"tooth","top","topic","topple","torch","tornado","tortoise","toss","total","tourist",
38207"toward","tower","town","toy","track","trade","traffic","tragic","train","transfer",
38208"trap","trash","travel","tray","treat","tree","trend","trial","tribe","trick",
38209"trigger","trim","trip","trophy","trouble","truck","true","truly","trumpet","trust",
38210"truth","try","tube","tuition","tumble","tuna","tunnel","turkey","turn","turtle",
38211"twelve","twenty","twice","twin","twist","two","type","typical","ugly","umbrella",
38212"unable","unaware","uncle","uncover","under","undo","unfair","unfold","unhappy","uniform",
38213"unique","unit","universe","unknown","unlock","until","unusual","unveil","update","upgrade",
38214"uphold","upon","upper","upset","urban","urge","usage","use","used","useful",
38215"useless","usual","utility","vacant","vacuum","vague","valid","valley","valve","van",
38216"vanish","vapor","various","vast","vault","vehicle","velvet","vendor","venture","venue",
38217"verb","verify","version","very","vessel","veteran","viable","vibrant","vicious","victory",
38218"video","view","village","vintage","violin","virtual","virus","visa","visit","visual",
38219"vital","vivid","vocal","voice","void","volcano","volume","vote","voyage","wage",
38220"wagon","wait","walk","wall","walnut","want","warfare","warm","warrior","wash",
38221"wasp","waste","water","wave","way","wealth","weapon","wear","weasel","weather",
38222"web","wedding","weekend","weird","welcome","west","wet","whale","what","wheat",
38223"wheel","when","where","whip","whisper","wide","width","wife","wild","will",
38224"win","window","wine","wing","wink","winner","winter","wire","wisdom","wise",
38225"wish","witness","wolf","woman","wonder","wood","wool","word","work","world",
38226"worry","worth","wrap","wreck","wrestle","wrist","write","wrong","yard","year",
38227"yellow","you","young","youth","zebra","zero","zone","zoo"]
0515eeec
IC
38228</script>
38229 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
38230WORDLISTS["japanese"] = [
38231"あいこくしん", "あいさつ", "あいだ", "あおぞら", "あかちゃん", "あきる", "あけがた", "あける", "あこがれる", "あさい",
38232"あさひ", "あしあと", "あじわう", "あずかる", "あずき", "あそぶ", "あたえる", "あたためる", "あたりまえ", "あたる",
38233"あつい", "あつかう", "あっしゅく", "あつまり", "あつめる", "あてな", "あてはまる", "あひる", "あぶら", "あぶる",
38234"あふれる", "あまい", "あまど", "あまやかす", "あまり", "あみもの", "あめりか", "あやまる", "あゆむ", "あらいぐま",
38235"あらし", "あらすじ", "あらためる", "あらゆる", "あらわす", "ありがとう", "あわせる", "あわてる", "あんい", "あんがい",
38236"あんこ", "あんぜん", "あんてい", "あんない", "あんまり", "いいだす", "いおん", "いがい", "いがく", "いきおい",
38237"いきなり", "いきもの", "いきる", "いくじ", "いくぶん", "いけばな", "いけん", "いこう", "いこく", "いこつ",
38238"いさましい", "いさん", "いしき", "いじゅう", "いじょう", "いじわる", "いずみ", "いずれ", "いせい", "いせえび",
38239"いせかい", "いせき", "いぜん", "いそうろう", "いそがしい", "いだい", "いだく", "いたずら", "いたみ", "いたりあ",
38240"いちおう", "いちじ", "いちど", "いちば", "いちぶ", "いちりゅう", "いつか", "いっしゅん", "いっせい", "いっそう",
38241"いったん", "いっち", "いってい", "いっぽう", "いてざ", "いてん", "いどう", "いとこ", "いない", "いなか",
38242"いねむり", "いのち", "いのる", "いはつ", "いばる", "いはん", "いびき", "いひん", "いふく", "いへん",
38243"いほう", "いみん", "いもうと", "いもたれ", "いもり", "いやがる", "いやす", "いよかん", "いよく", "いらい",
38244"いらすと", "いりぐち", "いりょう", "いれい", "いれもの", "いれる", "いろえんぴつ", "いわい", "いわう", "いわかん",
38245"いわば", "いわゆる", "いんげんまめ", "いんさつ", "いんしょう", "いんよう", "うえき", "うえる", "うおざ", "うがい",
38246"うかぶ", "うかべる", "うきわ", "うくらいな", "うくれれ", "うけたまわる", "うけつけ", "うけとる", "うけもつ", "うける",
38247"うごかす", "うごく", "うこん", "うさぎ", "うしなう", "うしろがみ", "うすい", "うすぎ", "うすぐらい", "うすめる",
38248"うせつ", "うちあわせ", "うちがわ", "うちき", "うちゅう", "うっかり", "うつくしい", "うったえる", "うつる", "うどん",
38249"うなぎ", "うなじ", "うなずく", "うなる", "うねる", "うのう", "うぶげ", "うぶごえ", "うまれる", "うめる",
38250"うもう", "うやまう", "うよく", "うらがえす", "うらぐち", "うらない", "うりあげ", "うりきれ", "うるさい", "うれしい",
38251"うれゆき", "うれる", "うろこ", "うわき", "うわさ", "うんこう", "うんちん", "うんてん", "うんどう", "えいえん",
38252"えいが", "えいきょう", "えいご", "えいせい", "えいぶん", "えいよう", "えいわ", "えおり", "えがお", "えがく",
38253"えきたい", "えくせる", "えしゃく", "えすて", "えつらん", "えのぐ", "えほうまき", "えほん", "えまき", "えもじ",
38254"えもの", "えらい", "えらぶ", "えりあ", "えんえん", "えんかい", "えんぎ", "えんげき", "えんしゅう", "えんぜつ",
38255"えんそく", "えんちょう", "えんとつ", "おいかける", "おいこす", "おいしい", "おいつく", "おうえん", "おうさま", "おうじ",
38256"おうせつ", "おうたい", "おうふく", "おうべい", "おうよう", "おえる", "おおい", "おおう", "おおどおり", "おおや",
38257"おおよそ", "おかえり", "おかず", "おがむ", "おかわり", "おぎなう", "おきる", "おくさま", "おくじょう", "おくりがな",
38258"おくる", "おくれる", "おこす", "おこなう", "おこる", "おさえる", "おさない", "おさめる", "おしいれ", "おしえる",
38259"おじぎ", "おじさん", "おしゃれ", "おそらく", "おそわる", "おたがい", "おたく", "おだやか", "おちつく", "おっと",
38260"おつり", "おでかけ", "おとしもの", "おとなしい", "おどり", "おどろかす", "おばさん", "おまいり", "おめでとう", "おもいで",
38261"おもう", "おもたい", "おもちゃ", "おやつ", "おやゆび", "およぼす", "おらんだ", "おろす", "おんがく", "おんけい",
38262"おんしゃ", "おんせん", "おんだん", "おんちゅう", "おんどけい", "かあつ", "かいが", "がいき", "がいけん", "がいこう",
38263"かいさつ", "かいしゃ", "かいすいよく", "かいぜん", "かいぞうど", "かいつう", "かいてん", "かいとう", "かいふく", "がいへき",
38264"かいほう", "かいよう", "がいらい", "かいわ", "かえる", "かおり", "かかえる", "かがく", "かがし", "かがみ",
38265"かくご", "かくとく", "かざる", "がぞう", "かたい", "かたち", "がちょう", "がっきゅう", "がっこう", "がっさん",
38266"がっしょう", "かなざわし", "かのう", "がはく", "かぶか", "かほう", "かほご", "かまう", "かまぼこ", "かめれおん",
38267"かゆい", "かようび", "からい", "かるい", "かろう", "かわく", "かわら", "がんか", "かんけい", "かんこう",
38268"かんしゃ", "かんそう", "かんたん", "かんち", "がんばる", "きあい", "きあつ", "きいろ", "ぎいん", "きうい",
38269"きうん", "きえる", "きおう", "きおく", "きおち", "きおん", "きかい", "きかく", "きかんしゃ", "ききて",
38270"きくばり", "きくらげ", "きけんせい", "きこう", "きこえる", "きこく", "きさい", "きさく", "きさま", "きさらぎ",
38271"ぎじかがく", "ぎしき", "ぎじたいけん", "ぎじにってい", "ぎじゅつしゃ", "きすう", "きせい", "きせき", "きせつ", "きそう",
38272"きぞく", "きぞん", "きたえる", "きちょう", "きつえん", "ぎっちり", "きつつき", "きつね", "きてい", "きどう",
38273"きどく", "きない", "きなが", "きなこ", "きぬごし", "きねん", "きのう", "きのした", "きはく", "きびしい",
38274"きひん", "きふく", "きぶん", "きぼう", "きほん", "きまる", "きみつ", "きむずかしい", "きめる", "きもだめし",
38275"きもち", "きもの", "きゃく", "きやく", "ぎゅうにく", "きよう", "きょうりゅう", "きらい", "きらく", "きりん",
38276"きれい", "きれつ", "きろく", "ぎろん", "きわめる", "ぎんいろ", "きんかくじ", "きんじょ", "きんようび", "ぐあい",
38277"くいず", "くうかん", "くうき", "くうぐん", "くうこう", "ぐうせい", "くうそう", "ぐうたら", "くうふく", "くうぼ",
38278"くかん", "くきょう", "くげん", "ぐこう", "くさい", "くさき", "くさばな", "くさる", "くしゃみ", "くしょう",
38279"くすのき", "くすりゆび", "くせげ", "くせん", "ぐたいてき", "くださる", "くたびれる", "くちこみ", "くちさき", "くつした",
38280"ぐっすり", "くつろぐ", "くとうてん", "くどく", "くなん", "くねくね", "くのう", "くふう", "くみあわせ", "くみたてる",
38281"くめる", "くやくしょ", "くらす", "くらべる", "くるま", "くれる", "くろう", "くわしい", "ぐんかん", "ぐんしょく",
38282"ぐんたい", "ぐんて", "けあな", "けいかく", "けいけん", "けいこ", "けいさつ", "げいじゅつ", "けいたい", "げいのうじん",
38283"けいれき", "けいろ", "けおとす", "けおりもの", "げきか", "げきげん", "げきだん", "げきちん", "げきとつ", "げきは",
38284"げきやく", "げこう", "げこくじょう", "げざい", "けさき", "げざん", "けしき", "けしごむ", "けしょう", "げすと",
38285"けたば", "けちゃっぷ", "けちらす", "けつあつ", "けつい", "けつえき", "けっこん", "けつじょ", "けっせき", "けってい",
38286"けつまつ", "げつようび", "げつれい", "けつろん", "げどく", "けとばす", "けとる", "けなげ", "けなす", "けなみ",
38287"けぬき", "げねつ", "けねん", "けはい", "げひん", "けぶかい", "げぼく", "けまり", "けみかる", "けむし",
38288"けむり", "けもの", "けらい", "けろけろ", "けわしい", "けんい", "けんえつ", "けんお", "けんか", "げんき",
38289"けんげん", "けんこう", "けんさく", "けんしゅう", "けんすう", "げんそう", "けんちく", "けんてい", "けんとう", "けんない",
38290"けんにん", "げんぶつ", "けんま", "けんみん", "けんめい", "けんらん", "けんり", "こあくま", "こいぬ", "こいびと",
38291"ごうい", "こうえん", "こうおん", "こうかん", "ごうきゅう", "ごうけい", "こうこう", "こうさい", "こうじ", "こうすい",
38292"ごうせい", "こうそく", "こうたい", "こうちゃ", "こうつう", "こうてい", "こうどう", "こうない", "こうはい", "ごうほう",
38293"ごうまん", "こうもく", "こうりつ", "こえる", "こおり", "ごかい", "ごがつ", "ごかん", "こくご", "こくさい",
38294"こくとう", "こくない", "こくはく", "こぐま", "こけい", "こける", "ここのか", "こころ", "こさめ", "こしつ",
38295"こすう", "こせい", "こせき", "こぜん", "こそだて", "こたい", "こたえる", "こたつ", "こちょう", "こっか",
38296"こつこつ", "こつばん", "こつぶ", "こてい", "こてん", "ことがら", "ことし", "ことば", "ことり", "こなごな",
38297"こねこね", "このまま", "このみ", "このよ", "ごはん", "こひつじ", "こふう", "こふん", "こぼれる", "ごまあぶら",
38298"こまかい", "ごますり", "こまつな", "こまる", "こむぎこ", "こもじ", "こもち", "こもの", "こもん", "こやく",
38299"こやま", "こゆう", "こゆび", "こよい", "こよう", "こりる", "これくしょん", "ころっけ", "こわもて", "こわれる",
38300"こんいん", "こんかい", "こんき", "こんしゅう", "こんすい", "こんだて", "こんとん", "こんなん", "こんびに", "こんぽん",
38301"こんまけ", "こんや", "こんれい", "こんわく", "ざいえき", "さいかい", "さいきん", "ざいげん", "ざいこ", "さいしょ",
38302"さいせい", "ざいたく", "ざいちゅう", "さいてき", "ざいりょう", "さうな", "さかいし", "さがす", "さかな", "さかみち",
38303"さがる", "さぎょう", "さくし", "さくひん", "さくら", "さこく", "さこつ", "さずかる", "ざせき", "さたん",
38304"さつえい", "ざつおん", "ざっか", "ざつがく", "さっきょく", "ざっし", "さつじん", "ざっそう", "さつたば", "さつまいも",
38305"さてい", "さといも", "さとう", "さとおや", "さとし", "さとる", "さのう", "さばく", "さびしい", "さべつ",
38306"さほう", "さほど", "さます", "さみしい", "さみだれ", "さむけ", "さめる", "さやえんどう", "さゆう", "さよう",
38307"さよく", "さらだ", "ざるそば", "さわやか", "さわる", "さんいん", "さんか", "さんきゃく", "さんこう", "さんさい",
38308"ざんしょ", "さんすう", "さんせい", "さんそ", "さんち", "さんま", "さんみ", "さんらん", "しあい", "しあげ",
38309"しあさって", "しあわせ", "しいく", "しいん", "しうち", "しえい", "しおけ", "しかい", "しかく", "じかん",
38310"しごと", "しすう", "じだい", "したうけ", "したぎ", "したて", "したみ", "しちょう", "しちりん", "しっかり",
38311"しつじ", "しつもん", "してい", "してき", "してつ", "じてん", "じどう", "しなぎれ", "しなもの", "しなん",
38312"しねま", "しねん", "しのぐ", "しのぶ", "しはい", "しばかり", "しはつ", "しはらい", "しはん", "しひょう",
38313"しふく", "じぶん", "しへい", "しほう", "しほん", "しまう", "しまる", "しみん", "しむける", "じむしょ",
38314"しめい", "しめる", "しもん", "しゃいん", "しゃうん", "しゃおん", "じゃがいも", "しやくしょ", "しゃくほう", "しゃけん",
38315"しゃこ", "しゃざい", "しゃしん", "しゃせん", "しゃそう", "しゃたい", "しゃちょう", "しゃっきん", "じゃま", "しゃりん",
38316"しゃれい", "じゆう", "じゅうしょ", "しゅくはく", "じゅしん", "しゅっせき", "しゅみ", "しゅらば", "じゅんばん", "しょうかい",
38317"しょくたく", "しょっけん", "しょどう", "しょもつ", "しらせる", "しらべる", "しんか", "しんこう", "じんじゃ", "しんせいじ",
38318"しんちく", "しんりん", "すあげ", "すあし", "すあな", "ずあん", "すいえい", "すいか", "すいとう", "ずいぶん",
38319"すいようび", "すうがく", "すうじつ", "すうせん", "すおどり", "すきま", "すくう", "すくない", "すける", "すごい",
38320"すこし", "ずさん", "すずしい", "すすむ", "すすめる", "すっかり", "ずっしり", "ずっと", "すてき", "すてる",
38321"すねる", "すのこ", "すはだ", "すばらしい", "ずひょう", "ずぶぬれ", "すぶり", "すふれ", "すべて", "すべる",
38322"ずほう", "すぼん", "すまい", "すめし", "すもう", "すやき", "すらすら", "するめ", "すれちがう", "すろっと",
38323"すわる", "すんぜん", "すんぽう", "せあぶら", "せいかつ", "せいげん", "せいじ", "せいよう", "せおう", "せかいかん",
38324"せきにん", "せきむ", "せきゆ", "せきらんうん", "せけん", "せこう", "せすじ", "せたい", "せたけ", "せっかく",
38325"せっきゃく", "ぜっく", "せっけん", "せっこつ", "せっさたくま", "せつぞく", "せつだん", "せつでん", "せっぱん", "せつび",
38326"せつぶん", "せつめい", "せつりつ", "せなか", "せのび", "せはば", "せびろ", "せぼね", "せまい", "せまる",
38327"せめる", "せもたれ", "せりふ", "ぜんあく", "せんい", "せんえい", "せんか", "せんきょ", "せんく", "せんげん",
38328"ぜんご", "せんさい", "せんしゅ", "せんすい", "せんせい", "せんぞ", "せんたく", "せんちょう", "せんてい", "せんとう",
38329"せんぬき", "せんねん", "せんぱい", "ぜんぶ", "ぜんぽう", "せんむ", "せんめんじょ", "せんもん", "せんやく", "せんゆう",
38330"せんよう", "ぜんら", "ぜんりゃく", "せんれい", "せんろ", "そあく", "そいとげる", "そいね", "そうがんきょう", "そうき",
38331"そうご", "そうしん", "そうだん", "そうなん", "そうび", "そうめん", "そうり", "そえもの", "そえん", "そがい",
38332"そげき", "そこう", "そこそこ", "そざい", "そしな", "そせい", "そせん", "そそぐ", "そだてる", "そつう",
38333"そつえん", "そっかん", "そつぎょう", "そっけつ", "そっこう", "そっせん", "そっと", "そとがわ", "そとづら", "そなえる",
38334"そなた", "そふぼ", "そぼく", "そぼろ", "そまつ", "そまる", "そむく", "そむりえ", "そめる", "そもそも",
38335"そよかぜ", "そらまめ", "そろう", "そんかい", "そんけい", "そんざい", "そんしつ", "そんぞく", "そんちょう", "ぞんび",
38336"ぞんぶん", "そんみん", "たあい", "たいいん", "たいうん", "たいえき", "たいおう", "だいがく", "たいき", "たいぐう",
38337"たいけん", "たいこ", "たいざい", "だいじょうぶ", "だいすき", "たいせつ", "たいそう", "だいたい", "たいちょう", "たいてい",
38338"だいどころ", "たいない", "たいねつ", "たいのう", "たいはん", "だいひょう", "たいふう", "たいへん", "たいほ", "たいまつばな",
38339"たいみんぐ", "たいむ", "たいめん", "たいやき", "たいよう", "たいら", "たいりょく", "たいる", "たいわん", "たうえ",
38340"たえる", "たおす", "たおる", "たおれる", "たかい", "たかね", "たきび", "たくさん", "たこく", "たこやき",
38341"たさい", "たしざん", "だじゃれ", "たすける", "たずさわる", "たそがれ", "たたかう", "たたく", "ただしい", "たたみ",
38342"たちばな", "だっかい", "だっきゃく", "だっこ", "だっしゅつ", "だったい", "たてる", "たとえる", "たなばた", "たにん",
38343"たぬき", "たのしみ", "たはつ", "たぶん", "たべる", "たぼう", "たまご", "たまる", "だむる", "ためいき",
38344"ためす", "ためる", "たもつ", "たやすい", "たよる", "たらす", "たりきほんがん", "たりょう", "たりる", "たると",
38345"たれる", "たれんと", "たろっと", "たわむれる", "だんあつ", "たんい", "たんおん", "たんか", "たんき", "たんけん",
38346"たんご", "たんさん", "たんじょうび", "だんせい", "たんそく", "たんたい", "だんち", "たんてい", "たんとう", "だんな",
38347"たんにん", "だんねつ", "たんのう", "たんぴん", "だんぼう", "たんまつ", "たんめい", "だんれつ", "だんろ", "だんわ",
38348"ちあい", "ちあん", "ちいき", "ちいさい", "ちえん", "ちかい", "ちから", "ちきゅう", "ちきん", "ちけいず",
38349"ちけん", "ちこく", "ちさい", "ちしき", "ちしりょう", "ちせい", "ちそう", "ちたい", "ちたん", "ちちおや",
38350"ちつじょ", "ちてき", "ちてん", "ちぬき", "ちぬり", "ちのう", "ちひょう", "ちへいせん", "ちほう", "ちまた",
38351"ちみつ", "ちみどろ", "ちめいど", "ちゃんこなべ", "ちゅうい", "ちゆりょく", "ちょうし", "ちょさくけん", "ちらし", "ちらみ",
38352"ちりがみ", "ちりょう", "ちるど", "ちわわ", "ちんたい", "ちんもく", "ついか", "ついたち", "つうか", "つうじょう",
38353"つうはん", "つうわ", "つかう", "つかれる", "つくね", "つくる", "つけね", "つける", "つごう", "つたえる",
38354"つづく", "つつじ", "つつむ", "つとめる", "つながる", "つなみ", "つねづね", "つのる", "つぶす", "つまらない",
38355"つまる", "つみき", "つめたい", "つもり", "つもる", "つよい", "つるぼ", "つるみく", "つわもの", "つわり",
38356"てあし", "てあて", "てあみ", "ていおん", "ていか", "ていき", "ていけい", "ていこく", "ていさつ", "ていし",
38357"ていせい", "ていたい", "ていど", "ていねい", "ていひょう", "ていへん", "ていぼう", "てうち", "ておくれ", "てきとう",
38358"てくび", "でこぼこ", "てさぎょう", "てさげ", "てすり", "てそう", "てちがい", "てちょう", "てつがく", "てつづき",
38359"でっぱ", "てつぼう", "てつや", "でぬかえ", "てぬき", "てぬぐい", "てのひら", "てはい", "てぶくろ", "てふだ",
38360"てほどき", "てほん", "てまえ", "てまきずし", "てみじか", "てみやげ", "てらす", "てれび", "てわけ", "てわたし",
38361"でんあつ", "てんいん", "てんかい", "てんき", "てんぐ", "てんけん", "てんごく", "てんさい", "てんし", "てんすう",
38362"でんち", "てんてき", "てんとう", "てんない", "てんぷら", "てんぼうだい", "てんめつ", "てんらんかい", "でんりょく", "でんわ",
38363"どあい", "といれ", "どうかん", "とうきゅう", "どうぐ", "とうし", "とうむぎ", "とおい", "とおか", "とおく",
38364"とおす", "とおる", "とかい", "とかす", "ときおり", "ときどき", "とくい", "とくしゅう", "とくてん", "とくに",
38365"とくべつ", "とけい", "とける", "とこや", "とさか", "としょかん", "とそう", "とたん", "とちゅう", "とっきゅう",
38366"とっくん", "とつぜん", "とつにゅう", "とどける", "ととのえる", "とない", "となえる", "となり", "とのさま", "とばす",
38367"どぶがわ", "とほう", "とまる", "とめる", "ともだち", "ともる", "どようび", "とらえる", "とんかつ", "どんぶり",
38368"ないかく", "ないこう", "ないしょ", "ないす", "ないせん", "ないそう", "なおす", "ながい", "なくす", "なげる",
38369"なこうど", "なさけ", "なたでここ", "なっとう", "なつやすみ", "ななおし", "なにごと", "なにもの", "なにわ", "なのか",
38370"なふだ", "なまいき", "なまえ", "なまみ", "なみだ", "なめらか", "なめる", "なやむ", "ならう", "ならび",
38371"ならぶ", "なれる", "なわとび", "なわばり", "にあう", "にいがた", "にうけ", "におい", "にかい", "にがて",
38372"にきび", "にくしみ", "にくまん", "にげる", "にさんかたんそ", "にしき", "にせもの", "にちじょう", "にちようび", "にっか",
38373"にっき", "にっけい", "にっこう", "にっさん", "にっしょく", "にっすう", "にっせき", "にってい", "になう", "にほん",
38374"にまめ", "にもつ", "にやり", "にゅういん", "にりんしゃ", "にわとり", "にんい", "にんか", "にんき", "にんげん",
38375"にんしき", "にんずう", "にんそう", "にんたい", "にんち", "にんてい", "にんにく", "にんぷ", "にんまり", "にんむ",
38376"にんめい", "にんよう", "ぬいくぎ", "ぬかす", "ぬぐいとる", "ぬぐう", "ぬくもり", "ぬすむ", "ぬまえび", "ぬめり",
38377"ぬらす", "ぬんちゃく", "ねあげ", "ねいき", "ねいる", "ねいろ", "ねぐせ", "ねくたい", "ねくら", "ねこぜ",
38378"ねこむ", "ねさげ", "ねすごす", "ねそべる", "ねだん", "ねつい", "ねっしん", "ねつぞう", "ねったいぎょ", "ねぶそく",
38379"ねふだ", "ねぼう", "ねほりはほり", "ねまき", "ねまわし", "ねみみ", "ねむい", "ねむたい", "ねもと", "ねらう",
38380"ねわざ", "ねんいり", "ねんおし", "ねんかん", "ねんきん", "ねんぐ", "ねんざ", "ねんし", "ねんちゃく", "ねんど",
38381"ねんぴ", "ねんぶつ", "ねんまつ", "ねんりょう", "ねんれい", "のいず", "のおづま", "のがす", "のきなみ", "のこぎり",
38382"のこす", "のこる", "のせる", "のぞく", "のぞむ", "のたまう", "のちほど", "のっく", "のばす", "のはら",
38383"のべる", "のぼる", "のみもの", "のやま", "のらいぬ", "のらねこ", "のりもの", "のりゆき", "のれん", "のんき",
38384"ばあい", "はあく", "ばあさん", "ばいか", "ばいく", "はいけん", "はいご", "はいしん", "はいすい", "はいせん",
38385"はいそう", "はいち", "ばいばい", "はいれつ", "はえる", "はおる", "はかい", "ばかり", "はかる", "はくしゅ",
38386"はけん", "はこぶ", "はさみ", "はさん", "はしご", "ばしょ", "はしる", "はせる", "ぱそこん", "はそん",
38387"はたん", "はちみつ", "はつおん", "はっかく", "はづき", "はっきり", "はっくつ", "はっけん", "はっこう", "はっさん",
38388"はっしん", "はったつ", "はっちゅう", "はってん", "はっぴょう", "はっぽう", "はなす", "はなび", "はにかむ", "はぶらし",
38389"はみがき", "はむかう", "はめつ", "はやい", "はやし", "はらう", "はろうぃん", "はわい", "はんい", "はんえい",
38390"はんおん", "はんかく", "はんきょう", "ばんぐみ", "はんこ", "はんしゃ", "はんすう", "はんだん", "ぱんち", "ぱんつ",
38391"はんてい", "はんとし", "はんのう", "はんぱ", "はんぶん", "はんぺん", "はんぼうき", "はんめい", "はんらん", "はんろん",
38392"ひいき", "ひうん", "ひえる", "ひかく", "ひかり", "ひかる", "ひかん", "ひくい", "ひけつ", "ひこうき",
38393"ひこく", "ひさい", "ひさしぶり", "ひさん", "びじゅつかん", "ひしょ", "ひそか", "ひそむ", "ひたむき", "ひだり",
38394"ひたる", "ひつぎ", "ひっこし", "ひっし", "ひつじゅひん", "ひっす", "ひつぜん", "ぴったり", "ぴっちり", "ひつよう",
38395"ひてい", "ひとごみ", "ひなまつり", "ひなん", "ひねる", "ひはん", "ひびく", "ひひょう", "ひほう", "ひまわり",
38396"ひまん", "ひみつ", "ひめい", "ひめじし", "ひやけ", "ひやす", "ひよう", "びょうき", "ひらがな", "ひらく",
38397"ひりつ", "ひりょう", "ひるま", "ひるやすみ", "ひれい", "ひろい", "ひろう", "ひろき", "ひろゆき", "ひんかく",
38398"ひんけつ", "ひんこん", "ひんしゅ", "ひんそう", "ぴんち", "ひんぱん", "びんぼう", "ふあん", "ふいうち", "ふうけい",
38399"ふうせん", "ぷうたろう", "ふうとう", "ふうふ", "ふえる", "ふおん", "ふかい", "ふきん", "ふくざつ", "ふくぶくろ",
38400"ふこう", "ふさい", "ふしぎ", "ふじみ", "ふすま", "ふせい", "ふせぐ", "ふそく", "ぶたにく", "ふたん",
38401"ふちょう", "ふつう", "ふつか", "ふっかつ", "ふっき", "ふっこく", "ぶどう", "ふとる", "ふとん", "ふのう",
38402"ふはい", "ふひょう", "ふへん", "ふまん", "ふみん", "ふめつ", "ふめん", "ふよう", "ふりこ", "ふりる",
38403"ふるい", "ふんいき", "ぶんがく", "ぶんぐ", "ふんしつ", "ぶんせき", "ふんそう", "ぶんぽう", "へいあん", "へいおん",
38404"へいがい", "へいき", "へいげん", "へいこう", "へいさ", "へいしゃ", "へいせつ", "へいそ", "へいたく", "へいてん",
38405"へいねつ", "へいわ", "へきが", "へこむ", "べにいろ", "べにしょうが", "へらす", "へんかん", "べんきょう", "べんごし",
38406"へんさい", "へんたい", "べんり", "ほあん", "ほいく", "ぼうぎょ", "ほうこく", "ほうそう", "ほうほう", "ほうもん",
38407"ほうりつ", "ほえる", "ほおん", "ほかん", "ほきょう", "ぼきん", "ほくろ", "ほけつ", "ほけん", "ほこう",
38408"ほこる", "ほしい", "ほしつ", "ほしゅ", "ほしょう", "ほせい", "ほそい", "ほそく", "ほたて", "ほたる",
38409"ぽちぶくろ", "ほっきょく", "ほっさ", "ほったん", "ほとんど", "ほめる", "ほんい", "ほんき", "ほんけ", "ほんしつ",
38410"ほんやく", "まいにち", "まかい", "まかせる", "まがる", "まける", "まこと", "まさつ", "まじめ", "ますく",
38411"まぜる", "まつり", "まとめ", "まなぶ", "まぬけ", "まねく", "まほう", "まもる", "まゆげ", "まよう",
38412"まろやか", "まわす", "まわり", "まわる", "まんが", "まんきつ", "まんぞく", "まんなか", "みいら", "みうち",
38413"みえる", "みがく", "みかた", "みかん", "みけん", "みこん", "みじかい", "みすい", "みすえる", "みせる",
38414"みっか", "みつかる", "みつける", "みてい", "みとめる", "みなと", "みなみかさい", "みねらる", "みのう", "みのがす",
38415"みほん", "みもと", "みやげ", "みらい", "みりょく", "みわく", "みんか", "みんぞく", "むいか", "むえき",
38416"むえん", "むかい", "むかう", "むかえ", "むかし", "むぎちゃ", "むける", "むげん", "むさぼる", "むしあつい",
38417"むしば", "むじゅん", "むしろ", "むすう", "むすこ", "むすぶ", "むすめ", "むせる", "むせん", "むちゅう",
38418"むなしい", "むのう", "むやみ", "むよう", "むらさき", "むりょう", "むろん", "めいあん", "めいうん", "めいえん",
38419"めいかく", "めいきょく", "めいさい", "めいし", "めいそう", "めいぶつ", "めいれい", "めいわく", "めぐまれる", "めざす",
38420"めした", "めずらしい", "めだつ", "めまい", "めやす", "めんきょ", "めんせき", "めんどう", "もうしあげる", "もうどうけん",
38421"もえる", "もくし", "もくてき", "もくようび", "もちろん", "もどる", "もらう", "もんく", "もんだい", "やおや",
38422"やける", "やさい", "やさしい", "やすい", "やすたろう", "やすみ", "やせる", "やそう", "やたい", "やちん",
38423"やっと", "やっぱり", "やぶる", "やめる", "ややこしい", "やよい", "やわらかい", "ゆうき", "ゆうびんきょく", "ゆうべ",
38424"ゆうめい", "ゆけつ", "ゆしゅつ", "ゆせん", "ゆそう", "ゆたか", "ゆちゃく", "ゆでる", "ゆにゅう", "ゆびわ",
38425"ゆらい", "ゆれる", "ようい", "ようか", "ようきゅう", "ようじ", "ようす", "ようちえん", "よかぜ", "よかん",
38426"よきん", "よくせい", "よくぼう", "よけい", "よごれる", "よさん", "よしゅう", "よそう", "よそく", "よっか",
38427"よてい", "よどがわく", "よねつ", "よやく", "よゆう", "よろこぶ", "よろしい", "らいう", "らくがき", "らくご",
38428"らくさつ", "らくだ", "らしんばん", "らせん", "らぞく", "らたい", "らっか", "られつ", "りえき", "りかい",
38429"りきさく", "りきせつ", "りくぐん", "りくつ", "りけん", "りこう", "りせい", "りそう", "りそく", "りてん",
38430"りねん", "りゆう", "りゅうがく", "りよう", "りょうり", "りょかん", "りょくちゃ", "りょこう", "りりく", "りれき",
38431"りろん", "りんご", "るいけい", "るいさい", "るいじ", "るいせき", "るすばん", "るりがわら", "れいかん", "れいぎ",
38432"れいせい", "れいぞうこ", "れいとう", "れいぼう", "れきし", "れきだい", "れんあい", "れんけい", "れんこん", "れんさい",
38433"れんしゅう", "れんぞく", "れんらく", "ろうか", "ろうご", "ろうじん", "ろうそく", "ろくが", "ろこつ", "ろじうら",
38434"ろしゅつ", "ろせん", "ろてん", "ろめん", "ろれつ", "ろんぎ", "ろんぱ", "ろんぶん", "ろんり", "わかす",
38435"わかめ", "わかやま", "わかれる", "わしつ", "わじまし", "わすれもの", "わらう", "われる"]
38436</script>
38437 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
38438WORDLISTS["spanish"] = [
38439"ábaco", "abdomen", "abeja", "abierto", "abogado", "abono", "aborto", "abrazo", "abrir", "abuelo",
38440"abuso", "acabar", "academia", "acceso", "acción", "aceite", "acelga", "acento", "aceptar", "ácido",
38441"aclarar", "acné", "acoger", "acoso", "activo", "acto", "actriz", "actuar", "acudir", "acuerdo",
38442"acusar", "adicto", "admitir", "adoptar", "adorno", "aduana", "adulto", "aéreo", "afectar", "afición",
38443"afinar", "afirmar", "ágil", "agitar", "agonía", "agosto", "agotar", "agregar", "agrio", "agua",
38444"agudo", "águila", "aguja", "ahogo", "ahorro", "aire", "aislar", "ajedrez", "ajeno", "ajuste",
38445"alacrán", "alambre", "alarma", "alba", "álbum", "alcalde", "aldea", "alegre", "alejar", "alerta",
38446"aleta", "alfiler", "alga", "algodón", "aliado", "aliento", "alivio", "alma", "almeja", "almíbar",
38447"altar", "alteza", "altivo", "alto", "altura", "alumno", "alzar", "amable", "amante", "amapola",
38448"amargo", "amasar", "ámbar", "ámbito", "ameno", "amigo", "amistad", "amor", "amparo", "amplio",
38449"ancho", "anciano", "ancla", "andar", "andén", "anemia", "ángulo", "anillo", "ánimo", "anís",
38450"anotar", "antena", "antiguo", "antojo", "anual", "anular", "anuncio", "añadir", "añejo", "año",
38451"apagar", "aparato", "apetito", "apio", "aplicar", "apodo", "aporte", "apoyo", "aprender", "aprobar",
38452"apuesta", "apuro", "arado", "araña", "arar", "árbitro", "árbol", "arbusto", "archivo", "arco",
38453"arder", "ardilla", "arduo", "área", "árido", "aries", "armonía", "arnés", "aroma", "arpa",
38454"arpón", "arreglo", "arroz", "arruga", "arte", "artista", "asa", "asado", "asalto", "ascenso",
38455"asegurar", "aseo", "asesor", "asiento", "asilo", "asistir", "asno", "asombro", "áspero", "astilla",
38456"astro", "astuto", "asumir", "asunto", "atajo", "ataque", "atar", "atento", "ateo", "ático",
38457"atleta", "átomo", "atraer", "atroz", "atún", "audaz", "audio", "auge", "aula", "aumento",
38458"ausente", "autor", "aval", "avance", "avaro", "ave", "avellana", "avena", "avestruz", "avión",
38459"aviso", "ayer", "ayuda", "ayuno", "azafrán", "azar", "azote", "azúcar", "azufre", "azul",
38460"baba", "babor", "bache", "bahía", "baile", "bajar", "balanza", "balcón", "balde", "bambú",
38461"banco", "banda", "baño", "barba", "barco", "barniz", "barro", "báscula", "bastón", "basura",
38462"batalla", "batería", "batir", "batuta", "baúl", "bazar", "bebé", "bebida", "bello", "besar",
38463"beso", "bestia", "bicho", "bien", "bingo", "blanco", "bloque", "blusa", "boa", "bobina",
38464"bobo", "boca", "bocina", "boda", "bodega", "boina", "bola", "bolero", "bolsa", "bomba",
38465"bondad", "bonito", "bono", "bonsái", "borde", "borrar", "bosque", "bote", "botín", "bóveda",
38466"bozal", "bravo", "brazo", "brecha", "breve", "brillo", "brinco", "brisa", "broca", "broma",
38467"bronce", "brote", "bruja", "brusco", "bruto", "buceo", "bucle", "bueno", "buey", "bufanda",
38468"bufón", "búho", "buitre", "bulto", "burbuja", "burla", "burro", "buscar", "butaca", "buzón",
38469"caballo", "cabeza", "cabina", "cabra", "cacao", "cadáver", "cadena", "caer", "café", "caída",
38470"caimán", "caja", "cajón", "cal", "calamar", "calcio", "caldo", "calidad", "calle", "calma",
38471"calor", "calvo", "cama", "cambio", "camello", "camino", "campo", "cáncer", "candil", "canela",
38472"canguro", "canica", "canto", "caña", "cañón", "caoba", "caos", "capaz", "capitán", "capote",
38473"captar", "capucha", "cara", "carbón", "cárcel", "careta", "carga", "cariño", "carne", "carpeta",
38474"carro", "carta", "casa", "casco", "casero", "caspa", "castor", "catorce", "catre", "caudal",
38475"causa", "cazo", "cebolla", "ceder", "cedro", "celda", "célebre", "celoso", "célula", "cemento",
38476"ceniza", "centro", "cerca", "cerdo", "cereza", "cero", "cerrar", "certeza", "césped", "cetro",
38477"chacal", "chaleco", "champú", "chancla", "chapa", "charla", "chico", "chiste", "chivo", "choque",
38478"choza", "chuleta", "chupar", "ciclón", "ciego", "cielo", "cien", "cierto", "cifra", "cigarro",
38479"cima", "cinco", "cine", "cinta", "ciprés", "circo", "ciruela", "cisne", "cita", "ciudad",
38480"clamor", "clan", "claro", "clase", "clave", "cliente", "clima", "clínica", "cobre", "cocción",
38481"cochino", "cocina", "coco", "código", "codo", "cofre", "coger", "cohete", "cojín", "cojo",
38482"cola", "colcha", "colegio", "colgar", "colina", "collar", "colmo", "columna", "combate", "comer",
38483"comida", "cómodo", "compra", "conde", "conejo", "conga", "conocer", "consejo", "contar", "copa",
38484"copia", "corazón", "corbata", "corcho", "cordón", "corona", "correr", "coser", "cosmos", "costa",
38485"cráneo", "cráter", "crear", "crecer", "creído", "crema", "cría", "crimen", "cripta", "crisis",
38486"cromo", "crónica", "croqueta", "crudo", "cruz", "cuadro", "cuarto", "cuatro", "cubo", "cubrir",
38487"cuchara", "cuello", "cuento", "cuerda", "cuesta", "cueva", "cuidar", "culebra", "culpa", "culto",
38488"cumbre", "cumplir", "cuna", "cuneta", "cuota", "cupón", "cúpula", "curar", "curioso", "curso",
38489"curva", "cutis", "dama", "danza", "dar", "dardo", "dátil", "deber", "débil", "década",
38490"decir", "dedo", "defensa", "definir", "dejar", "delfín", "delgado", "delito", "demora", "denso",
38491"dental", "deporte", "derecho", "derrota", "desayuno", "deseo", "desfile", "desnudo", "destino", "desvío",
38492"detalle", "detener", "deuda", "día", "diablo", "diadema", "diamante", "diana", "diario", "dibujo",
38493"dictar", "diente", "dieta", "diez", "difícil", "digno", "dilema", "diluir", "dinero", "directo",
38494"dirigir", "disco", "diseño", "disfraz", "diva", "divino", "doble", "doce", "dolor", "domingo",
38495"don", "donar", "dorado", "dormir", "dorso", "dos", "dosis", "dragón", "droga", "ducha",
38496"duda", "duelo", "dueño", "dulce", "dúo", "duque", "durar", "dureza", "duro", "ébano",
38497"ebrio", "echar", "eco", "ecuador", "edad", "edición", "edificio", "editor", "educar", "efecto",
38498"eficaz", "eje", "ejemplo", "elefante", "elegir", "elemento", "elevar", "elipse", "élite", "elixir",
38499"elogio", "eludir", "embudo", "emitir", "emoción", "empate", "empeño", "empleo", "empresa", "enano",
38500"encargo", "enchufe", "encía", "enemigo", "enero", "enfado", "enfermo", "engaño", "enigma", "enlace",
38501"enorme", "enredo", "ensayo", "enseñar", "entero", "entrar", "envase", "envío", "época", "equipo",
38502"erizo", "escala", "escena", "escolar", "escribir", "escudo", "esencia", "esfera", "esfuerzo", "espada",
38503"espejo", "espía", "esposa", "espuma", "esquí", "estar", "este", "estilo", "estufa", "etapa",
38504"eterno", "ética", "etnia", "evadir", "evaluar", "evento", "evitar", "exacto", "examen", "exceso",
38505"excusa", "exento", "exigir", "exilio", "existir", "éxito", "experto", "explicar", "exponer", "extremo",
38506"fábrica", "fábula", "fachada", "fácil", "factor", "faena", "faja", "falda", "fallo", "falso",
38507"faltar", "fama", "familia", "famoso", "faraón", "farmacia", "farol", "farsa", "fase", "fatiga",
38508"fauna", "favor", "fax", "febrero", "fecha", "feliz", "feo", "feria", "feroz", "fértil",
38509"fervor", "festín", "fiable", "fianza", "fiar", "fibra", "ficción", "ficha", "fideo", "fiebre",
38510"fiel", "fiera", "fiesta", "figura", "fijar", "fijo", "fila", "filete", "filial", "filtro",
38511"fin", "finca", "fingir", "finito", "firma", "flaco", "flauta", "flecha", "flor", "flota",
38512"fluir", "flujo", "flúor", "fobia", "foca", "fogata", "fogón", "folio", "folleto", "fondo",
38513"forma", "forro", "fortuna", "forzar", "fosa", "foto", "fracaso", "frágil", "franja", "frase",
38514"fraude", "freír", "freno", "fresa", "frío", "frito", "fruta", "fuego", "fuente", "fuerza",
38515"fuga", "fumar", "función", "funda", "furgón", "furia", "fusil", "fútbol", "futuro", "gacela",
38516"gafas", "gaita", "gajo", "gala", "galería", "gallo", "gamba", "ganar", "gancho", "ganga",
38517"ganso", "garaje", "garza", "gasolina", "gastar", "gato", "gavilán", "gemelo", "gemir", "gen",
38518"género", "genio", "gente", "geranio", "gerente", "germen", "gesto", "gigante", "gimnasio", "girar",
38519"giro", "glaciar", "globo", "gloria", "gol", "golfo", "goloso", "golpe", "goma", "gordo",
38520"gorila", "gorra", "gota", "goteo", "gozar", "grada", "gráfico", "grano", "grasa", "gratis",
38521"grave", "grieta", "grillo", "gripe", "gris", "grito", "grosor", "grúa", "grueso", "grumo",
38522"grupo", "guante", "guapo", "guardia", "guerra", "guía", "guiño", "guion", "guiso", "guitarra",
38523"gusano", "gustar", "haber", "hábil", "hablar", "hacer", "hacha", "hada", "hallar", "hamaca",
38524"harina", "haz", "hazaña", "hebilla", "hebra", "hecho", "helado", "helio", "hembra", "herir",
38525"hermano", "héroe", "hervir", "hielo", "hierro", "hígado", "higiene", "hijo", "himno", "historia",
38526"hocico", "hogar", "hoguera", "hoja", "hombre", "hongo", "honor", "honra", "hora", "hormiga",
38527"horno", "hostil", "hoyo", "hueco", "huelga", "huerta", "hueso", "huevo", "huida", "huir",
38528"humano", "húmedo", "humilde", "humo", "hundir", "huracán", "hurto", "icono", "ideal", "idioma",
38529"ídolo", "iglesia", "iglú", "igual", "ilegal", "ilusión", "imagen", "imán", "imitar", "impar",
38530"imperio", "imponer", "impulso", "incapaz", "índice", "inerte", "infiel", "informe", "ingenio", "inicio",
38531"inmenso", "inmune", "innato", "insecto", "instante", "interés", "íntimo", "intuir", "inútil", "invierno",
38532"ira", "iris", "ironía", "isla", "islote", "jabalí", "jabón", "jamón", "jarabe", "jardín",
38533"jarra", "jaula", "jazmín", "jefe", "jeringa", "jinete", "jornada", "joroba", "joven", "joya",
38534"juerga", "jueves", "juez", "jugador", "jugo", "juguete", "juicio", "junco", "jungla", "junio",
38535"juntar", "júpiter", "jurar", "justo", "juvenil", "juzgar", "kilo", "koala", "labio", "lacio",
38536"lacra", "lado", "ladrón", "lagarto", "lágrima", "laguna", "laico", "lamer", "lámina", "lámpara",
38537"lana", "lancha", "langosta", "lanza", "lápiz", "largo", "larva", "lástima", "lata", "látex",
38538"latir", "laurel", "lavar", "lazo", "leal", "lección", "leche", "lector", "leer", "legión",
38539"legumbre", "lejano", "lengua", "lento", "leña", "león", "leopardo", "lesión", "letal", "letra",
38540"leve", "leyenda", "libertad", "libro", "licor", "líder", "lidiar", "lienzo", "liga", "ligero",
38541"lima", "límite", "limón", "limpio", "lince", "lindo", "línea", "lingote", "lino", "linterna",
38542"líquido", "liso", "lista", "litera", "litio", "litro", "llaga", "llama", "llanto", "llave",
38543"llegar", "llenar", "llevar", "llorar", "llover", "lluvia", "lobo", "loción", "loco", "locura",
38544"lógica", "logro", "lombriz", "lomo", "lonja", "lote", "lucha", "lucir", "lugar", "lujo",
38545"luna", "lunes", "lupa", "lustro", "luto", "luz", "maceta", "macho", "madera", "madre",
38546"maduro", "maestro", "mafia", "magia", "mago", "maíz", "maldad", "maleta", "malla", "malo",
38547"mamá", "mambo", "mamut", "manco", "mando", "manejar", "manga", "maniquí", "manjar", "mano",
38548"manso", "manta", "mañana", "mapa", "máquina", "mar", "marco", "marea", "marfil", "margen",
38549"marido", "mármol", "marrón", "martes", "marzo", "masa", "máscara", "masivo", "matar", "materia",
38550"matiz", "matriz", "máximo", "mayor", "mazorca", "mecha", "medalla", "medio", "médula", "mejilla",
38551"mejor", "melena", "melón", "memoria", "menor", "mensaje", "mente", "menú", "mercado", "merengue",
38552"mérito", "mes", "mesón", "meta", "meter", "método", "metro", "mezcla", "miedo", "miel",
38553"miembro", "miga", "mil", "milagro", "militar", "millón", "mimo", "mina", "minero", "mínimo",
38554"minuto", "miope", "mirar", "misa", "miseria", "misil", "mismo", "mitad", "mito", "mochila",
38555"moción", "moda", "modelo", "moho", "mojar", "molde", "moler", "molino", "momento", "momia",
38556"monarca", "moneda", "monja", "monto", "moño", "morada", "morder", "moreno", "morir", "morro",
38557"morsa", "mortal", "mosca", "mostrar", "motivo", "mover", "móvil", "mozo", "mucho", "mudar",
38558"mueble", "muela", "muerte", "muestra", "mugre", "mujer", "mula", "muleta", "multa", "mundo",
38559"muñeca", "mural", "muro", "músculo", "museo", "musgo", "música", "muslo", "nácar", "nación",
38560"nadar", "naipe", "naranja", "nariz", "narrar", "nasal", "natal", "nativo", "natural", "náusea",
38561"naval", "nave", "navidad", "necio", "néctar", "negar", "negocio", "negro", "neón", "nervio",
38562"neto", "neutro", "nevar", "nevera", "nicho", "nido", "niebla", "nieto", "niñez", "niño",
38563"nítido", "nivel", "nobleza", "noche", "nómina", "noria", "norma", "norte", "nota", "noticia",
38564"novato", "novela", "novio", "nube", "nuca", "núcleo", "nudillo", "nudo", "nuera", "nueve",
38565"nuez", "nulo", "número", "nutria", "oasis", "obeso", "obispo", "objeto", "obra", "obrero",
38566"observar", "obtener", "obvio", "oca", "ocaso", "océano", "ochenta", "ocho", "ocio", "ocre",
38567"octavo", "octubre", "oculto", "ocupar", "ocurrir", "odiar", "odio", "odisea", "oeste", "ofensa",
38568"oferta", "oficio", "ofrecer", "ogro", "oído", "oír", "ojo", "ola", "oleada", "olfato",
38569"olivo", "olla", "olmo", "olor", "olvido", "ombligo", "onda", "onza", "opaco", "opción",
38570"ópera", "opinar", "oponer", "optar", "óptica", "opuesto", "oración", "orador", "oral", "órbita",
38571"orca", "orden", "oreja", "órgano", "orgía", "orgullo", "oriente", "origen", "orilla", "oro",
38572"orquesta", "oruga", "osadía", "oscuro", "osezno", "oso", "ostra", "otoño", "otro", "oveja",
38573"óvulo", "óxido", "oxígeno", "oyente", "ozono", "pacto", "padre", "paella", "página", "pago",
38574"país", "pájaro", "palabra", "palco", "paleta", "pálido", "palma", "paloma", "palpar", "pan",
38575"panal", "pánico", "pantera", "pañuelo", "papá", "papel", "papilla", "paquete", "parar", "parcela",
38576"pared", "parir", "paro", "párpado", "parque", "párrafo", "parte", "pasar", "paseo", "pasión",
38577"paso", "pasta", "pata", "patio", "patria", "pausa", "pauta", "pavo", "payaso", "peatón",
38578"pecado", "pecera", "pecho", "pedal", "pedir", "pegar", "peine", "pelar", "peldaño", "pelea",
38579"peligro", "pellejo", "pelo", "peluca", "pena", "pensar", "peñón", "peón", "peor", "pepino",
38580"pequeño", "pera", "percha", "perder", "pereza", "perfil", "perico", "perla", "permiso", "perro",
38581"persona", "pesa", "pesca", "pésimo", "pestaña", "pétalo", "petróleo", "pez", "pezuña", "picar",
38582"pichón", "pie", "piedra", "pierna", "pieza", "pijama", "pilar", "piloto", "pimienta", "pino",
38583"pintor", "pinza", "piña", "piojo", "pipa", "pirata", "pisar", "piscina", "piso", "pista",
38584"pitón", "pizca", "placa", "plan", "plata", "playa", "plaza", "pleito", "pleno", "plomo",
38585"pluma", "plural", "pobre", "poco", "poder", "podio", "poema", "poesía", "poeta", "polen",
38586"policía", "pollo", "polvo", "pomada", "pomelo", "pomo", "pompa", "poner", "porción", "portal",
38587"posada", "poseer", "posible", "poste", "potencia", "potro", "pozo", "prado", "precoz", "pregunta",
38588"premio", "prensa", "preso", "previo", "primo", "príncipe", "prisión", "privar", "proa", "probar",
38589"proceso", "producto", "proeza", "profesor", "programa", "prole", "promesa", "pronto", "propio", "próximo",
38590"prueba", "público", "puchero", "pudor", "pueblo", "puerta", "puesto", "pulga", "pulir", "pulmón",
38591"pulpo", "pulso", "puma", "punto", "puñal", "puño", "pupa", "pupila", "puré", "quedar",
38592"queja", "quemar", "querer", "queso", "quieto", "química", "quince", "quitar", "rábano", "rabia",
38593"rabo", "ración", "radical", "raíz", "rama", "rampa", "rancho", "rango", "rapaz", "rápido",
38594"rapto", "rasgo", "raspa", "rato", "rayo", "raza", "razón", "reacción", "realidad", "rebaño",
38595"rebote", "recaer", "receta", "rechazo", "recoger", "recreo", "recto", "recurso", "red", "redondo",
38596"reducir", "reflejo", "reforma", "refrán", "refugio", "regalo", "regir", "regla", "regreso", "rehén",
38597"reino", "reír", "reja", "relato", "relevo", "relieve", "relleno", "reloj", "remar", "remedio",
38598"remo", "rencor", "rendir", "renta", "reparto", "repetir", "reposo", "reptil", "res", "rescate",
38599"resina", "respeto", "resto", "resumen", "retiro", "retorno", "retrato", "reunir", "revés", "revista",
38600"rey", "rezar", "rico", "riego", "rienda", "riesgo", "rifa", "rígido", "rigor", "rincón",
38601"riñón", "río", "riqueza", "risa", "ritmo", "rito", "rizo", "roble", "roce", "rociar",
38602"rodar", "rodeo", "rodilla", "roer", "rojizo", "rojo", "romero", "romper", "ron", "ronco",
38603"ronda", "ropa", "ropero", "rosa", "rosca", "rostro", "rotar", "rubí", "rubor", "rudo",
38604"rueda", "rugir", "ruido", "ruina", "ruleta", "rulo", "rumbo", "rumor", "ruptura", "ruta",
38605"rutina", "sábado", "saber", "sabio", "sable", "sacar", "sagaz", "sagrado", "sala", "saldo",
38606"salero", "salir", "salmón", "salón", "salsa", "salto", "salud", "salvar", "samba", "sanción",
38607"sandía", "sanear", "sangre", "sanidad", "sano", "santo", "sapo", "saque", "sardina", "sartén",
38608"sastre", "satán", "sauna", "saxofón", "sección", "seco", "secreto", "secta", "sed", "seguir",
38609"seis", "sello", "selva", "semana", "semilla", "senda", "sensor", "señal", "señor", "separar",
38610"sepia", "sequía", "ser", "serie", "sermón", "servir", "sesenta", "sesión", "seta", "setenta",
38611"severo", "sexo", "sexto", "sidra", "siesta", "siete", "siglo", "signo", "sílaba", "silbar",
38612"silencio", "silla", "símbolo", "simio", "sirena", "sistema", "sitio", "situar", "sobre", "socio",
38613"sodio", "sol", "solapa", "soldado", "soledad", "sólido", "soltar", "solución", "sombra", "sondeo",
38614"sonido", "sonoro", "sonrisa", "sopa", "soplar", "soporte", "sordo", "sorpresa", "sorteo", "sostén",
38615"sótano", "suave", "subir", "suceso", "sudor", "suegra", "suelo", "sueño", "suerte", "sufrir",
38616"sujeto", "sultán", "sumar", "superar", "suplir", "suponer", "supremo", "sur", "surco", "sureño",
38617"surgir", "susto", "sutil", "tabaco", "tabique", "tabla", "tabú", "taco", "tacto", "tajo",
38618"talar", "talco", "talento", "talla", "talón", "tamaño", "tambor", "tango", "tanque", "tapa",
38619"tapete", "tapia", "tapón", "taquilla", "tarde", "tarea", "tarifa", "tarjeta", "tarot", "tarro",
38620"tarta", "tatuaje", "tauro", "taza", "tazón", "teatro", "techo", "tecla", "técnica", "tejado",
38621"tejer", "tejido", "tela", "teléfono", "tema", "temor", "templo", "tenaz", "tender", "tener",
38622"tenis", "tenso", "teoría", "terapia", "terco", "término", "ternura", "terror", "tesis", "tesoro",
38623"testigo", "tetera", "texto", "tez", "tibio", "tiburón", "tiempo", "tienda", "tierra", "tieso",
38624"tigre", "tijera", "tilde", "timbre", "tímido", "timo", "tinta", "tío", "típico", "tipo",
38625"tira", "tirón", "titán", "títere", "título", "tiza", "toalla", "tobillo", "tocar", "tocino",
38626"todo", "toga", "toldo", "tomar", "tono", "tonto", "topar", "tope", "toque", "tórax",
38627"torero", "tormenta", "torneo", "toro", "torpedo", "torre", "torso", "tortuga", "tos", "tosco",
38628"toser", "tóxico", "trabajo", "tractor", "traer", "tráfico", "trago", "traje", "tramo", "trance",
38629"trato", "trauma", "trazar", "trébol", "tregua", "treinta", "tren", "trepar", "tres", "tribu",
38630"trigo", "tripa", "triste", "triunfo", "trofeo", "trompa", "tronco", "tropa", "trote", "trozo",
38631"truco", "trueno", "trufa", "tubería", "tubo", "tuerto", "tumba", "tumor", "túnel", "túnica",
38632"turbina", "turismo", "turno", "tutor", "ubicar", "úlcera", "umbral", "unidad", "unir", "universo",
38633"uno", "untar", "uña", "urbano", "urbe", "urgente", "urna", "usar", "usuario", "útil",
38634"utopía", "uva", "vaca", "vacío", "vacuna", "vagar", "vago", "vaina", "vajilla", "vale",
38635"válido", "valle", "valor", "válvula", "vampiro", "vara", "variar", "varón", "vaso", "vecino",
38636"vector", "vehículo", "veinte", "vejez", "vela", "velero", "veloz", "vena", "vencer", "venda",
38637"veneno", "vengar", "venir", "venta", "venus", "ver", "verano", "verbo", "verde", "vereda",
38638"verja", "verso", "verter", "vía", "viaje", "vibrar", "vicio", "víctima", "vida", "vídeo",
38639"vidrio", "viejo", "viernes", "vigor", "vil", "villa", "vinagre", "vino", "viñedo", "violín",
38640"viral", "virgo", "virtud", "visor", "víspera", "vista", "vitamina", "viudo", "vivaz", "vivero",
38641"vivir", "vivo", "volcán", "volumen", "volver", "voraz", "votar", "voto", "voz", "vuelo",
38642"vulgar", "yacer", "yate", "yegua", "yema", "yerno", "yeso", "yodo", "yoga", "yogur",
38643"zafiro", "zanja", "zapato", "zarza", "zona", "zorro", "zumo", "zurdo"]
38644</script>
38645 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
38646WORDLISTS["chinese_simplified"] = [
38647"的", "一", "是", "在", "不", "了", "有", "和", "人", "这",
38648"中", "大", "为", "上", "个", "国", "我", "以", "要", "他",
38649"时", "来", "用", "们", "生", "到", "作", "地", "于", "出",
38650"就", "分", "对", "成", "会", "可", "主", "发", "年", "动",
38651"同", "工", "也", "能", "下", "过", "子", "说", "产", "种",
38652"面", "而", "方", "后", "多", "定", "行", "学", "法", "所",
38653"民", "得", "经", "十", "三", "之", "进", "着", "等", "部",
38654"度", "家", "电", "力", "里", "如", "水", "化", "高", "自",
38655"二", "理", "起", "小", "物", "现", "实", "加", "量", "都",
38656"两", "体", "制", "机", "当", "使", "点", "从", "业", "本",
38657"去", "把", "性", "好", "应", "开", "它", "合", "还", "因",
38658"由", "其", "些", "然", "前", "外", "天", "政", "四", "日",
38659"那", "社", "义", "事", "平", "形", "相", "全", "表", "间",
38660"样", "与", "关", "各", "重", "新", "线", "内", "数", "正",
38661"心", "反", "你", "明", "看", "原", "又", "么", "利", "比",
38662"或", "但", "质", "气", "第", "向", "道", "命", "此", "变",
38663"条", "只", "没", "结", "解", "问", "意", "建", "月", "公",
38664"无", "系", "军", "很", "情", "者", "最", "立", "代", "想",
38665"已", "通", "并", "提", "直", "题", "党", "程", "展", "五",
38666"果", "料", "象", "员", "革", "位", "入", "常", "文", "总",
38667"次", "品", "式", "活", "设", "及", "管", "特", "件", "长",
38668"求", "老", "头", "基", "资", "边", "流", "路", "级", "少",
38669"图", "山", "统", "接", "知", "较", "将", "组", "见", "计",
38670"别", "她", "手", "角", "期", "根", "论", "运", "农", "指",
38671"几", "九", "区", "强", "放", "决", "西", "被", "干", "做",
38672"必", "战", "先", "回", "则", "任", "取", "据", "处", "队",
38673"南", "给", "色", "光", "门", "即", "保", "治", "北", "造",
38674"百", "规", "热", "领", "七", "海", "口", "东", "导", "器",
38675"压", "志", "世", "金", "增", "争", "济", "阶", "油", "思",
38676"术", "极", "交", "受", "联", "什", "认", "六", "共", "权",
38677"收", "证", "改", "清", "美", "再", "采", "转", "更", "单",
38678"风", "切", "打", "白", "教", "速", "花", "带", "安", "场",
38679"身", "车", "例", "真", "务", "具", "万", "每", "目", "至",
38680"达", "走", "积", "示", "议", "声", "报", "斗", "完", "类",
38681"八", "离", "华", "名", "确", "才", "科", "张", "信", "马",
38682"节", "话", "米", "整", "空", "元", "况", "今", "集", "温",
38683"传", "土", "许", "步", "群", "广", "石", "记", "需", "段",
38684"研", "界", "拉", "林", "律", "叫", "且", "究", "观", "越",
38685"织", "装", "影", "算", "低", "持", "音", "众", "书", "布",
38686"复", "容", "儿", "须", "际", "商", "非", "验", "连", "断",
38687"深", "难", "近", "矿", "千", "周", "委", "素", "技", "备",
38688"半", "办", "青", "省", "列", "习", "响", "约", "支", "般",
38689"史", "感", "劳", "便", "团", "往", "酸", "历", "市", "克",
38690"何", "除", "消", "构", "府", "称", "太", "准", "精", "值",
38691"号", "率", "族", "维", "划", "选", "标", "写", "存", "候",
38692"毛", "亲", "快", "效", "斯", "院", "查", "江", "型", "眼",
38693"王", "按", "格", "养", "易", "置", "派", "层", "片", "始",
38694"却", "专", "状", "育", "厂", "京", "识", "适", "属", "圆",
38695"包", "火", "住", "调", "满", "县", "局", "照", "参", "红",
38696"细", "引", "听", "该", "铁", "价", "严", "首", "底", "液",
38697"官", "德", "随", "病", "苏", "失", "尔", "死", "讲", "配",
38698"女", "黄", "推", "显", "谈", "罪", "神", "艺", "呢", "席",
38699"含", "企", "望", "密", "批", "营", "项", "防", "举", "球",
38700"英", "氧", "势", "告", "李", "台", "落", "木", "帮", "轮",
38701"破", "亚", "师", "围", "注", "远", "字", "材", "排", "供",
38702"河", "态", "封", "另", "施", "减", "树", "溶", "怎", "止",
38703"案", "言", "士", "均", "武", "固", "叶", "鱼", "波", "视",
38704"仅", "费", "紧", "爱", "左", "章", "早", "朝", "害", "续",
38705"轻", "服", "试", "食", "充", "兵", "源", "判", "护", "司",
38706"足", "某", "练", "差", "致", "板", "田", "降", "黑", "犯",
38707"负", "击", "范", "继", "兴", "似", "余", "坚", "曲", "输",
38708"修", "故", "城", "夫", "够", "送", "笔", "船", "占", "右",
38709"财", "吃", "富", "春", "职", "觉", "汉", "画", "功", "巴",
38710"跟", "虽", "杂", "飞", "检", "吸", "助", "升", "阳", "互",
38711"初", "创", "抗", "考", "投", "坏", "策", "古", "径", "换",
38712"未", "跑", "留", "钢", "曾", "端", "责", "站", "简", "述",
38713"钱", "副", "尽", "帝", "射", "草", "冲", "承", "独", "令",
38714"限", "阿", "宣", "环", "双", "请", "超", "微", "让", "控",
38715"州", "良", "轴", "找", "否", "纪", "益", "依", "优", "顶",
38716"础", "载", "倒", "房", "突", "坐", "粉", "敌", "略", "客",
38717"袁", "冷", "胜", "绝", "析", "块", "剂", "测", "丝", "协",
38718"诉", "念", "陈", "仍", "罗", "盐", "友", "洋", "错", "苦",
38719"夜", "刑", "移", "频", "逐", "靠", "混", "母", "短", "皮",
38720"终", "聚", "汽", "村", "云", "哪", "既", "距", "卫", "停",
38721"烈", "央", "察", "烧", "迅", "境", "若", "印", "洲", "刻",
38722"括", "激", "孔", "搞", "甚", "室", "待", "核", "校", "散",
38723"侵", "吧", "甲", "游", "久", "菜", "味", "旧", "模", "湖",
38724"货", "损", "预", "阻", "毫", "普", "稳", "乙", "妈", "植",
38725"息", "扩", "银", "语", "挥", "酒", "守", "拿", "序", "纸",
38726"医", "缺", "雨", "吗", "针", "刘", "啊", "急", "唱", "误",
38727"训", "愿", "审", "附", "获", "茶", "鲜", "粮", "斤", "孩",
38728"脱", "硫", "肥", "善", "龙", "演", "父", "渐", "血", "欢",
38729"械", "掌", "歌", "沙", "刚", "攻", "谓", "盾", "讨", "晚",
38730"粒", "乱", "燃", "矛", "乎", "杀", "药", "宁", "鲁", "贵",
38731"钟", "煤", "读", "班", "伯", "香", "介", "迫", "句", "丰",
38732"培", "握", "兰", "担", "弦", "蛋", "沉", "假", "穿", "执",
38733"答", "乐", "谁", "顺", "烟", "缩", "征", "脸", "喜", "松",
38734"脚", "困", "异", "免", "背", "星", "福", "买", "染", "井",
38735"概", "慢", "怕", "磁", "倍", "祖", "皇", "促", "静", "补",
38736"评", "翻", "肉", "践", "尼", "衣", "宽", "扬", "棉", "希",
38737"伤", "操", "垂", "秋", "宜", "氢", "套", "督", "振", "架",
38738"亮", "末", "宪", "庆", "编", "牛", "触", "映", "雷", "销",
38739"诗", "座", "居", "抓", "裂", "胞", "呼", "娘", "景", "威",
38740"绿", "晶", "厚", "盟", "衡", "鸡", "孙", "延", "危", "胶",
38741"屋", "乡", "临", "陆", "顾", "掉", "呀", "灯", "岁", "措",
38742"束", "耐", "剧", "玉", "赵", "跳", "哥", "季", "课", "凯",
38743"胡", "额", "款", "绍", "卷", "齐", "伟", "蒸", "殖", "永",
38744"宗", "苗", "川", "炉", "岩", "弱", "零", "杨", "奏", "沿",
38745"露", "杆", "探", "滑", "镇", "饭", "浓", "航", "怀", "赶",
38746"库", "夺", "伊", "灵", "税", "途", "灭", "赛", "归", "召",
38747"鼓", "播", "盘", "裁", "险", "康", "唯", "录", "菌", "纯",
38748"借", "糖", "盖", "横", "符", "私", "努", "堂", "域", "枪",
38749"润", "幅", "哈", "竟", "熟", "虫", "泽", "脑", "壤", "碳",
38750"欧", "遍", "侧", "寨", "敢", "彻", "虑", "斜", "薄", "庭",
38751"纳", "弹", "饲", "伸", "折", "麦", "湿", "暗", "荷", "瓦",
38752"塞", "床", "筑", "恶", "户", "访", "塔", "奇", "透", "梁",
38753"刀", "旋", "迹", "卡", "氯", "遇", "份", "毒", "泥", "退",
38754"洗", "摆", "灰", "彩", "卖", "耗", "夏", "择", "忙", "铜",
38755"献", "硬", "予", "繁", "圈", "雪", "函", "亦", "抽", "篇",
38756"阵", "阴", "丁", "尺", "追", "堆", "雄", "迎", "泛", "爸",
38757"楼", "避", "谋", "吨", "野", "猪", "旗", "累", "偏", "典",
38758"馆", "索", "秦", "脂", "潮", "爷", "豆", "忽", "托", "惊",
38759"塑", "遗", "愈", "朱", "替", "纤", "粗", "倾", "尚", "痛",
38760"楚", "谢", "奋", "购", "磨", "君", "池", "旁", "碎", "骨",
38761"监", "捕", "弟", "暴", "割", "贯", "殊", "释", "词", "亡",
38762"壁", "顿", "宝", "午", "尘", "闻", "揭", "炮", "残", "冬",
38763"桥", "妇", "警", "综", "招", "吴", "付", "浮", "遭", "徐",
38764"您", "摇", "谷", "赞", "箱", "隔", "订", "男", "吹", "园",
38765"纷", "唐", "败", "宋", "玻", "巨", "耕", "坦", "荣", "闭",
38766"湾", "键", "凡", "驻", "锅", "救", "恩", "剥", "凝", "碱",
38767"齿", "截", "炼", "麻", "纺", "禁", "废", "盛", "版", "缓",
38768"净", "睛", "昌", "婚", "涉", "筒", "嘴", "插", "岸", "朗",
38769"庄", "街", "藏", "姑", "贸", "腐", "奴", "啦", "惯", "乘",
38770"伙", "恢", "匀", "纱", "扎", "辩", "耳", "彪", "臣", "亿",
38771"璃", "抵", "脉", "秀", "萨", "俄", "网", "舞", "店", "喷",
38772"纵", "寸", "汗", "挂", "洪", "贺", "闪", "柬", "爆", "烯",
38773"津", "稻", "墙", "软", "勇", "像", "滚", "厘", "蒙", "芳",
38774"肯", "坡", "柱", "荡", "腿", "仪", "旅", "尾", "轧", "冰",
38775"贡", "登", "黎", "削", "钻", "勒", "逃", "障", "氨", "郭",
38776"峰", "币", "港", "伏", "轨", "亩", "毕", "擦", "莫", "刺",
38777"浪", "秘", "援", "株", "健", "售", "股", "岛", "甘", "泡",
38778"睡", "童", "铸", "汤", "阀", "休", "汇", "舍", "牧", "绕",
38779"炸", "哲", "磷", "绩", "朋", "淡", "尖", "启", "陷", "柴",
38780"呈", "徒", "颜", "泪", "稍", "忘", "泵", "蓝", "拖", "洞",
38781"授", "镜", "辛", "壮", "锋", "贫", "虚", "弯", "摩", "泰",
38782"幼", "廷", "尊", "窗", "纲", "弄", "隶", "疑", "氏", "宫",
38783"姐", "震", "瑞", "怪", "尤", "琴", "循", "描", "膜", "违",
38784"夹", "腰", "缘", "珠", "穷", "森", "枝", "竹", "沟", "催",
38785"绳", "忆", "邦", "剩", "幸", "浆", "栏", "拥", "牙", "贮",
38786"礼", "滤", "钠", "纹", "罢", "拍", "咱", "喊", "袖", "埃",
38787"勤", "罚", "焦", "潜", "伍", "墨", "欲", "缝", "姓", "刊",
38788"饱", "仿", "奖", "铝", "鬼", "丽", "跨", "默", "挖", "链",
38789"扫", "喝", "袋", "炭", "污", "幕", "诸", "弧", "励", "梅",
38790"奶", "洁", "灾", "舟", "鉴", "苯", "讼", "抱", "毁", "懂",
38791"寒", "智", "埔", "寄", "届", "跃", "渡", "挑", "丹", "艰",
38792"贝", "碰", "拔", "爹", "戴", "码", "梦", "芽", "熔", "赤",
38793"渔", "哭", "敬", "颗", "奔", "铅", "仲", "虎", "稀", "妹",
38794"乏", "珍", "申", "桌", "遵", "允", "隆", "螺", "仓", "魏",
38795"锐", "晓", "氮", "兼", "隐", "碍", "赫", "拨", "忠", "肃",
38796"缸", "牵", "抢", "博", "巧", "壳", "兄", "杜", "讯", "诚",
38797"碧", "祥", "柯", "页", "巡", "矩", "悲", "灌", "龄", "伦",
38798"票", "寻", "桂", "铺", "圣", "恐", "恰", "郑", "趣", "抬",
38799"荒", "腾", "贴", "柔", "滴", "猛", "阔", "辆", "妻", "填",
38800"撤", "储", "签", "闹", "扰", "紫", "砂", "递", "戏", "吊",
38801"陶", "伐", "喂", "疗", "瓶", "婆", "抚", "臂", "摸", "忍",
38802"虾", "蜡", "邻", "胸", "巩", "挤", "偶", "弃", "槽", "劲",
38803"乳", "邓", "吉", "仁", "烂", "砖", "租", "乌", "舰", "伴",
38804"瓜", "浅", "丙", "暂", "燥", "橡", "柳", "迷", "暖", "牌",
38805"秧", "胆", "详", "簧", "踏", "瓷", "谱", "呆", "宾", "糊",
38806"洛", "辉", "愤", "竞", "隙", "怒", "粘", "乃", "绪", "肩",
38807"籍", "敏", "涂", "熙", "皆", "侦", "悬", "掘", "享", "纠",
38808"醒", "狂", "锁", "淀", "恨", "牲", "霸", "爬", "赏", "逆",
38809"玩", "陵", "祝", "秒", "浙", "貌", "役", "彼", "悉", "鸭",
38810"趋", "凤", "晨", "畜", "辈", "秩", "卵", "署", "梯", "炎",
38811"滩", "棋", "驱", "筛", "峡", "冒", "啥", "寿", "译", "浸",
38812"泉", "帽", "迟", "硅", "疆", "贷", "漏", "稿", "冠", "嫩",
38813"胁", "芯", "牢", "叛", "蚀", "奥", "鸣", "岭", "羊", "凭",
38814"串", "塘", "绘", "酵", "融", "盆", "锡", "庙", "筹", "冻",
38815"辅", "摄", "袭", "筋", "拒", "僚", "旱", "钾", "鸟", "漆",
38816"沈", "眉", "疏", "添", "棒", "穗", "硝", "韩", "逼", "扭",
38817"侨", "凉", "挺", "碗", "栽", "炒", "杯", "患", "馏", "劝",
38818"豪", "辽", "勃", "鸿", "旦", "吏", "拜", "狗", "埋", "辊",
38819"掩", "饮", "搬", "骂", "辞", "勾", "扣", "估", "蒋", "绒",
38820"雾", "丈", "朵", "姆", "拟", "宇", "辑", "陕", "雕", "偿",
38821"蓄", "崇", "剪", "倡", "厅", "咬", "驶", "薯", "刷", "斥",
38822"番", "赋", "奉", "佛", "浇", "漫", "曼", "扇", "钙", "桃",
38823"扶", "仔", "返", "俗", "亏", "腔", "鞋", "棱", "覆", "框",
38824"悄", "叔", "撞", "骗", "勘", "旺", "沸", "孤", "吐", "孟",
38825"渠", "屈", "疾", "妙", "惜", "仰", "狠", "胀", "谐", "抛",
38826"霉", "桑", "岗", "嘛", "衰", "盗", "渗", "脏", "赖", "涌",
38827"甜", "曹", "阅", "肌", "哩", "厉", "烃", "纬", "毅", "昨",
38828"伪", "症", "煮", "叹", "钉", "搭", "茎", "笼", "酷", "偷",
38829"弓", "锥", "恒", "杰", "坑", "鼻", "翼", "纶", "叙", "狱",
38830"逮", "罐", "络", "棚", "抑", "膨", "蔬", "寺", "骤", "穆",
38831"冶", "枯", "册", "尸", "凸", "绅", "坯", "牺", "焰", "轰",
38832"欣", "晋", "瘦", "御", "锭", "锦", "丧", "旬", "锻", "垄",
38833"搜", "扑", "邀", "亭", "酯", "迈", "舒", "脆", "酶", "闲",
38834"忧", "酚", "顽", "羽", "涨", "卸", "仗", "陪", "辟", "惩",
38835"杭", "姚", "肚", "捉", "飘", "漂", "昆", "欺", "吾", "郎",
38836"烷", "汁", "呵", "饰", "萧", "雅", "邮", "迁", "燕", "撒",
38837"姻", "赴", "宴", "烦", "债", "帐", "斑", "铃", "旨", "醇",
38838"董", "饼", "雏", "姿", "拌", "傅", "腹", "妥", "揉", "贤",
38839"拆", "歪", "葡", "胺", "丢", "浩", "徽", "昂", "垫", "挡",
38840"览", "贪", "慰", "缴", "汪", "慌", "冯", "诺", "姜", "谊",
38841"凶", "劣", "诬", "耀", "昏", "躺", "盈", "骑", "乔", "溪",
38842"丛", "卢", "抹", "闷", "咨", "刮", "驾", "缆", "悟", "摘",
38843"铒", "掷", "颇", "幻", "柄", "惠", "惨", "佳", "仇", "腊",
38844"窝", "涤", "剑", "瞧", "堡", "泼", "葱", "罩", "霍", "捞",
38845"胎", "苍", "滨", "俩", "捅", "湘", "砍", "霞", "邵", "萄",
38846"疯", "淮", "遂", "熊", "粪", "烘", "宿", "档", "戈", "驳",
38847"嫂", "裕", "徙", "箭", "捐", "肠", "撑", "晒", "辨", "殿",
38848"莲", "摊", "搅", "酱", "屏", "疫", "哀", "蔡", "堵", "沫",
38849"皱", "畅", "叠", "阁", "莱", "敲", "辖", "钩", "痕", "坝",
38850"巷", "饿", "祸", "丘", "玄", "溜", "曰", "逻", "彭", "尝",
38851"卿", "妨", "艇", "吞", "韦", "怨", "矮", "歇" ]
38852</script>
38853 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
38854WORDLISTS["chinese_traditional"] = [
38855"的", "一", "是", "在", "不", "了", "有", "和", "人", "這",
38856"中", "大", "為", "上", "個", "國", "我", "以", "要", "他",
38857"時", "來", "用", "們", "生", "到", "作", "地", "於", "出",
38858"就", "分", "對", "成", "會", "可", "主", "發", "年", "動",
38859"同", "工", "也", "能", "下", "過", "子", "說", "產", "種",
38860"面", "而", "方", "後", "多", "定", "行", "學", "法", "所",
38861"民", "得", "經", "十", "三", "之", "進", "著", "等", "部",
38862"度", "家", "電", "力", "裡", "如", "水", "化", "高", "自",
38863"二", "理", "起", "小", "物", "現", "實", "加", "量", "都",
38864"兩", "體", "制", "機", "當", "使", "點", "從", "業", "本",
38865"去", "把", "性", "好", "應", "開", "它", "合", "還", "因",
38866"由", "其", "些", "然", "前", "外", "天", "政", "四", "日",
38867"那", "社", "義", "事", "平", "形", "相", "全", "表", "間",
38868"樣", "與", "關", "各", "重", "新", "線", "內", "數", "正",
38869"心", "反", "你", "明", "看", "原", "又", "麼", "利", "比",
38870"或", "但", "質", "氣", "第", "向", "道", "命", "此", "變",
38871"條", "只", "沒", "結", "解", "問", "意", "建", "月", "公",
38872"無", "系", "軍", "很", "情", "者", "最", "立", "代", "想",
38873"已", "通", "並", "提", "直", "題", "黨", "程", "展", "五",
38874"果", "料", "象", "員", "革", "位", "入", "常", "文", "總",
38875"次", "品", "式", "活", "設", "及", "管", "特", "件", "長",
38876"求", "老", "頭", "基", "資", "邊", "流", "路", "級", "少",
38877"圖", "山", "統", "接", "知", "較", "將", "組", "見", "計",
38878"別", "她", "手", "角", "期", "根", "論", "運", "農", "指",
38879"幾", "九", "區", "強", "放", "決", "西", "被", "幹", "做",
38880"必", "戰", "先", "回", "則", "任", "取", "據", "處", "隊",
38881"南", "給", "色", "光", "門", "即", "保", "治", "北", "造",
38882"百", "規", "熱", "領", "七", "海", "口", "東", "導", "器",
38883"壓", "志", "世", "金", "增", "爭", "濟", "階", "油", "思",
38884"術", "極", "交", "受", "聯", "什", "認", "六", "共", "權",
38885"收", "證", "改", "清", "美", "再", "採", "轉", "更", "單",
38886"風", "切", "打", "白", "教", "速", "花", "帶", "安", "場",
38887"身", "車", "例", "真", "務", "具", "萬", "每", "目", "至",
38888"達", "走", "積", "示", "議", "聲", "報", "鬥", "完", "類",
38889"八", "離", "華", "名", "確", "才", "科", "張", "信", "馬",
38890"節", "話", "米", "整", "空", "元", "況", "今", "集", "溫",
38891"傳", "土", "許", "步", "群", "廣", "石", "記", "需", "段",
38892"研", "界", "拉", "林", "律", "叫", "且", "究", "觀", "越",
38893"織", "裝", "影", "算", "低", "持", "音", "眾", "書", "布",
38894"复", "容", "兒", "須", "際", "商", "非", "驗", "連", "斷",
38895"深", "難", "近", "礦", "千", "週", "委", "素", "技", "備",
38896"半", "辦", "青", "省", "列", "習", "響", "約", "支", "般",
38897"史", "感", "勞", "便", "團", "往", "酸", "歷", "市", "克",
38898"何", "除", "消", "構", "府", "稱", "太", "準", "精", "值",
38899"號", "率", "族", "維", "劃", "選", "標", "寫", "存", "候",
38900"毛", "親", "快", "效", "斯", "院", "查", "江", "型", "眼",
38901"王", "按", "格", "養", "易", "置", "派", "層", "片", "始",
38902"卻", "專", "狀", "育", "廠", "京", "識", "適", "屬", "圓",
38903"包", "火", "住", "調", "滿", "縣", "局", "照", "參", "紅",
38904"細", "引", "聽", "該", "鐵", "價", "嚴", "首", "底", "液",
38905"官", "德", "隨", "病", "蘇", "失", "爾", "死", "講", "配",
38906"女", "黃", "推", "顯", "談", "罪", "神", "藝", "呢", "席",
38907"含", "企", "望", "密", "批", "營", "項", "防", "舉", "球",
38908"英", "氧", "勢", "告", "李", "台", "落", "木", "幫", "輪",
38909"破", "亞", "師", "圍", "注", "遠", "字", "材", "排", "供",
38910"河", "態", "封", "另", "施", "減", "樹", "溶", "怎", "止",
38911"案", "言", "士", "均", "武", "固", "葉", "魚", "波", "視",
38912"僅", "費", "緊", "愛", "左", "章", "早", "朝", "害", "續",
38913"輕", "服", "試", "食", "充", "兵", "源", "判", "護", "司",
38914"足", "某", "練", "差", "致", "板", "田", "降", "黑", "犯",
38915"負", "擊", "范", "繼", "興", "似", "餘", "堅", "曲", "輸",
38916"修", "故", "城", "夫", "夠", "送", "筆", "船", "佔", "右",
38917"財", "吃", "富", "春", "職", "覺", "漢", "畫", "功", "巴",
38918"跟", "雖", "雜", "飛", "檢", "吸", "助", "昇", "陽", "互",
38919"初", "創", "抗", "考", "投", "壞", "策", "古", "徑", "換",
38920"未", "跑", "留", "鋼", "曾", "端", "責", "站", "簡", "述",
38921"錢", "副", "盡", "帝", "射", "草", "衝", "承", "獨", "令",
38922"限", "阿", "宣", "環", "雙", "請", "超", "微", "讓", "控",
38923"州", "良", "軸", "找", "否", "紀", "益", "依", "優", "頂",
38924"礎", "載", "倒", "房", "突", "坐", "粉", "敵", "略", "客",
38925"袁", "冷", "勝", "絕", "析", "塊", "劑", "測", "絲", "協",
38926"訴", "念", "陳", "仍", "羅", "鹽", "友", "洋", "錯", "苦",
38927"夜", "刑", "移", "頻", "逐", "靠", "混", "母", "短", "皮",
38928"終", "聚", "汽", "村", "雲", "哪", "既", "距", "衛", "停",
38929"烈", "央", "察", "燒", "迅", "境", "若", "印", "洲", "刻",
38930"括", "激", "孔", "搞", "甚", "室", "待", "核", "校", "散",
38931"侵", "吧", "甲", "遊", "久", "菜", "味", "舊", "模", "湖",
38932"貨", "損", "預", "阻", "毫", "普", "穩", "乙", "媽", "植",
38933"息", "擴", "銀", "語", "揮", "酒", "守", "拿", "序", "紙",
38934"醫", "缺", "雨", "嗎", "針", "劉", "啊", "急", "唱", "誤",
38935"訓", "願", "審", "附", "獲", "茶", "鮮", "糧", "斤", "孩",
38936"脫", "硫", "肥", "善", "龍", "演", "父", "漸", "血", "歡",
38937"械", "掌", "歌", "沙", "剛", "攻", "謂", "盾", "討", "晚",
38938"粒", "亂", "燃", "矛", "乎", "殺", "藥", "寧", "魯", "貴",
38939"鐘", "煤", "讀", "班", "伯", "香", "介", "迫", "句", "豐",
38940"培", "握", "蘭", "擔", "弦", "蛋", "沉", "假", "穿", "執",
38941"答", "樂", "誰", "順", "煙", "縮", "徵", "臉", "喜", "松",
38942"腳", "困", "異", "免", "背", "星", "福", "買", "染", "井",
38943"概", "慢", "怕", "磁", "倍", "祖", "皇", "促", "靜", "補",
38944"評", "翻", "肉", "踐", "尼", "衣", "寬", "揚", "棉", "希",
38945"傷", "操", "垂", "秋", "宜", "氫", "套", "督", "振", "架",
38946"亮", "末", "憲", "慶", "編", "牛", "觸", "映", "雷", "銷",
38947"詩", "座", "居", "抓", "裂", "胞", "呼", "娘", "景", "威",
38948"綠", "晶", "厚", "盟", "衡", "雞", "孫", "延", "危", "膠",
38949"屋", "鄉", "臨", "陸", "顧", "掉", "呀", "燈", "歲", "措",
38950"束", "耐", "劇", "玉", "趙", "跳", "哥", "季", "課", "凱",
38951"胡", "額", "款", "紹", "卷", "齊", "偉", "蒸", "殖", "永",
38952"宗", "苗", "川", "爐", "岩", "弱", "零", "楊", "奏", "沿",
38953"露", "桿", "探", "滑", "鎮", "飯", "濃", "航", "懷", "趕",
38954"庫", "奪", "伊", "靈", "稅", "途", "滅", "賽", "歸", "召",
38955"鼓", "播", "盤", "裁", "險", "康", "唯", "錄", "菌", "純",
38956"借", "糖", "蓋", "橫", "符", "私", "努", "堂", "域", "槍",
38957"潤", "幅", "哈", "竟", "熟", "蟲", "澤", "腦", "壤", "碳",
38958"歐", "遍", "側", "寨", "敢", "徹", "慮", "斜", "薄", "庭",
38959"納", "彈", "飼", "伸", "折", "麥", "濕", "暗", "荷", "瓦",
38960"塞", "床", "築", "惡", "戶", "訪", "塔", "奇", "透", "梁",
38961"刀", "旋", "跡", "卡", "氯", "遇", "份", "毒", "泥", "退",
38962"洗", "擺", "灰", "彩", "賣", "耗", "夏", "擇", "忙", "銅",
38963"獻", "硬", "予", "繁", "圈", "雪", "函", "亦", "抽", "篇",
38964"陣", "陰", "丁", "尺", "追", "堆", "雄", "迎", "泛", "爸",
38965"樓", "避", "謀", "噸", "野", "豬", "旗", "累", "偏", "典",
38966"館", "索", "秦", "脂", "潮", "爺", "豆", "忽", "托", "驚",
38967"塑", "遺", "愈", "朱", "替", "纖", "粗", "傾", "尚", "痛",
38968"楚", "謝", "奮", "購", "磨", "君", "池", "旁", "碎", "骨",
38969"監", "捕", "弟", "暴", "割", "貫", "殊", "釋", "詞", "亡",
38970"壁", "頓", "寶", "午", "塵", "聞", "揭", "炮", "殘", "冬",
38971"橋", "婦", "警", "綜", "招", "吳", "付", "浮", "遭", "徐",
38972"您", "搖", "谷", "贊", "箱", "隔", "訂", "男", "吹", "園",
38973"紛", "唐", "敗", "宋", "玻", "巨", "耕", "坦", "榮", "閉",
38974"灣", "鍵", "凡", "駐", "鍋", "救", "恩", "剝", "凝", "鹼",
38975"齒", "截", "煉", "麻", "紡", "禁", "廢", "盛", "版", "緩",
38976"淨", "睛", "昌", "婚", "涉", "筒", "嘴", "插", "岸", "朗",
38977"莊", "街", "藏", "姑", "貿", "腐", "奴", "啦", "慣", "乘",
38978"夥", "恢", "勻", "紗", "扎", "辯", "耳", "彪", "臣", "億",
38979"璃", "抵", "脈", "秀", "薩", "俄", "網", "舞", "店", "噴",
38980"縱", "寸", "汗", "掛", "洪", "賀", "閃", "柬", "爆", "烯",
38981"津", "稻", "牆", "軟", "勇", "像", "滾", "厘", "蒙", "芳",
38982"肯", "坡", "柱", "盪", "腿", "儀", "旅", "尾", "軋", "冰",
38983"貢", "登", "黎", "削", "鑽", "勒", "逃", "障", "氨", "郭",
38984"峰", "幣", "港", "伏", "軌", "畝", "畢", "擦", "莫", "刺",
38985"浪", "秘", "援", "株", "健", "售", "股", "島", "甘", "泡",
38986"睡", "童", "鑄", "湯", "閥", "休", "匯", "舍", "牧", "繞",
38987"炸", "哲", "磷", "績", "朋", "淡", "尖", "啟", "陷", "柴",
38988"呈", "徒", "顏", "淚", "稍", "忘", "泵", "藍", "拖", "洞",
38989"授", "鏡", "辛", "壯", "鋒", "貧", "虛", "彎", "摩", "泰",
38990"幼", "廷", "尊", "窗", "綱", "弄", "隸", "疑", "氏", "宮",
38991"姐", "震", "瑞", "怪", "尤", "琴", "循", "描", "膜", "違",
38992"夾", "腰", "緣", "珠", "窮", "森", "枝", "竹", "溝", "催",
38993"繩", "憶", "邦", "剩", "幸", "漿", "欄", "擁", "牙", "貯",
38994"禮", "濾", "鈉", "紋", "罷", "拍", "咱", "喊", "袖", "埃",
38995"勤", "罰", "焦", "潛", "伍", "墨", "欲", "縫", "姓", "刊",
38996"飽", "仿", "獎", "鋁", "鬼", "麗", "跨", "默", "挖", "鏈",
38997"掃", "喝", "袋", "炭", "污", "幕", "諸", "弧", "勵", "梅",
38998"奶", "潔", "災", "舟", "鑑", "苯", "訟", "抱", "毀", "懂",
38999"寒", "智", "埔", "寄", "屆", "躍", "渡", "挑", "丹", "艱",
39000"貝", "碰", "拔", "爹", "戴", "碼", "夢", "芽", "熔", "赤",
39001"漁", "哭", "敬", "顆", "奔", "鉛", "仲", "虎", "稀", "妹",
39002"乏", "珍", "申", "桌", "遵", "允", "隆", "螺", "倉", "魏",
39003"銳", "曉", "氮", "兼", "隱", "礙", "赫", "撥", "忠", "肅",
39004"缸", "牽", "搶", "博", "巧", "殼", "兄", "杜", "訊", "誠",
39005"碧", "祥", "柯", "頁", "巡", "矩", "悲", "灌", "齡", "倫",
39006"票", "尋", "桂", "鋪", "聖", "恐", "恰", "鄭", "趣", "抬",
39007"荒", "騰", "貼", "柔", "滴", "猛", "闊", "輛", "妻", "填",
39008"撤", "儲", "簽", "鬧", "擾", "紫", "砂", "遞", "戲", "吊",
39009"陶", "伐", "餵", "療", "瓶", "婆", "撫", "臂", "摸", "忍",
39010"蝦", "蠟", "鄰", "胸", "鞏", "擠", "偶", "棄", "槽", "勁",
39011"乳", "鄧", "吉", "仁", "爛", "磚", "租", "烏", "艦", "伴",
39012"瓜", "淺", "丙", "暫", "燥", "橡", "柳", "迷", "暖", "牌",
39013"秧", "膽", "詳", "簧", "踏", "瓷", "譜", "呆", "賓", "糊",
39014"洛", "輝", "憤", "競", "隙", "怒", "粘", "乃", "緒", "肩",
39015"籍", "敏", "塗", "熙", "皆", "偵", "懸", "掘", "享", "糾",
39016"醒", "狂", "鎖", "淀", "恨", "牲", "霸", "爬", "賞", "逆",
39017"玩", "陵", "祝", "秒", "浙", "貌", "役", "彼", "悉", "鴨",
39018"趨", "鳳", "晨", "畜", "輩", "秩", "卵", "署", "梯", "炎",
39019"灘", "棋", "驅", "篩", "峽", "冒", "啥", "壽", "譯", "浸",
39020"泉", "帽", "遲", "矽", "疆", "貸", "漏", "稿", "冠", "嫩",
39021"脅", "芯", "牢", "叛", "蝕", "奧", "鳴", "嶺", "羊", "憑",
39022"串", "塘", "繪", "酵", "融", "盆", "錫", "廟", "籌", "凍",
39023"輔", "攝", "襲", "筋", "拒", "僚", "旱", "鉀", "鳥", "漆",
39024"沈", "眉", "疏", "添", "棒", "穗", "硝", "韓", "逼", "扭",
39025"僑", "涼", "挺", "碗", "栽", "炒", "杯", "患", "餾", "勸",
39026"豪", "遼", "勃", "鴻", "旦", "吏", "拜", "狗", "埋", "輥",
39027"掩", "飲", "搬", "罵", "辭", "勾", "扣", "估", "蔣", "絨",
39028"霧", "丈", "朵", "姆", "擬", "宇", "輯", "陝", "雕", "償",
39029"蓄", "崇", "剪", "倡", "廳", "咬", "駛", "薯", "刷", "斥",
39030"番", "賦", "奉", "佛", "澆", "漫", "曼", "扇", "鈣", "桃",
39031"扶", "仔", "返", "俗", "虧", "腔", "鞋", "棱", "覆", "框",
39032"悄", "叔", "撞", "騙", "勘", "旺", "沸", "孤", "吐", "孟",
39033"渠", "屈", "疾", "妙", "惜", "仰", "狠", "脹", "諧", "拋",
39034"黴", "桑", "崗", "嘛", "衰", "盜", "滲", "臟", "賴", "湧",
39035"甜", "曹", "閱", "肌", "哩", "厲", "烴", "緯", "毅", "昨",
39036"偽", "症", "煮", "嘆", "釘", "搭", "莖", "籠", "酷", "偷",
39037"弓", "錐", "恆", "傑", "坑", "鼻", "翼", "綸", "敘", "獄",
39038"逮", "罐", "絡", "棚", "抑", "膨", "蔬", "寺", "驟", "穆",
39039"冶", "枯", "冊", "屍", "凸", "紳", "坯", "犧", "焰", "轟",
39040"欣", "晉", "瘦", "禦", "錠", "錦", "喪", "旬", "鍛", "壟",
39041"搜", "撲", "邀", "亭", "酯", "邁", "舒", "脆", "酶", "閒",
39042"憂", "酚", "頑", "羽", "漲", "卸", "仗", "陪", "闢", "懲",
39043"杭", "姚", "肚", "捉", "飄", "漂", "昆", "欺", "吾", "郎",
39044"烷", "汁", "呵", "飾", "蕭", "雅", "郵", "遷", "燕", "撒",
39045"姻", "赴", "宴", "煩", "債", "帳", "斑", "鈴", "旨", "醇",
39046"董", "餅", "雛", "姿", "拌", "傅", "腹", "妥", "揉", "賢",
39047"拆", "歪", "葡", "胺", "丟", "浩", "徽", "昂", "墊", "擋",
39048"覽", "貪", "慰", "繳", "汪", "慌", "馮", "諾", "姜", "誼",
39049"兇", "劣", "誣", "耀", "昏", "躺", "盈", "騎", "喬", "溪",
39050"叢", "盧", "抹", "悶", "諮", "刮", "駕", "纜", "悟", "摘",
39051"鉺", "擲", "頗", "幻", "柄", "惠", "慘", "佳", "仇", "臘",
39052"窩", "滌", "劍", "瞧", "堡", "潑", "蔥", "罩", "霍", "撈",
39053"胎", "蒼", "濱", "倆", "捅", "湘", "砍", "霞", "邵", "萄",
39054"瘋", "淮", "遂", "熊", "糞", "烘", "宿", "檔", "戈", "駁",
39055"嫂", "裕", "徙", "箭", "捐", "腸", "撐", "曬", "辨", "殿",
39056"蓮", "攤", "攪", "醬", "屏", "疫", "哀", "蔡", "堵", "沫",
39057"皺", "暢", "疊", "閣", "萊", "敲", "轄", "鉤", "痕", "壩",
39058"巷", "餓", "禍", "丘", "玄", "溜", "曰", "邏", "彭", "嘗",
39059"卿", "妨", "艇", "吞", "韋", "怨", "矮", "歇" ]
39060</script>
39061 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
39062WORDLISTS["french"] = [
39063"abaisser", "abandon", "abdiquer", "abeille", "abolir", "aborder", "aboutir", "aboyer", "abrasif", "abreuver",
39064"abriter", "abroger", "abrupt", "absence", "absolu", "absurde", "abusif", "abyssal", "académie", "acajou",
39065"acarien", "accabler", "accepter", "acclamer", "accolade", "accroche", "accuser", "acerbe", "achat", "acheter",
39066"aciduler", "acier", "acompte", "acquérir", "acronyme", "acteur", "actif", "actuel", "adepte", "adéquat",
39067"adhésif", "adjectif", "adjuger", "admettre", "admirer", "adopter", "adorer", "adoucir", "adresse", "adroit",
39068"adulte", "adverbe", "aérer", "aéronef", "affaire", "affecter", "affiche", "affreux", "affubler", "agacer",
39069"agencer", "agile", "agiter", "agrafer", "agréable", "agrume", "aider", "aiguille", "ailier", "aimable",
39070"aisance", "ajouter", "ajuster", "alarmer", "alchimie", "alerte", "algèbre", "algue", "aliéner", "aliment",
39071"alléger", "alliage", "allouer", "allumer", "alourdir", "alpaga", "altesse", "alvéole", "amateur", "ambigu",
39072"ambre", "aménager", "amertume", "amidon", "amiral", "amorcer", "amour", "amovible", "amphibie", "ampleur",
39073"amusant", "analyse", "anaphore", "anarchie", "anatomie", "ancien", "anéantir", "angle", "angoisse", "anguleux",
39074"animal", "annexer", "annonce", "annuel", "anodin", "anomalie", "anonyme", "anormal", "antenne", "antidote",
39075"anxieux", "apaiser", "apéritif", "aplanir", "apologie", "appareil", "appeler", "apporter", "appuyer", "aquarium",
39076"aqueduc", "arbitre", "arbuste", "ardeur", "ardoise", "argent", "arlequin", "armature", "armement", "armoire",
39077"armure", "arpenter", "arracher", "arriver", "arroser", "arsenic", "artériel", "article", "aspect", "asphalte",
39078"aspirer", "assaut", "asservir", "assiette", "associer", "assurer", "asticot", "astre", "astuce", "atelier",
39079"atome", "atrium", "atroce", "attaque", "attentif", "attirer", "attraper", "aubaine", "auberge", "audace",
39080"audible", "augurer", "aurore", "automne", "autruche", "avaler", "avancer", "avarice", "avenir", "averse",
39081"aveugle", "aviateur", "avide", "avion", "aviser", "avoine", "avouer", "avril", "axial", "axiome",
39082"badge", "bafouer", "bagage", "baguette", "baignade", "balancer", "balcon", "baleine", "balisage", "bambin",
39083"bancaire", "bandage", "banlieue", "bannière", "banquier", "barbier", "baril", "baron", "barque", "barrage",
39084"bassin", "bastion", "bataille", "bateau", "batterie", "baudrier", "bavarder", "belette", "bélier", "belote",
39085"bénéfice", "berceau", "berger", "berline", "bermuda", "besace", "besogne", "bétail", "beurre", "biberon",
39086"bicycle", "bidule", "bijou", "bilan", "bilingue", "billard", "binaire", "biologie", "biopsie", "biotype",
39087"biscuit", "bison", "bistouri", "bitume", "bizarre", "blafard", "blague", "blanchir", "blessant", "blinder",
39088"blond", "bloquer", "blouson", "bobard", "bobine", "boire", "boiser", "bolide", "bonbon", "bondir",
39089"bonheur", "bonifier", "bonus", "bordure", "borne", "botte", "boucle", "boueux", "bougie", "boulon",
39090"bouquin", "bourse", "boussole", "boutique", "boxeur", "branche", "brasier", "brave", "brebis", "brèche",
39091"breuvage", "bricoler", "brigade", "brillant", "brioche", "brique", "brochure", "broder", "bronzer", "brousse",
39092"broyeur", "brume", "brusque", "brutal", "bruyant", "buffle", "buisson", "bulletin", "bureau", "burin",
39093"bustier", "butiner", "butoir", "buvable", "buvette", "cabanon", "cabine", "cachette", "cadeau", "cadre",
39094"caféine", "caillou", "caisson", "calculer", "calepin", "calibre", "calmer", "calomnie", "calvaire", "camarade",
39095"caméra", "camion", "campagne", "canal", "caneton", "canon", "cantine", "canular", "capable", "caporal",
39096"caprice", "capsule", "capter", "capuche", "carabine", "carbone", "caresser", "caribou", "carnage", "carotte",
39097"carreau", "carton", "cascade", "casier", "casque", "cassure", "causer", "caution", "cavalier", "caverne",
39098"caviar", "cédille", "ceinture", "céleste", "cellule", "cendrier", "censurer", "central", "cercle", "cérébral",
39099"cerise", "cerner", "cerveau", "cesser", "chagrin", "chaise", "chaleur", "chambre", "chance", "chapitre",
39100"charbon", "chasseur", "chaton", "chausson", "chavirer", "chemise", "chenille", "chéquier", "chercher", "cheval",
39101"chien", "chiffre", "chignon", "chimère", "chiot", "chlorure", "chocolat", "choisir", "chose", "chouette",
39102"chrome", "chute", "cigare", "cigogne", "cimenter", "cinéma", "cintrer", "circuler", "cirer", "cirque",
39103"citerne", "citoyen", "citron", "civil", "clairon", "clameur", "claquer", "classe", "clavier", "client",
39104"cligner", "climat", "clivage", "cloche", "clonage", "cloporte", "cobalt", "cobra", "cocasse", "cocotier",
39105"coder", "codifier", "coffre", "cogner", "cohésion", "coiffer", "coincer", "colère", "colibri", "colline",
39106"colmater", "colonel", "combat", "comédie", "commande", "compact", "concert", "conduire", "confier", "congeler",
39107"connoter", "consonne", "contact", "convexe", "copain", "copie", "corail", "corbeau", "cordage", "corniche",
39108"corpus", "correct", "cortège", "cosmique", "costume", "coton", "coude", "coupure", "courage", "couteau",
39109"couvrir", "coyote", "crabe", "crainte", "cravate", "crayon", "créature", "créditer", "crémeux", "creuser",
39110"crevette", "cribler", "crier", "cristal", "critère", "croire", "croquer", "crotale", "crucial", "cruel",
39111"crypter", "cubique", "cueillir", "cuillère", "cuisine", "cuivre", "culminer", "cultiver", "cumuler", "cupide",
39112"curatif", "curseur", "cyanure", "cycle", "cylindre", "cynique", "daigner", "damier", "danger", "danseur",
39113"dauphin", "débattre", "débiter", "déborder", "débrider", "débutant", "décaler", "décembre", "déchirer", "décider",
39114"déclarer", "décorer", "décrire", "décupler", "dédale", "déductif", "déesse", "défensif", "défiler", "défrayer",
39115"dégager", "dégivrer", "déglutir", "dégrafer", "déjeuner", "délice", "déloger", "demander", "demeurer", "démolir",
39116"dénicher", "dénouer", "dentelle", "dénuder", "départ", "dépenser", "déphaser", "déplacer", "déposer", "déranger",
39117"dérober", "désastre", "descente", "désert", "désigner", "désobéir", "dessiner", "destrier", "détacher", "détester",
39118"détourer", "détresse", "devancer", "devenir", "deviner", "devoir", "diable", "dialogue", "diamant", "dicter",
39119"différer", "digérer", "digital", "digne", "diluer", "dimanche", "diminuer", "dioxyde", "directif", "diriger",
39120"discuter", "disposer", "dissiper", "distance", "divertir", "diviser", "docile", "docteur", "dogme", "doigt",
39121"domaine", "domicile", "dompter", "donateur", "donjon", "donner", "dopamine", "dortoir", "dorure", "dosage",
39122"doseur", "dossier", "dotation", "douanier", "double", "douceur", "douter", "doyen", "dragon", "draper",
39123"dresser", "dribbler", "droiture", "duperie", "duplexe", "durable", "durcir", "dynastie", "éblouir", "écarter",
39124"écharpe", "échelle", "éclairer", "éclipse", "éclore", "écluse", "école", "économie", "écorce", "écouter",
39125"écraser", "écrémer", "écrivain", "écrou", "écume", "écureuil", "édifier", "éduquer", "effacer", "effectif",
39126"effigie", "effort", "effrayer", "effusion", "égaliser", "égarer", "éjecter", "élaborer", "élargir", "électron",
39127"élégant", "éléphant", "élève", "éligible", "élitisme", "éloge", "élucider", "éluder", "emballer", "embellir",
39128"embryon", "émeraude", "émission", "emmener", "émotion", "émouvoir", "empereur", "employer", "emporter", "emprise",
39129"émulsion", "encadrer", "enchère", "enclave", "encoche", "endiguer", "endosser", "endroit", "enduire", "énergie",
39130"enfance", "enfermer", "enfouir", "engager", "engin", "englober", "énigme", "enjamber", "enjeu", "enlever",
39131"ennemi", "ennuyeux", "enrichir", "enrobage", "enseigne", "entasser", "entendre", "entier", "entourer", "entraver",
39132"énumérer", "envahir", "enviable", "envoyer", "enzyme", "éolien", "épaissir", "épargne", "épatant", "épaule",
39133"épicerie", "épidémie", "épier", "épilogue", "épine", "épisode", "épitaphe", "époque", "épreuve", "éprouver",
39134"épuisant", "équerre", "équipe", "ériger", "érosion", "erreur", "éruption", "escalier", "espadon", "espèce",
39135"espiègle", "espoir", "esprit", "esquiver", "essayer", "essence", "essieu", "essorer", "estime", "estomac",
39136"estrade", "étagère", "étaler", "étanche", "étatique", "éteindre", "étendoir", "éternel", "éthanol", "éthique",
39137"ethnie", "étirer", "étoffer", "étoile", "étonnant", "étourdir", "étrange", "étroit", "étude", "euphorie",
39138"évaluer", "évasion", "éventail", "évidence", "éviter", "évolutif", "évoquer", "exact", "exagérer", "exaucer",
39139"exceller", "excitant", "exclusif", "excuse", "exécuter", "exemple", "exercer", "exhaler", "exhorter", "exigence",
39140"exiler", "exister", "exotique", "expédier", "explorer", "exposer", "exprimer", "exquis", "extensif", "extraire",
39141"exulter", "fable", "fabuleux", "facette", "facile", "facture", "faiblir", "falaise", "fameux", "famille",
39142"farceur", "farfelu", "farine", "farouche", "fasciner", "fatal", "fatigue", "faucon", "fautif", "faveur",
39143"favori", "fébrile", "féconder", "fédérer", "félin", "femme", "fémur", "fendoir", "féodal", "fermer",
39144"féroce", "ferveur", "festival", "feuille", "feutre", "février", "fiasco", "ficeler", "fictif", "fidèle",
39145"figure", "filature", "filetage", "filière", "filleul", "filmer", "filou", "filtrer", "financer", "finir",
39146"fiole", "firme", "fissure", "fixer", "flairer", "flamme", "flasque", "flatteur", "fléau", "flèche",
39147"fleur", "flexion", "flocon", "flore", "fluctuer", "fluide", "fluvial", "folie", "fonderie", "fongible",
39148"fontaine", "forcer", "forgeron", "formuler", "fortune", "fossile", "foudre", "fougère", "fouiller", "foulure",
39149"fourmi", "fragile", "fraise", "franchir", "frapper", "frayeur", "frégate", "freiner", "frelon", "frémir",
39150"frénésie", "frère", "friable", "friction", "frisson", "frivole", "froid", "fromage", "frontal", "frotter",
39151"fruit", "fugitif", "fuite", "fureur", "furieux", "furtif", "fusion", "futur", "gagner", "galaxie",
39152"galerie", "gambader", "garantir", "gardien", "garnir", "garrigue", "gazelle", "gazon", "géant", "gélatine",
39153"gélule", "gendarme", "général", "génie", "genou", "gentil", "géologie", "géomètre", "géranium", "germe",
39154"gestuel", "geyser", "gibier", "gicler", "girafe", "givre", "glace", "glaive", "glisser", "globe",
39155"gloire", "glorieux", "golfeur", "gomme", "gonfler", "gorge", "gorille", "goudron", "gouffre", "goulot",
39156"goupille", "gourmand", "goutte", "graduel", "graffiti", "graine", "grand", "grappin", "gratuit", "gravir",
39157"grenat", "griffure", "griller", "grimper", "grogner", "gronder", "grotte", "groupe", "gruger", "grutier",
39158"gruyère", "guépard", "guerrier", "guide", "guimauve", "guitare", "gustatif", "gymnaste", "gyrostat", "habitude",
39159"hachoir", "halte", "hameau", "hangar", "hanneton", "haricot", "harmonie", "harpon", "hasard", "hélium",
39160"hématome", "herbe", "hérisson", "hermine", "héron", "hésiter", "heureux", "hiberner", "hibou", "hilarant",
39161"histoire", "hiver", "homard", "hommage", "homogène", "honneur", "honorer", "honteux", "horde", "horizon",
39162"horloge", "hormone", "horrible", "houleux", "housse", "hublot", "huileux", "humain", "humble", "humide",
39163"humour", "hurler", "hydromel", "hygiène", "hymne", "hypnose", "idylle", "ignorer", "iguane", "illicite",
39164"illusion", "image", "imbiber", "imiter", "immense", "immobile", "immuable", "impact", "impérial", "implorer",
39165"imposer", "imprimer", "imputer", "incarner", "incendie", "incident", "incliner", "incolore", "indexer", "indice",
39166"inductif", "inédit", "ineptie", "inexact", "infini", "infliger", "informer", "infusion", "ingérer", "inhaler",
39167"inhiber", "injecter", "injure", "innocent", "inoculer", "inonder", "inscrire", "insecte", "insigne", "insolite",
39168"inspirer", "instinct", "insulter", "intact", "intense", "intime", "intrigue", "intuitif", "inutile", "invasion",
39169"inventer", "inviter", "invoquer", "ironique", "irradier", "irréel", "irriter", "isoler", "ivoire", "ivresse",
39170"jaguar", "jaillir", "jambe", "janvier", "jardin", "jauger", "jaune", "javelot", "jetable", "jeton",
39171"jeudi", "jeunesse", "joindre", "joncher", "jongler", "joueur", "jouissif", "journal", "jovial", "joyau",
39172"joyeux", "jubiler", "jugement", "junior", "jupon", "juriste", "justice", "juteux", "juvénile", "kayak",
39173"kimono", "kiosque", "label", "labial", "labourer", "lacérer", "lactose", "lagune", "laine", "laisser",
39174"laitier", "lambeau", "lamelle", "lampe", "lanceur", "langage", "lanterne", "lapin", "largeur", "larme",
39175"laurier", "lavabo", "lavoir", "lecture", "légal", "léger", "légume", "lessive", "lettre", "levier",
39176"lexique", "lézard", "liasse", "libérer", "libre", "licence", "licorne", "liège", "lièvre", "ligature",
39177"ligoter", "ligue", "limer", "limite", "limonade", "limpide", "linéaire", "lingot", "lionceau", "liquide",
39178"lisière", "lister", "lithium", "litige", "littoral", "livreur", "logique", "lointain", "loisir", "lombric",
39179"loterie", "louer", "lourd", "loutre", "louve", "loyal", "lubie", "lucide", "lucratif", "lueur",
39180"lugubre", "luisant", "lumière", "lunaire", "lundi", "luron", "lutter", "luxueux", "machine", "magasin",
39181"magenta", "magique", "maigre", "maillon", "maintien", "mairie", "maison", "majorer", "malaxer", "maléfice",
39182"malheur", "malice", "mallette", "mammouth", "mandater", "maniable", "manquant", "manteau", "manuel", "marathon",
39183"marbre", "marchand", "mardi", "maritime", "marqueur", "marron", "marteler", "mascotte", "massif", "matériel",
39184"matière", "matraque", "maudire", "maussade", "mauve", "maximal", "méchant", "méconnu", "médaille", "médecin",
39185"méditer", "méduse", "meilleur", "mélange", "mélodie", "membre", "mémoire", "menacer", "mener", "menhir",
39186"mensonge", "mentor", "mercredi", "mérite", "merle", "messager", "mesure", "métal", "météore", "méthode",
39187"métier", "meuble", "miauler", "microbe", "miette", "mignon", "migrer", "milieu", "million", "mimique",
39188"mince", "minéral", "minimal", "minorer", "minute", "miracle", "miroiter", "missile", "mixte", "mobile",
39189"moderne", "moelleux", "mondial", "moniteur", "monnaie", "monotone", "monstre", "montagne", "monument", "moqueur",
39190"morceau", "morsure", "mortier", "moteur", "motif", "mouche", "moufle", "moulin", "mousson", "mouton",
39191"mouvant", "multiple", "munition", "muraille", "murène", "murmure", "muscle", "muséum", "musicien", "mutation",
39192"muter", "mutuel", "myriade", "myrtille", "mystère", "mythique", "nageur", "nappe", "narquois", "narrer",
39193"natation", "nation", "nature", "naufrage", "nautique", "navire", "nébuleux", "nectar", "néfaste", "négation",
39194"négliger", "négocier", "neige", "nerveux", "nettoyer", "neurone", "neutron", "neveu", "niche", "nickel",
39195"nitrate", "niveau", "noble", "nocif", "nocturne", "noirceur", "noisette", "nomade", "nombreux", "nommer",
39196"normatif", "notable", "notifier", "notoire", "nourrir", "nouveau", "novateur", "novembre", "novice", "nuage",
39197"nuancer", "nuire", "nuisible", "numéro", "nuptial", "nuque", "nutritif", "obéir", "objectif", "obliger",
39198"obscur", "observer", "obstacle", "obtenir", "obturer", "occasion", "occuper", "océan", "octobre", "octroyer",
39199"octupler", "oculaire", "odeur", "odorant", "offenser", "officier", "offrir", "ogive", "oiseau", "oisillon",
39200"olfactif", "olivier", "ombrage", "omettre", "onctueux", "onduler", "onéreux", "onirique", "opale", "opaque",
39201"opérer", "opinion", "opportun", "opprimer", "opter", "optique", "orageux", "orange", "orbite", "ordonner",
39202"oreille", "organe", "orgueil", "orifice", "ornement", "orque", "ortie", "osciller", "osmose", "ossature",
39203"otarie", "ouragan", "ourson", "outil", "outrager", "ouvrage", "ovation", "oxyde", "oxygène", "ozone",
39204"paisible", "palace", "palmarès", "palourde", "palper", "panache", "panda", "pangolin", "paniquer", "panneau",
39205"panorama", "pantalon", "papaye", "papier", "papoter", "papyrus", "paradoxe", "parcelle", "paresse", "parfumer",
39206"parler", "parole", "parrain", "parsemer", "partager", "parure", "parvenir", "passion", "pastèque", "paternel",
39207"patience", "patron", "pavillon", "pavoiser", "payer", "paysage", "peigne", "peintre", "pelage", "pélican",
39208"pelle", "pelouse", "peluche", "pendule", "pénétrer", "pénible", "pensif", "pénurie", "pépite", "péplum",
39209"perdrix", "perforer", "période", "permuter", "perplexe", "persil", "perte", "peser", "pétale", "petit",
39210"pétrir", "peuple", "pharaon", "phobie", "phoque", "photon", "phrase", "physique", "piano", "pictural",
39211"pièce", "pierre", "pieuvre", "pilote", "pinceau", "pipette", "piquer", "pirogue", "piscine", "piston",
39212"pivoter", "pixel", "pizza", "placard", "plafond", "plaisir", "planer", "plaque", "plastron", "plateau",
39213"pleurer", "plexus", "pliage", "plomb", "plonger", "pluie", "plumage", "pochette", "poésie", "poète",
39214"pointe", "poirier", "poisson", "poivre", "polaire", "policier", "pollen", "polygone", "pommade", "pompier",
39215"ponctuel", "pondérer", "poney", "portique", "position", "posséder", "posture", "potager", "poteau", "potion",
39216"pouce", "poulain", "poumon", "pourpre", "poussin", "pouvoir", "prairie", "pratique", "précieux", "prédire",
39217"préfixe", "prélude", "prénom", "présence", "prétexte", "prévoir", "primitif", "prince", "prison", "priver",
39218"problème", "procéder", "prodige", "profond", "progrès", "proie", "projeter", "prologue", "promener", "propre",
39219"prospère", "protéger", "prouesse", "proverbe", "prudence", "pruneau", "psychose", "public", "puceron", "puiser",
39220"pulpe", "pulsar", "punaise", "punitif", "pupitre", "purifier", "puzzle", "pyramide", "quasar", "querelle",
39221"question", "quiétude", "quitter", "quotient", "racine", "raconter", "radieux", "ragondin", "raideur", "raisin",
39222"ralentir", "rallonge", "ramasser", "rapide", "rasage", "ratisser", "ravager", "ravin", "rayonner", "réactif",
39223"réagir", "réaliser", "réanimer", "recevoir", "réciter", "réclamer", "récolter", "recruter", "reculer", "recycler",
39224"rédiger", "redouter", "refaire", "réflexe", "réformer", "refrain", "refuge", "régalien", "région", "réglage",
39225"régulier", "réitérer", "rejeter", "rejouer", "relatif", "relever", "relief", "remarque", "remède", "remise",
39226"remonter", "remplir", "remuer", "renard", "renfort", "renifler", "renoncer", "rentrer", "renvoi", "replier",
39227"reporter", "reprise", "reptile", "requin", "réserve", "résineux", "résoudre", "respect", "rester", "résultat",
39228"rétablir", "retenir", "réticule", "retomber", "retracer", "réunion", "réussir", "revanche", "revivre", "révolte",
39229"révulsif", "richesse", "rideau", "rieur", "rigide", "rigoler", "rincer", "riposter", "risible", "risque",
39230"rituel", "rival", "rivière", "rocheux", "romance", "rompre", "ronce", "rondin", "roseau", "rosier",
39231"rotatif", "rotor", "rotule", "rouge", "rouille", "rouleau", "routine", "royaume", "ruban", "rubis",
39232"ruche", "ruelle", "rugueux", "ruiner", "ruisseau", "ruser", "rustique", "rythme", "sabler", "saboter",
39233"sabre", "sacoche", "safari", "sagesse", "saisir", "salade", "salive", "salon", "saluer", "samedi",
39234"sanction", "sanglier", "sarcasme", "sardine", "saturer", "saugrenu", "saumon", "sauter", "sauvage", "savant",
39235"savonner", "scalpel", "scandale", "scélérat", "scénario", "sceptre", "schéma", "science", "scinder", "score",
39236"scrutin", "sculpter", "séance", "sécable", "sécher", "secouer", "sécréter", "sédatif", "séduire", "seigneur",
39237"séjour", "sélectif", "semaine", "sembler", "semence", "séminal", "sénateur", "sensible", "sentence", "séparer",
39238"séquence", "serein", "sergent", "sérieux", "serrure", "sérum", "service", "sésame", "sévir", "sevrage",
39239"sextuple", "sidéral", "siècle", "siéger", "siffler", "sigle", "signal", "silence", "silicium", "simple",
39240"sincère", "sinistre", "siphon", "sirop", "sismique", "situer", "skier", "social", "socle", "sodium",
39241"soigneux", "soldat", "soleil", "solitude", "soluble", "sombre", "sommeil", "somnoler", "sonde", "songeur",
39242"sonnette", "sonore", "sorcier", "sortir", "sosie", "sottise", "soucieux", "soudure", "souffle", "soulever",
39243"soupape", "source", "soutirer", "souvenir", "spacieux", "spatial", "spécial", "sphère", "spiral", "stable",
39244"station", "sternum", "stimulus", "stipuler", "strict", "studieux", "stupeur", "styliste", "sublime", "substrat",
39245"subtil", "subvenir", "succès", "sucre", "suffixe", "suggérer", "suiveur", "sulfate", "superbe", "supplier",
39246"surface", "suricate", "surmener", "surprise", "sursaut", "survie", "suspect", "syllabe", "symbole", "symétrie",
39247"synapse", "syntaxe", "système", "tabac", "tablier", "tactile", "tailler", "talent", "talisman", "talonner",
39248"tambour", "tamiser", "tangible", "tapis", "taquiner", "tarder", "tarif", "tartine", "tasse", "tatami",
39249"tatouage", "taupe", "taureau", "taxer", "témoin", "temporel", "tenaille", "tendre", "teneur", "tenir",
39250"tension", "terminer", "terne", "terrible", "tétine", "texte", "thème", "théorie", "thérapie", "thorax",
39251"tibia", "tiède", "timide", "tirelire", "tiroir", "tissu", "titane", "titre", "tituber", "toboggan",
39252"tolérant", "tomate", "tonique", "tonneau", "toponyme", "torche", "tordre", "tornade", "torpille", "torrent",
39253"torse", "tortue", "totem", "toucher", "tournage", "tousser", "toxine", "traction", "trafic", "tragique",
39254"trahir", "train", "trancher", "travail", "trèfle", "tremper", "trésor", "treuil", "triage", "tribunal",
39255"tricoter", "trilogie", "triomphe", "tripler", "triturer", "trivial", "trombone", "tronc", "tropical", "troupeau",
39256"tuile", "tulipe", "tumulte", "tunnel", "turbine", "tuteur", "tutoyer", "tuyau", "tympan", "typhon",
39257"typique", "tyran", "ubuesque", "ultime", "ultrason", "unanime", "unifier", "union", "unique", "unitaire",
39258"univers", "uranium", "urbain", "urticant", "usage", "usine", "usuel", "usure", "utile", "utopie",
39259"vacarme", "vaccin", "vagabond", "vague", "vaillant", "vaincre", "vaisseau", "valable", "valise", "vallon",
39260"valve", "vampire", "vanille", "vapeur", "varier", "vaseux", "vassal", "vaste", "vecteur", "vedette",
39261"végétal", "véhicule", "veinard", "véloce", "vendredi", "vénérer", "venger", "venimeux", "ventouse", "verdure",
39262"vérin", "vernir", "verrou", "verser", "vertu", "veston", "vétéran", "vétuste", "vexant", "vexer",
39263"viaduc", "viande", "victoire", "vidange", "vidéo", "vignette", "vigueur", "vilain", "village", "vinaigre",
39264"violon", "vipère", "virement", "virtuose", "virus", "visage", "viseur", "vision", "visqueux", "visuel",
39265"vital", "vitesse", "viticole", "vitrine", "vivace", "vivipare", "vocation", "voguer", "voile", "voisin",
39266"voiture", "volaille", "volcan", "voltiger", "volume", "vorace", "vortex", "voter", "vouloir", "voyage",
39267"voyelle", "wagon", "xénon", "yacht", "zèbre", "zénith", "zeste", "zoologie"]
39268</script>
39269 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
39270WORDLISTS["italian"] = [
39271"abaco", "abbaglio", "abbinato", "abete", "abisso", "abolire", "abrasivo", "abrogato", "accadere", "accenno",
39272"accusato", "acetone", "achille", "acido", "acqua", "acre", "acrilico", "acrobata", "acuto", "adagio",
39273"addebito", "addome", "adeguato", "aderire", "adipe", "adottare", "adulare", "affabile", "affetto", "affisso",
39274"affranto", "aforisma", "afoso", "africano", "agave", "agente", "agevole", "aggancio", "agire", "agitare",
39275"agonismo", "agricolo", "agrumeto", "aguzzo", "alabarda", "alato", "albatro", "alberato", "albo", "albume",
39276"alce", "alcolico", "alettone", "alfa", "algebra", "aliante", "alibi", "alimento", "allagato", "allegro",
39277"allievo", "allodola", "allusivo", "almeno", "alogeno", "alpaca", "alpestre", "altalena", "alterno", "alticcio",
39278"altrove", "alunno", "alveolo", "alzare", "amalgama", "amanita", "amarena", "ambito", "ambrato", "ameba",
39279"america", "ametista", "amico", "ammasso", "ammenda", "ammirare", "ammonito", "amore", "ampio", "ampliare",
39280"amuleto", "anacardo", "anagrafe", "analista", "anarchia", "anatra", "anca", "ancella", "ancora", "andare",
39281"andrea", "anello", "angelo", "angolare", "angusto", "anima", "annegare", "annidato", "anno", "annuncio",
39282"anonimo", "anticipo", "anzi", "apatico", "apertura", "apode", "apparire", "appetito", "appoggio", "approdo",
39283"appunto", "aprile", "arabica", "arachide", "aragosta", "araldica", "arancio", "aratura", "arazzo", "arbitro",
39284"archivio", "ardito", "arenile", "argento", "argine", "arguto", "aria", "armonia", "arnese", "arredato",
39285"arringa", "arrosto", "arsenico", "arso", "artefice", "arzillo", "asciutto", "ascolto", "asepsi", "asettico",
39286"asfalto", "asino", "asola", "aspirato", "aspro", "assaggio", "asse", "assoluto", "assurdo", "asta",
39287"astenuto", "astice", "astratto", "atavico", "ateismo", "atomico", "atono", "attesa", "attivare", "attorno",
39288"attrito", "attuale", "ausilio", "austria", "autista", "autonomo", "autunno", "avanzato", "avere", "avvenire",
39289"avviso", "avvolgere", "azione", "azoto", "azzimo", "azzurro", "babele", "baccano", "bacino", "baco",
39290"badessa", "badilata", "bagnato", "baita", "balcone", "baldo", "balena", "ballata", "balzano", "bambino",
39291"bandire", "baraonda", "barbaro", "barca", "baritono", "barlume", "barocco", "basilico", "basso", "batosta",
39292"battuto", "baule", "bava", "bavosa", "becco", "beffa", "belgio", "belva", "benda", "benevole",
39293"benigno", "benzina", "bere", "berlina", "beta", "bibita", "bici", "bidone", "bifido", "biga",
39294"bilancia", "bimbo", "binocolo", "biologo", "bipede", "bipolare", "birbante", "birra", "biscotto", "bisesto",
39295"bisnonno", "bisonte", "bisturi", "bizzarro", "blando", "blatta", "bollito", "bonifico", "bordo", "bosco",
39296"botanico", "bottino", "bozzolo", "braccio", "bradipo", "brama", "branca", "bravura", "bretella", "brevetto",
39297"brezza", "briglia", "brillante", "brindare", "broccolo", "brodo", "bronzina", "brullo", "bruno", "bubbone",
39298"buca", "budino", "buffone", "buio", "bulbo", "buono", "burlone", "burrasca", "bussola", "busta",
39299"cadetto", "caduco", "calamaro", "calcolo", "calesse", "calibro", "calmo", "caloria", "cambusa", "camerata",
39300"camicia", "cammino", "camola", "campale", "canapa", "candela", "cane", "canino", "canotto", "cantina",
39301"capace", "capello", "capitolo", "capogiro", "cappero", "capra", "capsula", "carapace", "carcassa", "cardo",
39302"carisma", "carovana", "carretto", "cartolina", "casaccio", "cascata", "caserma", "caso", "cassone", "castello",
39303"casuale", "catasta", "catena", "catrame", "cauto", "cavillo", "cedibile", "cedrata", "cefalo", "celebre",
39304"cellulare", "cena", "cenone", "centesimo", "ceramica", "cercare", "certo", "cerume", "cervello", "cesoia",
39305"cespo", "ceto", "chela", "chiaro", "chicca", "chiedere", "chimera", "china", "chirurgo", "chitarra",
39306"ciao", "ciclismo", "cifrare", "cigno", "cilindro", "ciottolo", "circa", "cirrosi", "citrico", "cittadino",
39307"ciuffo", "civetta", "civile", "classico", "clinica", "cloro", "cocco", "codardo", "codice", "coerente",
39308"cognome", "collare", "colmato", "colore", "colposo", "coltivato", "colza", "coma", "cometa", "commando",
39309"comodo", "computer", "comune", "conciso", "condurre", "conferma", "congelare", "coniuge", "connesso", "conoscere",
39310"consumo", "continuo", "convegno", "coperto", "copione", "coppia", "copricapo", "corazza", "cordata", "coricato",
39311"cornice", "corolla", "corpo", "corredo", "corsia", "cortese", "cosmico", "costante", "cottura", "covato",
39312"cratere", "cravatta", "creato", "credere", "cremoso", "crescita", "creta", "criceto", "crinale", "crisi",
39313"critico", "croce", "cronaca", "crostata", "cruciale", "crusca", "cucire", "cuculo", "cugino", "cullato",
39314"cupola", "curatore", "cursore", "curvo", "cuscino", "custode", "dado", "daino", "dalmata", "damerino",
39315"daniela", "dannoso", "danzare", "datato", "davanti", "davvero", "debutto", "decennio", "deciso", "declino",
39316"decollo", "decreto", "dedicato", "definito", "deforme", "degno", "delegare", "delfino", "delirio", "delta",
39317"demenza", "denotato", "dentro", "deposito", "derapata", "derivare", "deroga", "descritto", "deserto", "desiderio",
39318"desumere", "detersivo", "devoto", "diametro", "dicembre", "diedro", "difeso", "diffuso", "digerire", "digitale",
39319"diluvio", "dinamico", "dinnanzi", "dipinto", "diploma", "dipolo", "diradare", "dire", "dirotto", "dirupo",
39320"disagio", "discreto", "disfare", "disgelo", "disposto", "distanza", "disumano", "dito", "divano", "divelto",
39321"dividere", "divorato", "doblone", "docente", "doganale", "dogma", "dolce", "domato", "domenica", "dominare",
39322"dondolo", "dono", "dormire", "dote", "dottore", "dovuto", "dozzina", "drago", "druido", "dubbio",
39323"dubitare", "ducale", "duna", "duomo", "duplice", "duraturo", "ebano", "eccesso", "ecco", "eclissi",
39324"economia", "edera", "edicola", "edile", "editoria", "educare", "egemonia", "egli", "egoismo", "egregio",
39325"elaborato", "elargire", "elegante", "elencato", "eletto", "elevare", "elfico", "elica", "elmo", "elsa",
39326"eluso", "emanato", "emblema", "emesso", "emiro", "emotivo", "emozione", "empirico", "emulo", "endemico",
39327"enduro", "energia", "enfasi", "enoteca", "entrare", "enzima", "epatite", "epilogo", "episodio", "epocale",
39328"eppure", "equatore", "erario", "erba", "erboso", "erede", "eremita", "erigere", "ermetico", "eroe",
39329"erosivo", "errante", "esagono", "esame", "esanime", "esaudire", "esca", "esempio", "esercito", "esibito",
39330"esigente", "esistere", "esito", "esofago", "esortato", "esoso", "espanso", "espresso", "essenza", "esso",
39331"esteso", "estimare", "estonia", "estroso", "esultare", "etilico", "etnico", "etrusco", "etto", "euclideo",
39332"europa", "evaso", "evidenza", "evitato", "evoluto", "evviva", "fabbrica", "faccenda", "fachiro", "falco",
39333"famiglia", "fanale", "fanfara", "fango", "fantasma", "fare", "farfalla", "farinoso", "farmaco", "fascia",
39334"fastoso", "fasullo", "faticare", "fato", "favoloso", "febbre", "fecola", "fede", "fegato", "felpa",
39335"feltro", "femmina", "fendere", "fenomeno", "fermento", "ferro", "fertile", "fessura", "festivo", "fetta",
39336"feudo", "fiaba", "fiducia", "fifa", "figurato", "filo", "finanza", "finestra", "finire", "fiore",
39337"fiscale", "fisico", "fiume", "flacone", "flamenco", "flebo", "flemma", "florido", "fluente", "fluoro",
39338"fobico", "focaccia", "focoso", "foderato", "foglio", "folata", "folclore", "folgore", "fondente", "fonetico",
39339"fonia", "fontana", "forbito", "forchetta", "foresta", "formica", "fornaio", "foro", "fortezza", "forzare",
39340"fosfato", "fosso", "fracasso", "frana", "frassino", "fratello", "freccetta", "frenata", "fresco", "frigo",
39341"frollino", "fronde", "frugale", "frutta", "fucilata", "fucsia", "fuggente", "fulmine", "fulvo", "fumante",
39342"fumetto", "fumoso", "fune", "funzione", "fuoco", "furbo", "furgone", "furore", "fuso", "futile",
39343"gabbiano", "gaffe", "galateo", "gallina", "galoppo", "gambero", "gamma", "garanzia", "garbo", "garofano",
39344"garzone", "gasdotto", "gasolio", "gastrico", "gatto", "gaudio", "gazebo", "gazzella", "geco", "gelatina",
39345"gelso", "gemello", "gemmato", "gene", "genitore", "gennaio", "genotipo", "gergo", "ghepardo", "ghiaccio",
39346"ghisa", "giallo", "gilda", "ginepro", "giocare", "gioiello", "giorno", "giove", "girato", "girone",
39347"gittata", "giudizio", "giurato", "giusto", "globulo", "glutine", "gnomo", "gobba", "golf", "gomito",
39348"gommone", "gonfio", "gonna", "governo", "gracile", "grado", "grafico", "grammo", "grande", "grattare",
39349"gravoso", "grazia", "greca", "gregge", "grifone", "grigio", "grinza", "grotta", "gruppo", "guadagno",
39350"guaio", "guanto", "guardare", "gufo", "guidare", "ibernato", "icona", "identico", "idillio", "idolo",
39351"idra", "idrico", "idrogeno", "igiene", "ignaro", "ignorato", "ilare", "illeso", "illogico", "illudere",
39352"imballo", "imbevuto", "imbocco", "imbuto", "immane", "immerso", "immolato", "impacco", "impeto", "impiego",
39353"importo", "impronta", "inalare", "inarcare", "inattivo", "incanto", "incendio", "inchino", "incisivo", "incluso",
39354"incontro", "incrocio", "incubo", "indagine", "india", "indole", "inedito", "infatti", "infilare", "inflitto",
39355"ingaggio", "ingegno", "inglese", "ingordo", "ingrosso", "innesco", "inodore", "inoltrare", "inondato", "insano",
39356"insetto", "insieme", "insonnia", "insulina", "intasato", "intero", "intonaco", "intuito", "inumidire", "invalido",
39357"invece", "invito", "iperbole", "ipnotico", "ipotesi", "ippica", "iride", "irlanda", "ironico", "irrigato",
39358"irrorare", "isolato", "isotopo", "isterico", "istituto", "istrice", "italia", "iterare", "labbro", "labirinto",
39359"lacca", "lacerato", "lacrima", "lacuna", "laddove", "lago", "lampo", "lancetta", "lanterna", "lardoso",
39360"larga", "laringe", "lastra", "latenza", "latino", "lattuga", "lavagna", "lavoro", "legale", "leggero",
39361"lembo", "lentezza", "lenza", "leone", "lepre", "lesivo", "lessato", "lesto", "letterale", "leva",
39362"levigato", "libero", "lido", "lievito", "lilla", "limatura", "limitare", "limpido", "lineare", "lingua",
39363"liquido", "lira", "lirica", "lisca", "lite", "litigio", "livrea", "locanda", "lode", "logica",
39364"lombare", "londra", "longevo", "loquace", "lorenzo", "loto", "lotteria", "luce", "lucidato", "lumaca",
39365"luminoso", "lungo", "lupo", "luppolo", "lusinga", "lusso", "lutto", "macabro", "macchina", "macero",
39366"macinato", "madama", "magico", "maglia", "magnete", "magro", "maiolica", "malafede", "malgrado", "malinteso",
39367"malsano", "malto", "malumore", "mana", "mancia", "mandorla", "mangiare", "manifesto", "mannaro", "manovra",
39368"mansarda", "mantide", "manubrio", "mappa", "maratona", "marcire", "maretta", "marmo", "marsupio", "maschera",
39369"massaia", "mastino", "materasso", "matricola", "mattone", "maturo", "mazurca", "meandro", "meccanico", "mecenate",
39370"medesimo", "meditare", "mega", "melassa", "melis", "melodia", "meninge", "meno", "mensola", "mercurio",
39371"merenda", "merlo", "meschino", "mese", "messere", "mestolo", "metallo", "metodo", "mettere", "miagolare",
39372"mica", "micelio", "michele", "microbo", "midollo", "miele", "migliore", "milano", "milite", "mimosa",
39373"minerale", "mini", "minore", "mirino", "mirtillo", "miscela", "missiva", "misto", "misurare", "mitezza",
39374"mitigare", "mitra", "mittente", "mnemonico", "modello", "modifica", "modulo", "mogano", "mogio", "mole",
39375"molosso", "monastero", "monco", "mondina", "monetario", "monile", "monotono", "monsone", "montato", "monviso",
39376"mora", "mordere", "morsicato", "mostro", "motivato", "motosega", "motto", "movenza", "movimento", "mozzo",
39377"mucca", "mucosa", "muffa", "mughetto", "mugnaio", "mulatto", "mulinello", "multiplo", "mummia", "munto",
39378"muovere", "murale", "musa", "muscolo", "musica", "mutevole", "muto", "nababbo", "nafta", "nanometro",
39379"narciso", "narice", "narrato", "nascere", "nastrare", "naturale", "nautica", "naviglio", "nebulosa", "necrosi",
39380"negativo", "negozio", "nemmeno", "neofita", "neretto", "nervo", "nessuno", "nettuno", "neutrale", "neve",
39381"nevrotico", "nicchia", "ninfa", "nitido", "nobile", "nocivo", "nodo", "nome", "nomina", "nordico",
39382"normale", "norvegese", "nostrano", "notare", "notizia", "notturno", "novella", "nucleo", "nulla", "numero",
39383"nuovo", "nutrire", "nuvola", "nuziale", "oasi", "obbedire", "obbligo", "obelisco", "oblio", "obolo",
39384"obsoleto", "occasione", "occhio", "occidente", "occorrere", "occultare", "ocra", "oculato", "odierno", "odorare",
39385"offerta", "offrire", "offuscato", "oggetto", "oggi", "ognuno", "olandese", "olfatto", "oliato", "oliva",
39386"ologramma", "oltre", "omaggio", "ombelico", "ombra", "omega", "omissione", "ondoso", "onere", "onice",
39387"onnivoro", "onorevole", "onta", "operato", "opinione", "opposto", "oracolo", "orafo", "ordine", "orecchino",
39388"orefice", "orfano", "organico", "origine", "orizzonte", "orma", "ormeggio", "ornativo", "orologio", "orrendo",
39389"orribile", "ortensia", "ortica", "orzata", "orzo", "osare", "oscurare", "osmosi", "ospedale", "ospite",
39390"ossa", "ossidare", "ostacolo", "oste", "otite", "otre", "ottagono", "ottimo", "ottobre", "ovale",
39391"ovest", "ovino", "oviparo", "ovocito", "ovunque", "ovviare", "ozio", "pacchetto", "pace", "pacifico",
39392"padella", "padrone", "paese", "paga", "pagina", "palazzina", "palesare", "pallido", "palo", "palude",
39393"pandoro", "pannello", "paolo", "paonazzo", "paprica", "parabola", "parcella", "parere", "pargolo", "pari",
39394"parlato", "parola", "partire", "parvenza", "parziale", "passivo", "pasticca", "patacca", "patologia", "pattume",
39395"pavone", "peccato", "pedalare", "pedonale", "peggio", "peloso", "penare", "pendice", "penisola", "pennuto",
39396"penombra", "pensare", "pentola", "pepe", "pepita", "perbene", "percorso", "perdonato", "perforare", "pergamena",
39397"periodo", "permesso", "perno", "perplesso", "persuaso", "pertugio", "pervaso", "pesatore", "pesista", "peso",
39398"pestifero", "petalo", "pettine", "petulante", "pezzo", "piacere", "pianta", "piattino", "piccino", "picozza",
39399"piega", "pietra", "piffero", "pigiama", "pigolio", "pigro", "pila", "pilifero", "pillola", "pilota",
39400"pimpante", "pineta", "pinna", "pinolo", "pioggia", "piombo", "piramide", "piretico", "pirite", "pirolisi",
39401"pitone", "pizzico", "placebo", "planare", "plasma", "platano", "plenario", "pochezza", "poderoso", "podismo",
39402"poesia", "poggiare", "polenta", "poligono", "pollice", "polmonite", "polpetta", "polso", "poltrona", "polvere",
39403"pomice", "pomodoro", "ponte", "popoloso", "porfido", "poroso", "porpora", "porre", "portata", "posa",
39404"positivo", "possesso", "postulato", "potassio", "potere", "pranzo", "prassi", "pratica", "precluso", "predica",
39405"prefisso", "pregiato", "prelievo", "premere", "prenotare", "preparato", "presenza", "pretesto", "prevalso", "prima",
39406"principe", "privato", "problema", "procura", "produrre", "profumo", "progetto", "prolunga", "promessa", "pronome",
39407"proposta", "proroga", "proteso", "prova", "prudente", "prugna", "prurito", "psiche", "pubblico", "pudica",
39408"pugilato", "pugno", "pulce", "pulito", "pulsante", "puntare", "pupazzo", "pupilla", "puro", "quadro",
39409"qualcosa", "quasi", "querela", "quota", "raccolto", "raddoppio", "radicale", "radunato", "raffica", "ragazzo",
39410"ragione", "ragno", "ramarro", "ramingo", "ramo", "randagio", "rantolare", "rapato", "rapina", "rappreso",
39411"rasatura", "raschiato", "rasente", "rassegna", "rastrello", "rata", "ravveduto", "reale", "recepire", "recinto",
39412"recluta", "recondito", "recupero", "reddito", "redimere", "regalato", "registro", "regola", "regresso", "relazione",
39413"remare", "remoto", "renna", "replica", "reprimere", "reputare", "resa", "residente", "responso", "restauro",
39414"rete", "retina", "retorica", "rettifica", "revocato", "riassunto", "ribadire", "ribelle", "ribrezzo", "ricarica",
39415"ricco", "ricevere", "riciclato", "ricordo", "ricreduto", "ridicolo", "ridurre", "rifasare", "riflesso", "riforma",
39416"rifugio", "rigare", "rigettato", "righello", "rilassato", "rilevato", "rimanere", "rimbalzo", "rimedio", "rimorchio",
39417"rinascita", "rincaro", "rinforzo", "rinnovo", "rinomato", "rinsavito", "rintocco", "rinuncia", "rinvenire", "riparato",
39418"ripetuto", "ripieno", "riportare", "ripresa", "ripulire", "risata", "rischio", "riserva", "risibile", "riso",
39419"rispetto", "ristoro", "risultato", "risvolto", "ritardo", "ritegno", "ritmico", "ritrovo", "riunione", "riva",
39420"riverso", "rivincita", "rivolto", "rizoma", "roba", "robotico", "robusto", "roccia", "roco", "rodaggio",
39421"rodere", "roditore", "rogito", "rollio", "romantico", "rompere", "ronzio", "rosolare", "rospo", "rotante",
39422"rotondo", "rotula", "rovescio", "rubizzo", "rubrica", "ruga", "rullino", "rumine", "rumoroso", "ruolo",
39423"rupe", "russare", "rustico", "sabato", "sabbiare", "sabotato", "sagoma", "salasso", "saldatura", "salgemma",
39424"salivare", "salmone", "salone", "saltare", "saluto", "salvo", "sapere", "sapido", "saporito", "saraceno",
39425"sarcasmo", "sarto", "sassoso", "satellite", "satira", "satollo", "saturno", "savana", "savio", "saziato",
39426"sbadiglio", "sbalzo", "sbancato", "sbarra", "sbattere", "sbavare", "sbendare", "sbirciare", "sbloccato", "sbocciato",
39427"sbrinare", "sbruffone", "sbuffare", "scabroso", "scadenza", "scala", "scambiare", "scandalo", "scapola", "scarso",
39428"scatenare", "scavato", "scelto", "scenico", "scettro", "scheda", "schiena", "sciarpa", "scienza", "scindere",
39429"scippo", "sciroppo", "scivolo", "sclerare", "scodella", "scolpito", "scomparto", "sconforto", "scoprire", "scorta",
39430"scossone", "scozzese", "scriba", "scrollare", "scrutinio", "scuderia", "scultore", "scuola", "scuro", "scusare",
39431"sdebitare", "sdoganare", "seccatura", "secondo", "sedano", "seggiola", "segnalato", "segregato", "seguito", "selciato",
39432"selettivo", "sella", "selvaggio", "semaforo", "sembrare", "seme", "seminato", "sempre", "senso", "sentire",
39433"sepolto", "sequenza", "serata", "serbato", "sereno", "serio", "serpente", "serraglio", "servire", "sestina",
39434"setola", "settimana", "sfacelo", "sfaldare", "sfamato", "sfarzoso", "sfaticato", "sfera", "sfida", "sfilato",
39435"sfinge", "sfocato", "sfoderare", "sfogo", "sfoltire", "sforzato", "sfratto", "sfruttato", "sfuggito", "sfumare",
39436"sfuso", "sgabello", "sgarbato", "sgonfiare", "sgorbio", "sgrassato", "sguardo", "sibilo", "siccome", "sierra",
39437"sigla", "signore", "silenzio", "sillaba", "simbolo", "simpatico", "simulato", "sinfonia", "singolo", "sinistro",
39438"sino", "sintesi", "sinusoide", "sipario", "sisma", "sistole", "situato", "slitta", "slogatura", "sloveno",
39439"smarrito", "smemorato", "smentito", "smeraldo", "smilzo", "smontare", "smottato", "smussato", "snellire", "snervato",
39440"snodo", "sobbalzo", "sobrio", "soccorso", "sociale", "sodale", "soffitto", "sogno", "soldato", "solenne",
39441"solido", "sollazzo", "solo", "solubile", "solvente", "somatico", "somma", "sonda", "sonetto", "sonnifero",
39442"sopire", "soppeso", "sopra", "sorgere", "sorpasso", "sorriso", "sorso", "sorteggio", "sorvolato", "sospiro",
39443"sosta", "sottile", "spada", "spalla", "spargere", "spatola", "spavento", "spazzola", "specie", "spedire",
39444"spegnere", "spelatura", "speranza", "spessore", "spettrale", "spezzato", "spia", "spigoloso", "spillato", "spinoso",
39445"spirale", "splendido", "sportivo", "sposo", "spranga", "sprecare", "spronato", "spruzzo", "spuntino", "squillo",
39446"sradicare", "srotolato", "stabile", "stacco", "staffa", "stagnare", "stampato", "stantio", "starnuto", "stasera",
39447"statuto", "stelo", "steppa", "sterzo", "stiletto", "stima", "stirpe", "stivale", "stizzoso", "stonato",
39448"storico", "strappo", "stregato", "stridulo", "strozzare", "strutto", "stuccare", "stufo", "stupendo", "subentro",
39449"succoso", "sudore", "suggerito", "sugo", "sultano", "suonare", "superbo", "supporto", "surgelato", "surrogato",
39450"sussurro", "sutura", "svagare", "svedese", "sveglio", "svelare", "svenuto", "svezia", "sviluppo", "svista",
39451"svizzera", "svolta", "svuotare", "tabacco", "tabulato", "tacciare", "taciturno", "tale", "talismano", "tampone",
39452"tannino", "tara", "tardivo", "targato", "tariffa", "tarpare", "tartaruga", "tasto", "tattico", "taverna",
39453"tavolata", "tazza", "teca", "tecnico", "telefono", "temerario", "tempo", "temuto", "tendone", "tenero",
39454"tensione", "tentacolo", "teorema", "terme", "terrazzo", "terzetto", "tesi", "tesserato", "testato", "tetro",
39455"tettoia", "tifare", "tigella", "timbro", "tinto", "tipico", "tipografo", "tiraggio", "tiro", "titanio",
39456"titolo", "titubante", "tizio", "tizzone", "toccare", "tollerare", "tolto", "tombola", "tomo", "tonfo",
39457"tonsilla", "topazio", "topologia", "toppa", "torba", "tornare", "torrone", "tortora", "toscano", "tossire",
39458"tostatura", "totano", "trabocco", "trachea", "trafila", "tragedia", "tralcio", "tramonto", "transito", "trapano",
39459"trarre", "trasloco", "trattato", "trave", "treccia", "tremolio", "trespolo", "tributo", "tricheco", "trifoglio",
39460"trillo", "trincea", "trio", "tristezza", "triturato", "trivella", "tromba", "trono", "troppo", "trottola",
39461"trovare", "truccato", "tubatura", "tuffato", "tulipano", "tumulto", "tunisia", "turbare", "turchino", "tuta",
39462"tutela", "ubicato", "uccello", "uccisore", "udire", "uditivo", "uffa", "ufficio", "uguale", "ulisse",
39463"ultimato", "umano", "umile", "umorismo", "uncinetto", "ungere", "ungherese", "unicorno", "unificato", "unisono",
39464"unitario", "unte", "uovo", "upupa", "uragano", "urgenza", "urlo", "usanza", "usato", "uscito",
39465"usignolo", "usuraio", "utensile", "utilizzo", "utopia", "vacante", "vaccinato", "vagabondo", "vagliato", "valanga",
39466"valgo", "valico", "valletta", "valoroso", "valutare", "valvola", "vampata", "vangare", "vanitoso", "vano",
39467"vantaggio", "vanvera", "vapore", "varano", "varcato", "variante", "vasca", "vedetta", "vedova", "veduto",
39468"vegetale", "veicolo", "velcro", "velina", "velluto", "veloce", "venato", "vendemmia", "vento", "verace",
39469"verbale", "vergogna", "verifica", "vero", "verruca", "verticale", "vescica", "vessillo", "vestale", "veterano",
39470"vetrina", "vetusto", "viandante", "vibrante", "vicenda", "vichingo", "vicinanza", "vidimare", "vigilia", "vigneto",
39471"vigore", "vile", "villano", "vimini", "vincitore", "viola", "vipera", "virgola", "virologo", "virulento",
39472"viscoso", "visione", "vispo", "vissuto", "visura", "vita", "vitello", "vittima", "vivanda", "vivido",
39473"viziare", "voce", "voga", "volatile", "volere", "volpe", "voragine", "vulcano", "zampogna", "zanna",
39474"zappato", "zattera", "zavorra", "zefiro", "zelante", "zelo", "zenzero", "zerbino", "zibetto", "zinco",
39475"zircone", "zitto", "zolla", "zotico", "zucchero", "zufolo", "zulu", "zuppa"]
dc55c6b0 39476</script>
ab78acc6 39477 <script>/*
3af2954a
IC
39478 * Copyright (c) 2013 Pavol Rusnak
39479 *
39480 * Permission is hereby granted, free of charge, to any person obtaining a copy of
39481 * this software and associated documentation files (the "Software"), to deal in
39482 * the Software without restriction, including without limitation the rights to
39483 * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
39484 * of the Software, and to permit persons to whom the Software is furnished to do
39485 * so, subject to the following conditions:
39486 *
39487 * The above copyright notice and this permission notice shall be included in all
39488 * copies or substantial portions of the Software.
39489 *
39490 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
39491 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
39492 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
39493 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
39494 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
39495 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
39496 */
39497
39498/*
39499 * Javascript port from python by Ian Coleman
39500 *
80c4dd2a
IC
39501 * Requires code from sjcl
39502 * https://github.com/bitwiseshiftleft/sjcl
3af2954a
IC
39503 */
39504
39505var Mnemonic = function(language) {
39506
39507 var PBKDF2_ROUNDS = 2048;
39508 var RADIX = 2048;
39509
39510 var self = this;
39511 var wordlist = [];
39512
80c4dd2a
IC
39513 var hmacSHA512 = function(key) {
39514 var hasher = new sjcl.misc.hmac(key, sjcl.hash.sha512);
39515 this.encrypt = function() {
39516 return hasher.encrypt.apply(hasher, arguments);
39517 };
39518 };
39519
3af2954a
IC
39520 function init() {
39521 wordlist = WORDLISTS[language];
39522 if (wordlist.length != RADIX) {
39523 err = 'Wordlist should contain ' + RADIX + ' words, but it contains ' + wordlist.length + ' words.';
39524 throw err;
39525 }
39526 }
39527
39528 self.generate = function(strength) {
39529 strength = strength || 128;
39530 var r = strength % 32;
39531 if (r > 0) {
39532 throw 'Strength should be divisible by 32, but it is not (' + r + ').';
39533 }
39534 var hasStrongCrypto = 'crypto' in window && window['crypto'] !== null;
39535 if (!hasStrongCrypto) {
39536 throw 'Mnemonic should be generated with strong randomness, but crypto.getRandomValues is unavailable';
39537 }
39538 var buffer = new Uint8Array(strength / 8);
39539 var data = crypto.getRandomValues(buffer);
39540 return self.toMnemonic(data);
39541 }
39542
80c4dd2a
IC
39543 self.toMnemonic = function(byteArray) {
39544 if (byteArray.length % 4 > 0) {
39545 throw 'Data length in bits should be divisible by 32, but it is not (' + byteArray.length + ' bytes = ' + byteArray.length*8 + ' bits).'
3af2954a
IC
39546 }
39547
39548 //h = hashlib.sha256(data).hexdigest()
80c4dd2a
IC
39549 var data = byteArrayToWordArray(byteArray);
39550 var hash = sjcl.hash.sha256.hash(data);
39551 var h = sjcl.codec.hex.fromBits(hash);
3af2954a
IC
39552
39553 // b is a binary string, eg '00111010101100...'
39554 //b = bin(int(binascii.hexlify(data), 16))[2:].zfill(len(data) * 8) + \
39555 // bin(int(h, 16))[2:].zfill(256)[:len(data) * 8 / 32]
39556 //
39557 // a = bin(int(binascii.hexlify(data), 16))[2:].zfill(len(data) * 8)
39558 // c = bin(int(h, 16))[2:].zfill(256)
39559 // d = c[:len(data) * 8 / 32]
80c4dd2a
IC
39560 var a = byteArrayToBinaryString(byteArray);
39561 var c = zfill(hexStringToBinaryString(h), 256);
39562 var d = c.substring(0, byteArray.length * 8 / 32);
3af2954a
IC
39563 // b = line1 + line2
39564 var b = a + d;
39565
39566 var result = [];
39567 var blen = b.length / 11;
39568 for (var i=0; i<blen; i++) {
39569 var idx = parseInt(b.substring(i * 11, (i + 1) * 11), 2);
39570 result.push(wordlist[idx]);
39571 }
0515eeec 39572 return self.joinWords(result);
3af2954a
IC
39573 }
39574
39575 self.check = function(mnemonic) {
0515eeec 39576 var mnemonic = self.splitWords(mnemonic);
18abe53b 39577 if (mnemonic.length == 0 || mnemonic.length % 3 > 0) {
3af2954a
IC
39578 return false
39579 }
39580 // idx = map(lambda x: bin(self.wordlist.index(x))[2:].zfill(11), mnemonic)
39581 var idx = [];
39582 for (var i=0; i<mnemonic.length; i++) {
39583 var word = mnemonic[i];
39584 var wordIndex = wordlist.indexOf(word);
39585 if (wordIndex == -1) {
39586 return false;
39587 }
39588 var binaryIndex = zfill(wordIndex.toString(2), 11);
39589 idx.push(binaryIndex);
39590 }
39591 var b = idx.join('');
39592 var l = b.length;
39593 //d = b[:l / 33 * 32]
39594 //h = b[-l / 33:]
39595 var d = b.substring(0, l / 33 * 32);
39596 var h = b.substring(l - l / 33, l);
39597 //nd = binascii.unhexlify(hex(int(d, 2))[2:].rstrip('L').zfill(l / 33 * 8))
80c4dd2a 39598 var nd = binaryStringToWordArray(d);
3af2954a 39599 //nh = bin(int(hashlib.sha256(nd).hexdigest(), 16))[2:].zfill(256)[:l / 33]
80c4dd2a
IC
39600 var ndHash = sjcl.hash.sha256.hash(nd);
39601 var ndHex = sjcl.codec.hex.fromBits(ndHash);
39602 var ndBstr = zfill(hexStringToBinaryString(ndHex), 256);
3af2954a
IC
39603 var nh = ndBstr.substring(0,l/33);
39604 return h == nh;
39605 }
39606
39607 self.toSeed = function(mnemonic, passphrase) {
39608 passphrase = passphrase || '';
599fb39e
IC
39609 mnemonic = self.joinWords(self.splitWords(mnemonic)); // removes duplicate blanks
39610 var mnemonicNormalized = self.normalizeString(mnemonic);
3af2954a
IC
39611 passphrase = self.normalizeString(passphrase)
39612 passphrase = "mnemonic" + passphrase;
599fb39e 39613 var mnemonicBits = sjcl.codec.utf8String.toBits(mnemonicNormalized);
80c4dd2a
IC
39614 var passphraseBits = sjcl.codec.utf8String.toBits(passphrase);
39615 var result = sjcl.misc.pbkdf2(mnemonicBits, passphraseBits, PBKDF2_ROUNDS, 512, hmacSHA512);
39616 var hashHex = sjcl.codec.hex.fromBits(result);
39617 return hashHex;
3af2954a
IC
39618 }
39619
0515eeec
IC
39620 self.splitWords = function(mnemonic) {
39621 return mnemonic.split(/\s/g).filter(function(x) { return x.length; });
39622 }
39623
39624 self.joinWords = function(words) {
39625 // Set space correctly depending on the language
39626 // see https://github.com/bitcoin/bips/blob/master/bip-0039/bip-0039-wordlists.md#japanese
39627 var space = " ";
39628 if (language == "japanese") {
39629 space = "\u3000"; // ideographic space
39630 }
39631 return words.join(space);
39632 }
39633
3af2954a
IC
39634 self.normalizeString = function(str) {
39635 if (typeof str.normalize == "function") {
39636 return str.normalize("NFKD");
39637 }
39638 else {
39639 // TODO decide how to handle this in the future.
39640 // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize
39641 return str;
39642 }
39643 }
39644
80c4dd2a
IC
39645 function byteArrayToWordArray(data) {
39646 var a = [];
39647 for (var i=0; i<data.length/4; i++) {
39648 v = 0;
39649 v += data[i*4 + 0] << 8 * 3;
39650 v += data[i*4 + 1] << 8 * 2;
39651 v += data[i*4 + 2] << 8 * 1;
39652 v += data[i*4 + 3] << 8 * 0;
39653 a.push(v);
39654 }
39655 return a;
39656 }
39657
3af2954a
IC
39658 function byteArrayToBinaryString(data) {
39659 var bin = "";
39660 for (var i=0; i<data.length; i++) {
39661 bin += zfill(data[i].toString(2), 8);
39662 }
39663 return bin;
39664 }
39665
80c4dd2a
IC
39666 function hexStringToBinaryString(hexString) {
39667 binaryString = "";
39668 for (var i=0; i<hexString.length; i++) {
39669 binaryString += zfill(parseInt(hexString[i], 16).toString(2),4);
39670 }
39671 return binaryString;
39672 }
39673
39674 function binaryStringToWordArray(binary) {
39675 var aLen = binary.length / 32;
39676 var a = [];
39677 for (var i=0; i<aLen; i++) {
39678 var valueStr = binary.substring(0,32);
3af2954a 39679 var value = parseInt(valueStr, 2);
80c4dd2a
IC
39680 a.push(value);
39681 binary = binary.slice(32);
3af2954a 39682 }
80c4dd2a 39683 return a;
3af2954a
IC
39684 }
39685
39686 // Pad a numeric string on the left with zero digits until the given width
39687 // is reached.
39688 // Note this differs to the python implementation because it does not
39689 // handle numbers starting with a sign.
39690 function zfill(source, length) {
39691 source = source.toString();
39692 while (source.length < length) {
39693 source = '0' + source;
39694 }
39695 return source;
39696 }
39697
39698 init();
ebd8d4e8 39699
3af2954a 39700}
dc55c6b0 39701</script>
95f04905
IC
39702 <script>/*
39703 JavaScript BigInteger library version 0.9.1
39704 http://silentmatt.com/biginteger/
18abe53b 39705
95f04905
IC
39706 Copyright (c) 2009 Matthew Crumley <email@matthewcrumley.com>
39707 Copyright (c) 2010,2011 by John Tobey <John.Tobey@gmail.com>
39708 Licensed under the MIT license.
c6624d51 39709
95f04905
IC
39710 Support for arbitrary internal representation base was added by
39711 Vitaly Magerya.
39712*/
18abe53b 39713
95f04905
IC
39714/*
39715 File: biginteger.js
18abe53b 39716
95f04905 39717 Exports:
18abe53b 39718
95f04905
IC
39719 <BigInteger>
39720*/
39721(function(exports) {
39722"use strict";
39723/*
39724 Class: BigInteger
39725 An arbitrarily-large integer.
18abe53b 39726
95f04905
IC
39727 <BigInteger> objects should be considered immutable. None of the "built-in"
39728 methods modify *this* or their arguments. All properties should be
39729 considered private.
18abe53b 39730
95f04905
IC
39731 All the methods of <BigInteger> instances can be called "statically". The
39732 static versions are convenient if you don't already have a <BigInteger>
39733 object.
18abe53b 39734
95f04905 39735 As an example, these calls are equivalent.
18abe53b 39736
95f04905
IC
39737 > BigInteger(4).multiply(5); // returns BigInteger(20);
39738 > BigInteger.multiply(4, 5); // returns BigInteger(20);
18abe53b 39739
95f04905
IC
39740 > var a = 42;
39741 > var a = BigInteger.toJSValue("0b101010"); // Not completely useless...
39742*/
c6624d51 39743
95f04905 39744var CONSTRUCT = {}; // Unique token to call "private" version of constructor
c6624d51
IC
39745
39746/*
39747 Constructor: BigInteger()
39748 Convert a value to a <BigInteger>.
39749
39750 Although <BigInteger()> is the constructor for <BigInteger> objects, it is
39751 best not to call it as a constructor. If *n* is a <BigInteger> object, it is
39752 simply returned as-is. Otherwise, <BigInteger()> is equivalent to <parse>
39753 without a radix argument.
39754
39755 > var n0 = BigInteger(); // Same as <BigInteger.ZERO>
39756 > var n1 = BigInteger("123"); // Create a new <BigInteger> with value 123
39757 > var n2 = BigInteger(123); // Create a new <BigInteger> with value 123
39758 > var n3 = BigInteger(n2); // Return n2, unchanged
39759
39760 The constructor form only takes an array and a sign. *n* must be an
39761 array of numbers in little-endian order, where each digit is between 0
39762 and BigInteger.base. The second parameter sets the sign: -1 for
39763 negative, +1 for positive, or 0 for zero. The array is *not copied and
39764 may be modified*. If the array contains only zeros, the sign parameter
39765 is ignored and is forced to zero.
39766
39767 > new BigInteger([5], -1): create a new BigInteger with value -5
39768
39769 Parameters:
39770
39771 n - Value to convert to a <BigInteger>.
39772
39773 Returns:
39774
39775 A <BigInteger> value.
39776
39777 See Also:
39778
39779 <parse>, <BigInteger>
39780*/
39781function BigInteger(n, s, token) {
39782 if (token !== CONSTRUCT) {
39783 if (n instanceof BigInteger) {
39784 return n;
39785 }
39786 else if (typeof n === "undefined") {
39787 return ZERO;
39788 }
39789 return BigInteger.parse(n);
39790 }
39791
39792 n = n || []; // Provide the nullary constructor for subclasses.
39793 while (n.length && !n[n.length - 1]) {
39794 --n.length;
39795 }
39796 this._d = n;
39797 this._s = n.length ? (s || 1) : 0;
39798}
39799
39800BigInteger._construct = function(n, s) {
39801 return new BigInteger(n, s, CONSTRUCT);
39802};
39803
39804// Base-10 speedup hacks in parse, toString, exp10 and log functions
39805// require base to be a power of 10. 10^7 is the largest such power
39806// that won't cause a precision loss when digits are multiplied.
39807var BigInteger_base = 10000000;
39808var BigInteger_base_log10 = 7;
39809
39810BigInteger.base = BigInteger_base;
39811BigInteger.base_log10 = BigInteger_base_log10;
39812
39813var ZERO = new BigInteger([], 0, CONSTRUCT);
39814// Constant: ZERO
39815// <BigInteger> 0.
39816BigInteger.ZERO = ZERO;
39817
39818var ONE = new BigInteger([1], 1, CONSTRUCT);
39819// Constant: ONE
39820// <BigInteger> 1.
39821BigInteger.ONE = ONE;
39822
39823var M_ONE = new BigInteger(ONE._d, -1, CONSTRUCT);
39824// Constant: M_ONE
39825// <BigInteger> -1.
39826BigInteger.M_ONE = M_ONE;
39827
39828// Constant: _0
39829// Shortcut for <ZERO>.
39830BigInteger._0 = ZERO;
39831
39832// Constant: _1
39833// Shortcut for <ONE>.
39834BigInteger._1 = ONE;
39835
39836/*
39837 Constant: small
39838 Array of <BigIntegers> from 0 to 36.
39839
39840 These are used internally for parsing, but useful when you need a "small"
39841 <BigInteger>.
39842
39843 See Also:
39844
39845 <ZERO>, <ONE>, <_0>, <_1>
39846*/
39847BigInteger.small = [
39848 ZERO,
39849 ONE,
39850 /* Assuming BigInteger_base > 36 */
39851 new BigInteger( [2], 1, CONSTRUCT),
39852 new BigInteger( [3], 1, CONSTRUCT),
39853 new BigInteger( [4], 1, CONSTRUCT),
39854 new BigInteger( [5], 1, CONSTRUCT),
39855 new BigInteger( [6], 1, CONSTRUCT),
39856 new BigInteger( [7], 1, CONSTRUCT),
39857 new BigInteger( [8], 1, CONSTRUCT),
39858 new BigInteger( [9], 1, CONSTRUCT),
39859 new BigInteger([10], 1, CONSTRUCT),
39860 new BigInteger([11], 1, CONSTRUCT),
39861 new BigInteger([12], 1, CONSTRUCT),
39862 new BigInteger([13], 1, CONSTRUCT),
39863 new BigInteger([14], 1, CONSTRUCT),
39864 new BigInteger([15], 1, CONSTRUCT),
39865 new BigInteger([16], 1, CONSTRUCT),
39866 new BigInteger([17], 1, CONSTRUCT),
39867 new BigInteger([18], 1, CONSTRUCT),
39868 new BigInteger([19], 1, CONSTRUCT),
39869 new BigInteger([20], 1, CONSTRUCT),
39870 new BigInteger([21], 1, CONSTRUCT),
39871 new BigInteger([22], 1, CONSTRUCT),
39872 new BigInteger([23], 1, CONSTRUCT),
39873 new BigInteger([24], 1, CONSTRUCT),
39874 new BigInteger([25], 1, CONSTRUCT),
39875 new BigInteger([26], 1, CONSTRUCT),
39876 new BigInteger([27], 1, CONSTRUCT),
39877 new BigInteger([28], 1, CONSTRUCT),
39878 new BigInteger([29], 1, CONSTRUCT),
39879 new BigInteger([30], 1, CONSTRUCT),
39880 new BigInteger([31], 1, CONSTRUCT),
39881 new BigInteger([32], 1, CONSTRUCT),
39882 new BigInteger([33], 1, CONSTRUCT),
39883 new BigInteger([34], 1, CONSTRUCT),
39884 new BigInteger([35], 1, CONSTRUCT),
39885 new BigInteger([36], 1, CONSTRUCT)
39886];
39887
39888// Used for parsing/radix conversion
39889BigInteger.digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ".split("");
39890
39891/*
39892 Method: toString
39893 Convert a <BigInteger> to a string.
39894
39895 When *base* is greater than 10, letters are upper case.
39896
39897 Parameters:
39898
39899 base - Optional base to represent the number in (default is base 10).
39900 Must be between 2 and 36 inclusive, or an Error will be thrown.
39901
39902 Returns:
39903
39904 The string representation of the <BigInteger>.
39905*/
39906BigInteger.prototype.toString = function(base) {
39907 base = +base || 10;
39908 if (base < 2 || base > 36) {
39909 throw new Error("illegal radix " + base + ".");
39910 }
39911 if (this._s === 0) {
39912 return "0";
39913 }
39914 if (base === 10) {
39915 var str = this._s < 0 ? "-" : "";
39916 str += this._d[this._d.length - 1].toString();
39917 for (var i = this._d.length - 2; i >= 0; i--) {
39918 var group = this._d[i].toString();
39919 while (group.length < BigInteger_base_log10) group = '0' + group;
39920 str += group;
39921 }
39922 return str;
39923 }
39924 else {
39925 var numerals = BigInteger.digits;
39926 base = BigInteger.small[base];
39927 var sign = this._s;
39928
39929 var n = this.abs();
39930 var digits = [];
39931 var digit;
39932
39933 while (n._s !== 0) {
39934 var divmod = n.divRem(base);
39935 n = divmod[0];
39936 digit = divmod[1];
39937 // TODO: This could be changed to unshift instead of reversing at the end.
39938 // Benchmark both to compare speeds.
39939 digits.push(numerals[digit.valueOf()]);
39940 }
39941 return (sign < 0 ? "-" : "") + digits.reverse().join("");
39942 }
39943};
39944
39945// Verify strings for parsing
39946BigInteger.radixRegex = [
39947 /^$/,
39948 /^$/,
39949 /^[01]*$/,
39950 /^[012]*$/,
39951 /^[0-3]*$/,
39952 /^[0-4]*$/,
39953 /^[0-5]*$/,
39954 /^[0-6]*$/,
39955 /^[0-7]*$/,
39956 /^[0-8]*$/,
39957 /^[0-9]*$/,
39958 /^[0-9aA]*$/,
39959 /^[0-9abAB]*$/,
39960 /^[0-9abcABC]*$/,
39961 /^[0-9a-dA-D]*$/,
39962 /^[0-9a-eA-E]*$/,
39963 /^[0-9a-fA-F]*$/,
39964 /^[0-9a-gA-G]*$/,
39965 /^[0-9a-hA-H]*$/,
39966 /^[0-9a-iA-I]*$/,
39967 /^[0-9a-jA-J]*$/,
39968 /^[0-9a-kA-K]*$/,
39969 /^[0-9a-lA-L]*$/,
39970 /^[0-9a-mA-M]*$/,
39971 /^[0-9a-nA-N]*$/,
39972 /^[0-9a-oA-O]*$/,
39973 /^[0-9a-pA-P]*$/,
39974 /^[0-9a-qA-Q]*$/,
39975 /^[0-9a-rA-R]*$/,
39976 /^[0-9a-sA-S]*$/,
39977 /^[0-9a-tA-T]*$/,
39978 /^[0-9a-uA-U]*$/,
39979 /^[0-9a-vA-V]*$/,
39980 /^[0-9a-wA-W]*$/,
39981 /^[0-9a-xA-X]*$/,
39982 /^[0-9a-yA-Y]*$/,
39983 /^[0-9a-zA-Z]*$/
39984];
39985
39986/*
39987 Function: parse
39988 Parse a string into a <BigInteger>.
39989
39990 *base* is optional but, if provided, must be from 2 to 36 inclusive. If
39991 *base* is not provided, it will be guessed based on the leading characters
39992 of *s* as follows:
39993
39994 - "0x" or "0X": *base* = 16
39995 - "0c" or "0C": *base* = 8
39996 - "0b" or "0B": *base* = 2
39997 - else: *base* = 10
39998
39999 If no base is provided, or *base* is 10, the number can be in exponential
40000 form. For example, these are all valid:
40001
40002 > BigInteger.parse("1e9"); // Same as "1000000000"
40003 > BigInteger.parse("1.234*10^3"); // Same as 1234
40004 > BigInteger.parse("56789 * 10 ** -2"); // Same as 567
40005
40006 If any characters fall outside the range defined by the radix, an exception
40007 will be thrown.
40008
40009 Parameters:
40010
40011 s - The string to parse.
40012 base - Optional radix (default is to guess based on *s*).
40013
40014 Returns:
40015
40016 a <BigInteger> instance.
40017*/
40018BigInteger.parse = function(s, base) {
40019 // Expands a number in exponential form to decimal form.
40020 // expandExponential("-13.441*10^5") === "1344100";
40021 // expandExponential("1.12300e-1") === "0.112300";
40022 // expandExponential(1000000000000000000000000000000) === "1000000000000000000000000000000";
40023 function expandExponential(str) {
40024 str = str.replace(/\s*[*xX]\s*10\s*(\^|\*\*)\s*/, "e");
40025
40026 return str.replace(/^([+\-])?(\d+)\.?(\d*)[eE]([+\-]?\d+)$/, function(x, s, n, f, c) {
40027 c = +c;
40028 var l = c < 0;
40029 var i = n.length + c;
40030 x = (l ? n : f).length;
40031 c = ((c = Math.abs(c)) >= x ? c - x + l : 0);
40032 var z = (new Array(c + 1)).join("0");
40033 var r = n + f;
40034 return (s || "") + (l ? r = z + r : r += z).substr(0, i += l ? z.length : 0) + (i < r.length ? "." + r.substr(i) : "");
40035 });
40036 }
40037
40038 s = s.toString();
40039 if (typeof base === "undefined" || +base === 10) {
40040 s = expandExponential(s);
40041 }
40042
40043 var prefixRE;
40044 if (typeof base === "undefined") {
40045 prefixRE = '0[xcb]';
40046 }
40047 else if (base == 16) {
40048 prefixRE = '0x';
40049 }
40050 else if (base == 8) {
40051 prefixRE = '0c';
40052 }
40053 else if (base == 2) {
40054 prefixRE = '0b';
40055 }
40056 else {
40057 prefixRE = '';
40058 }
40059 var parts = new RegExp('^([+\\-]?)(' + prefixRE + ')?([0-9a-z]*)(?:\\.\\d*)?$', 'i').exec(s);
40060 if (parts) {
40061 var sign = parts[1] || "+";
40062 var baseSection = parts[2] || "";
40063 var digits = parts[3] || "";
40064
40065 if (typeof base === "undefined") {
40066 // Guess base
40067 if (baseSection === "0x" || baseSection === "0X") { // Hex
40068 base = 16;
40069 }
40070 else if (baseSection === "0c" || baseSection === "0C") { // Octal
40071 base = 8;
40072 }
40073 else if (baseSection === "0b" || baseSection === "0B") { // Binary
40074 base = 2;
40075 }
40076 else {
40077 base = 10;
40078 }
40079 }
40080 else if (base < 2 || base > 36) {
40081 throw new Error("Illegal radix " + base + ".");
40082 }
40083
40084 base = +base;
40085
40086 // Check for digits outside the range
40087 if (!(BigInteger.radixRegex[base].test(digits))) {
40088 throw new Error("Bad digit for radix " + base);
40089 }
40090
40091 // Strip leading zeros, and convert to array
40092 digits = digits.replace(/^0+/, "").split("");
40093 if (digits.length === 0) {
40094 return ZERO;
40095 }
40096
40097 // Get the sign (we know it's not zero)
40098 sign = (sign === "-") ? -1 : 1;
40099
40100 // Optimize 10
40101 if (base == 10) {
40102 var d = [];
40103 while (digits.length >= BigInteger_base_log10) {
40104 d.push(parseInt(digits.splice(digits.length-BigInteger.base_log10, BigInteger.base_log10).join(''), 10));
40105 }
40106 d.push(parseInt(digits.join(''), 10));
40107 return new BigInteger(d, sign, CONSTRUCT);
40108 }
40109
40110 // Do the conversion
40111 var d = ZERO;
40112 base = BigInteger.small[base];
40113 var small = BigInteger.small;
40114 for (var i = 0; i < digits.length; i++) {
40115 d = d.multiply(base).add(small[parseInt(digits[i], 36)]);
40116 }
40117 return new BigInteger(d._d, sign, CONSTRUCT);
40118 }
40119 else {
40120 throw new Error("Invalid BigInteger format: " + s);
40121 }
40122};
40123
40124/*
40125 Function: add
40126 Add two <BigIntegers>.
40127
40128 Parameters:
40129
40130 n - The number to add to *this*. Will be converted to a <BigInteger>.
40131
40132 Returns:
40133
40134 The numbers added together.
40135
40136 See Also:
40137
40138 <subtract>, <multiply>, <quotient>, <next>
40139*/
40140BigInteger.prototype.add = function(n) {
40141 if (this._s === 0) {
40142 return BigInteger(n);
40143 }
40144
40145 n = BigInteger(n);
40146 if (n._s === 0) {
40147 return this;
40148 }
40149 if (this._s !== n._s) {
40150 n = n.negate();
40151 return this.subtract(n);
40152 }
40153
40154 var a = this._d;
40155 var b = n._d;
40156 var al = a.length;
40157 var bl = b.length;
40158 var sum = new Array(Math.max(al, bl) + 1);
40159 var size = Math.min(al, bl);
40160 var carry = 0;
40161 var digit;
40162
40163 for (var i = 0; i < size; i++) {
40164 digit = a[i] + b[i] + carry;
40165 sum[i] = digit % BigInteger_base;
40166 carry = (digit / BigInteger_base) | 0;
40167 }
40168 if (bl > al) {
40169 a = b;
40170 al = bl;
40171 }
40172 for (i = size; carry && i < al; i++) {
40173 digit = a[i] + carry;
40174 sum[i] = digit % BigInteger_base;
40175 carry = (digit / BigInteger_base) | 0;
40176 }
40177 if (carry) {
40178 sum[i] = carry;
40179 }
40180
40181 for ( ; i < al; i++) {
40182 sum[i] = a[i];
40183 }
40184
40185 return new BigInteger(sum, this._s, CONSTRUCT);
40186};
40187
40188/*
40189 Function: negate
40190 Get the additive inverse of a <BigInteger>.
40191
40192 Returns:
40193
40194 A <BigInteger> with the same magnatude, but with the opposite sign.
40195
40196 See Also:
40197
40198 <abs>
40199*/
40200BigInteger.prototype.negate = function() {
40201 return new BigInteger(this._d, (-this._s) | 0, CONSTRUCT);
40202};
40203
40204/*
40205 Function: abs
40206 Get the absolute value of a <BigInteger>.
40207
40208 Returns:
40209
40210 A <BigInteger> with the same magnatude, but always positive (or zero).
40211
40212 See Also:
40213
40214 <negate>
40215*/
40216BigInteger.prototype.abs = function() {
40217 return (this._s < 0) ? this.negate() : this;
40218};
40219
40220/*
40221 Function: subtract
40222 Subtract two <BigIntegers>.
40223
40224 Parameters:
40225
40226 n - The number to subtract from *this*. Will be converted to a <BigInteger>.
40227
40228 Returns:
40229
40230 The *n* subtracted from *this*.
40231
40232 See Also:
40233
40234 <add>, <multiply>, <quotient>, <prev>
40235*/
40236BigInteger.prototype.subtract = function(n) {
40237 if (this._s === 0) {
40238 return BigInteger(n).negate();
40239 }
40240
40241 n = BigInteger(n);
40242 if (n._s === 0) {
40243 return this;
40244 }
40245 if (this._s !== n._s) {
40246 n = n.negate();
40247 return this.add(n);
40248 }
40249
40250 var m = this;
40251 // negative - negative => -|a| - -|b| => -|a| + |b| => |b| - |a|
40252 if (this._s < 0) {
40253 m = new BigInteger(n._d, 1, CONSTRUCT);
40254 n = new BigInteger(this._d, 1, CONSTRUCT);
40255 }
40256
40257 // Both are positive => a - b
40258 var sign = m.compareAbs(n);
40259 if (sign === 0) {
40260 return ZERO;
40261 }
40262 else if (sign < 0) {
40263 // swap m and n
40264 var t = n;
40265 n = m;
40266 m = t;
40267 }
40268
40269 // a > b
40270 var a = m._d;
40271 var b = n._d;
40272 var al = a.length;
40273 var bl = b.length;
40274 var diff = new Array(al); // al >= bl since a > b
40275 var borrow = 0;
40276 var i;
40277 var digit;
40278
40279 for (i = 0; i < bl; i++) {
40280 digit = a[i] - borrow - b[i];
40281 if (digit < 0) {
40282 digit += BigInteger_base;
40283 borrow = 1;
40284 }
40285 else {
40286 borrow = 0;
40287 }
40288 diff[i] = digit;
40289 }
40290 for (i = bl; i < al; i++) {
40291 digit = a[i] - borrow;
40292 if (digit < 0) {
40293 digit += BigInteger_base;
40294 }
40295 else {
40296 diff[i++] = digit;
40297 break;
40298 }
40299 diff[i] = digit;
40300 }
40301 for ( ; i < al; i++) {
40302 diff[i] = a[i];
40303 }
40304
40305 return new BigInteger(diff, sign, CONSTRUCT);
40306};
40307
40308(function() {
40309 function addOne(n, sign) {
40310 var a = n._d;
40311 var sum = a.slice();
40312 var carry = true;
40313 var i = 0;
40314
40315 while (true) {
40316 var digit = (a[i] || 0) + 1;
40317 sum[i] = digit % BigInteger_base;
40318 if (digit <= BigInteger_base - 1) {
40319 break;
40320 }
40321 ++i;
40322 }
40323
40324 return new BigInteger(sum, sign, CONSTRUCT);
40325 }
40326
40327 function subtractOne(n, sign) {
40328 var a = n._d;
40329 var sum = a.slice();
40330 var borrow = true;
40331 var i = 0;
40332
40333 while (true) {
40334 var digit = (a[i] || 0) - 1;
40335 if (digit < 0) {
40336 sum[i] = digit + BigInteger_base;
40337 }
40338 else {
40339 sum[i] = digit;
40340 break;
40341 }
40342 ++i;
40343 }
40344
40345 return new BigInteger(sum, sign, CONSTRUCT);
40346 }
40347
40348 /*
40349 Function: next
40350 Get the next <BigInteger> (add one).
40351
40352 Returns:
40353
40354 *this* + 1.
40355
40356 See Also:
40357
40358 <add>, <prev>
40359 */
40360 BigInteger.prototype.next = function() {
40361 switch (this._s) {
40362 case 0:
40363 return ONE;
40364 case -1:
40365 return subtractOne(this, -1);
40366 // case 1:
40367 default:
40368 return addOne(this, 1);
40369 }
40370 };
40371
40372 /*
40373 Function: prev
40374 Get the previous <BigInteger> (subtract one).
40375
40376 Returns:
40377
40378 *this* - 1.
40379
40380 See Also:
40381
40382 <next>, <subtract>
40383 */
40384 BigInteger.prototype.prev = function() {
40385 switch (this._s) {
40386 case 0:
40387 return M_ONE;
40388 case -1:
40389 return addOne(this, -1);
40390 // case 1:
40391 default:
40392 return subtractOne(this, 1);
40393 }
40394 };
40395})();
40396
40397/*
40398 Function: compareAbs
40399 Compare the absolute value of two <BigIntegers>.
40400
40401 Calling <compareAbs> is faster than calling <abs> twice, then <compare>.
40402
40403 Parameters:
40404
40405 n - The number to compare to *this*. Will be converted to a <BigInteger>.
40406
40407 Returns:
40408
40409 -1, 0, or +1 if *|this|* is less than, equal to, or greater than *|n|*.
40410
40411 See Also:
40412
40413 <compare>, <abs>
40414*/
40415BigInteger.prototype.compareAbs = function(n) {
40416 if (this === n) {
40417 return 0;
40418 }
40419
40420 if (!(n instanceof BigInteger)) {
40421 if (!isFinite(n)) {
40422 return(isNaN(n) ? n : -1);
40423 }
40424 n = BigInteger(n);
40425 }
40426
40427 if (this._s === 0) {
40428 return (n._s !== 0) ? -1 : 0;
40429 }
40430 if (n._s === 0) {
40431 return 1;
40432 }
40433
40434 var l = this._d.length;
40435 var nl = n._d.length;
40436 if (l < nl) {
40437 return -1;
40438 }
40439 else if (l > nl) {
40440 return 1;
40441 }
40442
40443 var a = this._d;
40444 var b = n._d;
40445 for (var i = l-1; i >= 0; i--) {
40446 if (a[i] !== b[i]) {
40447 return a[i] < b[i] ? -1 : 1;
40448 }
40449 }
40450
40451 return 0;
40452};
40453
40454/*
40455 Function: compare
40456 Compare two <BigIntegers>.
40457
40458 Parameters:
40459
40460 n - The number to compare to *this*. Will be converted to a <BigInteger>.
40461
40462 Returns:
40463
40464 -1, 0, or +1 if *this* is less than, equal to, or greater than *n*.
40465
40466 See Also:
40467
40468 <compareAbs>, <isPositive>, <isNegative>, <isUnit>
40469*/
40470BigInteger.prototype.compare = function(n) {
40471 if (this === n) {
40472 return 0;
40473 }
40474
40475 n = BigInteger(n);
40476
40477 if (this._s === 0) {
40478 return -n._s;
40479 }
40480
40481 if (this._s === n._s) { // both positive or both negative
40482 var cmp = this.compareAbs(n);
40483 return cmp * this._s;
40484 }
40485 else {
40486 return this._s;
40487 }
40488};
40489
40490/*
40491 Function: isUnit
40492 Return true iff *this* is either 1 or -1.
40493
40494 Returns:
40495
40496 true if *this* compares equal to <BigInteger.ONE> or <BigInteger.M_ONE>.
40497
40498 See Also:
40499
40500 <isZero>, <isNegative>, <isPositive>, <compareAbs>, <compare>,
40501 <BigInteger.ONE>, <BigInteger.M_ONE>
40502*/
40503BigInteger.prototype.isUnit = function() {
40504 return this === ONE ||
40505 this === M_ONE ||
40506 (this._d.length === 1 && this._d[0] === 1);
40507};
40508
40509/*
40510 Function: multiply
40511 Multiply two <BigIntegers>.
40512
40513 Parameters:
40514
40515 n - The number to multiply *this* by. Will be converted to a
40516 <BigInteger>.
40517
40518 Returns:
40519
40520 The numbers multiplied together.
40521
40522 See Also:
40523
40524 <add>, <subtract>, <quotient>, <square>
40525*/
40526BigInteger.prototype.multiply = function(n) {
40527 // TODO: Consider adding Karatsuba multiplication for large numbers
40528 if (this._s === 0) {
40529 return ZERO;
40530 }
40531
40532 n = BigInteger(n);
40533 if (n._s === 0) {
40534 return ZERO;
40535 }
40536 if (this.isUnit()) {
40537 if (this._s < 0) {
40538 return n.negate();
40539 }
40540 return n;
40541 }
40542 if (n.isUnit()) {
40543 if (n._s < 0) {
40544 return this.negate();
40545 }
40546 return this;
40547 }
40548 if (this === n) {
40549 return this.square();
40550 }
40551
40552 var r = (this._d.length >= n._d.length);
40553 var a = (r ? this : n)._d; // a will be longer than b
40554 var b = (r ? n : this)._d;
40555 var al = a.length;
40556 var bl = b.length;
40557
40558 var pl = al + bl;
40559 var partial = new Array(pl);
40560 var i;
40561 for (i = 0; i < pl; i++) {
40562 partial[i] = 0;
40563 }
40564
40565 for (i = 0; i < bl; i++) {
40566 var carry = 0;
40567 var bi = b[i];
40568 var jlimit = al + i;
40569 var digit;
40570 for (var j = i; j < jlimit; j++) {
40571 digit = partial[j] + bi * a[j - i] + carry;
40572 carry = (digit / BigInteger_base) | 0;
40573 partial[j] = (digit % BigInteger_base) | 0;
40574 }
40575 if (carry) {
40576 digit = partial[j] + carry;
40577 carry = (digit / BigInteger_base) | 0;
40578 partial[j] = digit % BigInteger_base;
40579 }
40580 }
40581 return new BigInteger(partial, this._s * n._s, CONSTRUCT);
40582};
40583
40584// Multiply a BigInteger by a single-digit native number
40585// Assumes that this and n are >= 0
40586// This is not really intended to be used outside the library itself
40587BigInteger.prototype.multiplySingleDigit = function(n) {
40588 if (n === 0 || this._s === 0) {
40589 return ZERO;
40590 }
40591 if (n === 1) {
40592 return this;
40593 }
40594
40595 var digit;
40596 if (this._d.length === 1) {
40597 digit = this._d[0] * n;
40598 if (digit >= BigInteger_base) {
40599 return new BigInteger([(digit % BigInteger_base)|0,
40600 (digit / BigInteger_base)|0], 1, CONSTRUCT);
40601 }
40602 return new BigInteger([digit], 1, CONSTRUCT);
40603 }
40604
40605 if (n === 2) {
40606 return this.add(this);
40607 }
40608 if (this.isUnit()) {
40609 return new BigInteger([n], 1, CONSTRUCT);
40610 }
40611
40612 var a = this._d;
40613 var al = a.length;
40614
40615 var pl = al + 1;
40616 var partial = new Array(pl);
40617 for (var i = 0; i < pl; i++) {
40618 partial[i] = 0;
40619 }
40620
40621 var carry = 0;
40622 for (var j = 0; j < al; j++) {
40623 digit = n * a[j] + carry;
40624 carry = (digit / BigInteger_base) | 0;
40625 partial[j] = (digit % BigInteger_base) | 0;
40626 }
40627 if (carry) {
40628 partial[j] = carry;
40629 }
40630
40631 return new BigInteger(partial, 1, CONSTRUCT);
40632};
40633
40634/*
40635 Function: square
40636 Multiply a <BigInteger> by itself.
40637
40638 This is slightly faster than regular multiplication, since it removes the
40639 duplicated multiplcations.
40640
40641 Returns:
40642
40643 > this.multiply(this)
40644
40645 See Also:
40646 <multiply>
40647*/
40648BigInteger.prototype.square = function() {
40649 // Normally, squaring a 10-digit number would take 100 multiplications.
40650 // Of these 10 are unique diagonals, of the remaining 90 (100-10), 45 are repeated.
40651 // This procedure saves (N*(N-1))/2 multiplications, (e.g., 45 of 100 multiplies).
40652 // Based on code by Gary Darby, Intellitech Systems Inc., www.DelphiForFun.org
40653
40654 if (this._s === 0) {
40655 return ZERO;
40656 }
40657 if (this.isUnit()) {
40658 return ONE;
40659 }
40660
40661 var digits = this._d;
40662 var length = digits.length;
40663 var imult1 = new Array(length + length + 1);
40664 var product, carry, k;
40665 var i;
40666
40667 // Calculate diagonal
40668 for (i = 0; i < length; i++) {
40669 k = i * 2;
40670 product = digits[i] * digits[i];
40671 carry = (product / BigInteger_base) | 0;
40672 imult1[k] = product % BigInteger_base;
40673 imult1[k + 1] = carry;
40674 }
40675
40676 // Calculate repeating part
40677 for (i = 0; i < length; i++) {
40678 carry = 0;
40679 k = i * 2 + 1;
40680 for (var j = i + 1; j < length; j++, k++) {
40681 product = digits[j] * digits[i] * 2 + imult1[k] + carry;
40682 carry = (product / BigInteger_base) | 0;
40683 imult1[k] = product % BigInteger_base;
40684 }
40685 k = length + i;
40686 var digit = carry + imult1[k];
40687 carry = (digit / BigInteger_base) | 0;
40688 imult1[k] = digit % BigInteger_base;
40689 imult1[k + 1] += carry;
40690 }
40691
40692 return new BigInteger(imult1, 1, CONSTRUCT);
40693};
40694
40695/*
40696 Function: quotient
40697 Divide two <BigIntegers> and truncate towards zero.
40698
40699 <quotient> throws an exception if *n* is zero.
40700
40701 Parameters:
40702
40703 n - The number to divide *this* by. Will be converted to a <BigInteger>.
40704
40705 Returns:
40706
40707 The *this* / *n*, truncated to an integer.
40708
40709 See Also:
40710
40711 <add>, <subtract>, <multiply>, <divRem>, <remainder>
40712*/
40713BigInteger.prototype.quotient = function(n) {
40714 return this.divRem(n)[0];
40715};
40716
40717/*
40718 Function: divide
40719 Deprecated synonym for <quotient>.
40720*/
40721BigInteger.prototype.divide = BigInteger.prototype.quotient;
40722
40723/*
40724 Function: remainder
40725 Calculate the remainder of two <BigIntegers>.
40726
40727 <remainder> throws an exception if *n* is zero.
40728
40729 Parameters:
40730
40731 n - The remainder after *this* is divided *this* by *n*. Will be
40732 converted to a <BigInteger>.
40733
40734 Returns:
40735
40736 *this* % *n*.
40737
40738 See Also:
40739
40740 <divRem>, <quotient>
40741*/
40742BigInteger.prototype.remainder = function(n) {
40743 return this.divRem(n)[1];
40744};
40745
40746/*
40747 Function: divRem
40748 Calculate the integer quotient and remainder of two <BigIntegers>.
40749
40750 <divRem> throws an exception if *n* is zero.
40751
40752 Parameters:
40753
40754 n - The number to divide *this* by. Will be converted to a <BigInteger>.
40755
40756 Returns:
40757
40758 A two-element array containing the quotient and the remainder.
40759
40760 > a.divRem(b)
40761
40762 is exactly equivalent to
40763
40764 > [a.quotient(b), a.remainder(b)]
40765
40766 except it is faster, because they are calculated at the same time.
40767
40768 See Also:
40769
40770 <quotient>, <remainder>
40771*/
40772BigInteger.prototype.divRem = function(n) {
40773 n = BigInteger(n);
40774 if (n._s === 0) {
40775 throw new Error("Divide by zero");
40776 }
40777 if (this._s === 0) {
40778 return [ZERO, ZERO];
40779 }
40780 if (n._d.length === 1) {
40781 return this.divRemSmall(n._s * n._d[0]);
40782 }
40783
40784 // Test for easy cases -- |n1| <= |n2|
40785 switch (this.compareAbs(n)) {
40786 case 0: // n1 == n2
40787 return [this._s === n._s ? ONE : M_ONE, ZERO];
40788 case -1: // |n1| < |n2|
40789 return [ZERO, this];
40790 }
40791
40792 var sign = this._s * n._s;
40793 var a = n.abs();
40794 var b_digits = this._d;
40795 var b_index = b_digits.length;
40796 var digits = n._d.length;
40797 var quot = [];
40798 var guess;
40799
40800 var part = new BigInteger([], 0, CONSTRUCT);
40801
40802 while (b_index) {
40803 part._d.unshift(b_digits[--b_index]);
40804 part = new BigInteger(part._d, 1, CONSTRUCT);
40805
40806 if (part.compareAbs(n) < 0) {
40807 quot.push(0);
40808 continue;
40809 }
40810 if (part._s === 0) {
40811 guess = 0;
40812 }
40813 else {
40814 var xlen = part._d.length, ylen = a._d.length;
40815 var highx = part._d[xlen-1]*BigInteger_base + part._d[xlen-2];
40816 var highy = a._d[ylen-1]*BigInteger_base + a._d[ylen-2];
40817 if (part._d.length > a._d.length) {
40818 // The length of part._d can either match a._d length,
40819 // or exceed it by one.
40820 highx = (highx+1)*BigInteger_base;
40821 }
40822 guess = Math.ceil(highx/highy);
40823 }
40824 do {
40825 var check = a.multiplySingleDigit(guess);
40826 if (check.compareAbs(part) <= 0) {
40827 break;
40828 }
40829 guess--;
40830 } while (guess);
40831
40832 quot.push(guess);
40833 if (!guess) {
40834 continue;
40835 }
40836 var diff = part.subtract(check);
40837 part._d = diff._d.slice();
40838 }
40839
40840 return [new BigInteger(quot.reverse(), sign, CONSTRUCT),
40841 new BigInteger(part._d, this._s, CONSTRUCT)];
40842};
40843
40844// Throws an exception if n is outside of (-BigInteger.base, -1] or
40845// [1, BigInteger.base). It's not necessary to call this, since the
40846// other division functions will call it if they are able to.
40847BigInteger.prototype.divRemSmall = function(n) {
40848 var r;
40849 n = +n;
40850 if (n === 0) {
40851 throw new Error("Divide by zero");
40852 }
40853
40854 var n_s = n < 0 ? -1 : 1;
40855 var sign = this._s * n_s;
40856 n = Math.abs(n);
40857
40858 if (n < 1 || n >= BigInteger_base) {
40859 throw new Error("Argument out of range");
40860 }
40861
40862 if (this._s === 0) {
40863 return [ZERO, ZERO];
40864 }
40865
40866 if (n === 1 || n === -1) {
40867 return [(sign === 1) ? this.abs() : new BigInteger(this._d, sign, CONSTRUCT), ZERO];
40868 }
40869
40870 // 2 <= n < BigInteger_base
40871
40872 // divide a single digit by a single digit
40873 if (this._d.length === 1) {
40874 var q = new BigInteger([(this._d[0] / n) | 0], 1, CONSTRUCT);
40875 r = new BigInteger([(this._d[0] % n) | 0], 1, CONSTRUCT);
40876 if (sign < 0) {
40877 q = q.negate();
40878 }
40879 if (this._s < 0) {
40880 r = r.negate();
40881 }
40882 return [q, r];
40883 }
40884
40885 var digits = this._d.slice();
40886 var quot = new Array(digits.length);
40887 var part = 0;
40888 var diff = 0;
40889 var i = 0;
40890 var guess;
40891
40892 while (digits.length) {
40893 part = part * BigInteger_base + digits[digits.length - 1];
40894 if (part < n) {
40895 quot[i++] = 0;
40896 digits.pop();
40897 diff = BigInteger_base * diff + part;
40898 continue;
40899 }
40900 if (part === 0) {
40901 guess = 0;
40902 }
40903 else {
40904 guess = (part / n) | 0;
40905 }
40906
40907 var check = n * guess;
40908 diff = part - check;
40909 quot[i++] = guess;
40910 if (!guess) {
40911 digits.pop();
40912 continue;
40913 }
40914
40915 digits.pop();
40916 part = diff;
40917 }
40918
40919 r = new BigInteger([diff], 1, CONSTRUCT);
40920 if (this._s < 0) {
40921 r = r.negate();
40922 }
40923 return [new BigInteger(quot.reverse(), sign, CONSTRUCT), r];
40924};
40925
40926/*
40927 Function: isEven
40928 Return true iff *this* is divisible by two.
40929
40930 Note that <BigInteger.ZERO> is even.
40931
40932 Returns:
40933
40934 true if *this* is even, false otherwise.
40935
40936 See Also:
40937
40938 <isOdd>
40939*/
40940BigInteger.prototype.isEven = function() {
40941 var digits = this._d;
40942 return this._s === 0 || digits.length === 0 || (digits[0] % 2) === 0;
40943};
40944
40945/*
40946 Function: isOdd
40947 Return true iff *this* is not divisible by two.
40948
40949 Returns:
40950
40951 true if *this* is odd, false otherwise.
40952
40953 See Also:
40954
40955 <isEven>
40956*/
40957BigInteger.prototype.isOdd = function() {
40958 return !this.isEven();
40959};
40960
40961/*
40962 Function: sign
40963 Get the sign of a <BigInteger>.
40964
40965 Returns:
40966
40967 * -1 if *this* < 0
40968 * 0 if *this* == 0
40969 * +1 if *this* > 0
40970
40971 See Also:
40972
40973 <isZero>, <isPositive>, <isNegative>, <compare>, <BigInteger.ZERO>
40974*/
40975BigInteger.prototype.sign = function() {
40976 return this._s;
40977};
40978
40979/*
40980 Function: isPositive
40981 Return true iff *this* > 0.
40982
40983 Returns:
40984
40985 true if *this*.compare(<BigInteger.ZERO>) == 1.
40986
40987 See Also:
40988
40989 <sign>, <isZero>, <isNegative>, <isUnit>, <compare>, <BigInteger.ZERO>
40990*/
40991BigInteger.prototype.isPositive = function() {
40992 return this._s > 0;
40993};
40994
40995/*
40996 Function: isNegative
40997 Return true iff *this* < 0.
40998
40999 Returns:
41000
41001 true if *this*.compare(<BigInteger.ZERO>) == -1.
41002
41003 See Also:
41004
41005 <sign>, <isPositive>, <isZero>, <isUnit>, <compare>, <BigInteger.ZERO>
41006*/
41007BigInteger.prototype.isNegative = function() {
41008 return this._s < 0;
41009};
41010
41011/*
41012 Function: isZero
41013 Return true iff *this* == 0.
41014
41015 Returns:
41016
41017 true if *this*.compare(<BigInteger.ZERO>) == 0.
41018
41019 See Also:
41020
41021 <sign>, <isPositive>, <isNegative>, <isUnit>, <BigInteger.ZERO>
41022*/
41023BigInteger.prototype.isZero = function() {
41024 return this._s === 0;
41025};
41026
41027/*
41028 Function: exp10
41029 Multiply a <BigInteger> by a power of 10.
41030
41031 This is equivalent to, but faster than
41032
41033 > if (n >= 0) {
41034 > return this.multiply(BigInteger("1e" + n));
41035 > }
41036 > else { // n <= 0
41037 > return this.quotient(BigInteger("1e" + -n));
41038 > }
41039
41040 Parameters:
41041
41042 n - The power of 10 to multiply *this* by. *n* is converted to a
41043 javascipt number and must be no greater than <BigInteger.MAX_EXP>
41044 (0x7FFFFFFF), or an exception will be thrown.
41045
41046 Returns:
41047
41048 *this* * (10 ** *n*), truncated to an integer if necessary.
41049
41050 See Also:
41051
41052 <pow>, <multiply>
41053*/
41054BigInteger.prototype.exp10 = function(n) {
41055 n = +n;
41056 if (n === 0) {
41057 return this;
41058 }
41059 if (Math.abs(n) > Number(MAX_EXP)) {
41060 throw new Error("exponent too large in BigInteger.exp10");
41061 }
41062 // Optimization for this == 0. This also keeps us from having to trim zeros in the positive n case
41063 if (this._s === 0) {
41064 return ZERO;
41065 }
41066 if (n > 0) {
41067 var k = new BigInteger(this._d.slice(), this._s, CONSTRUCT);
41068
41069 for (; n >= BigInteger_base_log10; n -= BigInteger_base_log10) {
41070 k._d.unshift(0);
41071 }
41072 if (n == 0)
41073 return k;
41074 k._s = 1;
41075 k = k.multiplySingleDigit(Math.pow(10, n));
41076 return (this._s < 0 ? k.negate() : k);
41077 } else if (-n >= this._d.length*BigInteger_base_log10) {
41078 return ZERO;
41079 } else {
41080 var k = new BigInteger(this._d.slice(), this._s, CONSTRUCT);
41081
41082 for (n = -n; n >= BigInteger_base_log10; n -= BigInteger_base_log10) {
41083 k._d.shift();
41084 }
41085 return (n == 0) ? k : k.divRemSmall(Math.pow(10, n))[0];
41086 }
41087};
41088
41089/*
41090 Function: pow
41091 Raise a <BigInteger> to a power.
41092
41093 In this implementation, 0**0 is 1.
41094
41095 Parameters:
41096
41097 n - The exponent to raise *this* by. *n* must be no greater than
41098 <BigInteger.MAX_EXP> (0x7FFFFFFF), or an exception will be thrown.
41099
41100 Returns:
41101
41102 *this* raised to the *nth* power.
41103
41104 See Also:
41105
41106 <modPow>
41107*/
41108BigInteger.prototype.pow = function(n) {
41109 if (this.isUnit()) {
41110 if (this._s > 0) {
41111 return this;
41112 }
41113 else {
41114 return BigInteger(n).isOdd() ? this : this.negate();
41115 }
41116 }
41117
41118 n = BigInteger(n);
41119 if (n._s === 0) {
41120 return ONE;
41121 }
41122 else if (n._s < 0) {
41123 if (this._s === 0) {
41124 throw new Error("Divide by zero");
41125 }
41126 else {
41127 return ZERO;
41128 }
41129 }
41130 if (this._s === 0) {
41131 return ZERO;
41132 }
41133 if (n.isUnit()) {
41134 return this;
41135 }
41136
41137 if (n.compareAbs(MAX_EXP) > 0) {
41138 throw new Error("exponent too large in BigInteger.pow");
41139 }
41140 var x = this;
41141 var aux = ONE;
41142 var two = BigInteger.small[2];
41143
41144 while (n.isPositive()) {
41145 if (n.isOdd()) {
41146 aux = aux.multiply(x);
41147 if (n.isUnit()) {
41148 return aux;
41149 }
41150 }
41151 x = x.square();
41152 n = n.quotient(two);
41153 }
41154
41155 return aux;
41156};
41157
41158/*
41159 Function: modPow
41160 Raise a <BigInteger> to a power (mod m).
41161
41162 Because it is reduced by a modulus, <modPow> is not limited by
41163 <BigInteger.MAX_EXP> like <pow>.
41164
41165 Parameters:
41166
41167 exponent - The exponent to raise *this* by. Must be positive.
41168 modulus - The modulus.
41169
41170 Returns:
41171
41172 *this* ^ *exponent* (mod *modulus*).
41173
41174 See Also:
41175
41176 <pow>, <mod>
41177*/
41178BigInteger.prototype.modPow = function(exponent, modulus) {
41179 var result = ONE;
41180 var base = this;
41181
41182 while (exponent.isPositive()) {
41183 if (exponent.isOdd()) {
41184 result = result.multiply(base).remainder(modulus);
41185 }
41186
41187 exponent = exponent.quotient(BigInteger.small[2]);
41188 if (exponent.isPositive()) {
41189 base = base.square().remainder(modulus);
41190 }
41191 }
41192
41193 return result;
41194};
41195
41196/*
41197 Function: log
41198 Get the natural logarithm of a <BigInteger> as a native JavaScript number.
41199
41200 This is equivalent to
41201
41202 > Math.log(this.toJSValue())
41203
41204 but handles values outside of the native number range.
41205
41206 Returns:
41207
41208 log( *this* )
41209
41210 See Also:
41211
41212 <toJSValue>
41213*/
41214BigInteger.prototype.log = function() {
41215 switch (this._s) {
41216 case 0: return -Infinity;
41217 case -1: return NaN;
41218 default: // Fall through.
41219 }
41220
41221 var l = this._d.length;
41222
41223 if (l*BigInteger_base_log10 < 30) {
41224 return Math.log(this.valueOf());
41225 }
41226
41227 var N = Math.ceil(30/BigInteger_base_log10);
41228 var firstNdigits = this._d.slice(l - N);
41229 return Math.log((new BigInteger(firstNdigits, 1, CONSTRUCT)).valueOf()) + (l - N) * Math.log(BigInteger_base);
41230};
41231
41232/*
41233 Function: valueOf
41234 Convert a <BigInteger> to a native JavaScript integer.
41235
41236 This is called automatically by JavaScipt to convert a <BigInteger> to a
41237 native value.
41238
41239 Returns:
41240
41241 > parseInt(this.toString(), 10)
41242
41243 See Also:
41244
41245 <toString>, <toJSValue>
41246*/
41247BigInteger.prototype.valueOf = function() {
41248 return parseInt(this.toString(), 10);
41249};
41250
41251/*
41252 Function: toJSValue
41253 Convert a <BigInteger> to a native JavaScript integer.
41254
41255 This is the same as valueOf, but more explicitly named.
41256
41257 Returns:
41258
41259 > parseInt(this.toString(), 10)
41260
41261 See Also:
41262
41263 <toString>, <valueOf>
41264*/
41265BigInteger.prototype.toJSValue = function() {
41266 return parseInt(this.toString(), 10);
41267};
41268
41269var MAX_EXP = BigInteger(0x7FFFFFFF);
41270// Constant: MAX_EXP
41271// The largest exponent allowed in <pow> and <exp10> (0x7FFFFFFF or 2147483647).
41272BigInteger.MAX_EXP = MAX_EXP;
41273
41274(function() {
41275 function makeUnary(fn) {
41276 return function(a) {
41277 return fn.call(BigInteger(a));
41278 };
41279 }
41280
41281 function makeBinary(fn) {
41282 return function(a, b) {
41283 return fn.call(BigInteger(a), BigInteger(b));
41284 };
41285 }
41286
41287 function makeTrinary(fn) {
41288 return function(a, b, c) {
41289 return fn.call(BigInteger(a), BigInteger(b), BigInteger(c));
41290 };
41291 }
41292
41293 (function() {
41294 var i, fn;
41295 var unary = "toJSValue,isEven,isOdd,sign,isZero,isNegative,abs,isUnit,square,negate,isPositive,toString,next,prev,log".split(",");
41296 var binary = "compare,remainder,divRem,subtract,add,quotient,divide,multiply,pow,compareAbs".split(",");
41297 var trinary = ["modPow"];
41298
41299 for (i = 0; i < unary.length; i++) {
41300 fn = unary[i];
41301 BigInteger[fn] = makeUnary(BigInteger.prototype[fn]);
41302 }
41303
41304 for (i = 0; i < binary.length; i++) {
41305 fn = binary[i];
41306 BigInteger[fn] = makeBinary(BigInteger.prototype[fn]);
41307 }
41308
41309 for (i = 0; i < trinary.length; i++) {
41310 fn = trinary[i];
41311 BigInteger[fn] = makeTrinary(BigInteger.prototype[fn]);
41312 }
41313
41314 BigInteger.exp10 = function(x, n) {
41315 return BigInteger(x).exp10(n);
41316 };
41317 })();
41318})();
41319
41320exports.BigInteger = BigInteger;
41321})(typeof exports !== 'undefined' ? exports : this);
95f04905
IC
41322</script>
41323 <script>(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.zxcvbn = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
41324var adjacency_graphs;adjacency_graphs={qwerty:{"!":["`~",null,null,"2@","qQ",null],'"':[";:","[{","]}",null,null,"/?"],"#":["2@",null,null,"4$","eE","wW"],$:["3#",null,null,"5%","rR","eE"],"%":["4$",null,null,"6^","tT","rR"],"&":["6^",null,null,"8*","uU","yY"],"'":[";:","[{","]}",null,null,"/?"],"(":["8*",null,null,"0)","oO","iI"],")":["9(",null,null,"-_","pP","oO"],"*":["7&",null,null,"9(","iI","uU"],"+":["-_",null,null,null,"]}","[{"],",":["mM","kK","lL",".>",null,null],"-":["0)",null,null,"=+","[{","pP"],".":[",<","lL",";:","/?",null,null],"/":[".>",";:","'\"",null,null,null],0:["9(",null,null,"-_","pP","oO"],1:["`~",null,null,"2@","qQ",null],2:["1!",null,null,"3#","wW","qQ"],3:["2@",null,null,"4$","eE","wW"],4:["3#",null,null,"5%","rR","eE"],5:["4$",null,null,"6^","tT","rR"],6:["5%",null,null,"7&","yY","tT"],7:["6^",null,null,"8*","uU","yY"],8:["7&",null,null,"9(","iI","uU"],9:["8*",null,null,"0)","oO","iI"],":":["lL","pP","[{","'\"","/?",".>"],";":["lL","pP","[{","'\"","/?",".>"],"<":["mM","kK","lL",".>",null,null],"=":["-_",null,null,null,"]}","[{"],">":[",<","lL",";:","/?",null,null],"?":[".>",";:","'\"",null,null,null],"@":["1!",null,null,"3#","wW","qQ"],A:[null,"qQ","wW","sS","zZ",null],B:["vV","gG","hH","nN",null,null],C:["xX","dD","fF","vV",null,null],D:["sS","eE","rR","fF","cC","xX"],E:["wW","3#","4$","rR","dD","sS"],F:["dD","rR","tT","gG","vV","cC"],G:["fF","tT","yY","hH","bB","vV"],H:["gG","yY","uU","jJ","nN","bB"],I:["uU","8*","9(","oO","kK","jJ"],J:["hH","uU","iI","kK","mM","nN"],K:["jJ","iI","oO","lL",",<","mM"],L:["kK","oO","pP",";:",".>",",<"],M:["nN","jJ","kK",",<",null,null],N:["bB","hH","jJ","mM",null,null],O:["iI","9(","0)","pP","lL","kK"],P:["oO","0)","-_","[{",";:","lL"],Q:[null,"1!","2@","wW","aA",null],R:["eE","4$","5%","tT","fF","dD"],S:["aA","wW","eE","dD","xX","zZ"],T:["rR","5%","6^","yY","gG","fF"],U:["yY","7&","8*","iI","jJ","hH"],V:["cC","fF","gG","bB",null,null],W:["qQ","2@","3#","eE","sS","aA"],X:["zZ","sS","dD","cC",null,null],Y:["tT","6^","7&","uU","hH","gG"],Z:[null,"aA","sS","xX",null,null],"[":["pP","-_","=+","]}","'\"",";:"],"\\":["]}",null,null,null,null,null],"]":["[{","=+",null,"\\|",null,"'\""],"^":["5%",null,null,"7&","yY","tT"],_:["0)",null,null,"=+","[{","pP"],"`":[null,null,null,"1!",null,null],a:[null,"qQ","wW","sS","zZ",null],b:["vV","gG","hH","nN",null,null],c:["xX","dD","fF","vV",null,null],d:["sS","eE","rR","fF","cC","xX"],e:["wW","3#","4$","rR","dD","sS"],f:["dD","rR","tT","gG","vV","cC"],g:["fF","tT","yY","hH","bB","vV"],h:["gG","yY","uU","jJ","nN","bB"],i:["uU","8*","9(","oO","kK","jJ"],j:["hH","uU","iI","kK","mM","nN"],k:["jJ","iI","oO","lL",",<","mM"],l:["kK","oO","pP",";:",".>",",<"],m:["nN","jJ","kK",",<",null,null],n:["bB","hH","jJ","mM",null,null],o:["iI","9(","0)","pP","lL","kK"],p:["oO","0)","-_","[{",";:","lL"],q:[null,"1!","2@","wW","aA",null],r:["eE","4$","5%","tT","fF","dD"],s:["aA","wW","eE","dD","xX","zZ"],t:["rR","5%","6^","yY","gG","fF"],u:["yY","7&","8*","iI","jJ","hH"],v:["cC","fF","gG","bB",null,null],w:["qQ","2@","3#","eE","sS","aA"],x:["zZ","sS","dD","cC",null,null],y:["tT","6^","7&","uU","hH","gG"],z:[null,"aA","sS","xX",null,null],"{":["pP","-_","=+","]}","'\"",";:"],"|":["]}",null,null,null,null,null],"}":["[{","=+",null,"\\|",null,"'\""],"~":[null,null,null,"1!",null,null]},dvorak:{"!":["`~",null,null,"2@","'\"",null],'"':[null,"1!","2@",",<","aA",null],"#":["2@",null,null,"4$",".>",",<"],$:["3#",null,null,"5%","pP",".>"],"%":["4$",null,null,"6^","yY","pP"],"&":["6^",null,null,"8*","gG","fF"],"'":[null,"1!","2@",",<","aA",null],"(":["8*",null,null,"0)","rR","cC"],")":["9(",null,null,"[{","lL","rR"],"*":["7&",null,null,"9(","cC","gG"],"+":["/?","]}",null,"\\|",null,"-_"],",":["'\"","2@","3#",".>","oO","aA"],"-":["sS","/?","=+",null,null,"zZ"],".":[",<","3#","4$","pP","eE","oO"],"/":["lL","[{","]}","=+","-_","sS"],0:["9(",null,null,"[{","lL","rR"],1:["`~",null,null,"2@","'\"",null],2:["1!",null,null,"3#",",<","'\""],3:["2@",null,null,"4$",".>",",<"],4:["3#",null,null,"5%","pP",".>"],5:["4$",null,null,"6^","yY","pP"],6:["5%",null,null,"7&","fF","yY"],7:["6^",null,null,"8*","gG","fF"],8:["7&",null,null,"9(","cC","gG"],9:["8*",null,null,"0)","rR","cC"],":":[null,"aA","oO","qQ",null,null],";":[null,"aA","oO","qQ",null,null],"<":["'\"","2@","3#",".>","oO","aA"],"=":["/?","]}",null,"\\|",null,"-_"],">":[",<","3#","4$","pP","eE","oO"],"?":["lL","[{","]}","=+","-_","sS"],"@":["1!",null,null,"3#",",<","'\""],A:[null,"'\"",",<","oO",";:",null],B:["xX","dD","hH","mM",null,null],C:["gG","8*","9(","rR","tT","hH"],D:["iI","fF","gG","hH","bB","xX"],E:["oO",".>","pP","uU","jJ","qQ"],F:["yY","6^","7&","gG","dD","iI"],G:["fF","7&","8*","cC","hH","dD"],H:["dD","gG","cC","tT","mM","bB"],I:["uU","yY","fF","dD","xX","kK"],J:["qQ","eE","uU","kK",null,null],K:["jJ","uU","iI","xX",null,null],L:["rR","0)","[{","/?","sS","nN"],M:["bB","hH","tT","wW",null,null],N:["tT","rR","lL","sS","vV","wW"],O:["aA",",<",".>","eE","qQ",";:"],P:[".>","4$","5%","yY","uU","eE"],Q:[";:","oO","eE","jJ",null,null],R:["cC","9(","0)","lL","nN","tT"],S:["nN","lL","/?","-_","zZ","vV"],T:["hH","cC","rR","nN","wW","mM"],U:["eE","pP","yY","iI","kK","jJ"],V:["wW","nN","sS","zZ",null,null],W:["mM","tT","nN","vV",null,null],X:["kK","iI","dD","bB",null,null],Y:["pP","5%","6^","fF","iI","uU"],Z:["vV","sS","-_",null,null,null],"[":["0)",null,null,"]}","/?","lL"],"\\":["=+",null,null,null,null,null],"]":["[{",null,null,null,"=+","/?"],"^":["5%",null,null,"7&","fF","yY"],_:["sS","/?","=+",null,null,"zZ"],"`":[null,null,null,"1!",null,null],a:[null,"'\"",",<","oO",";:",null],b:["xX","dD","hH","mM",null,null],c:["gG","8*","9(","rR","tT","hH"],d:["iI","fF","gG","hH","bB","xX"],e:["oO",".>","pP","uU","jJ","qQ"],f:["yY","6^","7&","gG","dD","iI"],g:["fF","7&","8*","cC","hH","dD"],h:["dD","gG","cC","tT","mM","bB"],i:["uU","yY","fF","dD","xX","kK"],j:["qQ","eE","uU","kK",null,null],k:["jJ","uU","iI","xX",null,null],l:["rR","0)","[{","/?","sS","nN"],m:["bB","hH","tT","wW",null,null],n:["tT","rR","lL","sS","vV","wW"],o:["aA",",<",".>","eE","qQ",";:"],p:[".>","4$","5%","yY","uU","eE"],q:[";:","oO","eE","jJ",null,null],r:["cC","9(","0)","lL","nN","tT"],s:["nN","lL","/?","-_","zZ","vV"],t:["hH","cC","rR","nN","wW","mM"],u:["eE","pP","yY","iI","kK","jJ"],v:["wW","nN","sS","zZ",null,null],w:["mM","tT","nN","vV",null,null],x:["kK","iI","dD","bB",null,null],y:["pP","5%","6^","fF","iI","uU"],z:["vV","sS","-_",null,null,null],"{":["0)",null,null,"]}","/?","lL"],"|":["=+",null,null,null,null,null],"}":["[{",null,null,null,"=+","/?"],"~":[null,null,null,"1!",null,null]},keypad:{"*":["/",null,null,null,"-","+","9","8"],"+":["9","*","-",null,null,null,null,"6"],"-":["*",null,null,null,null,null,"+","9"],".":["0","2","3",null,null,null,null,null],"/":[null,null,null,null,"*","9","8","7"],0:[null,"1","2","3",".",null,null,null],1:[null,null,"4","5","2","0",null,null],2:["1","4","5","6","3",".","0",null],3:["2","5","6",null,null,null,".","0"],4:[null,null,"7","8","5","2","1",null],5:["4","7","8","9","6","3","2","1"],6:["5","8","9","+",null,null,"3","2"],7:[null,null,null,"/","8","5","4",null],8:["7",null,"/","*","9","6","5","4"],9:["8","/","*","-","+",null,"6","5"]},mac_keypad:{"*":["/",null,null,null,null,null,"-","9"],"+":["6","9","-",null,null,null,null,"3"],"-":["9","/","*",null,null,null,"+","6"],".":["0","2","3",null,null,null,null,null],"/":["=",null,null,null,"*","-","9","8"],0:[null,"1","2","3",".",null,null,null],1:[null,null,"4","5","2","0",null,null],2:["1","4","5","6","3",".","0",null],3:["2","5","6","+",null,null,".","0"],4:[null,null,"7","8","5","2","1",null],5:["4","7","8","9","6","3","2","1"],6:["5","8","9","-","+",null,"3","2"],7:[null,null,null,"=","8","5","4",null],8:["7",null,"=","/","9","6","5","4"],9:["8","=","/","*","-","+","6","5"],"=":[null,null,null,null,"/","9","8","7"]}},module.exports=adjacency_graphs;
41325
41326},{}],2:[function(require,module,exports){
41327var feedback,scoring;scoring=require("./scoring"),feedback={default_feedback:{warning:"",suggestions:["Use a few words, avoid common phrases","No need for symbols, digits, or uppercase letters"]},get_feedback:function(e,s){var a,t,r,n,o,i;if(0===s.length)return this.default_feedback;if(e>2)return{warning:"",suggestions:[]};for(n=s[0],i=s.slice(1),t=0,r=i.length;t<r;t++)o=i[t],o.token.length>n.token.length&&(n=o);return feedback=this.get_match_feedback(n,1===s.length),a="Add another word or two. Uncommon words are better.",null!=feedback?(feedback.suggestions.unshift(a),null==feedback.warning&&(feedback.warning="")):feedback={warning:"",suggestions:[a]},feedback},get_match_feedback:function(e,s){var a,t;switch(e.pattern){case"dictionary":return this.get_dictionary_match_feedback(e,s);case"spatial":return a=e.graph.toUpperCase(),t=1===e.turns?"Straight rows of keys are easy to guess":"Short keyboard patterns are easy to guess",{warning:t,suggestions:["Use a longer keyboard pattern with more turns"]};case"repeat":return t=1===e.base_token.length?'Repeats like "aaa" are easy to guess':'Repeats like "abcabcabc" are only slightly harder to guess than "abc"',{warning:t,suggestions:["Avoid repeated words and characters"]};case"sequence":return{warning:"Sequences like abc or 6543 are easy to guess",suggestions:["Avoid sequences"]};case"regex":if("recent_year"===e.regex_name)return{warning:"Recent years are easy to guess",suggestions:["Avoid recent years","Avoid years that are associated with you"]};break;case"date":return{warning:"Dates are often easy to guess",suggestions:["Avoid dates and years that are associated with you"]}}},get_dictionary_match_feedback:function(e,s){var a,t,r,n,o;return n="passwords"===e.dictionary_name?!s||e.l33t||e.reversed?e.guesses_log10<=4?"This is similar to a commonly used password":void 0:e.rank<=10?"This is a top-10 common password":e.rank<=100?"This is a top-100 common password":"This is a very common password":"english"===e.dictionary_name?s?"A word by itself is easy to guess":void 0:"surnames"===(a=e.dictionary_name)||"male_names"===a||"female_names"===a?s?"Names and surnames by themselves are easy to guess":"Common names and surnames are easy to guess":"",r=[],o=e.token,o.match(scoring.START_UPPER)?r.push("Capitalization doesn't help very much"):o.match(scoring.ALL_UPPER)&&o.toLowerCase()!==o&&r.push("All-uppercase is almost as easy to guess as all-lowercase"),e.reversed&&e.token.length>=4&&r.push("Reversed words aren't much harder to guess"),e.l33t&&r.push("Predictable substitutions like '@' instead of 'a' don't help very much"),t={warning:n,suggestions:r}}},module.exports=feedback;
41328
41329},{"./scoring":6}],3:[function(require,module,exports){
41330var frequency_lists;frequency_lists={passwords:"123456,password,12345678,qwerty,123456789,12345,1234,111111,1234567,dragon,123123,baseball,abc123,football,monkey,letmein,shadow,master,696969,mustang,666666,qwertyuiop,123321,1234567890,pussy,superman,654321,1qaz2wsx,7777777,fuckyou,qazwsx,jordan,123qwe,000000,killer,trustno1,hunter,harley,zxcvbnm,asdfgh,buster,batman,soccer,tigger,charlie,sunshine,iloveyou,fuckme,ranger,hockey,computer,starwars,asshole,pepper,klaster,112233,zxcvbn,freedom,princess,maggie,pass,ginger,11111111,131313,fuck,love,cheese,159753,summer,chelsea,dallas,biteme,matrix,yankees,6969,corvette,austin,access,thunder,merlin,secret,diamond,hello,hammer,fucker,1234qwer,silver,gfhjkm,internet,samantha,golfer,scooter,test,orange,cookie,q1w2e3r4t5,maverick,sparky,phoenix,mickey,bigdog,snoopy,guitar,whatever,chicken,camaro,mercedes,peanut,ferrari,falcon,cowboy,welcome,sexy,samsung,steelers,smokey,dakota,arsenal,boomer,eagles,tigers,marina,nascar,booboo,gateway,yellow,porsche,monster,spider,diablo,hannah,bulldog,junior,london,purple,compaq,lakers,iceman,qwer1234,hardcore,cowboys,money,banana,ncc1701,boston,tennis,q1w2e3r4,coffee,scooby,123654,nikita,yamaha,mother,barney,brandy,chester,fuckoff,oliver,player,forever,rangers,midnight,chicago,bigdaddy,redsox,angel,badboy,fender,jasper,slayer,rabbit,natasha,marine,bigdick,wizard,marlboro,raiders,prince,casper,fishing,flower,jasmine,iwantu,panties,adidas,winter,winner,gandalf,password1,enter,ghbdtn,1q2w3e4r,golden,cocacola,jordan23,winston,madison,angels,panther,blowme,sexsex,bigtits,spanky,bitch,sophie,asdfasdf,horny,thx1138,toyota,tiger,dick,canada,12344321,blowjob,8675309,muffin,liverpoo,apples,qwerty123,passw0rd,abcd1234,pokemon,123abc,slipknot,qazxsw,123456a,scorpion,qwaszx,butter,startrek,rainbow,asdfghjkl,razz,newyork,redskins,gemini,cameron,qazwsxedc,florida,liverpool,turtle,sierra,viking,booger,butthead,doctor,rocket,159357,dolphins,captain,bandit,jaguar,packers,pookie,peaches,789456,asdf,dolphin,helpme,blue,theman,maxwell,qwertyui,shithead,lovers,maddog,giants,nirvana,metallic,hotdog,rosebud,mountain,warrior,stupid,elephant,suckit,success,bond007,jackass,alexis,porn,lucky,scorpio,samson,q1w2e3,azerty,rush2112,driver,freddy,1q2w3e4r5t,sydney,gators,dexter,red123,123456q,12345a,bubba,creative,voodoo,golf,trouble,america,nissan,gunner,garfield,bullshit,asdfghjk,5150,fucking,apollo,1qazxsw2,2112,eminem,legend,airborne,bear,beavis,apple,brooklyn,godzilla,skippy,4815162342,buddy,qwert,kitten,magic,shelby,beaver,phantom,asdasd,xavier,braves,darkness,blink182,copper,platinum,qweqwe,tomcat,01012011,girls,bigboy,102030,animal,police,online,11223344,voyager,lifehack,12qwaszx,fish,sniper,315475,trinity,blazer,heaven,lover,snowball,playboy,loveme,bubbles,hooters,cricket,willow,donkey,topgun,nintendo,saturn,destiny,pakistan,pumpkin,digital,sergey,redwings,explorer,tits,private,runner,therock,guinness,lasvegas,beatles,789456123,fire,cassie,christin,qwerty1,celtic,asdf1234,andrey,broncos,007007,babygirl,eclipse,fluffy,cartman,michigan,carolina,testing,alexande,birdie,pantera,cherry,vampire,mexico,dickhead,buffalo,genius,montana,beer,minecraft,maximus,flyers,lovely,stalker,metallica,doggie,snickers,speedy,bronco,lol123,paradise,yankee,horses,magnum,dreams,147258369,lacrosse,ou812,goober,enigma,qwertyu,scotty,pimpin,bollocks,surfer,cock,poohbear,genesis,star,asd123,qweasdzxc,racing,hello1,hawaii,eagle1,viper,poopoo,einstein,boobies,12345q,bitches,drowssap,simple,badger,alaska,action,jester,drummer,111222,spitfire,forest,maryjane,champion,diesel,svetlana,friday,hotrod,147258,chevy,lucky1,westside,security,google,badass,tester,shorty,thumper,hitman,mozart,zaq12wsx,boobs,reddog,010203,lizard,a123456,123456789a,ruslan,eagle,1232323q,scarface,qwerty12,147852,a12345,buddha,porno,420420,spirit,money1,stargate,qwe123,naruto,mercury,liberty,12345qwert,semperfi,suzuki,popcorn,spooky,marley,scotland,kitty,cherokee,vikings,simpsons,rascal,qweasd,hummer,loveyou,michael1,patches,russia,jupiter,penguin,passion,cumshot,vfhbyf,honda,vladimir,sandman,passport,raider,bastard,123789,infinity,assman,bulldogs,fantasy,sucker,1234554321,horney,domino,budlight,disney,ironman,usuckballz1,softball,brutus,redrum,bigred,mnbvcxz,fktrcfylh,karina,marines,digger,kawasaki,cougar,fireman,oksana,monday,cunt,justice,nigger,super,wildcats,tinker,logitech,dancer,swordfis,avalon,everton,alexandr,motorola,patriots,hentai,madonna,pussy1,ducati,colorado,connor,juventus,galore,smooth,freeuser,warcraft,boogie,titanic,wolverin,elizabet,arizona,valentin,saints,asdfg,accord,test123,password123,christ,yfnfif,stinky,slut,spiderma,naughty,chopper,hello123,ncc1701d,extreme,skyline,poop,zombie,pearljam,123qweasd,froggy,awesome,vision,pirate,fylhtq,dreamer,bullet,predator,empire,123123a,kirill,charlie1,panthers,penis,skipper,nemesis,rasdzv3,peekaboo,rolltide,cardinal,psycho,danger,mookie,happy1,wanker,chevelle,manutd,goblue,9379992,hobbes,vegeta,fyfcnfcbz,852456,picard,159951,windows,loverboy,victory,vfrcbv,bambam,serega,123654789,turkey,tweety,galina,hiphop,rooster,changeme,berlin,taurus,suckme,polina,electric,avatar,134679,maksim,raptor,alpha1,hendrix,newport,bigcock,brazil,spring,a1b2c3,madmax,alpha,britney,sublime,darkside,bigman,wolfpack,classic,hercules,ronaldo,letmein1,1q2w3e,741852963,spiderman,blizzard,123456789q,cheyenne,cjkysirj,tiger1,wombat,bubba1,pandora,zxc123,holiday,wildcat,devils,horse,alabama,147852369,caesar,12312,buddy1,bondage,pussycat,pickle,shaggy,catch22,leather,chronic,a1b2c3d4,admin,qqq111,qaz123,airplane,kodiak,freepass,billybob,sunset,katana,phpbb,chocolat,snowman,angel1,stingray,firebird,wolves,zeppelin,detroit,pontiac,gundam,panzer,vagina,outlaw,redhead,tarheels,greenday,nastya,01011980,hardon,engineer,dragon1,hellfire,serenity,cobra,fireball,lickme,darkstar,1029384756,01011,mustang1,flash,124578,strike,beauty,pavilion,01012000,bobafett,dbrnjhbz,bigmac,bowling,chris1,ytrewq,natali,pyramid,rulez,welcome1,dodgers,apache,swimming,whynot,teens,trooper,fuckit,defender,precious,135790,packard,weasel,popeye,lucifer,cancer,icecream,142536,raven,swordfish,presario,viktor,rockstar,blonde,james1,wutang,spike,pimp,atlanta,airforce,thailand,casino,lennon,mouse,741852,hacker,bluebird,hawkeye,456123,theone,catfish,sailor,goldfish,nfnmzyf,tattoo,pervert,barbie,maxima,nipples,machine,trucks,wrangler,rocks,tornado,lights,cadillac,bubble,pegasus,madman,longhorn,browns,target,666999,eatme,qazwsx123,microsoft,dilbert,christia,baller,lesbian,shooter,xfiles,seattle,qazqaz,cthutq,amateur,prelude,corona,freaky,malibu,123qweasdzxc,assassin,246810,atlantis,integra,pussies,iloveu,lonewolf,dragons,monkey1,unicorn,software,bobcat,stealth,peewee,openup,753951,srinivas,zaqwsx,valentina,shotgun,trigger,veronika,bruins,coyote,babydoll,joker,dollar,lestat,rocky1,hottie,random,butterfly,wordpass,smiley,sweety,snake,chipper,woody,samurai,devildog,gizmo,maddie,soso123aljg,mistress,freedom1,flipper,express,hjvfirf,moose,cessna,piglet,polaris,teacher,montreal,cookies,wolfgang,scully,fatboy,wicked,balls,tickle,bunny,dfvgbh,foobar,transam,pepsi,fetish,oicu812,basketba,toshiba,hotstuff,sunday,booty,gambit,31415926,impala,stephani,jessica1,hooker,lancer,knicks,shamrock,fuckyou2,stinger,314159,redneck,deftones,squirt,siemens,blaster,trucker,subaru,renegade,ibanez,manson,swinger,reaper,blondie,mylove,galaxy,blahblah,enterpri,travel,1234abcd,babylon5,indiana,skeeter,master1,sugar,ficken,smoke,bigone,sweetpea,fucked,trfnthbyf,marino,escort,smitty,bigfoot,babes,larisa,trumpet,spartan,valera,babylon,asdfghj,yankees1,bigboobs,stormy,mister,hamlet,aardvark,butterfl,marathon,paladin,cavalier,manchester,skater,indigo,hornet,buckeyes,01011990,indians,karate,hesoyam,toronto,diamonds,chiefs,buckeye,1qaz2wsx3edc,highland,hotsex,charger,redman,passwor,maiden,drpepper,storm,pornstar,garden,12345678910,pencil,sherlock,timber,thuglife,insane,pizza,jungle,jesus1,aragorn,1a2b3c,hamster,david1,triumph,techno,lollol,pioneer,catdog,321654,fktrctq,morpheus,141627,pascal,shadow1,hobbit,wetpussy,erotic,consumer,blabla,justme,stones,chrissy,spartak,goforit,burger,pitbull,adgjmptw,italia,barcelona,hunting,colors,kissme,virgin,overlord,pebbles,sundance,emerald,doggy,racecar,irina,element,1478963,zipper,alpine,basket,goddess,poison,nipple,sakura,chichi,huskers,13579,pussys,q12345,ultimate,ncc1701e,blackie,nicola,rommel,matthew1,caserta,omega,geronimo,sammy1,trojan,123qwe123,philips,nugget,tarzan,chicks,aleksandr,bassman,trixie,portugal,anakin,dodger,bomber,superfly,madness,q1w2e3r4t5y6,loser,123asd,fatcat,ybrbnf,soldier,warlock,wrinkle1,desire,sexual,babe,seminole,alejandr,951753,11235813,westham,andrei,concrete,access14,weed,letmein2,ladybug,naked,christop,trombone,tintin,bluesky,rhbcnbyf,qazxswedc,onelove,cdtnkfyf,whore,vfvjxrf,titans,stallion,truck,hansolo,blue22,smiles,beagle,panama,kingkong,flatron,inferno,mongoose,connect,poiuyt,snatch,qawsed,juice,blessed,rocker,snakes,turbo,bluemoon,sex4me,finger,jamaica,a1234567,mulder,beetle,fuckyou1,passat,immortal,plastic,123454321,anthony1,whiskey,dietcoke,suck,spunky,magic1,monitor,cactus,exigen,planet,ripper,teen,spyder,apple1,nolimit,hollywoo,sluts,sticky,trunks,1234321,14789632,pickles,sailing,bonehead,ghbdtnbr,delta,charlott,rubber,911911,112358,molly1,yomama,hongkong,jumper,william1,ilovesex,faster,unreal,cumming,memphis,1123581321,nylons,legion,sebastia,shalom,pentium,geheim,werewolf,funtime,ferret,orion,curious,555666,niners,cantona,sprite,philly,pirates,abgrtyu,lollipop,eternity,boeing,super123,sweets,cooldude,tottenha,green1,jackoff,stocking,7895123,moomoo,martini,biscuit,drizzt,colt45,fossil,makaveli,snapper,satan666,maniac,salmon,patriot,verbatim,nasty,shasta,asdzxc,shaved,blackcat,raistlin,qwerty12345,punkrock,cjkywt,01012010,4128,waterloo,crimson,twister,oxford,musicman,seinfeld,biggie,condor,ravens,megadeth,wolfman,cosmos,sharks,banshee,keeper,foxtrot,gn56gn56,skywalke,velvet,black1,sesame,dogs,squirrel,privet,sunrise,wolverine,sucks,legolas,grendel,ghost,cats,carrot,frosty,lvbnhbq,blades,stardust,frog,qazwsxed,121314,coolio,brownie,groovy,twilight,daytona,vanhalen,pikachu,peanuts,licker,hershey,jericho,intrepid,ninja,1234567a,zaq123,lobster,goblin,punisher,strider,shogun,kansas,amadeus,seven7,jason1,neptune,showtime,muscle,oldman,ekaterina,rfrfirf,getsome,showme,111222333,obiwan,skittles,danni,tanker,maestro,tarheel,anubis,hannibal,anal,newlife,gothic,shark,fighter,blue123,blues,123456z,princes,slick,chaos,thunder1,sabine,1q2w3e4r5t6y,python,test1,mirage,devil,clover,tequila,chelsea1,surfing,delete,potato,chubby,panasonic,sandiego,portland,baggins,fusion,sooners,blackdog,buttons,californ,moscow,playtime,mature,1a2b3c4d,dagger,dima,stimpy,asdf123,gangster,warriors,iverson,chargers,byteme,swallow,liquid,lucky7,dingdong,nymets,cracker,mushroom,456852,crusader,bigguy,miami,dkflbvbh,bugger,nimrod,tazman,stranger,newpass,doodle,powder,gotcha,guardian,dublin,slapshot,septembe,147896325,pepsi1,milano,grizzly,woody1,knights,photos,2468,nookie,charly,rammstein,brasil,123321123,scruffy,munchkin,poopie,123098,kittycat,latino,walnut,1701,thegame,viper1,1passwor,kolobok,picasso,robert1,barcelon,bananas,trance,auburn,coltrane,eatshit,goodluck,starcraft,wheels,parrot,postal,blade,wisdom,pink,gorilla,katerina,pass123,andrew1,shaney14,dumbass,osiris,fuck_inside,oakland,discover,ranger1,spanking,lonestar,bingo,meridian,ping,heather1,dookie,stonecol,megaman,192837465,rjntyjr,ledzep,lowrider,25802580,richard1,firefly,griffey,racerx,paradox,ghjcnj,gangsta,zaq1xsw2,tacobell,weezer,sirius,halflife,buffett,shiloh,123698745,vertigo,sergei,aliens,sobaka,keyboard,kangaroo,sinner,soccer1,0.0.000,bonjour,socrates,chucky,hotboy,sprint,0007,sarah1,scarlet,celica,shazam,formula1,sommer,trebor,qwerasdf,jeep,mailcreated5240,bollox,asshole1,fuckface,honda1,rebels,vacation,lexmark,penguins,12369874,ragnarok,formula,258456,tempest,vfhecz,tacoma,qwertz,colombia,flames,rockon,duck,prodigy,wookie,dodgeram,mustangs,123qaz,sithlord,smoker,server,bang,incubus,scoobydo,oblivion,molson,kitkat,titleist,rescue,zxcv1234,carpet,1122,bigballs,tardis,jimbob,xanadu,blueeyes,shaman,mersedes,pooper,pussy69,golfing,hearts,mallard,12312312,kenwood,patrick1,dogg,cowboys1,oracle,123zxc,nuttertools,102938,topper,1122334455,shemale,sleepy,gremlin,yourmom,123987,gateway1,printer,monkeys,peterpan,mikey,kingston,cooler,analsex,jimbo,pa55word,asterix,freckles,birdman,frank1,defiant,aussie,stud,blondes,tatyana,445566,aspirine,mariners,jackal,deadhead,katrin,anime,rootbeer,frogger,polo,scooter1,hallo,noodles,thomas1,parola,shaolin,celine,11112222,plymouth,creampie,justdoit,ohyeah,fatass,assfuck,amazon,1234567q,kisses,magnus,camel,nopass,bosco,987456,6751520,harley1,putter,champs,massive,spidey,lightnin,camelot,letsgo,gizmodo,aezakmi,bones,caliente,12121,goodtime,thankyou,raiders1,brucelee,redalert,aquarius,456654,catherin,smokin,pooh,mypass,astros,roller,porkchop,sapphire,qwert123,kevin1,a1s2d3f4,beckham,atomic,rusty1,vanilla,qazwsxedcrfv,hunter1,kaktus,cxfcnmt,blacky,753159,elvis1,aggies,blackjac,bangkok,scream,123321q,iforgot,power1,kasper,abc12,buster1,slappy,shitty,veritas,chevrole,amber1,01012001,vader,amsterdam,jammer,primus,spectrum,eduard,granny,horny1,sasha1,clancy,usa123,satan,diamond1,hitler,avenger,1221,spankme,123456qwerty,simba,smudge,scrappy,labrador,john316,syracuse,front242,falcons,husker,candyman,commando,gator,pacman,delta1,pancho,krishna,fatman,clitoris,pineappl,lesbians,8j4ye3uz,barkley,vulcan,punkin,boner,celtics,monopoly,flyboy,romashka,hamburg,123456aa,lick,gangbang,223344,area51,spartans,aaa111,tricky,snuggles,drago,homerun,vectra,homer1,hermes,topcat,cuddles,infiniti,1234567890q,cosworth,goose,phoenix1,killer1,ivanov,bossman,qawsedrf,peugeot,exigent,doberman,durango,brandon1,plumber,telefon,horndog,laguna,rbhbkk,dawg,webmaster,breeze,beast,porsche9,beefcake,leopard,redbull,oscar1,topdog,godsmack,theking,pics,omega1,speaker,viktoria,fuckers,bowler,starbuck,gjkbyf,valhalla,anarchy,blacks,herbie,kingpin,starfish,nokia,loveit,achilles,906090,labtec,ncc1701a,fitness,jordan1,brando,arsenal1,bull,kicker,napass,desert,sailboat,bohica,tractor,hidden,muppet,jackson1,jimmy1,terminator,phillies,pa55w0rd,terror,farside,swingers,legacy,frontier,butthole,doughboy,jrcfyf,tuesday,sabbath,daniel1,nebraska,homers,qwertyuio,azamat,fallen,agent007,striker,camels,iguana,looker,pinkfloy,moloko,qwerty123456,dannyboy,luckydog,789654,pistol,whocares,charmed,skiing,select,franky,puppy,daniil,vladik,vette,vfrcbvrf,ihateyou,nevada,moneys,vkontakte,mandingo,puppies,666777,mystic,zidane,kotenok,dilligaf,budman,bunghole,zvezda,123457,triton,golfball,technics,trojans,panda,laptop,rookie,01011991,15426378,aberdeen,gustav,jethro,enterprise,igor,stripper,filter,hurrican,rfnthbyf,lespaul,gizmo1,butch,132435,dthjybrf,1366613,excalibu,963852,nofear,momoney,possum,cutter,oilers,moocow,cupcake,gbpltw,batman1,splash,svetik,super1,soleil,bogdan,melissa1,vipers,babyboy,tdutybq,lancelot,ccbill,keystone,passwort,flamingo,firefox,dogman,vortex,rebel,noodle,raven1,zaphod,killme,pokemon1,coolman,danila,designer,skinny,kamikaze,deadman,gopher,doobie,warhammer,deeznuts,freaks,engage,chevy1,steve1,apollo13,poncho,hammers,azsxdc,dracula,000007,sassy,bitch1,boots,deskjet,12332,macdaddy,mighty,rangers1,manchest,sterlin,casey1,meatball,mailman,sinatra,cthulhu,summer1,bubbas,cartoon,bicycle,eatpussy,truelove,sentinel,tolkien,breast,capone,lickit,summit,123456k,peter1,daisy1,kitty1,123456789z,crazy1,jamesbon,texas1,sexygirl,362436,sonic,billyboy,redhot,microsof,microlab,daddy1,rockets,iloveyo,fernand,gordon24,danie,cutlass,polska,star69,titties,pantyhos,01011985,thekid,aikido,gofish,mayday,1234qwe,coke,anfield,sony,lansing,smut,scotch,sexx,catman,73501505,hustler,saun,dfkthbz,passwor1,jenny1,azsxdcfv,cheers,irish1,gabrie,tinman,orioles,1225,charlton,fortuna,01011970,airbus,rustam,xtreme,bigmoney,zxcasd,retard,grumpy,huskies,boxing,4runner,kelly1,ultima,warlord,fordf150,oranges,rotten,asdfjkl,superstar,denali,sultan,bikini,saratoga,thor,figaro,sixers,wildfire,vladislav,128500,sparta,mayhem,greenbay,chewie,music1,number1,cancun,fabie,mellon,poiuytrewq,cloud9,crunch,bigtime,chicken1,piccolo,bigbird,321654987,billy1,mojo,01011981,maradona,sandro,chester1,bizkit,rjirfrgbde,789123,rightnow,jasmine1,hyperion,treasure,meatloaf,armani,rovers,jarhead,01011986,cruise,coconut,dragoon,utopia,davids,cosmo,rfhbyf,reebok,1066,charli,giorgi,sticks,sayang,pass1234,exodus,anaconda,zaqxsw,illini,woofwoof,emily1,sandy1,packer,poontang,govols,jedi,tomato,beaner,cooter,creamy,lionking,happy123,albatros,poodle,kenworth,dinosaur,greens,goku,happyday,eeyore,tsunami,cabbage,holyshit,turkey50,memorex,chaser,bogart,orgasm,tommy1,volley,whisper,knopka,ericsson,walleye,321123,pepper1,katie1,chickens,tyler1,corrado,twisted,100000,zorro,clemson,zxcasdqwe,tootsie,milana,zenith,fktrcfylhf,shania,frisco,polniypizdec0211,crazybab,junebug,fugazi,rereirf,vfvekz,1001,sausage,vfczyz,koshka,clapton,justin1,anhyeuem,condom,fubar,hardrock,skywalker,tundra,cocks,gringo,150781,canon,vitalik,aspire,stocks,samsung1,applepie,abc12345,arjay,gandalf1,boob,pillow,sparkle,gmoney,rockhard,lucky13,samiam,everest,hellyeah,bigsexy,skorpion,rfrnec,hedgehog,australi,candle,slacker,dicks,voyeur,jazzman,america1,bobby1,br0d3r,wolfie,vfksirf,1qa2ws3ed,13243546,fright,yosemite,temp,karolina,fart,barsik,surf,cheetah,baddog,deniska,starship,bootie,milena,hithere,kume,greatone,dildo,50cent,0.0.0.000,albion,amanda1,midget,lion,maxell,football1,cyclone,freeporn,nikola,bonsai,kenshin,slider,balloon,roadkill,killbill,222333,jerkoff,78945612,dinamo,tekken,rambler,goliath,cinnamon,malaka,backdoor,fiesta,packers1,rastaman,fletch,sojdlg123aljg,stefano,artemis,calico,nyjets,damnit,robotech,duchess,rctybz,hooter,keywest,18436572,hal9000,mechanic,pingpong,operator,presto,sword,rasputin,spank,bristol,faggot,shado,963852741,amsterda,321456,wibble,carrera,alibaba,majestic,ramses,duster,route66,trident,clipper,steeler,wrestlin,divine,kipper,gotohell,kingfish,snake1,passwords,buttman,pompey,viagra,zxcvbnm1,spurs,332211,slutty,lineage2,oleg,macross,pooter,brian1,qwert1,charles1,slave,jokers,yzerman,swimmer,ne1469,nwo4life,solnce,seamus,lolipop,pupsik,moose1,ivanova,secret1,matador,love69,420247,ktyjxrf,subway,cinder,vermont,pussie,chico,florian,magick,guiness,allsop,ghetto,flash1,a123456789,typhoon,dfkthf,depeche,skydive,dammit,seeker,fuckthis,crysis,kcj9wx5n,umbrella,r2d2c3po,123123q,snoopdog,critter,theboss,ding,162534,splinter,kinky,cyclops,jayhawk,456321,caramel,qwer123,underdog,caveman,onlyme,grapes,feather,hotshot,fuckher,renault,george1,sex123,pippen,000001,789987,floppy,cunts,megapass,1000,pornos,usmc,kickass,great1,quattro,135246,wassup,helloo,p0015123,nicole1,chivas,shannon1,bullseye,java,fishes,blackhaw,jamesbond,tunafish,juggalo,dkflbckfd,123789456,dallas1,translator,122333,beanie,alucard,gfhjkm123,supersta,magicman,ashley1,cohiba,xbox360,caligula,12131415,facial,7753191,dfktynbyf,cobra1,cigars,fang,klingon,bob123,safari,looser,10203,deepthroat,malina,200000,tazmania,gonzo,goalie,jacob1,monaco,cruiser,misfit,vh5150,tommyboy,marino13,yousuck,sharky,vfhufhbnf,horizon,absolut,brighton,123456r,death1,kungfu,maxx,forfun,mamapapa,enter1,budweise,banker,getmoney,kostya,qazwsx12,bigbear,vector,fallout,nudist,gunners,royals,chainsaw,scania,trader,blueboy,walrus,eastside,kahuna,qwerty1234,love123,steph,01011989,cypress,champ,undertaker,ybrjkfq,europa,snowboar,sabres,moneyman,chrisbln,minime,nipper,groucho,whitey,viewsonic,penthous,wolf359,fabric,flounder,coolguy,whitesox,passme,smegma,skidoo,thanatos,fucku2,snapple,dalejr,mondeo,thesims,mybaby,panasoni,sinbad,thecat,topher,frodo,sneakers,q123456,z1x2c3,alfa,chicago1,taylor1,ghjcnjnfr,cat123,olivier,cyber,titanium,0420,madison1,jabroni,dang,hambone,intruder,holly1,gargoyle,sadie1,static,poseidon,studly,newcastl,sexxxx,poppy,johannes,danzig,beastie,musica,buckshot,sunnyday,adonis,bluedog,bonkers,2128506,chrono,compute,spawn,01011988,turbo1,smelly,wapbbs,goldstar,ferrari1,778899,quantum,pisces,boomboom,gunnar,1024,test1234,florida1,nike,superman1,multiplelo,custom,motherlode,1qwerty,westwood,usnavy,apple123,daewoo,korn,stereo,sasuke,sunflowe,watcher,dharma,555777,mouse1,assholes,babyblue,123qwerty,marius,walmart,snoop,starfire,tigger1,paintbal,knickers,aaliyah,lokomotiv,theend,winston1,sapper,rover,erotica,scanner,racer,zeus,sexy69,doogie,bayern,joshua1,newbie,scott1,losers,droopy,outkast,martin1,dodge1,wasser,ufkbyf,rjycnfynby,thirteen,12345z,112211,hotred,deejay,hotpussy,192837,jessic,philippe,scout,panther1,cubbies,havefun,magpie,fghtkm,avalanch,newyork1,pudding,leonid,harry1,cbr600,audia4,bimmer,fucku,01011984,idontknow,vfvfgfgf,1357,aleksey,builder,01011987,zerocool,godfather,mylife,donuts,allmine,redfish,777888,sascha,nitram,bounce,333666,smokes,1x2zkg8w,rodman,stunner,zxasqw12,hoosier,hairy,beretta,insert,123456s,rtyuehe,francesc,tights,cheese1,micron,quartz,hockey1,gegcbr,searay,jewels,bogey,paintball,celeron,padres,bing,syncmaster,ziggy,simon1,beaches,prissy,diehard,orange1,mittens,aleksandra,queens,02071986,biggles,thongs,southpark,artur,twinkle,gretzky,rabota,cambiami,monalisa,gollum,chuckles,spike1,gladiator,whisky,spongebob,sexy1,03082006,mazafaka,meathead,4121,ou8122,barefoot,12345678q,cfitymrf,bigass,a1s2d3,kosmos,blessing,titty,clevelan,terrapin,ginger1,johnboy,maggot,clarinet,deeznutz,336699,stumpy,stoney,footbal,traveler,volvo,bucket,snapon,pianoman,hawkeyes,futbol,casanova,tango,goodboy,scuba,honey1,sexyman,warthog,mustard,abc1234,nickel,10203040,meowmeow,1012,boricua,prophet,sauron,12qwas,reefer,andromeda,crystal1,joker1,90210,goofy,loco,lovesex,triangle,whatsup,mellow,bengals,monster1,maste,01011910,lover1,love1,123aaa,sunshin,smeghead,hokies,sting,welder,rambo,cerberus,bunny1,rockford,monke,1q2w3e4r5,goldwing,gabriell,buzzard,crjhgbjy,james007,rainman,groove,tiberius,purdue,nokia6300,hayabusa,shou,jagger,diver,zigzag,poochie,usarmy,phish,redwood,redwing,12345679,salamander,silver1,abcd123,sputnik,boobie,ripple,eternal,12qw34er,thegreat,allstar,slinky,gesperrt,mishka,whiskers,pinhead,overkill,sweet1,rhfcjnrf,montgom240,sersolution,jamie1,starman,proxy,swords,nikolay,bacardi,rasta,badgirl,rebecca1,wildman,penny1,spaceman,1007,10101,logan1,hacked,bulldog1,helmet,windsor,buffy1,runescape,trapper,123451,banane,dbrnjh,ripken,12345qwe,frisky,shun,fester,oasis,lightning,ib6ub9,cicero,kool,pony,thedog,784512,01011992,megatron,illusion,edward1,napster,11223,squash,roadking,woohoo,19411945,hoosiers,01091989,tracker,bagira,midway,leavemealone,br549,14725836,235689,menace,rachel1,feng,laser,stoned,realmadrid,787898,balloons,tinkerbell,5551212,maria1,pobeda,heineken,sonics,moonlight,optimus,comet,orchid,02071982,jaybird,kashmir,12345678a,chuang,chunky,peach,mortgage,rulezzz,saleen,chuckie,zippy,fishing1,gsxr750,doghouse,maxim,reader,shai,buddah,benfica,chou,salomon,meister,eraser,blackbir,bigmike,starter,pissing,angus,deluxe,eagles1,hardcock,135792468,mian,seahawks,godfathe,bookworm,gregor,intel,talisman,blackjack,babyface,hawaiian,dogfood,zhong,01011975,sancho,ludmila,medusa,mortimer,123456654321,roadrunn,just4me,stalin,01011993,handyman,alphabet,pizzas,calgary,clouds,password2,cgfhnfr,f**k,cubswin,gong,lexus,max123,xxx123,digital1,gfhjkm1,7779311,missy1,michae,beautifu,gator1,1005,pacers,buddie,chinook,heckfy,dutchess,sally1,breasts,beowulf,darkman,jenn,tiffany1,zhei,quan,qazwsx1,satana,shang,idontkno,smiths,puddin,nasty1,teddybea,valkyrie,passwd,chao,boxster,killers,yoda,cheater,inuyasha,beast1,wareagle,foryou,dragonball,mermaid,bhbirf,teddy1,dolphin1,misty1,delphi,gromit,sponge,qazzaq,fytxrf,gameover,diao,sergi,beamer,beemer,kittykat,rancid,manowar,adam12,diggler,assword,austin1,wishbone,gonavy,sparky1,fisting,thedude,sinister,1213,venera,novell,salsero,jayden,fuckoff1,linda1,vedder,02021987,1pussy,redline,lust,jktymrf,02011985,dfcbkbq,dragon12,chrome,gamecube,titten,cong,bella1,leng,02081988,eureka,bitchass,147369,banner,lakota,123321a,mustafa,preacher,hotbox,02041986,z1x2c3v4,playstation,01011977,claymore,electra,checkers,zheng,qing,armagedon,02051986,wrestle,svoboda,bulls,nimbus,alenka,madina,newpass6,onetime,aa123456,bartman,02091987,silverad,electron,12345t,devil666,oliver1,skylar,rhtdtlrj,gobucks,johann,12011987,milkman,02101985,camper,thunderb,bigbutt,jammin,davide,cheeks,goaway,lighter,claudi,thumbs,pissoff,ghostrider,cocaine,teng,squall,lotus,hootie,blackout,doitnow,subzero,02031986,marine1,02021988,pothead,123456qw,skate,1369,peng,antoni,neng,miao,bcfields,1492,marika,794613,musashi,tulips,nong,piao,chai,ruan,southpar,02061985,nude,mandarin,654123,ninjas,cannabis,jetski,xerxes,zhuang,kleopatra,dickie,bilbo,pinky,morgan1,1020,1017,dieter,baseball1,tottenham,quest,yfnfkmz,dirtbike,1234567890a,mango,jackson5,ipswich,iamgod,02011987,tdutybz,modena,qiao,slippery,qweasd123,bluefish,samtron,toon,111333,iscool,02091986,petrov,fuzzy,zhou,1357924680,mollydog,deng,02021986,1236987,pheonix,zhun,ghblehjr,othello,starcraf,000111,sanfran,a11111,cameltoe,badman,vasilisa,jiang,1qaz2ws,luan,sveta,12qw12,akira,chuai,369963,cheech,beatle,pickup,paloma,01011983,caravan,elizaveta,gawker,banzai,pussey,mullet,seng,bingo1,bearcat,flexible,farscape,borussia,zhuai,templar,guitar1,toolman,yfcntymrf,chloe1,xiang,slave1,guai,nuggets,02081984,mantis,slim,scorpio1,fyutkbyf,thedoors,02081987,02061986,123qq123,zappa,fergie,7ugd5hip2j,huai,asdfzxcv,sunflower,pussyman,deadpool,bigtit,01011982,love12,lassie,skyler,gatorade,carpedie,jockey,mancity,spectre,02021984,cameron1,artemka,reng,02031984,iomega,jing,moritz,spice,rhino,spinner,heater,zhai,hover,talon,grease,qiong,corleone,ltybcrf,tian,cowboy1,hippie,chimera,ting,alex123,02021985,mickey1,corsair,sonoma,aaron1,xxxpass,bacchus,webmaste,chuo,xyz123,chrysler,spurs1,artem,shei,cosmic,01020304,deutsch,gabriel1,123455,oceans,987456321,binladen,latinas,a12345678,speedo,buttercu,02081989,21031988,merlot,millwall,ceng,kotaku,jiong,dragonba,2580,stonecold,snuffy,01011999,02011986,hellos,blaze,maggie1,slapper,istanbul,bonjovi,babylove,mazda,bullfrog,phoeni,meng,porsche1,nomore,02061989,bobdylan,capslock,orion1,zaraza,teddybear,ntktajy,myname,rong,wraith,mets,niao,02041984,smokie,chevrolet,dialog,gfhjkmgfhjkm,dotcom,vadim,monarch,athlon,mikey1,hamish,pian,liang,coolness,chui,thoma,ramones,ciccio,chippy,eddie1,house1,ning,marker,cougars,jackpot,barbados,reds,pdtplf,knockers,cobalt,amateurs,dipshit,napoli,kilroy,pulsar,jayhawks,daemon,alexey,weng,shuang,9293709b13,shiner,eldorado,soulmate,mclaren,golfer1,andromed,duan,50spanks,sexyboy,dogshit,02021983,shuo,kakashka,syzygy,111111a,yeahbaby,qiang,netscape,fulham,120676,gooner,zhui,rainbow6,laurent,dog123,halifax,freeway,carlitos,147963,eastwood,microphone,monkey12,1123,persik,coldbeer,geng,nuan,danny1,fgtkmcby,entropy,gadget,just4fun,sophi,baggio,carlito,1234567891,02021989,02041983,specialk,piramida,suan,bigblue,salasana,hopeful,mephisto,bailey1,hack,annie1,generic,violetta,spencer1,arcadia,02051983,hondas,9562876,trainer,jones1,smashing,liao,159632,iceberg,rebel1,snooker,temp123,zang,matteo,fastball,q2w3e4r5,bamboo,fuckyo,shutup,astro,buddyboy,nikitos,redbird,maxxxx,shitface,02031987,kuai,kissmyass,sahara,radiohea,1234asdf,wildcard,maxwell1,patric,plasma,heynow,bruno1,shao,bigfish,misfits,sassy1,sheng,02011988,02081986,testpass,nanook,cygnus,licking,slavik,pringles,xing,1022,ninja1,submit,dundee,tiburon,pinkfloyd,yummy,shuai,guang,chopin,obelix,insomnia,stroker,1a2s3d4f,1223,playboy1,lazarus,jorda,spider1,homerj,sleeper,02041982,darklord,cang,02041988,02041987,tripod,magician,jelly,telephon,15975,vsjasnel12,pasword,iverson3,pavlov,homeboy,gamecock,amigo,brodie,budapest,yjdsqgfhjkm,reckless,02011980,pang,tiger123,2469,mason1,orient,01011979,zong,cdtnbr,maksimka,1011,bushido,taxman,giorgio,sphinx,kazantip,02101984,concorde,verizon,lovebug,georg,sam123,seadoo,qazwsxedc123,jiao,jezebel,pharmacy,abnormal,jellybea,maxime,puffy,islander,bunnies,jiggaman,drakon,010180,pluto,zhjckfd,12365,classics,crusher,mordor,hooligan,strawberry,02081985,scrabble,hawaii50,1224,wg8e3wjf,cthtuf,premium,arrow,123456qwe,mazda626,ramrod,tootie,rhjrjlbk,ghost1,1211,bounty,niang,02071984,goat,killer12,sweetnes,porno1,masamune,426hemi,corolla,mariposa,hjccbz,doomsday,bummer,blue12,zhao,bird33,excalibur,samsun,kirsty,buttfuck,kfhbcf,zhuo,marcello,ozzy,02021982,dynamite,655321,master12,123465,lollypop,stepan,1qa2ws,spiker,goirish,callum,michael2,moonbeam,attila,henry1,lindros,andrea1,sporty,lantern,12365478,nextel,violin,volcom,998877,water1,imation,inspiron,dynamo,citadel,placebo,clowns,tiao,02061988,tripper,dabears,haggis,merlin1,02031985,anthrax,amerika,iloveme,vsegda,burrito,bombers,snowboard,forsaken,katarina,a1a2a3,woofer,tigger2,fullmoon,tiger2,spock,hannah1,snoopy1,sexxxy,sausages,stanislav,cobain,robotics,exotic,green123,mobydick,senators,pumpkins,fergus,asddsa,147741,258852,windsurf,reddevil,vfitymrf,nevermind,nang,woodland,4417,mick,shui,q1q2q3,wingman,69696,superb,zuan,ganesh,pecker,zephyr,anastasiya,icu812,larry1,02081982,broker,zalupa,mihail,vfibyf,dogger,7007,paddle,varvara,schalke,1z2x3c,presiden,yankees2,tuning,poopy,02051982,concord,vanguard,stiffy,rjhjktdf,felix1,wrench,firewall,boxer,bubba69,popper,02011984,temppass,gobears,cuan,tipper,fuckme1,kamila,thong,puss,bigcat,drummer1,02031982,sowhat,digimon,tigers1,rang,jingle,bian,uranus,soprano,mandy1,dusty1,fandango,aloha,pumpkin1,postman,02061980,dogcat,bombay,pussy123,onetwo,highheel,pippo,julie1,laura1,pepito,beng,smokey1,stylus,stratus,reload,duckie,karen1,jimbo1,225588,369258,krusty,snappy,asdf12,electro,111qqq,kuang,fishin,clit,abstr,christma,qqqqq1,1234560,carnage,guyver,boxers,kittens,zeng,1000000,qwerty11,toaster,cramps,yugioh,02061987,icehouse,zxcvbnm123,pineapple,namaste,harrypotter,mygirl,falcon1,earnhard,fender1,spikes,nutmeg,01081989,dogboy,02091983,369852,softail,mypassword,prowler,bigboss,1112,harvest,heng,jubilee,killjoy,basset,keng,zaqxswcde,redsox1,biao,titan,misfit99,robot,wifey,kidrock,02101987,gameboy,enrico,1z2x3c4v,broncos1,arrows,havana,banger,cookie1,chriss,123qw,platypus,cindy1,lumber,pinball,foxy,london1,1023,05051987,02041985,password12,superma,longbow,radiohead,nigga,12051988,spongebo,qwert12345,abrakadabra,dodgers1,02101989,chillin,niceguy,pistons,hookup,santafe,bigben,jets,1013,vikings1,mankind,viktoriya,beardog,hammer1,02071980,reddwarf,magelan,longjohn,jennife,gilles,carmex2,02071987,stasik,bumper,doofus,slamdunk,pixies,garion,steffi,alessandro,beerman,niceass,warrior1,honolulu,134679852,visa,johndeer,mother1,windmill,boozer,oatmeal,aptiva,busty,delight,tasty,slick1,bergkamp,badgers,guitars,puffin,02091981,nikki1,irishman,miller1,zildjian,123000,airwolf,magnet,anai,install,02041981,02061983,astra,romans,megan1,mudvayne,freebird,muscles,dogbert,02091980,02091984,snowflak,01011900,mang,joseph1,nygiants,playstat,junior1,vjcrdf,qwer12,webhompas,giraffe,pelican,jefferso,comanche,bruiser,monkeybo,kjkszpj,123456l,micro,albany,02051987,angel123,epsilon,aladin,death666,hounddog,josephin,altima,chilly,02071988,78945,ultra,02041979,gasman,thisisit,pavel,idunno,kimmie,05051985,paulie,ballin,medion,moondog,manolo,pallmall,climber,fishbone,genesis1,153624,toffee,tbone,clippers,krypton,jerry1,picturs,compass,111111q,02051988,1121,02081977,sairam,getout,333777,cobras,22041987,bigblock,severin,booster,norwich,whiteout,ctrhtn,123456m,02061984,hewlett,shocker,fuckinside,02031981,chase1,white1,versace,123456789s,basebal,iloveyou2,bluebell,08031986,anthon,stubby,foreve,undertak,werder,saiyan,mama123,medic,chipmunk,mike123,mazdarx7,qwe123qwe,bowwow,kjrjvjnbd,celeb,choochoo,demo,lovelife,02051984,colnago,lithium,02051989,15051981,zzzxxx,welcom,anastasi,fidelio,franc,26061987,roadster,stone55,drifter,hookem,hellboy,1234qw,cbr900rr,sinned,good123654,storm1,gypsy,zebra,zachary1,toejam,buceta,02021979,testing1,redfox,lineage,mike1,highbury,koroleva,nathan1,washingt,02061982,02091985,vintage,redbaron,dalshe,mykids,11051987,macbeth,julien,james123,krasotka,111000,10011986,987123,pipeline,tatarin,sensei,codered,komodo,frogman,7894561230,nascar24,juicy,01031988,redrose,mydick,pigeon,tkbpfdtnf,smirnoff,1215,spam,winner1,flyfish,moskva,81fukkc,21031987,olesya,starligh,summer99,13041988,fishhead,freesex,super12,06061986,azazel,scoobydoo,02021981,cabron,yogibear,sheba1,konstantin,tranny,chilli,terminat,ghbywtccf,slowhand,soccer12,cricket1,fuckhead,1002,seagull,achtung,blam,bigbob,bdsm,nostromo,survivor,cnfybckfd,lemonade,boomer1,rainbow1,rober,irinka,cocksuck,peaches1,itsme,sugar1,zodiac,upyours,dinara,135791,sunny1,chiara,johnson1,02041989,solitude,habibi,sushi,markiz,smoke1,rockies,catwoman,johnny1,qwerty7,bearcats,username,01011978,wanderer,ohshit,02101986,sigma,stephen1,paradigm,02011989,flanker,sanity,jsbach,spotty,bologna,fantasia,chevys,borabora,cocker,74108520,123ewq,12021988,01061990,gtnhjdbx,02071981,01011960,sundevil,3000gt,mustang6,gagging,maggi,armstron,yfnfkb,13041987,revolver,02021976,trouble1,madcat,jeremy1,jackass1,volkswag,30051985,corndog,pool6123,marines1,03041991,pizza1,piggy,sissy,02031979,sunfire,angelus,undead,24061986,14061991,wildbill,shinobi,45m2do5bs,123qwer,21011989,cleopatr,lasvega,hornets,amorcit,11081989,coventry,nirvana1,destin,sidekick,20061988,02081983,gbhfvblf,sneaky,bmw325,22021989,nfytxrf,sekret,kalina,zanzibar,hotone,qazws,wasabi,heidi1,highlander,blues1,hitachi,paolo,23041987,slayer1,simba1,02011981,tinkerbe,kieran,01121986,172839,boiler,1125,bluesman,waffle,asdfgh01,threesom,conan,1102,reflex,18011987,nautilus,everlast,fatty,vader1,01071986,cyborg,ghbdtn123,birddog,rubble,02071983,suckers,02021973,skyhawk,12qw12qw,dakota1,joebob,nokia6233,woodie,longdong,lamer,troll,ghjcnjgfhjkm,420000,boating,nitro,armada,messiah,1031,penguin1,02091989,americ,02071989,redeye,asdqwe123,07071987,monty1,goten,spikey,sonata,635241,tokiohotel,sonyericsson,citroen,compaq1,1812,umpire,belmont,jonny,pantera1,nudes,palmtree,14111986,fenway,bighead,razor,gryphon,andyod22,aaaaa1,taco,10031988,enterme,malachi,dogface,reptile,01041985,dindom,handball,marseille,candy1,19101987,torino,tigge,matthias,viewsoni,13031987,stinker,evangelion,24011985,123456123,rampage,sandrine,02081980,thecrow,astral,28041987,sprinter,private1,seabee,shibby,02101988,25081988,fearless,junkie,01091987,aramis,antelope,draven,fuck1,mazda6,eggman,02021990,barselona,buddy123,19061987,fyfnjkbq,nancy1,12121990,10071987,sluggo,kille,hotties,irishka,zxcasdqwe123,shamus,fairlane,honeybee,soccer10,13061986,fantomas,17051988,10051987,20111986,gladiato,karachi,gambler,gordo,01011995,biatch,matthe,25800852,papito,excite,buffalo1,bobdole,cheshire,player1,28021992,thewho,10101986,pinky1,mentor,tomahawk,brown1,03041986,bismillah,bigpoppa,ijrjkfl,01121988,runaway,08121986,skibum,studman,helper,squeak,holycow,manfred,harlem,glock,gideon,987321,14021985,yellow1,wizard1,margarit,success1,medved,sf49ers,lambda,pasadena,johngalt,quasar,1776,02031980,coldplay,amand,playa,bigpimp,04041991,capricorn,elefant,sweetness,bruce1,luca,dominik,10011990,biker,09051945,datsun,elcamino,trinitro,malice,audi,voyager1,02101983,joe123,carpente,spartan1,mario1,glamour,diaper,12121985,22011988,winter1,asimov,callisto,nikolai,pebble,02101981,vendetta,david123,boytoy,11061985,02031989,iloveyou1,stupid1,cayman,casper1,zippo,yamahar1,wildwood,foxylady,calibra,02041980,27061988,dungeon,leedsutd,30041986,11051990,bestbuy,antares,dominion,24680,01061986,skillet,enforcer,derparol,01041988,196969,29071983,f00tball,purple1,mingus,25031987,21031990,remingto,giggles,klaste,3x7pxr,01011994,coolcat,29051989,megane,20031987,02051980,04041988,synergy,0000007,macman,iforget,adgjmp,vjqgfhjkm,28011987,rfvfcenhf,16051989,25121987,16051987,rogue,mamamia,08051990,20091991,1210,carnival,bolitas,paris1,dmitriy,dimas,05051989,papillon,knuckles,29011985,hola,tophat,28021990,100500,cutiepie,devo,415263,ducks,ghjuhfvvf,asdqwe,22021986,freefall,parol,02011983,zarina,buste,vitamin,warez,bigones,17061988,baritone,jamess,twiggy,mischief,bitchy,hetfield,1003,dontknow,grinch,sasha_007,18061990,12031985,12031987,calimero,224466,letmei,15011987,acmilan,alexandre,02031977,08081988,whiteboy,21051991,barney1,02071978,money123,18091985,bigdawg,02031988,cygnusx1,zoloto,31011987,firefigh,blowfish,screamer,lfybbk,20051988,chelse,11121986,01031989,harddick,sexylady,30031988,02041974,auditt,pizdec,kojak,kfgjxrf,20091988,123456ru,wp2003wp,1204,15051990,slugger,kordell1,03031986,swinging,01011974,02071979,rockie,dimples,1234123,1dragon,trucking,rusty2,roger1,marijuana,kerouac,02051978,08031985,paco,thecure,keepout,kernel,noname123,13121985,francisc,bozo,02011982,22071986,02101979,obsidian,12345qw,spud,tabasco,02051985,jaguars,dfktynby,kokomo,popova,notused,sevens,4200,magneto,02051976,roswell,15101986,21101986,lakeside,bigbang,aspen,little1,14021986,loki,suckmydick,strawber,carlos1,nokian73,dirty1,joshu,25091987,16121987,02041975,advent,17011987,slimshady,whistler,10101990,stryker,22031984,15021985,01031985,blueball,26031988,ksusha,bahamut,robocop,w_pass,chris123,impreza,prozac,bookie,bricks,13021990,alice1,cassandr,11111q,john123,4ever,korova,02051973,142857,25041988,paramedi,eclipse1,salope,07091990,1124,darkangel,23021986,999666,nomad,02051981,smackdow,01021990,yoyoma,argentin,moonligh,57chevy,bootys,hardone,capricor,galant,spanker,dkflbr,24111989,magpies,krolik,21051988,cevthrb,cheddar,22041988,bigbooty,scuba1,qwedsa,duffman,bukkake,acura,johncena,sexxy,p@ssw0rd,258369,cherries,12345s,asgard,leopold,fuck123,mopar,lalakers,dogpound,matrix1,crusty,spanner,kestrel,fenris,universa,peachy,assasin,lemmein,eggplant,hejsan,canucks,wendy1,doggy1,aikman,tupac,turnip,godlike,fussball,golden1,19283746,april1,django,petrova,captain1,vincent1,ratman,taekwondo,chocha,serpent,perfect1,capetown,vampir,amore,gymnast,timeout,nbvjatq,blue32,ksenia,k.lvbkf,nazgul,budweiser,clutch,mariya,sylveste,02051972,beaker,cartman1,q11111,sexxx,forever1,loser1,marseill,magellan,vehpbr,sexgod,jktxrf,hallo123,132456,liverpool1,southpaw,seneca,camden,357159,camero,tenchi,johndoe,145236,roofer,741963,vlad,02041978,fktyrf,zxcv123,wingnut,wolfpac,notebook,pufunga7782,brandy1,biteme1,goodgirl,redhat,02031978,challeng,millenium,hoops,maveric,noname,angus1,gaell,onion,olympus,sabrina1,ricard,sixpack,gratis,gagged,camaross,hotgirls,flasher,02051977,bubba123,goldfing,moonshin,gerrard,volkov,sonyfuck,mandrake,258963,tracer,lakers1,asians,susan1,money12,helmut,boater,diablo2,1234zxcv,dogwood,bubbles1,happy2,randy1,aries,beach1,marcius2,navigator,goodie,hellokitty,fkbyjxrf,earthlink,lookout,jumbo,opendoor,stanley1,marie1,12345m,07071977,ashle,wormix,murzik,02081976,lakewood,bluejays,loveya,commande,gateway2,peppe,01011976,7896321,goth,oreo,slammer,rasmus,faith1,knight1,stone1,redskin,ironmaiden,gotmilk,destiny1,dejavu,1master,midnite,timosha,espresso,delfin,toriamos,oberon,ceasar,markie,1a2s3d,ghhh47hj7649,vjkjrj,daddyo,dougie,disco,auggie,lekker,therock1,ou8123,start1,noway,p4ssw0rd,shadow12,333444,saigon,2fast4u,capecod,23skidoo,qazxcv,beater,bremen,aaasss,roadrunner,peace1,12345qwer,02071975,platon,bordeaux,vbkfirf,135798642,test12,supernov,beatles1,qwert40,optimist,vanessa1,prince1,ilovegod,nightwish,natasha1,alchemy,bimbo,blue99,patches1,gsxr1000,richar,hattrick,hott,solaris,proton,nevets,enternow,beavis1,amigos,159357a,ambers,lenochka,147896,suckdick,shag,intercourse,blue1234,spiral,02061977,tosser,ilove,02031975,cowgirl,canuck,q2w3e4,munch,spoons,waterboy,123567,evgeniy,savior,zasada,redcar,mamacita,terefon,globus,doggies,htubcnhfwbz,1008,cuervo,suslik,azertyui,limewire,houston1,stratfor,steaua,coors,tennis1,12345qwerty,stigmata,derf,klondike,patrici,marijuan,hardball,odyssey,nineinch,boston1,pass1,beezer,sandr,charon,power123,a1234,vauxhall,875421,awesome1,reggae,boulder,funstuff,iriska,krokodil,rfntymrf,sterva,champ1,bball,peeper,m123456,toolbox,cabernet,sheepdog,magic32,pigpen,02041977,holein1,lhfrjy,banan,dabomb,natalie1,jennaj,montana1,joecool,funky,steven1,ringo,junio,sammy123,qqqwww,baltimor,footjob,geezer,357951,mash4077,cashmone,pancake,monic,grandam,bongo,yessir,gocubs,nastia,vancouve,barley,dragon69,watford,ilikepie,02071976,laddie,123456789m,hairball,toonarmy,pimpdadd,cvthnm,hunte,davinci,lback,sophie1,firenze,q1234567,admin1,bonanza,elway7,daman,strap,azert,wxcvbn,afrika,theforce,123456t,idefix,wolfen,houdini,scheisse,default,beech,maserati,02061976,sigmachi,dylan1,bigdicks,eskimo,mizzou,02101976,riccardo,egghead,111777,kronos,ghbrjk,chaos1,jomama,rfhnjirf,rodeo,dolemite,cafc91,nittany,pathfind,mikael,password9,vqsablpzla,purpl,gabber,modelsne,myxworld,hellsing,punker,rocknrol,fishon,fuck69,02041976,lolol,twinkie,tripleh,cirrus,redbone,killer123,biggun,allegro,gthcbr,smith1,wanking,bootsy,barry1,mohawk,koolaid,5329,futurama,samoht,klizma,996633,lobo,honeys,peanut1,556677,zxasqw,joemama,javelin,samm,223322,sandra1,flicks,montag,nataly,3006,tasha1,1235789,dogbone,poker1,p0o9i8u7,goodday,smoothie,toocool,max333,metroid,archange,vagabond,billabon,22061941,tyson1,02031973,darkange,skateboard,evolutio,morrowind,wizards,frodo1,rockin,cumslut,plastics,zaqwsxcde,5201314,doit,outback,bumble,dominiqu,persona,nevermore,alinka,02021971,forgetit,sexo,all4one,c2h5oh,petunia,sheeba,kenny1,elisabet,aolsucks,woodstoc,pumper,02011975,fabio,granada,scrapper,123459,minimoni,q123456789,breaker,1004,02091976,ncc74656,slimshad,friendster,austin31,wiseguy,donner,dilbert1,132465,blackbird,buffet,jellybean,barfly,behappy,01011971,carebear,fireblad,02051975,boxcar,cheeky,kiteboy,hello12,panda1,elvisp,opennow,doktor,alex12,02101977,pornking,flamengo,02091975,snowbird,lonesome,robin1,11111a,weed420,baracuda,bleach,12345abc,nokia1,metall,singapor,mariner,herewego,dingo,tycoon,cubs,blunts,proview,123456789d,kamasutra,lagnaf,vipergts,navyseal,starwar,masterbate,wildone,peterbil,cucumber,butkus,123qwert,climax,deniro,gotribe,cement,scooby1,summer69,harrier,shodan,newyear,02091977,starwars1,romeo1,sedona,harald,doubled,sasha123,bigguns,salami,awnyce,kiwi,homemade,pimping,azzer,bradley1,warhamme,linkin,dudeman,qwe321,pinnacle,maxdog,flipflop,lfitymrf,fucker1,acidburn,esquire,sperma,fellatio,jeepster,thedon,sexybitch,pookey,spliff,widget,vfntvfnbrf,trinity1,mutant,samuel1,meliss,gohome,1q2q3q,mercede,comein,grin,cartoons,paragon,henrik,rainyday,pacino,senna,bigdog1,alleycat,12345qaz,narnia,mustang2,tanya1,gianni,apollo11,wetter,clovis,escalade,rainbows,freddy1,smart1,daisydog,s123456,cocksucker,pushkin,lefty,sambo,fyutkjxtr,hiziad,boyz,whiplash,orchard,newark,adrenalin,1598753,bootsie,chelle,trustme,chewy,golfgti,tuscl,ambrosia,5wr2i7h8,penetration,shonuf,jughead,payday,stickman,gotham,kolokol,johnny5,kolbasa,stang,puppydog,charisma,gators1,mone,jakarta,draco,nightmar,01011973,inlove,laetitia,02091973,tarpon,nautica,meadow,0192837465,luckyone,14881488,chessie,goldeney,tarakan,69camaro,bungle,wordup,interne,fuckme2,515000,dragonfl,sprout,02081974,gerbil,bandit1,02071971,melanie1,phialpha,camber,kathy1,adriano,gonzo1,10293847,bigjohn,bismarck,7777777a,scamper,12348765,rabbits,222777,bynthytn,dima123,alexander1,mallorca,dragster,favorite6,beethove,burner,cooper1,fosters,hello2,normandy,777999,sebring,1michael,lauren1,blake1,killa,02091971,nounours,trumpet1,thumper1,playball,xantia,rugby1,rocknroll,guillaum,angela1,strelok,prosper,buttercup,masterp,dbnfkbr,cambridg,venom,treefrog,lumina,1234566,supra,sexybabe,freee,shen,frogs,driller,pavement,grace1,dicky,checker,smackdown,pandas,cannibal,asdffdsa,blue42,zyjxrf,nthvbyfnjh,melrose,neon,jabber,gamma,369258147,aprilia,atticus,benessere,catcher,skipper1,azertyuiop,sixty9,thierry,treetop,jello,melons,123456789qwe,tantra,buzzer,catnip,bouncer,computer1,sexyone,ananas,young1,olenka,sexman,mooses,kittys,sephiroth,contra,hallowee,skylark,sparkles,777333,1qazxsw23edc,lucas1,q1w2e3r,gofast,hannes,amethyst,ploppy,flower2,hotass,amatory,volleyba,dixie1,bettyboo,ticklish,02061974,frenchy,phish1,murphy1,trustno,02061972,leinad,mynameis,spooge,jupiter1,hyundai,frosch,junkmail,abacab,marbles,32167,casio,sunshine1,wayne1,longhair,caster,snicker,02101973,gannibal,skinhead,hansol,gatsby,segblue2,montecar,plato,gumby,kaboom,matty,bosco1,888999,jazzy,panter,jesus123,charlie2,giulia,candyass,sex69,travis1,farmboy,special1,02041973,letsdoit,password01,allison1,abcdefg1,notredam,ilikeit,789654123,liberty1,rugger,uptown,alcatraz,123456w,airman,007bond,navajo,kenobi,terrier,stayout,grisha,frankie1,fluff,1qazzaq1,1234561,virginie,1234568,tango1,werdna,octopus,fitter,dfcbkbcf,blacklab,115599,montrose,allen1,supernova,frederik,ilovepussy,justice1,radeon,playboy2,blubber,sliver,swoosh,motocros,lockdown,pearls,thebear,istheman,pinetree,biit,1234rewq,rustydog,tampabay,titts,babycake,jehovah,vampire1,streaming,collie,camil,fidelity,calvin1,stitch,gatit,restart,puppy1,budgie,grunt,capitals,hiking,dreamcas,zorro1,321678,riffraff,makaka,playmate,napalm,rollin,amstel,zxcvb123,samanth,rumble,fuckme69,jimmys,951357,pizzaman,1234567899,tralala,delpiero,alexi,yamato,itisme,1million,vfndtq,kahlua,londo,wonderboy,carrots,tazz,ratboy,rfgecnf,02081973,nico,fujitsu,tujhrf,sergbest,blobby,02051970,sonic1,1357911,smirnov,video1,panhead,bucky,02031974,44332211,duffer,cashmoney,left4dead,bagpuss,salman,01011972,titfuck,66613666,england1,malish,dresden,lemans,darina,zapper,123456as,123456qqq,met2002,02041972,redstar,blue23,1234509876,pajero,booyah,please1,tetsuo,semper,finder,hanuman,sunlight,123456n,02061971,treble,cupoi,password99,dimitri,3ip76k2,popcorn1,lol12345,stellar,nympho,shark1,keith1,saskia,bigtruck,revoluti,rambo1,asd222,feelgood,phat,gogators,bismark,cola,puck,furball,burnout,slonik,bowtie,mommy1,icecube,fabienn,mouser,papamama,rolex,giants1,blue11,trooper1,momdad,iklo,morten,rhubarb,gareth,123456d,blitz,canada1,r2d2,brest,tigercat,usmarine,lilbit,benny1,azrael,lebowski,12345r,madagaskar,begemot,loverman,dragonballz,italiano,mazda3,naughty1,onions,diver1,cyrano,capcom,asdfg123,forlife,fisherman,weare138,requiem,mufasa,alpha123,piercing,hellas,abracadabra,duckman,caracas,macintos,02011971,jordan2,crescent,fduecn,hogtied,eatmenow,ramjet,18121812,kicksass,whatthe,discus,rfhfvtkmrf,rufus1,sqdwfe,mantle,vegitto,trek,dan123,paladin1,rudeboy,liliya,lunchbox,riversid,acapulco,libero,dnsadm,maison,toomuch,boobear,hemlock,sextoy,pugsley,misiek,athome,migue,altoids,marcin,123450,rhfcfdbwf,jeter2,rhinos,rjhjkm,mercury1,ronaldinho,shampoo,makayla,kamilla,masterbating,tennesse,holger,john1,matchbox,hores,poptart,parlament,goodyear,asdfgh1,02081970,hardwood,alain,erection,hfytnrb,highlife,implants,benjami,dipper,jeeper,bendover,supersonic,babybear,laserjet,gotenks,bama,natedogg,aol123,pokemo,rabbit1,raduga,sopranos,cashflow,menthol,pharao,hacking,334455,ghjcnbnenrf,lizzy,muffin1,pooky,penis1,flyer,gramma,dipset,becca,ireland1,diana1,donjuan,pong,ziggy1,alterego,simple1,cbr900,logger,111555,claudia1,cantona7,matisse,ljxtymrf,victori,harle,mamas,encore,mangos,iceman1,diamon,alexxx,tiamat,5000,desktop,mafia,smurf,princesa,shojou,blueberr,welkom,maximka,123890,123q123,tammy1,bobmarley,clips,demon666,ismail,termite,laser1,missie,altair,donna1,bauhaus,trinitron,mogwai,flyers88,juniper,nokia5800,boroda,jingles,qwerasdfzxcv,shakur,777666,legos,mallrats,1qazxsw,goldeneye,tamerlan,julia1,backbone,spleen,49ers,shady,darkone,medic1,justi,giggle,cloudy,aisan,douche,parkour,bluejay,huskers1,redwine,1qw23er4,satchmo,1231234,nineball,stewart1,ballsack,probes,kappa,amiga,flipper1,dortmund,963258,trigun,1237895,homepage,blinky,screwy,gizzmo,belkin,chemist,coolhand,chachi,braves1,thebest,greedisgood,pro100,banana1,101091m,123456g,wonderfu,barefeet,8inches,1111qqqq,kcchiefs,qweasdzxc123,metal1,jennifer1,xian,asdasd123,pollux,cheerleaers,fruity,mustang5,turbos,shopper,photon,espana,hillbill,oyster,macaroni,gigabyte,jesper,motown,tuxedo,buster12,triplex,cyclones,estrell,mortis,holla,456987,fiddle,sapphic,jurassic,thebeast,ghjcnjq,baura,spock1,metallica1,karaoke,nemrac58,love1234,02031970,flvbybcnhfnjh,frisbee,diva,ajax,feathers,flower1,soccer11,allday,mierda,pearl1,amature,marauder,333555,redheads,womans,egorka,godbless,159263,nimitz,aaaa1111,sashka,madcow,socce,greywolf,baboon,pimpdaddy,123456789r,reloaded,lancia,rfhfylfi,dicker,placid,grimace,22446688,olemiss,whores,culinary,wannabe,maxi,1234567aa,amelie,riley1,trample,phantom1,baberuth,bramble,asdfqwer,vides,4you,abc123456,taichi,aztnm,smother,outsider,hakr,blackhawk,bigblack,girlie,spook,valeriya,gianluca,freedo,1q2q3q4q,handbag,lavalamp,cumm,pertinant,whatup,nokia123,redlight,patrik,111aaa,poppy1,dfytxrf,aviator,sweeps,kristin1,cypher,elway,yinyang,access1,poophead,tucson,noles1,monterey,waterfal,dank,dougal,918273,suede,minnesot,legman,bukowski,ganja,mammoth,riverrat,asswipe,daredevi,lian,arizona1,kamikadze,alex1234,smile1,angel2,55bgates,bellagio,0001,wanrltw,stiletto,lipton,arsena,biohazard,bbking,chappy,tetris,as123456,darthvad,lilwayne,nopassword,7412369,123456789987654321,natchez,glitter,14785236,mytime,rubicon,moto,pyon,wazzup,tbird,shane1,nightowl,getoff,beckham7,trueblue,hotgirl,nevermin,deathnote,13131,taffy,bigal,copenhag,apricot,gallaries,dtkjcbgtl,totoro,onlyone,civicsi,jesse1,baby123,sierra1,festus,abacus,sickboy,fishtank,fungus,charle,golfpro,teensex,mario66,seaside,aleksei,rosewood,blackberry,1020304050,bedlam,schumi,deerhunt,contour,darkelf,surveyor,deltas,pitchers,741258963,dipstick,funny1,lizzard,112233445566,jupiter2,softtail,titman,greenman,z1x2c3v4b5,smartass,12345677,notnow,myworld,nascar1,chewbacc,nosferatu,downhill,dallas22,kuan,blazers,whales,soldat,craving,powerman,yfcntyf,hotrats,cfvceyu,qweasdzx,princess1,feline,qqwwee,chitown,1234qaz,mastermind,114477,dingbat,care1839,standby,kismet,atreides,dogmeat,icarus,monkeyboy,alex1,mouses,nicetits,sealteam,chopper1,crispy,winter99,rrpass1,myporn,myspace1,corazo,topolino,ass123,lawman,muffy,orgy,1love,passord,hooyah,ekmzyf,pretzel,amonra,nestle,01011950,jimbeam,happyman,z12345,stonewal,helios,manunited,harcore,dick1,gaymen,2hot4u,light1,qwerty13,kakashi,pjkjnj,alcatel,taylo,allah,buddydog,ltkmaby,mongo,blonds,start123,audia6,123456v,civilwar,bellaco,turtles,mustan,deadspin,aaa123,fynjirf,lucky123,tortoise,amor,summe,waterski,zulu,drag0n,dtxyjcnm,gizmos,strife,interacial,pusyy,goose1,bear1,equinox,matri,jaguar1,tobydog,sammys,nachos,traktor,bryan1,morgoth,444555,dasani,miami1,mashka,xxxxxx1,ownage,nightwin,hotlips,passmast,cool123,skolko,eldiablo,manu,1357908642,screwyou,badabing,foreplay,hydro,kubrick,seductive,demon1,comeon,galileo,aladdin,metoo,happines,902100,mizuno,caddy,bizzare,girls1,redone,ohmygod,sable,bonovox,girlies,hamper,opus,gizmodo1,aaabbb,pizzahut,999888,rocky2,anton1,kikimora,peavey,ocelot,a1a2a3a4,2wsx3edc,jackie1,solace,sprocket,galary,chuck1,volvo1,shurik,poop123,locutus,virago,wdtnjxtr,tequier,bisexual,doodles,makeitso,fishy,789632145,nothing1,fishcake,sentry,libertad,oaktree,fivestar,adidas1,vegitta,mississi,spiffy,carme,neutron,vantage,agassi,boners,123456789v,hilltop,taipan,barrage,kenneth1,fister,martian,willem,lfybkf,bluestar,moonman,ntktdbpjh,paperino,bikers,daffy,benji,quake,dragonfly,suckcock,danilka,lapochka,belinea,calypso,asshol,camero1,abraxas,mike1234,womam,q1q2q3q4q5,youknow,maxpower,pic's,audi80,sonora,raymond1,tickler,tadpole,belair,crazyman,finalfantasy,999000,jonatha,paisley,kissmyas,morgana,monste,mantra,spunk,magic123,jonesy,mark1,alessand,741258,baddest,ghbdtnrfrltkf,zxccxz,tictac,augustin,racers,7grout,foxfire,99762000,openit,nathanie,1z2x3c4v5b,seadog,gangbanged,lovehate,hondacbr,harpoon,mamochka,fisherma,bismilla,locust,wally1,spiderman1,saffron,utjhubq,123456987,20spanks,safeway,pisser,bdfyjd,kristen1,bigdick1,magenta,vfhujif,anfisa,friday13,qaz123wsx,0987654321q,tyrant,guan,meggie,kontol,nurlan,ayanami,rocket1,yaroslav,websol76,mutley,hugoboss,websolutions,elpaso,gagarin,badboys,sephirot,918273645,newuser,qian,edcrfv,booger1,852258,lockout,timoxa94,mazda323,firedog,sokolova,skydiver,jesus777,1234567890z,soulfly,canary,malinka,guillerm,hookers,dogfart,surfer1,osprey,india123,rhjkbr,stoppedby,nokia5530,123456789o,blue1,werter,divers,3000,123456f,alpina,cali,whoknows,godspeed,986532,foreskin,fuzzy1,heyyou,didier,slapnuts,fresno,rosebud1,sandman1,bears1,blade1,honeybun,queen1,baronn,pakista,philipp,9111961,topsecret,sniper1,214365,slipper,letsfuck,pippen33,godawgs,mousey,qw123456,scrotum,loveis,lighthou,bp2002,nancy123,jeffrey1,susieq,buddy2,ralphie,trout1,willi,antonov,sluttey,rehbwf,marty1,darian,losangeles,letme1n,12345d,pusssy,godiva,ender,golfnut,leonidas,a1b2c3d4e5,puffer,general1,wizzard,lehjxrf,racer1,bigbucks,cool12,buddys,zinger,esprit,vbienrf,josep,tickling,froggie,987654321a,895623,daddys,crumbs,gucci,mikkel,opiate,tracy1,christophe,came11,777555,petrovich,humbug,dirtydog,allstate,horatio,wachtwoord,creepers,squirts,rotary,bigd,georgia1,fujifilm,2sweet,dasha,yorkie,slimjim,wiccan,kenzie,system1,skunk,b12345,getit,pommes,daredevil,sugars,bucker,piston,lionheart,1bitch,515051,catfight,recon,icecold,fantom,vodafone,kontakt,boris1,vfcnth,canine,01011961,valleywa,faraon,chickenwing101,qq123456,livewire,livelife,roosters,jeepers,ilya1234,coochie,pavlik,dewalt,dfhdfhf,architec,blackops,1qaz2wsx3edc4rfv,rhfcjnf,wsxedc,teaser,sebora,25252,rhino1,ankara,swifty,decimal,redleg,shanno,nermal,candies,smirnova,dragon01,photo1,ranetki,a1s2d3f4g5,axio,wertzu,maurizio,6uldv8,zxcvasdf,punkass,flowe,graywolf,peddler,3rjs1la7qe,mpegs,seawolf,ladyboy,pianos,piggies,vixen,alexus,orpheus,gdtrfb,z123456,macgyver,hugetits,ralph1,flathead,maurici,mailru,goofball,nissan1,nikon,stopit,odin,big1,smooch,reboot,famil,bullit,anthony7,gerhard,methos,124038,morena,eagle2,jessica2,zebras,getlost,gfynthf,123581321,sarajevo,indon,comets,tatjana,rfgbnjirf,joystick,batman12,123456c,sabre,beerme,victory1,kitties,1475369,badboy1,booboo1,comcast,slava,squid,saxophon,lionhear,qaywsx,bustle,nastena,roadway,loader,hillside,starlight,24681012,niggers,access99,bazooka,molly123,blackice,bandi,cocacol,nfhfrfy,timur,muschi,horse1,quant4307s,squerting,oscars,mygirls,flashman,tangerin,goofy1,p0o9i8,housewifes,newness,monkey69,escorpio,password11,hippo,warcraft3,qazxsw123,qpalzm,ribbit,ghbdtndctv,bogota,star123,258000,lincoln1,bigjim,lacoste,firestorm,legenda,indain,ludacris,milamber,1009,evangeli,letmesee,a111111,hooters1,bigred1,shaker,husky,a4tech,cnfkrth,argyle,rjhjdf,nataha,0o9i8u7y,gibson1,sooners1,glendale,archery,hoochie,stooge,aaaaaa1,scorpions,school1,vegas1,rapier,mike23,bassoon,groupd2013,macaco,baker1,labia,freewill,santiag,silverado,butch1,vflfufcrfh,monica1,rugrat,cornhole,aerosmit,bionicle,gfgfvfvf,daniel12,virgo,fmale,favorite2,detroit1,pokey,shredder,baggies,wednesda,cosmo1,mimosa,sparhawk,firehawk,romario,911turbo,funtimes,fhntvrf,nexus6,159753456,timothy1,bajingan,terry1,frenchie,raiden,1mustang,babemagnet,74123698,nadejda,truffles,rapture,douglas1,lamborghini,motocross,rjcvjc,748596,skeeter1,dante1,angel666,telecom,carsten,pietro,bmw318,astro1,carpediem,samir,orang,helium,scirocco,fuzzball,rushmore,rebelz,hotspur,lacrimosa,chevys10,madonna1,domenico,yfnfirf,jachin,shelby1,bloke,dawgs,dunhill,atlanta1,service1,mikado,devilman,angelit,reznor,euphoria,lesbain,checkmat,browndog,phreak,blaze1,crash1,farida,mutter,luckyme,horsemen,vgirl,jediknig,asdas,cesare,allnight,rockey,starlite,truck1,passfan,close-up,samue,cazzo,wrinkles,homely,eatme1,sexpot,snapshot,dima1995,asthma,thetruth,ducky,blender,priyanka,gaucho,dutchman,sizzle,kakarot,651550,passcode,justinbieber,666333,elodie,sanjay,110442,alex01,lotus1,2300mj,lakshmi,zoomer,quake3,12349876,teapot,12345687,ramada,pennywis,striper,pilot1,chingon,optima,nudity,ethan1,euclid,beeline,loyola,biguns,zaq12345,bravo1,disney1,buffa,assmunch,vivid,6661313,wellingt,aqwzsx,madala11,9874123,sigmar,pictere,tiptop,bettyboop,dinero,tahiti,gregory1,bionic,speed1,fubar1,lexus1,denis1,hawthorn,saxman,suntzu,bernhard,dominika,camaro1,hunter12,balboa,bmw2002,seville,diablo1,vfhbyjxrf,1234abc,carling,lockerroom,punani,darth,baron1,vaness,1password,libido,picher,232425,karamba,futyn007,daydream,11001001,dragon123,friends1,bopper,rocky123,chooch,asslover,shimmer,riddler,openme,tugboat,sexy123,midori,gulnara,christo,swatch,laker,offroad,puddles,hackers,mannheim,manager1,horseman,roman1,dancer1,komputer,pictuers,nokia5130,ejaculation,lioness,123456y,evilone,nastenka,pushok,javie,lilman,3141592,mjolnir,toulouse,pussy2,bigworm,smoke420,fullback,extensa,dreamcast,belize,delboy,willie1,casablanca,csyjxtr,ricky1,bonghit,salvator,basher,pussylover,rosie1,963258741,vivitron,cobra427,meonly,armageddon,myfriend,zardoz,qwedsazxc,kraken,fzappa,starfox,333999,illmatic,capoeira,weenie,ramzes,freedom2,toasty,pupkin,shinigami,fhvfutljy,nocturne,churchil,thumbnils,tailgate,neworder,sexymama,goarmy,cerebus,michelle1,vbifyz,surfsup,earthlin,dabulls,basketbal,aligator,mojojojo,saibaba,welcome2,wifes,wdtnjr,12345w,slasher,papabear,terran,footman,hocke,153759,texans,tom123,sfgiants,billabong,aassdd,monolith,xxx777,l3tm31n,ticktock,newone,hellno,japanees,contortionist,admin123,scout1,alabama1,divx1,rochard,privat,radar1,bigdad,fhctybq,tortuga,citrus,avanti,fantasy1,woodstock,s12345,fireman1,embalmer,woodwork,bonzai,konyor,newstart,jigga,panorama,goats,smithy,rugrats,hotmama,daedalus,nonstop,fruitbat,lisenok,quaker,violator,12345123,my3sons,cajun,fraggle,gayboy,oldfart,vulva,knickerless,orgasms,undertow,binky,litle,kfcnjxrf,masturbation,bunnie,alexis1,planner,transexual,sparty,leeloo,monies,fozzie,stinger1,landrove,anakonda,scoobie,yamaha1,henti,star12,rfhlbyfk,beyonce,catfood,cjytxrf,zealots,strat,fordtruc,archangel,silvi,sativa,boogers,miles1,bigjoe,tulip,petite,greentea,shitter,jonboy,voltron,morticia,evanescence,3edc4rfv,longshot,windows1,serge,aabbcc,starbucks,sinful,drywall,prelude1,www123,camel1,homebrew,marlins,123412,letmeinn,domini,swampy,plokij,fordf350,webcam,michele1,bolivi,27731828,wingzero,qawsedrftg,shinji,sverige,jasper1,piper1,cummer,iiyama,gocats,amour,alfarome,jumanji,mike69,fantasti,1monkey,w00t88,shawn1,lorien,1a2s3d4f5g,koleso,murph,natascha,sunkist,kennwort,emine,grinder,m12345,q1q2q3q4,cheeba,money2,qazwsxedc1,diamante,prosto,pdiddy,stinky1,gabby1,luckys,franci,pornographic,moochie,gfhjdjp,samdog,empire1,comicbookdb,emili,motdepasse,iphone,braveheart,reeses,nebula,sanjose,bubba2,kickflip,arcangel,superbow,porsche911,xyzzy,nigger1,dagobert,devil1,alatam,monkey2,barbara1,12345v,vfpfafrf,alessio,babemagn,aceman,arrakis,kavkaz,987789,jasons,berserk,sublime1,rogue1,myspace,buckwhea,csyekz,pussy4me,vette1,boots1,boingo,arnaud,budlite,redstorm,paramore,becky1,imtheman,chango,marley1,milkyway,666555,giveme,mahalo,lux2000,lucian,paddy,praxis,shimano,bigpenis,creeper,newproject2004,rammstei,j3qq4h7h2v,hfljcnm,lambchop,anthony2,bugman,gfhjkm12,dreamer1,stooges,cybersex,diamant,cowboyup,maximus1,sentra,615243,goethe,manhatta,fastcar,selmer,1213141516,yfnfitymrf,denni,chewey,yankee1,elektra,123456789p,trousers,fishface,topspin,orwell,vorona,sodapop,motherfu,ibilltes,forall,kookie,ronald1,balrog,maximilian,mypasswo,sonny1,zzxxcc,tkfkdg,magoo,mdogg,heeled,gitara,lesbos,marajade,tippy,morozova,enter123,lesbean,pounded,asd456,fialka,scarab,sharpie,spanky1,gstring,sachin,12345asd,princeto,hellohel,ursitesux,billows,1234kekc,kombat,cashew,duracell,kseniya,sevenof9,kostik,arthur1,corvet07,rdfhnbhf,songoku,tiberian,needforspeed,1qwert,dropkick,kevin123,panache,libra,a123456a,kjiflm,vfhnsirf,cntgfy,iamcool,narut,buffer,sk8ordie,urlaub,fireblade,blanked,marishka,gemini1,altec,gorillaz,chief1,revival47,ironman1,space1,ramstein,doorknob,devilmaycry,nemesis1,sosiska,pennstat,monday1,pioner,shevchenko,detectiv,evildead,blessed1,aggie,coffees,tical,scotts,bullwink,marsel,krypto,adrock,rjitxrf,asmodeus,rapunzel,theboys,hotdogs,deepthro,maxpayne,veronic,fyyeirf,otter,cheste,abbey1,thanos,bedrock,bartok,google1,xxxzzz,rodent,montecarlo,hernande,mikayla,123456789l,bravehea,12locked,ltymub,pegasus1,ameteur,saltydog,faisal,milfnew,momsuck,everques,ytngfhjkz,m0nkey,businessbabe,cooki,custard,123456ab,lbvjxrf,outlaws,753357,qwerty78,udacha,insider,chees,fuckmehard,shotokan,katya,seahorse,vtldtlm,turtle1,mike12,beebop,heathe,everton1,darknes,barnie,rbcekz,alisher,toohot,theduke,555222,reddog1,breezy,bulldawg,monkeyman,baylee,losangel,mastermi,apollo1,aurelie,zxcvb12345,cayenne,bastet,wsxzaq,geibcnbr,yello,fucmy69,redwall,ladybird,bitchs,cccccc1,rktjgfnhf,ghjdthrf,quest1,oedipus,linus,impalass,fartman,12345k,fokker,159753a,optiplex,bbbbbb1,realtor,slipkno,santacru,rowdy,jelena,smeller,3984240,ddddd1,sexyme,janet1,3698741,eatme69,cazzone,today1,poobear,ignatius,master123,newpass1,heather2,snoopdogg,blondinka,pass12,honeydew,fuckthat,890098890,lovem,goldrush,gecko,biker1,llama,pendejo,avalanche,fremont,snowman1,gandolf,chowder,1a2b3c4d5e,flyguy,magadan,1fuck,pingvin,nokia5230,ab1234,lothar,lasers,bignuts,renee1,royboy,skynet,12340987,1122334,dragrace,lovely1,22334455,booter,12345612,corvett,123456qq,capital1,videoes,funtik,wyvern,flange,sammydog,hulkster,13245768,not4you,vorlon,omegared,l58jkdjp!,filippo,123mudar,samadams,petrus,chris12,charlie123,123456789123,icetea,sunderla,adrian1,123qweas,kazanova,aslan,monkey123,fktyeirf,goodsex,123ab,lbtest,banaan,bluenose,837519,asd12345,waffenss,whateve,1a2a3a4a,trailers,vfhbirf,bhbcrf,klaatu,turk182,monsoon,beachbum,sunbeam,succes,clyde1,viking1,rawhide,bubblegum,princ,mackenzi,hershey1,222555,dima55,niggaz,manatee,aquila,anechka,pamel,bugsbunn,lovel,sestra,newport1,althor,hornyman,wakeup,zzz111,phishy,cerber,torrent,thething,solnishko,babel,buckeye1,peanu,ethernet,uncencored,baraka,665544,chris2,rb26dett,willy1,choppers,texaco,biggirl,123456b,anna2614,sukebe,caralho,callofduty,rt6ytere,jesus7,angel12,1money,timelord,allblack,pavlova,romanov,tequiero,yitbos,lookup,bulls23,snowflake,dickweed,barks,lever,irisha,firestar,fred1234,ghjnjnbg,danman,gatito,betty1,milhouse,kbctyjr,masterbaiting,delsol,papit,doggys,123698741,bdfyjdf,invictus,bloods,kayla1,yourmama,apple2,angelok,bigboy1,pontiac1,verygood,yeshua,twins2,porn4me,141516,rasta69,james2,bosshog,candys,adventur,stripe,djkjlz,dokken,austin316,skins,hogwarts,vbhevbh,navigato,desperado,xxx666,cneltyn,vasiliy,hazmat,daytek,eightbal,fred1,four20,74227422,fabia,aerosmith,manue,wingchun,boohoo,hombre,sanity72,goatboy,fuckm,partizan,avrora,utahjazz,submarin,pussyeat,heinlein,control1,costaric,smarty,chuan,triplets,snowy,snafu,teacher1,vangogh,vandal,evergree,cochise,qwerty99,pyramid1,saab900,sniffer,qaz741,lebron23,mark123,wolvie,blackbelt,yoshi,feeder,janeway,nutella,fuking,asscock,deepak,poppie,bigshow,housewife,grils,tonto,cynthia1,temptress,irakli,belle1,russell1,manders,frank123,seabass,gforce,songbird,zippy1,naught,brenda1,chewy1,hotshit,topaz,43046721,girfriend,marinka,jakester,thatsme,planeta,falstaff,patrizia,reborn,riptide,cherry1,shuan,nogard,chino,oasis1,qwaszx12,goodlife,davis1,1911a1,harrys,shitfuck,12345678900,russian7,007700,bulls1,porshe,danil,dolphi,river1,sabaka,gobigred,deborah1,volkswagen,miamo,alkaline,muffdive,1letmein,fkbyrf,goodguy,hallo1,nirvan,ozzie,cannonda,cvbhyjdf,marmite,germany1,joeblow,radio1,love11,raindrop,159852,jacko,newday,fathead,elvis123,caspe,citibank,sports1,deuce,boxter,fakepass,golfman,snowdog,birthday4,nonmembe,niklas,parsifal,krasota,theshit,1235813,maganda,nikita1,omicron,cassie1,columbo,buick,sigma1,thistle,bassin,rickster,apteka,sienna,skulls,miamor,coolgirl,gravis,1qazxc,virgini,hunter2,akasha,batma,motorcyc,bambino,tenerife,fordf250,zhuan,iloveporn,markiza,hotbabes,becool,fynjybyf,wapapapa,forme,mamont,pizda,dragonz,sharon1,scrooge,mrbill,pfloyd,leeroy,natedog,ishmael,777111,tecumseh,carajo,nfy.irf,0000000000o,blackcock,fedorov,antigone,feanor,novikova,bobert,peregrin,spartan117,pumkin,rayman,manuals,tooltime,555333,bonethug,marina1,bonnie1,tonyhawk,laracroft,mahalkita,18273645,terriers,gamer,hoser,littlema,molotok,glennwei,lemon1,caboose,tater,12345654321,brians,fritz1,mistral,jigsaw,fuckshit,hornyguy,southside,edthom,antonio1,bobmarle,pitures,ilikesex,crafty,nexus,boarder,fulcrum,astonvil,yanks1,yngwie,account1,zooropa,hotlegs,sammi,gumbo,rover1,perkele,maurolarastefy,lampard,357753,barracud,dmband,abcxyz,pathfinder,335577,yuliya,micky,jayman,asdfg12345,1596321,halcyon,rerfhtre,feniks,zaxscd,gotyoass,jaycee,samson1,jamesb,vibrate,grandpri,camino,colossus,davidb,mamo4ka,nicky1,homer123,pinguin,watermelon,shadow01,lasttime,glider,823762,helen1,pyramids,tulane,osama,rostov,john12,scoote,bhbyrf,gohan,galeries,joyful,bigpussy,tonka,mowgli,astalavista,zzz123,leafs,dalejr8,unicorn1,777000,primal,bigmama,okmijn,killzone,qaz12345,snookie,zxcvvcxz,davidc,epson,rockman,ceaser,beanbag,katten,3151020,duckhunt,segreto,matros,ragnar,699669,sexsexse,123123z,fuckyeah,bigbutts,gbcmrf,element1,marketin,saratov,elbereth,blaster1,yamahar6,grime,masha,juneau,1230123,pappy,lindsay1,mooner,seattle1,katzen,lucent,polly1,lagwagon,pixie,misiaczek,666666a,smokedog,lakers24,eyeball,ironhors,ametuer,volkodav,vepsrf,kimmy,gumby1,poi098,ovation,1q2w3,drinker,penetrating,summertime,1dallas,prima,modles,takamine,hardwork,macintosh,tahoe,passthie,chiks,sundown,flowers1,boromir,music123,phaedrus,albert1,joung,malakas,gulliver,parker1,balder,sonne,jessie1,domainlock2005,express1,vfkbyf,youandme,raketa,koala,dhjnvytyjub,nhfrnjh,testibil,ybrbnjc,987654321q,axeman,pintail,pokemon123,dogggg,shandy,thesaint,11122233,x72jhhu3z,theclash,raptors,zappa1,djdjxrf,hell666,friday1,vivaldi,pluto1,lance1,guesswho,jeadmi,corgan,skillz,skippy1,mango1,gymnastic,satori,362514,theedge,cxfcnkbdfz,sparkey,deicide,bagels,lololol,lemmings,r4e3w2q1,silve,staind,schnuffi,dazzle,basebal1,leroy1,bilbo1,luckie,qwerty2,goodfell,hermione,peaceout,davidoff,yesterda,killah,flippy,chrisb,zelda1,headless,muttley,fuckof,tittys,catdaddy,photog,beeker,reaver,ram1500,yorktown,bolero,tryagain,arman,chicco,learjet,alexei,jenna1,go2hell,12s3t4p55,momsanaladventure,mustang9,protoss,rooter,ginola,dingo1,mojave,erica1,1qazse4,marvin1,redwolf,sunbird,dangerou,maciek,girsl,hawks1,packard1,excellen,dashka,soleda,toonces,acetate,nacked,jbond007,alligator,debbie1,wellhung,monkeyma,supers,rigger,larsson,vaseline,rjnzhf,maripos,123456asd,cbr600rr,doggydog,cronic,jason123,trekker,flipmode,druid,sonyvaio,dodges,mayfair,mystuff,fun4me,samanta,sofiya,magics,1ranger,arcane,sixtynin,222444,omerta,luscious,gbyudby,bobcats,envision,chance1,seaweed,holdem,tomate,mensch,slicer,acura1,goochi,qweewq,punter,repoman,tomboy,never1,cortina,gomets,147896321,369852147,dogma,bhjxrf,loglatin,eragon,strato,gazelle,growler,885522,klaudia,payton34,fuckem,butchie,scorpi,lugano,123456789k,nichola,chipper1,spide,uhbujhbq,rsalinas,vfylfhby,longhorns,bugatti,everquest,!qaz2wsx,blackass,999111,snakeman,p455w0rd,fanatic,family1,pfqxbr,777vlad,mysecret,marat,phoenix2,october1,genghis,panties1,cooker,citron,ace123,1234569,gramps,blackcoc,kodiak1,hickory,ivanhoe,blackboy,escher,sincity,beaks,meandyou,spaniel,canon1,timmy1,lancaste,polaroid,edinburg,fuckedup,hotman,cueball,golfclub,gopack,bookcase,worldcup,dkflbvbhjdbx,twostep,17171717aa,letsplay,zolushka,stella1,pfkegf,kingtut,67camaro,barracuda,wiggles,gjhjkm,prancer,patata,kjifhf,theman1,romanova,sexyass,copper1,dobber,sokolov,pomidor,algernon,cadman,amoremio,william2,silly1,bobbys,hercule,hd764nw5d7e1vb1,defcon,deutschland,robinhood,alfalfa,machoman,lesbens,pandora1,easypay,tomservo,nadezhda,goonies,saab9000,jordyn,f15eagle,dbrecz,12qwerty,greatsex,thrawn,blunted,baywatch,doggystyle,loloxx,chevy2,january1,kodak,bushel,78963214,ub6ib9,zz8807zpl,briefs,hawker,224488,first1,bonzo,brent1,erasure,69213124,sidewind,soccer13,622521,mentos,kolibri,onepiece,united1,ponyboy,keksa12,wayer,mypussy,andrej,mischa,mille,bruno123,garter,bigpun,talgat,familia,jazzy1,mustang8,newjob,747400,bobber,blackbel,hatteras,ginge,asdfjkl;,camelot1,blue44,rebbyt34,ebony1,vegas123,myboys,aleksander,ijrjkflrf,lopata,pilsner,lotus123,m0nk3y,andreev,freiheit,balls1,drjynfrnt,mazda1,waterpolo,shibumi,852963,123bbb,cezer121,blondie1,volkova,rattler,kleenex,ben123,sanane,happydog,satellit,qazplm,qazwsxedcrfvtgb,meowmix,badguy,facefuck,spice1,blondy,major1,25000,anna123,654321a,sober1,deathrow,patterso,china1,naruto1,hawkeye1,waldo1,butchy,crayon,5tgb6yhn,klopik,crocodil,mothra,imhorny,pookie1,splatter,slippy,lizard1,router,buratino,yahweh,123698,dragon11,123qwe456,peepers,trucker1,ganjaman,1hxboqg2,cheyanne,storys,sebastie,zztop,maddison,4rfv3edc,darthvader,jeffro,iloveit,victor1,hotty,delphin,lifeisgood,gooseman,shifty,insertions,dude123,abrupt,123masha,boogaloo,chronos,stamford,pimpster,kthjxrf,getmein,amidala,flubber,fettish,grapeape,dantes,oralsex,jack1,foxcg33,winchest,francis1,getin,archon,cliffy,blueman,1basebal,sport1,emmitt22,porn123,bignasty,morga,123hfjdk147,ferrar,juanito,fabiol,caseydog,steveo,peternorth,paroll,kimchi,bootleg,gaijin,secre,acacia,eatme2,amarillo,monkey11,rfhfgep,tylers,a1a2a3a4a5,sweetass,blower,rodina,babushka,camilo,cimbom,tiffan,vfnbkmlf,ohbaby,gotigers,lindsey1,dragon13,romulus,qazxsw12,zxcvbn1,dropdead,hitman47,snuggle,eleven11,bloopers,357mag,avangard,bmw320,ginscoot,dshade,masterkey,voodoo1,rootedit,caramba,leahcim,hannover,8phrowz622,tim123,cassius,000000a,angelito,zzzzz1,badkarma,star1,malaga,glenwood,footlove,golf1,summer12,helpme1,fastcars,titan1,police1,polinka,k.jdm,marusya,augusto,shiraz,pantyhose,donald1,blaise,arabella,brigada,c3por2d2,peter01,marco1,hellow,dillweed,uzumymw,geraldin,loveyou2,toyota1,088011,gophers,indy500,slainte,5hsu75kpot,teejay,renat,racoon,sabrin,angie1,shiznit,harpua,sexyred,latex,tucker1,alexandru,wahoo,teamwork,deepblue,goodison,rundmc,r2d2c3p0,puppys,samba,ayrton,boobed,999777,topsecre,blowme1,123321z,loudog,random1,pantie,drevil,mandolin,121212q,hottub,brother1,failsafe,spade1,matvey,open1234,carmen1,priscill,schatzi,kajak,gooddog,trojans1,gordon1,kayak,calamity,argent,ufhvjybz,seviyi,penfold,assface,dildos,hawkwind,crowbar,yanks,ruffles,rastus,luv2epus,open123,aquafina,dawns,jared1,teufel,12345c,vwgolf,pepsi123,amores,passwerd,01478520,boliva,smutty,headshot,password3,davidd,zydfhm,gbgbcmrf,pornpass,insertion,ceckbr,test2,car123,checkit,dbnfkbq,niggas,nyyankee,muskrat,nbuhtyjr,gunner1,ocean1,fabienne,chrissy1,wendys,loveme89,batgirl,cerveza,igorek,steel1,ragman,boris123,novifarm,sexy12,qwerty777,mike01,giveitup,123456abc,fuckall,crevice,hackerz,gspot,eight8,assassins,texass,swallows,123458,baldur,moonshine,labatt,modem,sydney1,voland,dbnfkz,hotchick,jacker,princessa,dawgs1,holiday1,booper,reliant,miranda1,jamaica1,andre1,badnaamhere,barnaby,tiger7,david12,margaux,corsica,085tzzqi,universi,thewall,nevermor,martin6,qwerty77,cipher,apples1,0102030405,seraphim,black123,imzadi,gandon,ducati99,1shadow,dkflbvbhjdyf,44magnum,bigbad,feedme,samantha1,ultraman,redneck1,jackdog,usmc0311,fresh1,monique1,tigre,alphaman,cool1,greyhoun,indycar,crunchy,55chevy,carefree,willow1,063dyjuy,xrated,assclown,federica,hilfiger,trivia,bronco1,mamita,100200300,simcity,lexingky,akatsuki,retsam,johndeere,abudfv,raster,elgato,businka,satanas,mattingl,redwing1,shamil,patate,mannn,moonstar,evil666,b123456,bowl300,tanechka,34523452,carthage,babygir,santino,bondarenko,jesuss,chico1,numlock,shyguy,sound1,kirby1,needit,mostwanted,427900,funky1,steve123,passions,anduril,kermit1,prospero,lusty,barakuda,dream1,broodwar,porky,christy1,mahal,yyyyyy1,allan1,1sexy,flintsto,capri,cumeater,heretic,robert2,hippos,blindax,marykay,collecti,kasumi,1qaz!qaz,112233q,123258,chemistr,coolboy,0o9i8u,kabuki,righton,tigress,nessie,sergej,andrew12,yfafyz,ytrhjvfyn,angel7,victo,mobbdeep,lemming,transfor,1725782,myhouse,aeynbr,muskie,leno4ka,westham1,cvbhyjd,daffodil,pussylicker,pamela1,stuffer,warehous,tinker1,2w3e4r,pluton,louise1,polarbea,253634,prime1,anatoliy,januar,wysiwyg,cobraya,ralphy,whaler,xterra,cableguy,112233a,porn69,jamesd,aqualung,jimmy123,lumpy,luckyman,kingsize,golfing1,alpha7,leeds1,marigold,lol1234,teabag,alex11,10sne1,saopaulo,shanny,roland1,basser,3216732167,carol1,year2005,morozov,saturn1,joseluis,bushed,redrock,memnoch,lalaland,indiana1,lovegod,gulnaz,buffalos,loveyou1,anteater,pattaya,jaydee,redshift,bartek,summerti,coffee1,ricochet,incest,schastie,rakkaus,h2opolo,suikoden,perro,dance1,loveme1,whoopass,vladvlad,boober,flyers1,alessia,gfcgjhn,pipers,papaya,gunsling,coolone,blackie1,gonads,gfhjkzytn,foxhound,qwert12,gangrel,ghjvtntq,bluedevi,mywife,summer01,hangman,licorice,patter,vfr750,thorsten,515253,ninguna,dakine,strange1,mexic,vergeten,12345432,8phrowz624,stampede,floyd1,sailfish,raziel,ananda,giacomo,freeme,crfprf,74185296,allstars,master01,solrac,gfnhbjn,bayliner,bmw525,3465xxx,catter,single1,michael3,pentium4,nitrox,mapet123456,halibut,killroy,xxxxx1,phillip1,poopsie,arsenalfc,buffys,kosova,all4me,32165498,arslan,opensesame,brutis,charles2,pochta,nadegda,backspac,mustang0,invis,gogeta,654321q,adam25,niceday,truckin,gfdkbr,biceps,sceptre,bigdave,lauras,user345,sandys,shabba,ratdog,cristiano,natha,march13,gumball,getsdown,wasdwasd,redhead1,dddddd1,longlegs,13572468,starsky,ducksoup,bunnys,omsairam,whoami,fred123,danmark,flapper,swanky,lakings,yfhenj,asterios,rainier,searcher,dapper,ltdjxrf,horsey,seahawk,shroom,tkfkdgo,aquaman,tashkent,number9,messi10,1asshole,milenium,illumina,vegita,jodeci,buster01,bareback,goldfinger,fire1,33rjhjds,sabian,thinkpad,smooth1,sully,bonghits,sushi1,magnavox,colombi,voiture,limpone,oldone,aruba,rooster1,zhenya,nomar5,touchdow,limpbizkit,rhfcfdxbr,baphomet,afrodita,bball1,madiso,ladles,lovefeet,matthew2,theworld,thunderbird,dolly1,123rrr,forklift,alfons,berkut,speedy1,saphire,oilman,creatine,pussylov,bastard1,456258,wicked1,filimon,skyline1,fucing,yfnfkbz,hot123,abdulla,nippon,nolimits,billiard,booty1,buttplug,westlife,coolbean,aloha1,lopas,asasin,1212121,october2,whodat,good4u,d12345,kostas,ilya1992,regal,pioneer1,volodya,focus1,bastos,nbvjif,fenix,anita1,vadimka,nickle,jesusc,123321456,teste,christ1,essendon,evgenii,celticfc,adam1,forumwp,lovesme,26exkp,chillout,burly,thelast1,marcus1,metalgear,test11,ronaldo7,socrate,world1,franki,mommie,vicecity,postov1000,charlie3,oldschool,333221,legoland,antoshka,counterstrike,buggy,mustang3,123454,qwertzui,toons,chesty,bigtoe,tigger12,limpopo,rerehepf,diddle,nokia3250,solidsnake,conan1,rockroll,963369,titanic1,qwezxc,cloggy,prashant,katharin,maxfli,takashi,cumonme,michael9,mymother,pennstate,khalid,48151623,fightclub,showboat,mateusz,elrond,teenie,arrow1,mammamia,dustydog,dominator,erasmus,zxcvb1,1a2a3a,bones1,dennis1,galaxie,pleaseme,whatever1,junkyard,galadriel,charlies,2wsxzaq1,crimson1,behemoth,teres,master11,fairway,shady1,pass99,1batman,joshua12,baraban,apelsin,mousepad,melon,twodogs,123321qwe,metalica,ryjgrf,pipiska,rerfhfxf,lugnut,cretin,iloveu2,powerade,aaaaaaa1,omanko,kovalenko,isabe,chobits,151nxjmt,shadow11,zcxfcnkbdf,gy3yt2rgls,vfhbyrf,159753123,bladerunner,goodone,wonton,doodie,333666999,fuckyou123,kitty123,chisox,orlando1,skateboa,red12345,destroye,snoogans,satan1,juancarlo,goheels,jetson,scottt,fuckup,aleksa,gfhfljrc,passfind,oscar123,derrick1,hateme,viper123,pieman,audi100,tuffy,andover,shooter1,10000,makarov,grant1,nighthaw,13576479,browneye,batigol,nfvfhf,chocolate1,7hrdnw23,petter,bantam,morlii,jediknight,brenden,argonaut,goodstuf,wisconsi,315920,abigail1,dirtbag,splurge,k123456,lucky777,valdepen,gsxr600,322223,ghjnjrjk,zaq1xsw2cde3,schwanz,walter1,letmein22,nomads,124356,codeblue,nokian70,fucke,footbal1,agyvorc,aztecs,passw0r,smuggles,femmes,ballgag,krasnodar,tamuna,schule,sixtynine,empires,erfolg,dvader,ladygaga,elite1,venezuel,nitrous,kochamcie,olivia1,trustn01,arioch,sting1,131415,tristar,555000,maroon,135799,marsik,555556,fomoco,natalka,cwoui,tartan,davecole,nosferat,hotsauce,dmitry,horus,dimasik,skazka,boss302,bluebear,vesper,ultras,tarantul,asd123asd,azteca,theflash,8ball,1footbal,titlover,lucas123,number6,sampson1,789852,party1,dragon99,adonai,carwash,metropol,psychnau,vthctltc,hounds,firework,blink18,145632,wildcat1,satchel,rice80,ghtktcnm,sailor1,cubano,anderso,rocks1,mike11,famili,dfghjc,besiktas,roygbiv,nikko,bethan,minotaur,rakesh,orange12,hfleuf,jackel,myangel,favorite7,1478520,asssss,agnieszka,haley1,raisin,htubyf,1buster,cfiekz,derevo,1a2a3a4a5a,baltika,raffles,scruffy1,clitlick,louis1,buddha1,fy.nrf,walker1,makoto,shadow2,redbeard,vfvfvskfhfve,mycock,sandydog,lineman,network1,favorite8,longdick,mustangg,mavericks,indica,1killer,cisco1,angelofwar,blue69,brianna1,bubbaa,slayer666,level42,baldrick,brutus1,lowdown,haribo,lovesexy,500000,thissuck,picker,stephy,1fuckme,characte,telecast,1bigdog,repytwjdf,thematrix,hammerhe,chucha,ganesha,gunsmoke,georgi,sheltie,1harley,knulla,sallas,westie,dragon7,conker,crappie,margosha,lisboa,3e2w1q,shrike,grifter,ghjcnjghjcnj,asdfg1,mnbvcxz1,myszka,posture,boggie,rocketman,flhtyfkby,twiztid,vostok,pi314159,force1,televizor,gtkmvtym,samhain,imcool,jadzia,dreamers,strannik,k2trix,steelhea,nikitin,commodor,brian123,chocobo,whopper,ibilljpf,megafon,ararat,thomas12,ghbrjkbcn,q1234567890,hibernia,kings1,jim123,redfive,68camaro,iawgk2,xavier1,1234567u,d123456,ndirish,airborn,halfmoon,fluffy1,ranchero,sneaker,soccer2,passion1,cowman,birthday1,johnn,razzle,glock17,wsxqaz,nubian,lucky2,jelly1,henderso,eric1,123123e,boscoe01,fuck0ff,simpson1,sassie,rjyjgkz,nascar3,watashi,loredana,janus,wilso,conman,david2,mothe,iloveher,snikers,davidj,fkmnthyfnbdf,mettss,ratfink,123456h,lostsoul,sweet16,brabus,wobble,petra1,fuckfest,otters,sable1,svetka,spartacu,bigstick,milashka,1lover,pasport,champagn,papichul,hrvatska,hondacivic,kevins,tacit,moneybag,gohogs,rasta1,246813579,ytyfdbcnm,gubber,darkmoon,vitaliy,233223,playboys,tristan1,joyce1,oriflame,mugwump,access2,autocad,thematri,qweqwe123,lolwut,ibill01,multisyn,1233211,pelikan,rob123,chacal,1234432,griffon,pooch,dagestan,geisha,satriani,anjali,rocketma,gixxer,pendrago,vincen,hellokit,killyou,ruger,doodah,bumblebe,badlands,galactic,emachines,foghorn,jackso,jerem,avgust,frontera,123369,daisymae,hornyboy,welcome123,tigger01,diabl,angel13,interex,iwantsex,rockydog,kukolka,sawdust,online1,3234412,bigpapa,jewboy,3263827,dave123,riches,333222,tony1,toggle,farter,124816,tities,balle,brasilia,southsid,micke,ghbdtn12,patit,ctdfcnjgjkm,olds442,zzzzzz1,nelso,gremlins,gypsy1,carter1,slut69,farcry,7415963,michael8,birdie1,charl,123456789abc,100001,aztec,sinjin,bigpimpi,closeup,atlas1,nvidia,doggone,classic1,manana,malcolm1,rfkbyf,hotbabe,rajesh,dimebag,ganjubas,rodion,jagr68,seren,syrinx,funnyman,karapuz,123456789n,bloomin,admin18533362,biggdogg,ocarina,poopy1,hellome,internet1,booties,blowjobs,matt1,donkey1,swede,1jennife,evgeniya,lfhbyf,coach1,444777,green12,patryk,pinewood,justin12,271828,89600506779,notredame,tuborg,lemond,sk8ter,million1,wowser,pablo1,st0n3,jeeves,funhouse,hiroshi,gobucs,angeleye,bereza,winter12,catalin,qazedc,andros,ramazan,vampyre,sweethea,imperium,murat,jamest,flossy,sandeep,morgen,salamandra,bigdogg,stroller,njdevils,nutsack,vittorio,%%passwo,playful,rjyatnrf,tookie,ubnfhf,michi,777444,shadow13,devils1,radiance,toshiba1,beluga,amormi,dandfa,trust1,killemall,smallville,polgara,billyb,landscap,steves,exploite,zamboni,damage11,dzxtckfd,trader12,pokey1,kobe08,damager,egorov,dragon88,ckfdbr,lisa69,blade2,audis4,nelson1,nibbles,23176djivanfros,mutabor,artofwar,matvei,metal666,hrfzlz,schwinn,poohbea,seven77,thinker,123456789qwerty,sobriety,jakers,karamelka,vbkfyf,volodin,iddqd,dale03,roberto1,lizaveta,qqqqqq1,cathy1,08154711,davidm,quixote,bluenote,tazdevil,katrina1,bigfoot1,bublik,marma,olechka,fatpussy,marduk,arina,nonrev67,qqqq1111,camill,wtpfhm,truffle,fairview,mashina,voltaire,qazxswedcvfr,dickface,grassy,lapdance,bosstone,crazy8,yackwin,mobil,danielit,mounta1n,player69,bluegill,mewtwo,reverb,cnthdf,pablito,a123321,elena1,warcraft1,orland,ilovemyself,rfntyjr,joyride,schoo,dthjxrf,thetachi,goodtimes,blacksun,humpty,chewbacca,guyute,123xyz,lexicon,blue45,qwe789,galatasaray,centrino,hendrix1,deimos,saturn5,craig1,vlad1996,sarah123,tupelo,ljrnjh,hotwife,bingos,1231231,nicholas1,flamer,pusher,1233210,heart1,hun999,jiggy,giddyup,oktober,123456zxc,budda,galahad,glamur,samwise,oneton,bugsbunny,dominic1,scooby2,freetime,internat,159753852,sc00ter,wantit,mazinger,inflames,laracrof,greedo,014789,godofwar,repytwjd,water123,fishnet,venus1,wallace1,tenpin,paula1,1475963,mania,novikov,qwertyasdfgh,goldmine,homies,777888999,8balls,holeinon,paper1,samael,013579,mansur,nikit,ak1234,blueline,polska1,hotcock,laredo,windstar,vbkbwbz,raider1,newworld,lfybkrf,catfish1,shorty1,piranha,treacle,royale,2234562,smurfs,minion,cadence,flapjack,123456p,sydne,135531,robinhoo,nasdaq,decatur,cyberonline,newage,gemstone,jabba,touchme,hooch,pigdog,indahous,fonzie,zebra1,juggle,patrick2,nihongo,hitomi,oldnavy,qwerfdsa,ukraina,shakti,allure,kingrich,diane1,canad,piramide,hottie1,clarion,college1,5641110,connect1,therion,clubber,velcro,dave1,astra1,13579-,astroboy,skittle,isgreat,photoes,cvzefh1gkc,001100,2cool4u,7555545,ginger12,2wsxcde3,camaro69,invader,domenow,asd1234,colgate,qwertasdfg,jack123,pass01,maxman,bronte,whkzyc,peter123,bogie,yecgaa,abc321,1qay2wsx,enfield,camaroz2,trashman,bonefish,system32,azsxdcfvgb,peterose,iwantyou,dick69,temp1234,blastoff,capa200,connie1,blazin,12233445,sexybaby,123456j,brentfor,pheasant,hommer,jerryg,thunders,august1,lager,kapusta,boobs1,nokia5300,rocco1,xytfu7,stars1,tugger,123sas,blingbling,1bubba,0wnsyo0,1george,baile,richard2,habana,1diamond,sensatio,1golfer,maverick1,1chris,clinton1,michael7,dragons1,sunrise1,pissant,fatim,mopar1,levani,rostik,pizzapie,987412365,oceans11,748159263,cum4me,palmetto,4r3e2w1q,paige1,muncher,arsehole,kratos,gaffer,banderas,billys,prakash,crabby,bungie,silver12,caddis,spawn1,xboxlive,sylvania,littlebi,524645,futura,valdemar,isacs155,prettygirl,big123,555444,slimer,chicke,newstyle,skypilot,sailormoon,fatluvr69,jetaime,sitruc,jesuschrist,sameer,bear12,hellion,yendor,country1,etnies,conejo,jedimast,darkknight,toobad,yxcvbn,snooks,porn4life,calvary,alfaromeo,ghostman,yannick,fnkfynblf,vatoloco,homebase,5550666,barret,1111111111zz,odysseus,edwardss,favre4,jerrys,crybaby,xsw21qaz,firestor,spanks,indians1,squish,kingair,babycakes,haters,sarahs,212223,teddyb,xfactor,cumload,rhapsody,death123,three3,raccoon,thomas2,slayer66,1q2q3q4q5q,thebes,mysterio,thirdeye,orkiox.,nodoubt,bugsy,schweiz,dima1996,angels1,darkwing,jeronimo,moonpie,ronaldo9,peaches2,mack10,manish,denise1,fellowes,carioca,taylor12,epaulson,makemoney,oc247ngucz,kochanie,3edcvfr4,vulture,1qw23e,1234567z,munchie,picard1,xthtgfirf,sportste,psycho1,tahoe1,creativ,perils,slurred,hermit,scoob,diesel1,cards1,wipeout,weeble,integra1,out3xf,powerpc,chrism,kalle,ariadne,kailua,phatty,dexter1,fordman,bungalow,paul123,compa,train1,thejoker,jys6wz,pussyeater,eatmee,sludge,dominus,denisa,tagheuer,yxcvbnm,bill1,ghfdlf,300zx,nikita123,carcass,semaj,ramone,muenchen,animal1,greeny,annemari,dbrf134,jeepcj7,mollys,garten,sashok,ironmaid,coyotes,astoria,george12,westcoast,primetim,123456o,panchito,rafae,japan1,framer,auralo,tooshort,egorova,qwerty22,callme,medicina,warhawk,w1w2w3w4,cristia,merli,alex22,kawaii,chatte,wargames,utvols,muaddib,trinket,andreas1,jjjjj1,cleric,scooters,cuntlick,gggggg1,slipknot1,235711,handcuff,stussy,guess1,leiceste,ppppp1,passe,lovegun,chevyman,hugecock,driver1,buttsex,psychnaut1,cyber1,black2,alpha12,melbourn,man123,metalman,yjdsqujl,blondi,bungee,freak1,stomper,caitlin1,nikitina,flyaway,prikol,begood,desperad,aurelius,john1234,whosyourdaddy,slimed123,bretagne,den123,hotwheel,king123,roodypoo,izzicam,save13tx,warpten,nokia3310,samolet,ready1,coopers,scott123,bonito,1aaaaa,yomomma,dawg1,rache,itworks,asecret,fencer,451236,polka,olivetti,sysadmin,zepplin,sanjuan,479373,lickem,hondacrx,pulamea,future1,naked1,sexyguy,w4g8at,lollol1,declan,runner1,rumple,daddy123,4snz9g,grandprix,calcio,whatthefuck,nagrom,asslick,pennst,negrit,squiggy,1223334444,police22,giovann,toronto1,tweet,yardbird,seagate,truckers,554455,scimitar,pescator,slydog,gaysex,dogfish,fuck777,12332112,qazxswed,morkovka,daniela1,imback,horny69,789123456,123456789w,jimmy2,bagger,ilove69,nikolaus,atdhfkm,rebirth,1111aaaa,pervasive,gjgeufq,dte4uw,gfhnbpfy,skeletor,whitney1,walkman,delorean,disco1,555888,as1234,ishikawa,fuck12,reaper1,dmitrii,bigshot,morrisse,purgen,qwer4321,itachi,willys,123123qwe,kisska,roma123,trafford,sk84life,326159487,pedros,idiom,plover,bebop,159875321,jailbird,arrowhea,qwaszx123,zaxscdvf,catlover,bakers,13579246,bones69,vermont1,helloyou,simeon,chevyz71,funguy,stargaze,parolparol,steph1,bubby,apathy,poppet,laxman,kelly123,goodnews,741236,boner1,gaetano,astonvilla,virtua,luckyboy,rocheste,hello2u,elohim,trigger1,cstrike,pepsicola,miroslav,96385274,fistfuck,cheval,magyar,svetlanka,lbfyjxrf,mamedov,123123123q,ronaldo1,scotty1,1nicole,pittbull,fredd,bbbbb1,dagwood,gfhkfvtyn,ghblehrb,logan5,1jordan,sexbomb,omega2,montauk,258741,dtythf,gibbon,winamp,thebomb,millerli,852654,gemin,baldy,halflife2,dragon22,mulberry,morrigan,hotel6,zorglub,surfin,951159,excell,arhangel,emachine,moses1,968574,reklama,bulldog2,cuties,barca,twingo,saber,elite11,redtruck,casablan,ashish,moneyy,pepper12,cnhtktw,rjcnbr,arschloch,phenix,cachorro,sunita,madoka,joselui,adams1,mymoney,hemicuda,fyutkjr,jake12,chicas,eeeee1,sonnyboy,smarties,birdy,kitten1,cnfcbr,island1,kurosaki,taekwond,konfetka,bennett1,omega3,jackson2,fresca,minako,octavian,kban667,feyenoord,muaythai,jakedog,fktrcfylhjdyf,1357911q,phuket,sexslave,fktrcfylhjdbx,asdfjk,89015173454,qwerty00,kindbud,eltoro,sex6969,nyknicks,12344321q,caballo,evenflow,hoddle,love22,metro1,mahalko,lawdog,tightass,manitou,buckie,whiskey1,anton123,335533,password4,primo,ramair,timbo,brayden,stewie,pedro1,yorkshir,ganster,hellothe,tippy1,direwolf,genesi,rodrig,enkeli,vaz21099,sorcerer,winky,oneshot,boggle,serebro,badger1,japanes,comicbook,kamehame,alcat,denis123,echo45,sexboy,gr8ful,hondo,voetbal,blue33,2112rush,geneviev,danni1,moosey,polkmn,matthew7,ironhead,hot2trot,ashley12,sweeper,imogen,blue21,retep,stealth1,guitarra,bernard1,tatian,frankfur,vfnhbwf,slacking,haha123,963741,asdasdas,katenok,airforce1,123456789qaz,shotgun1,12qwasz,reggie1,sharo,976431,pacifica,dhip6a,neptun,kardon,spooky1,beaut,555555a,toosweet,tiedup,11121314,startac,lover69,rediska,pirata,vfhrbp,1234qwerty,energize,hansolo1,playbo,larry123,oemdlg,cnjvfnjkju,a123123,alexan,gohawks,antonius,fcbayern,mambo,yummy1,kremlin,ellen1,tremere,vfiekz,bellevue,charlie9,izabella,malishka,fermat,rotterda,dawggy,becket,chasey,kramer1,21125150,lolit,cabrio,schlong,arisha,verity,3some,favorit,maricon,travelle,hotpants,red1234,garrett1,home123,knarf,seven777,figment,asdewq,canseco,good2go,warhol,thomas01,pionee,al9agd,panacea,chevy454,brazzers,oriole,azerty123,finalfan,patricio,northsta,rebelde,bulldo,stallone,boogie1,7uftyx,cfhfnjd,compusa,cornholi,config,deere,hoopster,sepultura,grasshop,babygurl,lesbo,diceman,proverbs,reddragon,nurbek,tigerwoo,superdup,buzzsaw,kakaroto,golgo13,edwar,123qaz123,butter1,sssss1,texas2,respekt,ou812ic,123456qaz,55555a,doctor1,mcgwire,maria123,aol999,cinders,aa1234,joness,ghbrjkmyj,makemone,sammyboy,567765,380zliki,theraven,testme,mylene,elvira26,indiglo,tiramisu,shannara,baby1,123666,gfhreh,papercut,johnmish,orange8,bogey1,mustang7,bagpipes,dimarik,vsijyjr,4637324,ravage,cogito,seven11,natashka,warzone,hr3ytm,4free,bigdee,000006,243462536,bigboi,123333,trouts,sandy123,szevasz,monica2,guderian,newlife1,ratchet,r12345,razorbac,12345i,piazza31,oddjob,beauty1,fffff1,anklet,nodrog,pepit,olivi,puravida,robert12,transam1,portman,bubbadog,steelers1,wilson1,eightball,mexico1,superboy,4rfv5tgb,mzepab,samurai1,fuckslut,colleen1,girdle,vfrcbvec,q1w2e3r4t,soldier1,19844891,alyssa1,a12345a,fidelis,skelter,nolove,mickeymouse,frehley,password69,watermel,aliska,soccer15,12345e,ladybug1,abulafia,adagio,tigerlil,takehana,hecate,bootneck,junfan,arigato,wonkette,bobby123,trustnoone,phantasm,132465798,brianjo,w12345,t34vfrc1991,deadeye,1robert,1daddy,adida,check1,grimlock,muffi,airwalk,prizrak,onclick,longbeac,ernie1,eadgbe,moore1,geniu,shadow123,bugaga,jonathan1,cjrjkjdf,orlova,buldog,talon1,westport,aenima,541233432442,barsuk,chicago2,kellys,hellbent,toughguy,iskander,skoal,whatisit,jake123,scooter2,fgjrfkbgcbc,ghandi,love13,adelphia,vjhrjdrf,adrenali,niunia,jemoeder,rainbo,all4u8,anime1,freedom7,seraph,789321,tommys,antman,firetruc,neogeo,natas,bmwm3,froggy1,paul1,mamit,bayview,gateways,kusanagi,ihateu,frederi,rock1,centurion,grizli,biggin,fish1,stalker1,3girls,ilovepor,klootzak,lollo,redsox04,kirill123,jake1,pampers,vasya,hammers1,teacup,towing,celtic1,ishtar,yingyang,4904s677075,dahc1,patriot1,patrick9,redbirds,doremi,rebecc,yoohoo,makarova,epiphone,rfgbnfy,milesd,blister,chelseafc,katana1,blackrose,1james,primrose,shock5,hard1,scooby12,c6h12o6,dustoff,boing,chisel,kamil,1william,defiant1,tyvugq,mp8o6d,aaa340,nafets,sonnet,flyhigh,242526,crewcom,love23,strike1,stairway,katusha,salamand,cupcake1,password0,007james,sunnie,multisync,harley01,tequila1,fred12,driver8,q8zo8wzq,hunter01,mozzer,temporar,eatmeraw,mrbrownxx,kailey,sycamore,flogger,tincup,rahasia,ganymede,bandera,slinger,1111122222,vander,woodys,1cowboy,khaled,jamies,london12,babyboo,tzpvaw,diogenes,budice,mavrick,135797531,cheeta,macros,squonk,blackber,topfuel,apache1,falcon16,darkjedi,cheeze,vfhvtkfl,sparco,change1,gfhfif,freestyl,kukuruza,loveme2,12345f,kozlov,sherpa,marbella,44445555,bocephus,1winner,alvar,hollydog,gonefish,iwantin,barman,godislove,amanda18,rfpfynbg,eugen,abcdef1,redhawk,thelema,spoonman,baller1,harry123,475869,tigerman,cdtnjxrf,marillio,scribble,elnino,carguy,hardhead,l2g7k3,troopers,selen,dragon76,antigua,ewtosi,ulysse,astana,paroli,cristo,carmex,marjan,bassfish,letitbe,kasparov,jay123,19933991,blue13,eyecandy,scribe,mylord,ukflbjkec,ellie1,beaver1,destro,neuken,halfpint,ameli,lilly1,satanic,xngwoj,12345trewq,asdf1,bulldogg,asakura,jesucrist,flipside,packers4,biggy,kadett,biteme69,bobdog,silverfo,saint1,bobbo,packman,knowledg,foolio,fussbal,12345g,kozerog,westcoas,minidisc,nbvcxw,martini1,alastair,rasengan,superbee,memento,porker,lena123,florenc,kakadu,bmw123,getalife,bigsky,monkee,people1,schlampe,red321,memyself,0147896325,12345678900987654321,soccer14,realdeal,gfgjxrf,bella123,juggs,doritos,celtics1,peterbilt,ghbdtnbrb,gnusmas,xcountry,ghbdtn1,batman99,deusex,gtnhjdf,blablabl,juster,marimba,love2,rerjkrf,alhambra,micros,siemens1,assmaste,moonie,dashadasha,atybrc,eeeeee1,wildrose,blue55,davidl,xrp23q,skyblue,leo123,ggggg1,bestfriend,franny,1234rmvb,fun123,rules1,sebastien,chester2,hakeem,winston2,fartripper,atlant,07831505,iluvsex,q1a2z3,larrys,009900,ghjkju,capitan,rider1,qazxsw21,belochka,andy123,hellya,chicca,maximal,juergen,password1234,howard1,quetzal,daniel123,qpwoeiruty,123555,bharat,ferrari3,numbnuts,savant,ladydog,phipsi,lovepussy,etoile,power2,mitten,britneys,chilidog,08522580,2fchbg,kinky1,bluerose,loulo,ricardo1,doqvq3,kswbdu,013cpfza,timoha,ghbdtnghbdtn,3stooges,gearhead,browns1,g00ber,super7,greenbud,kitty2,pootie,toolshed,gamers,coffe,ibill123,freelove,anasazi,sister1,jigger,natash,stacy1,weronika,luzern,soccer7,hoopla,dmoney,valerie1,canes,razdvatri,washere,greenwoo,rfhjkbyf,anselm,pkxe62,maribe,daniel2,maxim1,faceoff,carbine,xtkjdtr,buddy12,stratos,jumpman,buttocks,aqswdefr,pepsis,sonechka,steeler1,lanman,nietzsch,ballz,biscuit1,wrxsti,goodfood,juventu,federic,mattman,vika123,strelec,jledfyxbr,sideshow,4life,fredderf,bigwilly,12347890,12345671,sharik,bmw325i,fylhtqrf,dannon4,marky,mrhappy,drdoom,maddog1,pompier,cerbera,goobers,howler,jenny69,evely,letitrid,cthuttdyf,felip,shizzle,golf12,t123456,yamah,bluearmy,squishy,roxan,10inches,dollface,babygirl1,blacksta,kaneda,lexingto,canadien,222888,kukushka,sistema,224422,shadow69,ppspankp,mellons,barbie1,free4all,alfa156,lostone,2w3e4r5t,painkiller,robbie1,binger,8dihc6,jaspe,rellik,quark,sogood,hoopstar,number2,snowy1,dad2ownu,cresta,qwe123asd,hjvfyjdf,gibsonsg,qbg26i,dockers,grunge,duckling,lfiekz,cuntsoup,kasia1,1tigger,woaini,reksio,tmoney,firefighter,neuron,audia3,woogie,powerboo,powermac,fatcock,12345666,upnfmc,lustful,porn1,gotlove,amylee,kbytqrf,11924704,25251325,sarasota,sexme,ozzie1,berliner,nigga1,guatemal,seagulls,iloveyou!,chicken2,qwerty21,010203040506,1pillow,libby1,vodoley,backlash,piglets,teiubesc,019283,vonnegut,perico,thunde,buckey,gtxtymrf,manunite,iiiii1,lost4815162342,madonn,270873_,britney1,kevlar,piano1,boondock,colt1911,salamat,doma77ns,anuradha,cnhjqrf,rottweil,newmoon,topgun1,mauser,fightclu,birthday21,reviewpa,herons,aassddff,lakers32,melissa2,vredina,jiujitsu,mgoblue,shakey,moss84,12345zxcvb,funsex,benji1,garci,113322,chipie,windex,nokia5310,pwxd5x,bluemax,cosita,chalupa,trotsky,new123,g3ujwg,newguy,canabis,gnaget,happydays,felixx,1patrick,cumface,sparkie,kozlova,123234,newports,broncos7,golf18,recycle,hahah,harrypot,cachondo,open4me,miria,guessit,pepsione,knocker,usmc1775,countach,playe,wiking,landrover,cracksevi,drumline,a7777777,smile123,manzana,panty,liberta,pimp69,dolfan,quality1,schnee,superson,elaine22,webhompass,mrbrownx,deepsea,4wheel,mamasita,rockport,rollie,myhome,jordan12,kfvgjxrf,hockey12,seagrave,ford1,chelsea2,samsara,marissa1,lamesa,mobil1,piotrek,tommygun,yyyyy1,wesley1,billy123,homersim,julies,amanda12,shaka,maldini,suzenet,springst,iiiiii1,yakuza,111111aa,westwind,helpdesk,annamari,bringit,hopefull,hhhhhhh1,saywhat,mazdarx8,bulova,jennife1,baikal,gfhjkmxbr,victoria1,gizmo123,alex99,defjam,2girls,sandrock,positivo,shingo,syncmast,opensesa,silicone,fuckina,senna1,karlos,duffbeer,montagne,gehrig,thetick,pepino,hamburge,paramedic,scamp,smokeweed,fabregas,phantoms,venom121293,2583458,badone,porno69,manwhore,vfvf123,notagain,vbktyf,rfnthbyrf,wildblue,kelly001,dragon66,camell,curtis1,frolova,1212123,dothedew,tyler123,reddrago,planetx,promethe,gigolo,1001001,thisone,eugeni,blackshe,cruzazul,incognito,puller,joonas,quick1,spirit1,gazza,zealot,gordito,hotrod1,mitch1,pollito,hellcat,mythos,duluth,383pdjvl,easy123,hermos,binkie,its420,lovecraf,darien,romina,doraemon,19877891,syclone,hadoken,transpor,ichiro,intell,gargamel,dragon2,wavpzt,557744,rjw7x4,jennys,kickit,rjynfrn,likeit,555111,corvus,nec3520,133113,mookie1,bochum,samsung2,locoman0,154ugeiu,vfvfbgfgf,135792,[start],tenni,20001,vestax,hufmqw,neveragain,wizkid,kjgfnf,nokia6303,tristen,saltanat,louie1,gandalf2,sinfonia,alpha3,tolstoy,ford150,f00bar,1hello,alici,lol12,riker1,hellou,333888,1hunter,qw1234,vibrator,mets86,43211234,gonzale,cookies1,sissy1,john11,bubber,blue01,cup2006,gtkmvtyb,nazareth,heybaby,suresh,teddie,mozilla,rodeo1,madhouse,gamera,123123321,naresh,dominos,foxtrot1,taras,powerup,kipling,jasonb,fidget,galena,meatman,alpacino,bookmark,farting,humper,titsnass,gorgon,castaway,dianka,anutka,gecko1,fucklove,connery,wings1,erika1,peoria,moneymaker,ichabod,heaven1,paperboy,phaser,breakers,nurse1,westbrom,alex13,brendan1,123asd123,almera,grubber,clarkie,thisisme,welkom01,51051051051,crypto,freenet,pflybwf,black12,testme2,changeit,autobahn,attica,chaoss,denver1,tercel,gnasher23,master2,vasilii,sherman1,gomer,bigbuck,derek1,qwerzxcv,jumble,dragon23,art131313,numark,beasty,cxfcnmttcnm,updown,starion,glist,sxhq65,ranger99,monkey7,shifter,wolves1,4r5t6y,phone1,favorite5,skytommy,abracada,1martin,102030405060,gatech,giulio,blacktop,cheer1,africa1,grizzly1,inkjet,shemales,durango1,booner,11223344q,supergirl,vanyarespekt,dickless,srilanka,weaponx,6string,nashvill,spicey,boxer1,fabien,2sexy2ho,bowhunt,jerrylee,acrobat,tawnee,ulisse,nolimit8,l8g3bkde,pershing,gordo1,allover,gobrowns,123432,123444,321456987,spoon1,hhhhh1,sailing1,gardenia,teache,sexmachine,tratata,pirate1,niceone,jimbos,314159265,qsdfgh,bobbyy,ccccc1,carla1,vjkjltw,savana,biotech,frigid,123456789g,dragon10,yesiam,alpha06,oakwood,tooter,winsto,radioman,vavilon,asnaeb,google123,nariman,kellyb,dthyjcnm,password6,parol1,golf72,skate1,lthtdj,1234567890s,kennet,rossia,lindas,nataliya,perfecto,eminem1,kitana,aragorn1,rexona,arsenalf,planot,coope,testing123,timex,blackbox,bullhead,barbarian,dreamon,polaris1,cfvjktn,frdfhbev,gametime,slipknot666,nomad1,hfgcjlbz,happy69,fiddler,brazil1,joeboy,indianali,113355,obelisk,telemark,ghostrid,preston1,anonim,wellcome,verizon1,sayangku,censor,timeport,dummies,adult1,nbnfybr,donger,thales,iamgay,sexy1234,deadlift,pidaras,doroga,123qwe321,portuga,asdfgh12,happys,cadr14nu,pi3141,maksik,dribble,cortland,darken,stepanova,bommel,tropic,sochi2014,bluegras,shahid,merhaba,nacho,2580456,orange44,kongen,3cudjz,78girl,my3kids,marcopol,deadmeat,gabbie,saruman,jeepman,freddie1,katie123,master99,ronal,ballbag,centauri,killer7,xqgann,pinecone,jdeere,geirby,aceshigh,55832811,pepsimax,rayden,razor1,tallyho,ewelina,coldfire,florid,glotest,999333,sevenup,bluefin,limaperu,apostol,bobbins,charmed1,michelin,sundin,centaur,alphaone,christof,trial1,lions1,45645,just4you,starflee,vicki1,cougar1,green2,jellyfis,batman69,games1,hihje863,crazyzil,w0rm1,oklick,dogbite,yssup,sunstar,paprika,postov10,124578963,x24ik3,kanada,buckster,iloveamy,bear123,smiler,nx74205,ohiostat,spacey,bigbill,doudo,nikolaeva,hcleeb,sex666,mindy1,buster11,deacons,boness,njkcnsq,candy2,cracker1,turkey1,qwertyu1,gogreen,tazzzz,edgewise,ranger01,qwerty6,blazer1,arian,letmeinnow,cigar1,jjjjjj1,grigio,frien,tenchu,f9lmwd,imissyou,filipp,heathers,coolie,salem1,woodduck,scubadiv,123kat,raffaele,nikolaev,dapzu455,skooter,9inches,lthgfhjkm,gr8one,ffffff1,zujlrf,amanda69,gldmeo,m5wkqf,rfrltkf,televisi,bonjou,paleale,stuff1,cumalot,fuckmenow,climb7,mark1234,t26gn4,oneeye,george2,utyyflbq,hunting1,tracy71,ready2go,hotguy,accessno,charger1,rudedog,kmfdm,goober1,sweetie1,wtpmjgda,dimensio,ollie1,pickles1,hellraiser,mustdie,123zzz,99887766,stepanov,verdun,tokenbad,anatol,bartende,cidkid86,onkelz,timmie,mooseman,patch1,12345678c,marta1,dummy1,bethany1,myfamily,history1,178500,lsutiger,phydeaux,moren,dbrnjhjdbx,gnbxrf,uniden,drummers,abpbrf,godboy,daisy123,hogan1,ratpack,irland,tangerine,greddy,flore,sqrunch,billyjoe,q55555,clemson1,98745632,marios,ishot,angelin,access12,naruto12,lolly,scxakv,austin12,sallad,cool99,rockit,mongo1,mark22,ghbynth,ariadna,senha,docto,tyler2,mobius,hammarby,192168,anna12,claire1,pxx3eftp,secreto,greeneye,stjabn,baguvix,satana666,rhbcnbyjxrf,dallastx,garfiel,michaelj,1summer,montan,1234ab,filbert,squids,fastback,lyudmila,chucho,eagleone,kimberle,ar3yuk3,jake01,nokids,soccer22,1066ad,ballon,cheeto,review69,madeira,taylor2,sunny123,chubbs,lakeland,striker1,porche,qwertyu8,digiview,go1234,ferari,lovetits,aditya,minnow,green3,matman,cellphon,fortytwo,minni,pucara,69a20a,roman123,fuente,12e3e456,paul12,jacky,demian,littleman,jadakiss,vlad1997,franca,282860,midian,nunzio,xaccess2,colibri,jessica0,revilo,654456,harvey1,wolf1,macarena,corey1,husky1,arsen,milleniu,852147,crowes,redcat,combat123654,hugger,psalms,quixtar,ilovemom,toyot,ballss,ilovekim,serdar,james23,avenger1,serendip,malamute,nalgas,teflon,shagger,letmein6,vyjujnjxbt,assa1234,student1,dixiedog,gznybwf13,fuckass,aq1sw2de3,robroy,hosehead,sosa21,123345,ias100,teddy123,poppin,dgl70460,zanoza,farhan,quicksilver,1701d,tajmahal,depechemode,paulchen,angler,tommy2,recoil,megamanx,scarecro,nicole2,152535,rfvtgb,skunky,fatty1,saturno,wormwood,milwauke,udbwsk,sexlover,stefa,7bgiqk,gfnhbr,omar10,bratan,lbyfvj,slyfox,forest1,jambo,william3,tempus,solitari,lucydog,murzilka,qweasdzxc1,vehpbkrf,12312345,fixit,woobie,andre123,123456789x,lifter,zinaida,soccer17,andone,foxbat,torsten,apple12,teleport,123456i,leglover,bigcocks,vologda,dodger1,martyn,d6o8pm,naciona,eagleeye,maria6,rimshot,bentley1,octagon,barbos,masaki,gremio,siemen,s1107d,mujeres,bigtits1,cherr,saints1,mrpink,simran,ghzybr,ferrari2,secret12,tornado1,kocham,picolo,deneme,onelove1,rolan,fenster,1fuckyou,cabbie,pegaso,nastyboy,password5,aidana,mine2306,mike13,wetone,tigger69,ytreza,bondage1,myass,golova,tolik,happyboy,poilkj,nimda2k,rammer,rubies,hardcore1,jetset,hoops1,jlaudio,misskitt,1charlie,google12,theone1,phred,porsch,aalborg,luft4,charlie5,password7,gnosis,djgabbab,1daniel,vinny,borris,cumulus,member1,trogdor,darthmau,andrew2,ktjybl,relisys,kriste,rasta220,chgobndg,weener,qwerty66,fritter,followme,freeman1,ballen,blood1,peache,mariso,trevor1,biotch,gtfullam,chamonix,friendste,alligato,misha1,1soccer,18821221,venkat,superd,molotov,bongos,mpower,acun3t1x,dfcmrf,h4x3d,rfhfufylf,tigran,booyaa,plastic1,monstr,rfnhby,lookatme,anabolic,tiesto,simon123,soulman,canes1,skyking,tomcat1,madona,bassline,dasha123,tarheel1,dutch1,xsw23edc,qwerty123456789,imperator,slaveboy,bateau,paypal,house123,pentax,wolf666,drgonzo,perros,digger1,juninho,hellomoto,bladerun,zzzzzzz1,keebler,take8422,fffffff1,ginuwine,israe,caesar1,crack1,precious1,garand,magda1,zigazaga,321ewq,johnpaul,mama1234,iceman69,sanjeev,treeman,elric,rebell,1thunder,cochon,deamon,zoltan,straycat,uhbyuj,luvfur,mugsy,primer,wonder1,teetime,candycan,pfchfytw,fromage,gitler,salvatio,piggy1,23049307,zafira,chicky,sergeev,katze,bangers,andriy,jailbait,vaz2107,ghbhjlf,dbjktnnf,aqswde,zaratustra,asroma,1pepper,alyss,kkkkk1,ryan1,radish,cozumel,waterpol,pentium1,rosebowl,farmall,steinway,dbrekz,baranov,jkmuf,another1,chinacat,qqqqqqq1,hadrian,devilmaycry4,ratbag,teddy2,love21,pullings,packrat,robyn1,boobo,qw12er34,tribe1,rosey,celestia,nikkie,fortune12,olga123,danthema,gameon,vfrfhjys,dilshod,henry14,jenova,redblue,chimaera,pennywise,sokrates,danimal,qqaazz,fuaqz4,killer2,198200,tbone1,kolyan,wabbit,lewis1,maxtor,egoist,asdfas,spyglass,omegas,jack12,nikitka,esperanz,doozer,matematika,wwwww1,ssssss1,poiu0987,suchka,courtney1,gungho,alpha2,fktyjxrf,summer06,bud420,devildriver,heavyd,saracen,foucault,choclate,rjdfktyrj,goblue1,monaro,jmoney,dcpugh,efbcapa201,qqh92r,pepsicol,bbb747,ch5nmk,honeyb,beszoptad,tweeter,intheass,iseedeadpeople,123dan,89231243658s,farside1,findme,smiley1,55556666,sartre,ytcnjh,kacper,costarica,134679258,mikeys,nolimit9,vova123,withyou,5rxypn,love143,freebie,rescue1,203040,michael6,12monkey,redgreen,steff,itstime,naveen,good12345,acidrain,1dawg,miramar,playas,daddio,orion2,852741,studmuff,kobe24,senha123,stephe,mehmet,allalone,scarface1,helloworld,smith123,blueyes,vitali,memphis1,mybitch,colin1,159874,1dick,podaria,d6wnro,brahms,f3gh65,dfcbkmtd,xxxman,corran,ugejvp,qcfmtz,marusia,totem,arachnid,matrix2,antonell,fgntrf,zemfira,christos,surfing1,naruto123,plato1,56qhxs,madzia,vanille,043aaa,asq321,mutton,ohiostate,golde,cdznjckfd,rhfcysq,green5,elephan,superdog,jacqueli,bollock,lolitas,nick12,1orange,maplelea,july23,argento,waldorf,wolfer,pokemon12,zxcvbnmm,flicka,drexel,outlawz,harrie,atrain,juice2,falcons1,charlie6,19391945,tower1,dragon21,hotdamn,dirtyboy,love4ever,1ginger,thunder2,virgo1,alien1,bubblegu,4wwvte,123456789qqq,realtime,studio54,passss,vasilek,awsome,giorgia,bigbass,2002tii,sunghile,mosdef,simbas,count0,uwrl7c,summer05,lhepmz,ranger21,sugarbea,principe,5550123,tatanka,9638v,cheerios,majere,nomercy,jamesbond007,bh90210,7550055,jobber,karaganda,pongo,trickle,defamer,6chid8,1q2a3z,tuscan,nick123,.adgjm,loveyo,hobbes1,note1234,shootme,171819,loveporn,9788960,monty123,fabrice,macduff,monkey13,shadowfa,tweeker,hanna1,madball,telnet,loveu2,qwedcxzas,thatsit,vfhcbr,ptfe3xxp,gblfhfcs,ddddddd1,hakkinen,liverune,deathsta,misty123,suka123,recon1,inferno1,232629,polecat,sanibel,grouch,hitech,hamradio,rkfdbfnehf,vandam,nadin,fastlane,shlong,iddqdidkfa,ledzeppelin,sexyfeet,098123,stacey1,negras,roofing,lucifer1,ikarus,tgbyhn,melnik,barbaria,montego,twisted1,bigal1,jiggle,darkwolf,acerview,silvio,treetops,bishop1,iwanna,pornsite,happyme,gfccdjhl,114411,veritech,batterse,casey123,yhntgb,mailto,milli,guster,q12345678,coronet,sleuth,fuckmeha,armadill,kroshka,geordie,lastochka,pynchon,killall,tommy123,sasha1996,godslove,hikaru,clticic,cornbrea,vfkmdbyf,passmaster,123123123a,souris,nailer,diabolo,skipjack,martin12,hinata,mof6681,brookie,dogfight,johnso,karpov,326598,rfvbrflpt,travesti,caballer,galaxy1,wotan,antoha,art123,xakep1234,ricflair,pervert1,p00kie,ambulanc,santosh,berserker,larry33,bitch123,a987654321,dogstar,angel22,cjcbcrf,redhouse,toodles,gold123,hotspot,kennedy1,glock21,chosen1,schneide,mainman,taffy1,3ki42x,4zqauf,ranger2,4meonly,year2000,121212a,kfylsi,netzwerk,diese,picasso1,rerecz,225522,dastan,swimmer1,brooke1,blackbea,oneway,ruslana,dont4get,phidelt,chrisp,gjyxbr,xwing,kickme,shimmy,kimmy1,4815162342lost,qwerty5,fcporto,jazzbo,mierd,252627,basses,sr20det,00133,florin,howdy1,kryten,goshen,koufax,cichlid,imhotep,andyman,wrest666,saveme,dutchy,anonymou,semprini,siempre,mocha1,forest11,wildroid,aspen1,sesam,kfgekz,cbhbec,a55555,sigmanu,slash1,giggs11,vatech,marias,candy123,jericho1,kingme,123a123,drakula,cdjkjxm,mercur,oneman,hoseman,plumper,ilovehim,lancers,sergey1,takeshi,goodtogo,cranberr,ghjcnj123,harvick,qazxs,1972chev,horsesho,freedom3,letmein7,saitek,anguss,vfvfgfgfz,300000,elektro,toonporn,999111999q,mamuka,q9umoz,edelweis,subwoofer,bayside,disturbe,volition,lucky3,12345678z,3mpz4r,march1,atlantida,strekoza,seagrams,090909t,yy5rbfsc,jack1234,sammy12,sampras,mark12,eintrach,chaucer,lllll1,nochance,whitepower,197000,lbvekz,passer,torana,12345as,pallas,koolio,12qw34,nokia8800,findout,1thomas,mmmmm1,654987,mihaela,chinaman,superduper,donnas,ringo1,jeroen,gfdkjdf,professo,cdtnrf,tranmere,tanstaaf,himera,ukflbfnjh,667788,alex32,joschi,w123456,okidoki,flatline,papercli,super8,doris1,2good4u,4z34l0ts,pedigree,freeride,gsxr1100,wulfgar,benjie,ferdinan,king1,charlie7,djdxbr,fhntvbq,ripcurl,2wsx1qaz,kingsx,desade,sn00py,loveboat,rottie,evgesha,4money,dolittle,adgjmpt,buzzers,brett1,makita,123123qweqwe,rusalka,sluts1,123456e,jameson1,bigbaby,1z2z3z,ckjybr,love4u,fucker69,erhfbyf,jeanluc,farhad,fishfood,merkin,giant1,golf69,rfnfcnhjaf,camera1,stromb,smoothy,774411,nylon,juice1,rfn.irf,newyor,123456789t,marmot,star11,jennyff,jester1,hisashi,kumquat,alex777,helicopt,merkur,dehpye,cummin,zsmj2v,kristjan,april12,englan,honeypot,badgirls,uzumaki,keines,p12345,guita,quake1,duncan1,juicer,milkbone,hurtme,123456789b,qq123456789,schwein,p3wqaw,54132442,qwertyytrewq,andreeva,ruffryde,punkie,abfkrf,kristinka,anna1987,ooooo1,335533aa,umberto,amber123,456123789,456789123,beelch,manta,peeker,1112131415,3141592654,gipper,wrinkle5,katies,asd123456,james11,78n3s5af,michael0,daboss,jimmyb,hotdog1,david69,852123,blazed,sickan,eljefe,2n6wvq,gobills,rfhfcm,squeaker,cabowabo,luebri,karups,test01,melkor,angel777,smallvil,modano,olorin,4rkpkt,leslie1,koffie,shadows1,littleon,amiga1,topeka,summer20,asterix1,pitstop,aloysius,k12345,magazin,joker69,panocha,pass1word,1233214,ironpony,368ejhih,88keys,pizza123,sonali,57np39,quake2,1234567890qw,1020304,sword1,fynjif,abcde123,dfktyjr,rockys,grendel1,harley12,kokakola,super2,azathoth,lisa123,shelley1,girlss,ibragim,seven1,jeff24,1bigdick,dragan,autobot,t4nvp7,omega123,900000,hecnfv,889988,nitro1,doggie1,fatjoe,811pahc,tommyt,savage1,pallino,smitty1,jg3h4hfn,jamielee,1qazwsx,zx123456,machine1,asdfgh123,guinnes,789520,sharkman,jochen,legend1,sonic2,extreme1,dima12,photoman,123459876,nokian95,775533,vaz2109,april10,becks,repmvf,pooker,qwer12345,themaster,nabeel,monkey10,gogetit,hockey99,bbbbbbb1,zinedine,dolphin2,anelka,1superma,winter01,muggsy,horny2,669966,kuleshov,jesusis,calavera,bullet1,87t5hdf,sleepers,winkie,vespa,lightsab,carine,magister,1spider,shitbird,salavat,becca1,wc18c2,shirak,galactus,zaskar,barkley1,reshma,dogbreat,fullsail,asasa,boeder,12345ta,zxcvbnm12,lepton,elfquest,tony123,vkaxcs,savatage,sevilia1,badkitty,munkey,pebbles1,diciembr,qapmoc,gabriel2,1qa2ws3e,cbcmrb,welldone,nfyufh,kaizen,jack11,manisha,grommit,g12345,maverik,chessman,heythere,mixail,jjjjjjj1,sylvia1,fairmont,harve,skully,global1,youwish,pikachu1,badcat,zombie1,49527843,ultra1,redrider,offsprin,lovebird,153426,stymie,aq1sw2,sorrento,0000001,r3ady41t,webster1,95175,adam123,coonass,159487,slut1,gerasim,monkey99,slutwife,159963,1pass1page,hobiecat,bigtymer,all4you,maggie2,olamide,comcast1,infinit,bailee,vasileva,.ktxrf,asdfghjkl1,12345678912,setter,fuckyou7,nnagqx,lifesuck,draken,austi,feb2000,cable1,1234qwerasdf,hax0red,zxcv12,vlad7788,nosaj,lenovo,underpar,huskies1,lovegirl,feynman,suerte,babaloo,alskdjfhg,oldsmobi,bomber1,redrover,pupuce,methodman,phenom,cutegirl,countyli,gretsch,godisgood,bysunsu,hardhat,mironova,123qwe456rty,rusty123,salut,187211,555666777,11111z,mahesh,rjntyjxtr,br00klyn,dunce1,timebomb,bovine,makelove,littlee,shaven,rizwan,patrick7,42042042,bobbijo,rustem,buttmunc,dongle,tiger69,bluecat,blackhol,shirin,peaces,cherub,cubase,longwood,lotus7,gwju3g,bruin,pzaiu8,green11,uyxnyd,seventee,dragon5,tinkerbel,bluess,bomba,fedorova,joshua2,bodyshop,peluche,gbpacker,shelly1,d1i2m3a4,ghtpbltyn,talons,sergeevna,misato,chrisc,sexmeup,brend,olddog,davros,hazelnut,bridget1,hzze929b,readme,brethart,wild1,ghbdtnbr1,nortel,kinger,royal1,bucky1,allah1,drakkar,emyeuanh,gallaghe,hardtime,jocker,tanman,flavio,abcdef123,leviatha,squid1,skeet,sexse,123456x,mom4u4mm,lilred,djljktq,ocean11,cadaver,baxter1,808state,fighton,primavera,1andrew,moogle,limabean,goddess1,vitalya,blue56,258025,bullride,cicci,1234567d,connor1,gsxr11,oliveoil,leonard1,legsex,gavrik,rjnjgtc,mexicano,2bad4u,goodfellas,ornw6d,mancheste,hawkmoon,zlzfrh,schorsch,g9zns4,bashful,rossi46,stephie,rfhfntkm,sellout,123fuck,stewar1,solnze,00007,thor5200,compaq12,didit,bigdeal,hjlbyf,zebulon,wpf8eu,kamran,emanuele,197500,carvin,ozlq6qwm,3syqo15hil,pennys,epvjb6,asdfghjkl123,198000,nfbcbz,jazzer,asfnhg66,zoloft,albundy,aeiou,getlaid,planet1,gjkbyjxrf,alex2000,brianb,moveon,maggie11,eieio,vcradq,shaggy1,novartis,cocoloco,dunamis,554uzpad,sundrop,1qwertyu,alfie,feliks,briand,123www,red456,addams,fhntv1998,goodhead,theway,javaman,angel01,stratoca,lonsdale,15987532,bigpimpin,skater1,issue43,muffie,yasmina,slowride,crm114,sanity729,himmel,carolcox,bustanut,parabola,masterlo,computador,crackhea,dynastar,rockbott,doggysty,wantsome,bigten,gaelle,juicy1,alaska1,etower,sixnine,suntan,froggies,nokia7610,hunter11,njnets,alicante,buttons1,diosesamo,elizabeth1,chiron,trustnoo,amatuers,tinytim,mechta,sammy2,cthulu,trs8f7,poonam,m6cjy69u35,cookie12,blue25,jordans,santa1,kalinka,mikey123,lebedeva,12345689,kissss,queenbee,vjybnjh,ghostdog,cuckold,bearshare,rjcntyrj,alinochka,ghjcnjrdfibyj,aggie1,teens1,3qvqod,dauren,tonino,hpk2qc,iqzzt580,bears85,nascar88,theboy,njqcw4,masyanya,pn5jvw,intranet,lollone,shadow99,00096462,techie,cvtifhbrb,redeemed,gocanes,62717315,topman,intj3a,cobrajet,antivirus,whyme,berserke,ikilz083,airedale,brandon2,hopkig,johanna1,danil8098,gojira,arthu,vision1,pendragon,milen,chrissie,vampiro,mudder,chris22,blowme69,omega7,surfers,goterps,italy1,baseba11,diego1,gnatsum,birdies,semenov,joker123,zenit2011,wojtek,cab4ma99,watchmen,damia,forgotte,fdm7ed,strummer,freelanc,cingular,orange77,mcdonalds,vjhjpjdf,kariya,tombston,starlet,hawaii1,dantheman,megabyte,nbvjirf,anjing,ybrjkftdbx,hotmom,kazbek,pacific1,sashimi,asd12,coorslig,yvtte545,kitte,elysium,klimenko,cobblers,kamehameha,only4me,redriver,triforce,sidorov,vittoria,fredi,dank420,m1234567,fallout2,989244342a,crazy123,crapola,servus,volvos,1scooter,griffin1,autopass,ownzyou,deviant,george01,2kgwai,boeing74,simhrq,hermosa,hardcor,griffy,rolex1,hackme,cuddles1,master3,bujhtr,aaron123,popolo,blader,1sexyred,gerry1,cronos,ffvdj474,yeehaw,bob1234,carlos2,mike77,buckwheat,ramesh,acls2h,monster2,montess,11qq22ww,lazer,zx123456789,chimpy,masterch,sargon,lochness,archana,1234qwert,hbxfhl,sarahb,altoid,zxcvbn12,dakot,caterham,dolomite,chazz,r29hqq,longone,pericles,grand1,sherbert,eagle3,pudge,irontree,synapse,boome,nogood,summer2,pooki,gangsta1,mahalkit,elenka,lbhtrnjh,dukedog,19922991,hopkins1,evgenia,domino1,x123456,manny1,tabbycat,drake1,jerico,drahcir,kelly2,708090a,facesit,11c645df,mac123,boodog,kalani,hiphop1,critters,hellothere,tbirds,valerka,551scasi,love777,paloalto,mrbrown,duke3d,killa1,arcturus,spider12,dizzy1,smudger,goddog,75395,spammy,1357997531,78678,datalife,zxcvbn123,1122112211,london22,23dp4x,rxmtkp,biggirls,ownsu,lzbs2twz,sharps,geryfe,237081a,golakers,nemesi,sasha1995,pretty1,mittens1,d1lakiss,speedrac,gfhjkmm,sabbat,hellrais,159753258,qwertyuiop123,playgirl,crippler,salma,strat1,celest,hello5,omega5,cheese12,ndeyl5,edward12,soccer3,cheerio,davido,vfrcbr,gjhjctyjr,boscoe,inessa,shithole,ibill,qwepoi,201jedlz,asdlkj,davidk,spawn2,ariel1,michael4,jamie123,romantik,micro1,pittsbur,canibus,katja,muhtar,thomas123,studboy,masahiro,rebrov,patrick8,hotboys,sarge1,1hammer,nnnnn1,eistee,datalore,jackdani,sasha2010,mwq6qlzo,cmfnpu,klausi,cnhjbntkm,andrzej,ilovejen,lindaa,hunter123,vvvvv1,novembe,hamster1,x35v8l,lacey1,1silver,iluvporn,valter,herson,alexsandr,cojones,backhoe,womens,777angel,beatit,klingon1,ta8g4w,luisito,benedikt,maxwel,inspecto,zaq12ws,wladimir,bobbyd,peterj,asdfg12,hellspawn,bitch69,nick1234,golfer23,sony123,jello1,killie,chubby1,kodaira52,yanochka,buckfast,morris1,roaddogg,snakeeye,sex1234,mike22,mmouse,fucker11,dantist,brittan,vfrfhjdf,doc123,plokijuh,emerald1,batman01,serafim,elementa,soccer9,footlong,cthuttdbx,hapkido,eagle123,getsmart,getiton,batman2,masons,mastiff,098890,cfvfhf,james7,azalea,sherif,saun24865709,123red,cnhtrjpf,martina1,pupper,michael5,alan12,shakir,devin1,ha8fyp,palom,mamulya,trippy,deerhunter,happyone,monkey77,3mta3,123456789f,crownvic,teodor,natusik,0137485,vovchik,strutter,triumph1,cvetok,moremone,sonnen,screwbal,akira1,sexnow,pernille,independ,poopies,samapi,kbcbxrf,master22,swetlana,urchin,viper2,magica,slurpee,postit,gilgames,kissarmy,clubpenguin,limpbizk,timber1,celin,lilkim,fuckhard,lonely1,mom123,goodwood,extasy,sdsadee23,foxglove,malibog,clark1,casey2,shell1,odense,balefire,dcunited,cubbie,pierr,solei,161718,bowling1,areyukesc,batboy,r123456,1pionee,marmelad,maynard1,cn42qj,cfvehfq,heathrow,qazxcvbn,connecti,secret123,newfie,xzsawq21,tubitzen,nikusha,enigma1,yfcnz123,1austin,michaelc,splunge,wanger,phantom2,jason2,pain4me,primetime21,babes1,liberte,sugarray,undergro,zonker,labatts,djhjyf,watch1,eagle5,madison2,cntgfirf,sasha2,masterca,fiction7,slick50,bruins1,sagitari,12481632,peniss,insuranc,2b8riedt,12346789,mrclean,ssptx452,tissot,q1w2e3r4t5y6u7,avatar1,comet1,spacer,vbrjkf,pass11,wanker1,14vbqk9p,noshit,money4me,sayana,fish1234,seaways,pipper,romeo123,karens,wardog,ab123456,gorilla1,andrey123,lifesucks,jamesr,4wcqjn,bearman,glock22,matt11,dflbvrf,barbi,maine1,dima1997,sunnyboy,6bjvpe,bangkok1,666666q,rafiki,letmein0,0raziel0,dalla,london99,wildthin,patrycja,skydog,qcactw,tmjxn151,yqlgr667,jimmyd,stripclub,deadwood,863abgsg,horses1,qn632o,scatman,sonia1,subrosa,woland,kolya,charlie4,moleman,j12345,summer11,angel11,blasen,sandal,mynewpas,retlaw,cambria,mustang4,nohack04,kimber45,fatdog,maiden1,bigload,necron,dupont24,ghost123,turbo2,.ktymrf,radagast,balzac,vsevolod,pankaj,argentum,2bigtits,mamabear,bumblebee,mercury7,maddie1,chomper,jq24nc,snooky,pussylic,1lovers,taltos,warchild,diablo66,jojo12,sumerki,aventura,gagger,annelies,drumset,cumshots,azimut,123580,clambake,bmw540,birthday54,psswrd,paganini,wildwest,filibert,teaseme,1test,scampi,thunder5,antosha,purple12,supersex,hhhhhh1,brujah,111222333a,13579a,bvgthfnjh,4506802a,killians,choco,qqqwwweee,raygun,1grand,koetsu13,sharp1,mimi92139,fastfood,idontcare,bluered,chochoz,4z3al0ts,target1,sheffiel,labrat,stalingrad,147123,cubfan,corvett1,holden1,snapper1,4071505,amadeo,pollo,desperados,lovestory,marcopolo,mumbles,familyguy,kimchee,marcio,support1,tekila,shygirl1,trekkie,submissi,ilaria,salam,loveu,wildstar,master69,sales1,netware,homer2,arseniy,gerrity1,raspberr,atreyu,stick1,aldric,tennis12,matahari,alohomora,dicanio,michae1,michaeld,666111,luvbug,boyscout,esmerald,mjordan,admiral1,steamboa,616913,ybhdfyf,557711,555999,sunray,apokalipsis,theroc,bmw330,buzzy,chicos,lenusik,shadowma,eagles05,444222,peartree,qqq123,sandmann,spring1,430799,phatass,andi03,binky1,arsch,bamba,kenny123,fabolous,loser123,poop12,maman,phobos,tecate,myxworld4,metros,cocorico,nokia6120,johnny69,hater,spanked,313233,markos,love2011,mozart1,viktoriy,reccos,331234,hornyone,vitesse,1um83z,55555q,proline,v12345,skaven,alizee,bimini,fenerbahce,543216,zaqqaz,poi123,stabilo,brownie1,1qwerty1,dinesh,baggins1,1234567t,davidkin,friend1,lietuva,octopuss,spooks,12345qq,myshit,buttface,paradoxx,pop123,golfin,sweet69,rfghbp,sambuca,kayak1,bogus1,girlz,dallas12,millers,123456zx,operatio,pravda,eternal1,chase123,moroni,proust,blueduck,harris1,redbarch,996699,1010101,mouche,millenni,1123456,score1,1234565,1234576,eae21157,dave12,pussyy,gfif1991,1598741,hoppy,darrian,snoogins,fartface,ichbins,vfkbyrf,rusrap,2741001,fyfrjylf,aprils,favre,thisis,bannana,serval,wiggum,satsuma,matt123,ivan123,gulmira,123zxc123,oscar2,acces,annie2,dragon0,emiliano,allthat,pajaro,amandine,rawiswar,sinead,tassie,karma1,piggys,nokias,orions,origami,type40,mondo,ferrets,monker,biteme2,gauntlet,arkham,ascona,ingram01,klem1,quicksil,bingo123,blue66,plazma,onfire,shortie,spjfet,123963,thered,fire777,lobito,vball,1chicken,moosehea,elefante,babe23,jesus12,parallax,elfstone,number5,shrooms,freya,hacker1,roxette,snoops,number7,fellini,dtlmvf,chigger,mission1,mitsubis,kannan,whitedog,james01,ghjgecr,rfnfgekmnf,everythi,getnaked,prettybo,sylvan,chiller,carrera4,cowbo,biochem,azbuka,qwertyuiop1,midnight1,informat,audio1,alfred1,0range,sucker1,scott2,russland,1eagle,torben,djkrjlfd,rocky6,maddy1,bonobo,portos,chrissi,xjznq5,dexte,vdlxuc,teardrop,pktmxr,iamtheone,danijela,eyphed,suzuki1,etvww4,redtail,ranger11,mowerman,asshole2,coolkid,adriana1,bootcamp,longcut,evets,npyxr5,bighurt,bassman1,stryder,giblet,nastja,blackadd,topflite,wizar,cumnow,technolo,bassboat,bullitt,kugm7b,maksimus,wankers,mine12,sunfish,pimpin1,shearer9,user1,vjzgjxnf,tycobb,80070633pc,stanly,vitaly,shirley1,cinzia,carolyn1,angeliqu,teamo,qdarcv,aa123321,ragdoll,bonit,ladyluck,wiggly,vitara,jetbalance,12345600,ozzman,dima12345,mybuddy,shilo,satan66,erebus,warrio,090808qwe,stupi,bigdan,paul1234,chiapet,brooks1,philly1,dually,gowest,farmer1,1qa2ws3ed4rf,alberto1,beachboy,barne,aa12345,aliyah,radman,benson1,dfkthbq,highball,bonou2,i81u812,workit,darter,redhook,csfbr5yy,buttlove,episode1,ewyuza,porthos,lalal,abcd12,papero,toosexy,keeper1,silver7,jujitsu,corset,pilot123,simonsay,pinggolf,katerinka,kender,drunk1,fylhjvtlf,rashmi,nighthawk,maggy,juggernaut,larryb,cabibble,fyabcf,247365,gangstar,jaybee,verycool,123456789qw,forbidde,prufrock,12345zxc,malaika,blackbur,docker,filipe,koshechka,gemma1,djamaal,dfcbkmtdf,gangst,9988aa,ducks1,pthrfkj,puertorico,muppets,griffins,whippet,sauber,timofey,larinso,123456789zxc,quicken,qsefth,liteon,headcase,bigdadd,zxc321,maniak,jamesc,bassmast,bigdogs,1girls,123xxx,trajan,lerochka,noggin,mtndew,04975756,domin,wer123,fumanchu,lambada,thankgod,june22,kayaking,patchy,summer10,timepass,poiu1234,kondor,kakka,lament,zidane10,686xqxfg,l8v53x,caveman1,nfvthkfy,holymoly,pepita,alex1996,mifune,fighter1,asslicker,jack22,abc123abc,zaxxon,midnigh,winni,psalm23,punky,monkey22,password13,mymusic,justyna,annushka,lucky5,briann,495rus19,withlove,almaz,supergir,miata,bingbong,bradpitt,kamasutr,yfgjktjy,vanman,pegleg,amsterdam1,123a321,letmein9,shivan,korona,bmw520,annette1,scotsman,gandal,welcome12,sc00by,qpwoei,fred69,m1sf1t,hamburg1,1access,dfkmrbhbz,excalibe,boobies1,fuckhole,karamel,starfuck,star99,breakfas,georgiy,ywvxpz,smasher,fatcat1,allanon,12345n,coondog,whacko,avalon1,scythe,saab93,timon,khorne,atlast,nemisis,brady12,blenheim,52678677,mick7278,9skw5g,fleetwoo,ruger1,kissass,pussy7,scruff,12345l,bigfun,vpmfsz,yxkck878,evgeny,55667788,lickher,foothill,alesis,poppies,77777778,californi,mannie,bartjek,qhxbij,thehulk,xirt2k,angelo4ek,rfkmrekznjh,tinhorse,1david,sparky12,night1,luojianhua,bobble,nederland,rosemari,travi,minou,ciscokid,beehive,565hlgqo,alpine1,samsung123,trainman,xpress,logistic,vw198m2n,hanter,zaqwsx123,qwasz,mariachi,paska,kmg365,kaulitz,sasha12,north1,polarbear,mighty1,makeksa11,123456781,one4all,gladston,notoriou,polniypizdec110211,gosia,grandad,xholes,timofei,invalidp,speaker1,zaharov,maggiema,loislane,gonoles,br5499,discgolf,kaskad,snooper,newman1,belial,demigod,vicky1,pridurok,alex1990,tardis1,cruzer,hornie,sacramen,babycat,burunduk,mark69,oakland1,me1234,gmctruck,extacy,sexdog,putang,poppen,billyd,1qaz2w,loveable,gimlet,azwebitalia,ragtop,198500,qweas,mirela,rock123,11bravo,sprewell,tigrenok,jaredleto,vfhbif,blue2,rimjob,catwalk,sigsauer,loqse,doromich,jack01,lasombra,jonny5,newpassword,profesor,garcia1,123as123,croucher,demeter,4_life,rfhfvtkm,superman2,rogues,assword1,russia1,jeff1,mydream,z123456789,rascal1,darre,kimberl,pickle1,ztmfcq,ponchik,lovesporn,hikari,gsgba368,pornoman,chbjun,choppy,diggity,nightwolf,viktori,camar,vfhecmrf,alisa1,minstrel,wishmaster,mulder1,aleks,gogirl,gracelan,8womys,highwind,solstice,dbrnjhjdyf,nightman,pimmel,beertje,ms6nud,wwfwcw,fx3tuo,poopface,asshat,dirtyd,jiminy,luv2fuck,ptybnxtvgbjy,dragnet,pornogra,10inch,scarlet1,guido1,raintree,v123456,1aaaaaaa,maxim1935,hotwater,gadzooks,playaz,harri,brando1,defcon1,ivanna,123654a,arsenal2,candela,nt5d27,jaime1,duke1,burton1,allstar1,dragos,newpoint,albacore,1236987z,verygoodbot,1wildcat,fishy1,ptktysq,chris11,puschel,itdxtyrj,7kbe9d,serpico,jazzie,1zzzzz,kindbuds,wenef45313,1compute,tatung,sardor,gfyfcjybr,test99,toucan,meteora,lysander,asscrack,jowgnx,hevnm4,suckthis,masha123,karinka,marit,oqglh565,dragon00,vvvbbb,cheburashka,vfrfrf,downlow,unforgiven,p3e85tr,kim123,sillyboy,gold1,golfvr6,quicksan,irochka,froglegs,shortsto,caleb1,tishka,bigtitts,smurfy,bosto,dropzone,nocode,jazzbass,digdug,green7,saltlake,therat,dmitriev,lunita,deaddog,summer0,1212qq,bobbyg,mty3rh,isaac1,gusher,helloman,sugarbear,corvair,extrem,teatime,tujazopi,titanik,efyreg,jo9k2jw2,counchac,tivoli,utjvtnhbz,bebit,jacob6,clayton1,incubus1,flash123,squirter,dima2010,cock1,rawks,komatsu,forty2,98741236,cajun1,madelein,mudhoney,magomed,q111111,qaswed,consense,12345b,bakayaro,silencer,zoinks,bigdic,werwolf,pinkpuss,96321478,alfie1,ali123,sarit,minette,musics,chato,iaapptfcor,cobaka,strumpf,datnigga,sonic123,yfnecbr,vjzctvmz,pasta1,tribbles,crasher,htlbcrf,1tiger,shock123,bearshar,syphon,a654321,cubbies1,jlhanes,eyespy,fucktheworld,carrie1,bmw325is,suzuk,mander,dorina,mithril,hondo1,vfhnbyb,sachem,newton1,12345x,7777755102q,230857z,xxxsex,scubapro,hayastan,spankit,delasoul,searock6,fallout3,nilrem,24681357,pashka,voluntee,pharoh,willo,india1,badboy69,roflmao,gunslinger,lovergir,mama12,melange,640xwfkv,chaton,darkknig,bigman1,aabbccdd,harleyd,birdhouse,giggsy,hiawatha,tiberium,joker7,hello1234,sloopy,tm371855,greendog,solar1,bignose,djohn11,espanol,oswego,iridium,kavitha,pavell,mirjam,cyjdsvujljv,alpha5,deluge,hamme,luntik,turismo,stasya,kjkbnf,caeser,schnecke,tweety1,tralfaz,lambrett,prodigy1,trstno1,pimpshit,werty1,karman,bigboob,pastel,blackmen,matthew8,moomin,q1w2e,gilly,primaver,jimmyg,house2,elviss,15975321,1jessica,monaliza,salt55,vfylfhbyrf,harley11,tickleme,murder1,nurgle,kickass1,theresa1,fordtruck,pargolf,managua,inkognito,sherry1,gotit,friedric,metro2033,slk230,freeport,cigarett,492529,vfhctkm,thebeach,twocats,bakugan,yzerman1,charlieb,motoko,skiman,1234567w,pussy3,love77,asenna,buffie,260zntpc,kinkos,access20,mallard1,fuckyou69,monami,rrrrr1,bigdog69,mikola,1boomer,godzila,ginger2,dima2000,skorpion39,dima1234,hawkdog79,warrior2,ltleirf,supra1,jerusale,monkey01,333z333,666888,kelsey1,w8gkz2x1,fdfnfh,msnxbi,qwe123rty,mach1,monkey3,123456789qq,c123456,nezabudka,barclays,nisse,dasha1,12345678987654321,dima1993,oldspice,frank2,rabbitt,prettyboy,ov3ajy,iamthema,kawasak,banjo1,gtivr6,collants,gondor,hibees,cowboys2,codfish,buster2,purzel,rubyred,kayaker,bikerboy,qguvyt,masher,sseexx,kenshiro,moonglow,semenova,rosari,eduard1,deltaforce,grouper,bongo1,tempgod,1taylor,goldsink,qazxsw1,1jesus,m69fg2w,maximili,marysia,husker1,kokanee,sideout,googl,south1,plumber1,trillian,00001,1357900,farkle,1xxxxx,pascha,emanuela,bagheera,hound1,mylov,newjersey,swampfox,sakic19,torey,geforce,wu4etd,conrail,pigman,martin2,ber02,nascar2,angel69,barty,kitsune,cornet,yes90125,goomba,daking,anthea,sivart,weather1,ndaswf,scoubidou,masterchief,rectum,3364068,oranges1,copter,1samanth,eddies,mimoza,ahfywbz,celtic88,86mets,applemac,amanda11,taliesin,1angel,imhere,london11,bandit12,killer666,beer1,06225930,psylocke,james69,schumach,24pnz6kc,endymion,wookie1,poiu123,birdland,smoochie,lastone,rclaki,olive1,pirat,thunder7,chris69,rocko,151617,djg4bb4b,lapper,ajcuivd289,colole57,shadow7,dallas21,ajtdmw,executiv,dickies,omegaman,jason12,newhaven,aaaaaas,pmdmscts,s456123789,beatri,applesauce,levelone,strapon,benladen,creaven,ttttt1,saab95,f123456,pitbul,54321a,sex12345,robert3,atilla,mevefalkcakk,1johnny,veedub,lilleke,nitsuj,5t6y7u8i,teddys,bluefox,nascar20,vwjetta,buffy123,playstation3,loverr,qweasd12,lover2,telekom,benjamin1,alemania,neutrino,rockz,valjean,testicle,trinity3,realty,firestarter,794613852,ardvark,guadalup,philmont,arnold1,holas,zw6syj,birthday299,dover1,sexxy1,gojets,741236985,cance,blue77,xzibit,qwerty88,komarova,qweszxc,footer,rainger,silverst,ghjcnb,catmando,tatooine,31217221027711,amalgam,69dude,qwerty321,roscoe1,74185,cubby,alfa147,perry1,darock,katmandu,darknight,knicks1,freestuff,45454,kidman,4tlved,axlrose,cutie1,quantum1,joseph10,ichigo,pentium3,rfhectkm,rowdy1,woodsink,justforfun,sveta123,pornografia,mrbean,bigpig,tujheirf,delta9,portsmou,hotbod,kartal,10111213,fkbyf001,pavel1,pistons1,necromancer,verga,c7lrwu,doober,thegame1,hatesyou,sexisfun,1melissa,tuczno18,bowhunte,gobama,scorch,campeon,bruce2,fudge1,herpderp,bacon1,redsky,blackeye,19966991,19992000,ripken8,masturba,34524815,primax,paulina1,vp6y38,427cobra,4dwvjj,dracon,fkg7h4f3v6,longview,arakis,panama1,honda2,lkjhgfdsaz,razors,steels,fqkw5m,dionysus,mariajos,soroka,enriqu,nissa,barolo,king1234,hshfd4n279,holland1,flyer1,tbones,343104ky,modems,tk421,ybrbnrf,pikapp,sureshot,wooddoor,florida2,mrbungle,vecmrf,catsdogs,axolotl,nowayout,francoi,chris21,toenail,hartland,asdjkl,nikkii,onlyyou,buckskin,fnord,flutie,holen1,rincewind,lefty1,ducky1,199000,fvthbrf,redskin1,ryno23,lostlove,19mtpgam19,abercrom,benhur,jordan11,roflcopter,ranma,phillesh,avondale,igromania,p4ssword,jenny123,tttttt1,spycams,cardigan,2112yyz,sleepy1,paris123,mopars,lakers34,hustler1,james99,matrix3,popimp,12pack,eggbert,medvedev,testit,performa,logitec,marija,sexybeast,supermanboy,iwantit,rjktcj,jeffer,svarog,halo123,whdbtp,nokia3230,heyjoe,marilyn1,speeder,ibxnsm,prostock,bennyboy,charmin,codydog,parol999,ford9402,jimmer,crayola,159357258,alex77,joey1,cayuga,phish420,poligon,specops,tarasova,caramelo,draconis,dimon,cyzkhw,june29,getbent,1guitar,jimjam,dictiona,shammy,flotsam,0okm9ijn,crapper,technic,fwsadn,rhfdxtyrj,zaq11qaz,anfield1,159753q,curious1,hip-hop,1iiiii,gfhjkm2,cocteau,liveevil,friskie,crackhead,b1afra,elektrik,lancer1,b0ll0cks,jasond,z1234567,tempest1,alakazam,asdfasd,duffy1,oneday,dinkle,qazedctgb,kasimir,happy7,salama,hondaciv,nadezda,andretti,cannondale,sparticu,znbvjd,blueice,money01,finster,eldar,moosie,pappa,delta123,neruda,bmw330ci,jeanpaul,malibu1,alevtina,sobeit,travolta,fullmetal,enamorad,mausi,boston12,greggy,smurf1,ratrace,ichiban,ilovepus,davidg,wolf69,villa1,cocopuff,football12,starfury,zxc12345,forfree,fairfiel,dreams1,tayson,mike2,dogday,hej123,oldtimer,sanpedro,clicker,mollycat,roadstar,golfe,lvbnhbq1,topdevice,a1b2c,sevastopol,calli,milosc,fire911,pink123,team3x,nolimit5,snickers1,annies,09877890,jewel1,steve69,justin11,autechre,killerbe,browncow,slava1,christer,fantomen,redcloud,elenberg,beautiful1,passw0rd1,nazira,advantag,cockring,chaka,rjpzdrf,99941,az123456,biohazar,energie,bubble1,bmw323,tellme,printer1,glavine,1starwar,coolbeans,april17,carly1,quagmire,admin2,djkujuhfl,pontoon,texmex,carlos12,thermo,vaz2106,nougat,bob666,1hockey,1john,cricke,qwerty10,twinz,totalwar,underwoo,tijger,lildevil,123q321,germania,freddd,1scott,beefy,5t4r3e2w1q,fishbait,nobby,hogger,dnstuff,jimmyc,redknapp,flame1,tinfloor,balla,nfnfhby,yukon1,vixens,batata,danny123,1zxcvbnm,gaetan,homewood,greats,tester1,green99,1fucker,sc0tland,starss,glori,arnhem,goatman,1234asd,supertra,bill123,elguapo,sexylegs,jackryan,usmc69,innow,roaddog,alukard,winter11,crawler,gogiants,rvd420,alessandr,homegrow,gobbler,esteba,valeriy,happy12,1joshua,hawking,sicnarf,waynes,iamhappy,bayadera,august2,sashas,gotti,dragonfire,pencil1,halogen,borisov,bassingw,15975346,zachar,sweetp,soccer99,sky123,flipyou,spots3,xakepy,cyclops1,dragon77,rattolo58,motorhea,piligrim,helloween,dmb2010,supermen,shad0w,eatcum,sandokan,pinga,ufkfrnbrf,roksana,amista,pusser,sony1234,azerty1,1qasw2,ghbdt,q1w2e3r4t5y6u7i8,ktutylf,brehznev,zaebali,shitass,creosote,gjrtvjy,14938685,naughtyboy,pedro123,21crack,maurice1,joesakic,nicolas1,matthew9,lbyfhf,elocin,hfcgbplzq,pepper123,tiktak,mycroft,ryan11,firefly1,arriva,cyecvevhbr,loreal,peedee,jessica8,lisa01,anamari,pionex,ipanema,airbag,frfltvbz,123456789aa,epwr49,casper12,sweethear,sanandreas,wuschel,cocodog,france1,119911,redroses,erevan,xtvgbjy,bigfella,geneve,volvo850,evermore,amy123,moxie,celebs,geeman,underwor,haslo1,joy123,hallow,chelsea0,12435687,abarth,12332145,tazman1,roshan,yummie,genius1,chrisd,ilovelife,seventy7,qaz1wsx2,rocket88,gaurav,bobbyboy,tauchen,roberts1,locksmit,masterof,www111,d9ungl,volvos40,asdasd1,golfers,jillian1,7xm5rq,arwpls4u,gbhcf2,elloco,football2,muerte,bob101,sabbath1,strider1,killer66,notyou,lawnboy,de7mdf,johnnyb,voodoo2,sashaa,homedepo,bravos,nihao123,braindea,weedhead,rajeev,artem1,camille1,rockss,bobbyb,aniston,frnhbcf,oakridge,biscayne,cxfcnm,dressage,jesus3,kellyann,king69,juillet,holliste,h00ters,ripoff,123645,1999ar,eric12,123777,tommi,dick12,bilder,chris99,rulezz,getpaid,chicubs,ender1,byajhvfnbrf,milkshak,sk8board,freakshow,antonella,monolit,shelb,hannah01,masters1,pitbull1,1matthew,luvpussy,agbdlcid,panther2,alphas,euskadi,8318131,ronnie1,7558795,sweetgirl,cookie59,sequoia,5552555,ktyxbr,4500455,money7,severus,shinobu,dbityrf,phisig,rogue2,fractal,redfred,sebastian1,nelli,b00mer,cyberman,zqjphsyf6ctifgu,oldsmobile,redeemer,pimpi,lovehurts,1slayer,black13,rtynfdh,airmax,g00gle,1panther,artemon,nopasswo,fuck1234,luke1,trinit,666000,ziadma,oscardog,davex,hazel1,isgood,demond,james5,construc,555551,january2,m1911a1,flameboy,merda,nathan12,nicklaus,dukester,hello99,scorpio7,leviathan,dfcbktr,pourquoi,vfrcbv123,shlomo,rfcgth,rocky3,ignatz,ajhneyf,roger123,squeek,4815162342a,biskit,mossimo,soccer21,gridlock,lunker,popstar,ghhh47hj764,chutney,nitehawk,vortec,gamma1,codeman,dragula,kappasig,rainbow2,milehigh,blueballs,ou8124me,rulesyou,collingw,mystere,aster,astrovan,firetruck,fische,crawfish,hornydog,morebeer,tigerpaw,radost,144000,1chance,1234567890qwe,gracie1,myopia,oxnard,seminoles,evgeni,edvard,partytim,domani,tuffy1,jaimatadi,blackmag,kzueirf,peternor,mathew1,maggie12,henrys,k1234567,fasted,pozitiv,cfdtkbq,jessica7,goleafs,bandito,girl78,sharingan,skyhigh,bigrob,zorros,poopers,oldschoo,pentium2,gripper,norcal,kimba,artiller,moneymak,00197400,272829,shadow1212,thebull,handbags,all4u2c,bigman2,civics,godisgoo,section8,bandaid,suzanne1,zorba,159123,racecars,i62gbq,rambo123,ironroad,johnson2,knobby,twinboys,sausage1,kelly69,enter2,rhjirf,yessss,james12,anguilla,boutit,iggypop,vovochka,06060,budwiser,romuald,meditate,good1,sandrin,herkules,lakers8,honeybea,11111111a,miche,rangers9,lobster1,seiko,belova,midcon,mackdadd,bigdaddy1,daddie,sepultur,freddy12,damon1,stormy1,hockey2,bailey12,hedimaptfcor,dcowboys,sadiedog,thuggin,horny123,josie1,nikki2,beaver69,peewee1,mateus,viktorija,barrys,cubswin1,matt1234,timoxa,rileydog,sicilia,luckycat,candybar,julian1,abc456,pussylip,phase1,acadia,catty,246800,evertonf,bojangle,qzwxec,nikolaj,fabrizi,kagome,noncapa0,marle,popol,hahaha1,cossie,carla10,diggers,spankey,sangeeta,cucciolo,breezer,starwar1,cornholio,rastafari,spring99,yyyyyyy1,webstar,72d5tn,sasha1234,inhouse,gobuffs,civic1,redstone,234523,minnie1,rivaldo,angel5,sti2000,xenocide,11qq11,1phoenix,herman1,holly123,tallguy,sharks1,madri,superbad,ronin,jalal123,hardbody,1234567r,assman1,vivahate,buddylee,38972091,bonds25,40028922,qrhmis,wp2005,ceejay,pepper01,51842543,redrum1,renton,varadero,tvxtjk7r,vetteman,djhvbrc,curly1,fruitcak,jessicas,maduro,popmart,acuari,dirkpitt,buick1,bergerac,golfcart,pdtpljxrf,hooch1,dudelove,d9ebk7,123452000,afdjhbn,greener,123455432,parachut,mookie12,123456780,jeepcj5,potatoe,sanya,qwerty2010,waqw3p,gotika,freaky1,chihuahu,buccanee,ecstacy,crazyboy,slickric,blue88,fktdnbyf,2004rj,delta4,333222111,calient,ptbdhw,1bailey,blitz1,sheila1,master23,hoagie,pyf8ah,orbita,daveyboy,prono1,delta2,heman,1horny,tyrik123,ostrov,md2020,herve,rockfish,el546218,rfhbyjxrf,chessmaster,redmoon,lenny1,215487,tomat,guppy,amekpass,amoeba,my3girls,nottingh,kavita,natalia1,puccini,fabiana,8letters,romeos,netgear,casper2,taters,gowings,iforgot1,pokesmot,pollit,lawrun,petey1,rosebuds,007jr,gthtcnhjqrf,k9dls02a,neener,azertyu,duke11,manyak,tiger01,petros,supermar,mangas,twisty,spotter,takagi,dlanod,qcmfd454,tusymo,zz123456,chach,navyblue,gilbert1,2kash6zq,avemaria,1hxboqg2s,viviane,lhbjkjubz2957704,nowwowtg,1a2b3c4,m0rn3,kqigb7,superpuper,juehtw,gethigh,theclown,makeme,pradeep,sergik,deion21,nurik,devo2706,nbvibt,roman222,kalima,nevaeh,martin7,anathema,florian1,tamwsn3sja,dinmamma,133159,123654q,slicks,pnp0c08,yojimbo,skipp,kiran,pussyfuck,teengirl,apples12,myballs,angeli,1234a,125678,opelastra,blind1,armagedd,fish123,pitufo,chelseaf,thedevil,nugget1,cunt69,beetle1,carter15,apolon,collant,password00,fishboy,djkrjdf,deftone,celti,three11,cyrus1,lefthand,skoal1,ferndale,aries1,fred01,roberta1,chucks,cornbread,lloyd1,icecrea,cisco123,newjerse,vfhrbpf,passio,volcom1,rikimaru,yeah11,djembe,facile,a1l2e3x4,batman7,nurbol,lorenzo1,monica69,blowjob1,998899,spank1,233391,n123456,1bear,bellsout,999998,celtic67,sabre1,putas,y9enkj,alfabeta,heatwave,honey123,hard4u,insane1,xthysq,magnum1,lightsaber,123qweqwe,fisher1,pixie1,precios,benfic,thegirls,bootsman,4321rewq,nabokov,hightime,djghjc,1chelsea,junglist,august16,t3fkvkmj,1232123,lsdlsd12,chuckie1,pescado,granit,toogood,cathouse,natedawg,bmw530,123kid,hajime,198400,engine1,wessonnn,kingdom1,novembre,1rocks,kingfisher,qwerty89,jordan22,zasranec,megat,sucess,installutil,fetish01,yanshi1982,1313666,1314520,clemence,wargod,time1,newzealand,snaker,13324124,cfrehf,hepcat,mazahaka,bigjay,denisov,eastwest,1yellow,mistydog,cheetos,1596357,ginger11,mavrik,bubby1,bhbyf,pyramide,giusepp,luthien,honda250,andrewjackie,kentavr,lampoon,zaq123wsx,sonicx,davidh,1ccccc,gorodok,windsong,programm,blunt420,vlad1995,zxcvfdsa,tarasov,mrskin,sachas,mercedes1,koteczek,rawdog,honeybear,stuart1,kaktys,richard7,55555n,azalia,hockey10,scouter,francy,1xxxxxx,julie456,tequilla,penis123,schmoe,tigerwoods,1ferrari,popov,snowdrop,matthieu,smolensk,cornflak,jordan01,love2000,23wesdxc,kswiss,anna2000,geniusnet,baby2000,33ds5x,waverly,onlyone4,networkingpe,raven123,blesse,gocards,wow123,pjflkork,juicey,poorboy,freeee,billybo,shaheen,zxcvbnm.,berlit,truth1,gepard,ludovic,gunther1,bobby2,bob12345,sunmoon,septembr,bigmac1,bcnjhbz,seaking,all4u,12qw34er56ty,bassie,nokia5228,7355608,sylwia,charvel,billgate,davion,chablis,catsmeow,kjiflrf,amylynn,rfvbkkf,mizredhe,handjob,jasper12,erbol,solara,bagpipe,biffer,notime,erlan,8543852,sugaree,oshkosh,fedora,bangbus,5lyedn,longball,teresa1,bootyman,aleksand,qazwsxedc12,nujbhc,tifosi,zpxvwy,lights1,slowpoke,tiger12,kstate,password10,alex69,collins1,9632147,doglover,baseball2,security1,grunts,orange2,godloves,213qwe879,julieb,1qazxsw23edcvfr4,noidea,8uiazp,betsy1,junior2,parol123,123456zz,piehonkii,kanker,bunky,hingis,reese1,qaz123456,sidewinder,tonedup,footsie,blackpoo,jalapeno,mummy1,always1,josh1,rockyboy,plucky,chicag,nadroj,blarney,blood123,wheaties,packer1,ravens1,mrjones,gfhjkm007,anna2010,awatar,guitar12,hashish,scale1,tomwaits,amrita,fantasma,rfpfym,pass2,tigris,bigair,slicker,sylvi,shilpa,cindylou,archie1,bitches1,poppys,ontime,horney1,camaroz28,alladin,bujhm,cq2kph,alina1,wvj5np,1211123a,tetons,scorelan,concordi,morgan2,awacs,shanty,tomcat14,andrew123,bear69,vitae,fred99,chingy,octane,belgario,fatdaddy,rhodan,password23,sexxes,boomtown,joshua01,war3demo,my2kids,buck1,hot4you,monamour,12345aa,yumiko,parool,carlton1,neverland,rose12,right1,sociald,grouse,brandon0,cat222,alex00,civicex,bintang,malkav,arschloc,dodgeviper,qwerty666,goduke,dante123,boss1,ontheroc,corpsman,love14,uiegu451,hardtail,irondoor,ghjrehfnehf,36460341,konijn,h2slca,kondom25,123456ss,cfytxrf,btnjey,nando,freemail,comander,natas666,siouxsie,hummer1,biomed,dimsum,yankees0,diablo666,lesbian1,pot420,jasonm,glock23,jennyb,itsmine,lena2010,whattheh,beandip,abaddon,kishore,signup,apogee,biteme12,suzieq,vgfun4,iseeyou,rifleman,qwerta,4pussy,hawkman,guest1,june17,dicksuck,bootay,cash12,bassale,ktybyuhfl,leetch,nescafe,7ovtgimc,clapton1,auror,boonie,tracker1,john69,bellas,cabinboy,yonkers,silky1,ladyffesta,drache,kamil1,davidp,bad123,snoopy12,sanche,werthvfy,achille,nefertiti,gerald1,slage33,warszawa,macsan26,mason123,kotopes,welcome8,nascar99,kiril,77778888,hairy1,monito,comicsans,81726354,killabee,arclight,yuo67,feelme,86753099,nnssnn,monday12,88351132,88889999,websters,subito,asdf12345,vaz2108,zvbxrpl,159753456852,rezeda,multimed,noaccess,henrique,tascam,captiva,zadrot,hateyou,sophie12,123123456,snoop1,charlie8,birmingh,hardline,libert,azsxdcf,89172735872,rjpthju,bondar,philips1,olegnaruto,myword,yakman,stardog,banana12,1234567890w,farout,annick,duke01,rfj422,billard,glock19,shaolin1,master10,cinderel,deltaone,manning1,biggreen,sidney1,patty1,goforit1,766rglqy,sevendus,aristotl,armagedo,blumen,gfhfyjz,kazakov,lekbyxxx,accord1,idiota,soccer16,texas123,victoire,ololo,chris01,bobbbb,299792458,eeeeeee1,confiden,07070,clarks,techno1,kayley,stang1,wwwwww1,uuuuu1,neverdie,jasonr,cavscout,481516234,mylove1,shaitan,1qazxcvb,barbaros,123456782000,123wer,thissucks,7seven,227722,faerie,hayduke,dbacks,snorkel,zmxncbv,tiger99,unknown1,melmac,polo1234,sssssss1,1fire,369147,bandung,bluejean,nivram,stanle,ctcnhf,soccer20,blingbli,dirtball,alex2112,183461,skylin,boobman,geronto,brittany1,yyz2112,gizmo69,ktrcec,dakota12,chiken,sexy11,vg08k714,bernadet,1bulldog,beachs,hollyb,maryjoy,margo1,danielle1,chakra,alexand,hullcity,matrix12,sarenna,pablos,antler,supercar,chomsky,german1,airjordan,545ettvy,camaron,flight1,netvideo,tootall,valheru,481516,1234as,skimmer,redcross,inuyash,uthvfy,1012nw,edoardo,bjhgfi,golf11,9379992a,lagarto,socball,boopie,krazy,.adgjmptw,gaydar,kovalev,geddylee,firstone,turbodog,loveee,135711,badbo,trapdoor,opopop11,danny2,max2000,526452,kerry1,leapfrog,daisy2,134kzbip,1andrea,playa1,peekab00,heskey,pirrello,gsewfmck,dimon4ik,puppie,chelios,554433,hypnodanny,fantik,yhwnqc,ghbdtngjrf,anchorag,buffett1,fanta,sappho,024680,vialli,chiva,lucylu,hashem,exbntkm,thema,23jordan,jake11,wildside,smartie,emerica,2wj2k9oj,ventrue,timoth,lamers,baerchen,suspende,boobis,denman85,1adam12,otello,king12,dzakuni,qsawbbs,isgay,porno123,jam123,daytona1,tazzie,bunny123,amaterasu,jeffre,crocus,mastercard,bitchedup,chicago7,aynrand,intel1,tamila,alianza,mulch,merlin12,rose123,alcapone,mircea,loveher,joseph12,chelsea6,dorothy1,wolfgar,unlimite,arturik,qwerty3,paddy1,piramid,linda123,cooool,millie1,warlock1,forgotit,tort02,ilikeyou,avensis,loveislife,dumbass1,clint1,2110se,drlove,olesia,kalinina,sergey123,123423,alicia1,markova,tri5a3,media1,willia1,xxxxxxx1,beercan,smk7366,jesusislord,motherfuck,smacker,birthday5,jbaby,harley2,hyper1,a9387670a,honey2,corvet,gjmptw,rjhjkmbien,apollon,madhuri,3a5irt,cessna17,saluki,digweed,tamia1,yja3vo,cfvlehfr,1111111q,martyna,stimpy1,anjana,yankeemp,jupiler,idkfa,1blue,fromv,afric,3xbobobo,liverp00l,nikon1,amadeus1,acer123,napoleo,david7,vbhjckfdf,mojo69,percy1,pirates1,grunt1,alenushka,finbar,zsxdcf,mandy123,1fred,timewarp,747bbb,druids,julia123,123321qq,spacebar,dreads,fcbarcelona,angela12,anima,christopher1,stargazer,123123s,hockey11,brewski,marlbor,blinker,motorhead,damngood,werthrf,letmein3,moremoney,killer99,anneke,eatit,pilatus,andrew01,fiona1,maitai,blucher,zxgdqn,e5pftu,nagual,panic1,andron,openwide,alphabeta,alison1,chelsea8,fende,mmm666,1shot2,a19l1980,123456@,1black,m1chael,vagner,realgood,maxxx,vekmnbr,stifler,2509mmh,tarkan,sherzod,1234567b,gunners1,artem2010,shooby,sammie1,p123456,piggie,abcde12345,nokia6230,moldir,piter,1qaz3edc,frequenc,acuransx,1star,nikeair,alex21,dapimp,ranjan,ilovegirls,anastasiy,berbatov,manso,21436587,leafs1,106666,angelochek,ingodwetrust,123456aaa,deano,korsar,pipetka,thunder9,minka,himura,installdevic,1qqqqq,digitalprodu,suckmeoff,plonker,headers,vlasov,ktr1996,windsor1,mishanya,garfield1,korvin,littlebit,azaz09,vandamme,scripto,s4114d,passward,britt1,r1chard,ferrari5,running1,7xswzaq,falcon2,pepper76,trademan,ea53g5,graham1,volvos80,reanimator,micasa,1234554321q,kairat,escorpion,sanek94,karolina1,kolovrat,karen2,1qaz@wsx,racing1,splooge,sarah2,deadman1,creed1,nooner,minicoop,oceane,room112,charme,12345ab,summer00,wetcunt,drewman,nastyman,redfire,appels,merlin69,dolfin,bornfree,diskette,ohwell,12345678qwe,jasont,madcap,cobra2,dolemit1,whatthehell,juanit,voldemar,rocke,bianc,elendil,vtufgjkbc,hotwheels,spanis,sukram,pokerface,k1ller,freakout,dontae,realmadri,drumss,gorams,258789,snakey,jasonn,whitewolf,befree,johnny99,pooka,theghost,kennys,vfvektxrf,toby1,jumpman23,deadlock,barbwire,stellina,alexa1,dalamar,mustanggt,northwes,tesoro,chameleo,sigtau,satoshi,george11,hotcum,cornell1,golfer12,geek01d,trololo,kellym,megapolis,pepsi2,hea666,monkfish,blue52,sarajane,bowler1,skeets,ddgirls,hfccbz,bailey01,isabella1,dreday,moose123,baobab,crushme,000009,veryhot,roadie,meanone,mike18,henriett,dohcvtec,moulin,gulnur,adastra,angel9,western1,natura,sweetpe,dtnfkm,marsbar,daisys,frogger1,virus1,redwood1,streetball,fridolin,d78unhxq,midas,michelob,cantik,sk2000,kikker,macanudo,rambone,fizzle,20000,peanuts1,cowpie,stone32,astaroth,dakota01,redso,mustard1,sexylove,giantess,teaparty,bobbin,beerbong,monet1,charles3,anniedog,anna1988,cameleon,longbeach,tamere,qpful542,mesquite,waldemar,12345zx,iamhere,lowboy,canard,granp,daisymay,love33,moosejaw,nivek,ninjaman,shrike01,aaa777,88002000600,vodolei,bambush,falcor,harley69,alphaomega,severine,grappler,bosox,twogirls,gatorman,vettes,buttmunch,chyna,excelsio,crayfish,birillo,megumi,lsia9dnb9y,littlebo,stevek,hiroyuki,firehous,master5,briley2,gangste,chrisk,camaleon,bulle,troyboy,froinlaven,mybutt,sandhya,rapala,jagged,crazycat,lucky12,jetman,wavmanuk,1heather,beegee,negril,mario123,funtime1,conehead,abigai,mhorgan,patagoni,travel1,backspace,frenchfr,mudcat,dashenka,baseball3,rustys,741852kk,dickme,baller23,griffey1,suckmycock,fuhrfzgc,jenny2,spuds,berlin1,justfun,icewind,bumerang,pavlusha,minecraft123,shasta1,ranger12,123400,twisters,buthead,miked,finance1,dignity7,hello9,lvjdp383,jgthfnjh,dalmatio,paparoach,miller31,2bornot2b,fathe,monterre,theblues,satans,schaap,jasmine2,sibelius,manon,heslo,jcnhjd,shane123,natasha2,pierrot,bluecar,iloveass,harriso,red12,london20,job314,beholder,reddawg,fuckyou!,pussylick,bologna1,austintx,ole4ka,blotto,onering,jearly,balbes,lightbul,bighorn,crossfir,lee123,prapor,1ashley,gfhjkm22,wwe123,09090,sexsite,marina123,jagua,witch1,schmoo,parkview,dragon3,chilango,ultimo,abramova,nautique,2bornot2,duende,1arthur,nightwing,surfboar,quant4307,15s9pu03,karina1,shitball,walleye1,wildman1,whytesha,1morgan,my2girls,polic,baranova,berezuckiy,kkkkkk1,forzima,fornow,qwerty02,gokart,suckit69,davidlee,whatnow,edgard,tits1,bayshore,36987412,ghbphfr,daddyy,explore1,zoidberg,5qnzjx,morgane,danilov,blacksex,mickey12,balsam,83y6pv,sarahc,slaye,all4u2,slayer69,nadia1,rlzwp503,4cranker,kaylie,numberon,teremok,wolf12,deeppurple,goodbeer,aaa555,66669999,whatif,harmony1,ue8fpw,3tmnej,254xtpss,dusty197,wcksdypk,zerkalo,dfnheirf,motorol,digita,whoareyou,darksoul,manics,rounders,killer11,d2000lb,cegthgfhjkm,catdog1,beograd,pepsico,julius1,123654987,softbal,killer23,weasel1,lifeson,q123456q,444555666,bunches,andy1,darby1,service01,bear11,jordan123,amega,duncan21,yensid,lerxst,rassvet,bronco2,fortis,pornlove,paiste,198900,asdflkjh,1236547890,futur,eugene1,winnipeg261,fk8bhydb,seanjohn,brimston,matthe1,bitchedu,crisco,302731,roxydog,woodlawn,volgograd,ace1210,boy4u2ownnyc,laura123,pronger,parker12,z123456z,andrew13,longlife,sarang,drogba,gobruins,soccer4,holida,espace,almira,murmansk,green22,safina,wm00022,1chevy,schlumpf,doroth,ulises,golf99,hellyes,detlef,mydog,erkina,bastardo,mashenka,sucram,wehttam,generic1,195000,spaceboy,lopas123,scammer,skynyrd,daddy2,titani,ficker,cr250r,kbnthfnehf,takedown,sticky1,davidruiz,desant,nremtp,painter1,bogies,agamemno,kansas1,smallfry,archi,2b4dnvsx,1player,saddie,peapod,6458zn7a,qvw6n2,gfxqx686,twice2,sh4d0w3d,mayfly,375125,phitau,yqmbevgk,89211375759,kumar1,pfhfpf,toyboy,way2go,7pvn4t,pass69,chipster,spoony,buddycat,diamond3,rincewin,hobie,david01,billbo,hxp4life,matild,pokemon2,dimochka,clown1,148888,jenmt3,cuxldv,cqnwhy,cde34rfv,simone1,verynice,toobig,pasha123,mike00,maria2,lolpop,firewire,dragon9,martesana,a1234567890,birthday3,providen,kiska,pitbulls,556655,misawa,damned69,martin11,goldorak,gunship,glory1,winxclub,sixgun,splodge,agent1,splitter,dome69,ifghjb,eliza1,snaiper,wutang36,phoenix7,666425,arshavin,paulaner,namron,m69fg1w,qwert1234,terrys,zesyrmvu,joeman,scoots,dwml9f,625vrobg,sally123,gostoso,symow8,pelota,c43qpul5rz,majinbuu,lithium1,bigstuff,horndog1,kipelov,kringle,1beavis,loshara,octobe,jmzacf,12342000,qw12qw,runescape1,chargers1,krokus,piknik,jessy,778811,gjvbljh,474jdvff,pleaser,misskitty,breaker1,7f4df451,dayan,twinky,yakumo,chippers,matia,tanith,len2ski1,manni,nichol1,f00b4r,nokia3110,standart,123456789i,shami,steffie,larrywn,chucker,john99,chamois,jjjkkk,penmouse,ktnj2010,gooners,hemmelig,rodney1,merlin01,bearcat1,1yyyyy,159753z,1fffff,1ddddd,thomas11,gjkbyrf,ivanka,f1f2f3,petrovna,phunky,conair,brian2,creative1,klipsch,vbitymrf,freek,breitlin,cecili,westwing,gohabsgo,tippmann,1steve,quattro6,fatbob,sp00ky,rastas,1123581,redsea,rfnmrf,jerky1,1aaaaaa,spk666,simba123,qwert54321,123abcd,beavis69,fyfyfc,starr1,1236547,peanutbutter,sintra,12345abcde,1357246,abcde1,climbon,755dfx,mermaids,monte1,serkan,geilesau,777win,jasonc,parkside,imagine1,rockhead,producti,playhard,principa,spammer,gagher,escada,tsv1860,dbyjuhfl,cruiser1,kennyg,montgome,2481632,pompano,cum123,angel6,sooty,bear01,april6,bodyhamm,pugsly,getrich,mikes,pelusa,fosgate,jasonp,rostislav,kimberly1,128mo,dallas11,gooner1,manuel1,cocacola1,imesh,5782790,password8,daboys,1jones,intheend,e3w2q1,whisper1,madone,pjcgujrat,1p2o3i,jamesp,felicida,nemrac,phikap,firecat,jrcfyjxrf,matt12,bigfan,doedel,005500,jasonx,1234567k,badfish,goosey,utjuhfabz,wilco,artem123,igor123,spike123,jor23dan,dga9la,v2jmsz,morgan12,avery1,dogstyle,natasa,221195ws,twopac,oktober7,karthik,poop1,mightymo,davidr,zermatt,jehova,aezakmi1,dimwit,monkey5,serega123,qwerty111,blabl,casey22,boy123,1clutch,asdfjkl1,hariom,bruce10,jeep95,1smith,sm9934,karishma,bazzzz,aristo,669e53e1,nesterov,kill666,fihdfv,1abc2,anna1,silver11,mojoman,telefono,goeagles,sd3lpgdr,rfhfynby,melinda1,llcoolj,idteul,bigchief,rocky13,timberwo,ballers,gatekeep,kashif,hardass,anastasija,max777,vfuyjkbz,riesling,agent99,kappas,dalglish,tincan,orange3,turtoise,abkbvjy,mike24,hugedick,alabala,geolog,aziza,devilboy,habanero,waheguru,funboy,freedom5,natwest,seashore,impaler,qwaszx1,pastas,bmw535,tecktonik,mika00,jobsearc,pinche,puntang,aw96b6,1corvett,skorpio,foundati,zzr1100,gembird,vfnhjcrby,soccer18,vaz2110,peterp,archer1,cross1,samedi,dima1992,hunter99,lipper,hotbody,zhjckfdf,ducati1,trailer1,04325956,cheryl1,benetton,kononenko,sloneczko,rfgtkmrf,nashua,balalaika,ampere,eliston,dorsai,digge,flyrod,oxymoron,minolta,ironmike,majortom,karimov,fortun,putaria,an83546921an13,blade123,franchis,mxaigtg5,dynxyu,devlt4,brasi,terces,wqmfuh,nqdgxz,dale88,minchia,seeyou,housepen,1apple,1buddy,mariusz,bighouse,tango2,flimflam,nicola1,qwertyasd,tomek1,shumaher,kartoshka,bassss,canaries,redman1,123456789as,preciosa,allblacks,navidad,tommaso,beaudog,forrest1,green23,ryjgjxrf,go4it,ironman2,badnews,butterba,1grizzly,isaeva,rembrand,toront,1richard,bigjon,yfltymrf,1kitty,4ng62t,littlejo,wolfdog,ctvtyjd,spain1,megryan,tatertot,raven69,4809594q,tapout,stuntman,a131313,lagers,hotstuf,lfdbl11,stanley2,advokat,boloto,7894561,dooker,adxel187,cleodog,4play,0p9o8i,masterb,bimota,charlee,toystory,6820055,6666667,crevette,6031769,corsa,bingoo,dima1990,tennis11,samuri,avocado,melissa6,unicor,habari,metart,needsex,cockman,hernan,3891576,3334444,amigo1,gobuffs2,mike21,allianz,2835493,179355,midgard,joey123,oneluv,ellis1,towncar,shonuff,scouse,tool69,thomas19,chorizo,jblaze,lisa1,dima1999,sophia1,anna1989,vfvekbxrf,krasavica,redlegs,jason25,tbontb,katrine,eumesmo,vfhufhbnrf,1654321,asdfghj1,motdepas,booga,doogle,1453145,byron1,158272,kardinal,tanne,fallen1,abcd12345,ufyljy,n12345,kucing,burberry,bodger,1234578,februar,1234512,nekkid,prober,harrison1,idlewild,rfnz90,foiegras,pussy21,bigstud,denzel,tiffany2,bigwill,1234567890zzz,hello69,compute1,viper9,hellspaw,trythis,gococks,dogballs,delfi,lupine,millenia,newdelhi,charlest,basspro,1mike,joeblack,975310,1rosebud,batman11,misterio,fucknut,charlie0,august11,juancho,ilonka,jigei743ks,adam1234,889900,goonie,alicat,ggggggg1,1zzzzzzz,sexywife,northstar,chris23,888111,containe,trojan1,jason5,graikos,1ggggg,1eeeee,tigers01,indigo1,hotmale,jacob123,mishima,richard3,cjxb2014,coco123,meagain,thaman,wallst,edgewood,bundas,1power,matilda1,maradon,hookedup,jemima,r3vi3wpass,2004-10-,mudman,taz123,xswzaq,emerson1,anna21,warlord1,toering,pelle,tgwdvu,masterb8,wallstre,moppel,priora,ghjcnjrdfif,yoland,12332100,1j9e7f6f,jazzzz,yesman,brianm,42qwerty42,12345698,darkmanx,nirmal,john31,bb123456,neuspeed,billgates,moguls,fj1200,hbhlair,shaun1,ghbdfn,305pwzlr,nbu3cd,susanb,pimpdad,mangust6403,joedog,dawidek,gigante,708090,703751,700007,ikalcr,tbivbn,697769,marvi,iyaayas,karen123,jimmyboy,dozer1,e6z8jh,bigtime1,getdown,kevin12,brookly,zjduc3,nolan1,cobber,yr8wdxcq,liebe,m1garand,blah123,616879,action1,600000,sumitomo,albcaz,asian1,557799,dave69,556699,sasa123,streaker,michel1,karate1,buddy7,daulet,koks888,roadtrip,wapiti,oldguy,illini1,1234qq,mrspock,kwiatek,buterfly,august31,jibxhq,jackin,taxicab,tristram,talisker,446655,444666,chrisa,freespace,vfhbfyyf,chevell,444333,notyours,442244,christian1,seemore,sniper12,marlin1,joker666,multik,devilish,crf450,cdfoli,eastern1,asshead,duhast,voyager2,cyberia,1wizard,cybernet,iloveme1,veterok,karandash,392781,looksee,diddy,diabolic,foofight,missey,herbert1,bmw318i,premier1,zsfmpv,eric1234,dun6sm,fuck11,345543,spudman,lurker,bitem,lizzy1,ironsink,minami,339311,s7fhs127,sterne,332233,plankton,galax,azuywe,changepa,august25,mouse123,sikici,killer69,xswqaz,quovadis,gnomik,033028pw,777777a,barrakuda,spawn666,goodgod,slurp,morbius,yelnats,cujo31,norman1,fastone,earwig,aureli,wordlife,bnfkbz,yasmi,austin123,timberla,missy2,legalize,netcom,liljon,takeit,georgin,987654321z,warbird,vitalina,all4u3,mmmmmm1,bichon,ellobo,wahoos,fcazmj,aksarben,lodoss,satnam,vasili,197800,maarten,sam138989,0u812,ankita,walte,prince12,anvils,bestia,hoschi,198300,univer,jack10,ktyecbr,gr00vy,hokie,wolfman1,fuckwit,geyser,emmanue,ybrjkftd,qwerty33,karat,dblock,avocat,bobbym,womersle,1please,nostra,dayana,billyray,alternat,iloveu1,qwerty69,rammstein1,mystikal,winne,drawde,executor,craxxxs,ghjcnjnf,999888777,welshman,access123,963214785,951753852,babe69,fvcnthlfv,****me,666999666,testing2,199200,nintendo64,oscarr,guido8,zhanna,gumshoe,jbird,159357456,pasca,123452345,satan6,mithrand,fhbirf,aa1111aa,viggen,ficktjuv,radial9,davids1,rainbow7,futuro,hipho,platin,poppy123,rhenjq,fulle,rosit,chicano,scrumpy,lumpy1,seifer,uvmrysez,autumn1,xenon,susie1,7u8i9o0p,gamer1,sirene,muffy1,monkeys1,kalinin,olcrackmaster,hotmove,uconn,gshock,merson,lthtdyz,pizzaboy,peggy1,pistache,pinto1,fishka,ladydi,pandor,baileys,hungwell,redboy,rookie1,amanda01,passwrd,clean1,matty1,tarkus,jabba1,bobster,beer30,solomon1,moneymon,sesamo,fred11,sunnysid,jasmine5,thebears,putamadre,workhard,flashbac,counter1,liefde,magnat,corky1,green6,abramov,lordik,univers,shortys,david3,vip123,gnarly,1234567s,billy2,honkey,deathstar,grimmy,govinda,direktor,12345678s,linus1,shoppin,rekbrjdf,santeria,prett,berty75,mohican,daftpunk,uekmyfhf,chupa,strats,ironbird,giants56,salisbur,koldun,summer04,pondscum,jimmyj,miata1,george3,redshoes,weezie,bartman1,0p9o8i7u,s1lver,dorkus,125478,omega9,sexisgood,mancow,patric1,jetta1,074401,ghjuhtcc,gfhjk,bibble,terry2,123213,medicin,rebel2,hen3ry,4freedom,aldrin,lovesyou,browny,renwod,winnie1,belladon,1house,tyghbn,blessme,rfhfrfnbwf,haylee,deepdive,booya,phantasy,gansta,cock69,4mnveh,gazza1,redapple,structur,anakin1,manolito,steve01,poolman,chloe123,vlad1998,qazwsxe,pushit,random123,ontherocks,o236nq,brain1,dimedrol,agape,rovnogod,1balls,knigh,alliso,love01,wolf01,flintstone,beernuts,tuffguy,isengard,highfive,alex23,casper99,rubina,getreal,chinita,italian1,airsoft,qwerty23,muffdiver,willi1,grace123,orioles1,redbull1,chino1,ziggy123,breadman,estefan,ljcneg,gotoit,logan123,wideglid,mancity1,treess,qwe123456,kazumi,qweasdqwe,oddworld,naveed,protos,towson,a801016,godislov,at_asp,bambam1,soccer5,dark123,67vette,carlos123,hoser1,scouser,wesdxc,pelus,dragon25,pflhjn,abdula,1freedom,policema,tarkin,eduardo1,mackdad,gfhjkm11,lfplhfgthvf,adilet,zzzzxxxx,childre,samarkand,cegthgegth,shama,fresher,silvestr,greaser,allout,plmokn,sexdrive,nintendo1,fantasy7,oleander,fe126fd,crumpet,pingzing,dionis,hipster,yfcnz,requin,calliope,jerome1,housecat,abc123456789,doghot,snake123,augus,brillig,chronic1,gfhjkbot,expediti,noisette,master7,caliban,whitetai,favorite3,lisamari,educatio,ghjhjr,saber1,zcegth,1958proman,vtkrbq,milkdud,imajica,thehip,bailey10,hockey19,dkflbdjcnjr,j123456,bernar,aeiouy,gamlet,deltachi,endzone,conni,bcgfybz,brandi1,auckland2010,7653ajl1,mardigra,testuser,bunko18,camaro67,36936,greenie,454dfmcq,6xe8j2z4,mrgreen,ranger5,headhunt,banshee1,moonunit,zyltrc,hello3,pussyboy,stoopid,tigger11,yellow12,drums1,blue02,kils123,junkman,banyan,jimmyjam,tbbucs,sportster,badass1,joshie,braves10,lajolla,1amanda,antani,78787,antero,19216801,chich,rhett32,sarahm,beloit,sucker69,corkey,nicosnn,rccola,caracol,daffyduc,bunny2,mantas,monkies,hedonist,cacapipi,ashton1,sid123,19899891,patche,greekgod,cbr1000,leader1,19977991,ettore,chongo,113311,picass,cfif123,rhtfnbd,frances1,andy12,minnette,bigboy12,green69,alices,babcia,partyboy,javabean,freehand,qawsed123,xxx111,harold1,passwo,jonny1,kappa1,w2dlww3v5p,1merlin,222999,tomjones,jakeman,franken,markhegarty,john01,carole1,daveman,caseys,apeman,mookey,moon123,claret,titans1,residentevil,campari,curitiba,dovetail,aerostar,jackdaniels,basenji,zaq12w,glencoe,biglove,goober12,ncc170,far7766,monkey21,eclipse9,1234567v,vanechka,aristote,grumble,belgorod,abhishek,neworleans,pazzword,dummie,sashadog,diablo11,mst3000,koala1,maureen1,jake99,isaiah1,funkster,gillian1,ekaterina20,chibears,astra123,4me2no,winte,skippe,necro,windows9,vinograd,demolay,vika2010,quiksilver,19371ayj,dollar1,shecky,qzwxecrv,butterfly1,merrill1,scoreland,1crazy,megastar,mandragora,track1,dedhed,jacob2,newhope,qawsedrftgyh,shack1,samvel,gatita,shyster,clara1,telstar,office1,crickett,truls,nirmala,joselito,chrisl,lesnik,aaaabbbb,austin01,leto2010,bubbie,aaa12345,widder,234432,salinger,mrsmith,qazsedcft,newshoes,skunks,yt1300,bmw316,arbeit,smoove,123321qweewq,123qazwsx,22221111,seesaw,0987654321a,peach1,1029384756q,sereda,gerrard8,shit123,batcave,energy1,peterb,mytruck,peter12,alesya,tomato1,spirou,laputaxx,magoo1,omgkremidia,knight12,norton1,vladislava,shaddy,austin11,jlbyjxrf,kbdthgekm,punheta,fetish69,exploiter,roger2,manstein,gtnhjd,32615948worms,dogbreath,ujkjdjkjvrf,vodka1,ripcord,fatrat,kotek1,tiziana,larrybir,thunder3,nbvfnb,9kyq6fge,remembe,likemike,gavin1,shinigam,yfcnfcmz,13245678,jabbar,vampyr,ane4ka,lollipo,ashwin,scuderia,limpdick,deagle,3247562,vishenka,fdhjhf,alex02,volvov70,mandys,bioshock,caraca,tombraider,matrix69,jeff123,13579135,parazit,black3,noway1,diablos,hitmen,garden1,aminor,decembe,august12,b00ger,006900,452073t,schach,hitman1,mariner1,vbnmrf,paint1,742617000027,bitchboy,pfqxjyjr,5681392,marryher,sinnet,malik1,muffin12,aninha,piolin,lady12,traffic1,cbvjyf,6345789,june21,ivan2010,ryan123,honda99,gunny,coorslight,asd321,hunter69,7224763,sonofgod,dolphins1,1dolphin,pavlenko,woodwind,lovelov,pinkpant,gblfhfcbyf,hotel1,justinbiebe,vinter,jeff1234,mydogs,1pizza,boats1,parrothe,shawshan,brooklyn1,cbrown,1rocky,hemi426,dragon64,redwings1,porsches,ghostly,hubbahub,buttnut,b929ezzh,sorokina,flashg,fritos,b7mguk,metatron,treehous,vorpal,8902792,marcu,free123,labamba,chiefs1,zxc123zxc,keli_14,hotti,1steeler,money4,rakker,foxwoods,free1,ahjkjd,sidorova,snowwhit,neptune1,mrlover,trader1,nudelamb,baloo,power7,deltasig,bills1,trevo,7gorwell,nokia6630,nokia5320,madhatte,1cowboys,manga1,namtab,sanjar,fanny1,birdman1,adv12775,carlo1,dude1998,babyhuey,nicole11,madmike,ubvyfpbz,qawsedr,lifetec,skyhook,stalker123,toolong,robertso,ripazha,zippy123,1111111a,manol,dirtyman,analslut,jason3,dutches,minhasenha,cerise,fenrir,jayjay1,flatbush,franka,bhbyjxrf,26429vadim,lawntrax,198700,fritzy,nikhil,ripper1,harami,truckman,nemvxyheqdd5oqxyxyzi,gkfytnf,bugaboo,cableman,hairpie,xplorer,movado,hotsex69,mordred,ohyeah1,patrick3,frolov,katieh,4311111q,mochaj,presari,bigdo,753951852,freedom4,kapitan,tomas1,135795,sweet123,pokers,shagme,tane4ka,sentinal,ufgyndmv,jonnyb,skate123,123456798,123456788,very1,gerrit,damocles,dollarbi,caroline1,lloyds,pizdets,flatland,92702689,dave13,meoff,ajnjuhfabz,achmed,madison9,744744z,amonte,avrillavigne,elaine1,norma1,asseater,everlong,buddy23,cmgang1,trash1,mitsu,flyman,ulugbek,june27,magistr,fittan,sebora64,dingos,sleipnir,caterpil,cindys,212121qaz,partys,dialer,gjytltkmybr,qweqaz,janvier,rocawear,lostboy,aileron,sweety1,everest1,pornman,boombox,potter1,blackdic,44448888,eric123,112233aa,2502557i,novass,nanotech,yourname,x12345,indian1,15975300,1234567l,carla51,chicago0,coleta,cxzdsaewq,qqwweerr,marwan,deltic,hollys,qwerasd,pon32029,rainmake,nathan0,matveeva,legioner,kevink,riven,tombraid,blitzen,a54321,jackyl,chinese1,shalimar,oleg1995,beaches1,tommylee,eknock,berli,monkey23,badbob,pugwash,likewhoa,jesus2,yujyd360,belmar,shadow22,utfp5e,angelo1,minimax,pooder,cocoa1,moresex,tortue,lesbia,panthe,snoopy2,drumnbass,alway,gmcz71,6jhwmqku,leppard,dinsdale,blair1,boriqua,money111,virtuagirl,267605,rattlesn,1sunshin,monica12,veritas1,newmexic,millertime,turandot,rfvxfnrf,jaydog,kakawka,bowhunter,booboo12,deerpark,erreway,taylorma,rfkbybyf,wooglin,weegee,rexdog,iamhorny,cazzo1,vhou812,bacardi1,dctktyyfz,godpasi,peanut12,bertha1,fuckyoubitch,ghosty,altavista,jertoot,smokeit,ghjcnbvtyz,fhnehxbr,rolsen,qazxcdews,maddmaxx,redrocke,qazokm,spencer2,thekiller,asdf11,123sex,tupac1,p1234567,dbrown,1biteme,tgo4466,316769,sunghi,shakespe,frosty1,gucci1,arcana,bandit01,lyubov,poochy,dartmout,magpies1,sunnyd,mouseman,summer07,chester7,shalini,danbury,pigboy,dave99,deniss,harryb,ashley11,pppppp1,01081988m,balloon1,tkachenko,bucks1,master77,pussyca,tricky1,zzxxccvv,zoulou,doomer,mukesh,iluv69,supermax,todays,thefox,don123,dontask,diplom,piglett,shiney,fahbrf,qaz12wsx,temitope,reggin,project1,buffy2,inside1,lbpfqyth,vanilla1,lovecock,u4slpwra,fylh.irf,123211,7ertu3ds,necroman,chalky,artist1,simpso,4x7wjr,chaos666,lazyacres,harley99,ch33s3,marusa,eagle7,dilligas,computadora,lucky69,denwer,nissan350z,unforgiv,oddball,schalke0,aztec1,borisova,branden1,parkave,marie123,germa,lafayett,878kckxy,405060,cheeseca,bigwave,fred22,andreea,poulet,mercutio,psycholo,andrew88,o4izdmxu,sanctuar,newhome,milion,suckmydi,rjvgm.nth,warior,goodgame,1qwertyuiop,6339cndh,scorpio2,macker,southbay,crabcake,toadie,paperclip,fatkid,maddo,cliff1,rastafar,maries,twins1,geujdrf,anjela,wc4fun,dolina,mpetroff,rollout,zydeco,shadow3,pumpki,steeda,volvo240,terras,blowjo,blue2000,incognit,badmojo,gambit1,zhukov,station1,aaronb,graci,duke123,clipper1,qazxsw2,ledzeppe,kukareku,sexkitte,cinco,007008,lakers12,a1234b,acmilan1,afhfjy,starrr,slutty3,phoneman,kostyan,bonzo1,sintesi07,ersatz,cloud1,nephilim,nascar03,rey619,kairos,123456789e,hardon1,boeing1,juliya,hfccdtn,vgfun8,polizei,456838,keithb,minouche,ariston,savag,213141,clarkken,microwav,london2,santacla,campeo,qr5mx7,464811,mynuts,bombo,1mickey,lucky8,danger1,ironside,carter12,wyatt1,borntorun,iloveyou123,jose1,pancake1,tadmichaels,monsta,jugger,hunnie,triste,heat7777,ilovejesus,queeny,luckycharm,lieben,gordolee85,jtkirk,forever21,jetlag,skylane,taucher,neworlea,holera,000005,anhnhoem,melissa7,mumdad,massimiliano,dima1994,nigel1,madison3,slicky,shokolad,serenit,jmh1978,soccer123,chris3,drwho,rfpzdrf,1qasw23ed,free4me,wonka,sasquatc,sanan,maytag,verochka,bankone,molly12,monopoli,xfqybr,lamborgini,gondolin,candycane,needsome,jb007,scottie1,brigit,0147258369,kalamazo,lololyo123,bill1234,ilovejes,lol123123,popkorn,april13,567rntvm,downunde,charle1,angelbab,guildwars,homeworld,qazxcvbnm,superma1,dupa123,kryptoni,happyy,artyom,stormie,cool11,calvin69,saphir,konovalov,jansport,october8,liebling,druuna,susans,megans,tujhjdf,wmegrfux,jumbo1,ljb4dt7n,012345678910,kolesnik,speculum,at4gftlw,kurgan,93pn75,cahek0980,dallas01,godswill,fhifdby,chelsea4,jump23,barsoom,catinhat,urlacher,angel99,vidadi1,678910,lickme69,topaz1,westend,loveone,c12345,gold12,alex1959,mamon,barney12,1maggie,alex12345,lp2568cskt,s1234567,gjikbdctyf,anthony0,browns99,chips1,sunking,widespre,lalala1,tdutif,fucklife,master00,alino4ka,stakan,blonde1,phoebus,tenore,bvgthbz,brunos,suzjv8,uvdwgt,revenant,1banana,veroniqu,sexfun,sp1der,4g3izhox,isakov,shiva1,scooba,bluefire,wizard12,dimitris,funbags,perseus,hoodoo,keving,malboro,157953,a32tv8ls,latics,animate,mossad,yejntb,karting,qmpq39zr,busdrive,jtuac3my,jkne9y,sr20dett,4gxrzemq,keylargo,741147,rfktylfhm,toast1,skins1,xcalibur,gattone,seether,kameron,glock9mm,julio1,delenn,gameday,tommyd,str8edge,bulls123,66699,carlsberg,woodbird,adnama,45auto,codyman,truck2,1w2w3w4w,pvjegu,method1,luetdi,41d8cd98f00b,bankai,5432112345,94rwpe,reneee,chrisx,melvins,775577,sam2000,scrappy1,rachid,grizzley,margare,morgan01,winstons,gevorg,gonzal,crawdad,gfhfdjp,babilon,noneya,pussy11,barbell,easyride,c00li0,777771,311music,karla1,golions,19866891,peejay,leadfoot,hfvbkm,kr9z40sy,cobra123,isotwe,grizz,sallys,****you,aaa123a,dembel,foxs14,hillcres,webman,mudshark,alfredo1,weeded,lester1,hovepark,ratface,000777fffa,huskie,wildthing,elbarto,waikiki,masami,call911,goose2,regin,dovajb,agricola,cjytxrj,andy11,penny123,family01,a121212,1braves,upupa68,happy100,824655,cjlove,firsttim,kalel,redhair,dfhtymt,sliders,bananna,loverbo,fifa2008,crouton,chevy350,panties2,kolya1,alyona,hagrid,spagetti,q2w3e4r,867530,narkoman,nhfdvfnjkju123,1ccccccc,napolean,0072563,allay,w8sted,wigwam,jamesk,state1,parovoz,beach69,kevinb,rossella,logitech1,celula,gnocca,canucks1,loginova,marlboro1,aaaa1,kalleanka,mester,mishutka,milenko,alibek,jersey1,peterc,1mouse,nedved,blackone,ghfplybr,682regkh,beejay,newburgh,ruffian,clarets,noreaga,xenophon,hummerh2,tenshi,smeagol,soloyo,vfhnby,ereiamjh,ewq321,goomie,sportin,cellphone,sonnie,jetblack,saudan,gblfhfc,matheus,uhfvjnf,alicja,jayman1,devon1,hexagon,bailey2,vtufajy,yankees7,salty1,908070,killemal,gammas,eurocard,sydney12,tuesday1,antietam,wayfarer,beast666,19952009sa,aq12ws,eveli,hockey21,haloreach,dontcare,xxxx1,andrea11,karlmarx,jelszo,tylerb,protools,timberwolf,ruffneck,pololo,1bbbbb,waleed,sasami,twinss,fairlady,illuminati,alex007,sucks1,homerjay,scooter7,tarbaby,barmaley,amistad,vanes,randers,tigers12,dreamer2,goleafsg,googie,bernie1,as12345,godeep,james3,phanto,gwbush,cumlover,2196dc,studioworks,995511,golf56,titova,kaleka,itali,socks1,kurwamac,daisuke,hevonen,woody123,daisie,wouter,henry123,gostosa,guppie,porpoise,iamsexy,276115,paula123,1020315,38gjgeuftd,rjrfrjkf,knotty,idiot1,sasha12345,matrix13,securit,radical1,ag764ks,jsmith,coolguy1,secretar,juanas,sasha1988,itout,00000001,tiger11,1butthea,putain,cavalo,basia1,kobebryant,1232323,12345asdfg,sunsh1ne,cyfqgth,tomkat,dorota,dashit,pelmen,5t6y7u,whipit,smokeone,helloall,bonjour1,snowshoe,nilknarf,x1x2x3,lammas,1234599,lol123456,atombomb,ironchef,noclue,alekseev,gwbush1,silver2,12345678m,yesican,fahjlbnf,chapstic,alex95,open1,tiger200,lisichka,pogiako,cbr929,searchin,tanya123,alex1973,phil413,alex1991,dominati,geckos,freddi,silenthill,egroeg,vorobey,antoxa,dark666,shkola,apple22,rebellio,shamanking,7f8srt,cumsucker,partagas,bill99,22223333,arnster55,fucknuts,proxima,silversi,goblues,parcells,vfrcbvjdf,piloto,avocet,emily2,1597530,miniskir,himitsu,pepper2,juiceman,venom1,bogdana,jujube,quatro,botafogo,mama2010,junior12,derrickh,asdfrewq,miller2,chitarra,silverfox,napol,prestigio,devil123,mm111qm,ara123,max33484,sex2000,primo1,sephan,anyuta,alena2010,viborg,verysexy,hibiscus,terps,josefin,oxcart,spooker,speciali,raffaello,partyon,vfhvtkflrf,strela,a123456z,worksuck,glasss,lomonosov,dusty123,dukeblue,1winter,sergeeva,lala123,john22,cmc09,sobolev,bettylou,dannyb,gjkrjdybr,hagakure,iecnhbr,awsedr,pmdmsctsk,costco,alekseeva,fktrcttd,bazuka,flyingv,garuda,buffy16,gutierre,beer12,stomatolog,ernies,palmeiras,golf123,love269,n.kmgfy,gjkysqgbpltw,youare,joeboo,baksik,lifeguar,111a111,nascar8,mindgame,dude1,neopets,frdfkfyu,june24,phoenix8,penelopa,merlin99,mercenar,badluck,mishel,bookert,deadsexy,power9,chinchil,1234567m,alex10,skunk1,rfhkcjy,sammycat,wright1,randy2,marakesh,temppassword,elmer251,mooki,patrick0,bonoedge,1tits,chiar,kylie1,graffix,milkman1,cornel,mrkitty,nicole12,ticketmaster,beatles4,number20,ffff1,terps1,superfre,yfdbufnjh,jake1234,flblfc,1111qq,zanuda,jmol01,wpoolejr,polopol,nicolett,omega13,cannonba,123456789.,sandy69,ribeye,bo243ns,marilena,bogdan123,milla,redskins1,19733791,alias1,movie1,ducat,marzena,shadowru,56565,coolman1,pornlover,teepee,spiff,nafanya,gateway3,fuckyou0,hasher,34778,booboo69,staticx,hang10,qq12345,garnier,bosco123,1234567qw,carson1,samso,1xrg4kcq,cbr929rr,allan123,motorbik,andrew22,pussy101,miroslava,cytujdbr,camp0017,cobweb,snusmumrik,salmon1,cindy2,aliya,serendipity,co437at,tincouch,timmy123,hunter22,st1100,vvvvvv1,blanka,krondor,sweeti,nenit,kuzmich,gustavo1,bmw320i,alex2010,trees1,kyliem,essayons,april26,kumari,sprin,fajita,appletre,fghbjhb,1green,katieb,steven2,corrado1,satelite,1michell,123456789c,cfkfvfylhf,acurarsx,slut543,inhere,bob2000,pouncer,k123456789,fishie,aliso,audia8,bluetick,soccer69,jordan99,fromhell,mammoth1,fighting54,mike25,pepper11,extra1,worldwid,chaise,vfr800,sordfish,almat,nofate,listopad,hellgate,dctvghbdf,jeremia,qantas,lokiju,honker,sprint1,maral,triniti,compaq3,sixsix6,married1,loveman,juggalo1,repvtyrj,zxcasdqw,123445,whore1,123678,monkey6,west123,warcraf,pwnage,mystery1,creamyou,ant123,rehjgfnrf,corona1,coleman1,steve121,alderaan,barnaul,celeste1,junebug1,bombshel,gretzky9,tankist,targa,cachou,vaz2101,playgolf,boneyard,strateg,romawka,iforgotit,pullup,garbage1,irock,archmage,shaft1,oceano,sadies,alvin1,135135ab,psalm69,lmfao,ranger02,zaharova,33334444,perkman,realman,salguod,cmoney,astonmartin,glock1,greyfox,viper99,helpm,blackdick,46775575,family5,shazbot,dewey1,qwertyas,shivani,black22,mailman1,greenday1,57392632,red007,stanky,sanchez1,tysons,daruma,altosax,krayzie,85852008,1forever,98798798,irock.,123456654,142536789,ford22,brick1,michela,preciou,crazy4u,01telemike01,nolife,concac,safety1,annie123,brunswic,destini,123456qwer,madison0,snowball1,137946,1133557799,jarule,scout2,songohan,thedead,00009999,murphy01,spycam,hirsute,aurinko,associat,1miller,baklan,hermes1,2183rm,martie,kangoo,shweta,yvonne1,westsid,jackpot1,rotciv,maratik,fabrika,claude1,nursultan,noentry,ytnhjufnm,electra1,ghjcnjnfr1,puneet,smokey01,integrit,bugeye,trouble2,14071789,paul01,omgwtf,dmh415,ekilpool,yourmom1,moimeme,sparky11,boludo,ruslan123,kissme1,demetrio,appelsin,asshole3,raiders2,bunns,fynjybj,billygoa,p030710p$e4o,macdonal,248ujnfk,acorns,schmidt1,sparrow1,vinbylrj,weasle,jerom,ycwvrxxh,skywalk,gerlinde,solidus,postal1,poochie1,1charles,rhianna,terorist,rehnrf,omgwtfbbq,assfucke,deadend,zidan,jimboy,vengence,maroon5,7452tr,dalejr88,sombra,anatole,elodi,amazonas,147789,q12345q,gawker1,juanma,kassidy,greek1,bruces,bilbob,mike44,0o9i8u7y6t,kaligula,agentx,familie,anders1,pimpjuice,0128um,birthday10,lawncare,hownow,grandorgue,juggerna,scarfac,kensai,swatteam,123four,motorbike,repytxbr,other1,celicagt,pleomax,gen0303,godisgreat,icepick,lucifer666,heavy1,tea4two,forsure,02020,shortdog,webhead,chris13,palenque,3techsrl,knights1,orenburg,prong,nomarg,wutang1,80637852730,laika,iamfree,12345670,pillow1,12343412,bigears,peterg,stunna,rocky5,12123434,damir,feuerwehr,7418529630,danone,yanina,valenci,andy69,111222q,silvia1,1jjjjj,loveforever,passwo1,stratocaster,8928190a,motorolla,lateralu,ujujkm,chubba,ujkjdf,signon,123456789zx,serdce,stevo,wifey200,ololo123,popeye1,1pass,central1,melena,luxor,nemezida,poker123,ilovemusic,qaz1234,noodles1,lakeshow,amarill,ginseng,billiam,trento,321cba,fatback,soccer33,master13,marie2,newcar,bigtop,dark1,camron,nosgoth,155555,biglou,redbud,jordan7,159789,diversio,actros,dazed,drizzit,hjcnjd,wiktoria,justic,gooses,luzifer,darren1,chynna,tanuki,11335577,icculus,boobss,biggi,firstson,ceisi123,gatewa,hrothgar,jarhead1,happyjoy,felipe1,bebop1,medman,athena1,boneman,keiths,djljgfl,dicklick,russ120,mylady,zxcdsa,rock12,bluesea,kayaks,provista,luckies,smile4me,bootycal,enduro,123123f,heartbre,ern3sto,apple13,bigpappa,fy.njxrf,bigtom,cool69,perrito,quiet1,puszek,cious,cruella,temp1,david26,alemap,aa123123,teddies,tricolor,smokey12,kikiriki,mickey01,robert01,super5,ranman,stevenso,deliciou,money777,degauss,mozar,susanne1,asdasd12,shitbag,mommy123,wrestle1,imfree,fuckyou12,barbaris,florent,ujhijr,f8yruxoj,tefjps,anemone,toltec,2gether,left4dead2,ximen,gfkmvf,dunca,emilys,diana123,16473a,mark01,bigbro,annarbor,nikita2000,11aa11,tigres,llllll1,loser2,fbi11213,jupite,qwaszxqw,macabre,123ert,rev2000,mooooo,klapaucius,bagel1,chiquit,iyaoyas,bear101,irocz28,vfktymrfz,smokey2,love99,rfhnbyf,dracul,keith123,slicko,peacock1,orgasmic,thesnake,solder,wetass,doofer,david5,rhfcyjlfh,swanny,tammys,turkiye,tubaman,estefani,firehose,funnyguy,servo,grace17,pippa1,arbiter,jimmy69,nfymrf,asdf67nm,rjcnzy,demon123,thicknes,sexysex,kristall,michail,encarta,banderos,minty,marchenko,de1987ma,mo5kva,aircav,naomi1,bonni,tatoo,cronaldo,49ers1,mama1963,1truck,telecaster,punksnotdead,erotik,1eagles,1fender,luv269,acdeehan,tanner1,freema,1q3e5t7u,linksys,tiger6,megaman1,neophyte,australia1,mydaddy,1jeffrey,fgdfgdfg,gfgekz,1986irachka,keyman,m0b1l3,dfcz123,mikeyg,playstation2,abc125,slacker1,110491g,lordsoth,bhavani,ssecca,dctvghbdtn,niblick,hondacar,baby01,worldcom,4034407,51094didi,3657549,3630000,3578951,sweetpussy,majick,supercoo,robert11,abacabb,panda123,gfhjkm13,ford4x4,zippo1,lapin,1726354,lovesong,dude11,moebius,paravoz,1357642,matkhau,solnyshko,daniel4,multiplelog,starik,martusia,iamtheman,greentre,jetblue,motorrad,vfrcbvev,redoak,dogma1,gnorman,komlos,tonka1,1010220,666satan,losenord,lateralus,absinthe,command1,jigga1,iiiiiii1,pants1,jungfrau,926337,ufhhbgjnnth,yamakasi,888555,sunny7,gemini69,alone1,zxcvbnmz,cabezon,skyblues,zxc1234,456123a,zero00,caseih,azzurra,legolas1,menudo,murcielago,785612,779977,benidorm,viperman,dima1985,piglet1,hemligt,hotfeet,7elephants,hardup,gamess,a000000,267ksyjf,kaitlynn,sharkie,sisyphus,yellow22,667766,redvette,666420,mets69,ac2zxdty,hxxrvwcy,cdavis,alan1,noddy,579300,druss,eatshit1,555123,appleseed,simpleplan,kazak,526282,fynfyfyfhbde,birthday6,dragon6,1pookie,bluedevils,omg123,hj8z6e,x5dxwp,455445,batman23,termin,chrisbrown,animals1,lucky9,443322,kzktxrf,takayuki,fermer,assembler,zomu9q,sissyboy,sergant,felina,nokia6230i,eminem12,croco,hunt4red,festina,darknigh,cptnz062,ndshnx4s,twizzler,wnmaz7sd,aamaax,gfhfcjkmrf,alabama123,barrynov,happy5,punt0it,durandal,8xuuobe4,cmu9ggzh,bruno12,316497,crazyfrog,vfvfktyf,apple3,kasey1,mackdaddy,anthon1,sunnys,angel3,cribbage,moon1,donal,bryce1,pandabear,mwss474,whitesta,freaker,197100,bitche,p2ssw0rd,turnb,tiktonik,moonlite,ferret1,jackas,ferrum,bearclaw,liberty2,1diablo,caribe,snakeeyes,janbam,azonic,rainmaker,vetalik,bigeasy,baby1234,sureno13,blink1,kluivert,calbears,lavanda,198600,dhtlbyf,medvedeva,fox123,whirling,bonscott,freedom9,october3,manoman,segredo,cerulean,robinso,bsmith,flatus,dannon,password21,rrrrrr1,callista,romai,rainman1,trantor,mickeymo,bulldog7,g123456,pavlin,pass22,snowie,hookah,7ofnine,bubba22,cabible,nicerack,moomoo1,summer98,yoyo123,milan1,lieve27,mustang69,jackster,exocet,nadege,qaz12,bahama,watson1,libras,eclipse2,bahram,bapezm,up9x8rww,ghjcnjz,themaste,deflep27,ghost16,gattaca,fotograf,junior123,gilber,gbjyth,8vjzus,rosco1,begonia,aldebara,flower12,novastar,buzzman,manchild,lopez1,mama11,william7,yfcnz1,blackstar,spurs123,moom4242,1amber,iownyou,tightend,07931505,paquito,1johnson,smokepot,pi31415,snowmass,ayacdc,jessicam,giuliana,5tgbnhy6,harlee,giuli,bigwig,tentacle,scoubidou2,benelli,vasilina,nimda,284655,jaihind,lero4ka,1tommy,reggi,ididit,jlbyjxtcndj,mike26,qbert,wweraw,lukasz,loosee123,palantir,flint1,mapper,baldie,saturne,virgin1,meeeee,elkcit,iloveme2,blue15,themoon,radmir,number3,shyanne,missle,hannelor,jasmina,karin1,lewie622,ghjcnjqgfhjkm,blasters,oiseau,sheela,grinders,panget,rapido,positiv,twink,fltkbyf,kzsfj874,daniel01,enjoyit,nofags,doodad,rustler,squealer,fortunat,peace123,khushi,devils2,7inches,candlebo,topdawg,armen,soundman,zxcqweasd,april7,gazeta,netman,hoppers,bear99,ghbjhbntn,mantle7,bigbo,harpo,jgordon,bullshi,vinny1,krishn,star22,thunderc,galinka,phish123,tintable,nightcrawler,tigerboy,rbhgbx,messi,basilisk,masha1998,nina123,yomamma,kayla123,geemoney,0000000000d,motoman,a3jtni,ser123,owen10,italien,vintelok,12345rewq,nightime,jeepin,ch1tt1ck,mxyzptlk,bandido,ohboy,doctorj,hussar,superted,parfilev,grundle,1jack,livestrong,chrisj,matthew3,access22,moikka,fatone,miguelit,trivium,glenn1,smooches,heiko,dezember,spaghett,stason,molokai,bossdog,guitarma,waderh,boriska,photosho,path13,hfrtnf,audre,junior24,monkey24,silke,vaz21093,bigblue1,trident1,candide,arcanum,klinker,orange99,bengals1,rosebu,mjujuj,nallepuh,mtwapa1a,ranger69,level1,bissjop,leica,1tiffany,rutabega,elvis77,kellie1,sameas,barada,karabas,frank12,queenb,toutoune,surfcity,samanth1,monitor1,littledo,kazakova,fodase,mistral1,april22,carlit,shakal,batman123,fuckoff2,alpha01,5544332211,buddy3,towtruck,kenwood1,vfiekmrf,jkl123,pypsik,ranger75,sitges,toyman,bartek1,ladygirl,booman,boeing77,installsqlst,222666,gosling,bigmack,223311,bogos,kevin2,gomez1,xohzi3g4,kfnju842,klubnika,cubalibr,123456789101,kenpo,0147852369,raptor1,tallulah,boobys,jjones,1q2s3c,moogie,vid2600,almas,wombat1,extra300,xfiles1,green77,sexsex1,heyjude,sammyy,missy123,maiyeuem,nccpl25282,thicluv,sissie,raven3,fldjrfn,buster22,broncos2,laurab,letmein4,harrydog,solovey,fishlips,asdf4321,ford123,superjet,norwegen,movieman,psw333333,intoit,postbank,deepwate,ola123,geolog323,murphys,eshort,a3eilm2s2y,kimota,belous,saurus,123321qaz,i81b4u,aaa12,monkey20,buckwild,byabybnb,mapleleafs,yfcnzyfcnz,baby69,summer03,twista,246890,246824,ltcnhjth,z1z2z3,monika1,sad123,uto29321,bathory,villan,funkey,poptarts,spam967888,705499fh,sebast,porn1234,earn381,1porsche,whatthef,123456789y,polo12,brillo,soreilly,waters1,eudora,allochka,is_a_bot,winter00,bassplay,531879fiz,onemore,bjarne,red911,kot123,artur1,qazxdr,c0rvette,diamond7,matematica,klesko,beaver12,2enter,seashell,panam,chaching,edward2,browni,xenogear,cornfed,aniram,chicco22,darwin1,ancella2,sophie2,vika1998,anneli,shawn41,babie,resolute,pandora2,william8,twoone,coors1,jesusis1,teh012,cheerlea,renfield,tessa1,anna1986,madness1,bkmlfh,19719870,liebherr,ck6znp42,gary123,123654z,alsscan,eyedoc,matrix7,metalgea,chinito,4iter,falcon11,7jokx7b9du,bigfeet,tassadar,retnuh,muscle1,klimova,darion,batistuta,bigsur,1herbier,noonie,ghjrehjh,karimova,faustus,snowwhite,1manager,dasboot,michael12,analfuck,inbed,dwdrums,jaysoncj,maranell,bsheep75,164379,rolodex,166666,rrrrrrr1,almaz666,167943,russel1,negrito,alianz,goodpussy,veronik,1w2q3r4e,efremov,emb377,sdpass,william6,alanfahy,nastya1995,panther5,automag,123qwe12,vfvf2011,fishe,1peanut,speedie,qazwsx1234,pass999,171204j,ketamine,sheena1,energizer,usethis1,123abc123,buster21,thechamp,flvbhfk,frank69,chane,hopeful1,claybird,pander,anusha,bigmaxxx,faktor,housebed,dimidrol,bigball,shashi,derby1,fredy,dervish,bootycall,80988218126,killerb,cheese2,pariss,mymail,dell123,catbert,christa1,chevytru,gjgjdf,00998877,overdriv,ratten,golf01,nyyanks,dinamite,bloembol,gismo,magnus1,march2,twinkles,ryan22,duckey,118a105b,kitcat,brielle,poussin,lanzarot,youngone,ssvegeta,hero63,battle1,kiler,fktrcfylh1,newera,vika1996,dynomite,oooppp,beer4me,foodie,ljhjuf,sonshine,godess,doug1,constanc,thinkbig,steve2,damnyou,autogod,www333,kyle1,ranger7,roller1,harry2,dustin1,hopalong,tkachuk,b00bies,bill2,deep111,stuffit,fire69,redfish1,andrei123,graphix,1fishing,kimbo1,mlesp31,ifufkbyf,gurkan,44556,emily123,busman,and123,8546404,paladine,1world,bulgakov,4294967296,bball23,1wwwww,mycats,elain,delta6,36363,emilyb,color1,6060842,cdtnkfyrf,hedonism,gfgfrfhkj,5551298,scubad,gostate,sillyme,hdbiker,beardown,fishers,sektor,00000007,newbaby,rapid1,braves95,gator2,nigge,anthony3,sammmy,oou812,heffer,phishin,roxanne1,yourass,hornet1,albator,2521659,underwat,tanusha,dianas,3f3fpht7op,dragon20,bilbobag,cheroke,radiatio,dwarf1,majik,33st33,dochka,garibald,robinh,sham69,temp01,wakeboar,violet1,1w2w3w,registr,tonite,maranello,1593570,parolamea,galatasara,loranthos,1472583,asmodean,1362840,scylla,doneit,jokerr,porkypig,kungen,mercator,koolhaas,come2me,debbie69,calbear,liverpoolfc,yankees4,12344321a,kennyb,madma,85200258,dustin23,thomas13,tooling,mikasa,mistic,crfnbyf,112233445,sofia1,heinz57,colts1,price1,snowey,joakim,mark11,963147,cnhfcnm,kzinti,1bbbbbbb,rubberdu,donthate,rupert1,sasha1992,regis1,nbuhbwf,fanboy,sundial,sooner1,wayout,vjnjhjkf,deskpro,arkangel,willie12,mikeyb,celtic1888,luis1,buddy01,duane1,grandma1,aolcom,weeman,172839456,basshead,hornball,magnu,pagedown,molly2,131517,rfvtgbyhn,astonmar,mistery,madalina,cash1,1happy,shenlong,matrix01,nazarova,369874125,800500,webguy,rse2540,ashley2,briank,789551,786110,chunli,j0nathan,greshnik,courtne,suckmyco,mjollnir,789632147,asdfg1234,754321,odelay,ranma12,zebedee,artem777,bmw318is,butt1,rambler1,yankees9,alabam,5w76rnqp,rosies,mafioso,studio1,babyruth,tranzit,magical123,gfhjkm135,12345$,soboleva,709394,ubique,drizzt1,elmers,teamster,pokemons,1472583690,1597532486,shockers,merckx,melanie2,ttocs,clarisse,earth1,dennys,slobber,flagman,farfalla,troika,4fa82hyx,hakan,x4ww5qdr,cumsuck,leather1,forum1,july20,barbel,zodiak,samuel12,ford01,rushfan,bugsy1,invest1,tumadre,screwme,a666666,money5,henry8,tiddles,sailaway,starburs,100years,killer01,comando,hiromi,ranetka,thordog,blackhole,palmeira,verboten,solidsna,q1w1e1,humme,kevinc,gbrfxe,gevaudan,hannah11,peter2,vangar,sharky7,talktome,jesse123,chuchi,pammy,!qazxsw2,siesta,twenty1,wetwilly,477041,natural1,sun123,daniel3,intersta,shithead1,hellyea,bonethugs,solitair,bubbles2,father1,nick01,444000,adidas12,dripik,cameron2,442200,a7nz8546,respublika,fkojn6gb,428054,snoppy,rulez1,haslo,rachael1,purple01,zldej102,ab12cd34,cytuehjxrf,madhu,astroman,preteen,handsoff,mrblonde,biggio,testin,vfdhif,twolves,unclesam,asmara,kpydskcw,lg2wmgvr,grolsch,biarritz,feather1,williamm,s62i93,bone1,penske,337733,336633,taurus1,334433,billet,diamondd,333000,nukem,fishhook,godogs,thehun,lena1982,blue00,smelly1,unb4g9ty,65pjv22,applegat,mikehunt,giancarlo,krillin,felix123,december1,soapy,46doris,nicole23,bigsexy1,justin10,pingu,bambou,falcon12,dgthtl,1surfer,qwerty01,estrellit,nfqcjy,easygo,konica,qazqwe,1234567890m,stingers,nonrev,3e4r5t,champio,bbbbbb99,196400,allen123,seppel,simba2,rockme,zebra3,tekken3,endgame,sandy2,197300,fitte,monkey00,eldritch,littleone,rfyfgkz,1member,66chevy,oohrah,cormac,hpmrbm41,197600,grayfox,elvis69,celebrit,maxwell7,rodders,krist,1camaro,broken1,kendall1,silkcut,katenka,angrick,maruni,17071994a,tktyf,kruemel,snuffles,iro4ka,baby12,alexis01,marryme,vlad1994,forward1,culero,badaboom,malvin,hardtoon,hatelove,molley,knopo4ka,duchess1,mensuck,cba321,kickbutt,zastava,wayner,fuckyou6,eddie123,cjkysir,john33,dragonfi,cody1,jabell,cjhjrf,badseed,sweden1,marihuana,brownlov,elland,nike1234,kwiettie,jonnyboy,togepi,billyk,robert123,bb334,florenci,ssgoku,198910,bristol1,bob007,allister,yjdujhjl,gauloise,198920,bellaboo,9lives,aguilas,wltfg4ta,foxyroxy,rocket69,fifty50,babalu,master21,malinois,kaluga,gogosox,obsessio,yeahrigh,panthers1,capstan,liza2000,leigh1,paintball1,blueskie,cbr600f3,bagdad,jose98,mandreki,shark01,wonderbo,muledeer,xsvnd4b2,hangten,200001,grenden,anaell,apa195,model1,245lufpq,zip100,ghjcgtrn,wert1234,misty2,charro,juanjose,fkbcrf,frostbit,badminto,buddyy,1doctor,vanya,archibal,parviz,spunky1,footboy,dm6tzsgp,legola,samadhi,poopee,ytdxz2ca,hallowboy,dposton,gautie,theworm,guilherme,dopehead,iluvtits,bobbob1,ranger6,worldwar,lowkey,chewbaca,oooooo99,ducttape,dedalus,celular,8i9o0p,borisenko,taylor01,111111z,arlingto,p3nnywiz,rdgpl3ds,boobless,kcmfwesg,blacksab,mother2,markus1,leachim,secret2,s123456789,1derful,espero,russell2,tazzer,marykate,freakme,mollyb,lindros8,james00,gofaster,stokrotka,kilbosik,aquamann,pawel1,shedevil,mousie,slot2009,october6,146969,mm259up,brewcrew,choucho,uliana,sexfiend,fktirf,pantss,vladimi,starz,sheeps,12341234q,bigun,tiggers,crjhjcnm,libtech,pudge1,home12,zircon,klaus1,jerry2,pink1,lingus,monkey66,dumass,polopolo09,feuerweh,rjyatnf,chessy,beefer,shamen,poohbear1,4jjcho,bennevis,fatgirls,ujnbrf,cdexswzaq,9noize9,rich123,nomoney,racecar1,hacke,clahay,acuario,getsum,hondacrv,william0,cheyenn,techdeck,atljhjdf,wtcacq,suger,fallenangel,bammer,tranquil,carla123,relayer,lespaul1,portvale,idontno,bycnbnen,trooper2,gennadiy,pompon,billbob,amazonka,akitas,chinatow,atkbrc,busters,fitness1,cateye,selfok2013,1murphy,fullhous,mucker,bajskorv,nectarin,littlebitch,love24,feyenoor,bigal37,lambo1,pussybitch,icecube1,biged,kyocera,ltybcjdf,boodle,theking1,gotrice,sunset1,abm1224,fromme,sexsells,inheat,kenya1,swinger1,aphrodit,kurtcobain,rhind101,poidog,poiulkjh,kuzmina,beantown,tony88,stuttgar,drumer,joaqui,messenge,motorman,amber2,nicegirl,rachel69,andreia,faith123,studmuffin,jaiden,red111,vtkmybr,gamecocks,gumper,bosshogg,4me2know,tokyo1,kleaner,roadhog,fuckmeno,phoenix3,seeme,buttnutt,boner69,andreyka,myheart,katerin,rugburn,jvtuepip,dc3ubn,chile1,ashley69,happy99,swissair,balls2,fylhttdf,jimboo,55555d,mickey11,voronin,m7hsqstm,stufff,merete,weihnachte,dowjones,baloo1,freeones,bears34,auburn1,beverl,timberland,1elvis,guinness1,bombadil,flatron1,logging7,telefoon,merl1n,masha1,andrei1,cowabung,yousuck1,1matrix,peopl,asd123qwe,sweett,mirror1,torrente,joker12,diamond6,jackaroo,00000a,millerlite,ironhorse,2twins,stryke,gggg1,zzzxxxccc,roosevel,8363eddy,angel21,depeche1,d0ct0r,blue14,areyou,veloce,grendal,frederiksberg,cbcntvf,cb207sl,sasha2000,was.here,fritzz,rosedale,spinoza,cokeisit,gandalf3,skidmark,ashley01,12345j,1234567890qaz,sexxxxxx,beagles,lennart,12345789,pass10,politic,max007,gcheckou,12345611,tiffy,lightman,mushin,velosiped,brucewayne,gauthie,elena123,greenegg,h2oski,clocker,nitemare,123321s,megiddo,cassidy1,david13,boywonde,flori,peggy12,pgszt6md,batterie,redlands,scooter6,bckhere,trueno,bailey11,maxwell2,bandana,timoth1,startnow,ducati74,tiern,maxine1,blackmetal,suzyq,balla007,phatfarm,kirsten1,titmouse,benhogan,culito,forbin,chess1,warren1,panman,mickey7,24lover,dascha,speed2,redlion,andrew10,johnwayn,nike23,chacha1,bendog,bullyboy,goldtree,spookie,tigger99,1cookie,poutine,cyclone1,woodpony,camaleun,bluesky1,dfadan,eagles20,lovergirl,peepshow,mine1,dima1989,rjdfkmxer,11111aaaaa,machina,august17,1hhhhh,0773417k,1monster,freaksho,jazzmin,davidw,kurupt,chumly,huggies,sashenka,ccccccc1,bridge1,giggalo,cincinna,pistol1,hello22,david77,lightfoo,lucky6,jimmy12,261397,lisa12,tabaluga,mysite,belo4ka,greenn,eagle99,punkrawk,salvado,slick123,wichsen,knight99,dummys,fefolico,contrera,kalle1,anna1984,delray,robert99,garena,pretende,racefan,alons,serenada,ludmilla,cnhtkjr,l0swf9gx,hankster,dfktynbyrf,sheep1,john23,cv141ab,kalyani,944turbo,crystal2,blackfly,zrjdktdf,eus1sue1,mario5,riverplate,harddriv,melissa3,elliott1,sexybitc,cnhfyybr,jimdavis,bollix,beta1,amberlee,skywalk1,natala,1blood,brattax,shitty1,gb15kv99,ronjon,rothmans,thedoc,joey21,hotboi,firedawg,bimbo38,jibber,aftermat,nomar,01478963,phishing,domodo,anna13,materia,martha1,budman1,gunblade,exclusiv,sasha1997,anastas,rebecca2,fackyou,kallisti,fuckmyass,norseman,ipswich1,151500,1edward,intelinside,darcy1,bcrich,yjdjcnbf,failte,buzzzz,cream1,tatiana1,7eleven,green8,153351,1a2s3d4f5g6h,154263,milano1,bambi1,bruins77,rugby2,jamal1,bolita,sundaypunch,bubba12,realmadr,vfyxtcnth,iwojima,notlob,black666,valkiria,nexus1,millerti,birthday100,swiss1,appollo,gefest,greeneyes,celebrat,tigerr,slava123,izumrud,bubbabub,legoman,joesmith,katya123,sweetdream,john44,wwwwwww1,oooooo1,socal,lovespor,s5r8ed67s,258147,heidis,cowboy22,wachovia,michaelb,qwe1234567,i12345,255225,goldie1,alfa155,45colt,safeu851,antonova,longtong,1sparky,gfvznm,busen,hjlbjy,whateva,rocky4,cokeman,joshua3,kekskek1,sirocco,jagman,123456qwert,phinupi,thomas10,loller,sakur,vika2011,fullred,mariska,azucar,ncstate,glenn74,halima,aleshka,ilovemylife,verlaat,baggie,scoubidou6,phatboy,jbruton,scoop1,barney11,blindman,def456,maximus2,master55,nestea,11223355,diego123,sexpistols,sniffy,philip1,f12345,prisonbreak,nokia2700,ajnjuhfa,yankees3,colfax,ak470000,mtnman,bdfyeirf,fotball,ichbin,trebla,ilusha,riobravo,beaner1,thoradin,polkaudi,kurosawa,honda123,ladybu,valerik,poltava,saviola,fuckyouguys,754740g0,anallove,microlab1,juris01,ncc1864,garfild,shania1,qagsud,makarenko,cindy69,lebedev,andrew11,johnnybo,groovy1,booster1,sanders1,tommyb,johnson4,kd189nlcih,hondaman,vlasova,chick1,sokada,sevisgur,bear2327,chacho,sexmania,roma1993,hjcnbckfd,valley1,howdie,tuppence,jimandanne,strike3,y4kuz4,nhfnfnf,tsubasa,19955991,scabby,quincunx,dima1998,uuuuuu1,logica,skinner1,pinguino,lisa1234,xpressmusic,getfucked,qqqq1,bbbb1,matulino,ulyana,upsman,johnsmith,123579,co2000,spanner1,todiefor,mangoes,isabel1,123852,negra,snowdon,nikki123,bronx1,booom,ram2500,chuck123,fireboy,creek1,batman13,princesse,az12345,maksat,1knight,28infern,241455,r7112s,muselman,mets1986,katydid,vlad777,playme,kmfdm1,asssex,1prince,iop890,bigbroth,mollymoo,waitron,lizottes,125412,juggler,quinta,0sister0,zanardi,nata123,heckfyxbr,22q04w90e,engine2,nikita95,zamira,hammer22,lutscher,carolina1,zz6319,sanman,vfuflfy,buster99,rossco,kourniko,aggarwal,tattoo1,janice1,finger1,125521,19911992,shdwlnds,rudenko,vfvfgfgf123,galatea,monkeybu,juhani,premiumcash,classact,devilmay,helpme2,knuddel,hardpack,ramil,perrit,basil1,zombie13,stockcar,tos8217,honeypie,nowayman,alphadog,melon1,talula,125689,tiribon12,tornike,haribol,telefone,tiger22,sucka,lfytxrf,chicken123,muggins,a23456,b1234567,lytdybr,otter1,pippa,vasilisk,cooking1,helter,78978,bestboy,viper7,ahmed1,whitewol,mommys,apple5,shazam1,chelsea7,kumiko,masterma,rallye,bushmast,jkz123,entrar,andrew6,nathan01,alaric,tavasz,heimdall,gravy1,jimmy99,cthlwt,powerr,gthtrhtcnjr,canesfan,sasha11,ybrbnf_25,august9,brucie,artichok,arnie1,superdude,tarelka,mickey22,dooper,luners,holeshot,good123,gettysbu,bicho,hammer99,divine5,1zxcvbn,stronzo,q22222,disne,bmw750il,godhead,hallodu,aerith,nastik,differen,cestmoi,amber69,5string,pornosta,dirtygirl,ginger123,formel1,scott12,honda200,hotspurs,johnatha,firstone123,lexmark1,msconfig,karlmasc,l123456,123qweasdzx,baldman,sungod,furka,retsub,9811020,ryder1,tcglyued,astron,lbvfcbr,minddoc,dirt49,baseball12,tbear,simpl,schuey,artimus,bikman,plat1num,quantex,gotyou,hailey1,justin01,ellada,8481068,000002,manimal,dthjybxrf,buck123,dick123,6969696,nospam,strong1,kodeord,bama12,123321w,superman123,gladiolus,nintend,5792076,dreamgirl,spankme1,gautam,arianna1,titti,tetas,cool1234,belladog,importan,4206969,87e5nclizry,teufelo7,doller,yfl.irf,quaresma,3440172,melis,bradle,nnmaster,fast1,iverso,blargh,lucas12,chrisg,iamsam,123321az,tomjerry,kawika,2597174,standrew,billyg,muskan,gizmodo2,rz93qpmq,870621345,sathya,qmezrxg4,januari,marthe,moom4261,cum2me,hkger286,lou1988,suckit1,croaker,klaudia1,753951456,aidan1,fsunoles,romanenko,abbydog,isthebes,akshay,corgi,fuck666,walkman555,ranger98,scorpian,hardwareid,bluedragon,fastman,2305822q,iddqdiddqd,1597532,gopokes,zvfrfcb,w1234567,sputnik1,tr1993,pa$$w0rd,2i5fdruv,havvoc,1357913,1313131,bnm123,cowd00d,flexscan,thesims2,boogiema,bigsexxy,powerstr,ngc4565,joshman,babyboy1,123jlb,funfunfu,qwe456,honor1,puttana,bobbyj,daniel21,pussy12,shmuck,1232580,123578951,maxthedo,hithere1,bond0007,gehenna,nomames,blueone,r1234567,bwana,gatinho,1011111,torrents,cinta,123451234,tiger25,money69,edibey,pointman,mmcm19,wales1,caffreys,phaedra,bloodlus,321ret32,rufuss,tarbit,joanna1,102030405,stickboy,lotrfotr34,jamshid,mclarenf1,ataman,99ford,yarrak,logan2,ironlung,pushistik,dragoon1,unclebob,tigereye,pinokio,tylerj,mermaid1,stevie1,jaylen,888777,ramana,roman777,brandon7,17711771s,thiago,luigi1,edgar1,brucey,videogam,classi,birder,faramir,twiddle,cubalibre,grizzy,fucky,jjvwd4,august15,idinahui,ranita,nikita1998,123342,w1w2w3,78621323,4cancel,789963,(null,vassago,jaydog472,123452,timt42,canada99,123589,rebenok,htyfnf,785001,osipov,maks123,neverwinter,love2010,777222,67390436,eleanor1,bykemo,aquemini,frogg,roboto,thorny,shipmate,logcabin,66005918,nokian,gonzos,louisian,1abcdefg,triathlo,ilovemar,couger,letmeino,supera,runvs,fibonacci,muttly,58565254,5thgbqi,vfnehsv,electr,jose12,artemis1,newlove,thd1shr,hawkey,grigoryan,saisha,tosca,redder,lifesux,temple1,bunnyman,thekids,sabbeth,tarzan1,182838,158uefas,dell50,1super,666222,47ds8x,jackhamm,mineonly,rfnfhbyf,048ro,665259,kristina1,bombero,52545856,secure1,bigloser,peterk,alex2,51525354,anarchy1,superx,teenslut,money23,sigmapi,sanfrancisco,acme34,private5,eclips,qwerttrewq,axelle,kokain,hardguy,peter69,jesuschr,dyanna,dude69,sarah69,toyota91,amberr,45645645,bugmenot,bigted,44556677,556644,wwr8x9pu,alphaome,harley13,kolia123,wejrpfpu,revelati,nairda,sodoff,cityboy,pinkpussy,dkalis,miami305,wow12345,triplet,tannenbau,asdfasdf1,darkhors,527952,retired1,soxfan,nfyz123,37583867,goddes,515069,gxlmxbewym,1warrior,36925814,dmb2011,topten,karpova,89876065093rax,naturals,gateway9,cepseoun,turbot,493949,cock22,italia1,sasafras,gopnik,stalke,1qazxdr5,wm2006,ace1062,alieva,blue28,aracel,sandia,motoguzz,terri1,emmajane,conej,recoba,alex1995,jerkyboy,cowboy12,arenrone,precisio,31415927,scsa316,panzer1,studly1,powerhou,bensam,mashoutq,billee,eeyore1,reape,thebeatl,rul3z,montesa,doodle1,cvzefh1gk,424365,a159753,zimmerma,gumdrop,ashaman,grimreap,icandoit,borodina,branca,dima2009,keywest1,vaders,bubluk,diavolo,assss,goleta,eatass,napster1,382436,369741,5411pimo,lenchik,pikach,gilgamesh,kalimera,singer1,gordon2,rjycnbnewbz,maulwurf,joker13,2much4u,bond00,alice123,robotec,fuckgirl,zgjybz,redhorse,margaret1,brady1,pumpkin2,chinky,fourplay,1booger,roisin,1brandon,sandan,blackheart,cheez,blackfin,cntgfyjdf,mymoney1,09080706,goodboss,sebring1,rose1,kensingt,bigboner,marcus12,ym3cautj,struppi,thestone,lovebugs,stater,silver99,forest99,qazwsx12345,vasile,longboar,mkonji,huligan,rhfcbdfz,airmail,porn11,1ooooo,sofun,snake2,msouthwa,dougla,1iceman,shahrukh,sharona,dragon666,france98,196800,196820,ps253535,zjses9evpa,sniper01,design1,konfeta,jack99,drum66,good4you,station2,brucew,regedit,school12,mvtnr765,pub113,fantas,tiburon1,king99,ghjcnjgbpltw,checkito,308win,1ladybug,corneliu,svetasveta,197430,icicle,imaccess,ou81269,jjjdsl,brandon6,bimbo1,smokee,piccolo1,3611jcmg,children2,cookie2,conor1,darth1,margera,aoi856,paully,ou812345,sklave,eklhigcz,30624700,amazing1,wahooo,seau55,1beer,apples2,chulo,dolphin9,heather6,198206,198207,hergood,miracle1,njhyflj,4real,milka,silverfi,fabfive,spring12,ermine,mammy,jumpjet,adilbek,toscana,caustic,hotlove,sammy69,lolita1,byoung,whipme,barney01,mistys,tree1,buster3,kaylin,gfccgjhn,132333,aishiteru,pangaea,fathead1,smurph,198701,ryslan,gasto,xexeylhf,anisimov,chevyss,saskatoo,brandy12,tweaker,irish123,music2,denny1,palpatin,outlaw1,lovesuck,woman1,mrpibb,diadora,hfnfneq,poulette,harlock,mclaren1,cooper12,newpass3,bobby12,rfgecnfcerf,alskdjfh,mini14,dukers,raffael,199103,cleo123,1234567qwertyu,mossberg,scoopy,dctulf,starline,hjvjxrf,misfits1,rangers2,bilbos,blackhea,pappnase,atwork,purple2,daywalker,summoner,1jjjjjjj,swansong,chris10,laluna,12345qqq,charly1,lionsden,money99,silver33,hoghead,bdaddy,199430,saisg002,nosaints,tirpitz,1gggggg,jason13,kingss,ernest1,0cdh0v99ue,pkunzip,arowana,spiri,deskjet1,armine,lances,magic2,thetaxi,14159265,cacique,14142135,orange10,richard0,backdraf,255ooo,humtum,kohsamui,c43dae874d,wrestling1,cbhtym,sorento,megha,pepsiman,qweqwe12,bliss7,mario64,korolev,balls123,schlange,gordit,optiquest,fatdick,fish99,richy,nottoday,dianne1,armyof1,1234qwerasdfzxcv,bbonds,aekara,lidiya,baddog1,yellow5,funkie,ryan01,greentree,gcheckout,marshal1,liliput,000000z,rfhbyrf,gtogto43,rumpole,tarado,marcelit,aqwzsxedc,kenshin1,sassydog,system12,belly1,zilla,kissfan,tools1,desember,donsdad,nick11,scorpio6,poopoo1,toto99,steph123,dogfuck,rocket21,thx113,dude12,sanek,sommar,smacky,pimpsta,letmego,k1200rs,lytghjgtnhjdcr,abigale,buddog,deles,baseball9,roofus,carlsbad,hamzah,hereiam,genial,schoolgirlie,yfz450,breads,piesek,washear,chimay,apocalyp,nicole18,gfgf1234,gobulls,dnevnik,wonderwall,beer1234,1moose,beer69,maryann1,adpass,mike34,birdcage,hottuna,gigant,penquin,praveen,donna123,123lol123,thesame,fregat,adidas11,selrahc,pandoras,test3,chasmo,111222333000,pecos,daniel11,ingersol,shana1,mama12345,cessna15,myhero,1simpson,nazarenko,cognit,seattle2,irina1,azfpc310,rfycthdf,hardy1,jazmyn,sl1200,hotlanta,jason22,kumar123,sujatha,fsd9shtyu,highjump,changer,entertai,kolding,mrbig,sayuri,eagle21,qwertzu,jorge1,0101dd,bigdong,ou812a,sinatra1,htcnjhfy,oleg123,videoman,pbyfblf,tv612se,bigbird1,kenaidog,gunite,silverma,ardmore,123123qq,hotbot,cascada,cbr600f4,harakiri,chico123,boscos,aaron12,glasgow1,kmn5hc,lanfear,1light,liveoak,fizika,ybrjkftdyf,surfside,intermilan,multipas,redcard,72chevy,balata,coolio1,schroede,kanat,testerer,camion,kierra,hejmeddig,antonio2,tornados,isidor,pinkey,n8skfswa,ginny1,houndog,1bill,chris25,hastur,1marine,greatdan,french1,hatman,123qqq,z1z2z3z4,kicker1,katiedog,usopen,smith22,mrmagoo,1234512i,assa123,7seven7,monster7,june12,bpvtyf,149521,guenter,alex1985,voronina,mbkugegs,zaqwsxcderfv,rusty5,mystic1,master0,abcdef12,jndfkb,r4zpm3,cheesey,skripka,blackwhite,sharon69,dro8smwq,lektor,techman,boognish,deidara,heckfyf,quietkey,authcode,monkey4,jayboy,pinkerto,merengue,chulita,bushwick,turambar,kittykit,joseph2,dad123,kristo,pepote,scheiss,hambone1,bigballa,restaura,tequil,111luzer,euro2000,motox,denhaag,chelsi,flaco1,preeti,lillo,1001sin,passw,august24,beatoff,555555d,willis1,kissthis,qwertyz,rvgmw2gl,iloveboobies,timati,kimbo,msinfo,dewdrop,sdbaker,fcc5nky2,messiah1,catboy,small1,chode,beastie1,star77,hvidovre,short1,xavie,dagobah,alex1987,papageno,dakota2,toonami,fuerte,jesus33,lawina,souppp,dirtybir,chrish,naturist,channel1,peyote,flibble,gutentag,lactate,killem,zucchero,robinho,ditka,grumpy1,avr7000,boxxer,topcop,berry1,mypass1,beverly1,deuce1,9638527410,cthuttdf,kzkmrf,lovethem,band1t,cantona1,purple11,apples123,wonderwo,123a456,fuzzie,lucky99,dancer2,hoddling,rockcity,winner12,spooty,mansfiel,aimee1,287hf71h,rudiger,culebra,god123,agent86,daniel0,bunky1,notmine,9ball,goofus,puffy1,xyh28af4,kulikov,bankshot,vurdf5i2,kevinm,ercole,sexygirls,razvan,october7,goater,lollie,raissa,thefrog,mdmaiwa3,mascha,jesussaves,union1,anthony9,crossroa,brother2,areyuke,rodman91,toonsex,dopeman,gericom,vaz2115,cockgobbler,12356789,12345699,signatur,alexandra1,coolwhip,erwin1,awdrgyjilp,pens66,ghjrjgtyrj,linkinpark,emergenc,psych0,blood666,bootmort,wetworks,piroca,johnd,iamthe1,supermario,homer69,flameon,image1,bebert,fylhtq1,annapoli,apple11,hockey22,10048,indahouse,mykiss,1penguin,markp,misha123,foghat,march11,hank1,santorin,defcon4,tampico,vbnhjafy,robert22,bunkie,athlon64,sex777,nextdoor,koskesh,lolnoob,seemnemaailm,black23,march15,yeehaa,chiqui,teagan,siegheil,monday2,cornhusk,mamusia,chilis,sthgrtst,feldspar,scottm,pugdog,rfghjy,micmac,gtnhjdyf,terminato,1jackson,kakosja,bogomol,123321aa,rkbvtyrj,tresor,tigertig,fuckitall,vbkkbjy,caramon,zxc12,balin,dildo1,soccer09,avata,abby123,cheetah1,marquise,jennyc,hondavfr,tinti,anna1985,dennis2,jorel,mayflowe,icema,hal2000,nikkis,bigmouth,greenery,nurjan,leonov,liberty7,fafnir,larionov,sat321321,byteme1,nausicaa,hjvfynbrf,everto,zebra123,sergio1,titone,wisdom1,kahala,104328q,marcin1,salima,pcitra,1nnnnn,nalini,galvesto,neeraj,rick1,squeeky,agnes1,jitterbu,agshar,maria12,0112358,traxxas,stivone,prophet1,bananza,sommer1,canoneos,hotfun,redsox11,1bigmac,dctdjkjl,legion1,everclea,valenok,black9,danny001,roxie1,1theman,mudslide,july16,lechef,chula,glamis,emilka,canbeef,ioanna,cactus1,rockshox,im2cool,ninja9,thvfrjdf,june28,milo17,missyou,micky1,nbibyf,nokiaa,goldi,mattias,fuckthem,asdzxc123,ironfist,junior01,nesta,crazzy,killswit,hygge,zantac,kazama,melvin1,allston,maandag,hiccup,prototyp,specboot,dwl610,hello6,159456,baldhead,redwhite,calpoly,whitetail,agile1,cousteau,matt01,aust1n,malcolmx,gjlfhjr,semperf1,ferarri,a1b2c3d,vangelis,mkvdari,bettis36,andzia,comand,tazzman,morgaine,pepluv,anna1990,inandout,anetka,anna1997,wallpape,moonrake,huntress,hogtie,cameron7,sammy7,singe11,clownboy,newzeala,wilmar,safrane,rebeld,poopi,granat,hammertime,nermin,11251422,xyzzy1,bogeys,jkmxbr,fktrcfyl,11223311,nfyrbcn,11223300,powerpla,zoedog,ybrbnbyf,zaphod42,tarawa,jxfhjdfirf,dude1234,g5wks9,goobe,czekolada,blackros,amaranth,medical1,thereds,julija,nhecsyfujkjdt,promopas,buddy4,marmalad,weihnachten,tronic,letici,passthief,67mustan,ds7zamnw,morri,w8woord,cheops,pinarell,sonofsam,av473dv,sf161pn,5c92v5h6,purple13,tango123,plant1,1baby,xufrgemw,fitta,1rangers,spawns,kenned,taratata,19944991,11111118,coronas,4ebouux8,roadrash,corvette1,dfyjdf846,marley12,qwaszxerdfcv,68stang,67stang,racin,ellehcim,sofiko,nicetry,seabass1,jazzman1,zaqwsx1,laz2937,uuuuuuu1,vlad123,rafale,j1234567,223366,nnnnnn1,226622,junkfood,asilas,cer980,daddymac,persepho,neelam,00700,shithappens,255555,qwertyy,xbox36,19755791,qweasd1,bearcub,jerryb,a1b1c1,polkaudio,basketball1,456rty,1loveyou,marcus2,mama1961,palace1,transcend,shuriken,sudhakar,teenlove,anabelle,matrix99,pogoda,notme,bartend,jordana,nihaoma,ataris,littlegi,ferraris,redarmy,giallo,fastdraw,accountbloc,peludo,pornostar,pinoyako,cindee,glassjaw,dameon,johnnyd,finnland,saudade,losbravo,slonko,toplay,smalltit,nicksfun,stockhol,penpal,caraj,divedeep,cannibus,poppydog,pass88,viktory,walhalla,arisia,lucozade,goldenbo,tigers11,caball,ownage123,tonna,handy1,johny,capital5,faith2,stillher,brandan,pooky1,antananarivu,hotdick,1justin,lacrimos,goathead,bobrik,cgtwbfkbcn,maywood,kamilek,gbplf123,gulnar,beanhead,vfvjyn,shash,viper69,ttttttt1,hondacr,kanako,muffer,dukies,justin123,agapov58,mushka,bad11bad,muleman,jojo123,andreika,makeit,vanill,boomers,bigals,merlin11,quacker,aurelien,spartak1922,ligeti,diana2,lawnmowe,fortune1,awesom,rockyy,anna1994,oinker,love88,eastbay,ab55484,poker0,ozzy666,papasmurf,antihero,photogra,ktm250,painkill,jegr2d2,p3orion,canman,dextur,qwest123,samboy,yomismo,sierra01,herber,vfrcbvvfrcbv,gloria1,llama1,pie123,bobbyjoe,buzzkill,skidrow,grabber,phili,javier1,9379992q,geroin,oleg1994,sovereig,rollover,zaq12qaz,battery1,killer13,alina123,groucho1,mario12,peter22,butterbean,elise1,lucycat,neo123,ferdi,golfer01,randie,gfhfyjbr,ventura1,chelsea3,pinoy,mtgox,yrrim7,shoeman,mirko,ffggyyo,65mustan,ufdibyjd,john55,suckfuck,greatgoo,fvfnjhb,mmmnnn,love20,1bullshi,sucesso,easy1234,robin123,rockets1,diamondb,wolfee,nothing0,joker777,glasnost,richar1,guille,sayan,koresh,goshawk,alexx,batman21,a123456b,hball,243122,rockandr,coolfool,isaia,mary1,yjdbrjdf,lolopc,cleocat,cimbo,lovehina,8vfhnf,passking,bonapart,diamond2,bigboys,kreator,ctvtyjdf,sassy123,shellac,table54781,nedkelly,philbert,sux2bu,nomis,sparky99,python1,littlebear,numpty,silmaril,sweeet,jamesw,cbufhtnf,peggysue,wodahs,luvsex,wizardry,venom123,love4you,bama1,samat,reviewpass,ned467,cjkjdtq,mamula,gijoe,amersham,devochka,redhill,gisel,preggo,polock,cando,rewster,greenlantern,panasonik,dave1234,mikeee,1carlos,miledi,darkness1,p0o9i8u7y6,kathryn1,happyguy,dcp500,assmaster,sambuka,sailormo,antonio3,logans,18254288,nokiax2,qwertzuiop,zavilov,totti,xenon1,edward11,targa1,something1,tony_t,q1w2e3r4t5y6u7i8o9p0,02551670,vladimir1,monkeybutt,greenda,neel21,craiger,saveliy,dei008,honda450,fylhtq95,spike2,fjnq8915,passwordstandard,vova12345,talonesi,richi,gigemags,pierre1,westin,trevoga,dorothee,bastogne,25563o,brandon3,truegrit,krimml,iamgreat,servis,a112233,paulinka,azimuth,corperfmonsy,358hkyp,homerun1,dogbert1,eatmyass,cottage1,savina,baseball7,bigtex,gimmesum,asdcxz,lennon1,a159357,1bastard,413276191q,pngfilt,pchealth,netsnip,bodiroga,1matt,webtvs,ravers,adapters,siddis,mashamasha,coffee2,myhoney,anna1982,marcia1,fairchil,maniek,iloveluc,batmonh,wildon,bowie1,netnwlnk,fancy1,tom204,olga1976,vfif123,queens1,ajax01,lovess,mockba,icam4usb,triada,odinthor,rstlne,exciter,sundog,anchorat,girls69,nfnmzyrf,soloma,gti16v,shadowman,ottom,rataros,tonchin,vishal,chicken0,pornlo,christiaan,volante,likesit,mariupol,runfast,gbpltw123,missys,villevalo,kbpjxrf,ghibli,calla,cessna172,kinglear,dell11,swift1,walera,1cricket,pussy5,turbo911,tucke,maprchem56458,rosehill,thekiwi1,ygfxbkgt,mandarinka,98xa29,magnit,cjfrf,paswoord,grandam1,shenmue,leedsuni,hatrick,zagadka,angeldog,michaell,dance123,koichi,bballs,29palms,xanth,228822,ppppppp1,1kkkkk,1lllll,mynewbots,spurss,madmax1,224455,city1,mmmmmmm1,nnnnnnn1,biedronka,thebeatles,elessar,f14tomcat,jordan18,bobo123,ayi000,tedbear,86chevyx,user123,bobolink,maktub,elmer1,flyfishi,franco1,gandalf0,traxdata,david21,enlighte,dmitrij,beckys,1giants,flippe,12345678w,jossie,rugbyman,snowcat,rapeme,peanut11,gemeni,udders,techn9ne,armani1,chappie,war123,vakantie,maddawg,sewanee,jake5253,tautt1,anthony5,letterma,jimbo2,kmdtyjr,hextall,jessica6,amiga500,hotcunt,phoenix9,veronda,saqartvelo,scubas,sixer3,williamj,nightfal,shihan,melnikova,kosssss,handily,killer77,jhrl0821,march17,rushman,6gcf636i,metoyou,irina123,mine11,primus1,formatters,matthew5,infotech,gangster1,jordan45,moose69,kompas,motoxxx,greatwhi,cobra12,kirpich,weezer1,hello23,montse,tracy123,connecte,cjymrf,hemingwa,azreal,gundam00,mobila,boxman,slayers1,ravshan,june26,fktrcfylhjd,bermuda1,tylerd,maersk,qazwsx11,eybdthcbntn,ash123,camelo,kat123,backd00r,cheyenne1,1king,jerkin,tnt123,trabant,warhammer40k,rambos,punto,home77,pedrito,1frank,brille,guitarman,george13,rakas,tgbxtcrbq,flute1,bananas1,lovezp1314,thespot,postie,buster69,sexytime,twistys,zacharia,sportage,toccata,denver7,terry123,bogdanova,devil69,higgins1,whatluck,pele10,kkk666,jeffery1,1qayxsw2,riptide1,chevy11,munchy,lazer1,hooker1,ghfgjh,vergesse,playgrou,4077mash,gusev,humpin,oneputt,hydepark,monster9,tiger8,tangsoo,guy123,hesoyam1,uhtqneyu,thanku,lomond,ortezza,kronik,geetha,rabbit66,killas,qazxswe,alabaste,1234567890qwerty,capone1,andrea12,geral,beatbox,slutfuck,booyaka,jasmine7,ostsee,maestro1,beatme,tracey1,buster123,donaldduck,ironfish,happy6,konnichi,gintonic,momoney1,dugan1,today2,enkidu,destiny2,trim7gun,katuha,fractals,morganstanley,polkadot,gotime,prince11,204060,fifa2010,bobbyt,seemee,amanda10,airbrush,bigtitty,heidie,layla1,cotton1,5speed,fyfnjkmtdyf,flynavy,joxury8f,meeko,akuma,dudley1,flyboy1,moondog1,trotters,mariami,signin,chinna,legs11,pussy4,1s1h1e1f1,felici,optimus1,iluvu,marlins1,gavaec,balance1,glock40,london01,kokot,southwes,comfort1,sammy11,rockbottom,brianc,litebeer,homero,chopsuey,greenlan,charit,freecell,hampster,smalldog,viper12,blofeld,1234567890987654321,realsex,romann,cartman2,cjdthitycndj,nelly1,bmw528,zwezda,masterba,jeep99,turtl,america2,sunburst,sanyco,auntjudy,125wm,blue10,qwsazx,cartma,toby12,robbob,red222,ilovecock,losfix16,1explore,helge,vaz2114,whynotme,baba123,mugen,1qazwsxedc,albertjr,0101198,sextime,supras,nicolas2,wantsex,pussy6,checkm8,winam,24gordon,misterme,curlew,gbljhfcs,medtech,franzi,butthea,voivod,blackhat,egoiste,pjkeirf,maddog69,pakalolo,hockey4,igor1234,rouges,snowhite,homefree,sexfreak,acer12,dsmith,blessyou,199410,vfrcbvjd,falco02,belinda1,yaglasph,april21,groundho,jasmin1,nevergiveup,elvir,gborv526,c00kie,emma01,awesome2,larina,mike12345,maximu,anupam,bltynbabrfwbz,tanushka,sukkel,raptor22,josh12,schalke04,cosmodog,fuckyou8,busybee,198800,bijoux,frame1,blackmor,giveit,issmall,bear13,123-123,bladez,littlegirl,ultra123,fletch1,flashnet,loploprock,rkelly,12step,lukas1,littlewhore,cuntfinger,stinkyfinger,laurenc,198020,n7td4bjl,jackie69,camel123,ben1234,1gateway,adelheid,fatmike,thuglove,zzaaqq,chivas1,4815162342q,mamadou,nadano,james22,benwin,andrea99,rjirf,michou,abkbgg,d50gnn,aaazzz,a123654,blankman,booboo11,medicus,bigbone,197200,justine1,bendix,morphius,njhvjp,44mag,zsecyus56,goodbye1,nokiadermo,a333444,waratsea,4rzp8ab7,fevral,brillian,kirbys,minim,erathia,grazia,zxcvb1234,dukey,snaggle,poppi,hymen,1video,dune2000,jpthjdf,cvbn123,zcxfcnkbdfz,astonv,ginnie,316271,engine3,pr1ncess,64chevy,glass1,laotzu,hollyy,comicbooks,assasins,nuaddn9561,scottsda,hfcnfvfy,accobra,7777777z,werty123,metalhead,romanson,redsand,365214,shalo,arsenii,1989cc,sissi,duramax,382563,petera,414243,mamapap,jollymon,field1,fatgirl,janets,trompete,matchbox20,rambo2,nepenthe,441232,qwertyuiop10,bozo123,phezc419hv,romantika,lifestyl,pengui,decembre,demon6,panther6,444888,scanman,ghjcnjabkz,pachanga,buzzword,indianer,spiderman3,tony12,startre,frog1,fyutk,483422,tupacshakur,albert12,1drummer,bmw328i,green17,aerdna,invisibl,summer13,calimer,mustaine,lgnu9d,morefun,hesoyam123,escort1,scrapland,stargat,barabbas,dead13,545645,mexicali,sierr,gfhfpbn,gonchar,moonstafa,searock,counte,foster1,jayhawk1,floren,maremma,nastya2010,softball1,adaptec,halloo,barrabas,zxcasd123,hunny,mariana1,kafedra,freedom0,green420,vlad1234,method7,665566,tooting,hallo12,davinchi,conducto,medias,666444,invernes,madhatter,456asd,12345678i,687887,le33px,spring00,help123,bellybut,billy5,vitalik1,river123,gorila,bendis,power666,747200,footslav,acehigh,qazxswedc123,q1a1z1,richard9,peterburg,tabletop,gavrilov,123qwe1,kolosov,fredrau,run4fun,789056,jkbvgbflf,chitra,87654321q,steve22,wideopen,access88,surfe,tdfyutkbjy,impossib,kevin69,880888,cantina,887766,wxcvb,dontforg,qwer1209,asslicke,mamma123,indig,arkasha,scrapp,morelia,vehxbr,jones2,scratch1,cody11,cassie12,gerbera,dontgotm,underhil,maks2010,hollywood1,hanibal,elena2010,jason11,1010321,stewar,elaman,fireplug,goodby,sacrific,babyphat,bobcat12,bruce123,1233215,tony45,tiburo,love15,bmw750,wallstreet,2h0t4me,1346795,lamerz,munkee,134679q,granvill,1512198,armastus,aiden1,pipeutvj,g1234567,angeleyes,usmc1,102030q,putangina,brandnew,shadowfax,eagles12,1falcon,brianw,lokomoti,2022958,scooper,pegas,jabroni1,2121212,buffal,siffredi,wewiz,twotone,rosebudd,nightwis,carpet1,mickey2,2525252,sleddog,red333,jamesm,2797349,jeff12,onizuka,felixxxx,rf6666,fine1,ohlala,forplay,chicago5,muncho,scooby11,ptichka,johnnn,19851985p,dogphil3650,totenkopf,monitor2,macross7,3816778,dudder,semaj1,bounder,racerx1,5556633,7085506,ofclr278,brody1,7506751,nantucke,hedj2n4q,drew1,aessedai,trekbike,pussykat,samatron,imani,9124852,wiley1,dukenukem,iampurehaha2,9556035,obvious1,mccool24,apache64,kravchenko,justforf,basura,jamese,s0ccer,safado,darksta,surfer69,damian1,gjpbnbd,gunny1,wolley,sananton,zxcvbn123456,odt4p6sv8,sergei1,modem1,mansikka,zzzz1,rifraf,dima777,mary69,looking4,donttell,red100,ninjutsu,uaeuaeman,bigbri,brasco,queenas8151,demetri,angel007,bubbl,kolort,conny,antonia1,avtoritet,kaka22,kailayu,sassy2,wrongway,chevy3,1nascar,patriots1,chrisrey,mike99,sexy22,chkdsk,sd3utre7,padawan,a6pihd,doming,mesohorny,tamada,donatello,emma22,eather,susan69,pinky123,stud69,fatbitch,pilsbury,thc420,lovepuss,1creativ,golf1234,hurryup,1honda,huskerdu,marino1,gowron,girl1,fucktoy,gtnhjpfdjlcr,dkjfghdk,pinkfl,loreli,7777777s,donkeykong,rockytop,staples1,sone4ka,xxxjay,flywheel,toppdogg,bigbubba,aaa123456,2letmein,shavkat,paule,dlanor,adamas,0147852,aassaa,dixon1,bmw328,mother12,ilikepussy,holly2,tsmith,excaliber,fhutynbyf,nicole3,tulipan,emanue,flyvholm,currahee,godsgift,antonioj,torito,dinky1,sanna,yfcnzvjz,june14,anime123,123321456654,hanswurst,bandman,hello101,xxxyyy,chevy69,technica,tagada,arnol,v00d00,lilone,filles,drumandbass,dinamit,a1234a,eatmeat,elway07,inout,james6,dawid1,thewolf,diapason,yodaddy,qscwdv,fuckit1,liljoe,sloeber,simbacat,sascha1,qwe1234,1badger,prisca,angel17,gravedig,jakeyboy,longboard,truskawka,golfer11,pyramid7,highspee,pistola,theriver,hammer69,1packers,dannyd,alfonse,qwertgfdsa,11119999,basket1,ghjtrn,saralee,12inches,paolo1,zse4xdr5,taproot,sophieh6,grizzlie,hockey69,danang,biggums,hotbitch,5alive,beloved1,bluewave,dimon95,koketka,multiscan,littleb,leghorn,poker2,delite,skyfir,bigjake,persona1,amberdog,hannah12,derren,ziffle,1sarah,1assword,sparky01,seymur,tomtom1,123321qw,goskins,soccer19,luvbekki,bumhole,2balls,1muffin,borodin,monkey9,yfeiybrb,1alex,betmen,freder,nigger123,azizbek,gjkzrjdf,lilmike,1bigdadd,1rock,taganrog,snappy1,andrey1,kolonka,bunyan,gomango,vivia,clarkkent,satur,gaudeamus,mantaray,1month,whitehea,fargus,andrew99,ray123,redhawks,liza2009,qw12345,den12345,vfhnsyjdf,147258369a,mazepa,newyorke,1arsenal,hondas2000,demona,fordgt,steve12,birthday2,12457896,dickster,edcwsxqaz,sahalin,pantyman,skinny1,hubertus,cumshot1,chiro,kappaman,mark3434,canada12,lichking,bonkers1,ivan1985,sybase,valmet,doors1,deedlit,kyjelly,bdfysx,ford11,throatfuck,backwood,fylhsq,lalit,boss429,kotova,bricky,steveh,joshua19,kissa,imladris,star1234,lubimka,partyman,crazyd,tobias1,ilike69,imhome,whome,fourstar,scanner1,ujhjl312,anatoli,85bears,jimbo69,5678ytr,potapova,nokia7070,sunday1,kalleank,1996gta,refinnej,july1,molodec,nothanks,enigm,12play,sugardog,nhfkbdfkb,larousse,cannon1,144444,qazxcdew,stimorol,jhereg,spawn7,143000,fearme,hambur,merlin21,dobie,is3yeusc,partner1,dekal,varsha,478jfszk,flavi,hippo1,9hmlpyjd,july21,7imjfstw,lexxus,truelov,nokia5200,carlos6,anais,mudbone,anahit,taylorc,tashas,larkspur,animal2000,nibiru,jan123,miyvarxar,deflep,dolore,communit,ifoptfcor,laura2,anadrol,mamaliga,mitzi1,blue92,april15,matveev,kajlas,wowlook1,1flowers,shadow14,alucard1,1golf,bantha,scotlan,singapur,mark13,manchester1,telus01,superdav,jackoff1,madnes,bullnuts,world123,clitty,palmer1,david10,spider10,sargsyan,rattlers,david4,windows2,sony12,visigoth,qqqaaa,penfloor,cabledog,camilla1,natasha123,eagleman,softcore,bobrov,dietmar,divad,sss123,d1234567,tlbyjhju,1q1q1q1,paraiso,dav123,lfiekmrf,drachen,lzhan16889,tplate,gfghbrf,casio1,123boots1,123test,sys64738,heavymetal,andiamo,meduza,soarer,coco12,negrita,amigas,heavymet,bespin,1asdfghj,wharfrat,wetsex,tight1,janus1,sword123,ladeda,dragon98,austin2,atep1,jungle1,12345abcd,lexus300,pheonix1,alex1974,123qw123,137955,bigtim,shadow88,igor1994,goodjob,arzen,champ123,121ebay,changeme1,brooksie,frogman1,buldozer,morrowin,achim,trish1,lasse,festiva,bubbaman,scottb,kramit,august22,tyson123,passsword,oompah,al123456,fucking1,green45,noodle1,looking1,ashlynn,al1716,stang50,coco11,greese,bob111,brennan1,jasonj,1cherry,1q2345,1xxxxxxx,fifa2011,brondby,zachar1,satyam,easy1,magic7,1rainbow,cheezit,1eeeeeee,ashley123,assass1,amanda123,jerbear,1bbbbbb,azerty12,15975391,654321z,twinturb,onlyone1,denis1988,6846kg3r,jumbos,pennydog,dandelion,haileris,epervier,snoopy69,afrodite,oldpussy,green55,poopypan,verymuch,katyusha,recon7,mine69,tangos,contro,blowme2,jade1,skydive1,fiveiron,dimo4ka,bokser,stargirl,fordfocus,tigers2,platina,baseball11,raque,pimper,jawbreak,buster88,walter34,chucko,penchair,horizon1,thecure1,scc1975,adrianna1,kareta,duke12,krille,dumbfuck,cunt1,aldebaran,laverda,harumi,knopfler,pongo1,pfhbyf,dogman1,rossigno,1hardon,scarlets,nuggets1,ibelieve,akinfeev,xfhkbr,athene,falcon69,happie,billly,nitsua,fiocco,qwerty09,gizmo2,slava2,125690,doggy123,craigs,vader123,silkeborg,124365,peterm,123978,krakatoa,123699,123592,kgvebmqy,pensacol,d1d2d3,snowstor,goldenboy,gfg65h7,ev700,church1,orange11,g0dz1ll4,chester3,acheron,cynthi,hotshot1,jesuschris,motdepass,zymurgy,one2one,fietsbel,harryp,wisper,pookster,nn527hp,dolla,milkmaid,rustyboy,terrell1,epsilon1,lillian1,dale3,crhbgrf,maxsim,selecta,mamada,fatman1,ufkjxrf,shinchan,fuckuall,women1,000008,bossss,greta1,rbhjxrf,mamasboy,purple69,felicidade,sexy21,cathay,hunglow,splatt,kahless,shopping1,1gandalf,themis,delta7,moon69,blue24,parliame,mamma1,miyuki,2500hd,jackmeof,razer,rocker1,juvis123,noremac,boing747,9z5ve9rrcz,icewater,titania,alley1,moparman,christo1,oliver2,vinicius,tigerfan,chevyy,joshua99,doda99,matrixx,ekbnrf,jackfrost,viper01,kasia,cnfhsq,triton1,ssbt8ae2,rugby8,ramman,1lucky,barabash,ghtlfntkm,junaid,apeshit,enfant,kenpo1,shit12,007000,marge1,shadow10,qwerty789,richard8,vbitkm,lostboys,jesus4me,richard4,hifive,kolawole,damilola,prisma,paranoya,prince2,lisaann,happyness,cardss,methodma,supercop,a8kd47v5,gamgee,polly123,irene1,number8,hoyasaxa,1digital,matthew0,dclxvi,lisica,roy123,2468013579,sparda,queball,vaffanculo,pass1wor,repmvbx,999666333,freedom8,botanik,777555333,marcos1,lubimaya,flash2,einstei,08080,123456789j,159951159,159357123,carrot1,alina1995,sanjos,dilara,mustang67,wisteria,jhnjgtl12,98766789,darksun,arxangel,87062134,creativ1,malyshka,fuckthemall,barsic,rocksta,2big4u,5nizza,genesis2,romance1,ofcourse,1horse,latenite,cubana,sactown,789456123a,milliona,61808861,57699434,imperia,bubba11,yellow3,change12,55495746,flappy,jimbo123,19372846,19380018,cutlass1,craig123,klepto,beagle1,solus,51502112,pasha1,19822891,46466452,19855891,petshop,nikolaevna,119966,nokia6131,evenpar,hoosier1,contrasena,jawa350,gonzo123,mouse2,115511,eetfuk,gfhfvgfvgfv,1crystal,sofaking,coyote1,kwiatuszek,fhrflbq,valeria1,anthro,0123654789,alltheway,zoltar,maasikas,wildchil,fredonia,earlgrey,gtnhjczy,matrix123,solid1,slavko,12monkeys,fjdksl,inter1,nokia6500,59382113kevinp,spuddy,cachero,coorslit,password!,kiba1z,karizma,vova1994,chicony,english1,bondra12,1rocket,hunden,jimbob1,zpflhjn1,th0mas,deuce22,meatwad,fatfree,congas,sambora,cooper2,janne,clancy1,stonie,busta,kamaz,speedy2,jasmine3,fahayek,arsenal0,beerss,trixie1,boobs69,luansantana,toadman,control2,ewing33,maxcat,mama1964,diamond4,tabaco,joshua0,piper2,music101,guybrush,reynald,pincher,katiebug,starrs,pimphard,frontosa,alex97,cootie,clockwor,belluno,skyeseth,booty69,chaparra,boochie,green4,bobcat1,havok,saraann,pipeman,aekdb,jumpshot,wintermu,chaika,1chester,rjnjatq,emokid,reset1,regal1,j0shua,134679a,asmodey,sarahh,zapidoo,ciccione,sosexy,beckham23,hornets1,alex1971,delerium,manageme,connor11,1rabbit,sane4ek,caseyboy,cbljhjdf,redsox20,tttttt99,haustool,ander,pantera6,passwd1,journey1,9988776655,blue135,writerspace,xiaoyua123,justice2,niagra,cassis,scorpius,bpgjldsgjldthnf,gamemaster,bloody1,retrac,stabbin,toybox,fight1,ytpyf.,glasha,va2001,taylor11,shameles,ladylove,10078,karmann,rodeos,eintritt,lanesra,tobasco,jnrhjqcz,navyman,pablit,leshka,jessica3,123vika,alena1,platinu,ilford,storm7,undernet,sasha777,1legend,anna2002,kanmax1994,porkpie,thunder0,gundog,pallina,easypass,duck1,supermom,roach1,twincam,14028,tiziano,qwerty32,123654789a,evropa,shampoo1,yfxfkmybr,cubby1,tsunami1,fktrcttdf,yasacrac,17098,happyhap,bullrun,rodder,oaktown,holde,isbest,taylor9,reeper,hammer11,julias,rolltide1,compaq123,fourx4,subzero1,hockey9,7mary3,busines,ybrbnjcbr,wagoneer,danniash,portishead,digitex,alex1981,david11,infidel,1snoopy,free30,jaden,tonto1,redcar27,footie,moskwa,thomas21,hammer12,burzum,cosmo123,50000,burltree,54343,54354,vwpassat,jack5225,cougars1,burlpony,blackhorse,alegna,petert,katemoss,ram123,nels0n,ferrina,angel77,cstock,1christi,dave55,abc123a,alex1975,av626ss,flipoff,folgore,max1998,science1,si711ne,yams7,wifey1,sveiks,cabin1,volodia,ox3ford,cartagen,platini,picture1,sparkle1,tiedomi,service321,wooody,christi1,gnasher,brunob,hammie,iraffert,bot2010,dtcyeirf,1234567890p,cooper11,alcoholi,savchenko,adam01,chelsea5,niewiem,icebear,lllooottt,ilovedick,sweetpus,money8,cookie13,rfnthbyf1988,booboo2,angus123,blockbus,david9,chica1,nazaret,samsung9,smile4u,daystar,skinnass,john10,thegirl,sexybeas,wasdwasd1,sigge1,1qa2ws3ed4rf5tg,czarny,ripley1,chris5,ashley19,anitha,pokerman,prevert,trfnthby,tony69,georgia2,stoppedb,qwertyuiop12345,miniclip,franky1,durdom,cabbages,1234567890o,delta5,liudmila,nhfycajhvths,court1,josiew,abcd1,doghead,diman,masiania,songline,boogle,triston,deepika,sexy4me,grapple,spacebal,ebonee,winter0,smokewee,nargiza,dragonla,sassys,andy2000,menards,yoshio,massive1,suckmy1k,passat99,sexybo,nastya1996,isdead,stratcat,hokuto,infix,pidoras,daffyduck,cumhard,baldeagl,kerberos,yardman,shibainu,guitare,cqub6553,tommyy,bk.irf,bigfoo,hecto,july27,james4,biggus,esbjerg,isgod,1irish,phenmarr,jamaic,roma1990,diamond0,yjdbrjd,girls4me,tampa1,kabuto,vaduz,hanse,spieng,dianochka,csm101,lorna1,ogoshi,plhy6hql,2wsx4rfv,cameron0,adebayo,oleg1996,sharipov,bouboule,hollister1,frogss,yeababy,kablam,adelante,memem,howies,thering,cecilia1,onetwo12,ojp123456,jordan9,msorcloledbr,neveraga,evh5150,redwin,1august,canno,1mercede,moody1,mudbug,chessmas,tiikeri,stickdaddy77,alex15,kvartira,7654321a,lollol123,qwaszxedc,algore,solana,vfhbyfvfhbyf,blue72,misha1111,smoke20,junior13,mogli,threee,shannon2,fuckmylife,kevinh,saransk,karenw,isolde,sekirarr,orion123,thomas0,debra1,laketaho,alondra,curiva,jazz1234,1tigers,jambos,lickme2,suomi,gandalf7,028526,zygote,brett123,br1ttany,supafly,159000,kingrat,luton1,cool-ca,bocman,thomasd,skiller,katter,mama777,chanc,tomass,1rachel,oldno7,rfpfyjdf,bigkev,yelrah,primas,osito,kipper1,msvcr71,bigboy11,thesun,noskcaj,chicc,sonja1,lozinka,mobile1,1vader,ummagumma,waves1,punter12,tubgtn,server1,irina1991,magic69,dak001,pandemonium,dead1,berlingo,cherrypi,1montana,lohotron,chicklet,asdfgh123456,stepside,ikmvw103,icebaby,trillium,1sucks,ukrnet,glock9,ab12345,thepower,robert8,thugstools,hockey13,buffon,livefree,sexpics,dessar,ja0000,rosenrot,james10,1fish,svoloch,mykitty,muffin11,evbukb,shwing,artem1992,andrey1992,sheldon1,passpage,nikita99,fubar123,vannasx,eight888,marial,max2010,express2,violentj,2ykn5ccf,spartan11,brenda69,jackiech,abagail,robin2,grass1,andy76,bell1,taison,superme,vika1995,xtr451,fred20,89032073168,denis1984,2000jeep,weetabix,199020,daxter,tevion,panther8,h9iymxmc,bigrig,kalambur,tsalagi,12213443,racecar02,jeffrey4,nataxa,bigsam,purgator,acuracl,troutbum,potsmoke,jimmyz,manutd1,nytimes,pureevil,bearss,cool22,dragonage,nodnarb,dbrbyu,4seasons,freude,elric1,werule,hockey14,12758698,corkie,yeahright,blademan,tafkap,clave,liziko,hofner,jeffhardy,nurich,runne,stanisla,lucy1,monk3y,forzaroma,eric99,bonaire,blackwoo,fengshui,1qaz0okm,newmoney,pimpin69,07078,anonymer,laptop1,cherry12,ace111,salsa1,wilbur1,doom12,diablo23,jgtxzbhr,under1,honda01,breadfan,megan2,juancarlos,stratus1,ackbar,love5683,happytim,lambert1,cbljhtyrj,komarov,spam69,nfhtkrf,brownn,sarmat,ifiksr,spike69,hoangen,angelz,economia,tanzen,avogadro,1vampire,spanners,mazdarx,queequeg,oriana,hershil,sulaco,joseph11,8seconds,aquariu,cumberla,heather9,anthony8,burton12,crystal0,maria3,qazwsxc,snow123,notgood,198520,raindog,heehaw,consulta,dasein,miller01,cthulhu1,dukenuke,iubire,baytown,hatebree,198505,sistem,lena12,welcome01,maraca,middleto,sindhu,mitsou,phoenix5,vovan,donaldo,dylandog,domovoy,lauren12,byrjuybnj,123llll,stillers,sanchin,tulpan,smallvill,1mmmmm,patti1,folgers,mike31,colts18,123456rrr,njkmrjz,phoenix0,biene,ironcity,kasperok,password22,fitnes,matthew6,spotligh,bujhm123,tommycat,hazel5,guitar11,145678,vfcmrf,compass1,willee,1barney,jack2000,littleminge,shemp,derrek,xxx12345,littlefuck,spuds1,karolinka,camneely,qwertyu123,142500,brandon00,munson15,falcon3,passssap,z3cn2erv,goahead,baggio10,141592,denali1,37kazoo,copernic,123456789asd,orange88,bravada,rush211,197700,pablo123,uptheass,samsam1,demoman,mattylad10,heydude,mister2,werken,13467985,marantz,a22222,f1f2f3f4,fm12mn12,gerasimova,burrito1,sony1,glenny,baldeagle,rmfidd,fenomen,verbati,forgetme,5element,wer138,chanel1,ooicu812,10293847qp,minicooper,chispa,myturn,deisel,vthrehbq,boredboi4u,filatova,anabe,poiuyt1,barmalei,yyyy1,fourkids,naumenko,bangbros,pornclub,okaykk,euclid90,warrior3,kornet,palevo,patatina,gocart,antanta,jed1054,clock1,111111w,dewars,mankind1,peugeot406,liten,tahira,howlin,naumov,rmracing,corone,cunthole,passit,rock69,jaguarxj,bumsen,197101,sweet2,197010,whitecat,sawadee,money100,yfhrjnbrb,andyboy,9085603566,trace1,fagget,robot1,angel20,6yhn7ujm,specialinsta,kareena,newblood,chingada,boobies2,bugger1,squad51,133andre,call06,ashes1,ilovelucy,success2,kotton,cavalla,philou,deebee,theband,nine09,artefact,196100,kkkkkkk1,nikolay9,onelov,basia,emilyann,sadman,fkrjujkbr,teamomuch,david777,padrino,money21,firdaus,orion3,chevy01,albatro,erdfcv,2legit,sarah7,torock,kevinn,holio,soloy,enron714,starfleet,qwer11,neverman,doctorwh,lucy11,dino12,trinity7,seatleon,o123456,pimpman,1asdfgh,snakebit,chancho,prorok,bleacher,ramire,darkseed,warhorse,michael123,1spanky,1hotdog,34erdfcv,n0th1ng,dimanche,repmvbyf,michaeljackson,login1,icequeen,toshiro,sperme,racer2,veget,birthday26,daniel9,lbvekmrf,charlus,bryan123,wspanic,schreibe,1andonly,dgoins,kewell,apollo12,egypt1,fernie,tiger21,aa123456789,blowj,spandau,bisquit,12345678d,deadmau5,fredie,311420,happyface,samant,gruppa,filmstar,andrew17,bakesale,sexy01,justlook,cbarkley,paul11,bloodred,rideme,birdbath,nfkbcvfy,jaxson,sirius1,kristof,virgos,nimrod1,hardc0re,killerbee,1abcdef,pitcher1,justonce,vlada,dakota99,vespucci,wpass,outside1,puertori,rfvbkf,teamlosi,vgfun2,porol777,empire11,20091989q,jasong,webuivalidat,escrima,lakers08,trigger2,addpass,342500,mongini,dfhtybr,horndogg,palermo1,136900,babyblu,alla98,dasha2010,jkelly,kernow,yfnecz,rockhopper,toeman,tlaloc,silver77,dave01,kevinr,1234567887654321,135642,me2you,8096468644q,remmus,spider7,jamesa,jilly,samba1,drongo,770129ji,supercat,juntas,tema1234,esthe,1234567892000,drew11,qazqaz123,beegees,blome,rattrace,howhigh,tallboy,rufus2,sunny2,sou812,miller12,indiana7,irnbru,patch123,letmeon,welcome5,nabisco,9hotpoin,hpvteb,lovinit,stormin,assmonke,trill,atlanti,money1234,cubsfan,mello1,stars2,ueptkm,agate,dannym88,lover123,wordz,worldnet,julemand,chaser1,s12345678,pissword,cinemax,woodchuc,point1,hotchkis,packers2,bananana,kalender,420666,penguin8,awo8rx3wa8t,hoppie,metlife,ilovemyfamily,weihnachtsbau,pudding1,luckystr,scully1,fatboy1,amizade,dedham,jahbless,blaat,surrende,****er,1panties,bigasses,ghjuhfvbcn,asshole123,dfktyrb,likeme,nickers,plastik,hektor,deeman,muchacha,cerebro,santana5,testdrive,dracula1,canalc,l1750sq,savannah1,murena,1inside,pokemon00,1iiiiiii,jordan20,sexual1,mailliw,calipso,014702580369,1zzzzzz,1jjjjjj,break1,15253545,yomama1,katinka,kevin11,1ffffff,martijn,sslazio,daniel5,porno2,nosmas,leolion,jscript,15975312,pundai,kelli1,kkkddd,obafgkm,marmaris,lilmama,london123,rfhfnt,elgordo,talk87,daniel7,thesims3,444111,bishkek,afrika2002,toby22,1speedy,daishi,2children,afroman,qqqqwwww,oldskool,hawai,v55555,syndicat,pukimak,fanatik,tiger5,parker01,bri5kev6,timexx,wartburg,love55,ecosse,yelena03,madinina,highway1,uhfdbwfgf,karuna,buhjvfybz,wallie,46and2,khalif,europ,qaz123wsx456,bobbybob,wolfone,falloutboy,manning18,scuba10,schnuff,ihateyou1,lindam,sara123,popcor,fallengun,divine1,montblanc,qwerty8,rooney10,roadrage,bertie1,latinus,lexusis,rhfvfnjhcr,opelgt,hitme,agatka,1yamaha,dmfxhkju,imaloser,michell1,sb211st,silver22,lockedup,andrew9,monica01,sassycat,dsobwick,tinroof,ctrhtnyj,bultaco,rhfcyjzhcr,aaaassss,14ss88,joanne1,momanddad,ahjkjdf,yelhsa,zipdrive,telescop,500600,1sexsex,facial1,motaro,511647,stoner1,temujin,elephant1,greatman,honey69,kociak,ukqmwhj6,altezza,cumquat,zippos,kontiki,123max,altec1,bibigon,tontos,qazsew,nopasaran,militar,supratt,oglala,kobayash,agathe,yawetag,dogs1,cfiekmrf,megan123,jamesdea,porosenok,tiger23,berger1,hello11,seemann,stunner1,walker2,imissu,jabari,minfd,lollol12,hjvfy,1-oct,stjohns,2278124q,123456789qwer,alex1983,glowworm,chicho,mallards,bluedevil,explorer1,543211,casita,1time,lachesis,alex1982,airborn1,dubesor,changa,lizzie1,captaink,socool,bidule,march23,1861brr,k.ljxrf,watchout,fotze,1brian,keksa2,aaaa1122,matrim,providian,privado,dreame,merry1,aregdone,davidt,nounour,twenty2,play2win,artcast2,zontik,552255,shit1,sluggy,552861,dr8350,brooze,alpha69,thunder6,kamelia2011,caleb123,mmxxmm,jamesh,lfybkjd,125267,125000,124536,bliss1,dddsss,indonesi,bob69,123888,tgkbxfgy,gerar,themack,hijodeputa,good4now,ddd123,clk430,kalash,tolkien1,132forever,blackb,whatis,s1s2s3s4,lolkin09,yamahar,48n25rcc,djtiesto,111222333444555,bigbull,blade55,coolbree,kelse,ichwill,yamaha12,sakic,bebeto,katoom,donke,sahar,wahine,645202,god666,berni,starwood,june15,sonoio,time123,llbean,deadsoul,lazarev,cdtnf,ksyusha,madarchod,technik,jamesy,4speed,tenorsax,legshow,yoshi1,chrisbl,44e3ebda,trafalga,heather7,serafima,favorite4,havefun1,wolve,55555r,james13,nosredna,bodean,jlettier,borracho,mickael,marinus,brutu,sweet666,kiborg,rollrock,jackson6,macross1,ousooner,9085084232,takeme,123qwaszx,firedept,vfrfhjd,jackfros,123456789000,briane,cookie11,baby22,bobby18,gromova,systemofadown,martin01,silver01,pimaou,darthmaul,hijinx,commo,chech,skyman,sunse,2vrd6,vladimirovna,uthvfybz,nicole01,kreker,bobo1,v123456789,erxtgb,meetoo,drakcap,vfvf12,misiek1,butane,network2,flyers99,riogrand,jennyk,e12345,spinne,avalon11,lovejone,studen,maint,porsche2,qwerty100,chamberl,bluedog1,sungam,just4u,andrew23,summer22,ludic,musiclover,aguil,beardog1,libertin,pippo1,joselit,patito,bigberth,digler,sydnee,jockstra,poopo,jas4an,nastya123,profil,fuesse,default1,titan2,mendoz,kpcofgs,anamika,brillo021,bomberman,guitar69,latching,69pussy,blues2,phelge,ninja123,m7n56xo,qwertasd,alex1976,cunningh,estrela,gladbach,marillion,mike2000,258046,bypop,muffinman,kd5396b,zeratul,djkxbwf,john77,sigma2,1linda,selur,reppep,quartz1,teen1,freeclus,spook1,kudos4ever,clitring,sexiness,blumpkin,macbook,tileman,centra,escaflowne,pentable,shant,grappa,zverev,1albert,lommerse,coffee11,777123,polkilo,muppet1,alex74,lkjhgfdsazx,olesica,april14,ba25547,souths,jasmi,arashi,smile2,2401pedro,mybabe,alex111,quintain,pimp1,tdeir8b2,makenna,122333444455555,%e2%82%ac,tootsie1,pass111,zaqxsw123,gkfdfybt,cnfnbcnbrf,usermane,iloveyou12,hard69,osasuna,firegod,arvind,babochka,kiss123,cookie123,julie123,kamakazi,dylan2,223355,tanguy,nbhtqa,tigger13,tubby1,makavel,asdflkj,sambo1,mononoke,mickeys,gayguy,win123,green33,wcrfxtvgbjy,bigsmall,1newlife,clove,babyfac,bigwaves,mama1970,shockwav,1friday,bassey,yarddog,codered1,victory7,bigrick,kracker,gulfstre,chris200,sunbanna,bertuzzi,begemotik,kuolema,pondus,destinee,123456789zz,abiodun,flopsy,amadeusptfcor,geronim,yggdrasi,contex,daniel6,suck1,adonis1,moorea,el345612,f22raptor,moviebuf,raunchy,6043dkf,zxcvbnm123456789,eric11,deadmoin,ratiug,nosliw,fannies,danno,888889,blank1,mikey2,gullit,thor99,mamiya,ollieb,thoth,dagger1,websolutionssu,bonker,prive,1346798520,03038,q1234q,mommy2,contax,zhipo,gwendoli,gothic1,1234562000,lovedick,gibso,digital2,space199,b26354,987654123,golive,serious1,pivkoo,better1,824358553,794613258,nata1980,logout,fishpond,buttss,squidly,good4me,redsox19,jhonny,zse45rdx,matrixxx,honey12,ramina,213546879,motzart,fall99,newspape,killit,gimpy,photowiz,olesja,thebus,marco123,147852963,bedbug,147369258,hellbound,gjgjxrf,123987456,lovehurt,five55,hammer01,1234554321a,alina2011,peppino,ang238,questor,112358132,alina1994,alina1998,money77,bobjones,aigerim,cressida,madalena,420smoke,tinchair,raven13,mooser,mauric,lovebu,adidas69,krypton1,1111112,loveline,divin,voshod,michaelm,cocotte,gbkbuhbv,76689295,kellyj,rhonda1,sweetu70,steamforums,geeque,nothere,124c41,quixotic,steam181,1169900,rfcgthcrbq,rfvbkm,sexstuff,1231230,djctvm,rockstar1,fulhamfc,bhecbr,rfntyf,quiksilv,56836803,jedimaster,pangit,gfhjkm777,tocool,1237654,stella12,55378008,19216811,potte,fender12,mortalkombat,ball1,nudegirl,palace22,rattrap,debeers,lickpussy,jimmy6,not4u2c,wert12,bigjuggs,sadomaso,1357924,312mas,laser123,arminia,branford,coastie,mrmojo,19801982,scott11,banaan123,ingres,300zxtt,hooters6,sweeties,19821983,19831985,19833891,sinnfein,welcome4,winner69,killerman,tachyon,tigre1,nymets1,kangol,martinet,sooty1,19921993,789qwe,harsingh,1597535,thecount,phantom3,36985214,lukas123,117711,pakistan1,madmax11,willow01,19932916,fucker12,flhrci,opelagila,theword,ashley24,tigger3,crazyj,rapide,deadfish,allana,31359092,sasha1993,sanders2,discman,zaq!2wsx,boilerma,mickey69,jamesg,babybo,jackson9,orion7,alina2010,indien,breeze1,atease,warspite,bazongaz,1celtic,asguard,mygal,fitzgera,1secret,duke33,cyklone,dipascuc,potapov,1escobar2,c0l0rad0,kki177hk,1little,macondo,victoriya,peter7,red666,winston6,kl?benhavn,muneca,jackme,jennan,happylife,am4h39d8nh,bodybuil,201980,dutchie,biggame,lapo4ka,rauchen,black10,flaquit,water12,31021364,command2,lainth88,mazdamx5,typhon,colin123,rcfhlfc,qwaszx11,g0away,ramir,diesirae,hacked1,cessna1,woodfish,enigma2,pqnr67w5,odgez8j3,grisou,hiheels,5gtgiaxm,2580258,ohotnik,transits,quackers,serjik,makenzie,mdmgatew,bryana,superman12,melly,lokit,thegod,slickone,fun4all,netpass,penhorse,1cooper,nsync,asdasd22,otherside,honeydog,herbie1,chiphi,proghouse,l0nd0n,shagg,select1,frost1996,casper123,countr,magichat,greatzyo,jyothi,3bears,thefly,nikkita,fgjcnjk,nitros,hornys,san123,lightspe,maslova,kimber1,newyork2,spammm,mikejone,pumpk1n,bruiser1,bacons,prelude9,boodie,dragon4,kenneth2,love98,power5,yodude,pumba,thinline,blue30,sexxybj,2dumb2live,matt21,forsale,1carolin,innova,ilikeporn,rbgtkjd,a1s2d3f,wu9942,ruffus,blackboo,qwerty999,draco1,marcelin,hideki,gendalf,trevon,saraha,cartmen,yjhbkmcr,time2go,fanclub,ladder1,chinni,6942987,united99,lindac,quadra,paolit,mainstre,beano002,lincoln7,bellend,anomie,8520456,bangalor,goodstuff,chernov,stepashka,gulla,mike007,frasse,harley03,omnislash,8538622,maryjan,sasha2011,gineok,8807031,hornier,gopinath,princesit,bdr529,godown,bosslady,hakaone,1qwe2,madman1,joshua11,lovegame,bayamon,jedi01,stupid12,sport123,aaa666,tony44,collect1,charliem,chimaira,cx18ka,trrim777,chuckd,thedream,redsox99,goodmorning,delta88,iloveyou11,newlife2,figvam,chicago3,jasonk,12qwer,9875321,lestat1,satcom,conditio,capri50,sayaka,9933162,trunks1,chinga,snooch,alexand1,findus,poekie,cfdbyf,kevind,mike1969,fire13,leftie,bigtuna,chinnu,silence1,celos1,blackdra,alex24,gfgfif,2boobs,happy8,enolagay,sataniv1993,turner1,dylans,peugeo,sasha1994,hoppel,conno,moonshot,santa234,meister1,008800,hanako,tree123,qweras,gfitymrf,reggie31,august29,supert,joshua10,akademia,gbljhfc,zorro123,nathalia,redsox12,hfpdjl,mishmash,nokiae51,nyyankees,tu190022,strongbo,none1,not4u2no,katie2,popart,harlequi,santan,michal1,1therock,screwu,csyekmrf,olemiss1,tyrese,hoople,sunshin1,cucina,starbase,topshelf,fostex,california1,castle1,symantec,pippolo,babare,turntabl,1angela,moo123,ipvteb,gogolf,alex88,cycle1,maxie1,phase2,selhurst,furnitur,samfox,fromvermine,shaq34,gators96,captain2,delonge,tomatoe,bisous,zxcvbnma,glacius,pineapple1,cannelle,ganibal,mko09ijn,paraklast1974,hobbes12,petty43,artema,junior8,mylover,1234567890d,fatal1ty,prostreet,peruan,10020,nadya,caution1,marocas,chanel5,summer08,metal123,111lox,scrapy,thatguy,eddie666,washingto,yannis,minnesota_hp,lucky4,playboy6,naumova,azzurro,patat,dale33,pa55wd,speedster,zemanova,saraht,newto,tony22,qscesz,arkady,1oliver,death6,vkfwx046,antiflag,stangs,jzf7qf2e,brianp,fozzy,cody123,startrek1,yoda123,murciela,trabajo,lvbnhbtdf,canario,fliper,adroit,henry5,goducks,papirus,alskdj,soccer6,88mike,gogetter,tanelorn,donking,marky1,leedsu,badmofo,al1916,wetdog,akmaral,pallet,april24,killer00,nesterova,rugby123,coffee12,browseui,ralliart,paigow,calgary1,armyman,vtldtltd,frodo2,frxtgb,iambigal,benno,jaytee,2hot4you,askar,bigtee,brentwoo,palladin,eddie2,al1916w,horosho,entrada,ilovetits,venture1,dragon19,jayde,chuvak,jamesl,fzr600,brandon8,vjqvbh,snowbal,snatch1,bg6njokf,pudder,karolin,candoo,pfuflrf,satchel1,manteca,khongbiet,critter1,partridg,skyclad,bigdon,ginger69,brave1,anthony4,spinnake,chinadol,passout,cochino,nipples1,15058,lopesk,sixflags,lloo999,parkhead,breakdance,cia123,fidodido,yuitre12,fooey,artem1995,gayathri,medin,nondriversig,l12345,bravo7,happy13,kazuya,camster,alex1998,luckyy,zipcode,dizzle,boating1,opusone,newpassw,movies23,kamikazi,zapato,bart316,cowboys0,corsair1,kingshit,hotdog12,rolyat,h200svrm,qwerty4,boofer,rhtyltkm,chris999,vaz21074,simferopol,pitboss,love3,britania,tanyshka,brause,123qwerty123,abeille,moscow1,ilkaev,manut,process1,inetcfg,dragon05,fortknox,castill,rynner,mrmike,koalas,jeebus,stockpor,longman,juanpabl,caiman,roleplay,jeremi,26058,prodojo,002200,magical1,black5,bvlgari,doogie1,cbhtqa,mahina,a1s2d3f4g5h6,jblpro,usmc01,bismilah,guitar01,april9,santana1,1234aa,monkey14,sorokin,evan1,doohan,animalsex,pfqxtyjr,dimitry,catchme,chello,silverch,glock45,dogleg,litespee,nirvana9,peyton18,alydar,warhamer,iluvme,sig229,minotavr,lobzik,jack23,bushwack,onlin,football123,joshua5,federov,winter2,bigmax,fufnfrhbcnb,hfpldfnhb,1dakota,f56307,chipmonk,4nick8,praline,vbhjh123,king11,22tango,gemini12,street1,77879,doodlebu,homyak,165432,chuluthu,trixi,karlito,salom,reisen,cdtnkzxjr,pookie11,tremendo,shazaam,welcome0,00000ty,peewee51,pizzle,gilead,bydand,sarvar,upskirt,legends1,freeway1,teenfuck,ranger9,darkfire,dfymrf,hunt0802,justme1,buffy1ma,1harry,671fsa75yt,burrfoot,budster,pa437tu,jimmyp,alina2006,malacon,charlize,elway1,free12,summer02,gadina,manara,gomer1,1cassie,sanja,kisulya,money3,pujols,ford50,midiland,turga,orange6,demetriu,freakboy,orosie1,radio123,open12,vfufpby,mustek,chris33,animes,meiling,nthtvjr,jasmine9,gfdkjd,oligarh,marimar,chicago9,.kzirf,bugssgub,samuraix,jackie01,pimpjuic,macdad,cagiva,vernost,willyboy,fynjyjdf,tabby1,privet123,torres9,retype,blueroom,raven11,q12we3,alex1989,bringiton,ridered,kareltje,ow8jtcs8t,ciccia,goniners,countryb,24688642,covingto,24861793,beyblade,vikin,badboyz,wlafiga,walstib,mirand,needajob,chloes,balaton,kbpfdtnf,freyja,bond9007,gabriel12,stormbri,hollage,love4eve,fenomeno,darknite,dragstar,kyle123,milfhunter,ma123123123,samia,ghislain,enrique1,ferien12,xjy6721,natalie2,reglisse,wilson2,wesker,rosebud7,amazon1,robertr,roykeane,xtcnth,mamatata,crazyc,mikie,savanah,blowjob69,jackie2,forty1,1coffee,fhbyjxrf,bubbah,goteam,hackedit,risky1,logoff,h397pnvr,buck13,robert23,bronc,st123st,godflesh,pornog,iamking,cisco69,septiembr,dale38,zhongguo,tibbar,panther9,buffa1,bigjohn1,mypuppy,vehvfycr,april16,shippo,fire1234,green15,q123123,gungadin,steveg,olivier1,chinaski,magnoli,faithy,storm12,toadfrog,paul99,78791,august20,automati,squirtle,cheezy,positano,burbon,nunya,llebpmac,kimmi,turtle2,alan123,prokuror,violin1,durex,pussygal,visionar,trick1,chicken6,29024,plowboy,rfybreks,imbue,sasha13,wagner1,vitalogy,cfymrf,thepro,26028,gorbunov,dvdcom,letmein5,duder,fastfun,pronin,libra1,conner1,harley20,stinker1,20068,20038,amitech,syoung,dugway,18068,welcome7,jimmypag,anastaci,kafka1,pfhfnecnhf,catsss,campus100,shamal,nacho1,fire12,vikings2,brasil1,rangerover,mohamma,peresvet,14058,cocomo,aliona,14038,qwaser,vikes,cbkmdf,skyblue1,ou81234,goodlove,dfkmltvfh,108888,roamer,pinky2,static1,zxcv4321,barmen,rock22,shelby2,morgans,1junior,pasword1,logjam,fifty5,nhfrnjhbcn,chaddy,philli,nemesis2,ingenier,djkrjd,ranger3,aikman8,knothead,daddy69,love007,vsythb,ford350,tiger00,renrut,owen11,energy12,march14,alena123,robert19,carisma,orange22,murphy11,podarok,prozak,kfgeirf,wolf13,lydia1,shazza,parasha,akimov,tobbie,pilote,heather4,baster,leones,gznfxjr,megama,987654321g,bullgod,boxster1,minkey,wombats,vergil,colegiata,lincol,smoothe,pride1,carwash1,latrell,bowling3,fylhtq123,pickwick,eider,bubblebox,bunnies1,loquit,slipper1,nutsac,purina,xtutdfhf,plokiju,1qazxs,uhjpysq,zxcvbasdfg,enjoy1,1pumpkin,phantom7,mama22,swordsma,wonderbr,dogdays,milker,u23456,silvan,dfkthbr,slagelse,yeahman,twothree,boston11,wolf100,dannyg,troll1,fynjy123,ghbcnfd,bftest,ballsdeep,bobbyorr,alphasig,cccdemo,fire123,norwest,claire2,august10,lth1108,problemas,sapito,alex06,1rusty,maccom,goirish1,ohyes,bxdumb,nabila,boobear1,rabbit69,princip,alexsander,travail,chantal1,dogggy,greenpea,diablo69,alex2009,bergen09,petticoa,classe,ceilidh,vlad2011,kamakiri,lucidity,qaz321,chileno,cexfhf,99ranger,mcitra,estoppel,volvos60,carter80,webpass,temp12,touareg,fcgbhby,bubba8,sunitha,200190ru,bitch2,shadow23,iluvit,nicole0,ruben1,nikki69,butttt,shocker1,souschef,lopotok01,kantot,corsano,cfnfyf,riverat,makalu,swapna,all4u9,cdtnkfy,ntktgepbr,ronaldo99,thomasj,bmw540i,chrisw,boomba,open321,z1x2c3v4b5n6m7,gaviota,iceman44,frosya,chris100,chris24,cosette,clearwat,micael,boogyman,pussy9,camus1,chumpy,heccrbq,konoplya,chester8,scooter5,ghjgfufylf,giotto,koolkat,zero000,bonita1,ckflrbq,j1964,mandog,18n28n24a,renob,head1,shergar,ringo123,tanita,sex4free,johnny12,halberd,reddevils,biolog,dillinge,fatb0y,c00per,hyperlit,wallace2,spears1,vitamine,buheirf,sloboda,alkash,mooman,marion1,arsenal7,sunder,nokia5610,edifier,pippone,fyfnjkmtdbx,fujimo,pepsi12,kulikova,bolat,duetto,daimon,maddog01,timoshka,ezmoney,desdemon,chesters,aiden,hugues,patrick5,aikman08,robert4,roenick,nyranger,writer1,36169544,foxmulder,118801,kutter,shashank,jamjar,118811,119955,aspirina,dinkus,1sailor,nalgene,19891959,snarf,allie1,cracky,resipsa,45678912,kemerovo,19841989,netware1,alhimik,19801984,nicole123,19761977,51501984,malaka1,montella,peachfuz,jethro1,cypress1,henkie,holdon,esmith,55443322,1friend,quique,bandicoot,statistika,great123,death13,ucht36,master4,67899876,bobsmith,nikko1,jr1234,hillary1,78978978,rsturbo,lzlzdfcz,bloodlust,shadow00,skagen,bambina,yummies,88887777,91328378,matthew4,itdoes,98256518,102938475,alina2002,123123789,fubared,dannys,123456321,nikifor,suck69,newmexico,scubaman,rhbcnb,fifnfy,puffdadd,159357852,dtheyxbr,theman22,212009164,prohor,shirle,nji90okm,newmedia,goose5,roma1995,letssee,iceman11,aksana,wirenut,pimpdady,1212312121,tamplier,pelican1,domodedovo,1928374655,fiction6,duckpond,ybrecz,thwack,onetwo34,gunsmith,murphydo,fallout1,spectre1,jabberwo,jgjesq,turbo6,bobo12,redryder,blackpus,elena1971,danilova,antoin,bobo1234,bobob,bobbobbo,dean1,222222a,jesusgod,matt23,musical1,darkmage,loppol,werrew,josepha,rebel12,toshka,gadfly,hawkwood,alina12,dnomyar,sexaddict,dangit,cool23,yocrack,archimed,farouk,nhfkzkz,lindalou,111zzzzz,ghjatccjh,wethepeople,m123456789,wowsers,kbkbxrf,bulldog5,m_roesel,sissinit,yamoon6,123ewqasd,dangel,miruvor79,kaytee,falcon7,bandit11,dotnet,dannii,arsenal9,miatamx5,1trouble,strip4me,dogpile,sexyred1,rjdfktdf,google10,shortman,crystal7,awesome123,cowdog,haruka,birthday28,jitter,diabolik,boomer12,dknight,bluewate,hockey123,crm0624,blueboys,willy123,jumpup,google2,cobra777,llabesab,vicelord,hopper1,gerryber,remmah,j10e5d4,qqqqqqw,agusti,fre_ak8yj,nahlik,redrobin,scott3,epson1,dumpy,bundao,aniolek,hola123,jergens,itsasecret,maxsam,bluelight,mountai1,bongwater,1london,pepper14,freeuse,dereks,qweqw,fordgt40,rfhfdfy,raider12,hunnybun,compac,splicer,megamon,tuffgong,gymnast1,butter11,modaddy,wapbbs_1,dandelio,soccer77,ghjnbdjcnjzybt,123xyi2,fishead,x002tp00,whodaman,555aaa,oussama,brunodog,technici,pmtgjnbl,qcxdw8ry,schweden,redsox3,throbber,collecto,japan10,dbm123dm,hellhoun,tech1,deadzone,kahlan,wolf123,dethklok,xzsawq,bigguy1,cybrthc,chandle,buck01,qq123123,secreta,williams1,c32649135,delta12,flash33,123joker,spacejam,polopo,holycrap,daman1,tummybed,financia,nusrat,euroline,magicone,jimkirk,ameritec,daniel26,sevenn,topazz,kingpins,dima1991,macdog,spencer5,oi812,geoffre,music11,baffle,123569,usagi,cassiope,polla,lilcrowe,thecakeisalie,vbhjndjhtw,vthokies,oldmans,sophie01,ghoster,penny2,129834,locutus1,meesha,magik,jerry69,daddysgirl,irondesk,andrey12,jasmine123,vepsrfyn,likesdick,1accord,jetboat,grafix,tomuch,showit,protozoa,mosias98,taburetka,blaze420,esenin,anal69,zhv84kv,puissant,charles0,aishwarya,babylon6,bitter1,lenina,raleigh1,lechat,access01,kamilka,fynjy,sparkplu,daisy3112,choppe,zootsuit,1234567j,rubyrose,gorilla9,nightshade,alternativa,cghfdjxybr,snuggles1,10121v,vova1992,leonardo1,dave2,matthewd,vfhfnbr,1986mets,nobull,bacall,mexican1,juanjo,mafia1,boomer22,soylent,edwards1,jordan10,blackwid,alex86,gemini13,lunar2,dctvcjcfnm,malaki,plugger,eagles11,snafu2,1shelly,cintaku,hannah22,tbird1,maks5843,irish88,homer22,amarok,fktrcfylhjdf,lincoln2,acess,gre69kik,need4speed,hightech,core2duo,blunt1,ublhjgjybrf,dragon33,1autopas,autopas1,wwww1,15935746,daniel20,2500aa,massim,1ggggggg,96ford,hardcor1,cobra5,blackdragon,vovan_lt,orochimaru,hjlbntkb,qwertyuiop12,tallen,paradoks,frozenfish,ghjuhfvvbcn,gerri1,nuggett,camilit,doright,trans1,serena1,catch2,bkmyeh,fireston,afhvfwtdn,purple3,figure8,fuckya,scamp1,laranja,ontheoutside,louis123,yellow7,moonwalk,mercury2,tolkein,raide,amenra,a13579,dranreb,5150vh,harish,tracksta,sexking,ozzmosis,katiee,alomar,matrix19,headroom,jahlove,ringding,apollo8,132546,132613,12345672000,saretta,135798,136666,thomas7,136913,onetwothree,hockey33,calida,nefertit,bitwise,tailhook,boop4,kfgecbr,bujhmbujhm,metal69,thedark,meteoro,felicia1,house12,tinuviel,istina,vaz2105,pimp13,toolfan,nina1,tuesday2,maxmotives,lgkp500,locksley,treech,darling1,kurama,aminka,ramin,redhed,dazzler,jager1,stpiliot,cardman,rfvtym,cheeser,14314314,paramoun,samcat,plumpy,stiffie,vsajyjr,panatha,qqq777,car12345,098poi,asdzx,keegan1,furelise,kalifornia,vbhjckfd,beast123,zcfvfzkexifz,harry5,1birdie,96328i,escola,extra330,henry12,gfhfyjqz,14u2nv,max1234,templar1,1dave,02588520,catrin,pangolin,marhaba,latin1,amorcito,dave22,escape1,advance1,yasuhiro,grepw,meetme,orange01,ernes,erdna,zsergn,nautica1,justinb,soundwav,miasma,greg78,nadine1,sexmad,lovebaby,promo1,excel1,babys,dragonma,camry1,sonnenschein,farooq,wazzkaprivet,magal,katinas,elvis99,redsox24,rooney1,chiefy,peggys,aliev,pilsung,mudhen,dontdoit,dennis12,supercal,energia,ballsout,funone,claudiu,brown2,amoco,dabl1125,philos,gjdtkbntkm,servette,13571113,whizzer,nollie,13467982,upiter,12string,bluejay1,silkie,william4,kosta1,143333,connor12,sustanon,06068,corporat,ssnake,laurita,king10,tahoes,arsenal123,sapato,charless,jeanmarc,levent,algerie,marine21,jettas,winsome,dctvgbplf,1701ab,xxxp455w0rd5,lllllll1,ooooooo1,monalis,koufax32,anastasya,debugger,sarita2,jason69,ufkxjyjr,gjlcnfdf,1jerry,daniel10,balinor,sexkitten,death2,qwertasdfgzxcvb,s9te949f,vegeta1,sysman,maxxam,dimabilan,mooose,ilovetit,june23,illest,doesit,mamou,abby12,longjump,transalp,moderato,littleguy,magritte,dilnoza,hawaiiguy,winbig,nemiroff,kokaine,admira,myemail,dream2,browneyes,destiny7,dragonss,suckme1,asa123,andranik,suckem,fleshbot,dandie,timmys,scitra,timdog,hasbeen,guesss,smellyfe,arachne,deutschl,harley88,birthday27,nobody1,papasmur,home1,jonass,bunia3,epatb1,embalm,vfvekmrf,apacer,12345656,estreet,weihnachtsbaum,mrwhite,admin12,kristie1,kelebek,yoda69,socken,tima123,bayern1,fktrcfylth,tamiya,99strenght,andy01,denis2011,19delta,stokecit,aotearoa,stalker2,nicnac,conrad1,popey,agusta,bowl36,1bigfish,mossyoak,1stunner,getinnow,jessejames,gkfnjy,drako,1nissan,egor123,hotness,1hawaii,zxc123456,cantstop,1peaches,madlen,west1234,jeter1,markis,judit,attack1,artemi,silver69,153246,crazy2,green9,yoshimi,1vette,chief123,jasper2,1sierra,twentyon,drstrang,aspirant,yannic,jenna123,bongtoke,slurpy,1sugar,civic97,rusty21,shineon,james19,anna12345,wonderwoman,1kevin,karol1,kanabis,wert21,fktif6115,evil1,kakaha,54gv768,826248s,tyrone1,1winston,sugar2,falcon01,adelya,mopar440,zasxcd,leecher,kinkysex,mercede1,travka,11234567,rebon,geekboy".split(","),
41331english_wikipedia:"the,of,and,in,was,is,for,as,on,with,by,he,at,from,his,an,were,are,which,doc,https,also,or,has,had,first,one,their,its,after,new,who,they,two,her,she,been,other,when,time,during,there,into,school,more,may,years,over,only,year,most,would,world,city,some,where,between,later,three,state,such,then,national,used,made,known,under,many,university,united,while,part,season,team,these,american,than,film,second,born,south,became,states,war,through,being,including,both,before,north,high,however,people,family,early,history,album,area,them,series,against,until,since,district,county,name,work,life,group,music,following,number,company,several,four,called,played,released,career,league,game,government,house,each,based,day,same,won,use,station,club,international,town,located,population,general,college,east,found,age,march,end,september,began,home,public,church,line,june,river,member,system,place,century,band,july,york,january,october,song,august,best,former,british,party,named,held,village,show,local,november,took,service,december,built,another,major,within,along,members,five,single,due,although,small,old,left,final,large,include,building,served,president,received,games,death,february,main,third,set,children,own,order,species,park,law,air,published,road,died,book,men,women,army,often,according,education,central,country,division,english,top,included,development,french,community,among,water,play,side,list,times,near,late,form,original,different,center,power,led,students,german,moved,court,six,land,council,island,u.s.,record,million,research,art,established,award,street,military,television,given,region,support,western,production,non,political,point,cup,period,business,title,started,various,election,using,england,role,produced,become,program,works,field,total,office,class,written,association,radio,union,level,championship,director,few,force,created,department,founded,services,married,though,per,n't,site,open,act,short,society,version,royal,present,northern,worked,professional,full,returned,joined,story,france,european,currently,language,social,california,india,days,design,st.,further,round,australia,wrote,san,project,control,southern,railway,board,popular,continued,free,battle,considered,video,common,position,living,half,playing,recorded,red,post,described,average,records,special,modern,appeared,announced,areas,rock,release,elected,others,example,term,opened,similar,formed,route,census,current,schools,originally,lake,developed,race,himself,forces,addition,information,upon,province,match,event,songs,result,events,win,eastern,track,lead,teams,science,human,construction,minister,germany,awards,available,throughout,training,style,body,museum,australian,health,seven,signed,chief,eventually,appointed,sea,centre,debut,tour,points,media,light,range,character,across,features,families,largest,indian,network,less,performance,players,refer,europe,sold,festival,usually,taken,despite,designed,committee,process,return,official,episode,institute,stage,followed,performed,japanese,personal,thus,arts,space,low,months,includes,china,study,middle,magazine,leading,japan,groups,aircraft,featured,federal,civil,rights,model,coach,canadian,books,remained,eight,type,independent,completed,capital,academy,instead,kingdom,organization,countries,studies,competition,sports,size,above,section,finished,gold,involved,reported,management,systems,industry,directed,market,fourth,movement,technology,bank,ground,campaign,base,lower,sent,rather,added,provided,coast,grand,historic,valley,conference,bridge,winning,approximately,films,chinese,awarded,degree,russian,shows,native,female,replaced,municipality,square,studio,medical,data,african,successful,mid,bay,attack,previous,operations,spanish,theatre,student,republic,beginning,provide,ship,primary,owned,writing,tournament,culture,introduced,texas,related,natural,parts,governor,reached,ireland,units,senior,decided,italian,whose,higher,africa,standard,income,professor,placed,regional,los,buildings,championships,active,novel,energy,generally,interest,via,economic,previously,stated,itself,channel,below,operation,leader,traditional,trade,structure,limited,runs,prior,regular,famous,saint,navy,foreign,listed,artist,catholic,airport,results,parliament,collection,unit,officer,goal,attended,command,staff,commission,lived,location,plays,commercial,places,foundation,significant,older,medal,self,scored,companies,highway,activities,programs,wide,musical,notable,library,numerous,paris,towards,individual,allowed,plant,property,annual,contract,whom,highest,initially,required,earlier,assembly,artists,rural,seat,practice,defeated,ended,soviet,length,spent,manager,press,associated,author,issues,additional,characters,lord,zealand,policy,engine,township,noted,historical,complete,financial,religious,mission,contains,nine,recent,represented,pennsylvania,administration,opening,secretary,lines,report,executive,youth,closed,theory,writer,italy,angeles,appearance,feature,queen,launched,legal,terms,entered,issue,edition,singer,greek,majority,background,source,anti,cultural,complex,changes,recording,stadium,islands,operated,particularly,basketball,month,uses,port,castle,mostly,names,fort,selected,increased,status,earth,subsequently,pacific,cover,variety,certain,goals,remains,upper,congress,becoming,studied,irish,nature,particular,loss,caused,chart,dr.,forced,create,era,retired,material,review,rate,singles,referred,larger,individuals,shown,provides,products,speed,democratic,poland,parish,olympics,cities,themselves,temple,wing,genus,households,serving,cost,wales,stations,passed,supported,view,cases,forms,actor,male,matches,males,stars,tracks,females,administrative,median,effect,biography,train,engineering,camp,offered,chairman,houses,mainly,19th,surface,therefore,nearly,score,ancient,subject,prime,seasons,claimed,experience,specific,jewish,failed,overall,believed,plot,troops,greater,spain,consists,broadcast,heavy,increase,raised,separate,campus,1980s,appears,presented,lies,composed,recently,influence,fifth,nations,creek,references,elections,britain,double,cast,meaning,earned,carried,producer,latter,housing,brothers,attempt,article,response,border,remaining,nearby,direct,ships,value,workers,politician,academic,label,1970s,commander,rule,fellow,residents,authority,editor,transport,dutch,projects,responsible,covered,territory,flight,races,defense,tower,emperor,albums,facilities,daily,stories,assistant,managed,primarily,quality,function,proposed,distribution,conditions,prize,journal,code,vice,newspaper,corps,highly,constructed,mayor,critical,secondary,corporation,rugby,regiment,ohio,appearances,serve,allow,nation,multiple,discovered,directly,scene,levels,growth,elements,acquired,1990s,officers,physical,20th,latin,host,jersey,graduated,arrived,issued,literature,metal,estate,vote,immediately,quickly,asian,competed,extended,produce,urban,1960s,promoted,contemporary,global,formerly,appear,industrial,types,opera,ministry,soldiers,commonly,mass,formation,smaller,typically,drama,shortly,density,senate,effects,iran,polish,prominent,naval,settlement,divided,basis,republican,languages,distance,treatment,continue,product,mile,sources,footballer,format,clubs,leadership,initial,offers,operating,avenue,officially,columbia,grade,squadron,fleet,percent,farm,leaders,agreement,likely,equipment,website,mount,grew,method,transferred,intended,renamed,iron,asia,reserve,capacity,politics,widely,activity,advanced,relations,scottish,dedicated,crew,founder,episodes,lack,amount,build,efforts,concept,follows,ordered,leaves,positive,economy,entertainment,affairs,memorial,ability,illinois,communities,color,text,railroad,scientific,focus,comedy,serves,exchange,environment,cars,direction,organized,firm,description,agency,analysis,purpose,destroyed,reception,planned,revealed,infantry,architecture,growing,featuring,household,candidate,removed,situated,models,knowledge,solo,technical,organizations,assigned,conducted,participated,largely,purchased,register,gained,combined,headquarters,adopted,potential,protection,scale,approach,spread,independence,mountains,titled,geography,applied,safety,mixed,accepted,continues,captured,rail,defeat,principal,recognized,lieutenant,mentioned,semi,owner,joint,liberal,actress,traffic,creation,basic,notes,unique,supreme,declared,simply,plants,sales,massachusetts,designated,parties,jazz,compared,becomes,resources,titles,concert,learning,remain,teaching,versions,content,alongside,revolution,sons,block,premier,impact,champions,districts,generation,estimated,volume,image,sites,account,roles,sport,quarter,providing,zone,yard,scoring,classes,presence,performances,representatives,hosted,split,taught,origin,olympic,claims,critics,facility,occurred,suffered,municipal,damage,defined,resulted,respectively,expanded,platform,draft,opposition,expected,educational,ontario,climate,reports,atlantic,surrounding,performing,reduced,ranked,allows,birth,nominated,younger,newly,kong,positions,theater,philadelphia,heritage,finals,disease,sixth,laws,reviews,constitution,tradition,swedish,theme,fiction,rome,medicine,trains,resulting,existing,deputy,environmental,labour,classical,develop,fans,granted,receive,alternative,begins,nuclear,fame,buried,connected,identified,palace,falls,letters,combat,sciences,effort,villages,inspired,regions,towns,conservative,chosen,animals,labor,attacks,materials,yards,steel,representative,orchestra,peak,entitled,officials,returning,reference,northwest,imperial,convention,examples,ocean,publication,painting,subsequent,frequently,religion,brigade,fully,sides,acts,cemetery,relatively,oldest,suggested,succeeded,achieved,application,programme,cells,votes,promotion,graduate,armed,supply,flying,communist,figures,literary,netherlands,korea,worldwide,citizens,1950s,faculty,draw,stock,seats,occupied,methods,unknown,articles,claim,holds,authorities,audience,sweden,interview,obtained,covers,settled,transfer,marked,allowing,funding,challenge,southeast,unlike,crown,rise,portion,transportation,sector,phase,properties,edge,tropical,standards,institutions,philosophy,legislative,hills,brand,fund,conflict,unable,founding,refused,attempts,metres,permanent,starring,applications,creating,effective,aired,extensive,employed,enemy,expansion,billboard,rank,battalion,multi,vehicle,fought,alliance,category,perform,federation,poetry,bronze,bands,entry,vehicles,bureau,maximum,billion,trees,intelligence,greatest,screen,refers,commissioned,gallery,injury,confirmed,setting,treaty,adult,americans,broadcasting,supporting,pilot,mobile,writers,programming,existence,squad,minnesota,copies,korean,provincial,sets,defence,offices,agricultural,internal,core,northeast,retirement,factory,actions,prevent,communications,ending,weekly,containing,functions,attempted,interior,weight,bowl,recognition,incorporated,increasing,ultimately,documentary,derived,attacked,lyrics,mexican,external,churches,centuries,metropolitan,selling,opposed,personnel,mill,visited,presidential,roads,pieces,norwegian,controlled,18th,rear,influenced,wrestling,weapons,launch,composer,locations,developing,circuit,specifically,studios,shared,canal,wisconsin,publishing,approved,domestic,consisted,determined,comic,establishment,exhibition,southwest,fuel,electronic,cape,converted,educated,melbourne,hits,wins,producing,norway,slightly,occur,surname,identity,represent,constituency,funds,proved,links,structures,athletic,birds,contest,users,poet,institution,display,receiving,rare,contained,guns,motion,piano,temperature,publications,passenger,contributed,toward,cathedral,inhabitants,architect,exist,athletics,muslim,courses,abandoned,signal,successfully,disambiguation,tennessee,dynasty,heavily,maryland,jews,representing,budget,weather,missouri,introduction,faced,pair,chapel,reform,height,vietnam,occurs,motor,cambridge,lands,focused,sought,patients,shape,invasion,chemical,importance,communication,selection,regarding,homes,voivodeship,maintained,borough,failure,aged,passing,agriculture,oregon,teachers,flow,philippines,trail,seventh,portuguese,resistance,reaching,negative,fashion,scheduled,downtown,universities,trained,skills,scenes,views,notably,typical,incident,candidates,engines,decades,composition,commune,chain,inc.,austria,sale,values,employees,chamber,regarded,winners,registered,task,investment,colonial,swiss,user,entirely,flag,stores,closely,entrance,laid,journalist,coal,equal,causes,turkish,quebec,techniques,promote,junction,easily,dates,kentucky,singapore,residence,violence,advance,survey,humans,expressed,passes,streets,distinguished,qualified,folk,establish,egypt,artillery,visual,improved,actual,finishing,medium,protein,switzerland,productions,operate,poverty,neighborhood,organisation,consisting,consecutive,sections,partnership,extension,reaction,factor,costs,bodies,device,ethnic,racial,flat,objects,chapter,improve,musicians,courts,controversy,membership,merged,wars,expedition,interests,arab,comics,gain,describes,mining,bachelor,crisis,joining,decade,1930s,distributed,habitat,routes,arena,cycle,divisions,briefly,vocals,directors,degrees,object,recordings,installed,adjacent,demand,voted,causing,businesses,ruled,grounds,starred,drawn,opposite,stands,formal,operates,persons,counties,compete,wave,israeli,ncaa,resigned,brief,greece,combination,demographics,historian,contain,commonwealth,musician,collected,argued,louisiana,session,cabinet,parliamentary,electoral,loan,profit,regularly,conservation,islamic,purchase,17th,charts,residential,earliest,designs,paintings,survived,moth,items,goods,grey,anniversary,criticism,images,discovery,observed,underground,progress,additionally,participate,thousands,reduce,elementary,owners,stating,iraq,resolution,capture,tank,rooms,hollywood,finance,queensland,reign,maintain,iowa,landing,broad,outstanding,circle,path,manufacturing,assistance,sequence,gmina,crossing,leads,universal,shaped,kings,attached,medieval,ages,metro,colony,affected,scholars,oklahoma,coastal,soundtrack,painted,attend,definition,meanwhile,purposes,trophy,require,marketing,popularity,cable,mathematics,mississippi,represents,scheme,appeal,distinct,factors,acid,subjects,roughly,terminal,economics,senator,diocese,prix,contrast,argentina,czech,wings,relief,stages,duties,16th,novels,accused,whilst,equivalent,charged,measure,documents,couples,request,danish,defensive,guide,devices,statistics,credited,tries,passengers,allied,frame,puerto,peninsula,concluded,instruments,wounded,differences,associate,forests,afterwards,replace,requirements,aviation,solution,offensive,ownership,inner,legislation,hungarian,contributions,actors,translated,denmark,steam,depending,aspects,assumed,injured,severe,admitted,determine,shore,technique,arrival,measures,translation,debuted,delivered,returns,rejected,separated,visitors,damaged,storage,accompanied,markets,industries,losses,gulf,charter,strategy,corporate,socialist,somewhat,significantly,physics,mounted,satellite,experienced,constant,relative,pattern,restored,belgium,connecticut,partners,harvard,retained,networks,protected,mode,artistic,parallel,collaboration,debate,involving,journey,linked,salt,authors,components,context,occupation,requires,occasionally,policies,tamil,ottoman,revolutionary,hungary,poem,versus,gardens,amongst,audio,makeup,frequency,meters,orthodox,continuing,suggests,legislature,coalition,guitarist,eighth,classification,practices,soil,tokyo,instance,limit,coverage,considerable,ranking,colleges,cavalry,centers,daughters,twin,equipped,broadway,narrow,hosts,rates,domain,boundary,arranged,12th,whereas,brazilian,forming,rating,strategic,competitions,trading,covering,baltimore,commissioner,infrastructure,origins,replacement,praised,disc,collections,expression,ukraine,driven,edited,austrian,solar,ensure,premiered,successor,wooden,operational,hispanic,concerns,rapid,prisoners,childhood,meets,influential,tunnel,employment,tribe,qualifying,adapted,temporary,celebrated,appearing,increasingly,depression,adults,cinema,entering,laboratory,script,flows,romania,accounts,fictional,pittsburgh,achieve,monastery,franchise,formally,tools,newspapers,revival,sponsored,processes,vienna,springs,missions,classified,13th,annually,branches,lakes,gender,manner,advertising,normally,maintenance,adding,characteristics,integrated,decline,modified,strongly,critic,victims,malaysia,arkansas,nazi,restoration,powered,monument,hundreds,depth,15th,controversial,admiral,criticized,brick,honorary,initiative,output,visiting,birmingham,progressive,existed,carbon,1920s,credits,colour,rising,hence,defeating,superior,filmed,listing,column,surrounded,orleans,principles,territories,struck,participation,indonesia,movements,index,commerce,conduct,constitutional,spiritual,ambassador,vocal,completion,edinburgh,residing,tourism,finland,bears,medals,resident,themes,visible,indigenous,involvement,basin,electrical,ukrainian,concerts,boats,styles,processing,rival,drawing,vessels,experimental,declined,touring,supporters,compilation,coaching,cited,dated,roots,string,explained,transit,traditionally,poems,minimum,representation,14th,releases,effectively,architectural,triple,indicated,greatly,elevation,clinical,printed,10th,proposal,peaked,producers,romanized,rapidly,stream,innings,meetings,counter,householder,honour,lasted,agencies,document,exists,surviving,experiences,honors,landscape,hurricane,harbor,panel,competing,profile,vessel,farmers,lists,revenue,exception,customers,11th,participants,wildlife,utah,bible,gradually,preserved,replacing,symphony,begun,longest,siege,provinces,mechanical,genre,transmission,agents,executed,videos,benefits,funded,rated,instrumental,ninth,similarly,dominated,destruction,passage,technologies,thereafter,outer,facing,affiliated,opportunities,instrument,governments,scholar,evolution,channels,shares,sessions,widespread,occasions,engineers,scientists,signing,battery,competitive,alleged,eliminated,supplies,judges,hampshire,regime,portrayed,penalty,taiwan,denied,submarine,scholarship,substantial,transition,victorian,http,nevertheless,filed,supports,continental,tribes,ratio,doubles,useful,honours,blocks,principle,retail,departure,ranks,patrol,yorkshire,vancouver,inter,extent,afghanistan,strip,railways,component,organ,symbol,categories,encouraged,abroad,civilian,periods,traveled,writes,struggle,immediate,recommended,adaptation,egyptian,graduating,assault,drums,nomination,historically,voting,allies,detailed,achievement,percentage,arabic,assist,frequent,toured,apply,and/or,intersection,maine,touchdown,throne,produces,contribution,emerged,obtain,archbishop,seek,researchers,remainder,populations,clan,finnish,overseas,fifa,licensed,chemistry,festivals,mediterranean,injuries,animated,seeking,publisher,volumes,limits,venue,jerusalem,generated,trials,islam,youngest,ruling,glasgow,germans,songwriter,persian,municipalities,donated,viewed,belgian,cooperation,posted,tech,dual,volunteer,settlers,commanded,claiming,approval,delhi,usage,terminus,partly,electricity,locally,editions,premiere,absence,belief,traditions,statue,indicate,manor,stable,attributed,possession,managing,viewers,chile,overview,seed,regulations,essential,minority,cargo,segment,endemic,forum,deaths,monthly,playoffs,erected,practical,machines,suburb,relation,mrs.,descent,indoor,continuous,characterized,solutions,caribbean,rebuilt,serbian,summary,contested,psychology,pitch,attending,muhammad,tenure,drivers,diameter,assets,venture,punk,airlines,concentration,athletes,volunteers,pages,mines,influences,sculpture,protest,ferry,behalf,drafted,apparent,furthermore,ranging,romanian,democracy,lanka,significance,linear,d.c.,certified,voters,recovered,tours,demolished,boundaries,assisted,identify,grades,elsewhere,mechanism,1940s,reportedly,aimed,conversion,suspended,photography,departments,beijing,locomotives,publicly,dispute,magazines,resort,conventional,platforms,internationally,capita,settlements,dramatic,derby,establishing,involves,statistical,implementation,immigrants,exposed,diverse,layer,vast,ceased,connections,belonged,interstate,uefa,organised,abuse,deployed,cattle,partially,filming,mainstream,reduction,automatic,rarely,subsidiary,decides,merger,comprehensive,displayed,amendment,guinea,exclusively,manhattan,concerning,commons,radical,serbia,baptist,buses,initiated,portrait,harbour,choir,citizen,sole,unsuccessful,manufactured,enforcement,connecting,increases,patterns,sacred,muslims,clothing,hindu,unincorporated,sentenced,advisory,tanks,campaigns,fled,repeated,remote,rebellion,implemented,texts,fitted,tribute,writings,sufficient,ministers,21st,devoted,jurisdiction,coaches,interpretation,pole,businessman,peru,sporting,prices,cuba,relocated,opponent,arrangement,elite,manufacturer,responded,suitable,distinction,calendar,dominant,tourist,earning,prefecture,ties,preparation,anglo,pursue,worship,archaeological,chancellor,bangladesh,scores,traded,lowest,horror,outdoor,biology,commented,specialized,loop,arriving,farming,housed,historians,'the,patent,pupils,christianity,opponents,athens,northwestern,maps,promoting,reveals,flights,exclusive,lions,norfolk,hebrew,extensively,eldest,shops,acquisition,virtual,renowned,margin,ongoing,essentially,iranian,alternate,sailed,reporting,conclusion,originated,temperatures,exposure,secured,landed,rifle,framework,identical,martial,focuses,topics,ballet,fighters,belonging,wealthy,negotiations,evolved,bases,oriented,acres,democrat,heights,restricted,vary,graduation,aftermath,chess,illness,participating,vertical,collective,immigration,demonstrated,leaf,completing,organic,missile,leeds,eligible,grammar,confederate,improvement,congressional,wealth,cincinnati,spaces,indicates,corresponding,reaches,repair,isolated,taxes,congregation,ratings,leagues,diplomatic,submitted,winds,awareness,photographs,maritime,nigeria,accessible,animation,restaurants,philippine,inaugural,dismissed,armenian,illustrated,reservoir,speakers,programmes,resource,genetic,interviews,camps,regulation,computers,preferred,travelled,comparison,distinctive,recreation,requested,southeastern,dependent,brisbane,breeding,playoff,expand,bonus,gauge,departed,qualification,inspiration,shipping,slaves,variations,shield,theories,munich,recognised,emphasis,favour,variable,seeds,undergraduate,territorial,intellectual,qualify,mini,banned,pointed,democrats,assessment,judicial,examination,attempting,objective,partial,characteristic,hardware,pradesh,execution,ottawa,metre,drum,exhibitions,withdrew,attendance,phrase,journalism,logo,measured,error,christians,trio,protestant,theology,respective,atmosphere,buddhist,substitute,curriculum,fundamental,outbreak,rabbi,intermediate,designation,globe,liberation,simultaneously,diseases,experiments,locomotive,difficulties,mainland,nepal,relegated,contributing,database,developments,veteran,carries,ranges,instruction,lodge,protests,obama,newcastle,experiment,physician,describing,challenges,corruption,delaware,adventures,ensemble,succession,renaissance,tenth,altitude,receives,approached,crosses,syria,croatia,warsaw,professionals,improvements,worn,airline,compound,permitted,preservation,reducing,printing,scientist,activist,comprises,sized,societies,enters,ruler,gospel,earthquake,extend,autonomous,croatian,serial,decorated,relevant,ideal,grows,grass,tier,towers,wider,welfare,columns,alumni,descendants,interface,reserves,banking,colonies,manufacturers,magnetic,closure,pitched,vocalist,preserve,enrolled,cancelled,equation,2000s,nickname,bulgaria,heroes,exile,mathematical,demands,input,structural,tube,stem,approaches,argentine,axis,manuscript,inherited,depicted,targets,visits,veterans,regard,removal,efficiency,organisations,concepts,lebanon,manga,petersburg,rally,supplied,amounts,yale,tournaments,broadcasts,signals,pilots,azerbaijan,architects,enzyme,literacy,declaration,placing,batting,incumbent,bulgarian,consistent,poll,defended,landmark,southwestern,raid,resignation,travels,casualties,prestigious,namely,aims,recipient,warfare,readers,collapse,coached,controls,volleyball,coup,lesser,verse,pairs,exhibited,proteins,molecular,abilities,integration,consist,aspect,advocate,administered,governing,hospitals,commenced,coins,lords,variation,resumed,canton,artificial,elevated,palm,difficulty,civic,efficient,northeastern,inducted,radiation,affiliate,boards,stakes,byzantine,consumption,freight,interaction,oblast,numbered,seminary,contracts,extinct,predecessor,bearing,cultures,functional,neighboring,revised,cylinder,grants,narrative,reforms,athlete,tales,reflect,presidency,compositions,specialist,cricketer,founders,sequel,widow,disbanded,associations,backed,thereby,pitcher,commanding,boulevard,singers,crops,militia,reviewed,centres,waves,consequently,fortress,tributary,portions,bombing,excellence,nest,payment,mars,plaza,unity,victories,scotia,farms,nominations,variant,attacking,suspension,installation,graphics,estates,comments,acoustic,destination,venues,surrender,retreat,libraries,quarterback,customs,berkeley,collaborated,gathered,syndrome,dialogue,recruited,shanghai,neighbouring,psychological,saudi,moderate,exhibit,innovation,depot,binding,brunswick,situations,certificate,actively,shakespeare,editorial,presentation,ports,relay,nationalist,methodist,archives,experts,maintains,collegiate,bishops,maintaining,temporarily,embassy,essex,wellington,connects,reformed,bengal,recalled,inches,doctrine,deemed,legendary,reconstruction,statements,palestinian,meter,achievements,riders,interchange,spots,auto,accurate,chorus,dissolved,missionary,thai,operators,e.g.,generations,failing,delayed,cork,nashville,perceived,venezuela,cult,emerging,tomb,abolished,documented,gaining,canyon,episcopal,stored,assists,compiled,kerala,kilometers,mosque,grammy,theorem,unions,segments,glacier,arrives,theatrical,circulation,conferences,chapters,displays,circular,authored,conductor,fewer,dimensional,nationwide,liga,yugoslavia,peer,vietnamese,fellowship,armies,regardless,relating,dynamic,politicians,mixture,serie,somerset,imprisoned,posts,beliefs,beta,layout,independently,electronics,provisions,fastest,logic,headquartered,creates,challenged,beaten,appeals,plains,protocol,graphic,accommodate,iraqi,midfielder,span,commentary,freestyle,reflected,palestine,lighting,burial,virtually,backing,prague,tribal,heir,identification,prototype,criteria,dame,arch,tissue,footage,extending,procedures,predominantly,updated,rhythm,preliminary,cafe,disorder,prevented,suburbs,discontinued,retiring,oral,followers,extends,massacre,journalists,conquest,larvae,pronounced,behaviour,diversity,sustained,addressed,geographic,restrictions,voiced,milwaukee,dialect,quoted,grid,nationally,nearest,roster,twentieth,separation,indies,manages,citing,intervention,guidance,severely,migration,artwork,focusing,rivals,trustees,varied,enabled,committees,centered,skating,slavery,cardinals,forcing,tasks,auckland,youtube,argues,colored,advisor,mumbai,requiring,theological,registration,refugees,nineteenth,survivors,runners,colleagues,priests,contribute,variants,workshop,concentrated,creator,lectures,temples,exploration,requirement,interactive,navigation,companion,perth,allegedly,releasing,citizenship,observation,stationed,ph.d.,sheep,breed,discovers,encourage,kilometres,journals,performers,isle,saskatchewan,hybrid,hotels,lancashire,dubbed,airfield,anchor,suburban,theoretical,sussex,anglican,stockholm,permanently,upcoming,privately,receiver,optical,highways,congo,colours,aggregate,authorized,repeatedly,varies,fluid,innovative,transformed,praise,convoy,demanded,discography,attraction,export,audiences,ordained,enlisted,occasional,westminster,syrian,heavyweight,bosnia,consultant,eventual,improving,aires,wickets,epic,reactions,scandal,i.e.,discrimination,buenos,patron,investors,conjunction,testament,construct,encountered,celebrity,expanding,georgian,brands,retain,underwent,algorithm,foods,provision,orbit,transformation,associates,tactical,compact,varieties,stability,refuge,gathering,moreover,manila,configuration,gameplay,discipline,entity,comprising,composers,skill,monitoring,ruins,museums,sustainable,aerial,altered,codes,voyage,friedrich,conflicts,storyline,travelling,conducting,merit,indicating,referendum,currency,encounter,particles,automobile,workshops,acclaimed,inhabited,doctorate,cuban,phenomenon,dome,enrollment,tobacco,governance,trend,equally,manufacture,hydrogen,grande,compensation,download,pianist,grain,shifted,neutral,evaluation,define,cycling,seized,array,relatives,motors,firms,varying,automatically,restore,nicknamed,findings,governed,investigate,manitoba,administrator,vital,integral,indonesian,confusion,publishers,enable,geographical,inland,naming,civilians,reconnaissance,indianapolis,lecturer,deer,tourists,exterior,rhode,bassist,symbols,scope,ammunition,yuan,poets,punjab,nursing,cent,developers,estimates,presbyterian,nasa,holdings,generate,renewed,computing,cyprus,arabia,duration,compounds,gastropod,permit,valid,touchdowns,facade,interactions,mineral,practiced,allegations,consequence,goalkeeper,baronet,copyright,uprising,carved,targeted,competitors,mentions,sanctuary,fees,pursued,tampa,chronicle,capabilities,specified,specimens,toll,accounting,limestone,staged,upgraded,philosophical,streams,guild,revolt,rainfall,supporter,princeton,terrain,hometown,probability,assembled,paulo,surrey,voltage,developer,destroyer,floors,lineup,curve,prevention,potentially,onwards,trips,imposed,hosting,striking,strict,admission,apartments,solely,utility,proceeded,observations,euro,incidents,vinyl,profession,haven,distant,expelled,rivalry,runway,torpedo,zones,shrine,dimensions,investigations,lithuania,idaho,pursuit,copenhagen,considerably,locality,wireless,decrease,genes,thermal,deposits,hindi,habitats,withdrawn,biblical,monuments,casting,plateau,thesis,managers,flooding,assassination,acknowledged,interim,inscription,guided,pastor,finale,insects,transported,activists,marshal,intensity,airing,cardiff,proposals,lifestyle,prey,herald,capitol,aboriginal,measuring,lasting,interpreted,occurring,desired,drawings,healthcare,panels,elimination,oslo,ghana,blog,sabha,intent,superintendent,governors,bankruptcy,p.m.,equity,disk,layers,slovenia,prussia,quartet,mechanics,graduates,politically,monks,screenplay,nato,absorbed,topped,petition,bold,morocco,exhibits,canterbury,publish,rankings,crater,dominican,enhanced,planes,lutheran,governmental,joins,collecting,brussels,unified,streak,strategies,flagship,surfaces,oval,archive,etymology,imprisonment,instructor,noting,remix,opposing,servant,rotation,width,trans,maker,synthesis,excess,tactics,snail,ltd.,lighthouse,sequences,cornwall,plantation,mythology,performs,foundations,populated,horizontal,speedway,activated,performer,diving,conceived,edmonton,subtropical,environments,prompted,semifinals,caps,bulk,treasury,recreational,telegraph,continent,portraits,relegation,catholics,graph,velocity,rulers,endangered,secular,observer,learns,inquiry,idol,dictionary,certification,estimate,cluster,armenia,observatory,revived,nadu,consumers,hypothesis,manuscripts,contents,arguments,editing,trails,arctic,essays,belfast,acquire,promotional,undertaken,corridor,proceedings,antarctic,millennium,labels,delegates,vegetation,acclaim,directing,substance,outcome,diploma,philosopher,malta,albanian,vicinity,degc,legends,regiments,consent,terrorist,scattered,presidents,gravity,orientation,deployment,duchy,refuses,estonia,crowned,separately,renovation,rises,wilderness,objectives,agreements,empress,slopes,inclusion,equality,decree,ballot,criticised,rochester,recurring,struggled,disabled,henri,poles,prussian,convert,bacteria,poorly,sudan,geological,wyoming,consistently,minimal,withdrawal,interviewed,proximity,repairs,initiatives,pakistani,republicans,propaganda,viii,abstract,commercially,availability,mechanisms,naples,discussions,underlying,lens,proclaimed,advised,spelling,auxiliary,attract,lithuanian,editors,o'brien,accordance,measurement,novelist,ussr,formats,councils,contestants,indie,facebook,parishes,barrier,battalions,sponsor,consulting,terrorism,implement,uganda,crucial,unclear,notion,distinguish,collector,attractions,filipino,ecology,investments,capability,renovated,iceland,albania,accredited,scouts,armor,sculptor,cognitive,errors,gaming,condemned,successive,consolidated,baroque,entries,regulatory,reserved,treasurer,variables,arose,technological,rounded,provider,rhine,agrees,accuracy,genera,decreased,frankfurt,ecuador,edges,particle,rendered,calculated,careers,faction,rifles,americas,gaelic,portsmouth,resides,merchants,fiscal,premises,coin,draws,presenter,acceptance,ceremonies,pollution,consensus,membrane,brigadier,nonetheless,genres,supervision,predicted,magnitude,finite,differ,ancestry,vale,delegation,removing,proceeds,placement,emigrated,siblings,molecules,payments,considers,demonstration,proportion,newer,valve,achieving,confederation,continuously,luxury,notre,introducing,coordinates,charitable,squadrons,disorders,geometry,winnipeg,ulster,loans,longtime,receptor,preceding,belgrade,mandate,wrestler,neighbourhood,factories,buddhism,imported,sectors,protagonist,steep,elaborate,prohibited,artifacts,prizes,pupil,cooperative,sovereign,subspecies,carriers,allmusic,nationals,settings,autobiography,neighborhoods,analog,facilitate,voluntary,jointly,newfoundland,organizing,raids,exercises,nobel,machinery,baltic,crop,granite,dense,websites,mandatory,seeks,surrendered,anthology,comedian,bombs,slot,synopsis,critically,arcade,marking,equations,halls,indo,inaugurated,embarked,speeds,clause,invention,premiership,likewise,presenting,demonstrate,designers,organize,examined,km/h,bavaria,troop,referee,detection,zurich,prairie,rapper,wingspan,eurovision,luxembourg,slovakia,inception,disputed,mammals,entrepreneur,makers,evangelical,yield,clergy,trademark,defunct,allocated,depicting,volcanic,batted,conquered,sculptures,providers,reflects,armoured,locals,walt,herzegovina,contracted,entities,sponsorship,prominence,flowing,ethiopia,marketed,corporations,withdraw,carnegie,induced,investigated,portfolio,flowering,opinions,viewing,classroom,donations,bounded,perception,leicester,fruits,charleston,academics,statute,complaints,smallest,deceased,petroleum,resolved,commanders,algebra,southampton,modes,cultivation,transmitter,spelled,obtaining,sizes,acre,pageant,bats,abbreviated,correspondence,barracks,feast,tackles,raja,derives,geology,disputes,translations,counted,constantinople,seating,macedonia,preventing,accommodation,homeland,explored,invaded,provisional,transform,sphere,unsuccessfully,missionaries,conservatives,highlights,traces,organisms,openly,dancers,fossils,absent,monarchy,combining,lanes,stint,dynamics,chains,missiles,screening,module,tribune,generating,miners,nottingham,seoul,unofficial,owing,linking,rehabilitation,citation,louisville,mollusk,depicts,differential,zimbabwe,kosovo,recommendations,responses,pottery,scorer,aided,exceptions,dialects,telecommunications,defines,elderly,lunar,coupled,flown,25th,espn,formula_1,bordered,fragments,guidelines,gymnasium,valued,complexity,papal,presumably,maternal,challenging,reunited,advancing,comprised,uncertain,favorable,twelfth,correspondent,nobility,livestock,expressway,chilean,tide,researcher,emissions,profits,lengths,accompanying,witnessed,itunes,drainage,slope,reinforced,feminist,sanskrit,develops,physicians,outlets,isbn,coordinator,averaged,termed,occupy,diagnosed,yearly,humanitarian,prospect,spacecraft,stems,enacted,linux,ancestors,karnataka,constitute,immigrant,thriller,ecclesiastical,generals,celebrations,enhance,heating,advocated,evident,advances,bombardment,watershed,shuttle,wicket,twitter,adds,branded,teaches,schemes,pension,advocacy,conservatory,cairo,varsity,freshwater,providence,seemingly,shells,cuisine,specially,peaks,intensive,publishes,trilogy,skilled,nacional,unemployment,destinations,parameters,verses,trafficking,determination,infinite,savings,alignment,linguistic,countryside,dissolution,measurements,advantages,licence,subfamily,highlands,modest,regent,algeria,crest,teachings,knockout,brewery,combine,conventions,descended,chassis,primitive,fiji,explicitly,cumberland,uruguay,laboratories,bypass,elect,informal,preceded,holocaust,tackle,minneapolis,quantity,securities,console,doctoral,religions,commissioners,expertise,unveiled,precise,diplomat,standings,infant,disciplines,sicily,endorsed,systematic,charted,armored,mild,lateral,townships,hurling,prolific,invested,wartime,compatible,galleries,moist,battlefield,decoration,convent,tubes,terrestrial,nominee,requests,delegate,leased,dubai,polar,applying,addresses,munster,sings,commercials,teamed,dances,eleventh,midland,cedar,flee,sandstone,snails,inspection,divide,asset,themed,comparable,paramount,dairy,archaeology,intact,institutes,rectangular,instances,phases,reflecting,substantially,applies,vacant,lacked,copa,coloured,encounters,sponsors,encoded,possess,revenues,ucla,chaired,a.m.,enabling,playwright,stoke,sociology,tibetan,frames,motto,financing,illustrations,gibraltar,chateau,bolivia,transmitted,enclosed,persuaded,urged,folded,suffolk,regulated,bros.,submarines,myth,oriental,malaysian,effectiveness,narrowly,acute,sunk,replied,utilized,tasmania,consortium,quantities,gains,parkway,enlarged,sided,employers,adequate,accordingly,assumption,ballad,mascot,distances,peaking,saxony,projected,affiliation,limitations,metals,guatemala,scots,theaters,kindergarten,verb,employer,differs,discharge,controller,seasonal,marching,guru,campuses,avoided,vatican,maori,excessive,chartered,modifications,caves,monetary,sacramento,mixing,institutional,celebrities,irrigation,shapes,broadcaster,anthem,attributes,demolition,offshore,specification,surveys,yugoslav,contributor,auditorium,lebanese,capturing,airports,classrooms,chennai,paths,tendency,determining,lacking,upgrade,sailors,detected,kingdoms,sovereignty,freely,decorative,momentum,scholarly,georges,gandhi,speculation,transactions,undertook,interact,similarities,cove,teammate,constituted,painters,tends,madagascar,partnerships,afghan,personalities,attained,rebounds,masses,synagogue,reopened,asylum,embedded,imaging,catalogue,defenders,taxonomy,fiber,afterward,appealed,communists,lisbon,rica,judaism,adviser,batsman,ecological,commands,lgbt,cooling,accessed,wards,shiva,employs,thirds,scenic,worcester,tallest,contestant,humanities,economist,textile,constituencies,motorway,tram,percussion,cloth,leisure,1880s,baden,flags,resemble,riots,coined,sitcom,composite,implies,daytime,tanzania,penalties,optional,competitor,excluded,steering,reversed,autonomy,reviewer,breakthrough,professionally,damages,pomeranian,deputies,valleys,ventures,highlighted,electorate,mapping,shortened,executives,tertiary,specimen,launching,bibliography,sank,pursuing,binary,descendant,marched,natives,ideology,turks,adolf,archdiocese,tribunal,exceptional,nigerian,preference,fails,loading,comeback,vacuum,favored,alter,remnants,consecrated,spectators,trends,patriarch,feedback,paved,sentences,councillor,astronomy,advocates,broader,commentator,commissions,identifying,revealing,theatres,incomplete,enables,constituent,reformation,tract,haiti,atmospheric,screened,explosive,czechoslovakia,acids,symbolic,subdivision,liberals,incorporate,challenger,erie,filmmaker,laps,kazakhstan,organizational,evolutionary,chemicals,dedication,riverside,fauna,moths,maharashtra,annexed,gen.,resembles,underwater,garnered,timeline,remake,suited,educator,hectares,automotive,feared,latvia,finalist,narrator,portable,airways,plaque,designing,villagers,licensing,flank,statues,struggles,deutsche,migrated,cellular,jacksonville,wimbledon,defining,highlight,preparatory,planets,cologne,employ,frequencies,detachment,readily,libya,resign,halt,helicopters,reef,landmarks,collaborative,irregular,retaining,helsinki,folklore,weakened,viscount,interred,professors,memorable,mega,repertoire,rowing,dorsal,albeit,progressed,operative,coronation,liner,telugu,domains,philharmonic,detect,bengali,synthetic,tensions,atlas,dramatically,paralympics,xbox,shire,kiev,lengthy,sued,notorious,seas,screenwriter,transfers,aquatic,pioneers,unesco,radius,abundant,tunnels,syndicated,inventor,accreditation,janeiro,exeter,ceremonial,omaha,cadet,predators,resided,prose,slavic,precision,abbot,deity,engaging,cambodia,estonian,compliance,demonstrations,protesters,reactor,commodore,successes,chronicles,mare,extant,listings,minerals,tonnes,parody,cultivated,traders,pioneering,supplement,slovak,preparations,collision,partnered,vocational,atoms,malayalam,welcomed,documentation,curved,functioning,presently,formations,incorporates,nazis,botanical,nucleus,ethical,greeks,metric,automated,whereby,stance,europeans,duet,disability,purchasing,email,telescope,displaced,sodium,comparative,processor,inning,precipitation,aesthetic,import,coordination,feud,alternatively,mobility,tibet,regained,succeeding,hierarchy,apostolic,catalog,reproduction,inscriptions,vicar,clusters,posthumously,rican,loosely,additions,photographic,nowadays,selective,derivative,keyboards,guides,collectively,affecting,combines,operas,networking,decisive,terminated,continuity,finishes,ancestor,consul,heated,simulation,leipzig,incorporating,georgetown,formula_2,circa,forestry,portrayal,councillors,advancement,complained,forewings,confined,transaction,definitions,reduces,televised,1890s,rapids,phenomena,belarus,alps,landscapes,quarterly,specifications,commemorate,continuation,isolation,antenna,downstream,patents,ensuing,tended,saga,lifelong,columnist,labeled,gymnastics,papua,anticipated,demise,encompasses,madras,antarctica,interval,icon,rams,midlands,ingredients,priory,strengthen,rouge,explicit,gaza,aging,securing,anthropology,listeners,adaptations,underway,vista,malay,fortified,lightweight,violations,concerto,financed,jesuit,observers,trustee,descriptions,nordic,resistant,opted,accepts,prohibition,andhra,inflation,negro,wholly,imagery,spur,instructed,gloucester,cycles,middlesex,destroyers,statewide,evacuated,hyderabad,peasants,mice,shipyard,coordinate,pitching,colombian,exploring,numbering,compression,countess,hiatus,exceed,raced,archipelago,traits,soils,o'connor,vowel,android,facto,angola,amino,holders,logistics,circuits,emergence,kuwait,partition,emeritus,outcomes,submission,promotes,barack,negotiated,loaned,stripped,50th,excavations,treatments,fierce,participant,exports,decommissioned,cameo,remarked,residences,fuselage,mound,undergo,quarry,node,midwest,specializing,occupies,etc.,showcase,molecule,offs,modules,salon,exposition,revision,peers,positioned,hunters,competes,algorithms,reside,zagreb,calcium,uranium,silicon,airs,counterpart,outlet,collectors,sufficiently,canberra,inmates,anatomy,ensuring,curves,aviv,firearms,basque,volcano,thrust,sheikh,extensions,installations,aluminum,darker,sacked,emphasized,aligned,asserted,pseudonym,spanning,decorations,eighteenth,orbital,spatial,subdivided,notation,decay,macedonian,amended,declining,cyclist,feat,unusually,commuter,birthplace,latitude,activation,overhead,30th,finalists,whites,encyclopedia,tenor,qatar,survives,complement,concentrations,uncommon,astronomical,bangalore,pius,genome,memoir,recruit,prosecutor,modification,paired,container,basilica,arlington,displacement,germanic,mongolia,proportional,debates,matched,calcutta,rows,tehran,aerospace,prevalent,arise,lowland,24th,spokesman,supervised,advertisements,clash,tunes,revelation,wanderers,quarterfinals,fisheries,steadily,memoirs,pastoral,renewable,confluence,acquiring,strips,slogan,upstream,scouting,analyst,practitioners,turbine,strengthened,heavier,prehistoric,plural,excluding,isles,persecution,turin,rotating,villain,hemisphere,unaware,arabs,corpus,relied,singular,unanimous,schooling,passive,angles,dominance,instituted,aria,outskirts,balanced,beginnings,financially,structured,parachute,viewer,attitudes,subjected,escapes,derbyshire,erosion,addressing,styled,declaring,originating,colts,adjusted,stained,occurrence,fortifications,baghdad,nitrogen,localities,yemen,galway,debris,lodz,victorious,pharmaceutical,substances,unnamed,dwelling,atop,developmental,activism,voter,refugee,forested,relates,overlooking,genocide,kannada,insufficient,oversaw,partisan,dioxide,recipients,factions,mortality,capped,expeditions,receptors,reorganized,prominently,atom,flooded,flute,orchestral,scripts,mathematician,airplay,detached,rebuilding,dwarf,brotherhood,salvation,expressions,arabian,cameroon,poetic,recruiting,bundesliga,inserted,scrapped,disabilities,evacuation,pasha,undefeated,crafts,rituals,aluminium,norm,pools,submerged,occupying,pathway,exams,prosperity,wrestlers,promotions,basal,permits,nationalism,trim,merge,gazette,tributaries,transcription,caste,porto,emerge,modeled,adjoining,counterparts,paraguay,redevelopment,renewal,unreleased,equilibrium,similarity,minorities,soviets,comprise,nodes,tasked,unrelated,expired,johan,precursor,examinations,electrons,socialism,exiled,admiralty,floods,wigan,nonprofit,lacks,brigades,screens,repaired,hanover,fascist,labs,osaka,delays,judged,statutory,colt,col.,offspring,solving,bred,assisting,retains,somalia,grouped,corresponds,tunisia,chaplain,eminent,chord,22nd,spans,viral,innovations,possessions,mikhail,kolkata,icelandic,implications,introduces,racism,workforce,alto,compulsory,admits,censorship,onset,reluctant,inferior,iconic,progression,liability,turnout,satellites,behavioral,coordinated,exploitation,posterior,averaging,fringe,krakow,mountainous,greenwich,para,plantations,reinforcements,offerings,famed,intervals,constraints,individually,nutrition,1870s,taxation,threshold,tomatoes,fungi,contractor,ethiopian,apprentice,diabetes,wool,gujarat,honduras,norse,bucharest,23rd,arguably,accompany,prone,teammates,perennial,vacancy,polytechnic,deficit,okinawa,functionality,reminiscent,tolerance,transferring,myanmar,concludes,neighbours,hydraulic,economically,slower,plots,charities,synod,investor,catholicism,identifies,bronx,interpretations,adverse,judiciary,hereditary,nominal,sensor,symmetry,cubic,triangular,tenants,divisional,outreach,representations,passages,undergoing,cartridge,testified,exceeded,impacts,limiting,railroads,defeats,regain,rendering,humid,retreated,reliability,governorate,antwerp,infamous,implied,packaging,lahore,trades,billed,extinction,ecole,rejoined,recognizes,projection,qualifications,stripes,forts,socially,lexington,accurately,sexuality,westward,wikipedia,pilgrimage,abolition,choral,stuttgart,nests,expressing,strikeouts,assessed,monasteries,reconstructed,humorous,marxist,fertile,consort,urdu,patronage,peruvian,devised,lyric,baba,nassau,communism,extraction,popularly,markings,inability,litigation,accounted,processed,emirates,tempo,cadets,eponymous,contests,broadly,oxide,courtyard,frigate,directory,apex,outline,regency,chiefly,patrols,secretariat,cliffs,residency,privy,armament,australians,dorset,geometric,genetics,scholarships,fundraising,flats,demographic,multimedia,captained,documentaries,updates,canvas,blockade,guerrilla,songwriting,administrators,intake,drought,implementing,fraction,cannes,refusal,inscribed,meditation,announcing,exported,ballots,formula_3,curator,basel,arches,flour,subordinate,confrontation,gravel,simplified,berkshire,patriotic,tuition,employing,servers,castile,posting,combinations,discharged,miniature,mutations,constellation,incarnation,ideals,necessity,granting,ancestral,crowds,pioneered,mormon,methodology,rama,indirect,complexes,bavarian,patrons,uttar,skeleton,bollywood,flemish,viable,bloc,breeds,triggered,sustainability,tailed,referenced,comply,takeover,latvian,homestead,platoon,communal,nationality,excavated,targeting,sundays,posed,physicist,turret,endowment,marginal,dispatched,commentators,renovations,attachment,collaborations,ridges,barriers,obligations,shareholders,prof.,defenses,presided,rite,backgrounds,arbitrary,affordable,gloucestershire,thirteenth,inlet,miniseries,possesses,detained,pressures,subscription,realism,solidarity,proto,postgraduate,noun,burmese,abundance,homage,reasoning,anterior,robust,fencing,shifting,vowels,garde,profitable,loch,anchored,coastline,samoa,terminology,prostitution,magistrate,venezuelan,speculated,regulate,fixture,colonists,digit,induction,manned,expeditionary,computational,centennial,principally,vein,preserving,engineered,numerical,cancellation,conferred,continually,borne,seeded,advertisement,unanimously,treaties,infections,ions,sensors,lowered,amphibious,lava,fourteenth,bahrain,niagara,nicaragua,squares,congregations,26th,periodic,proprietary,1860s,contributors,seller,overs,emission,procession,presumed,illustrator,zinc,gases,tens,applicable,stretches,reproductive,sixteenth,apparatus,accomplishments,canoe,guam,oppose,recruitment,accumulated,limerick,namibia,staging,remixes,ordnance,uncertainty,pedestrian,temperate,treason,deposited,registry,cerambycidae,attracting,lankan,reprinted,shipbuilding,homosexuality,neurons,eliminating,1900s,resume,ministries,beneficial,blackpool,surplus,northampton,licenses,constructing,announcer,standardized,alternatives,taipei,inadequate,failures,yields,medalist,titular,obsolete,torah,burlington,predecessors,lublin,retailers,castles,depiction,issuing,gubernatorial,propulsion,tiles,damascus,discs,alternating,pomerania,peasant,tavern,redesignated,27th,illustration,focal,mans,codex,specialists,productivity,antiquity,controversies,promoter,pits,companions,behaviors,lyrical,prestige,creativity,swansea,dramas,approximate,feudal,tissues,crude,campaigned,unprecedented,chancel,amendments,surroundings,allegiance,exchanges,align,firmly,optimal,commenting,reigning,landings,obscure,1850s,contemporaries,paternal,devi,endurance,communes,incorporation,denominations,exchanged,routing,resorts,amnesty,slender,explores,suppression,heats,pronunciation,centred,coupe,stirling,freelance,treatise,linguistics,laos,informs,discovering,pillars,encourages,halted,robots,definitive,maturity,tuberculosis,venetian,silesian,unchanged,originates,mali,lincolnshire,quotes,seniors,premise,contingent,distribute,danube,gorge,logging,dams,curling,seventeenth,specializes,wetlands,deities,assess,thickness,rigid,culminated,utilities,substrate,insignia,nile,assam,shri,currents,suffrage,canadians,mortar,asteroid,bosnian,discoveries,enzymes,sanctioned,replica,hymn,investigators,tidal,dominate,derivatives,converting,leinster,verbs,honoured,criticisms,dismissal,discrete,masculine,reorganization,unlimited,wurttemberg,sacks,allocation,bahn,jurisdictions,participates,lagoon,famine,communion,culminating,surveyed,shortage,cables,intersects,cassette,foremost,adopting,solicitor,outright,bihar,reissued,farmland,dissertation,turnpike,baton,photographed,christchurch,kyoto,finances,rails,histories,linebacker,kilkenny,accelerated,dispersed,handicap,absorption,rancho,ceramic,captivity,cites,font,weighed,mater,utilize,bravery,extract,validity,slovenian,seminars,discourse,ranged,duel,ironically,warships,sega,temporal,surpassed,prolonged,recruits,northumberland,greenland,contributes,patented,eligibility,unification,discusses,reply,translates,beirut,relies,torque,northward,reviewers,monastic,accession,neural,tramway,heirs,sikh,subscribers,amenities,taliban,audit,rotterdam,wagons,kurdish,favoured,combustion,meanings,persia,browser,diagnostic,niger,formula_4,denomination,dividing,parameter,branding,badminton,leningrad,sparked,hurricanes,beetles,propeller,mozambique,refined,diagram,exhaust,vacated,readings,markers,reconciliation,determines,concurrent,imprint,primera,organism,demonstrating,filmmakers,vanderbilt,affiliates,traction,evaluated,defendants,megachile,investigative,zambia,assassinated,rewarded,probable,staffordshire,foreigners,directorate,nominees,consolidation,commandant,reddish,differing,unrest,drilling,bohemia,resembling,instrumentation,considerations,haute,promptly,variously,dwellings,clans,tablet,enforced,cockpit,semifinal,hussein,prisons,ceylon,emblem,monumental,phrases,correspond,crossover,outlined,characterised,acceleration,caucus,crusade,protested,composing,rajasthan,habsburg,rhythmic,interception,inherent,cooled,ponds,spokesperson,gradual,consultation,kuala,globally,suppressed,builders,avengers,suffix,integer,enforce,fibers,unionist,proclamation,uncovered,infrared,adapt,eisenhower,utilizing,captains,stretched,observing,assumes,prevents,analyses,saxophone,caucasus,notices,villains,dartmouth,mongol,hostilities,stretching,veterinary,lenses,texture,prompting,overthrow,excavation,islanders,masovian,battleship,biographer,replay,degradation,departing,luftwaffe,fleeing,oversight,immigrated,serbs,fishermen,strengthening,respiratory,italians,denotes,radial,escorted,motif,wiltshire,expresses,accessories,reverted,establishments,inequality,protocols,charting,famously,satirical,entirety,trench,friction,atletico,sampling,subset,weekday,upheld,sharply,correlation,incorrect,mughal,travelers,hasan,earnings,offset,evaluate,specialised,recognizing,flexibility,nagar,postseason,algebraic,capitalism,crystals,melodies,polynomial,racecourse,defences,austro,wembley,attracts,anarchist,resurrection,reviewing,decreasing,prefix,ratified,mutation,displaying,separating,restoring,assemblies,ordinance,priesthood,cruisers,appoint,moldova,imports,directive,epidemic,militant,senegal,signaling,restriction,critique,retrospective,nationalists,undertake,sioux,canals,algerian,redesigned,philanthropist,depict,conceptual,turbines,intellectuals,eastward,applicants,contractors,vendors,undergone,namesake,ensured,tones,substituted,hindwings,arrests,tombs,transitional,principality,reelection,taiwanese,cavity,manifesto,broadcasters,spawned,thoroughbred,identities,generators,proposes,hydroelectric,johannesburg,cortex,scandinavian,killings,aggression,boycott,catalyst,physiology,fifteenth,waterfront,chromosome,organist,costly,calculation,cemeteries,flourished,recognise,juniors,merging,disciples,ashore,workplace,enlightenment,diminished,debated,hailed,podium,educate,mandated,distributor,litre,electromagnetic,flotilla,estuary,peterborough,staircase,selections,melodic,confronts,wholesale,integrate,intercepted,catalonia,unite,immense,palatinate,switches,earthquakes,occupational,successors,praising,concluding,faculties,firstly,overhaul,empirical,metacritic,inauguration,evergreen,laden,winged,philosophers,amalgamated,geoff,centimeters,napoleonic,upright,planting,brewing,fined,sensory,migrants,wherein,inactive,headmaster,warwickshire,siberia,terminals,denounced,academia,divinity,bilateral,clive,omitted,peerage,relics,apartheid,syndicate,fearing,fixtures,desirable,dismantled,ethnicity,valves,biodiversity,aquarium,ideological,visibility,creators,analyzed,tenant,balkan,postwar,supplier,smithsonian,risen,morphology,digits,bohemian,wilmington,vishnu,demonstrates,aforementioned,biographical,mapped,khorasan,phosphate,presentations,ecosystem,processors,calculations,mosaic,clashes,penned,recalls,coding,angular,lattice,macau,accountability,extracted,pollen,therapeutic,overlap,violinist,deposed,candidacy,infants,covenant,bacterial,restructuring,dungeons,ordination,conducts,builds,invasive,customary,concurrently,relocation,cello,statutes,borneo,entrepreneurs,sanctions,packet,rockefeller,piedmont,comparisons,waterfall,receptions,glacial,surge,signatures,alterations,advertised,enduring,somali,botanist,100th,canonical,motifs,longitude,circulated,alloy,indirectly,margins,preserves,internally,besieged,shale,peripheral,drained,baseman,reassigned,tobago,soloist,socio,grazing,contexts,roofs,portraying,ottomans,shrewsbury,noteworthy,lamps,supplying,beams,qualifier,portray,greenhouse,stronghold,hitter,rites,cretaceous,urging,derive,nautical,aiming,fortunes,verde,donors,reliance,exceeding,exclusion,exercised,simultaneous,continents,guiding,pillar,gradient,poznan,eruption,clinics,moroccan,indicator,trams,piers,parallels,fragment,teatro,potassium,satire,compressed,businessmen,influx,seine,perspectives,shelters,decreases,mounting,formula_5,confederacy,equestrian,expulsion,mayors,liberia,resisted,affinity,shrub,unexpectedly,stimulus,amtrak,deported,perpendicular,statesman,wharf,storylines,romanesque,weights,surfaced,interceptions,dhaka,crambidae,orchestras,rwanda,conclude,constitutes,subsidiaries,admissions,prospective,shear,bilingual,campaigning,presiding,domination,commemorative,trailing,confiscated,petrol,acquisitions,polymer,onlyinclude,chloride,elevations,resolutions,hurdles,pledged,likelihood,objected,erect,encoding,databases,aristotle,hindus,marshes,bowled,ministerial,grange,acronym,annexation,squads,ambient,pilgrims,botany,sofla,astronomer,planetary,descending,bestowed,ceramics,diplomacy,metabolism,colonization,potomac,africans,engraved,recycling,commitments,resonance,disciplinary,jamaican,narrated,spectral,tipperary,waterford,stationary,arbitration,transparency,threatens,crossroads,slalom,oversee,centenary,incidence,economies,livery,moisture,newsletter,autobiographical,bhutan,propelled,dependence,moderately,adobe,barrels,subdivisions,outlook,labelled,stratford,arising,diaspora,barony,automobiles,ornamental,slated,norms,primetime,generalized,analysts,vectors,libyan,yielded,certificates,rooted,vernacular,belarusian,marketplace,prediction,fairfax,malawi,viruses,wooded,demos,mauritius,prosperous,coincided,liberties,huddersfield,ascent,warnings,hinduism,glucose,pulitzer,unused,filters,illegitimate,acquitted,protestants,canopy,staple,psychedelic,winding,abbas,pathways,cheltenham,lagos,niche,invaders,proponents,barred,conversely,doncaster,recession,embraced,rematch,concession,emigration,upgrades,bowls,tablets,remixed,loops,kensington,shootout,monarchs,organizers,harmful,punjabi,broadband,exempt,neolithic,profiles,portrays,parma,cyrillic,quasi,attested,regimental,revive,torpedoes,heidelberg,rhythms,spherical,denote,hymns,icons,theologian,qaeda,exceptionally,reinstated,comune,playhouse,lobbying,grossing,viceroy,delivers,visually,armistice,utrecht,syllable,vertices,analogous,annex,refurbished,entrants,knighted,disciple,rhetoric,detailing,inactivated,ballads,algae,intensified,favourable,sanitation,receivers,pornography,commemorated,cannons,entrusted,manifold,photographers,pueblo,textiles,steamer,myths,marquess,onward,liturgical,romney,uzbekistan,consistency,denoted,hertfordshire,convex,hearings,sulfur,universidad,podcast,selecting,emperors,arises,justices,1840s,mongolian,exploited,termination,digitally,infectious,sedan,symmetric,penal,illustrate,formulation,attribute,problematic,modular,inverse,berth,searches,rutgers,leicestershire,enthusiasts,lockheed,upwards,transverse,accolades,backward,archaeologists,crusaders,nuremberg,defects,ferries,vogue,containers,openings,transporting,separates,lumpur,purchases,attain,wichita,topology,woodlands,deleted,periodically,syntax,overturned,musicals,corp.,strasbourg,instability,nationale,prevailing,cache,marathi,versailles,unmarried,grains,straits,antagonist,segregation,assistants,d'etat,contention,dictatorship,unpopular,motorcycles,criterion,analytical,salzburg,militants,hanged,worcestershire,emphasize,paralympic,erupted,convinces,offences,oxidation,nouns,populace,atari,spanned,hazardous,educators,playable,births,baha'i,preseason,generates,invites,meteorological,handbook,foothills,enclosure,diffusion,mirza,convergence,geelong,coefficient,connector,formula_6,cylindrical,disasters,pleaded,knoxville,contamination,compose,libertarian,arrondissement,franciscan,intercontinental,susceptible,initiation,malaria,unbeaten,consonants,waived,saloon,popularized,estadio,pseudo,interdisciplinary,transports,transformers,carriages,bombings,revolves,ceded,collaborator,celestial,exemption,colchester,maltese,oceanic,ligue,crete,shareholder,routed,depictions,ridden,advisors,calculate,lending,guangzhou,simplicity,newscast,scheduling,snout,eliot,undertaking,armenians,nottinghamshire,whitish,consulted,deficiency,salle,cinemas,superseded,rigorous,kerman,convened,landowners,modernization,evenings,pitches,conditional,scandinavia,differed,formulated,cyclists,swami,guyana,dunes,electrified,appalachian,abdomen,scenarios,prototypes,sindh,consonant,adaptive,boroughs,wolverhampton,modelling,cylinders,amounted,minimize,ambassadors,lenin,settler,coincide,approximation,grouping,murals,bullying,registers,rumours,engagements,energetic,vertex,annals,bordering,geologic,yellowish,runoff,converts,allegheny,facilitated,saturdays,colliery,monitored,rainforest,interfaces,geographically,impaired,prevalence,joachim,paperback,slowed,shankar,distinguishing,seminal,categorized,authorised,auspices,bandwidth,asserts,rebranded,balkans,supplemented,seldom,weaving,capsule,apostles,populous,monmouth,payload,symphonic,densely,shoreline,managerial,masonry,antioch,averages,textbooks,royalist,coliseum,tandem,brewers,diocesan,posthumous,walled,incorrectly,distributions,ensued,reasonably,graffiti,propagation,automation,harmonic,augmented,middleweight,limbs,elongated,landfall,comparatively,literal,grossed,koppen,wavelength,1830s,cerebral,boasts,congestion,physiological,practitioner,coasts,cartoonist,undisclosed,frontal,launches,burgundy,qualifiers,imposing,stade,flanked,assyrian,raided,multiplayer,montane,chesapeake,pathology,drains,vineyards,intercollegiate,semiconductor,grassland,convey,citations,predominant,rejects,benefited,yahoo,graphs,busiest,encompassing,hamlets,explorers,suppress,minors,graphical,calculus,sediment,intends,diverted,mainline,unopposed,cottages,initiate,alumnus,towed,autism,forums,darlington,modernist,oxfordshire,lectured,capitalist,suppliers,panchayat,actresses,foundry,southbound,commodity,wesleyan,divides,palestinians,luton,caretaker,nobleman,mutiny,organizer,preferences,nomenclature,splits,unwilling,offenders,timor,relying,halftime,semitic,arithmetic,milestone,jesuits,arctiidae,retrieved,consuming,contender,edged,plagued,inclusive,transforming,khmer,federally,insurgents,distributing,amherst,rendition,prosecutors,viaduct,disqualified,kabul,liturgy,prevailed,reelected,instructors,swimmers,aperture,churchyard,interventions,totals,darts,metropolis,fuels,fluent,northbound,correctional,inflicted,barrister,realms,culturally,aristocratic,collaborating,emphasizes,choreographer,inputs,ensembles,humboldt,practised,endowed,strains,infringement,archaeologist,congregational,magna,relativity,efficiently,proliferation,mixtape,abruptly,regeneration,commissioning,yukon,archaic,reluctantly,retailer,northamptonshire,universally,crossings,boilers,nickelodeon,revue,abbreviation,retaliation,scripture,routinely,medicinal,benedictine,kenyan,retention,deteriorated,glaciers,apprenticeship,coupling,researched,topography,entrances,anaheim,pivotal,compensate,arched,modify,reinforce,dusseldorf,journeys,motorsport,conceded,sumatra,spaniards,quantitative,loire,cinematography,discarded,botswana,morale,engined,zionist,philanthropy,sainte,fatalities,cypriot,motorsports,indicators,pricing,institut,bethlehem,implicated,gravitational,differentiation,rotor,thriving,precedent,ambiguous,concessions,forecast,conserved,fremantle,asphalt,landslide,middlesbrough,formula_7,humidity,overseeing,chronological,diaries,multinational,crimean,turnover,improvised,youths,declares,tasmanian,canadiens,fumble,refinery,weekdays,unconstitutional,upward,guardians,brownish,imminent,hamas,endorsement,naturalist,martyrs,caledonia,chords,yeshiva,reptiles,severity,mitsubishi,fairs,installment,substitution,repertory,keyboardist,interpreter,silesia,noticeable,rhineland,transmit,inconsistent,booklet,academies,epithet,pertaining,progressively,aquatics,scrutiny,prefect,toxicity,rugged,consume,o'donnell,evolve,uniquely,cabaret,mediated,landowner,transgender,palazzo,compilations,albuquerque,induce,sinai,remastered,efficacy,underside,analogue,specify,possessing,advocating,compatibility,liberated,greenville,mecklenburg,header,memorials,sewage,rhodesia,1800s,salaries,atoll,coordinating,partisans,repealed,amidst,subjective,optimization,nectar,evolving,exploits,madhya,styling,accumulation,raion,postage,responds,buccaneers,frontman,brunei,choreography,coated,kinetic,sampled,inflammatory,complementary,eclectic,norte,vijay,a.k.a,mainz,casualty,connectivity,laureate,franchises,yiddish,reputed,unpublished,economical,periodicals,vertically,bicycles,brethren,capacities,unitary,archeological,tehsil,domesday,wehrmacht,justification,angered,mysore,fielded,abuses,nutrients,ambitions,taluk,battleships,symbolism,superiority,neglect,attendees,commentaries,collaborators,predictions,yorker,breeders,investing,libretto,informally,coefficients,memorandum,pounder,collingwood,tightly,envisioned,arbor,mistakenly,captures,nesting,conflicting,enhancing,streetcar,manufactures,buckinghamshire,rewards,commemorating,stony,expenditure,tornadoes,semantic,relocate,weimar,iberian,sighted,intending,ensign,beverages,expectation,differentiate,centro,utilizes,saxophonist,catchment,transylvania,ecosystems,shortest,sediments,socialists,ineffective,kapoor,formidable,heroine,guantanamo,prepares,scattering,pamphlet,verified,elector,barons,totaling,shrubs,pyrenees,amalgamation,mutually,longitudinal,comte,negatively,masonic,envoy,sexes,akbar,mythical,tonga,bishopric,assessments,malaya,warns,interiors,reefs,reflections,neutrality,musically,nomadic,waterways,provence,collaborate,scaled,adulthood,emerges,euros,optics,incentives,overland,periodical,liege,awarding,realization,slang,affirmed,schooner,hokkaido,czechoslovak,protectorate,undrafted,disagreed,commencement,electors,spruce,swindon,fueled,equatorial,inventions,suites,slovene,backdrop,adjunct,energies,remnant,inhabit,alliances,simulcast,reactors,mosques,travellers,outfielder,plumage,migratory,benin,experimented,fibre,projecting,drafting,laude,evidenced,northernmost,indicted,directional,replication,croydon,comedies,jailed,organizes,devotees,reservoirs,turrets,originate,economists,songwriters,junta,trenches,mounds,proportions,comedic,apostle,azerbaijani,farmhouse,resembled,disrupted,playback,mixes,diagonal,relevance,govern,programmer,gdansk,maize,soundtracks,tendencies,mastered,impacted,believers,kilometre,intervene,chairperson,aerodrome,sails,subsidies,ensures,aesthetics,congresses,ratios,sardinia,southernmost,functioned,controllers,downward,randomly,distortion,regents,palatine,disruption,spirituality,vidhan,tracts,compiler,ventilation,anchorage,symposium,assert,pistols,excelled,avenues,convoys,moniker,constructions,proponent,phased,spines,organising,schleswig,policing,campeonato,mined,hourly,croix,lucrative,authenticity,haitian,stimulation,burkina,espionage,midfield,manually,staffed,awakening,metabolic,biographies,entrepreneurship,conspicuous,guangdong,preface,subgroup,mythological,adjutant,feminism,vilnius,oversees,honourable,tripoli,stylized,kinase,societe,notoriety,altitudes,configurations,outward,transmissions,announces,auditor,ethanol,clube,nanjing,mecca,haifa,blogs,postmaster,paramilitary,depart,positioning,potent,recognizable,spire,brackets,remembrance,overlapping,turkic,articulated,scientology,operatic,deploy,readiness,biotechnology,restrict,cinematographer,inverted,synonymous,administratively,westphalia,commodities,replaces,downloads,centralized,munitions,preached,sichuan,fashionable,implementations,matrices,hiv/aids,loyalist,luzon,celebrates,hazards,heiress,mercenaries,synonym,creole,ljubljana,technician,auditioned,technicians,viewpoint,wetland,mongols,princely,sharif,coating,dynasties,southward,doubling,formula_8,mayoral,harvesting,conjecture,goaltender,oceania,spokane,welterweight,bracket,gatherings,weighted,newscasts,mussolini,affiliations,disadvantage,vibrant,spheres,sultanate,distributors,disliked,establishes,marches,drastically,yielding,jewellery,yokohama,vascular,airlift,canons,subcommittee,repression,strengths,graded,outspoken,fused,pembroke,filmography,redundant,fatigue,repeal,threads,reissue,pennant,edible,vapor,corrections,stimuli,commemoration,dictator,anand,secession,amassed,orchards,pontifical,experimentation,greeted,bangor,forwards,decomposition,quran,trolley,chesterfield,traverse,sermons,burials,skier,climbs,consultants,petitioned,reproduce,parted,illuminated,kurdistan,reigned,occupants,packaged,geometridae,woven,regulating,protagonists,crafted,affluent,clergyman,consoles,migrant,supremacy,attackers,caliph,defect,convection,rallies,huron,resin,segunda,quota,warship,overseen,criticizing,shrines,glamorgan,lowering,beaux,hampered,invasions,conductors,collects,bluegrass,surrounds,substrates,perpetual,chronology,pulmonary,executions,crimea,compiling,noctuidae,battled,tumors,minsk,novgorod,serviced,yeast,computation,swamps,theodor,baronetcy,salford,uruguayan,shortages,odisha,siberian,novelty,cinematic,invitational,decks,dowager,oppression,bandits,appellate,state-of-the-art,clade,palaces,signalling,galaxies,industrialist,tensor,learnt,incurred,magistrates,binds,orbits,ciudad,willingness,peninsular,basins,biomedical,shafts,marlborough,bournemouth,withstand,fitzroy,dunedin,variance,steamship,integrating,muscular,fines,akron,bulbophyllum,malmo,disclosed,cornerstone,runways,medicines,twenty20,gettysburg,progresses,frigates,bodied,transformations,transforms,helens,modelled,versatile,regulator,pursuits,legitimacy,amplifier,scriptures,voyages,examines,presenters,octagonal,poultry,formula_9,anatolia,computed,migrate,directorial,hybrids,localized,preferring,guggenheim,persisted,grassroots,inflammation,fishery,otago,vigorous,professions,instructional,inexpensive,insurgency,legislators,sequels,surnames,agrarian,stainless,nairobi,minas,forerunner,aristocracy,transitions,sicilian,showcased,doses,hiroshima,summarized,gearbox,emancipation,limitation,nuclei,seismic,abandonment,dominating,appropriations,occupations,electrification,hilly,contracting,exaggerated,entertainer,kazan,oricon,cartridges,characterization,parcel,maharaja,exceeds,aspiring,obituary,flattened,contrasted,narration,replies,oblique,outpost,fronts,arranger,talmud,keynes,doctrines,endured,confesses,fortification,supervisors,kilometer,academie,jammu,bathurst,piracy,prostitutes,navarre,cumulative,cruises,lifeboat,twinned,radicals,interacting,expenditures,wexford,libre,futsal,curated,clockwise,colloquially,procurement,immaculate,lyricist,enhancement,porcelain,alzheimer,highlighting,judah,disagreements,storytelling,sheltered,wroclaw,vaudeville,contrasts,neoclassical,compares,contrasting,deciduous,francaise,descriptive,cyclic,reactive,antiquities,meiji,repeats,creditors,forcibly,newmarket,picturesque,impending,uneven,bison,raceway,solvent,ecumenical,optic,professorship,harvested,waterway,banjo,pharaoh,geologist,scanning,dissent,recycled,unmanned,retreating,gospels,aqueduct,branched,tallinn,groundbreaking,syllables,hangar,designations,procedural,craters,cabins,encryption,anthropologist,montevideo,outgoing,inverness,chattanooga,fascism,calais,chapels,groundwater,downfall,misleading,robotic,tortricidae,pixel,handel,prohibit,crewe,renaming,reprised,kickoff,leftist,spaced,integers,causeway,pines,authorship,organise,ptolemy,accessibility,virtues,lesions,iroquois,qur'an,atheist,synthesized,biennial,confederates,dietary,skaters,stresses,tariff,koreans,intercity,republics,quintet,baroness,naive,amplitude,insistence,tbilisi,residues,grammatical,diversified,egyptians,accompaniment,vibration,repository,mandal,topological,distinctions,coherent,invariant,batters,nuevo,internationals,implements,follower,bahia,widened,independents,cantonese,totaled,guadalajara,wolverines,befriended,muzzle,surveying,hungarians,medici,deportation,rayon,approx,recounts,attends,clerical,hellenic,furnished,alleging,soluble,systemic,gallantry,bolshevik,intervened,hostel,gunpowder,specialising,stimulate,leiden,removes,thematic,floral,bafta,printers,conglomerate,eroded,analytic,successively,lehigh,thessaloniki,kilda,clauses,ascended,nehru,scripted,tokugawa,competence,diplomats,exclude,consecration,freedoms,assaults,revisions,blacksmith,textual,sparse,concacaf,slain,uploaded,enraged,whaling,guise,stadiums,debuting,dormitory,cardiovascular,yunnan,dioceses,consultancy,notions,lordship,archdeacon,collided,medial,airfields,garment,wrestled,adriatic,reversal,refueling,verification,jakob,horseshoe,intricate,veracruz,sarawak,syndication,synthesizer,anthologies,stature,feasibility,guillaume,narratives,publicized,antrim,intermittent,constituents,grimsby,filmmaking,doping,unlawful,nominally,transmitting,documenting,seater,internationale,ejected,steamboat,alsace,boise,ineligible,geared,vassal,mustered,ville,inline,pairing,eurasian,kyrgyzstan,barnsley,reprise,stereotypes,rushes,conform,firefighters,deportivo,revolutionaries,rabbis,concurrency,charters,sustaining,aspirations,algiers,chichester,falkland,morphological,systematically,volcanoes,designate,artworks,reclaimed,jurist,anglia,resurrected,chaotic,feasible,circulating,simulated,environmentally,confinement,adventist,harrisburg,laborers,ostensibly,universiade,pensions,influenza,bratislava,octave,refurbishment,gothenburg,putin,barangay,annapolis,breaststroke,illustrates,distorted,choreographed,promo,emphasizing,stakeholders,descends,exhibiting,intrinsic,invertebrates,evenly,roundabout,salts,formula_10,strata,inhibition,branching,stylistic,rumored,realises,mitochondrial,commuted,adherents,logos,bloomberg,telenovela,guineas,charcoal,engages,winery,reflective,siena,cambridgeshire,ventral,flashback,installing,engraving,grasses,traveller,rotated,proprietor,nationalities,precedence,sourced,trainers,cambodian,reductions,depleted,saharan,classifications,biochemistry,plaintiffs,arboretum,humanist,fictitious,aleppo,climates,bazaar,his/her,homogeneous,multiplication,moines,indexed,linguist,skeletal,foliage,societal,differentiated,informing,mammal,infancy,archival,cafes,malls,graeme,musee,schizophrenia,fargo,pronouns,derivation,descend,ascending,terminating,deviation,recaptured,confessions,weakening,tajikistan,bahadur,pasture,b/hip,donegal,supervising,sikhs,thinkers,euclidean,reinforcement,friars,portage,fuscous,lucknow,synchronized,assertion,choirs,privatization,corrosion,multitude,skyscraper,royalties,ligament,usable,spores,directs,clashed,stockport,fronted,dependency,contiguous,biologist,backstroke,powerhouse,frescoes,phylogenetic,welding,kildare,gabon,conveyed,augsburg,severn,continuum,sahib,lille,injuring,passeriformesfamily,succeeds,translating,unitarian,startup,turbulent,outlying,philanthropic,stanislaw,idols,claremont,conical,haryana,armagh,blended,implicit,conditioned,modulation,rochdale,labourers,coinage,shortstop,potsdam,gears,obesity,bestseller,advisers,bouts,comedians,jozef,lausanne,taxonomic,correlated,columbian,marne,indications,psychologists,libel,edict,beaufort,disadvantages,renal,finalized,racehorse,unconventional,disturbances,falsely,zoology,adorned,redesign,executing,narrower,commended,appliances,stalls,resurgence,saskatoon,miscellaneous,permitting,epoch,formula_11,cumbria,forefront,vedic,eastenders,disposed,supermarkets,rower,inhibitor,magnesium,colourful,yusuf,harrow,formulas,centrally,balancing,ionic,nocturnal,consolidate,ornate,raiding,charismatic,accelerate,nominate,residual,dhabi,commemorates,attribution,uninhabited,mindanao,atrocities,genealogical,romani,applicant,enactment,abstraction,trough,pulpit,minuscule,misconduct,grenades,timely,supplements,messaging,curvature,ceasefire,telangana,susquehanna,braking,redistribution,shreveport,neighbourhoods,gregorian,widowed,khuzestan,empowerment,scholastic,evangelist,peptide,topical,theorist,historia,thence,sudanese,museo,jurisprudence,masurian,frankish,headlined,recounted,netball,petitions,tolerant,hectare,truncated,southend,methane,captives,reigns,massif,subunit,acidic,weightlifting,footballers,sabah,britannia,tunisian,segregated,sawmill,withdrawing,unpaid,weaponry,somme,perceptions,unicode,alcoholism,durban,wrought,waterfalls,jihad,auschwitz,upland,eastbound,adjective,anhalt,evaluating,regimes,guildford,reproduced,pamphlets,hierarchical,maneuvers,hanoi,fabricated,repetition,enriched,arterial,replacements,tides,globalization,adequately,westbound,satisfactory,fleets,phosphorus,lastly,neuroscience,anchors,xinjiang,membranes,improvisation,shipments,orthodoxy,submissions,bolivian,mahmud,ramps,leyte,pastures,outlines,flees,transmitters,fares,sequential,stimulated,novice,alternately,symmetrical,breakaway,layered,baronets,lizards,blackish,edouard,horsepower,penang,principals,mercantile,maldives,overwhelmingly,hawke,rallied,prostate,conscription,juveniles,maccabi,carvings,strikers,sudbury,spurred,improves,lombardy,macquarie,parisian,elastic,distillery,shetland,humane,brentford,wrexham,warehouses,routines,encompassed,introductory,isfahan,instituto,palais,revolutions,sporadic,impoverished,portico,fellowships,speculative,enroll,dormant,adhere,fundamentally,sculpted,meritorious,template,upgrading,reformer,rectory,uncredited,indicative,creeks,galveston,radically,hezbollah,firearm,educating,prohibits,trondheim,locus,refit,headwaters,screenings,lowlands,wasps,coarse,attaining,sedimentary,perished,pitchfork,interned,cerro,stagecoach,aeronautical,liter,transitioned,haydn,inaccurate,legislatures,bromwich,knesset,spectroscopy,butte,asiatic,degraded,concordia,catastrophic,lobes,wellness,pensacola,periphery,hapoel,theta,horizontally,freiburg,liberalism,pleas,durable,warmian,offenses,mesopotamia,shandong,unsuitable,hospitalized,appropriately,phonetic,encompass,conversions,observes,illnesses,breakout,assigns,crowns,inhibitors,nightly,manifestation,fountains,maximize,alphabetical,sloop,expands,newtown,widening,gaddafi,commencing,camouflage,footprint,tyrol,barangays,universite,highlanders,budgets,query,lobbied,westchester,equator,stipulated,pointe,distinguishes,allotted,embankment,advises,storing,loyalists,fourier,rehearsals,starvation,gland,rihanna,tubular,expressive,baccalaureate,intersections,revered,carbonate,eritrea,craftsmen,cosmopolitan,sequencing,corridors,shortlisted,bangladeshi,persians,mimic,parades,repetitive,recommends,flanks,promoters,incompatible,teaming,ammonia,greyhound,solos,improper,legislator,newsweek,recurrent,vitro,cavendish,eireann,crises,prophets,mandir,strategically,guerrillas,formula_12,ghent,contenders,equivalence,drone,sociological,hamid,castes,statehood,aland,clinched,relaunched,tariffs,simulations,williamsburg,rotate,mediation,smallpox,harmonica,lodges,lavish,restrictive,o'sullivan,detainees,polynomials,echoes,intersecting,learners,elects,charlemagne,defiance,epsom,liszt,facilitating,absorbing,revelations,padua,pieter,pious,penultimate,mammalian,montenegrin,supplementary,widows,aromatic,croats,roanoke,trieste,legions,subdistrict,babylonian,grasslands,volga,violently,sparsely,oldies,telecommunication,respondents,quarries,downloadable,commandos,taxpayer,catalytic,malabar,afforded,copying,declines,nawab,junctions,assessing,filtering,classed,disused,compliant,christoph,gottingen,civilizations,hermitage,caledonian,whereupon,ethnically,springsteen,mobilization,terraces,indus,excel,zoological,enrichment,simulate,guitarists,registrar,cappella,invoked,reused,manchu,configured,uppsala,genealogy,mergers,casts,curricular,rebelled,subcontinent,horticultural,parramatta,orchestrated,dockyard,claudius,decca,prohibiting,turkmenistan,brahmin,clandestine,obligatory,elaborated,parasitic,helix,constraint,spearheaded,rotherham,eviction,adapting,albans,rescues,sociologist,guiana,convicts,occurrences,kamen,antennas,asturias,wheeled,sanitary,deterioration,trier,theorists,baseline,announcements,valea,planners,factual,serialized,serials,bilbao,demoted,fission,jamestown,cholera,alleviate,alteration,indefinite,sulfate,paced,climatic,valuation,artisans,proficiency,aegean,regulators,fledgling,sealing,influencing,servicemen,frequented,cancers,tambon,narayan,bankers,clarified,embodied,engraver,reorganisation,dissatisfied,dictated,supplemental,temperance,ratification,puget,nutrient,pretoria,papyrus,uniting,ascribed,cores,coptic,schoolhouse,barrio,1910s,armory,defected,transatlantic,regulates,ported,artefacts,specifies,boasted,scorers,mollusks,emitted,navigable,quakers,projective,dialogues,reunification,exponential,vastly,banners,unsigned,dissipated,halves,coincidentally,leasing,purported,escorting,estimation,foxes,lifespan,inflorescence,assimilation,showdown,staunch,prologue,ligand,superliga,telescopes,northwards,keynote,heaviest,taunton,redeveloped,vocalists,podlaskie,soyuz,rodents,azores,moravian,outset,parentheses,apparel,domestically,authoritative,polymers,monterrey,inhibit,launcher,jordanian,folds,taxis,mandates,singled,liechtenstein,subsistence,marxism,ousted,governorship,servicing,offseason,modernism,prism,devout,translators,islamist,chromosomes,pitted,bedfordshire,fabrication,authoritarian,javanese,leaflets,transient,substantive,predatory,sigismund,assassinate,diagrams,arrays,rediscovered,reclamation,spawning,fjord,peacekeeping,strands,fabrics,highs,regulars,tirana,ultraviolet,athenian,filly,barnet,naacp,nueva,favourites,terminates,showcases,clones,inherently,interpreting,bjorn,finely,lauded,unspecified,chola,pleistocene,insulation,antilles,donetsk,funnel,nutritional,biennale,reactivated,southport,primate,cavaliers,austrians,interspersed,restarted,suriname,amplifiers,wladyslaw,blockbuster,sportsman,minogue,brightness,benches,bridgeport,initiating,israelis,orbiting,newcomers,externally,scaling,transcribed,impairment,luxurious,longevity,impetus,temperament,ceilings,tchaikovsky,spreads,pantheon,bureaucracy,1820s,heraldic,villas,formula_13,galician,meath,avoidance,corresponded,headlining,connacht,seekers,rappers,solids,monograph,scoreless,opole,isotopes,himalayas,parodies,garments,microscopic,republished,havilland,orkney,demonstrators,pathogen,saturated,hellenistic,facilitates,aerodynamic,relocating,indochina,laval,astronomers,bequeathed,administrations,extracts,nagoya,torquay,demography,medicare,ambiguity,renumbered,pursuant,concave,syriac,electrode,dispersal,henan,bialystok,walsall,crystalline,puebla,janata,illumination,tianjin,enslaved,coloration,championed,defamation,grille,johor,rejoin,caspian,fatally,planck,workings,appointing,institutionalized,wessex,modernized,exemplified,regatta,jacobite,parochial,programmers,blending,eruptions,insurrection,regression,indices,sited,dentistry,mobilized,furnishings,levant,primaries,ardent,nagasaki,conqueror,dorchester,opined,heartland,amman,mortally,wellesley,bowlers,outputs,coveted,orthography,immersion,disrepair,disadvantaged,curate,childless,condensed,codice_1,remodeled,resultant,bolsheviks,superfamily,saxons,2010s,contractual,rivalries,malacca,oaxaca,magnate,vertebrae,quezon,olympiad,yucatan,tyres,macro,specialization,commendation,caliphate,gunnery,exiles,excerpts,fraudulent,adjustable,aramaic,interceptor,drumming,standardization,reciprocal,adolescents,federalist,aeronautics,favorably,enforcing,reintroduced,zhejiang,refining,biplane,banknotes,accordion,intersect,illustrating,summits,classmate,militias,biomass,massacres,epidemiology,reworked,wrestlemania,nantes,auditory,taxon,elliptical,chemotherapy,asserting,avoids,proficient,airmen,yellowstone,multicultural,alloys,utilization,seniority,kuyavian,huntsville,orthogonal,bloomington,cultivars,casimir,internment,repulsed,impedance,revolving,fermentation,parana,shutout,partnering,empowered,islamabad,polled,classify,amphibians,greyish,obedience,4x100,projectile,khyber,halfback,relational,d'ivoire,synonyms,endeavour,padma,customized,mastery,defenceman,berber,purge,interestingly,covent,promulgated,restricting,condemnation,hillsborough,walkers,privateer,intra,captaincy,naturalized,huffington,detecting,hinted,migrating,bayou,counterattack,anatomical,foraging,unsafe,swiftly,outdated,paraguayan,attire,masjid,endeavors,jerseys,triassic,quechua,growers,axial,accumulate,wastewater,cognition,fungal,animator,pagoda,kochi,uniformly,antibody,yerevan,hypotheses,combatants,italianate,draining,fragmentation,snowfall,formative,inversion,kitchener,identifier,additive,lucha,selects,ashland,cambrian,racetrack,trapping,congenital,primates,wavelengths,expansions,yeomanry,harcourt,wealthiest,awaited,punta,intervening,aggressively,vichy,piloted,midtown,tailored,heyday,metadata,guadalcanal,inorganic,hadith,pulses,francais,tangent,scandals,erroneously,tractors,pigment,constabulary,jiangsu,landfill,merton,basalt,astor,forbade,debuts,collisions,exchequer,stadion,roofed,flavour,sculptors,conservancy,dissemination,electrically,undeveloped,existent,surpassing,pentecostal,manifested,amend,formula_14,superhuman,barges,tunis,analytics,argyll,liquids,mechanized,domes,mansions,himalayan,indexing,reuters,nonlinear,purification,exiting,timbers,triangles,decommissioning,departmental,causal,fonts,americana,sept.,seasonally,incomes,razavi,sheds,memorabilia,rotational,terre,sutra,protege,yarmouth,grandmaster,annum,looted,imperialism,variability,liquidation,baptised,isotope,showcasing,milling,rationale,hammersmith,austen,streamlined,acknowledging,contentious,qaleh,breadth,turing,referees,feral,toulon,unofficially,identifiable,standout,labeling,dissatisfaction,jurgen,angrily,featherweight,cantons,constrained,dominates,standalone,relinquished,theologians,markedly,italics,downed,nitrate,likened,gules,craftsman,singaporean,pixels,mandela,moray,parity,departement,antigen,academically,burgh,brahma,arranges,wounding,triathlon,nouveau,vanuatu,banded,acknowledges,unearthed,stemming,authentication,byzantines,converge,nepali,commonplace,deteriorating,recalling,palette,mathematicians,greenish,pictorial,ahmedabad,rouen,validation,u.s.a.,'best,malvern,archers,converter,undergoes,fluorescent,logistical,notification,transvaal,illicit,symphonies,stabilization,worsened,fukuoka,decrees,enthusiast,seychelles,blogger,louvre,dignitaries,burundi,wreckage,signage,pinyin,bursts,federer,polarization,urbana,lazio,schism,nietzsche,venerable,administers,seton,kilograms,invariably,kathmandu,farmed,disqualification,earldom,appropriated,fluctuations,kermanshah,deployments,deformation,wheelbase,maratha,psalm,bytes,methyl,engravings,skirmish,fayette,vaccines,ideally,astrology,breweries,botanic,opposes,harmonies,irregularities,contended,gaulle,prowess,constants,aground,filipinos,fresco,ochreous,jaipur,willamette,quercus,eastwards,mortars,champaign,braille,reforming,horned,hunan,spacious,agitation,draught,specialties,flourishing,greensboro,necessitated,swedes,elemental,whorls,hugely,structurally,plurality,synthesizers,embassies,assad,contradictory,inference,discontent,recreated,inspectors,unicef,commuters,embryo,modifying,stints,numerals,communicated,boosted,trumpeter,brightly,adherence,remade,leases,restrained,eucalyptus,dwellers,planar,grooves,gainesville,daimler,anzac,szczecin,cornerback,prized,peking,mauritania,khalifa,motorized,lodging,instrumentalist,fortresses,cervical,formula_15,passerine,sectarian,researches,apprenticed,reliefs,disclose,gliding,repairing,queue,kyushu,literate,canoeing,sacrament,separatist,calabria,parkland,flowed,investigates,statistically,visionary,commits,dragoons,scrolls,premieres,revisited,subdued,censored,patterned,elective,outlawed,orphaned,leyland,richly,fujian,miniatures,heresy,plaques,countered,nonfiction,exponent,moravia,dispersion,marylebone,midwestern,enclave,ithaca,federated,electronically,handheld,microscopy,tolls,arrivals,climbers,continual,cossacks,moselle,deserts,ubiquitous,gables,forecasts,deforestation,vertebrates,flanking,drilled,superstructure,inspected,consultative,bypassed,ballast,subsidy,socioeconomic,relic,grenada,journalistic,administering,accommodated,collapses,appropriation,reclassified,foreword,porte,assimilated,observance,fragmented,arundel,thuringia,gonzaga,shenzhen,shipyards,sectional,ayrshire,sloping,dependencies,promenade,ecuadorian,mangrove,constructs,goalscorer,heroism,iteration,transistor,omnibus,hampstead,cochin,overshadowed,chieftain,scalar,finishers,ghanaian,abnormalities,monoplane,encyclopaedia,characterize,travancore,baronetage,bearers,biking,distributes,paving,christened,inspections,banco,humber,corinth,quadratic,albanians,lineages,majored,roadside,inaccessible,inclination,darmstadt,fianna,epilepsy,propellers,papacy,montagu,bhutto,sugarcane,optimized,pilasters,contend,batsmen,brabant,housemates,sligo,ascot,aquinas,supervisory,accorded,gerais,echoed,nunavut,conservatoire,carniola,quartermaster,gminas,impeachment,aquitaine,reformers,quarterfinal,karlsruhe,accelerator,coeducational,archduke,gelechiidae,seaplane,dissident,frenchman,palau,depots,hardcover,aachen,darreh,denominational,groningen,parcels,reluctance,drafts,elliptic,counters,decreed,airship,devotional,contradiction,formula_16,undergraduates,qualitative,guatemalan,slavs,southland,blackhawks,detrimental,abolish,chechen,manifestations,arthritis,perch,fated,hebei,peshawar,palin,immensely,havre,totalling,rampant,ferns,concourse,triples,elites,olympian,larva,herds,lipid,karabakh,distal,monotypic,vojvodina,batavia,multiplied,spacing,spellings,pedestrians,parchment,glossy,industrialization,dehydrogenase,patriotism,abolitionist,mentoring,elizabethan,figurative,dysfunction,abyss,constantin,middletown,stigma,mondays,gambia,gaius,israelites,renounced,nepalese,overcoming,buren,sulphur,divergence,predation,looting,iberia,futuristic,shelved,anthropological,innsbruck,escalated,clermont,entrepreneurial,benchmark,mechanically,detachments,populist,apocalyptic,exited,embryonic,stanza,readership,chiba,landlords,expansive,boniface,therapies,perpetrators,whitehall,kassel,masts,carriageway,clinch,pathogens,mazandaran,undesirable,teutonic,miocene,nagpur,juris,cantata,compile,diffuse,dynastic,reopening,comptroller,o'neal,flourish,electing,scientifically,departs,welded,modal,cosmology,fukushima,libertadores,chang'an,asean,generalization,localization,afrikaans,cricketers,accompanies,emigrants,esoteric,southwards,shutdown,prequel,fittings,innate,wrongly,equitable,dictionaries,senatorial,bipolar,flashbacks,semitism,walkway,lyrically,legality,sorbonne,vigorously,durga,samoan,karel,interchanges,patna,decider,registering,electrodes,anarchists,excursion,overthrown,gilan,recited,michelangelo,advertiser,kinship,taboo,cessation,formula_17,premiers,traversed,madurai,poorest,torneo,exerted,replicate,spelt,sporadically,horde,landscaping,razed,hindered,esperanto,manchuria,propellant,jalan,baha'is,sikkim,linguists,pandit,racially,ligands,dowry,francophone,escarpment,behest,magdeburg,mainstay,villiers,yangtze,grupo,conspirators,martyrdom,noticeably,lexical,kazakh,unrestricted,utilised,sired,inhabits,proofs,joseon,pliny,minted,buddhists,cultivate,interconnected,reuse,viability,australasian,derelict,resolving,overlooks,menon,stewardship,playwrights,thwarted,filmfare,disarmament,protections,bundles,sidelined,hypothesized,singer/songwriter,forage,netted,chancery,townshend,restructured,quotation,hyperbolic,succumbed,parliaments,shenandoah,apical,kibbutz,storeys,pastors,lettering,ukrainians,hardships,chihuahua,avail,aisles,taluka,antisemitism,assent,ventured,banksia,seamen,hospice,faroe,fearful,woreda,outfield,chlorine,transformer,tatar,panoramic,pendulum,haarlem,styria,cornice,importing,catalyzes,subunits,enamel,bakersfield,realignment,sorties,subordinates,deanery,townland,gunmen,tutelage,evaluations,allahabad,thrace,veneto,mennonite,sharia,subgenus,satisfies,puritan,unequal,gastrointestinal,ordinances,bacterium,horticulture,argonauts,adjectives,arable,duets,visualization,woolwich,revamped,euroleague,thorax,completes,originality,vasco,freighter,sardar,oratory,sects,extremes,signatories,exporting,arisen,exacerbated,departures,saipan,furlongs,d'italia,goring,dakar,conquests,docked,offshoot,okrug,referencing,disperse,netting,summed,rewritten,articulation,humanoid,spindle,competitiveness,preventive,facades,westinghouse,wycombe,synthase,emulate,fostering,abdel,hexagonal,myriad,caters,arjun,dismay,axiom,psychotherapy,colloquial,complemented,martinique,fractures,culmination,erstwhile,atrium,electronica,anarchism,nadal,montpellier,algebras,submitting,adopts,stemmed,overcame,internacional,asymmetric,gallipoli,gliders,flushing,extermination,hartlepool,tesla,interwar,patriarchal,hitherto,ganges,combatant,marred,philology,glastonbury,reversible,isthmus,undermined,southwark,gateshead,andalusia,remedies,hastily,optimum,smartphone,evade,patrolled,beheaded,dopamine,waivers,ugandan,gujarati,densities,predicting,intestinal,tentative,interstellar,kolonia,soloists,penetrated,rebellions,qeshlaq,prospered,colegio,deficits,konigsberg,deficient,accessing,relays,kurds,politburo,codified,incarnations,occupancy,cossack,metaphysical,deprivation,chopra,piccadilly,formula_18,makeshift,protestantism,alaskan,frontiers,faiths,tendon,dunkirk,durability,autobots,bonuses,coinciding,emails,gunboat,stucco,magma,neutrons,vizier,subscriptions,visuals,envisaged,carpets,smoky,schema,parliamentarian,immersed,domesticated,parishioners,flinders,diminutive,mahabharata,ballarat,falmouth,vacancies,gilded,twigs,mastering,clerics,dalmatia,islington,slogans,compressor,iconography,congolese,sanction,blends,bulgarians,moderator,outflow,textures,safeguard,trafalgar,tramways,skopje,colonialism,chimneys,jazeera,organisers,denoting,motivations,ganga,longstanding,deficiencies,gwynedd,palladium,holistic,fascia,preachers,embargo,sidings,busan,ignited,artificially,clearwater,cemented,northerly,salim,equivalents,crustaceans,oberliga,quadrangle,historiography,romanians,vaults,fiercely,incidental,peacetime,tonal,bhopal,oskar,radha,pesticides,timeslot,westerly,cathedrals,roadways,aldershot,connectors,brahmins,paler,aqueous,gustave,chromatic,linkage,lothian,specialises,aggregation,tributes,insurgent,enact,hampden,ghulam,federations,instigated,lyceum,fredrik,chairmanship,floated,consequent,antagonists,intimidation,patriarchate,warbler,heraldry,entrenched,expectancy,habitation,partitions,widest,launchers,nascent,ethos,wurzburg,lycee,chittagong,mahatma,merseyside,asteroids,yokosuka,cooperatives,quorum,redistricting,bureaucratic,yachts,deploying,rustic,phonology,chorale,cellist,stochastic,crucifixion,surmounted,confucian,portfolios,geothermal,crested,calibre,tropics,deferred,nasir,iqbal,persistence,essayist,chengdu,aborigines,fayetteville,bastion,interchangeable,burlesque,kilmarnock,specificity,tankers,colonels,fijian,quotations,enquiry,quito,palmerston,delle,multidisciplinary,polynesian,iodine,antennae,emphasised,manganese,baptists,galilee,jutland,latent,excursions,skepticism,tectonic,precursors,negligible,musique,misuse,vitoria,expressly,veneration,sulawesi,footed,mubarak,chongqing,chemically,midday,ravaged,facets,varma,yeovil,ethnographic,discounted,physicists,attache,disbanding,essen,shogunate,cooperated,waikato,realising,motherwell,pharmacology,sulfide,inward,expatriate,devoid,cultivar,monde,andean,groupings,goran,unaffected,moldovan,postdoctoral,coleophora,delegated,pronoun,conductivity,coleridge,disapproval,reappeared,microbial,campground,olsztyn,fostered,vaccination,rabbinical,champlain,milestones,viewership,caterpillar,effected,eupithecia,financier,inferred,uzbek,bundled,bandar,balochistan,mysticism,biosphere,holotype,symbolizes,lovecraft,photons,abkhazia,swaziland,subgroups,measurable,falkirk,valparaiso,ashok,discriminatory,rarity,tabernacle,flyweight,jalisco,westernmost,antiquarian,extracellular,margrave,colspan=9,midsummer,digestive,reversing,burgeoning,substitutes,medallist,khrushchev,guerre,folio,detonated,partido,plentiful,aggregator,medallion,infiltration,shaded,santander,fared,auctioned,permian,ramakrishna,andorra,mentors,diffraction,bukit,potentials,translucent,feminists,tiers,protracted,coburg,wreath,guelph,adventurer,he/she,vertebrate,pipelines,celsius,outbreaks,australasia,deccan,garibaldi,unionists,buildup,biochemical,reconstruct,boulders,stringent,barbed,wording,furnaces,pests,befriends,organises,popes,rizal,tentacles,cadre,tallahassee,punishments,occidental,formatted,mitigation,rulings,rubens,cascades,inducing,choctaw,volta,synagogues,movable,altarpiece,mitigate,practise,intermittently,encountering,memberships,earns,signify,retractable,amounting,pragmatic,wilfrid,dissenting,divergent,kanji,reconstituted,devonian,constitutions,levied,hendrik,starch,costal,honduran,ditches,polygon,eindhoven,superstars,salient,argus,punitive,purana,alluvial,flaps,inefficient,retracted,advantageous,quang,andersson,danville,binghamton,symbolize,conclave,shaanxi,silica,interpersonal,adept,frans,pavilions,lubbock,equip,sunken,limburg,activates,prosecutions,corinthian,venerated,shootings,retreats,parapet,orissa,riviere,animations,parodied,offline,metaphysics,bluffs,plume,piety,fruition,subsidized,steeplechase,shanxi,eurasia,angled,forecasting,suffragan,ashram,larval,labyrinth,chronicler,summaries,trailed,merges,thunderstorms,filtered,formula_19,advertisers,alpes,informatics,parti,constituting,undisputed,certifications,javascript,molten,sclerosis,rumoured,boulogne,hmong,lewes,breslau,notts,bantu,ducal,messengers,radars,nightclubs,bantamweight,carnatic,kaunas,fraternal,triggering,controversially,londonderry,visas,scarcity,offaly,uprisings,repelled,corinthians,pretext,kuomintang,kielce,empties,matriculated,pneumatic,expos,agile,treatises,midpoint,prehistory,oncology,subsets,hydra,hypertension,axioms,wabash,reiterated,swapped,achieves,premio,ageing,overture,curricula,challengers,subic,selangor,liners,frontline,shutter,validated,normalized,entertainers,molluscs,maharaj,allegation,youngstown,synth,thoroughfare,regionally,pillai,transcontinental,pedagogical,riemann,colonia,easternmost,tentatively,profiled,herefordshire,nativity,meuse,nucleotide,inhibits,huntingdon,throughput,recorders,conceding,domed,homeowners,centric,gabled,canoes,fringes,breeder,subtitled,fluoride,haplogroup,zionism,izmir,phylogeny,kharkiv,romanticism,adhesion,usaaf,delegations,lorestan,whalers,biathlon,vaulted,mathematically,pesos,skirmishes,heisman,kalamazoo,gesellschaft,launceston,interacts,quadruple,kowloon,psychoanalysis,toothed,ideologies,navigational,valence,induces,lesotho,frieze,rigging,undercarriage,explorations,spoof,eucharist,profitability,virtuoso,recitals,subterranean,sizeable,herodotus,subscriber,huxley,pivot,forewing,warring,boleslaw,bharatiya,suffixes,trois,percussionist,downturn,garrisons,philosophies,chants,mersin,mentored,dramatist,guilds,frameworks,thermodynamic,venomous,mehmed,assembling,rabbinic,hegemony,replicas,enlargement,claimant,retitled,utica,dumfries,metis,deter,assortment,tubing,afflicted,weavers,rupture,ornamentation,transept,salvaged,upkeep,callsign,rajput,stevenage,trimmed,intracellular,synchronization,consular,unfavorable,royalists,goldwyn,fasting,hussars,doppler,obscurity,currencies,amiens,acorn,tagore,townsville,gaussian,migrations,porta,anjou,graphite,seaport,monographs,gladiators,metrics,calligraphy,sculptural,swietokrzyskie,tolombeh,eredivisie,shoals,queries,carts,exempted,fiberglass,mirrored,bazar,progeny,formalized,mukherjee,professed,amazon.com,cathode,moreton,removable,mountaineers,nagano,transplantation,augustinian,steeply,epilogue,adapter,decisively,accelerating,mediaeval,substituting,tasman,devonshire,litres,enhancements,himmler,nephews,bypassing,imperfect,argentinian,reims,integrates,sochi,ascii,licences,niches,surgeries,fables,versatility,indra,footpath,afonso,crore,evaporation,encodes,shelling,conformity,simplify,updating,quotient,overt,firmware,umpires,architectures,eocene,conservatism,secretion,embroidery,f.c..,tuvalu,mosaics,shipwreck,prefectural,cohort,grievances,garnering,centerpiece,apoptosis,djibouti,bethesda,formula_20,shonen,richland,justinian,dormitories,meteorite,reliably,obtains,pedagogy,hardness,cupola,manifolds,amplification,steamers,familial,dumbarton,jerzy,genital,maidstone,salinity,grumman,signifies,presbytery,meteorology,procured,aegis,streamed,deletion,nuestra,mountaineering,accords,neuronal,khanate,grenoble,axles,dispatches,tokens,turku,auctions,propositions,planters,proclaiming,recommissioned,stravinsky,obverse,bombarded,waged,saviour,massacred,reformist,purportedly,resettlement,ravenna,embroiled,minden,revitalization,hikers,bridging,torpedoed,depletion,nizam,affectionately,latitudes,lubeck,spore,polymerase,aarhus,nazism,101st,buyout,galerie,diets,overflow,motivational,renown,brevet,deriving,melee,goddesses,demolish,amplified,tamworth,retake,brokerage,beneficiaries,henceforth,reorganised,silhouette,browsers,pollutants,peron,lichfield,encircled,defends,bulge,dubbing,flamenco,coimbatore,refinement,enshrined,grizzlies,capacitor,usefulness,evansville,interscholastic,rhodesian,bulletins,diamondbacks,rockers,platted,medalists,formosa,transporter,slabs,guadeloupe,disparate,concertos,violins,regaining,mandible,untitled,agnostic,issuance,hamiltonian,brampton,srpska,homology,downgraded,florentine,epitaph,kanye,rallying,analysed,grandstand,infinitely,antitrust,plundered,modernity,colspan=3|total,amphitheatre,doric,motorists,yemeni,carnivorous,probabilities,prelate,struts,scrapping,bydgoszcz,pancreatic,signings,predicts,compendium,ombudsman,apertura,appoints,rebbe,stereotypical,valladolid,clustered,touted,plywood,inertial,kettering,curving,d'honneur,housewives,grenadier,vandals,barbarossa,necked,waltham,reputedly,jharkhand,cistercian,pursues,viscosity,organiser,cloister,islet,stardom,moorish,himachal,strives,scripps,staggered,blasts,westwards,millimeters,angolan,hubei,agility,admirals,mordellistena,coincides,platte,vehicular,cordillera,riffs,schoolteacher,canaan,acoustics,tinged,reinforcing,concentrates,daleks,monza,selectively,musik,polynesia,exporter,reviving,macclesfield,bunkers,ballets,manors,caudal,microbiology,primes,unbroken,outcry,flocks,pakhtunkhwa,abelian,toowoomba,luminous,mould,appraisal,leuven,experimentally,interoperability,hideout,perak,specifying,knighthood,vasily,excerpt,computerized,niels,networked,byzantium,reaffirmed,geographer,obscured,fraternities,mixtures,allusion,accra,lengthened,inquest,panhandle,pigments,revolts,bluetooth,conjugate,overtaken,foray,coils,breech,streaks,impressionist,mendelssohn,intermediary,panned,suggestive,nevis,upazila,rotunda,mersey,linnaeus,anecdotes,gorbachev,viennese,exhaustive,moldavia,arcades,irrespective,orator,diminishing,predictive,cohesion,polarized,montage,avian,alienation,conus,jaffna,urbanization,seawater,extremity,editorials,scrolling,dreyfus,traverses,topographic,gunboats,extratropical,normans,correspondents,recognises,millennia,filtration,ammonium,voicing,complied,prefixes,diplomas,figurines,weakly,gated,oscillator,lucerne,embroidered,outpatient,airframe,fractional,disobedience,quarterbacks,formula_21,shinto,chiapas,epistle,leakage,pacifist,avignon,penrith,renders,mantua,screenplays,gustaf,tesco,alphabetically,rations,discharges,headland,tapestry,manipur,boolean,mediator,ebenezer,subchannel,fable,bestselling,ateneo,trademarks,recurrence,dwarfs,britannica,signifying,vikram,mediate,condensation,censuses,verbandsgemeinde,cartesian,sprang,surat,britons,chelmsford,courtenay,statistic,retina,abortions,liabilities,closures,mississauga,skyscrapers,saginaw,compounded,aristocrat,msnbc,stavanger,septa,interpretive,hinder,visibly,seeding,shutouts,irregularly,quebecois,footbridge,hydroxide,implicitly,lieutenants,simplex,persuades,midshipman,heterogeneous,officiated,crackdown,lends,tartu,altars,fractions,dissidents,tapered,modernisation,scripting,blazon,aquaculture,thermodynamics,sistan,hasidic,bellator,pavia,propagated,theorized,bedouin,transnational,mekong,chronicled,declarations,kickstarter,quotas,runtime,duquesne,broadened,clarendon,brownsville,saturation,tatars,electorates,malayan,replicated,observable,amphitheater,endorsements,referral,allentown,mormons,pantomime,eliminates,typeface,allegorical,varna,conduction,evoke,interviewer,subordinated,uyghur,landscaped,conventionally,ascend,edifice,postulated,hanja,whitewater,embarking,musicologist,tagalog,frontage,paratroopers,hydrocarbons,transliterated,nicolae,viewpoints,surrealist,asheville,falklands,hacienda,glide,opting,zimbabwean,discal,mortgages,nicaraguan,yadav,ghosh,abstracted,castilian,compositional,cartilage,intergovernmental,forfeited,importation,rapping,artes,republika,narayana,condominium,frisian,bradman,duality,marche,extremist,phosphorylation,genomes,allusions,valencian,habeas,ironworks,multiplex,harpsichord,emigrate,alternated,breda,waffen,smartphones,familiarity,regionalliga,herbaceous,piping,dilapidated,carboniferous,xviii,critiques,carcinoma,sagar,chippewa,postmodern,neapolitan,excludes,notoriously,distillation,tungsten,richness,installments,monoxide,chand,privatisation,molded,maths,projectiles,luoyang,epirus,lemma,concentric,incline,erroneous,sideline,gazetted,leopards,fibres,renovate,corrugated,unilateral,repatriation,orchestration,saeed,rockingham,loughborough,formula_22,bandleader,appellation,openness,nanotechnology,massively,tonnage,dunfermline,exposes,moored,ridership,motte,eurobasket,majoring,feats,silla,laterally,playlist,downwards,methodologies,eastbourne,daimyo,cellulose,leyton,norwalk,oblong,hibernian,opaque,insular,allegory,camogie,inactivation,favoring,masterpieces,rinpoche,serotonin,portrayals,waverley,airliner,longford,minimalist,outsourcing,excise,meyrick,qasim,organisational,synaptic,farmington,gorges,scunthorpe,zoned,tohoku,librarians,davao,decor,theatrically,brentwood,pomona,acquires,planter,capacitors,synchronous,skateboarding,coatings,turbocharged,ephraim,capitulation,scoreboard,hebrides,ensues,cereals,ailing,counterpoint,duplication,antisemitic,clique,aichi,oppressive,transcendental,incursions,rename,renumbering,powys,vestry,bitterly,neurology,supplanted,affine,susceptibility,orbiter,activating,overlaps,ecoregion,raman,canoer,darfur,microorganisms,precipitated,protruding,torun,anthropologists,rennes,kangaroos,parliamentarians,edits,littoral,archived,begum,rensselaer,microphones,ypres,empower,etruscan,wisden,montfort,calibration,isomorphic,rioting,kingship,verbally,smyrna,cohesive,canyons,fredericksburg,rahul,relativistic,micropolitan,maroons,industrialized,henchmen,uplift,earthworks,mahdi,disparity,cultured,transliteration,spiny,fragmentary,extinguished,atypical,inventors,biosynthesis,heralded,curacao,anomalies,aeroplane,surya,mangalore,maastricht,ashkenazi,fusiliers,hangzhou,emitting,monmouthshire,schwarzenegger,ramayana,peptides,thiruvananthapuram,alkali,coimbra,budding,reasoned,epithelial,harbors,rudimentary,classically,parque,ealing,crusades,rotations,riparian,pygmy,inertia,revolted,microprocessor,calendars,solvents,kriegsmarine,accademia,cheshmeh,yoruba,ardabil,mitra,genomic,notables,propagate,narrates,univision,outposts,polio,birkenhead,urinary,crocodiles,pectoral,barrymore,deadliest,rupees,chaim,protons,comical,astrophysics,unifying,formula_23,vassals,cortical,audubon,pedals,tenders,resorted,geophysical,lenders,recognising,tackling,lanarkshire,doctrinal,annan,combating,guangxi,estimating,selectors,tribunals,chambered,inhabiting,exemptions,curtailed,abbasid,kandahar,boron,bissau,150th,codenamed,wearer,whorl,adhered,subversive,famer,smelting,inserting,mogadishu,zoologist,mosul,stumps,almanac,olympiacos,stamens,participatory,cults,honeycomb,geologists,dividend,recursive,skiers,reprint,pandemic,liber,percentages,adversely,stoppage,chieftains,tubingen,southerly,overcrowding,unorganized,hangars,fulfil,hails,cantilever,woodbridge,pinus,wiesbaden,fertilization,fluorescence,enhances,plenary,troublesome,episodic,thrissur,kickboxing,allele,staffing,garda,televisions,philatelic,spacetime,bullpen,oxides,leninist,enrolling,inventive,truro,compatriot,ruskin,normative,assay,gotha,murad,illawarra,gendarmerie,strasse,mazraeh,rebounded,fanfare,liaoning,rembrandt,iranians,emirate,governs,latency,waterfowl,chairmen,katowice,aristocrats,eclipsed,sentient,sonatas,interplay,sacking,decepticons,dynamical,arbitrarily,resonant,petar,velocities,alludes,wastes,prefectures,belleville,sensibility,salvadoran,consolidating,medicaid,trainees,vivekananda,molar,porous,upload,youngster,infused,doctorates,wuhan,annihilation,enthusiastically,gamespot,kanpur,accumulating,monorail,operetta,tiling,sapporo,finns,calvinist,hydrocarbon,sparrows,orienteering,cornelis,minster,vuelta,plebiscite,embraces,panchayats,focussed,remediation,brahman,olfactory,reestablished,uniqueness,northumbria,rwandan,predominately,abode,ghats,balances,californian,uptake,bruges,inert,westerns,reprints,cairn,yarra,resurfaced,audible,rossini,regensburg,italiana,fleshy,irrigated,alerts,yahya,varanasi,marginalized,expatriates,cantonment,normandie,sahitya,directives,rounder,hulls,fictionalized,constables,inserts,hipped,potosi,navies,biologists,canteen,husbandry,augment,fortnight,assamese,kampala,o'keefe,paleolithic,bluish,promontory,consecutively,striving,niall,reuniting,dipole,friendlies,disapproved,thrived,netflix,liberian,dielectric,medway,strategist,sankt,pickups,hitters,encode,rerouted,claimants,anglesey,partitioned,cavan,flutes,reared,repainted,armaments,bowed,thoracic,balliol,piero,chaplains,dehestan,sender,junkers,sindhi,sickle,dividends,metallurgy,honorific,berths,namco,springboard,resettled,gansu,copyrighted,criticizes,utopian,bendigo,ovarian,binomial,spaceflight,oratorio,proprietors,supergroup,duplicated,foreground,strongholds,revolved,optimize,layouts,westland,hurler,anthropomorphic,excelsior,merchandising,reeds,vetoed,cryptography,hollyoaks,monash,flooring,ionian,resilience,johnstown,resolves,lawmakers,alegre,wildcards,intolerance,subculture,selector,slums,formulate,bayonet,istvan,restitution,interchangeably,awakens,rostock,serpentine,oscillation,reichstag,phenotype,recessed,piotr,annotated,preparedness,consultations,clausura,preferential,euthanasia,genoese,outcrops,freemasonry,geometrical,genesee,islets,prometheus,panamanian,thunderbolt,terraced,stara,shipwrecks,futebol,faroese,sharqi,aldermen,zeitung,unify,formula_24,humanism,syntactic,earthen,blyth,taxed,rescinded,suleiman,cymru,dwindled,vitality,superieure,resupply,adolphe,ardennes,rajiv,profiling,olympique,gestation,interfaith,milosevic,tagline,funerary,druze,silvery,plough,shrubland,relaunch,disband,nunatak,minimizing,excessively,waned,attaching,luminosity,bugle,encampment,electrostatic,minesweeper,dubrovnik,rufous,greenock,hochschule,assyrians,extracting,malnutrition,priya,attainment,anhui,connotations,predicate,seabirds,deduced,pseudonyms,gopal,plovdiv,refineries,imitated,kwazulu,terracotta,tenets,discourses,brandeis,whigs,dominions,pulmonate,landslides,tutors,determinant,richelieu,farmstead,tubercles,technicolor,hegel,redundancy,greenpeace,shortening,mules,distilled,xxiii,fundamentalist,acrylic,outbuildings,lighted,corals,signaled,transistors,cavite,austerity,76ers,exposures,dionysius,outlining,commutative,permissible,knowledgeable,howrah,assemblage,inhibited,crewmen,mbit/s,pyramidal,aberdeenshire,bering,rotates,atheism,howitzer,saone,lancet,fermented,contradicted,materiel,ofsted,numeric,uniformity,josephus,nazarene,kuwaiti,noblemen,pediment,emergent,campaigner,akademi,murcia,perugia,gallen,allsvenskan,finned,cavities,matriculation,rosters,twickenham,signatory,propel,readable,contends,artisan,flamboyant,reggio,italo,fumbles,widescreen,rectangle,centimetres,collaborates,envoys,rijeka,phonological,thinly,refractive,civilisation,reductase,cognate,dalhousie,monticello,lighthouses,jitsu,luneburg,socialite,fermi,collectible,optioned,marquee,jokingly,architecturally,kabir,concubine,nationalisation,watercolor,wicklow,acharya,pooja,leibniz,rajendra,nationalized,stalemate,bloggers,glutamate,uplands,shivaji,carolingian,bucuresti,dasht,reappears,muscat,functionally,formulations,hinged,hainan,catechism,autosomal,incremental,asahi,coeur,diversification,multilateral,fewest,recombination,finisher,harrogate,hangul,feasts,photovoltaic,paget,liquidity,alluded,incubation,applauded,choruses,malagasy,hispanics,bequest,underparts,cassava,kazimierz,gastric,eradication,mowtowr,tyrosine,archbishopric,e9e9e9,unproductive,uxbridge,hydrolysis,harbours,officio,deterministic,devonport,kanagawa,breaches,freetown,rhinoceros,chandigarh,janos,sanatorium,liberator,inequalities,agonist,hydrophobic,constructors,nagorno,snowboarding,welcomes,subscribed,iloilo,resuming,catalysts,stallions,jawaharlal,harriers,definitively,roughriders,hertford,inhibiting,elgar,randomized,incumbents,episcopate,rainforests,yangon,improperly,kemal,interpreters,diverged,uttarakhand,umayyad,phnom,panathinaikos,shabbat,diode,jiangxi,forbidding,nozzle,artistry,licensee,processions,staffs,decimated,expressionism,shingle,palsy,ontology,mahayana,maribor,sunil,hostels,edwardian,jetty,freehold,overthrew,eukaryotic,schuylkill,rawalpindi,sheath,recessive,ferenc,mandibles,berlusconi,confessor,convergent,ababa,slugging,rentals,sephardic,equivalently,collagen,markov,dynamically,hailing,depressions,sprawling,fairgrounds,indistinguishable,plutarch,pressurized,banff,coldest,braunschweig,mackintosh,sociedad,wittgenstein,tromso,airbase,lecturers,subtitle,attaches,purified,contemplated,dreamworks,telephony,prophetic,rockland,aylesbury,biscay,coherence,aleksandar,judoka,pageants,theses,homelessness,luthor,sitcoms,hinterland,fifths,derwent,privateers,enigmatic,nationalistic,instructs,superimposed,conformation,tricycle,dusan,attributable,unbeknownst,laptops,etching,archbishops,ayatollah,cranial,gharbi,interprets,lackawanna,abingdon,saltwater,tories,lender,minaj,ancillary,ranching,pembrokeshire,topographical,plagiarism,murong,marque,chameleon,assertions,infiltrated,guildhall,reverence,schenectady,formula_25,kollam,notary,mexicana,initiates,abdication,basra,theorems,ionization,dismantling,eared,censors,budgetary,numeral,verlag,excommunicated,distinguishable,quarried,cagliari,hindustan,symbolizing,watertown,descartes,relayed,enclosures,militarily,sault,devolved,dalian,djokovic,filaments,staunton,tumour,curia,villainous,decentralized,galapagos,moncton,quartets,onscreen,necropolis,brasileiro,multipurpose,alamos,comarca,jorgen,concise,mercia,saitama,billiards,entomologist,montserrat,lindbergh,commuting,lethbridge,phoenician,deviations,anaerobic,denouncing,redoubt,fachhochschule,principalities,negros,announcers,seconded,parrots,konami,revivals,approving,devotee,riyadh,overtook,morecambe,lichen,expressionist,waterline,silverstone,geffen,sternites,aspiration,behavioural,grenville,tripura,mediums,genders,pyotr,charlottesville,sacraments,programmable,ps100,shackleton,garonne,sumerian,surpass,authorizing,interlocking,lagoons,voiceless,advert,steeple,boycotted,alouettes,yosef,oxidative,sassanid,benefiting,sayyid,nauru,predetermined,idealism,maxillary,polymerization,semesters,munchen,conor,outfitted,clapham,progenitor,gheorghe,observational,recognitions,numerically,colonized,hazrat,indore,contaminants,fatality,eradicate,assyria,convocation,cameos,skillful,skoda,corfu,confucius,overtly,ramadan,wollongong,placements,d.c..,permutation,contemporaneous,voltages,elegans,universitat,samar,plunder,dwindling,neuter,antonin,sinhala,campania,solidified,stanzas,fibrous,marburg,modernize,sorcery,deutscher,florets,thakur,disruptive,infielder,disintegration,internazionale,vicariate,effigy,tripartite,corrective,klamath,environs,leavenworth,sandhurst,workmen,compagnie,hoseynabad,strabo,palisades,ordovician,sigurd,grandsons,defection,viacom,sinhalese,innovator,uncontrolled,slavonic,indexes,refrigeration,aircrew,superbike,resumption,neustadt,confrontations,arras,hindenburg,ripon,embedding,isomorphism,dwarves,matchup,unison,lofty,argos,louth,constitutionally,transitive,newington,facelift,degeneration,perceptual,aviators,enclosing,igneous,symbolically,academician,constitutionality,iso/iec,sacrificial,maturation,apprentices,enzymology,naturalistic,hajji,arthropods,abbess,vistula,scuttled,gradients,pentathlon,etudes,freedmen,melaleuca,thrice,conductive,sackville,franciscans,stricter,golds,kites,worshiped,monsignor,trios,orally,tiered,primacy,bodywork,castleford,epidemics,alveolar,chapelle,chemists,hillsboro,soulful,warlords,ngati,huguenot,diurnal,remarking,luger,motorways,gauss,jahan,cutoff,proximal,bandai,catchphrase,jonubi,ossetia,codename,codice_2,throated,itinerant,chechnya,riverfront,leela,evoked,entailed,zamboanga,rejoining,circuitry,haymarket,khartoum,feuds,braced,miyazaki,mirren,lubusz,caricature,buttresses,attrition,characterizes,widnes,evanston,materialism,contradictions,marist,midrash,gainsborough,ulithi,turkmen,vidya,escuela,patrician,inspirations,reagent,premierships,humanistic,euphrates,transitioning,belfry,zedong,adaption,kaliningrad,lobos,epics,waiver,coniferous,polydor,inductee,refitted,moraine,unsatisfactory,worsening,polygamy,rajya,nested,subgenre,broadside,stampeders,lingua,incheon,pretender,peloton,persuading,excitation,multan,predates,tonne,brackish,autoimmune,insulated,podcasts,iraqis,bodybuilding,condominiums,midlothian,delft,debtor,asymmetrical,lycaenidae,forcefully,pathogenic,tamaulipas,andaman,intravenous,advancements,senegalese,chronologically,realigned,inquirer,eusebius,dekalb,additives,shortlist,goldwater,hindustani,auditing,caterpillars,pesticide,nakhon,ingestion,lansdowne,traditionalist,northland,thunderbirds,josip,nominating,locale,ventricular,animators,verandah,epistles,surveyors,anthems,dredd,upheaval,passaic,anatolian,svalbard,associative,floodplain,taranaki,estuaries,irreducible,beginners,hammerstein,allocate,coursework,secreted,counteract,handwritten,foundational,passover,discoverer,decoding,wares,bourgeoisie,playgrounds,nazionale,abbreviations,seanad,golan,mishra,godavari,rebranding,attendances,backstory,interrupts,lettered,hasbro,ultralight,hormozgan,armee,moderne,subdue,disuse,improvisational,enrolment,persists,moderated,carinthia,hatchback,inhibitory,capitalized,anatoly,abstracts,albemarle,bergamo,insolvency,sentai,cellars,walloon,joked,kashmiri,dirac,materialized,renomination,homologous,gusts,eighteens,centrifugal,storied,baluchestan,formula_26,poincare,vettel,infuriated,gauges,streetcars,vedanta,stately,liquidated,goguryeo,swifts,accountancy,levee,acadian,hydropower,eustace,comintern,allotment,designating,torsion,molding,irritation,aerobic,halen,concerted,plantings,garrisoned,gramophone,cytoplasm,onslaught,requisitioned,relieving,genitive,centrist,jeong,espanola,dissolving,chatterjee,sparking,connaught,varese,arjuna,carpathian,empowering,meteorologist,decathlon,opioid,hohenzollern,fenced,ibiza,avionics,footscray,scrum,discounts,filament,directories,a.f.c,stiffness,quaternary,adventurers,transmits,harmonious,taizong,radiating,germantown,ejection,projectors,gaseous,nahuatl,vidyalaya,nightlife,redefined,refuted,destitute,arista,potters,disseminated,distanced,jamboree,kaohsiung,tilted,lakeshore,grained,inflicting,kreis,novelists,descendents,mezzanine,recast,fatah,deregulation,ac/dc,australis,kohgiluyeh,boreal,goths,authoring,intoxicated,nonpartisan,theodosius,pyongyang,shree,boyhood,sanfl,plenipotentiary,photosynthesis,presidium,sinaloa,honshu,texan,avenida,transmembrane,malays,acropolis,catalunya,vases,inconsistencies,methodists,quell,suisse,banat,simcoe,cercle,zealanders,discredited,equine,sages,parthian,fascists,interpolation,classifying,spinoff,yehuda,cruised,gypsum,foaled,wallachia,saraswati,imperialist,seabed,footnotes,nakajima,locales,schoolmaster,drosophila,bridgehead,immanuel,courtier,bookseller,niccolo,stylistically,portmanteau,superleague,konkani,millimetres,arboreal,thanjavur,emulation,sounders,decompression,commoners,infusion,methodological,osage,rococo,anchoring,bayreuth,formula_27,abstracting,symbolized,bayonne,electrolyte,rowed,corvettes,traversing,editorship,sampler,presidio,curzon,adirondack,swahili,rearing,bladed,lemur,pashtun,behaviours,bottling,zaire,recognisable,systematics,leeward,formulae,subdistricts,smithfield,vijaya,buoyancy,boosting,cantonal,rishi,airflow,kamakura,adana,emblems,aquifer,clustering,husayn,woolly,wineries,montessori,turntable,exponentially,caverns,espoused,pianists,vorpommern,vicenza,latterly,o'rourke,williamstown,generale,kosice,duisburg,poirot,marshy,mismanagement,mandalay,dagenham,universes,chiral,radiated,stewards,vegan,crankshaft,kyrgyz,amphibian,cymbals,infrequently,offenbach,environmentalist,repatriated,permutations,midshipmen,loudoun,refereed,bamberg,ornamented,nitric,selim,translational,dorsum,annunciation,gippsland,reflector,informational,regia,reactionary,ahmet,weathering,erlewine,legalized,berne,occupant,divas,manifests,analyzes,disproportionate,mitochondria,totalitarian,paulista,interscope,anarcho,correlate,brookfield,elongate,brunel,ordinal,precincts,volatility,equaliser,hittite,somaliland,ticketing,monochrome,ubuntu,chhattisgarh,titleholder,ranches,referendums,blooms,accommodates,merthyr,religiously,ryukyu,tumultuous,checkpoints,anode,mi'kmaq,cannonball,punctuation,remodelled,assassinations,criminology,alternates,yonge,pixar,namibian,piraeus,trondelag,hautes,lifeboats,shoal,atelier,vehemently,sadat,postcode,jainism,lycoming,undisturbed,lutherans,genomics,popmatters,tabriz,isthmian,notched,autistic,horsham,mites,conseil,bloomsbury,seung,cybertron,idris,overhauled,disbandment,idealized,goldfields,worshippers,lobbyist,ailments,paganism,herbarium,athenians,messerschmitt,faraday,entangled,'olya,untreated,criticising,howitzers,parvati,lobed,debussy,atonement,tadeusz,permeability,mueang,sepals,degli,optionally,fuelled,follies,asterisk,pristina,lewiston,congested,overpass,affixed,pleads,telecasts,stanislaus,cryptographic,friesland,hamstring,selkirk,antisubmarine,inundated,overlay,aggregates,fleur,trolleybus,sagan,ibsen,inductees,beltway,tiled,ladders,cadbury,laplace,ascetic,micronesia,conveying,bellingham,cleft,batches,usaid,conjugation,macedon,assisi,reappointed,brine,jinnah,prairies,screenwriting,oxidized,despatches,linearly,fertilizers,brazilians,absorbs,wagga,modernised,scorsese,ashraf,charlestown,esque,habitable,nizhny,lettres,tuscaloosa,esplanade,coalitions,carbohydrates,legate,vermilion,standardised,galleria,psychoanalytic,rearrangement,substation,competency,nationalised,reshuffle,reconstructions,mehdi,bougainville,receivership,contraception,enlistment,conducive,aberystwyth,solicitors,dismisses,fibrosis,montclair,homeowner,surrealism,s.h.i.e.l.d,peregrine,compilers,1790s,parentage,palmas,rzeszow,worldview,eased,svenska,housemate,bundestag,originator,enlisting,outwards,reciprocity,formula_28,carbohydrate,democratically,firefighting,romagna,acknowledgement,khomeini,carbide,quests,vedas,characteristically,guwahati,brixton,unintended,brothels,parietal,namur,sherbrooke,moldavian,baruch,milieu,undulating,laurier,entre,dijon,ethylene,abilene,heracles,paralleling,ceres,dundalk,falun,auspicious,chisinau,polarity,foreclosure,templates,ojibwe,punic,eriksson,biden,bachchan,glaciation,spitfires,norsk,nonviolent,heidegger,algonquin,capacitance,cassettes,balconies,alleles,airdate,conveys,replays,classifies,infrequent,amine,cuttings,rarer,woking,olomouc,amritsar,rockabilly,illyrian,maoist,poignant,tempore,stalinist,segmented,bandmate,mollusc,muhammed,totalled,byrds,tendered,endogenous,kottayam,aisne,oxidase,overhears,illustrators,verve,commercialization,purplish,directv,moulded,lyttelton,baptismal,captors,saracens,georgios,shorten,polity,grids,fitzwilliam,sculls,impurities,confederations,akhtar,intangible,oscillations,parabolic,harlequin,maulana,ovate,tanzanian,singularity,confiscation,qazvin,speyer,phonemes,overgrown,vicarage,gurion,undocumented,niigata,thrones,preamble,stave,interment,liiga,ataturk,aphrodite,groupe,indentured,habsburgs,caption,utilitarian,ozark,slovenes,reproductions,plasticity,serbo,dulwich,castel,barbuda,salons,feuding,lenape,wikileaks,swamy,breuning,shedding,afield,superficially,operationally,lamented,okanagan,hamadan,accolade,furthering,adolphus,fyodor,abridged,cartoonists,pinkish,suharto,cytochrome,methylation,debit,colspan=9|,refine,taoist,signalled,herding,leaved,bayan,fatherland,rampart,sequenced,negation,storyteller,occupiers,barnabas,pelicans,nadir,conscripted,railcars,prerequisite,furthered,columba,carolinas,markup,gwalior,franche,chaco,eglinton,ramparts,rangoon,metabolites,pollination,croat,televisa,holyoke,testimonial,setlist,safavid,sendai,georgians,shakespearean,galleys,regenerative,krzysztof,overtones,estado,barbary,cherbourg,obispo,sayings,composites,sainsbury,deliberation,cosmological,mahalleh,embellished,ascap,biala,pancras,calumet,grands,canvases,antigens,marianas,defenseman,approximated,seedlings,soren,stele,nuncio,immunology,testimonies,glossary,recollections,suitability,tampere,venous,cohomology,methanol,echoing,ivanovich,warmly,sterilization,imran,multiplying,whitechapel,undersea,xuanzong,tacitus,bayesian,roundhouse,correlations,rioters,molds,fiorentina,bandmates,mezzo,thani,guerilla,200th,premiums,tamils,deepwater,chimpanzees,tribesmen,selwyn,globo,turnovers,punctuated,erode,nouvelle,banbury,exponents,abolishing,helical,maimonides,endothelial,goteborg,infield,encroachment,cottonwood,mazowiecki,parable,saarbrucken,reliever,epistemology,artistes,enrich,rationing,formula_29,palmyra,subfamilies,kauai,zoran,fieldwork,arousal,creditor,friuli,celts,comoros,equated,escalation,negev,tallied,inductive,anion,netanyahu,mesoamerican,lepidoptera,aspirated,remit,westmorland,italic,crosse,vaclav,fuego,owain,balmain,venetians,ethnicities,deflected,ticino,apulia,austere,flycatcher,reprising,repressive,hauptbahnhof,subtype,ophthalmology,summarizes,eniwetok,colonisation,subspace,nymphalidae,earmarked,tempe,burnet,crests,abbots,norwegians,enlarge,ashoka,frankfort,livorno,malware,renters,singly,iliad,moresby,rookies,gustavus,affirming,alleges,legume,chekhov,studded,abdicated,suzhou,isidore,townsite,repayment,quintus,yankovic,amorphous,constructor,narrowing,industrialists,tanganyika,capitalization,connective,mughals,rarities,aerodynamics,worthing,antalya,diagnostics,shaftesbury,thracian,obstetrics,benghazi,multiplier,orbitals,livonia,roscommon,intensify,ravel,oaths,overseer,locomotion,necessities,chickasaw,strathclyde,treviso,erfurt,aortic,contemplation,accrington,markazi,predeceased,hippocampus,whitecaps,assemblyman,incursion,ethnography,extraliga,reproducing,directorship,benzene,byway,stupa,taxable,scottsdale,onondaga,favourably,countermeasures,lithuanians,thatched,deflection,tarsus,consuls,annuity,paralleled,contextual,anglian,klang,hoisted,multilingual,enacting,samaj,taoiseach,carthaginian,apologised,hydrology,entrant,seamless,inflorescences,mugabe,westerners,seminaries,wintering,penzance,mitre,sergeants,unoccupied,delimitation,discriminate,upriver,abortive,nihon,bessarabia,calcareous,buffaloes,patil,daegu,streamline,berks,chaparral,laity,conceptions,typified,kiribati,threaded,mattel,eccentricity,signified,patagonia,slavonia,certifying,adnan,astley,sedition,minimally,enumerated,nikos,goalless,walid,narendra,causa,missoula,coolant,dalek,outcrop,hybridization,schoolchildren,peasantry,afghans,confucianism,shahr,gallic,tajik,kierkegaard,sauvignon,commissar,patriarchs,tuskegee,prussians,laois,ricans,talmudic,officiating,aesthetically,baloch,antiochus,separatists,suzerainty,arafat,shading,u.s.c,chancellors,inc..,toolkit,nepenthes,erebidae,solicited,pratap,kabbalah,alchemist,caltech,darjeeling,biopic,spillway,kaiserslautern,nijmegen,bolstered,neath,pahlavi,eugenics,bureaus,retook,northfield,instantaneous,deerfield,humankind,selectivity,putative,boarders,cornhuskers,marathas,raikkonen,aliabad,mangroves,garages,gulch,karzai,poitiers,chernobyl,thane,alexios,belgrano,scion,solubility,urbanized,executable,guizhou,nucleic,tripled,equalled,harare,houseguests,potency,ghazi,repeater,overarching,regrouped,broward,ragtime,d'art,nandi,regalia,campsites,mamluk,plating,wirral,presumption,zenit,archivist,emmerdale,decepticon,carabidae,kagoshima,franconia,guarani,formalism,diagonally,submarginal,denys,walkways,punts,metrolink,hydrographic,droplets,upperside,martyred,hummingbird,antebellum,curiously,mufti,friary,chabad,czechs,shaykh,reactivity,berklee,turbonilla,tongan,sultans,woodville,unlicensed,enmity,dominicans,operculum,quarrying,watercolour,catalyzed,gatwick,'what,mesozoic,auditors,shizuoka,footballing,haldane,telemundo,appended,deducted,disseminate,o'shea,pskov,abrasive,entente,gauteng,calicut,lemurs,elasticity,suffused,scopula,staining,upholding,excesses,shostakovich,loanwords,naidu,championnat,chromatography,boasting,goaltenders,engulfed,salah,kilogram,morristown,shingles,shi'a,labourer,renditions,frantisek,jekyll,zonal,nanda,sheriffs,eigenvalues,divisione,endorsing,ushered,auvergne,cadres,repentance,freemasons,utilising,laureates,diocletian,semiconductors,o'grady,vladivostok,sarkozy,trackage,masculinity,hydroxyl,mervyn,muskets,speculations,gridiron,opportunistic,mascots,aleutian,fillies,sewerage,excommunication,borrowers,capillary,trending,sydenham,synthpop,rajah,cagayan,deportes,kedah,faure,extremism,michoacan,levski,culminates,occitan,bioinformatics,unknowingly,inciting,emulated,footpaths,piacenza,dreadnought,viceroyalty,oceanographic,scouted,combinatorial,ornithologist,cannibalism,mujahideen,independiente,cilicia,hindwing,minimized,odeon,gyorgy,rubles,purchaser,collieries,kickers,interurban,coiled,lynchburg,respondent,plzen,detractors,etchings,centering,intensification,tomography,ranjit,warblers,retelling,reinstatement,cauchy,modulus,redirected,evaluates,beginner,kalateh,perforated,manoeuvre,scrimmage,internships,megawatts,mottled,haakon,tunbridge,kalyan,summarised,sukarno,quetta,canonized,henryk,agglomeration,coahuila,diluted,chiropractic,yogyakarta,talladega,sheik,cation,halting,reprisals,sulfuric,musharraf,sympathizers,publicised,arles,lectionary,fracturing,startups,sangha,latrobe,rideau,ligaments,blockading,cremona,lichens,fabaceae,modulated,evocative,embodies,battersea,indistinct,altai,subsystem,acidity,somatic,formula_30,tariq,rationality,sortie,ashlar,pokal,cytoplasmic,valour,bangla,displacing,hijacking,spectrometry,westmeath,weill,charing,goias,revolvers,individualized,tenured,nawaz,piquet,chanted,discard,bernd,phalanx,reworking,unilaterally,subclass,yitzhak,piloting,circumvent,disregarded,semicircular,viscous,tibetans,endeavours,retaliated,cretan,vienne,workhouse,sufficiency,aurangzeb,legalization,lipids,expanse,eintracht,sanjak,megas,125th,bahraini,yakima,eukaryotes,thwart,affirmation,peloponnese,retailing,carbonyl,chairwoman,macedonians,dentate,rockaway,correctness,wealthier,metamorphic,aragonese,fermanagh,pituitary,schrodinger,evokes,spoiler,chariots,akita,genitalia,combe,confectionery,desegregation,experiential,commodores,persepolis,viejo,restorations,virtualization,hispania,printmaking,stipend,yisrael,theravada,expended,radium,tweeted,polygonal,lippe,charente,leveraged,cutaneous,fallacy,fragrant,bypasses,elaborately,rigidity,majid,majorca,kongo,plasmodium,skits,audiovisual,eerste,staircases,prompts,coulthard,northwestward,riverdale,beatrix,copyrights,prudential,communicates,mated,obscenity,asynchronous,analyse,hansa,searchlight,farnborough,patras,asquith,qarah,contours,fumbled,pasteur,redistributed,almeria,sanctuaries,jewry,israelite,clinicians,koblenz,bookshop,affective,goulburn,panelist,sikorsky,cobham,mimics,ringed,portraiture,probabilistic,girolamo,intelligible,andalusian,jalal,athenaeum,eritrean,auxiliaries,pittsburg,devolution,sangam,isolating,anglers,cronulla,annihilated,kidderminster,synthesize,popularised,theophilus,bandstand,innumerable,chagrin,retroactively,weser,multiples,birdlife,goryeo,pawnee,grosser,grappling,tactile,ahmadinejad,turboprop,erdogan,matchday,proletarian,adhering,complements,austronesian,adverts,luminaries,archeology,impressionism,conifer,sodomy,interracial,platoons,lessen,postings,pejorative,registrations,cookery,persecutions,microbes,audits,idiosyncratic,subsp,suspensions,restricts,colouring,ratify,instrumentals,nucleotides,sulla,posits,bibliotheque,diameters,oceanography,instigation,subsumed,submachine,acceptor,legation,borrows,sedge,discriminated,loaves,insurers,highgate,detectable,abandons,kilns,sportscaster,harwich,iterations,preakness,arduous,tensile,prabhu,shortwave,philologist,shareholding,vegetative,complexities,councilors,distinctively,revitalize,automaton,amassing,montreux,khanh,surabaya,nurnberg,pernambuco,cuisines,charterhouse,firsts,tercera,inhabitant,homophobia,naturalism,einar,powerplant,coruna,entertainments,whedon,rajputs,raton,democracies,arunachal,oeuvre,wallonia,jeddah,trolleybuses,evangelism,vosges,kiowa,minimise,encirclement,undertakes,emigrant,beacons,deepened,grammars,publius,preeminent,seyyed,repechage,crafting,headingley,osteopathic,lithography,hotly,bligh,inshore,betrothed,olympians,formula_31,dissociation,trivandrum,arran,petrovic,stettin,disembarked,simplification,bronzes,philo,acrobatic,jonsson,conjectured,supercharged,kanto,detects,cheeses,correlates,harmonics,lifecycle,sudamericana,reservists,decayed,elitserien,parametric,113th,dusky,hogarth,modulo,symbiotic,monopolies,discontinuation,converges,southerners,tucuman,eclipses,enclaves,emits,famicom,caricatures,artistically,levelled,mussels,erecting,mouthparts,cunard,octaves,crucible,guardia,unusable,lagrangian,droughts,ephemeral,pashto,canis,tapering,sasebo,silurian,metallurgical,outscored,evolves,reissues,sedentary,homotopy,greyhawk,reagents,inheriting,onshore,tilting,rebuffed,reusable,naturalists,basingstoke,insofar,offensives,dravidian,curators,planks,rajan,isoforms,flagstaff,preside,globular,egalitarian,linkages,biographers,goalscorers,molybdenum,centralised,nordland,jurists,ellesmere,rosberg,hideyoshi,restructure,biases,borrower,scathing,redress,tunnelling,workflow,magnates,mahendra,dissenters,plethora,transcriptions,handicrafts,keyword,xi'an,petrograd,unser,prokofiev,90deg,madan,bataan,maronite,kearny,carmarthen,termini,consulates,disallowed,rockville,bowery,fanzine,docklands,bests,prohibitions,yeltsin,selassie,naturalization,realisation,dispensary,tribeca,abdulaziz,pocahontas,stagnation,pamplona,cuneiform,propagating,subsurface,christgau,epithelium,schwerin,lynching,routledge,hanseatic,upanishad,glebe,yugoslavian,complicity,endowments,girona,mynetworktv,entomology,plinth,ba'ath,supercup,torus,akkadian,salted,englewood,commandery,belgaum,prefixed,colorless,dartford,enthroned,caesarea,nominative,sandown,safeguards,hulled,formula_32,leamington,dieppe,spearhead,generalizations,demarcation,llanelli,masque,brickwork,recounting,sufism,strikingly,petrochemical,onslow,monologues,emigrating,anderlecht,sturt,hossein,sakhalin,subduction,novices,deptford,zanjan,airstrikes,coalfield,reintroduction,timbaland,hornby,messianic,stinging,universalist,situational,radiocarbon,strongman,rowling,saloons,traffickers,overran,fribourg,cambrai,gravesend,discretionary,finitely,archetype,assessor,pilipinas,exhumed,invocation,interacted,digitized,timisoara,smelter,teton,sexism,precepts,srinagar,pilsudski,carmelite,hanau,scoreline,hernando,trekking,blogging,fanbase,wielded,vesicles,nationalization,banja,rafts,motoring,luang,takeda,girder,stimulates,histone,sunda,nanoparticles,attains,jumpers,catalogued,alluding,pontus,ancients,examiners,shinkansen,ribbentrop,reimbursement,pharmacological,ramat,stringed,imposes,cheaply,transplanted,taiping,mizoram,looms,wallabies,sideman,kootenay,encased,sportsnet,revolutionized,tangier,benthic,runic,pakistanis,heatseekers,shyam,mishnah,presbyterians,stadt,sutras,straddles,zoroastrian,infer,fueling,gymnasts,ofcom,gunfight,journeyman,tracklist,oshawa,ps500,pa'in,mackinac,xiongnu,mississippian,breckinridge,freemason,bight,autoroute,liberalization,distantly,thrillers,solomons,presumptive,romanization,anecdotal,bohemians,unpaved,milder,concurred,spinners,alphabets,strenuous,rivieres,kerrang,mistreatment,dismounted,intensively,carlist,dancehall,shunting,pluralism,trafficked,brokered,bonaventure,bromide,neckar,designates,malian,reverses,sotheby,sorghum,serine,environmentalists,languedoc,consulship,metering,bankstown,handlers,militiamen,conforming,regularity,pondicherry,armin,capsized,consejo,capitalists,drogheda,granular,purged,acadians,endocrine,intramural,elicit,terns,orientations,miklos,omitting,apocryphal,slapstick,brecon,pliocene,affords,typography,emigre,tsarist,tomasz,beset,nishi,necessitating,encyclical,roleplaying,journeyed,inflow,sprints,progressives,novosibirsk,cameroonian,ephesus,speckled,kinshasa,freiherr,burnaby,dalmatian,torrential,rigor,renegades,bhakti,nurburgring,cosimo,convincingly,reverting,visayas,lewisham,charlottetown,charadriiformesfamily,transferable,jodhpur,converters,deepening,camshaft,underdeveloped,protease,polonia,uterine,quantify,tobruk,dealerships,narasimha,fortran,inactivity,1780s,victors,categorised,naxos,workstation,skink,sardinian,chalice,precede,dammed,sondheim,phineas,tutored,sourcing,uncompromising,placer,tyneside,courtiers,proclaims,pharmacies,hyogo,booksellers,sengoku,kursk,spectrometer,countywide,wielkopolski,bobsleigh,shetty,llywelyn,consistory,heretics,guinean,cliches,individualism,monolithic,imams,usability,bursa,deliberations,railings,torchwood,inconsistency,balearic,stabilizer,demonstrator,facet,radioactivity,outboard,educates,d'oyly,heretical,handover,jurisdictional,shockwave,hispaniola,conceptually,routers,unaffiliated,trentino,formula_33,cypriots,intervenes,neuchatel,formulating,maggiore,delisted,alcohols,thessaly,potable,estimator,suborder,fluency,mimicry,clergymen,infrastructures,rivals.com,baroda,subplot,majlis,plano,clinching,connotation,carinae,savile,intercultural,transcriptional,sandstones,ailerons,annotations,impresario,heinkel,scriptural,intermodal,astrological,ribbed,northeastward,posited,boers,utilise,kalmar,phylum,breakwater,skype,textured,guideline,azeri,rimini,massed,subsidence,anomalous,wolfsburg,polyphonic,accrediting,vodacom,kirov,captaining,kelantan,logie,fervent,eamon,taper,bundeswehr,disproportionately,divination,slobodan,pundits,hispano,kinetics,reunites,makati,ceasing,statistician,amending,chiltern,eparchy,riverine,melanoma,narragansett,pagans,raged,toppled,breaching,zadar,holby,dacian,ochre,velodrome,disparities,amphoe,sedans,webpage,williamsport,lachlan,groton,baring,swastika,heliport,unwillingness,razorbacks,exhibitors,foodstuffs,impacting,tithe,appendages,dermot,subtypes,nurseries,balinese,simulating,stary,remakes,mundi,chautauqua,geologically,stockade,hakka,dilute,kalimantan,pahang,overlapped,fredericton,baha'u'llah,jahangir,damping,benefactors,shomali,triumphal,cieszyn,paradigms,shielded,reggaeton,maharishi,zambian,shearing,golestan,mirroring,partitioning,flyover,songbook,incandescent,merrimack,huguenots,sangeet,vulnerabilities,trademarked,drydock,tantric,honoris,queenstown,labelling,iterative,enlists,statesmen,anglicans,herge,qinghai,burgundian,islami,delineated,zhuge,aggregated,banknote,qatari,suitably,tapestries,asymptotic,charleroi,majorities,pyramidellidae,leanings,climactic,tahir,ramsar,suppressor,revisionist,trawler,ernakulam,penicillium,categorization,slits,entitlement,collegium,earths,benefice,pinochet,puritans,loudspeaker,stockhausen,eurocup,roskilde,alois,jaroslav,rhondda,boutiques,vigor,neurotransmitter,ansar,malden,ferdinando,sported,relented,intercession,camberwell,wettest,thunderbolts,positional,oriel,cloverleaf,penalized,shoshone,rajkumar,completeness,sharjah,chromosomal,belgians,woolen,ultrasonic,sequentially,boleyn,mordella,microsystems,initiator,elachista,mineralogy,rhododendron,integrals,compostela,hamza,sawmills,stadio,berlioz,maidens,stonework,yachting,tappeh,myocardial,laborer,workstations,costumed,nicaea,lanark,roundtable,mashhad,nablus,algonquian,stuyvesant,sarkar,heroines,diwan,laments,intonation,intrigues,almaty,feuded,grandes,algarve,rehabilitate,macrophages,cruciate,dismayed,heuristic,eliezer,kozhikode,covalent,finalised,dimorphism,yaroslavl,overtaking,leverkusen,middlebury,feeders,brookings,speculates,insoluble,lodgings,jozsef,cysteine,shenyang,habilitation,spurious,brainchild,mtdna,comique,albedo,recife,partick,broadening,shahi,orientated,himalaya,swabia,palme,mennonites,spokeswoman,conscripts,sepulchre,chartres,eurozone,scaffold,invertebrate,parishad,bagan,heian,watercolors,basse,supercomputer,commences,tarragona,plainfield,arthurian,functor,identically,murex,chronicling,pressings,burrowing,histoire,guayaquil,goalkeeping,differentiable,warburg,machining,aeneas,kanawha,holocene,ramesses,reprisal,qingdao,avatars,turkestan,cantatas,besieging,repudiated,teamsters,equipping,hydride,ahmadiyya,euston,bottleneck,computations,terengganu,kalinga,stela,rediscovery,'this,azhar,stylised,karelia,polyethylene,kansai,motorised,lounges,normalization,calculators,1700s,goalkeepers,unfolded,commissary,cubism,vignettes,multiverse,heaters,briton,sparingly,childcare,thorium,plock,riksdag,eunuchs,catalysis,limassol,perce,uncensored,whitlam,ulmus,unites,mesopotamian,refraction,biodiesel,forza,fulda,unseated,mountbatten,shahrak,selenium,osijek,mimicking,antimicrobial,axons,simulcasting,donizetti,swabian,sportsmen,hafiz,neared,heraclius,locates,evaded,subcarpathian,bhubaneswar,negeri,jagannath,thaksin,aydin,oromo,lateran,goldsmiths,multiculturalism,cilia,mihai,evangelists,lorient,qajar,polygons,vinod,mechanised,anglophone,prefabricated,mosses,supervillain,airliners,biofuels,iodide,innovators,valais,wilberforce,logarithm,intelligentsia,dissipation,sanctioning,duchies,aymara,porches,simulators,mostar,telepathic,coaxial,caithness,burghs,fourths,stratification,joaquim,scribes,meteorites,monarchist,germination,vries,desiring,replenishment,istria,winemaking,tammany,troupes,hetman,lanceolate,pelagic,triptych,primeira,scant,outbound,hyphae,denser,bentham,basie,normale,executes,ladislaus,kontinental,herat,cruiserweight,activision,customization,manoeuvres,inglewood,northwood,waveform,investiture,inpatient,alignments,kiryat,rabat,archimedes,ustad,monsanto,archetypal,kirkby,sikhism,correspondingly,catskill,overlaid,petrels,widowers,unicameral,federalists,metalcore,gamerankings,mussel,formula_34,lymphocytes,cystic,southgate,vestiges,immortals,kalam,strove,amazons,pocono,sociologists,sopwith,adheres,laurens,caregivers,inspecting,transylvanian,rebroadcast,rhenish,miserables,pyrams,blois,newtonian,carapace,redshirt,gotland,nazir,unilever,distortions,linebackers,federalism,mombasa,lumen,bernoulli,favouring,aligarh,denounce,steamboats,dnieper,stratigraphic,synths,bernese,umass,icebreaker,guanajuato,heisenberg,boldly,diodes,ladakh,dogmatic,scriptwriter,maritimes,battlestar,symposia,adaptable,toluca,bhavan,nanking,ieyasu,picardy,soybean,adalbert,brompton,deutsches,brezhnev,glandular,laotian,hispanicized,ibadan,personification,dalit,yamuna,regio,dispensed,yamagata,zweibrucken,revising,fandom,stances,participle,flavours,khitan,vertebral,crores,mayaguez,dispensation,guntur,undefined,harpercollins,unionism,meena,leveling,philippa,refractory,telstra,judea,attenuation,pylons,elaboration,elegy,edging,gracillariidae,residencies,absentia,reflexive,deportations,dichotomy,stoves,sanremo,shimon,menachem,corneal,conifers,mordellidae,facsimile,diagnoses,cowper,citta,viticulture,divisive,riverview,foals,mystics,polyhedron,plazas,airspeed,redgrave,motherland,impede,multiplicity,barrichello,airships,pharmacists,harvester,clays,payloads,differentiating,popularize,caesars,tunneling,stagnant,circadian,indemnity,sensibilities,musicology,prefects,serfs,metra,lillehammer,carmarthenshire,kiosks,welland,barbican,alkyl,tillandsia,gatherers,asociacion,showings,bharati,brandywine,subversion,scalable,pfizer,dawla,barium,dardanelles,nsdap,konig,ayutthaya,hodgkin,sedimentation,completions,purchasers,sponsorships,maximizing,banked,taoism,minot,enrolls,fructose,aspired,capuchin,outages,artois,carrollton,totality,osceola,pawtucket,fontainebleau,converged,queretaro,competencies,botha,allotments,sheaf,shastri,obliquely,banding,catharines,outwardly,monchengladbach,driest,contemplative,cassini,ranga,pundit,kenilworth,tiananmen,disulfide,formula_35,townlands,codice_3,looping,caravans,rachmaninoff,segmentation,fluorine,anglicised,gnostic,dessau,discern,reconfigured,altrincham,rebounding,battlecruiser,ramblers,1770s,convective,triomphe,miyagi,mourners,instagram,aloft,breastfeeding,courtyards,folkestone,changsha,kumamoto,saarland,grayish,provisionally,appomattox,uncial,classicism,mahindra,elapsed,supremes,monophyletic,cautioned,formula_36,noblewoman,kernels,sucre,swaps,bengaluru,grenfell,epicenter,rockhampton,worshipful,licentiate,metaphorical,malankara,amputated,wattle,palawan,tankobon,nobunaga,polyhedra,transduction,jilin,syrians,affinities,fluently,emanating,anglicized,sportscar,botanists,altona,dravida,chorley,allocations,kunming,luanda,premiering,outlived,mesoamerica,lingual,dissipating,impairments,attenborough,balustrade,emulator,bakhsh,cladding,increments,ascents,workington,qal'eh,winless,categorical,petrel,emphasise,dormer,toros,hijackers,telescopic,solidly,jankovic,cession,gurus,madoff,newry,subsystems,northside,talib,englishmen,farnese,holographic,electives,argonne,scrivener,predated,brugge,nauvoo,catalyses,soared,siddeley,graphically,powerlifting,funicular,sungai,coercive,fusing,uncertainties,locos,acetic,diverge,wedgwood,dressings,tiebreaker,didactic,vyacheslav,acreage,interplanetary,battlecruisers,sunbury,alkaloids,hairpin,automata,wielkie,interdiction,plugins,monkees,nudibranch,esporte,approximations,disabling,powering,characterisation,ecologically,martinsville,termen,perpetuated,lufthansa,ascendancy,motherboard,bolshoi,athanasius,prunus,dilution,invests,nonzero,mendocino,charan,banque,shaheed,counterculture,unita,voivode,hospitalization,vapour,supermarine,resistor,steppes,osnabruck,intermediates,benzodiazepines,sunnyside,privatized,geopolitical,ponta,beersheba,kievan,embody,theoretic,sangh,cartographer,blige,rotors,thruway,battlefields,discernible,demobilized,broodmare,colouration,sagas,policymakers,serialization,augmentation,hoare,frankfurter,transnistria,kinases,detachable,generational,converging,antiaircraft,khaki,bimonthly,coadjutor,arkhangelsk,kannur,buffers,livonian,northwich,enveloped,cysts,yokozuna,herne,beeching,enron,virginian,woollen,excepting,competitively,outtakes,recombinant,hillcrest,clearances,pathe,cumbersome,brasov,u.s.a,likud,christiania,cruciform,hierarchies,wandsworth,lupin,resins,voiceover,sitar,electrochemical,mediacorp,typhus,grenadiers,hepatic,pompeii,weightlifter,bosniak,oxidoreductase,undersecretary,rescuers,ranji,seleucid,analysing,exegesis,tenancy,toure,kristiansand,110th,carillon,minesweepers,poitou,acceded,palladian,redevelop,naismith,rifled,proletariat,shojo,hackensack,harvests,endpoint,kuban,rosenborg,stonehenge,authorisation,jacobean,revocation,compatriots,colliding,undetermined,okayama,acknowledgment,angelou,fresnel,chahar,ethereal,mg/kg,emmet,mobilised,unfavourable,cultura,characterizing,parsonage,skeptics,expressways,rabaul,medea,guardsmen,visakhapatnam,caddo,homophobic,elmwood,encircling,coexistence,contending,seljuk,mycologist,infertility,moliere,insolvent,covenants,underpass,holme,landesliga,workplaces,delinquency,methamphetamine,contrived,tableau,tithes,overlying,usurped,contingents,spares,oligocene,molde,beatification,mordechai,balloting,pampanga,navigators,flowered,debutant,codec,orogeny,newsletters,solon,ambivalent,ubisoft,archdeaconry,harpers,kirkus,jabal,castings,kazhagam,sylhet,yuwen,barnstaple,amidships,causative,isuzu,watchtower,granules,canaveral,remuneration,insurer,payout,horizonte,integrative,attributing,kiwis,skanderbeg,asymmetry,gannett,urbanism,disassembled,unaltered,precluded,melodifestivalen,ascends,plugin,gurkha,bisons,stakeholder,industrialisation,abbotsford,sextet,bustling,uptempo,slavia,choreographers,midwives,haram,javed,gazetteer,subsection,natively,weighting,lysine,meera,redbridge,muchmusic,abruzzo,adjoins,unsustainable,foresters,kbit/s,cosmopterigidae,secularism,poetics,causality,phonograph,estudiantes,ceausescu,universitario,adjoint,applicability,gastropods,nagaland,kentish,mechelen,atalanta,woodpeckers,lombards,gatineau,romansh,avraham,acetylcholine,perturbation,galois,wenceslaus,fuzhou,meandering,dendritic,sacristy,accented,katha,therapeutics,perceives,unskilled,greenhouses,analogues,chaldean,timbre,sloped,volodymyr,sadiq,maghreb,monogram,rearguard,caucuses,mures,metabolite,uyezd,determinism,theosophical,corbet,gaels,disruptions,bicameral,ribosomal,wolseley,clarksville,watersheds,tarsi,radon,milanese,discontinuous,aristotelian,whistleblower,representational,hashim,modestly,localised,atrial,hazara,ravana,troyes,appointees,rubus,morningside,amity,aberdare,ganglia,wests,zbigniew,aerobatic,depopulated,corsican,introspective,twinning,hardtop,shallower,cataract,mesolithic,emblematic,graced,lubrication,republicanism,voronezh,bastions,meissen,irkutsk,oboes,hokkien,sprites,tenet,individualist,capitulated,oakville,dysentery,orientalist,hillsides,keywords,elicited,incised,lagging,apoel,lengthening,attractiveness,marauders,sportswriter,decentralization,boltzmann,contradicts,draftsman,precipitate,solihull,norske,consorts,hauptmann,riflemen,adventists,syndromes,demolishing,customize,continuo,peripherals,seamlessly,linguistically,bhushan,orphanages,paraul,lessened,devanagari,quarto,responders,patronymic,riemannian,altoona,canonization,honouring,geodetic,exemplifies,republica,enzymatic,porters,fairmount,pampa,sufferers,kamchatka,conjugated,coachella,uthman,repositories,copious,headteacher,awami,phoneme,homomorphism,franconian,moorland,davos,quantified,kamloops,quarks,mayoralty,weald,peacekeepers,valerian,particulate,insiders,perthshire,caches,guimaraes,piped,grenadines,kosciuszko,trombonist,artemisia,covariance,intertidal,soybeans,beatified,ellipse,fruiting,deafness,dnipropetrovsk,accrued,zealous,mandala,causation,junius,kilowatt,bakeries,montpelier,airdrie,rectified,bungalows,toleration,debian,pylon,trotskyist,posteriorly,two-and-a-half,herbivorous,islamists,poetical,donne,wodehouse,frome,allium,assimilate,phonemic,minaret,unprofitable,darpa,untenable,leaflet,bitcoin,zahir,thresholds,argentino,jacopo,bespoke,stratified,wellbeing,shiite,basaltic,timberwolves,secrete,taunts,marathons,isomers,carre,consecrators,penobscot,pitcairn,sakha,crosstown,inclusions,impassable,fenders,indre,uscgc,jordi,retinue,logarithmic,pilgrimages,railcar,cashel,blackrock,macroscopic,aligning,tabla,trestle,certify,ronson,palps,dissolves,thickened,silicate,taman,walsingham,hausa,lowestoft,rondo,oleksandr,cuyahoga,retardation,countering,cricketing,holborn,identifiers,hells,geophysics,infighting,sculpting,balaji,webbed,irradiation,runestone,trusses,oriya,sojourn,forfeiture,colonize,exclaimed,eucharistic,lackluster,glazing,northridge,gutenberg,stipulates,macroeconomic,priori,outermost,annular,udinese,insulating,headliner,godel,polytope,megalithic,salix,sharapova,derided,muskegon,braintree,plateaus,confers,autocratic,isomer,interstitial,stamping,omits,kirtland,hatchery,evidences,intifada,111th,podgorica,capua,motivating,nuneaton,jakub,korsakov,amitabh,mundial,monrovia,gluten,predictor,marshalling,d'orleans,levers,touchscreen,brantford,fricative,banishment,descendent,antagonism,ludovico,loudspeakers,formula_37,livelihoods,manassas,steamships,dewsbury,uppermost,humayun,lures,pinnacles,dependents,lecce,clumps,observatories,paleozoic,dedicating,samiti,draughtsman,gauls,incite,infringing,nepean,pythagorean,convents,triumvirate,seigneur,gaiman,vagrant,fossa,byproduct,serrated,renfrewshire,sheltering,achaemenid,dukedom,catchers,sampdoria,platelet,bielefeld,fluctuating,phenomenology,strikeout,ethnology,prospectors,woodworking,tatra,wildfires,meditations,agrippa,fortescue,qureshi,wojciech,methyltransferase,accusative,saatchi,amerindian,volcanism,zeeland,toyama,vladimirovich,allege,polygram,redox,budgeted,advisories,nematode,chipset,starscream,tonbridge,hardening,shales,accompanist,paraded,phonographic,whitefish,sportive,audiobook,kalisz,hibernation,latif,duels,ps200,coxeter,nayak,safeguarding,cantabria,minesweeping,zeiss,dunams,catholicos,sawtooth,ontological,nicobar,bridgend,unclassified,intrinsically,hanoverian,rabbitohs,kenseth,alcalde,northumbrian,raritan,septuagint,presse,sevres,origen,dandenong,peachtree,intersected,impeded,usages,hippodrome,novara,trajectories,customarily,yardage,inflected,yanow,kalan,taverns,liguria,librettist,intermarriage,1760s,courant,gambier,infanta,ptolemaic,ukulele,haganah,sceptical,manchukuo,plexus,implantation,hilal,intersex,efficiencies,arbroath,hagerstown,adelphi,diario,marais,matti,lifes,coining,modalities,divya,bletchley,conserving,ivorian,mithridates,generative,strikeforce,laymen,toponymy,pogrom,satya,meticulously,agios,dufferin,yaakov,fortnightly,cargoes,deterrence,prefrontal,przemysl,mitterrand,commemorations,chatsworth,gurdwara,abuja,chakraborty,badajoz,geometries,artiste,diatonic,ganglion,presides,marymount,nanak,cytokines,feudalism,storks,rowers,widens,politico,evangelicals,assailants,pittsfield,allowable,bijapur,telenovelas,dichomeris,glenelg,herbivores,keita,inked,radom,fundraisers,constantius,boheme,portability,komnenos,crystallography,derrida,moderates,tavistock,fateh,spacex,disjoint,bristles,commercialized,interwoven,empirically,regius,bulacan,newsday,showa,radicalism,yarrow,pleura,sayed,structuring,cotes,reminiscences,acetyl,edicts,escalators,aomori,encapsulated,legacies,bunbury,placings,fearsome,postscript,powerfully,keighley,hildesheim,amicus,crevices,deserters,benelux,aurangabad,freeware,ioannis,carpathians,chirac,seceded,prepaid,landlocked,naturalised,yanukovych,soundscan,blotch,phenotypic,determinants,twente,dictatorial,giessen,composes,recherche,pathophysiology,inventories,ayurveda,elevating,gravestone,degeneres,vilayet,popularizing,spartanburg,bloemfontein,previewed,renunciation,genotype,ogilvy,tracery,blacklisted,emissaries,diploid,disclosures,tupolev,shinjuku,antecedents,pennine,braganza,bhattacharya,countable,spectroscopic,ingolstadt,theseus,corroborated,compounding,thrombosis,extremadura,medallions,hasanabad,lambton,perpetuity,glycol,besancon,palaiologos,pandey,caicos,antecedent,stratum,laserdisc,novitiate,crowdfunding,palatal,sorceress,dassault,toughness,celle,cezanne,vientiane,tioga,hander,crossbar,gisborne,cursor,inspectorate,serif,praia,sphingidae,nameplate,psalter,ivanovic,sitka,equalised,mutineers,sergius,outgrowth,creationism,haredi,rhizomes,predominate,undertakings,vulgate,hydrothermal,abbeville,geodesic,kampung,physiotherapy,unauthorised,asteraceae,conservationist,minoan,supersport,mohammadabad,cranbrook,mentorship,legitimately,marshland,datuk,louvain,potawatomi,carnivores,levies,lyell,hymnal,regionals,tinto,shikoku,conformal,wanganui,beira,lleida,standstill,deloitte,formula_40,corbusier,chancellery,mixtapes,airtime,muhlenberg,formula_39,bracts,thrashers,prodigious,gironde,chickamauga,uyghurs,substitutions,pescara,batangas,gregarious,gijon,paleo,mathura,pumas,proportionally,hawkesbury,yucca,kristiania,funimation,fluted,eloquence,mohun,aftermarket,chroniclers,futurist,nonconformist,branko,mannerisms,lesnar,opengl,altos,retainers,ashfield,shelbourne,sulaiman,divisie,gwent,locarno,lieder,minkowski,bivalve,redeployed,cartography,seaway,bookings,decays,ostend,antiquaries,pathogenesis,formula_38,chrysalis,esperance,valli,motogp,homelands,bridged,bloor,ghazal,vulgaris,baekje,prospector,calculates,debtors,hesperiidae,titian,returner,landgrave,frontenac,kelowna,pregame,castelo,caius,canoeist,watercolours,winterthur,superintendents,dissonance,dubstep,adorn,matic,salih,hillel,swordsman,flavoured,emitter,assays,monongahela,deeded,brazzaville,sufferings,babylonia,fecal,umbria,astrologer,gentrification,frescos,phasing,zielona,ecozone,candido,manoj,quadrilateral,gyula,falsetto,prewar,puntland,infinitive,contraceptive,bakhtiari,ohrid,socialization,tailplane,evoking,havelock,macapagal,plundering,104th,keynesian,templars,phrasing,morphologically,czestochowa,humorously,catawba,burgas,chiswick,ellipsoid,kodansha,inwards,gautama,katanga,orthopaedic,heilongjiang,sieges,outsourced,subterminal,vijayawada,hares,oration,leitrim,ravines,manawatu,cryogenic,tracklisting,about.com,ambedkar,degenerated,hastened,venturing,lobbyists,shekhar,typefaces,northcote,rugen,'good,ornithology,asexual,hemispheres,unsupported,glyphs,spoleto,epigenetic,musicianship,donington,diogo,kangxi,bisected,polymorphism,megawatt,salta,embossed,cheetahs,cruzeiro,unhcr,aristide,rayleigh,maturing,indonesians,noire,llano,ffffff,camus,purges,annales,convair,apostasy,algol,phage,apaches,marketers,aldehyde,pompidou,kharkov,forgeries,praetorian,divested,retrospectively,gornji,scutellum,bitumen,pausanias,magnification,imitations,nyasaland,geographers,floodlights,athlone,hippolyte,expositions,clarinetist,razak,neutrinos,rotax,sheykh,plush,interconnect,andalus,cladogram,rudyard,resonator,granby,blackfriars,placido,windscreen,sahel,minamoto,haida,cations,emden,blackheath,thematically,blacklist,pawel,disseminating,academical,undamaged,raytheon,harsher,powhatan,ramachandran,saddles,paderborn,capping,zahra,prospecting,glycine,chromatin,profane,banska,helmand,okinawan,dislocation,oscillators,insectivorous,foyle,gilgit,autonomic,tuareg,sluice,pollinated,multiplexed,granary,narcissus,ranchi,staines,nitra,goalscoring,midwifery,pensioners,algorithmic,meetinghouse,biblioteca,besar,narva,angkor,predate,lohan,cyclical,detainee,occipital,eventing,faisalabad,dartmoor,kublai,courtly,resigns,radii,megachilidae,cartels,shortfall,xhosa,unregistered,benchmarks,dystopian,bulkhead,ponsonby,jovanovic,accumulates,papuan,bhutanese,intuitively,gotaland,headliners,recursion,dejan,novellas,diphthongs,imbued,withstood,analgesic,amplify,powertrain,programing,maidan,alstom,affirms,eradicated,summerslam,videogame,molla,severing,foundered,gallium,atmospheres,desalination,shmuel,howmeh,catolica,bossier,reconstructing,isolates,lyase,tweets,unconnected,tidewater,divisible,cohorts,orebro,presov,furnishing,folklorist,simplifying,centrale,notations,factorization,monarchies,deepen,macomb,facilitation,hennepin,declassified,redrawn,microprocessors,preliminaries,enlarging,timeframe,deutschen,shipbuilders,patiala,ferrous,aquariums,genealogies,vieux,unrecognized,bridgwater,tetrahedral,thule,resignations,gondwana,registries,agder,dataset,felled,parva,analyzer,worsen,coleraine,columella,blockaded,polytechnique,reassembled,reentry,narvik,greys,nigra,knockouts,bofors,gniezno,slotted,hamasaki,ferrers,conferring,thirdly,domestication,photojournalist,universality,preclude,ponting,halved,thereupon,photosynthetic,ostrava,mismatch,pangasinan,intermediaries,abolitionists,transited,headings,ustase,radiological,interconnection,dabrowa,invariants,honorius,preferentially,chantilly,marysville,dialectical,antioquia,abstained,gogol,dirichlet,muricidae,symmetries,reproduces,brazos,fatwa,bacillus,ketone,paribas,chowk,multiplicative,dermatitis,mamluks,devotes,adenosine,newbery,meditative,minefields,inflection,oxfam,conwy,bystrica,imprints,pandavas,infinitesimal,conurbation,amphetamine,reestablish,furth,edessa,injustices,frankston,serjeant,4x200,khazar,sihanouk,longchamp,stags,pogroms,coups,upperparts,endpoints,infringed,nuanced,summing,humorist,pacification,ciaran,jamaat,anteriorly,roddick,springboks,faceted,hypoxia,rigorously,cleves,fatimid,ayurvedic,tabled,ratna,senhora,maricopa,seibu,gauguin,holomorphic,campgrounds,amboy,coordinators,ponderosa,casemates,ouachita,nanaimo,mindoro,zealander,rimsky,cluny,tomaszow,meghalaya,caetano,tilak,roussillon,landtag,gravitation,dystrophy,cephalopods,trombones,glens,killarney,denominated,anthropogenic,pssas,roubaix,carcasses,montmorency,neotropical,communicative,rabindranath,ordinated,separable,overriding,surged,sagebrush,conciliation,codice_4,durrani,phosphatase,qadir,votive,revitalized,taiyuan,tyrannosaurus,graze,slovaks,nematodes,environmentalism,blockhouse,illiteracy,schengen,ecotourism,alternation,conic,wields,hounslow,blackfoot,kwame,ambulatory,volhynia,hordaland,croton,piedras,rohit,drava,conceptualized,birla,illustrative,gurgaon,barisal,tutsi,dezong,nasional,polje,chanson,clarinets,krasnoyarsk,aleksandrovich,cosmonaut,d'este,palliative,midseason,silencing,wardens,durer,girders,salamanders,torrington,supersonics,lauda,farid,circumnavigation,embankments,funnels,bajnoksag,lorries,cappadocia,jains,warringah,retirees,burgesses,equalization,cusco,ganesan,algal,amazonian,lineups,allocating,conquerors,usurper,mnemonic,predating,brahmaputra,ahmadabad,maidenhead,numismatic,subregion,encamped,reciprocating,freebsd,irgun,tortoises,governorates,zionists,airfoil,collated,ajmer,fiennes,etymological,polemic,chadian,clerestory,nordiques,fluctuated,calvados,oxidizing,trailhead,massena,quarrels,dordogne,tirunelveli,pyruvate,pulsed,athabasca,sylar,appointee,serer,japonica,andronikos,conferencing,nicolaus,chemin,ascertained,incited,woodbine,helices,hospitalised,emplacements,to/from,orchestre,tyrannical,pannonia,methodism,pop/rock,shibuya,berbers,despot,seaward,westpac,separator,perpignan,alamein,judeo,publicize,quantization,ethniki,gracilis,menlo,offside,oscillating,unregulated,succumbing,finnmark,metrical,suleyman,raith,sovereigns,bundesstrasse,kartli,fiduciary,darshan,foramen,curler,concubines,calvinism,larouche,bukhara,sophomores,mohanlal,lutheranism,monomer,eamonn,'black,uncontested,immersive,tutorials,beachhead,bindings,permeable,postulates,comite,transformative,indiscriminate,hofstra,associacao,amarna,dermatology,lapland,aosta,babur,unambiguous,formatting,schoolboys,gwangju,superconducting,replayed,adherent,aureus,compressors,forcible,spitsbergen,boulevards,budgeting,nossa,annandale,perumal,interregnum,sassoon,kwajalein,greenbrier,caldas,triangulation,flavius,increment,shakhtar,nullified,pinfall,nomen,microfinance,depreciation,cubist,steeper,splendour,gruppe,everyman,chasers,campaigners,bridle,modality,percussive,darkly,capes,velar,picton,triennial,factional,padang,toponym,betterment,norepinephrine,112th,estuarine,diemen,warehousing,morphism,ideologically,pairings,immunization,crassus,exporters,sefer,flocked,bulbous,deseret,booms,calcite,bohol,elven,groot,pulau,citigroup,wyeth,modernizing,layering,pastiche,complies,printmaker,condenser,theropod,cassino,oxyrhynchus,akademie,trainings,lowercase,coxae,parte,chetniks,pentagonal,keselowski,monocoque,morsi,reticulum,meiosis,clapboard,recoveries,tinge,an/fps,revista,sidon,livre,epidermis,conglomerates,kampong,congruent,harlequins,tergum,simplifies,epidemiological,underwriting,tcp/ip,exclusivity,multidimensional,mysql,columbine,ecologist,hayat,sicilies,levees,handset,aesop,usenet,pacquiao,archiving,alexandrian,compensatory,broadsheet,annotation,bahamian,d'affaires,interludes,phraya,shamans,marmara,customizable,immortalized,ambushes,chlorophyll,diesels,emulsion,rheumatoid,voluminous,screenwriters,tailoring,sedis,runcorn,democratization,bushehr,anacostia,constanta,antiquary,sixtus,radiate,advaita,antimony,acumen,barristers,reichsbahn,ronstadt,symbolist,pasig,cursive,secessionist,afrikaner,munnetra,inversely,adsorption,syllabic,moltke,idioms,midline,olimpico,diphosphate,cautions,radziwill,mobilisation,copelatus,trawlers,unicron,bhaskar,financiers,minimalism,derailment,marxists,oireachtas,abdicate,eigenvalue,zafar,vytautas,ganguly,chelyabinsk,telluride,subordination,ferried,dived,vendee,pictish,dimitrov,expiry,carnation,cayley,magnitudes,lismore,gretna,sandwiched,unmasked,sandomierz,swarthmore,tetra,nanyang,pevsner,dehradun,mormonism,rashi,complying,seaplanes,ningbo,cooperates,strathcona,mornington,mestizo,yulia,edgbaston,palisade,ethno,polytopes,espirito,tymoshenko,pronunciations,paradoxical,taichung,chipmunks,erhard,maximise,accretion,kanda,`abdu'l,narrowest,umpiring,mycenaean,divisor,geneticist,ceredigion,barque,hobbyists,equates,auxerre,spinose,cheil,sweetwater,guano,carboxylic,archiv,tannery,cormorant,agonists,fundacion,anbar,tunku,hindrance,meerut,concordat,secunderabad,kachin,achievable,murfreesboro,comprehensively,forges,broadest,synchronised,speciation,scapa,aliyev,conmebol,tirelessly,subjugated,pillaged,udaipur,defensively,lakhs,stateless,haasan,headlamps,patterning,podiums,polyphony,mcmurdo,mujer,vocally,storeyed,mucosa,multivariate,scopus,minimizes,formalised,certiorari,bourges,populate,overhanging,gaiety,unreserved,borromeo,woolworths,isotopic,bashar,purify,vertebra,medan,juxtaposition,earthwork,elongation,chaudhary,schematic,piast,steeped,nanotubes,fouls,achaea,legionnaires,abdur,qmjhl,embraer,hardback,centerville,ilocos,slovan,whitehorse,mauritian,moulding,mapuche,donned,provisioning,gazprom,jonesboro,audley,lightest,calyx,coldwater,trigonometric,petroglyphs,psychoanalyst,congregate,zambezi,fissure,supervises,bexley,etobicoke,wairarapa,tectonics,emphasises,formula_41,debugging,linfield,spatially,ionizing,ungulates,orinoco,clades,erlangen,news/talk,vols.,ceara,yakovlev,finsbury,entanglement,fieldhouse,graphene,intensifying,grigory,keyong,zacatecas,ninian,allgemeine,keswick,societa,snorri,femininity,najib,monoclonal,guyanese,postulate,huntly,abbeys,machinist,yunus,emphasising,ishaq,urmia,bremerton,pretenders,lumiere,thoroughfares,chikara,dramatized,metathorax,taiko,transcendence,wycliffe,retrieves,umpired,steuben,racehorses,taylors,kuznetsov,montezuma,precambrian,canopies,gaozong,propodeum,disestablished,retroactive,shoreham,rhizome,doubleheader,clinician,diwali,quartzite,shabaab,agassiz,despatched,stormwater,luxemburg,callao,universidade,courland,skane,glyph,dormers,witwatersrand,curacy,qualcomm,nansen,entablature,lauper,hausdorff,lusaka,ruthenian,360deg,cityscape,douai,vaishnava,spars,vaulting,rationalist,gygax,sequestration,typology,pollinates,accelerators,leben,colonials,cenotaph,imparted,carthaginians,equaled,rostrum,gobind,bodhisattva,oberst,bicycling,arabi,sangre,biophysics,hainaut,vernal,lunenburg,apportioned,finches,lajos,nenad,repackaged,zayed,nikephoros,r.e.m,swaminarayan,gestalt,unplaced,crags,grohl,sialkot,unsaturated,gwinnett,linemen,forays,palakkad,writs,instrumentalists,aircrews,badged,terrapins,180deg,oneness,commissariat,changi,pupation,circumscribed,contador,isotropic,administrated,fiefs,nimes,intrusions,minoru,geschichte,nadph,tainan,changchun,carbondale,frisia,swapo,evesham,hawai'i,encyclopedic,transporters,dysplasia,formula_42,onsite,jindal,guetta,judgements,narbonne,permissions,paleogene,rationalism,vilna,isometric,subtracted,chattahoochee,lamina,missa,greville,pervez,lattices,persistently,crystallization,timbered,hawaiians,fouling,interrelated,masood,ripening,stasi,gamal,visigothic,warlike,cybernetics,tanjung,forfar,cybernetic,karelian,brooklands,belfort,greifswald,campeche,inexplicably,refereeing,understory,uninterested,prius,collegiately,sefid,sarsfield,categorize,biannual,elsevier,eisteddfod,declension,autonoma,procuring,misrepresentation,novelization,bibliographic,shamanism,vestments,potash,eastleigh,ionized,turan,lavishly,scilly,balanchine,importers,parlance,'that,kanyakumari,synods,mieszko,crossovers,serfdom,conformational,legislated,exclave,heathland,sadar,differentiates,propositional,konstantinos,photoshop,manche,vellore,appalachia,orestes,taiga,exchanger,grozny,invalidated,baffin,spezia,staunchly,eisenach,robustness,virtuosity,ciphers,inlets,bolagh,understandings,bosniaks,parser,typhoons,sinan,luzerne,webcomic,subtraction,jhelum,businessweek,ceske,refrained,firebox,mitigated,helmholtz,dilip,eslamabad,metalwork,lucan,apportionment,provident,gdynia,schooners,casement,danse,hajjiabad,benazir,buttress,anthracite,newsreel,wollaston,dispatching,cadastral,riverboat,provincetown,nantwich,missal,irreverent,juxtaposed,darya,ennobled,electropop,stereoscopic,maneuverability,laban,luhansk,udine,collectibles,haulage,holyrood,materially,supercharger,gorizia,shkoder,townhouses,pilate,layoffs,folkloric,dialectic,exuberant,matures,malla,ceuta,citizenry,crewed,couplet,stopover,transposition,tradesmen,antioxidant,amines,utterance,grahame,landless,isere,diction,appellant,satirist,urbino,intertoto,subiaco,antonescu,nehemiah,ubiquitin,emcee,stourbridge,fencers,103rd,wranglers,monteverdi,watertight,expounded,xiamen,manmohan,pirie,threefold,antidepressant,sheboygan,grieg,cancerous,diverging,bernini,polychrome,fundamentalism,bihari,critiqued,cholas,villers,tendulkar,dafydd,vastra,fringed,evangelization,episcopalian,maliki,sana'a,ashburton,trianon,allegany,heptathlon,insufficiently,panelists,pharrell,hexham,amharic,fertilized,plumes,cistern,stratigraphy,akershus,catalans,karoo,rupee,minuteman,quantification,wigmore,leutnant,metanotum,weeknights,iridescent,extrasolar,brechin,deuterium,kuching,lyricism,astrakhan,brookhaven,euphorbia,hradec,bhagat,vardar,aylmer,positron,amygdala,speculators,unaccompanied,debrecen,slurry,windhoek,disaffected,rapporteur,mellitus,blockers,fronds,yatra,sportsperson,precession,physiologist,weeknight,pidgin,pharma,condemns,standardize,zetian,tibor,glycoprotein,emporia,cormorants,amalie,accesses,leonhard,denbighshire,roald,116th,will.i.am,symbiosis,privatised,meanders,chemnitz,jabalpur,shing,secede,ludvig,krajina,homegrown,snippets,sasanian,euripides,peder,cimarron,streaked,graubunden,kilimanjaro,mbeki,middleware,flensburg,bukovina,lindwall,marsalis,profited,abkhaz,polis,camouflaged,amyloid,morgantown,ovoid,bodleian,morte,quashed,gamelan,juventud,natchitoches,storyboard,freeview,enumeration,cielo,preludes,bulawayo,1600s,olympiads,multicast,faunal,asura,reinforces,puranas,ziegfeld,handicraft,seamount,kheil,noche,hallmarks,dermal,colorectal,encircle,hessen,umbilicus,sunnis,leste,unwin,disclosing,superfund,montmartre,refuelling,subprime,kolhapur,etiology,bismuth,laissez,vibrational,mazar,alcoa,rumsfeld,recurve,ticonderoga,lionsgate,onlookers,homesteads,filesystem,barometric,kingswood,biofuel,belleza,moshav,occidentalis,asymptomatic,northeasterly,leveson,huygens,numan,kingsway,primogeniture,toyotomi,yazoo,limpets,greenbelt,booed,concurrence,dihedral,ventrites,raipur,sibiu,plotters,kitab,109th,trackbed,skilful,berthed,effendi,fairing,sephardi,mikhailovich,lockyer,wadham,invertible,paperbacks,alphabetic,deuteronomy,constitutive,leathery,greyhounds,estoril,beechcraft,poblacion,cossidae,excreted,flamingos,singha,olmec,neurotransmitters,ascoli,nkrumah,forerunners,dualism,disenchanted,benefitted,centrum,undesignated,noida,o'donoghue,collages,egrets,egmont,wuppertal,cleave,montgomerie,pseudomonas,srinivasa,lymphatic,stadia,resold,minima,evacuees,consumerism,ronde,biochemist,automorphism,hollows,smuts,improvisations,vespasian,bream,pimlico,eglin,colne,melancholic,berhad,ousting,saale,notaulices,ouest,hunslet,tiberias,abdomina,ramsgate,stanislas,donbass,pontefract,sucrose,halts,drammen,chelm,l'arc,taming,trolleys,konin,incertae,licensees,scythian,giorgos,dative,tanglewood,farmlands,o'keeffe,caesium,romsdal,amstrad,corte,oglethorpe,huntingdonshire,magnetization,adapts,zamosc,shooto,cuttack,centrepiece,storehouse,winehouse,morbidity,woodcuts,ryazan,buddleja,buoyant,bodmin,estero,austral,verifiable,periyar,christendom,curtail,shura,kaifeng,cotswold,invariance,seafaring,gorica,androgen,usman,seabird,forecourt,pekka,juridical,audacious,yasser,cacti,qianlong,polemical,d'amore,espanyol,distrito,cartographers,pacifism,serpents,backa,nucleophilic,overturning,duplicates,marksman,oriente,vuitton,oberleutnant,gielgud,gesta,swinburne,transfiguration,1750s,retaken,celje,fredrikstad,asuka,cropping,mansard,donates,blacksmiths,vijayanagara,anuradhapura,germinate,betis,foreshore,jalandhar,bayonets,devaluation,frazione,ablaze,abidjan,approvals,homeostasis,corollary,auden,superfast,redcliffe,luxembourgish,datum,geraldton,printings,ludhiana,honoree,synchrotron,invercargill,hurriedly,108th,three-and-a-half,colonist,bexar,limousin,bessemer,ossetian,nunataks,buddhas,rebuked,thais,tilburg,verdicts,interleukin,unproven,dordrecht,solent,acclamation,muammar,dahomey,operettas,4x400,arrears,negotiators,whitehaven,apparitions,armoury,psychoactive,worshipers,sculptured,elphinstone,airshow,kjell,o'callaghan,shrank,professorships,predominance,subhash,coulomb,sekolah,retrofitted,samos,overthrowing,vibrato,resistors,palearctic,datasets,doordarshan,subcutaneous,compiles,immorality,patchwork,trinidadian,glycogen,pronged,zohar,visigoths,freres,akram,justo,agora,intakes,craiova,playwriting,bukhari,militarism,iwate,petitioners,harun,wisla,inefficiency,vendome,ledges,schopenhauer,kashi,entombed,assesses,tenn.,noumea,baguio,carex,o'donovan,filings,hillsdale,conjectures,blotches,annuals,lindisfarne,negated,vivek,angouleme,trincomalee,cofactor,verkhovna,backfield,twofold,automaker,rudra,freighters,darul,gharana,busway,formula_43,plattsburgh,portuguesa,showrunner,roadmap,valenciennes,erdos,biafra,spiritualism,transactional,modifies,carne,107th,cocos,gcses,tiverton,radiotherapy,meadowlands,gunma,srebrenica,foxtel,authenticated,enslavement,classicist,klaipeda,minstrels,searchable,infantrymen,incitement,shiga,nadp+,urals,guilders,banquets,exteriors,counterattacks,visualized,diacritics,patrimony,svensson,transepts,prizren,telegraphy,najaf,emblazoned,coupes,effluent,ragam,omani,greensburg,taino,flintshire,cd/dvd,lobbies,narrating,cacao,seafarers,bicolor,collaboratively,suraj,floodlit,sacral,puppetry,tlingit,malwa,login,motionless,thien,overseers,vihar,golem,specializations,bathhouse,priming,overdubs,winningest,archetypes,uniao,acland,creamery,slovakian,lithographs,maryborough,confidently,excavating,stillborn,ramallah,audiencia,alava,ternary,hermits,rostam,bauxite,gawain,lothair,captions,gulfstream,timelines,receded,mediating,petain,bastia,rudbar,bidders,disclaimer,shrews,tailings,trilobites,yuriy,jamil,demotion,gynecology,rajinikanth,madrigals,ghazni,flycatchers,vitebsk,bizet,computationally,kashgar,refinements,frankford,heralds,europe/africa,levante,disordered,sandringham,queues,ransacked,trebizond,verdes,comedie,primitives,figurine,organists,culminate,gosport,coagulation,ferrying,hoyas,polyurethane,prohibitive,midfielders,ligase,progesterone,defectors,sweetened,backcountry,diodorus,waterside,nieuport,khwaja,jurong,decried,gorkha,ismaili,300th,octahedral,kindergartens,paseo,codification,notifications,disregarding,risque,reconquista,shortland,atolls,texarkana,perceval,d'etudes,kanal,herbicides,tikva,nuova,gatherer,dissented,soweto,dexterity,enver,bacharach,placekicker,carnivals,automate,maynooth,symplectic,chetnik,militaire,upanishads,distributive,strafing,championing,moiety,miliband,blackadder,enforceable,maung,dimer,stadtbahn,diverges,obstructions,coleophoridae,disposals,shamrocks,aural,banca,bahru,coxed,grierson,vanadium,watermill,radiative,ecoregions,berets,hariri,bicarbonate,evacuations,mallee,nairn,rushden,loggia,slupsk,satisfactorily,milliseconds,cariboo,reine,cyclo,pigmentation,postmodernism,aqueducts,vasari,bourgogne,dilemmas,liquefied,fluminense,alloa,ibaraki,tenements,kumasi,humerus,raghu,labours,putsch,soundcloud,bodybuilder,rakyat,domitian,pesaro,translocation,sembilan,homeric,enforcers,tombstones,lectureship,rotorua,salamis,nikolaos,inferences,superfortress,lithgow,surmised,undercard,tarnow,barisan,stingrays,federacion,coldstream,haverford,ornithological,heerenveen,eleazar,jyoti,murali,bamako,riverbed,subsidised,theban,conspicuously,vistas,conservatorium,madrasa,kingfishers,arnulf,credential,syndicalist,sheathed,discontinuity,prisms,tsushima,coastlines,escapees,vitis,optimizing,megapixel,overground,embattled,halide,sprinters,buoys,mpumalanga,peculiarities,106th,roamed,menezes,macao,prelates,papyri,freemen,dissertations,irishmen,pooled,sverre,reconquest,conveyance,subjectivity,asturian,circassian,formula_45,comdr,thickets,unstressed,monro,passively,harmonium,moveable,dinar,carlsson,elysees,chairing,b'nai,confusingly,kaoru,convolution,godolphin,facilitator,saxophones,eelam,jebel,copulation,anions,livres,licensure,pontypridd,arakan,controllable,alessandria,propelling,stellenbosch,tiber,wolka,liberators,yarns,d'azur,tsinghua,semnan,amhara,ablation,melies,tonality,historique,beeston,kahne,intricately,sonoran,robespierre,gyrus,boycotts,defaulted,infill,maranhao,emigres,framingham,paraiba,wilhelmshaven,tritium,skyway,labial,supplementation,possessor,underserved,motets,maldivian,marrakech,quays,wikimedia,turbojet,demobilization,petrarch,encroaching,sloops,masted,karbala,corvallis,agribusiness,seaford,stenosis,hieronymus,irani,superdraft,baronies,cortisol,notability,veena,pontic,cyclin,archeologists,newham,culled,concurring,aeolian,manorial,shouldered,fords,philanthropists,105th,siddharth,gotthard,halim,rajshahi,jurchen,detritus,practicable,earthenware,discarding,travelogue,neuromuscular,elkhart,raeder,zygmunt,metastasis,internees,102nd,vigour,upmarket,summarizing,subjunctive,offsets,elizabethtown,udupi,pardubice,repeaters,instituting,archaea,substandard,technische,linga,anatomist,flourishes,velika,tenochtitlan,evangelistic,fitchburg,springbok,cascading,hydrostatic,avars,occasioned,filipina,perceiving,shimbun,africanus,consternation,tsing,optically,beitar,45deg,abutments,roseville,monomers,huelva,lotteries,hypothalamus,internationalist,electromechanical,hummingbirds,fibreglass,salaried,dramatists,uncovers,invokes,earners,excretion,gelding,ancien,aeronautica,haverhill,stour,ittihad,abramoff,yakov,ayodhya,accelerates,industrially,aeroplanes,deleterious,dwelt,belvoir,harpalus,atpase,maluku,alasdair,proportionality,taran,epistemological,interferometer,polypeptide,adjudged,villager,metastatic,marshalls,madhavan,archduchess,weizmann,kalgoorlie,balan,predefined,sessile,sagaing,brevity,insecticide,psychosocial,africana,steelworks,aether,aquifers,belem,mineiro,almagro,radiators,cenozoic,solute,turbocharger,invicta,guested,buccaneer,idolatry,unmatched,paducah,sinestro,dispossessed,conforms,responsiveness,cyanobacteria,flautist,procurator,complementing,semifinalist,rechargeable,permafrost,cytokine,refuges,boomed,gelderland,franchised,jinan,burnie,doubtless,randomness,colspan=12,angra,ginebra,famers,nuestro,declarative,roughness,lauenburg,motile,rekha,issuer,piney,interceptors,napoca,gipsy,formulaic,formula_44,viswanathan,ebrahim,thessalonica,galeria,muskogee,unsold,html5,taito,mobutu,icann,carnarvon,fairtrade,morphisms,upsilon,nozzles,fabius,meander,murugan,strontium,episcopacy,sandinista,parasol,attenuated,bhima,primeval,panay,ordinator,negara,osteoporosis,glossop,ebook,paradoxically,grevillea,modoc,equating,phonetically,legumes,covariant,dorje,quatre,bruxelles,pyroclastic,shipbuilder,zhaozong,obscuring,sveriges,tremolo,extensible,barrack,multnomah,hakon,chaharmahal,parsing,volumetric,astrophysical,glottal,combinatorics,freestanding,encoder,paralysed,cavalrymen,taboos,heilbronn,orientalis,lockport,marvels,ozawa,dispositions,waders,incurring,saltire,modulate,papilio,phenol,intermedia,rappahannock,plasmid,fortify,phenotypes,transiting,correspondences,leaguer,larnaca,incompatibility,mcenroe,deeming,endeavoured,aboriginals,helmed,salar,arginine,werke,ferrand,expropriated,delimited,couplets,phoenicians,petioles,ouster,anschluss,protectionist,plessis,urchins,orquesta,castleton,juniata,bittorrent,fulani,donji,mykola,rosemont,chandos,scepticism,signer,chalukya,wicketkeeper,coquitlam,programmatic,o'brian,carteret,urology,steelhead,paleocene,konkan,bettered,venkatesh,surfacing,longitudinally,centurions,popularization,yazid,douro,widths,premios,leonards,gristmill,fallujah,arezzo,leftists,ecliptic,glycerol,inaction,disenfranchised,acrimonious,depositing,parashah,cockatoo,marechal,bolzano,chios,cablevision,impartiality,pouches,thickly,equities,bentinck,emotive,boson,ashdown,conquistadors,parsi,conservationists,reductive,newlands,centerline,ornithologists,waveguide,nicene,philological,hemel,setanta,masala,aphids,convening,casco,matrilineal,chalcedon,orthographic,hythe,replete,damming,bolivarian,admixture,embarks,borderlands,conformed,nagarjuna,blenny,chaitanya,suwon,shigeru,tatarstan,lingayen,rejoins,grodno,merovingian,hardwicke,puducherry,prototyping,laxmi,upheavals,headquarter,pollinators,bromine,transom,plantagenet,arbuthnot,chidambaram,woburn,osamu,panelling,coauthored,zhongshu,hyaline,omissions,aspergillus,offensively,electrolytic,woodcut,sodom,intensities,clydebank,piotrkow,supplementing,quipped,focke,harbinger,positivism,parklands,wolfenbuttel,cauca,tryptophan,taunus,curragh,tsonga,remand,obscura,ashikaga,eltham,forelimbs,analogs,trnava,observances,kailash,antithesis,ayumi,abyssinia,dorsally,tralee,pursuers,misadventures,padova,perot,mahadev,tarim,granth,licenced,compania,patuxent,baronial,korda,cochabamba,codices,karna,memorialized,semaphore,playlists,mandibular,halal,sivaji,scherzinger,stralsund,foundries,ribosome,mindfulness,nikolayevich,paraphyletic,newsreader,catalyze,ioannina,thalamus,gbit/s,paymaster,sarab,500th,replenished,gamepro,cracow,formula_46,gascony,reburied,lessing,easement,transposed,meurthe,satires,proviso,balthasar,unbound,cuckoos,durbar,louisbourg,cowes,wholesalers,manet,narita,xiaoping,mohamad,illusory,cathal,reuptake,alkaloid,tahrir,mmorpg,underlies,anglicanism,repton,aharon,exogenous,buchenwald,indigent,odostomia,milled,santorum,toungoo,nevsky,steyr,urbanisation,darkseid,subsonic,canaanite,akiva,eglise,dentition,mediators,cirencester,peloponnesian,malmesbury,durres,oerlikon,tabulated,saens,canaria,ischemic,esterhazy,ringling,centralization,walthamstow,nalanda,lignite,takht,leninism,expiring,circe,phytoplankton,promulgation,integrable,breeches,aalto,menominee,borgo,scythians,skrull,galleon,reinvestment,raglan,reachable,liberec,airframes,electrolysis,geospatial,rubiaceae,interdependence,symmetrically,simulcasts,keenly,mauna,adipose,zaidi,fairport,vestibular,actuators,monochromatic,literatures,congestive,sacramental,atholl,skytrain,tycho,tunings,jamia,catharina,modifier,methuen,tapings,infiltrating,colima,grafting,tauranga,halides,pontificate,phonetics,koper,hafez,grooved,kintetsu,extrajudicial,linkoping,cyberpunk,repetitions,laurentian,parnu,bretton,darko,sverdlovsk,foreshadowed,akhenaten,rehnquist,gosford,coverts,pragmatism,broadleaf,ethiopians,instated,mediates,sodra,opulent,descriptor,enugu,shimla,leesburg,officership,giffard,refectory,lusitania,cybermen,fiume,corus,tydfil,lawrenceville,ocala,leviticus,burghers,ataxia,richthofen,amicably,acoustical,watling,inquired,tiempo,multiracial,parallelism,trenchard,tokyopop,germanium,usisl,philharmonia,shapur,jacobites,latinized,sophocles,remittances,o'farrell,adder,dimitrios,peshwa,dimitar,orlov,outstretched,musume,satish,dimensionless,serialised,baptisms,pagasa,antiviral,1740s,quine,arapaho,bombardments,stratosphere,ophthalmic,injunctions,carbonated,nonviolence,asante,creoles,sybra,boilermakers,abington,bipartite,permissive,cardinality,anheuser,carcinogenic,hohenlohe,surinam,szeged,infanticide,generically,floorball,'white,automakers,cerebellar,homozygous,remoteness,effortlessly,allude,'great,headmasters,minting,manchurian,kinabalu,wemyss,seditious,widgets,marbled,almshouses,bards,subgenres,tetsuya,faulting,kickboxer,gaulish,hoseyn,malton,fluvial,questionnaires,mondale,downplayed,traditionalists,vercelli,sumatran,landfills,gamesradar,exerts,franciszek,unlawfully,huesca,diderot,libertarians,professorial,laane,piecemeal,conidae,taiji,curatorial,perturbations,abstractions,szlachta,watercraft,mullah,zoroastrianism,segmental,khabarovsk,rectors,affordability,scuola,diffused,stena,cyclonic,workpiece,romford,'little,jhansi,stalag,zhongshan,skipton,maracaibo,bernadotte,thanet,groening,waterville,encloses,sahrawi,nuffield,moorings,chantry,annenberg,islay,marchers,tenses,wahid,siegen,furstenberg,basques,resuscitation,seminarians,tympanum,gentiles,vegetarianism,tufted,venkata,fantastical,pterophoridae,machined,superposition,glabrous,kaveri,chicane,executors,phyllonorycter,bidirectional,jasta,undertones,touristic,majapahit,navratilova,unpopularity,barbadian,tinian,webcast,hurdler,rigidly,jarrah,staphylococcus,igniting,irrawaddy,stabilised,airstrike,ragas,wakayama,energetically,ekstraklasa,minibus,largemouth,cultivators,leveraging,waitangi,carnaval,weaves,turntables,heydrich,sextus,excavate,govind,ignaz,pedagogue,uriah,borrowings,gemstones,infractions,mycobacterium,batavian,massing,praetor,subalpine,massoud,passers,geostationary,jalil,trainsets,barbus,impair,budejovice,denbigh,pertain,historicity,fortaleza,nederlandse,lamenting,masterchef,doubs,gemara,conductance,ploiesti,cetaceans,courthouses,bhagavad,mihailovic,occlusion,bremerhaven,bulwark,morava,kaine,drapery,maputo,conquistador,kaduna,famagusta,first-past-the-post,erudite,galton,undated,tangential,filho,dismembered,dashes,criterium,darwen,metabolized,blurring,everard,randwick,mohave,impurity,acuity,ansbach,chievo,surcharge,plantain,algoma,porosity,zirconium,selva,sevenoaks,venizelos,gwynne,golgi,imparting,separatism,courtesan,idiopathic,gravestones,hydroelectricity,babar,orford,purposeful,acutely,shard,ridgewood,viterbo,manohar,expropriation,placenames,brevis,cosine,unranked,richfield,newnham,recoverable,flightless,dispersing,clearfield,abu'l,stranraer,kempe,streamlining,goswami,epidermal,pieta,conciliatory,distilleries,electrophoresis,bonne,tiago,curiosities,candidature,picnicking,perihelion,lintel,povoa,gullies,configure,excision,facies,signers,1730s,insufficiency,semiotics,streatham,deactivation,entomological,skippers,albacete,parodying,escherichia,honorees,singaporeans,counterterrorism,tiruchirappalli,omnivorous,metropole,globalisation,athol,unbounded,codice_5,landforms,classifier,farmhouses,reaffirming,reparation,yomiuri,technologists,mitte,medica,viewable,steampunk,konya,kshatriya,repelling,edgewater,lamiinae,devas,potteries,llandaff,engendered,submits,virulence,uplifted,educationist,metropolitans,frontrunner,dunstable,forecastle,frets,methodius,exmouth,linnean,bouchet,repulsion,computable,equalling,liceo,tephritidae,agave,hydrological,azarenka,fairground,l'homme,enforces,xinhua,cinematographers,cooperstown,sa'id,paiute,christianization,tempos,chippenham,insulator,kotor,stereotyped,dello,cours,hisham,d'souza,eliminations,supercars,passau,rebrand,natures,coote,persephone,rededicated,cleaved,plenum,blistering,indiscriminately,cleese,safed,recursively,compacted,revues,hydration,shillong,echelons,garhwal,pedimented,grower,zwolle,wildflower,annexing,methionine,petah,valens,famitsu,petiole,specialities,nestorian,shahin,tokaido,shearwater,barberini,kinsmen,experimenter,alumnae,cloisters,alumina,pritzker,hardiness,soundgarden,julich,ps300,watercourse,cementing,wordplay,olivet,demesne,chasseurs,amide,zapotec,gaozu,porphyry,absorbers,indium,analogies,devotions,engravers,limestones,catapulted,surry,brickworks,gotra,rodham,landline,paleontologists,shankara,islip,raucous,trollope,arpad,embarkation,morphemes,recites,picardie,nakhchivan,tolerances,formula_47,khorramabad,nichiren,adrianople,kirkuk,assemblages,collider,bikaner,bushfires,roofline,coverings,reredos,bibliotheca,mantras,accentuated,commedia,rashtriya,fluctuation,serhiy,referential,fittipaldi,vesicle,geeta,iraklis,immediacy,chulalongkorn,hunsruck,bingen,dreadnoughts,stonemason,meenakshi,lebesgue,undergrowth,baltistan,paradoxes,parlement,articled,tiflis,dixieland,meriden,tejano,underdogs,barnstable,exemplify,venter,tropes,wielka,kankakee,iskandar,zilina,pharyngeal,spotify,materialised,picts,atlantique,theodoric,prepositions,paramilitaries,pinellas,attlee,actuated,piedmontese,grayling,thucydides,multifaceted,unedited,autonomously,universelle,utricularia,mooted,preto,incubated,underlie,brasenose,nootka,bushland,sensu,benzodiazepine,esteghlal,seagoing,amenhotep,azusa,sappers,culpeper,smokeless,thoroughbreds,dargah,gorda,alumna,mankato,zdroj,deleting,culvert,formula_49,punting,wushu,hindering,immunoglobulin,standardisation,birger,oilfield,quadrangular,ulama,recruiters,netanya,1630s,communaute,istituto,maciej,pathan,meher,vikas,characterizations,playmaker,interagency,intercepts,assembles,horthy,introspection,narada,matra,testes,radnicki,estonians,csiro,instar,mitford,adrenergic,crewmembers,haaretz,wasatch,lisburn,rangefinder,ordre,condensate,reforestation,corregidor,spvgg,modulator,mannerist,faulted,aspires,maktoum,squarepants,aethelred,piezoelectric,mulatto,dacre,progressions,jagiellonian,norge,samaria,sukhoi,effingham,coxless,hermetic,humanists,centrality,litters,stirlingshire,beaconsfield,sundanese,geometrically,caretakers,habitually,bandra,pashtuns,bradenton,arequipa,laminar,brickyard,hitchin,sustains,shipboard,ploughing,trechus,wheelers,bracketed,ilyushin,subotica,d'hondt,reappearance,bridgestone,intermarried,fulfilment,aphasia,birkbeck,transformational,strathmore,hornbill,millstone,lacan,voids,solothurn,gymnasiums,laconia,viaducts,peduncle,teachta,edgware,shinty,supernovae,wilfried,exclaim,parthia,mithun,flashpoint,moksha,cumbia,metternich,avalanches,militancy,motorist,rivadavia,chancellorsville,federals,gendered,bounding,footy,gauri,caliphs,lingam,watchmaker,unrecorded,riverina,unmodified,seafloor,droit,pfalz,chrysostom,gigabit,overlordship,besiege,espn2,oswestry,anachronistic,ballymena,reactivation,duchovny,ghani,abacetus,duller,legio,watercourses,nord-pas-de-calais,leiber,optometry,swarms,installer,sancti,adverbs,iheartmedia,meiningen,zeljko,kakheti,notional,circuses,patrilineal,acrobatics,infrastructural,sheva,oregonian,adjudication,aamir,wloclawek,overfishing,obstructive,subtracting,aurobindo,archeologist,newgate,'cause,secularization,tehsils,abscess,fingal,janacek,elkhorn,trims,kraftwerk,mandating,irregulars,faintly,congregationalist,sveti,kasai,mishaps,kennebec,provincially,durkheim,scotties,aicte,rapperswil,imphal,surrenders,morphs,nineveh,hoxha,cotabato,thuringian,metalworking,retold,shogakukan,anthers,proteasome,tippeligaen,disengagement,mockumentary,palatial,erupts,flume,corrientes,masthead,jaroslaw,rereleased,bharti,labors,distilling,tusks,varzim,refounded,enniskillen,melkite,semifinalists,vadodara,bermudian,capstone,grasse,origination,populus,alesi,arrondissements,semigroup,verein,opossum,messrs.,portadown,bulbul,tirupati,mulhouse,tetrahedron,roethlisberger,nonverbal,connexion,warangal,deprecated,gneiss,octet,vukovar,hesketh,chambre,despatch,claes,kargil,hideo,gravelly,tyndale,aquileia,tuners,defensible,tutte,theotokos,constructivist,ouvrage,dukla,polisario,monasticism,proscribed,commutation,testers,nipissing,codon,mesto,olivine,concomitant,exoskeleton,purports,coromandel,eyalet,dissension,hippocrates,purebred,yaounde,composting,oecophoridae,procopius,o'day,angiogenesis,sheerness,intelligencer,articular,felixstowe,aegon,endocrinology,trabzon,licinius,pagodas,zooplankton,hooghly,satie,drifters,sarthe,mercian,neuilly,tumours,canal+,scheldt,inclinations,counteroffensive,roadrunners,tuzla,shoreditch,surigao,predicates,carnot,algeciras,militaries,generalize,bulkheads,gawler,pollutant,celta,rundgren,microrna,gewog,olimpija,placental,lubelski,roxburgh,discerned,verano,kikuchi,musicale,l'enfant,ferocity,dimorphic,antigonus,erzurum,prebendary,recitative,discworld,cyrenaica,stigmella,totnes,sutta,pachuca,ulsan,downton,landshut,castellan,pleural,siedlce,siecle,catamaran,cottbus,utilises,trophic,freeholders,holyhead,u.s.s,chansons,responder,waziristan,suzuka,birding,shogi,asker,acetone,beautification,cytotoxic,dixit,hunterdon,cobblestone,formula_48,kossuth,devizes,sokoto,interlaced,shuttered,kilowatts,assiniboine,isaak,salto,alderney,sugarloaf,franchising,aggressiveness,toponyms,plaintext,antimatter,henin,equidistant,salivary,bilingualism,mountings,obligate,extirpated,irenaeus,misused,pastoralists,aftab,immigrating,warping,tyrolean,seaforth,teesside,soundwave,oligarchy,stelae,pairwise,iupac,tezuka,posht,orchestrations,landmass,ironstone,gallia,hjalmar,carmelites,strafford,elmhurst,palladio,fragility,teleplay,gruffudd,karoly,yerba,potok,espoo,inductance,macaque,nonprofits,pareto,rock'n'roll,spiritualist,shadowed,skateboarder,utterances,generality,congruence,prostrate,deterred,yellowknife,albarn,maldon,battlements,mohsen,insecticides,khulna,avellino,menstruation,glutathione,springdale,parlophone,confraternity,korps,countrywide,bosphorus,preexisting,damodar,astride,alexandrovich,sprinting,crystallized,botev,leaching,interstates,veers,angevin,undaunted,yevgeni,nishapur,northerners,alkmaar,bethnal,grocers,sepia,tornus,exemplar,trobe,charcot,gyeonggi,larne,tournai,lorain,voided,genji,enactments,maxilla,adiabatic,eifel,nazim,transducer,thelonious,pyrite,deportiva,dialectal,bengt,rosettes,labem,sergeyevich,synoptic,conservator,statuette,biweekly,adhesives,bifurcation,rajapaksa,mammootty,republique,yusef,waseda,marshfield,yekaterinburg,minnelli,fundy,fenian,matchups,dungannon,supremacist,panelled,drenthe,iyengar,fibula,narmada,homeport,oceanside,precept,antibacterial,altarpieces,swath,ospreys,lillooet,legnica,lossless,formula_50,galvatron,iorga,stormont,rsfsr,loggers,kutno,phenomenological,medallists,cuatro,soissons,homeopathy,bituminous,injures,syndicates,typesetting,displacements,dethroned,makassar,lucchese,abergavenny,targu,alborz,akb48,boldface,gastronomy,sacra,amenity,accumulator,myrtaceae,cornices,mourinho,denunciation,oxbow,diddley,aargau,arbitrage,bedchamber,gruffydd,zamindar,klagenfurt,caernarfon,slowdown,stansted,abrasion,tamaki,suetonius,dukakis,individualistic,ventrally,hotham,perestroika,ketones,fertilisation,sobriquet,couplings,renderings,misidentified,rundfunk,sarcastically,braniff,concours,dismissals,elegantly,modifiers,crediting,combos,crucially,seafront,lieut,ischemia,manchus,derivations,proteases,aristophanes,adenauer,porting,hezekiah,sante,trulli,hornblower,foreshadowing,ypsilanti,dharwad,khani,hohenstaufen,distillers,cosmodrome,intracranial,turki,salesian,gorzow,jihlava,yushchenko,leichhardt,venables,cassia,eurogamer,airtel,curative,bestsellers,timeform,sortied,grandview,massillon,ceding,pilbara,chillicothe,heredity,elblag,rogaland,ronne,millennial,batley,overuse,bharata,fille,campbelltown,abeyance,counterclockwise,250cc,neurodegenerative,consigned,electromagnetism,sunnah,saheb,exons,coxswain,gleaned,bassoons,worksop,prismatic,immigrate,pickets,takeo,bobsledder,stosur,fujimori,merchantmen,stiftung,forli,endorses,taskforce,thermally,atman,gurps,floodplains,enthalpy,extrinsic,setubal,kennesaw,grandis,scalability,durations,showrooms,prithvi,outro,overruns,andalucia,amanita,abitur,hipper,mozambican,sustainment,arsene,chesham,palaeolithic,reportage,criminality,knowsley,haploid,atacama,shueisha,ridgefield,astern,getafe,lineal,timorese,restyled,hollies,agincourt,unter,justly,tannins,mataram,industrialised,tarnovo,mumtaz,mustapha,stretton,synthetase,condita,allround,putra,stjepan,troughs,aechmea,specialisation,wearable,kadokawa,uralic,aeros,messiaen,existentialism,jeweller,effigies,gametes,fjordane,cochlear,interdependent,demonstrative,unstructured,emplacement,famines,spindles,amplitudes,actuator,tantalum,psilocybe,apnea,monogatari,expulsions,seleucus,tsuen,hospitaller,kronstadt,eclipsing,olympiakos,clann,canadensis,inverter,helio,egyptologist,squamous,resonate,munir,histology,torbay,khans,jcpenney,veterinarians,aintree,microscopes,colonised,reflectors,phosphorylated,pristimantis,tulare,corvinus,multiplexing,midweek,demosthenes,transjordan,ecija,tengku,vlachs,anamorphic,counterweight,radnor,trinitarian,armidale,maugham,njsiaa,futurism,stairways,avicenna,montebello,bridgetown,wenatchee,lyonnais,amass,surinamese,streptococcus,m*a*s*h,hydrogenation,frazioni,proscenium,kalat,pennsylvanian,huracan,tallying,kralove,nucleolar,phrygian,seaports,hyacinthe,ignace,donning,instalment,regnal,fonds,prawn,carell,folktales,goaltending,bracknell,vmware,patriarchy,mitsui,kragujevac,pythagoras,soult,thapa,disproved,suwalki,secures,somoza,l'ecole,divizia,chroma,herders,technologist,deduces,maasai,rampur,paraphrase,raimi,imaged,magsaysay,ivano,turmeric,formula_51,subcommittees,axillary,ionosphere,organically,indented,refurbishing,pequot,violinists,bearn,colle,contralto,silverton,mechanization,etruscans,wittelsbach,pasir,redshirted,marrakesh,scarp,plein,wafers,qareh,teotihuacan,frobenius,sinensis,rehoboth,bundaberg,newbridge,hydrodynamic,traore,abubakar,adjusts,storytellers,dynamos,verbandsliga,concertmaster,exxonmobil,appreciable,sieradz,marchioness,chaplaincy,rechristened,cunxu,overpopulation,apolitical,sequencer,beaked,nemanja,binaries,intendant,absorber,filamentous,indebtedness,nusra,nashik,reprises,psychedelia,abwehr,ligurian,isoform,resistive,pillaging,mahathir,reformatory,lusatia,allerton,ajaccio,tepals,maturin,njcaa,abyssinian,objector,fissures,sinuous,ecclesiastic,dalits,caching,deckers,phosphates,wurlitzer,navigated,trofeo,berea,purefoods,solway,unlockable,grammys,kostroma,vocalizations,basilan,rebuke,abbasi,douala,helsingborg,ambon,bakar,runestones,cenel,tomislav,pigmented,northgate,excised,seconda,kirke,determinations,dedicates,vilas,pueblos,reversion,unexploded,overprinted,ekiti,deauville,masato,anaesthesia,endoplasmic,transponders,aguascalientes,hindley,celluloid,affording,bayeux,piaget,rickshaws,eishockey,camarines,zamalek,undersides,hardwoods,hermitian,mutinied,monotone,blackmails,affixes,jpmorgan,habermas,mitrovica,paleontological,polystyrene,thana,manas,conformist,turbofan,decomposes,logano,castration,metamorphoses,patroness,herbicide,mikolaj,rapprochement,macroeconomics,barranquilla,matsudaira,lintels,femina,hijab,spotsylvania,morpheme,bitola,baluchistan,kurukshetra,otway,extrusion,waukesha,menswear,helder,trung,bingley,protester,boars,overhang,differentials,exarchate,hejaz,kumara,unjustified,timings,sharpness,nuovo,taisho,sundar,etc..,jehan,unquestionably,muscovy,daltrey,canute,paneled,amedeo,metroplex,elaborates,telus,tetrapods,dragonflies,epithets,saffir,parthenon,lucrezia,refitting,pentateuch,hanshin,montparnasse,lumberjacks,sanhedrin,erectile,odors,greenstone,resurgent,leszek,amory,substituents,prototypical,viewfinder,monck,universiteit,joffre,revives,chatillon,seedling,scherzo,manukau,ashdod,gympie,homolog,stalwarts,ruinous,weibo,tochigi,wallenberg,gayatri,munda,satyagraha,storefronts,heterogeneity,tollway,sportswriters,binocular,gendarmes,ladysmith,tikal,ortsgemeinde,ja'far,osmotic,linlithgow,bramley,telecoms,pugin,repose,rupaul,sieur,meniscus,garmisch,reintroduce,400th,shoten,poniatowski,drome,kazakhstani,changeover,astronautics,husserl,herzl,hypertext,katakana,polybius,antananarivo,seong,breguet,reliquary,utada,aggregating,liangshan,sivan,tonawanda,audiobooks,shankill,coulee,phenolic,brockton,bookmakers,handsets,boaters,wylde,commonality,mappings,silhouettes,pennines,maurya,pratchett,singularities,eschewed,pretensions,vitreous,ibero,totalitarianism,poulenc,lingered,directx,seasoning,deputation,interdict,illyria,feedstock,counterbalance,muzik,buganda,parachuted,violist,homogeneity,comix,fjords,corsairs,punted,verandahs,equilateral,laoghaire,magyars,117th,alesund,televoting,mayotte,eateries,refurbish,nswrl,yukio,caragiale,zetas,dispel,codecs,inoperable,outperformed,rejuvenation,elstree,modernise,contributory,pictou,tewkesbury,chechens,ashina,psionic,refutation,medico,overdubbed,nebulae,sandefjord,personages,eccellenza,businessperson,placename,abenaki,perryville,threshing,reshaped,arecibo,burslem,colspan=3|turnout,rebadged,lumia,erinsborough,interactivity,bitmap,indefatigable,theosophy,excitatory,gleizes,edsel,bermondsey,korce,saarinen,wazir,diyarbakir,cofounder,liberalisation,onsen,nighthawks,siting,retirements,semyon,d'histoire,114th,redditch,venetia,praha,'round,valdosta,hieroglyphic,postmedial,edirne,miscellany,savona,cockpits,minimization,coupler,jacksonian,appeasement,argentines,saurashtra,arkwright,hesiod,folios,fitzalan,publica,rivaled,civitas,beermen,constructivism,ribeira,zeitschrift,solanum,todos,deformities,chilliwack,verdean,meagre,bishoprics,gujrat,yangzhou,reentered,inboard,mythologies,virtus,unsurprisingly,rusticated,museu,symbolise,proportionate,thesaban,symbian,aeneid,mitotic,veliki,compressive,cisterns,abies,winemaker,massenet,bertolt,ahmednagar,triplemania,armorial,administracion,tenures,smokehouse,hashtag,fuerza,regattas,gennady,kanazawa,mahmudabad,crustal,asaph,valentinian,ilaiyaraaja,honeyeater,trapezoidal,cooperatively,unambiguously,mastodon,inhospitable,harnesses,riverton,renewables,djurgardens,haitians,airings,humanoids,boatswain,shijiazhuang,faints,veera,punjabis,steepest,narain,karlovy,serre,sulcus,collectives,1500m,arion,subarctic,liberally,apollonius,ostia,droplet,headstones,norra,robusta,maquis,veronese,imola,primers,luminance,escadrille,mizuki,irreconcilable,stalybridge,temur,paraffin,stuccoed,parthians,counsels,fundamentalists,vivendi,polymath,sugababes,mikko,yonne,fermions,vestfold,pastoralist,kigali,unseeded,glarus,cusps,amasya,northwesterly,minorca,astragalus,verney,trevelyan,antipathy,wollstonecraft,bivalves,boulez,royle,divisao,quranic,bareilly,coronal,deviates,lulea,erectus,petronas,chandan,proxies,aeroflot,postsynaptic,memoriam,moyne,gounod,kuznetsova,pallava,ordinating,reigate,'first,lewisburg,exploitative,danby,academica,bailiwick,brahe,injective,stipulations,aeschylus,computes,gulden,hydroxylase,liveries,somalis,underpinnings,muscovite,kongsberg,domus,overlain,shareware,variegated,jalalabad,agence,ciphertext,insectivores,dengeki,menuhin,cladistic,baerum,betrothal,tokushima,wavelet,expansionist,pottsville,siyuan,prerequisites,carpi,nemzeti,nazar,trialled,eliminator,irrorated,homeward,redwoods,undeterred,strayed,lutyens,multicellular,aurelian,notated,lordships,alsatian,idents,foggia,garros,chalukyas,lillestrom,podlaski,pessimism,hsien,demilitarized,whitewashed,willesden,kirkcaldy,sanctorum,lamia,relaying,escondido,paediatric,contemplates,demarcated,bluestone,betula,penarol,capitalise,kreuznach,kenora,115th,hold'em,reichswehr,vaucluse,m.i.a,windings,boys/girls,cajon,hisar,predictably,flemington,ysgol,mimicked,clivina,grahamstown,ionia,glyndebourne,patrese,aquaria,sleaford,dayal,sportscenter,malappuram,m.b.a.,manoa,carbines,solvable,designator,ramanujan,linearity,academicians,sayid,lancastrian,factorial,strindberg,vashem,delos,comyn,condensing,superdome,merited,kabaddi,intransitive,bideford,neuroimaging,duopoly,scorecards,ziggler,heriot,boyars,virology,marblehead,microtubules,westphalian,anticipates,hingham,searchers,harpist,rapides,morricone,convalescent,mises,nitride,metrorail,matterhorn,bicol,drivetrain,marketer,snippet,winemakers,muban,scavengers,halberstadt,herkimer,peten,laborious,stora,montgomeryshire,booklist,shamir,herault,eurostar,anhydrous,spacewalk,ecclesia,calliostoma,highschool,d'oro,suffusion,imparts,overlords,tagus,rectifier,counterinsurgency,ministered,eilean,milecastle,contre,micromollusk,okhotsk,bartoli,matroid,hasidim,thirunal,terme,tarlac,lashkar,presque,thameslink,flyby,troopship,renouncing,fatih,messrs,vexillum,bagration,magnetite,bornholm,androgynous,vehement,tourette,philosophic,gianfranco,tuileries,codice_6,radially,flexion,hants,reprocessing,setae,burne,palaeographically,infantryman,shorebirds,tamarind,moderna,threading,militaristic,crohn,norrkoping,125cc,stadtholder,troms,klezmer,alphanumeric,brome,emmanuelle,tiwari,alchemical,formula_52,onassis,bleriot,bipedal,colourless,hermeneutics,hosni,precipitating,turnstiles,hallucinogenic,panhellenic,wyandotte,elucidated,chita,ehime,generalised,hydrophilic,biota,niobium,rnzaf,gandhara,longueuil,logics,sheeting,bielsko,cuvier,kagyu,trefoil,docent,pancrase,stalinism,postures,encephalopathy,monckton,imbalances,epochs,leaguers,anzio,diminishes,pataki,nitrite,amuro,nabil,maybach,l'aquila,babbler,bacolod,thutmose,evora,gaudi,breakage,recur,preservative,60deg,mendip,functionaries,columnar,maccabiah,chert,verden,bromsgrove,clijsters,dengue,pastorate,phuoc,principia,viareggio,kharagpur,scharnhorst,anyang,bosons,l'art,criticises,ennio,semarang,brownian,mirabilis,asperger,calibers,typographical,cartooning,minos,disembark,supranational,undescribed,etymologically,alappuzha,vilhelm,lanao,pakenham,bhagavata,rakoczi,clearings,astrologers,manitowoc,bunuel,acetylene,scheduler,defamatory,trabzonspor,leaded,scioto,pentathlete,abrahamic,minigames,aldehydes,peerages,legionary,1640s,masterworks,loudness,bryansk,likeable,genocidal,vegetated,towpath,declination,pyrrhus,divinely,vocations,rosebery,associazione,loaders,biswas,oeste,tilings,xianzong,bhojpuri,annuities,relatedness,idolator,psers,constriction,chuvash,choristers,hanafi,fielders,grammarian,orpheum,asylums,millbrook,gyatso,geldof,stabilise,tableaux,diarist,kalahari,panini,cowdenbeath,melanin,4x100m,resonances,pinar,atherosclerosis,sheringham,castlereagh,aoyama,larks,pantograph,protrude,natak,gustafsson,moribund,cerevisiae,cleanly,polymeric,holkar,cosmonauts,underpinning,lithosphere,firuzabad,languished,mingled,citrate,spadina,lavas,daejeon,fibrillation,porgy,pineville,ps1000,cobbled,emamzadeh,mukhtar,dampers,indelible,salonika,nanoscale,treblinka,eilat,purporting,fluctuate,mesic,hagiography,cutscenes,fondation,barrens,comically,accrue,ibrox,makerere,defections,'there,hollandia,skene,grosseto,reddit,objectors,inoculation,rowdies,playfair,calligrapher,namor,sibenik,abbottabad,propellants,hydraulically,chloroplasts,tablelands,tecnico,schist,klasse,shirvan,bashkortostan,bullfighting,north/south,polski,hanns,woodblock,kilmore,ejecta,ignacy,nanchang,danubian,commendations,snohomish,samaritans,argumentation,vasconcelos,hedgehogs,vajrayana,barents,kulkarni,kumbakonam,identifications,hillingdon,weirs,nayanar,beauvoir,messe,divisors,atlantiques,broods,affluence,tegucigalpa,unsuited,autodesk,akash,princeps,culprits,kingstown,unassuming,goole,visayan,asceticism,blagojevich,irises,paphos,unsound,maurier,pontchartrain,desertification,sinfonietta,latins,especial,limpet,valerenga,glial,brainstem,mitral,parables,sauropod,judean,iskcon,sarcoma,venlo,justifications,zhuhai,blavatsky,alleviated,usafe,steppenwolf,inversions,janko,chagall,secretory,basildon,saguenay,pergamon,hemispherical,harmonized,reloading,franjo,domaine,extravagance,relativism,metamorphosed,labuan,baloncesto,gmail,byproducts,calvinists,counterattacked,vitus,bubonic,120th,strachey,ritually,brookwood,selectable,savinja,incontinence,meltwater,jinja,1720s,brahmi,morgenthau,sheaves,sleeved,stratovolcano,wielki,utilisation,avoca,fluxus,panzergrenadier,philately,deflation,podlaska,prerogatives,kuroda,theophile,zhongzong,gascoyne,magus,takao,arundell,fylde,merdeka,prithviraj,venkateswara,liepaja,daigo,dreamland,reflux,sunnyvale,coalfields,seacrest,soldering,flexor,structuralism,alnwick,outweighed,unaired,mangeshkar,batons,glaad,banshees,irradiated,organelles,biathlete,cabling,chairlift,lollapalooza,newsnight,capacitive,succumbs,flatly,miramichi,burwood,comedienne,charteris,biotic,workspace,aficionados,sokolka,chatelet,o'shaughnessy,prosthesis,neoliberal,refloated,oppland,hatchlings,econometrics,loess,thieu,androids,appalachians,jenin,pterostichinae,downsized,foils,chipsets,stencil,danza,narrate,maginot,yemenite,bisects,crustacean,prescriptive,melodious,alleviation,empowers,hansson,autodromo,obasanjo,osmosis,daugava,rheumatism,moraes,leucine,etymologies,chepstow,delaunay,bramall,bajaj,flavoring,approximates,marsupials,incisive,microcomputer,tactically,waals,wilno,fisichella,ursus,hindmarsh,mazarin,lomza,xenophobia,lawlessness,annecy,wingers,gornja,gnaeus,superieur,tlaxcala,clasps,symbolises,slats,rightist,effector,blighted,permanence,divan,progenitors,kunsthalle,anointing,excelling,coenzyme,indoctrination,dnipro,landholdings,adriaan,liturgies,cartan,ethmia,attributions,sanctus,trichy,chronicon,tancred,affinis,kampuchea,gantry,pontypool,membered,distrusted,fissile,dairies,hyposmocoma,craigie,adarsh,martinsburg,taxiway,30deg,geraint,vellum,bencher,khatami,formula_53,zemun,teruel,endeavored,palmares,pavements,u.s..,internationalization,satirized,carers,attainable,wraparound,muang,parkersburg,extinctions,birkenfeld,wildstorm,payers,cohabitation,unitas,culloden,capitalizing,clwyd,daoist,campinas,emmylou,orchidaceae,halakha,orientales,fealty,domnall,chiefdom,nigerians,ladislav,dniester,avowed,ergonomics,newsmagazine,kitsch,cantilevered,benchmarking,remarriage,alekhine,coldfield,taupo,almirante,substations,apprenticeships,seljuq,levelling,eponym,symbolising,salyut,opioids,underscore,ethnologue,mohegan,marikina,libro,bassano,parse,semantically,disjointed,dugdale,padraig,tulsi,modulating,xfinity,headlands,mstislav,earthworms,bourchier,lgbtq,embellishments,pennants,rowntree,betel,motet,mulla,catenary,washoe,mordaunt,dorking,colmar,girardeau,glentoran,grammatically,samad,recreations,technion,staccato,mikoyan,spoilers,lyndhurst,victimization,chertsey,belafonte,tondo,tonsberg,narrators,subcultures,malformations,edina,augmenting,attests,euphemia,cabriolet,disguising,1650s,navarrese,demoralized,cardiomyopathy,welwyn,wallachian,smoothness,planktonic,voles,issuers,sardasht,survivability,cuauhtemoc,thetis,extruded,signet,raghavan,lombok,eliyahu,crankcase,dissonant,stolberg,trencin,desktops,bursary,collectivization,charlottenburg,triathlete,curvilinear,involuntarily,mired,wausau,invades,sundaram,deletions,bootstrap,abellio,axiomatic,noguchi,setups,malawian,visalia,materialist,kartuzy,wenzong,plotline,yeshivas,parganas,tunica,citric,conspecific,idlib,superlative,reoccupied,blagoevgrad,masterton,immunological,hatta,courbet,vortices,swallowtail,delves,haridwar,diptera,boneh,bahawalpur,angering,mardin,equipments,deployable,guanine,normality,rimmed,artisanal,boxset,chandrasekhar,jools,chenar,tanakh,carcassonne,belatedly,millville,anorthosis,reintegration,velde,surfactant,kanaan,busoni,glyphipterix,personas,fullness,rheims,tisza,stabilizers,bharathi,joost,spinola,mouldings,perching,esztergom,afzal,apostate,lustre,s.league,motorboat,monotheistic,armature,barat,asistencia,bloomsburg,hippocampal,fictionalised,defaults,broch,hexadecimal,lusignan,ryanair,boccaccio,breisgau,southbank,bskyb,adjoined,neurobiology,aforesaid,sadhu,langue,headship,wozniacki,hangings,regulus,prioritized,dynamism,allier,hannity,shimin,antoninus,gymnopilus,caledon,preponderance,melayu,electrodynamics,syncopated,ibises,krosno,mechanistic,morpeth,harbored,albini,monotheism,'real,hyperactivity,haveli,writer/director,minato,nimoy,caerphilly,chitral,amirabad,fanshawe,l'oreal,lorde,mukti,authoritarianism,valuing,spyware,hanbury,restarting,stato,embed,suiza,empiricism,stabilisation,stari,castlemaine,orbis,manufactory,mauritanian,shoji,taoyuan,prokaryotes,oromia,ambiguities,embodying,slims,frente,innovate,ojibwa,powdery,gaeltacht,argentinos,quatermass,detergents,fijians,adaptor,tokai,chileans,bulgars,oxidoreductases,bezirksliga,conceicao,myosin,nellore,500cc,supercomputers,approximating,glyndwr,polypropylene,haugesund,cockerell,tudman,ashbourne,hindemith,bloodlines,rigveda,etruria,romanos,steyn,oradea,deceleration,manhunter,laryngeal,fraudulently,janez,wendover,haplotype,janaki,naoki,belizean,mellencamp,cartographic,sadhana,tricolour,pseudoscience,satara,bytow,s.p.a.,jagdgeschwader,arcot,omagh,sverdrup,masterplan,surtees,apocrypha,ahvaz,d'amato,socratic,leumit,unnumbered,nandini,witold,marsupial,coalesced,interpolated,gimnasia,karadzic,keratin,mamoru,aldeburgh,speculator,escapement,irfan,kashyap,satyajit,haddington,solver,rothko,ashkelon,kickapoo,yeomen,superbly,bloodiest,greenlandic,lithic,autofocus,yardbirds,poona,keble,javan,sufis,expandable,tumblr,ursuline,swimwear,winwood,counsellors,aberrations,marginalised,befriending,workouts,predestination,varietal,siddhartha,dunkeld,judaic,esquimalt,shabab,ajith,telefonica,stargard,hoysala,radhakrishnan,sinusoidal,strada,hiragana,cebuano,monoid,independencia,floodwaters,mildura,mudflats,ottokar,translit,radix,wigner,philosophically,tephritid,synthesizing,castletown,installs,stirner,resettle,bushfire,choirmaster,kabbalistic,shirazi,lightship,rebus,colonizers,centrifuge,leonean,kristofferson,thymus,clackamas,ratnam,rothesay,municipally,centralia,thurrock,gulfport,bilinear,desirability,merite,psoriasis,macaw,erigeron,consignment,mudstone,distorting,karlheinz,ramen,tailwheel,vitor,reinsurance,edifices,superannuation,dormancy,contagion,cobden,rendezvoused,prokaryotic,deliberative,patricians,feigned,degrades,starlings,sopot,viticultural,beaverton,overflowed,convener,garlands,michiel,ternopil,naturelle,biplanes,bagot,gamespy,ventspils,disembodied,flattening,profesional,londoners,arusha,scapular,forestall,pyridine,ulema,eurodance,aruna,callus,periodontal,coetzee,immobilized,o'meara,maharani,katipunan,reactants,zainab,microgravity,saintes,britpop,carrefour,constrain,adversarial,firebirds,brahmo,kashima,simca,surety,surpluses,superconductivity,gipuzkoa,cumans,tocantins,obtainable,humberside,roosting,'king,formula_54,minelayer,bessel,sulayman,cycled,biomarkers,annealing,shusha,barda,cassation,djing,polemics,tuple,directorates,indomitable,obsolescence,wilhelmine,pembina,bojan,tambo,dioecious,pensioner,magnificat,1660s,estrellas,southeasterly,immunodeficiency,railhead,surreptitiously,codeine,encores,religiosity,tempera,camberley,efendi,boardings,malleable,hagia,input/output,lucasfilm,ujjain,polymorphisms,creationist,berners,mickiewicz,irvington,linkedin,endures,kinect,munition,apologetics,fairlie,predicated,reprinting,ethnographer,variances,levantine,mariinsky,jadid,jarrow,asia/oceania,trinamool,waveforms,bisexuality,preselection,pupae,buckethead,hieroglyph,lyricists,marionette,dunbartonshire,restorer,monarchical,pazar,kickoffs,cabildo,savannas,gliese,dench,spoonbills,novelette,diliman,hypersensitivity,authorising,montefiore,mladen,qu'appelle,theistic,maruti,laterite,conestoga,saare,californica,proboscis,carrickfergus,imprecise,hadassah,baghdadi,jolgeh,deshmukh,amusements,heliopolis,berle,adaptability,partenkirchen,separations,baikonur,cardamom,southeastward,southfield,muzaffar,adequacy,metropolitana,rajkot,kiyoshi,metrobus,evictions,reconciles,librarianship,upsurge,knightley,badakhshan,proliferated,spirituals,burghley,electroacoustic,professing,featurette,reformists,skylab,descriptors,oddity,greyfriars,injects,salmond,lanzhou,dauntless,subgenera,underpowered,transpose,mahinda,gatos,aerobatics,seaworld,blocs,waratahs,joris,giggs,perfusion,koszalin,mieczyslaw,ayyubid,ecologists,modernists,sant'angelo,quicktime,him/her,staves,sanyo,melaka,acrocercops,qigong,iterated,generalizes,recuperation,vihara,circassians,psychical,chavo,memoires,infiltrates,notaries,pelecaniformesfamily,strident,chivalric,pierrepont,alleviating,broadsides,centipede,b.tech,reinterpreted,sudetenland,hussite,covenanters,radhika,ironclads,gainsbourg,testis,penarth,plantar,azadegan,beano,espn.com,leominster,autobiographies,nbcuniversal,eliade,khamenei,montferrat,undistinguished,ethnological,wenlock,fricatives,polymorphic,biome,joule,sheaths,astrophysicist,salve,neoclassicism,lovat,downwind,belisarius,forma,usurpation,freie,depopulation,backbench,ascenso,'high,aagpbl,gdanski,zalman,mouvement,encapsulation,bolshevism,statny,voyageurs,hywel,vizcaya,mazra'eh,narthex,azerbaijanis,cerebrospinal,mauretania,fantail,clearinghouse,bolingbroke,pequeno,ansett,remixing,microtubule,wrens,jawahar,palembang,gambian,hillsong,fingerboard,repurposed,sundry,incipient,veolia,theologically,ulaanbaatar,atsushi,foundling,resistivity,myeloma,factbook,mazowiecka,diacritic,urumqi,clontarf,provokes,intelsat,professes,materialise,portobello,benedictines,panionios,introverted,reacquired,bridport,mammary,kripke,oratorios,vlore,stoning,woredas,unreported,antti,togolese,fanzines,heuristics,conservatories,carburetors,clitheroe,cofounded,formula_57,erupting,quinnipiac,bootle,ghostface,sittings,aspinall,sealift,transferase,boldklub,siskiyou,predominated,francophonie,ferruginous,castrum,neogene,sakya,madama,precipitous,'love,posix,bithynia,uttara,avestan,thrushes,seiji,memorably,septimius,libri,cibernetico,hyperinflation,dissuaded,cuddalore,peculiarity,vaslui,grojec,albumin,thurles,casks,fasteners,fluidity,buble,casals,terek,gnosticism,cognates,ulnar,radwanska,babylonians,majuro,oxidizer,excavators,rhythmically,liffey,gorakhpur,eurydice,underscored,arborea,lumumba,tuber,catholique,grama,galilei,scrope,centreville,jacobin,bequests,ardeche,polygamous,montauban,terai,weatherboard,readability,attainder,acraea,transversely,rivets,winterbottom,reassures,bacteriology,vriesea,chera,andesite,dedications,homogenous,reconquered,bandon,forrestal,ukiyo,gurdjieff,tethys,sparc,muscogee,grebes,belchatow,mansa,blantyre,palliser,sokolow,fibroblasts,exmoor,misaki,soundscapes,housatonic,middelburg,convenor,leyla,antipope,histidine,okeechobee,alkenes,sombre,alkene,rubik,macaques,calabar,trophee,pinchot,'free,frusciante,chemins,falaise,vasteras,gripped,schwarzenberg,cumann,kanchipuram,acoustically,silverbacks,fangio,inset,plympton,kuril,vaccinations,recep,theropods,axils,stavropol,encroached,apoptotic,papandreou,wailers,moonstone,assizes,micrometers,hornchurch,truncation,annapurna,egyptologists,rheumatic,promiscuity,satiric,fleche,caloptilia,anisotropy,quaternions,gruppo,viscounts,awardees,aftershocks,sigint,concordance,oblasts,gaumont,stent,commissars,kesteven,hydroxy,vijayanagar,belorussian,fabricius,watermark,tearfully,mamet,leukaemia,sorkh,milepost,tattooing,vosta,abbasids,uncompleted,hedong,woodwinds,extinguishing,malus,multiplexes,francoist,pathet,responsa,bassists,'most,postsecondary,ossory,grampian,saakashvili,alito,strasberg,impressionistic,volador,gelatinous,vignette,underwing,campanian,abbasabad,albertville,hopefuls,nieuwe,taxiways,reconvened,recumbent,pathologists,unionized,faversham,asymptotically,romulo,culling,donja,constricted,annesley,duomo,enschede,lovech,sharpshooter,lansky,dhamma,papillae,alanine,mowat,delius,wrest,mcluhan,podkarpackie,imitators,bilaspur,stunting,pommel,casemate,handicaps,nagas,testaments,hemings,necessitate,rearward,locative,cilla,klitschko,lindau,merion,consequential,antic,soong,copula,berthing,chevrons,rostral,sympathizer,budokan,ranulf,beria,stilt,replying,conflated,alcibiades,painstaking,yamanashi,calif.,arvid,ctesiphon,xizong,rajas,caxton,downbeat,resurfacing,rudders,miscegenation,deathmatch,foregoing,arthropod,attestation,karts,reapportionment,harnessing,eastlake,schola,dosing,postcolonial,imtiaz,formula_55,insulators,gunung,accumulations,pampas,llewelyn,bahnhof,cytosol,grosjean,teaneck,briarcliff,arsenio,canara,elaborating,passchendaele,searchlights,holywell,mohandas,preventable,gehry,mestizos,ustinov,cliched,'national,heidfeld,tertullian,jihadist,tourer,miletus,semicircle,outclassed,bouillon,cardinalate,clarifies,dakshina,bilayer,pandyan,unrwa,chandragupta,formula_56,portola,sukumaran,lactation,islamia,heikki,couplers,misappropriation,catshark,montt,ploughs,carib,stator,leaderboard,kenrick,dendrites,scape,tillamook,molesworth,mussorgsky,melanesia,restated,troon,glycoside,truckee,headwater,mashup,sectoral,gangwon,docudrama,skirting,psychopathology,dramatised,ostroleka,infestations,thabo,depolarization,wideroe,eisenbahn,thomond,kumaon,upendra,foreland,acronyms,yaqui,retaking,raphaelite,specie,dupage,villars,lucasarts,chloroplast,werribee,balsa,ascribe,havant,flava,khawaja,tyumen,subtract,interrogators,reshaping,buzzcocks,eesti,campanile,potemkin,apertures,snowboarder,registrars,handbooks,boyar,contaminant,depositors,proximate,jeunesse,zagora,pronouncements,mists,nihilism,deified,margraviate,pietersen,moderators,amalfi,adjectival,copepods,magnetosphere,pallets,clemenceau,castra,perforation,granitic,troilus,grzegorz,luthier,dockyards,antofagasta,ffestiniog,subroutine,afterword,waterwheel,druce,nitin,undifferentiated,emacs,readmitted,barneveld,tapers,hittites,infomercials,infirm,braathens,heligoland,carpark,geomagnetic,musculoskeletal,nigerien,machinima,harmonize,repealing,indecency,muskoka,verite,steubenville,suffixed,cytoskeleton,surpasses,harmonia,imereti,ventricles,heterozygous,envisions,otsego,ecoles,warrnambool,burgenland,seria,rawat,capistrano,welby,kirin,enrollments,caricom,dragonlance,schaffhausen,expanses,photojournalism,brienne,etude,referent,jamtland,schemas,xianbei,cleburne,bicester,maritima,shorelines,diagonals,bjelke,nonpublic,aliasing,m.f.a,ovals,maitreya,skirmishing,grothendieck,sukhothai,angiotensin,bridlington,durgapur,contras,gakuen,skagit,rabbinate,tsunamis,haphazard,tyldesley,microcontroller,discourages,hialeah,compressing,septimus,larvik,condoleezza,psilocybin,protectionism,songbirds,clandestinely,selectmen,wargame,cinemascope,khazars,agronomy,melzer,latifah,cherokees,recesses,assemblymen,basescu,banaras,bioavailability,subchannels,adenine,o'kelly,prabhakar,leonese,dimethyl,testimonials,geoffroy,oxidant,universiti,gheorghiu,bohdan,reversals,zamorin,herbivore,jarre,sebastiao,infanterie,dolmen,teddington,radomsko,spaceships,cuzco,recapitulation,mahoning,bainimarama,myelin,aykroyd,decals,tokelau,nalgonda,rajasthani,121st,quelled,tambov,illyrians,homilies,illuminations,hypertrophy,grodzisk,inundation,incapacity,equilibria,combats,elihu,steinitz,berengar,gowda,canwest,khosrau,maculata,houten,kandinsky,onside,leatherhead,heritable,belvidere,federative,chukchi,serling,eruptive,patan,entitlements,suffragette,evolutions,migrates,demobilisation,athleticism,trope,sarpsborg,kensal,translink,squamish,concertgebouw,energon,timestamp,competences,zalgiris,serviceman,codice_7,spoofing,assange,mahadevan,skien,suceava,augustan,revisionism,unconvincing,hollande,drina,gottlob,lippi,broglie,darkening,tilapia,eagerness,nacht,kolmogorov,photometric,leeuwarden,jrotc,haemorrhage,almanack,cavalli,repudiation,galactose,zwickau,cetinje,houbraken,heavyweights,gabonese,ordinals,noticias,museveni,steric,charaxes,amjad,resection,joinville,leczyca,anastasius,purbeck,subtribe,dalles,leadoff,monoamine,jettisoned,kaori,anthologized,alfreton,indic,bayezid,tottori,colonizing,assassinating,unchanging,eusebian,d'estaing,tsingtao,toshio,transferases,peronist,metrology,equus,mirpur,libertarianism,kovil,indole,'green,abstention,quantitatively,icebreakers,tribals,mainstays,dryandra,eyewear,nilgiri,chrysanthemum,inositol,frenetic,merchantman,hesar,physiotherapist,transceiver,dancefloor,rankine,neisse,marginalization,lengthen,unaided,rework,pageantry,savio,striated,funen,witton,illuminates,frass,hydrolases,akali,bistrita,copywriter,firings,handballer,tachinidae,dmytro,coalesce,neretva,menem,moraines,coatbridge,crossrail,spoofed,drosera,ripen,protour,kikuyu,boleslav,edwardes,troubadours,haplogroups,wrasse,educationalist,sroda,khaneh,dagbladet,apennines,neuroscientist,deplored,terje,maccabees,daventry,spaceport,lessening,ducats,singer/guitarist,chambersburg,yeong,configurable,ceremonially,unrelenting,caffe,graaf,denizens,kingsport,ingush,panhard,synthesised,tumulus,homeschooled,bozorg,idiomatic,thanhouser,queensway,radek,hippolytus,inking,banovina,peacocks,piaui,handsworth,pantomimes,abalone,thera,kurzweil,bandura,augustinians,bocelli,ferrol,jiroft,quadrature,contravention,saussure,rectification,agrippina,angelis,matanzas,nidaros,palestrina,latium,coriolis,clostridium,ordain,uttering,lanchester,proteolytic,ayacucho,merseburg,holbein,sambalpur,algebraically,inchon,ostfold,savoia,calatrava,lahiri,judgeship,ammonite,masaryk,meyerbeer,hemorrhagic,superspeedway,ningxia,panicles,encircles,khmelnytsky,profusion,esher,babol,inflationary,anhydride,gaspe,mossy,periodicity,nacion,meteorologists,mahjong,interventional,sarin,moult,enderby,modell,palgrave,warners,montcalm,siddha,functionalism,rilke,politicized,broadmoor,kunste,orden,brasileira,araneta,eroticism,colquhoun,mamba,blacktown,tubercle,seagrass,manoel,camphor,neoregelia,llandudno,annexe,enplanements,kamien,plovers,statisticians,iturbide,madrasah,nontrivial,publican,landholders,manama,uninhabitable,revivalist,trunkline,friendliness,gurudwara,rocketry,unido,tripos,besant,braque,evolutionarily,abkhazian,staffel,ratzinger,brockville,bohemond,intercut,djurgarden,utilitarianism,deploys,sastri,absolutism,subhas,asghar,fictions,sepinwall,proportionately,titleholders,thereon,foursquare,machinegun,knightsbridge,siauliai,aqaba,gearboxes,castaways,weakens,phallic,strzelce,buoyed,ruthenia,pharynx,intractable,neptunes,koine,leakey,netherlandish,preempted,vinay,terracing,instigating,alluvium,prosthetics,vorarlberg,politiques,joinery,reduplication,nebuchadnezzar,lenticular,banka,seaborne,pattinson,helpline,aleph,beckenham,californians,namgyal,franziska,aphid,branagh,transcribe,appropriateness,surakarta,takings,propagates,juraj,b0d3fb,brera,arrayed,tailback,falsehood,hazleton,prosody,egyptology,pinnate,tableware,ratan,camperdown,ethnologist,tabari,classifiers,biogas,126th,kabila,arbitron,apuestas,membranous,kincardine,oceana,glories,natick,populism,synonymy,ghalib,mobiles,motherboards,stationers,germinal,patronised,formula_58,gaborone,torts,jeezy,interleague,novaya,batticaloa,offshoots,wilbraham,filename,nswrfl,'well,trilobite,pythons,optimally,scientologists,rhesus,pilsen,backdrops,batang,unionville,hermanos,shrikes,fareham,outlawing,discontinuing,boisterous,shamokin,scanty,southwestward,exchangers,unexpired,mewar,h.m.s,saldanha,pawan,condorcet,turbidity,donau,indulgences,coincident,cliques,weeklies,bardhaman,violators,kenai,caspase,xperia,kunal,fistula,epistemic,cammell,nephi,disestablishment,rotator,germaniawerft,pyaar,chequered,jigme,perlis,anisotropic,popstars,kapil,appendices,berat,defecting,shacks,wrangel,panchayath,gorna,suckling,aerosols,sponheim,talal,borehole,encodings,enlai,subduing,agong,nadar,kitsap,syrmia,majumdar,pichilemu,charleville,embryology,booting,literati,abutting,basalts,jussi,repubblica,hertogenbosch,digitization,relents,hillfort,wiesenthal,kirche,bhagwan,bactrian,oases,phyla,neutralizing,helsing,ebooks,spearheading,margarine,'golden,phosphor,picea,stimulants,outliers,timescale,gynaecology,integrator,skyrocketed,bridgnorth,senecio,ramachandra,suffragist,arrowheads,aswan,inadvertent,microelectronics,118th,sofer,kubica,melanesian,tuanku,balkh,vyborg,crystallographic,initiators,metamorphism,ginzburg,looters,unimproved,finistere,newburyport,norges,immunities,franchisees,asterism,kortrijk,camorra,komsomol,fleurs,draughts,patagonian,voracious,artin,collaborationist,revolucion,revitalizing,xaver,purifying,antipsychotic,disjunct,pompeius,dreamwave,juvenal,beinn,adiyaman,antitank,allama,boletus,melanogaster,dumitru,caproni,aligns,athabaskan,stobart,phallus,veikkausliiga,hornsey,buffering,bourbons,dobruja,marga,borax,electrics,gangnam,motorcyclist,whidbey,draconian,lodger,galilean,sanctification,imitates,boldness,underboss,wheatland,cantabrian,terceira,maumee,redefining,uppercase,ostroda,characterise,universalism,equalized,syndicalism,haringey,masovia,deleuze,funkadelic,conceals,thuan,minsky,pluralistic,ludendorff,beekeeping,bonfires,endoscopic,abuts,prebend,jonkoping,amami,tribunes,yup'ik,awadh,gasification,pforzheim,reforma,antiwar,vaishnavism,maryville,inextricably,margrethe,empresa,neutrophils,sanctified,ponca,elachistidae,curiae,quartier,mannar,hyperplasia,wimax,busing,neologism,florins,underrepresented,digitised,nieuw,cooch,howards,frege,hughie,plied,swale,kapellmeister,vajpayee,quadrupled,aeronautique,dushanbe,custos,saltillo,kisan,tigray,manaus,epigrams,shamanic,peppered,frosts,promotion/relegation,concedes,zwingli,charentes,whangarei,hyung,spring/summer,sobre,eretz,initialization,sawai,ephemera,grandfathered,arnaldo,customised,permeated,parapets,growths,visegrad,estudios,altamont,provincia,apologises,stoppard,carburettor,rifts,kinematic,zhengzhou,eschatology,prakrit,folate,yvelines,scapula,stupas,rishon,reconfiguration,flutist,1680s,apostolate,proudhon,lakshman,articulating,stortford,faithfull,bitterns,upwelling,qur'anic,lidar,interferometry,waterlogged,koirala,ditton,wavefunction,fazal,babbage,antioxidants,lemberg,deadlocked,tolled,ramapo,mathematica,leiria,topologies,khali,photonic,balti,1080p,corrects,recommenced,polyglot,friezes,tiebreak,copacabana,cholmondeley,armband,abolishment,sheamus,buttes,glycolysis,cataloged,warrenton,sassari,kishan,foodservice,cryptanalysis,holmenkollen,cosplay,machi,yousuf,mangal,allying,fertiliser,otomi,charlevoix,metallurg,parisians,bottlenose,oakleigh,debug,cidade,accede,ligation,madhava,pillboxes,gatefold,aveyron,sorin,thirsk,immemorial,menelik,mehra,domingos,underpinned,fleshed,harshness,diphthong,crestwood,miskolc,dupri,pyrausta,muskingum,tuoba,prodi,incidences,waynesboro,marquesas,heydar,artesian,calinescu,nucleation,funders,covalently,compaction,derbies,seaters,sodor,tabular,amadou,peckinpah,o'halloran,zechariah,libyans,kartik,daihatsu,chandran,erzhu,heresies,superheated,yarder,dorde,tanjore,abusers,xuanwu,juniperus,moesia,trusteeship,birdwatching,beatz,moorcock,harbhajan,sanga,choreographic,photonics,boylston,amalgamate,prawns,electrifying,sarath,inaccurately,exclaims,powerpoint,chaining,cpusa,adulterous,saccharomyces,glogow,vfl/afl,syncretic,simla,persisting,functors,allosteric,euphorbiaceae,juryo,mlada,moana,gabala,thornycroft,kumanovo,ostrovsky,sitio,tutankhamun,sauropods,kardzhali,reinterpretation,sulpice,rosyth,originators,halesowen,delineation,asesoria,abatement,gardai,elytra,taillights,overlays,monsoons,sandpipers,ingmar,henrico,inaccuracy,irwell,arenabowl,elche,pressburg,signalman,interviewees,sinkhole,pendle,ecommerce,cellos,nebria,organometallic,surrealistic,propagandist,interlaken,canandaigua,aerials,coutinho,pascagoula,tonopah,letterkenny,gropius,carbons,hammocks,childe,polities,hosiery,donitz,suppresses,diaghilev,stroudsburg,bagram,pistoia,regenerating,unitarians,takeaway,offstage,vidin,glorification,bakunin,yavapai,lutzow,sabercats,witney,abrogated,gorlitz,validating,dodecahedron,stubbornly,telenor,glaxosmithkline,solapur,undesired,jellicoe,dramatization,four-and-a-half,seawall,waterpark,artaxerxes,vocalization,typographic,byung,sachsenhausen,shepparton,kissimmee,konnan,belsen,dhawan,khurd,mutagenesis,vejle,perrot,estradiol,formula_60,saros,chiloe,misiones,lamprey,terrains,speke,miasto,eigenvectors,haydock,reservist,corticosteroids,savitri,shinawatra,developmentally,yehudi,berates,janissaries,recapturing,rancheria,subplots,gresley,nikkatsu,oryol,cosmas,boavista,formula_59,playfully,subsections,commentated,kathakali,dorid,vilaine,seepage,hylidae,keiji,kazakhs,triphosphate,1620s,supersede,monarchists,falla,miyako,notching,bhumibol,polarizing,secularized,shingled,bronislaw,lockerbie,soleyman,bundesbahn,latakia,redoubts,boult,inwardly,invents,ondrej,minangkabau,newquay,permanente,alhaji,madhav,malini,ellice,bookmaker,mankiewicz,etihad,o'dea,interrogative,mikawa,wallsend,canisius,bluesy,vitruvius,noord,ratifying,mixtec,gujranwala,subprefecture,keelung,goiania,nyssa,shi'ite,semitone,ch'uan,computerised,pertuan,catapults,nepomuk,shruti,millstones,buskerud,acolytes,tredegar,sarum,armia,dell'arte,devises,custodians,upturned,gallaudet,disembarking,thrashed,sagrada,myeon,undeclared,qumran,gaiden,tepco,janesville,showground,condense,chalon,unstaffed,pasay,undemocratic,hauts,viridis,uninjured,escutcheon,gymkhana,petaling,hammam,dislocations,tallaght,rerum,shias,indios,guaranty,simplicial,benares,benediction,tajiri,prolifically,huawei,onerous,grantee,ferencvaros,otranto,carbonates,conceit,digipak,qadri,masterclasses,swamiji,cradock,plunket,helmsman,119th,salutes,tippecanoe,murshidabad,intelligibility,mittal,diversifying,bidar,asansol,crowdsourcing,rovere,karakoram,grindcore,skylights,tulagi,furrows,ligne,stuka,sumer,subgraph,amata,regionalist,bulkeley,teletext,glorify,readied,lexicographer,sabadell,predictability,quilmes,phenylalanine,bandaranaike,pyrmont,marksmen,quisling,viscountess,sociopolitical,afoul,pediments,swazi,martyrology,nullify,panagiotis,superconductors,veldenz,jujuy,l'isle,hematopoietic,shafi,subsea,hattiesburg,jyvaskyla,kebir,myeloid,landmine,derecho,amerindians,birkenau,scriabin,milhaud,mucosal,nikaya,freikorps,theoretician,proconsul,o'hanlon,clerked,bactria,houma,macular,topologically,shrubby,aryeh,ghazali,afferent,magalhaes,moduli,ashtabula,vidarbha,securitate,ludwigsburg,adoor,varun,shuja,khatun,chengde,bushels,lascelles,professionnelle,elfman,rangpur,unpowered,citytv,chojnice,quaternion,stokowski,aschaffenburg,commutes,subramaniam,methylene,satrap,gharb,namesakes,rathore,helier,gestational,heraklion,colliers,giannis,pastureland,evocation,krefeld,mahadeva,churchmen,egret,yilmaz,galeazzo,pudukkottai,artigas,generalitat,mudslides,frescoed,enfeoffed,aphorisms,melilla,montaigne,gauliga,parkdale,mauboy,linings,prema,sapir,xylophone,kushan,rockne,sequoyah,vasyl,rectilinear,vidyasagar,microcosm,san'a,carcinogen,thicknesses,aleut,farcical,moderating,detested,hegemonic,instalments,vauban,verwaltungsgemeinschaft,picayune,razorback,magellanic,moluccas,pankhurst,exportation,waldegrave,sufferer,bayswater,1up.com,rearmament,orangutans,varazdin,b.o.b,elucidate,harlingen,erudition,brankovic,lapis,slipway,urraca,shinde,unwell,elwes,euboea,colwyn,srivijaya,grandstands,hortons,generalleutnant,fluxes,peterhead,gandhian,reals,alauddin,maximized,fairhaven,endow,ciechanow,perforations,darters,panellist,manmade,litigants,exhibitor,tirol,caracalla,conformance,hotelier,stabaek,hearths,borac,frisians,ident,veliko,emulators,schoharie,uzbeks,samarra,prestwick,wadia,universita,tanah,bucculatrix,predominates,genotypes,denounces,roadsides,ganassi,keokuk,philatelist,tomic,ingots,conduits,samplers,abdus,johar,allegories,timaru,wolfpacks,secunda,smeaton,sportivo,inverting,contraindications,whisperer,moradabad,calamities,bakufu,soundscape,smallholders,nadeem,crossroad,xenophobic,zakir,nationalliga,glazes,retroflex,schwyz,moroder,rubra,quraysh,theodoros,endemol,infidels,km/hr,repositioned,portraitist,lluis,answerable,arges,mindedness,coarser,eyewall,teleported,scolds,uppland,vibraphone,ricoh,isenburg,bricklayer,cuttlefish,abstentions,communicable,cephalopod,stockyards,balto,kinston,armbar,bandini,elphaba,maxims,bedouins,sachsen,friedkin,tractate,pamir,ivanovo,mohini,kovalainen,nambiar,melvyn,orthonormal,matsuyama,cuernavaca,veloso,overstated,streamer,dravid,informers,analyte,sympathized,streetscape,gosta,thomasville,grigore,futuna,depleting,whelks,kiedis,armadale,earner,wynyard,dothan,animating,tridentine,sabri,immovable,rivoli,ariege,parley,clinker,circulates,junagadh,fraunhofer,congregants,180th,buducnost,formula_62,olmert,dedekind,karnak,bayernliga,mazes,sandpiper,ecclestone,yuvan,smallmouth,decolonization,lemmy,adjudicated,retiro,legia,benue,posit,acidification,wahab,taconic,floatplane,perchlorate,atria,wisbech,divestment,dallara,phrygia,palustris,cybersecurity,rebates,facie,mineralogical,substituent,proteges,fowey,mayenne,smoothbore,cherwell,schwarzschild,junin,murrumbidgee,smalltalk,d'orsay,emirati,calaveras,titusville,theremin,vikramaditya,wampanoag,burra,plaines,onegin,emboldened,whampoa,langa,soderbergh,arnaz,sowerby,arendal,godunov,pathanamthitta,damselfly,bestowing,eurosport,iconoclasm,outfitters,acquiesced,badawi,hypotension,ebbsfleet,annulus,sohrab,thenceforth,chagatai,necessitates,aulus,oddities,toynbee,uniontown,innervation,populaire,indivisible,rossellini,minuet,cyrene,gyeongju,chania,cichlids,harrods,1690s,plunges,abdullahi,gurkhas,homebuilt,sortable,bangui,rediff,incrementally,demetrios,medaille,sportif,svend,guttenberg,tubules,carthusian,pleiades,torii,hoppus,phenyl,hanno,conyngham,teschen,cronenberg,wordless,melatonin,distinctiveness,autos,freising,xuanzang,dunwich,satanism,sweyn,predrag,contractually,pavlovic,malaysians,micrometres,expertly,pannonian,abstaining,capensis,southwesterly,catchphrases,commercialize,frankivsk,normanton,hibernate,verso,deportees,dubliners,codice_8,condors,zagros,glosses,leadville,conscript,morrisons,usury,ossian,oulton,vaccinium,civet,ayman,codrington,hadron,nanometers,geochemistry,extractor,grigori,tyrrhenian,neocollyris,drooping,falsification,werft,courtauld,brigantine,orhan,chapultepec,supercopa,federalized,praga,havering,encampments,infallibility,sardis,pawar,undirected,reconstructionist,ardrossan,varuna,pastimes,archdiocesan,fledging,shenhua,molise,secondarily,stagnated,replicates,ciencias,duryodhana,marauding,ruislip,ilyich,intermixed,ravenswood,shimazu,mycorrhizal,icosahedral,consents,dunblane,follicular,pekin,suffield,muromachi,kinsale,gauche,businesspeople,thereto,watauga,exaltation,chelmno,gorse,proliferate,drainages,burdwan,kangra,transducers,inductor,duvalier,maguindanao,moslem,uncaf,givenchy,plantarum,liturgics,telegraphs,lukashenko,chenango,andante,novae,ironwood,faubourg,torme,chinensis,ambala,pietermaritzburg,virginians,landform,bottlenecks,o'driscoll,darbhanga,baptistery,ameer,needlework,naperville,auditoriums,mullingar,starrer,animatronic,topsoil,madura,cannock,vernet,santurce,catocala,ozeki,pontevedra,multichannel,sundsvall,strategists,medio,135th,halil,afridi,trelawny,caloric,ghraib,allendale,hameed,ludwigshafen,spurned,pavlo,palmar,strafed,catamarca,aveiro,harmonization,surah,predictors,solvay,mande,omnipresent,parenthesis,echolocation,equaling,experimenters,acyclic,lithographic,sepoys,katarzyna,sridevi,impoundment,khosrow,caesarean,nacogdoches,rockdale,lawmaker,caucasians,bahman,miyan,rubric,exuberance,bombastic,ductile,snowdonia,inlays,pinyon,anemones,hurries,hospitallers,tayyip,pulleys,treme,photovoltaics,testbed,polonium,ryszard,osgoode,profiting,ironwork,unsurpassed,nepticulidae,makai,lumbini,preclassic,clarksburg,egremont,videography,rehabilitating,ponty,sardonic,geotechnical,khurasan,solzhenitsyn,henna,phoenicia,rhyolite,chateaux,retorted,tomar,deflections,repressions,harborough,renan,brumbies,vandross,storia,vodou,clerkenwell,decking,universo,salon.com,imprisoning,sudwest,ghaziabad,subscribing,pisgah,sukhumi,econometric,clearest,pindar,yildirim,iulia,atlases,cements,remaster,dugouts,collapsible,resurrecting,batik,unreliability,thiers,conjunctions,colophon,marcher,placeholder,flagella,wolds,kibaki,viviparous,twelver,screenshots,aroostook,khadr,iconographic,itasca,jaume,basti,propounded,varro,be'er,jeevan,exacted,shrublands,creditable,brocade,boras,bittern,oneonta,attentional,herzliya,comprehensible,lakeville,discards,caxias,frankland,camerata,satoru,matlab,commutator,interprovincial,yorkville,benefices,nizami,edwardsville,amigaos,cannabinoid,indianola,amateurliga,pernicious,ubiquity,anarchic,novelties,precondition,zardari,symington,sargodha,headphone,thermopylae,mashonaland,zindagi,thalberg,loewe,surfactants,dobro,crocodilians,samhita,diatoms,haileybury,berwickshire,supercritical,sofie,snorna,slatina,intramolecular,agung,osteoarthritis,obstetric,teochew,vakhtang,connemara,deformations,diadem,ferruccio,mainichi,qualitatively,refrigerant,rerecorded,methylated,karmapa,krasinski,restatement,rouvas,cubitt,seacoast,schwarzkopf,homonymous,shipowner,thiamine,approachable,xiahou,160th,ecumenism,polistes,internazionali,fouad,berar,biogeography,texting,inadequately,'when,4kids,hymenoptera,emplaced,cognomen,bellefonte,supplant,michaelmas,uriel,tafsir,morazan,schweinfurt,chorister,ps400,nscaa,petipa,resolutely,ouagadougou,mascarene,supercell,konstanz,bagrat,harmonix,bergson,shrimps,resonators,veneta,camas,mynydd,rumford,generalmajor,khayyam,web.com,pappus,halfdan,tanana,suomen,yutaka,bibliographical,traian,silat,noailles,contrapuntal,agaricus,'special,minibuses,1670s,obadiah,deepa,rorschach,malolos,lymington,valuations,imperials,caballeros,ambroise,judicature,elegiac,sedaka,shewa,checksum,gosforth,legionaries,corneille,microregion,friedrichshafen,antonis,surnamed,mycelium,cantus,educations,topmost,outfitting,ivica,nankai,gouda,anthemic,iosif,supercontinent,antifungal,belarusians,mudaliar,mohawks,caversham,glaciated,basemen,stevan,clonmel,loughton,deventer,positivist,manipuri,tensors,panipat,changeup,impermeable,dubbo,elfsborg,maritimo,regimens,bikram,bromeliad,substratum,norodom,gaultier,queanbeyan,pompeo,redacted,eurocopter,mothballed,centaurs,borno,copra,bemidji,'home,sopron,neuquen,passo,cineplex,alexandrov,wysokie,mammoths,yossi,sarcophagi,congreve,petkovic,extraneous,waterbirds,slurs,indias,phaeton,discontented,prefaced,abhay,prescot,interoperable,nordisk,bicyclists,validly,sejong,litovsk,zanesville,kapitanleutnant,kerch,changeable,mcclatchy,celebi,attesting,maccoll,sepahan,wayans,veined,gaudens,markt,dansk,soane,quantized,petersham,forebears,nayarit,frenzied,queuing,bygone,viggo,ludwik,tanka,hanssen,brythonic,cornhill,primorsky,stockpiles,conceptualization,lampeter,hinsdale,mesoderm,bielsk,rosenheim,ultron,joffrey,stanwyck,khagan,tiraspol,pavelic,ascendant,empoli,metatarsal,descentralizado,masada,ligier,huseyin,ramadi,waratah,tampines,ruthenium,statoil,mladost,liger,grecian,multiparty,digraph,maglev,reconsideration,radiography,cartilaginous,taizu,wintered,anabaptist,peterhouse,shoghi,assessors,numerator,paulet,painstakingly,halakhic,rocroi,motorcycling,gimel,kryptonian,emmeline,cheeked,drawdown,lelouch,dacians,brahmana,reminiscence,disinfection,optimizations,golders,extensor,tsugaru,tolling,liman,gulzar,unconvinced,crataegus,oppositional,dvina,pyrolysis,mandan,alexius,prion,stressors,loomed,moated,dhivehi,recyclable,relict,nestlings,sarandon,kosovar,solvers,czeslaw,kenta,maneuverable,middens,berkhamsted,comilla,folkways,loxton,beziers,batumi,petrochemicals,optimised,sirjan,rabindra,musicality,rationalisation,drillers,subspaces,'live,bbwaa,outfielders,tsung,danske,vandalised,norristown,striae,kanata,gastroenterology,steadfastly,equalising,bootlegging,mannerheim,notodontidae,lagoa,commentating,peninsulas,chishti,seismology,modigliani,preceptor,canonically,awardee,boyaca,hsinchu,stiffened,nacelle,bogor,dryness,unobstructed,yaqub,scindia,peeters,irritant,ammonites,ferromagnetic,speechwriter,oxygenated,walesa,millais,canarian,faience,calvinistic,discriminant,rasht,inker,annexes,howth,allocates,conditionally,roused,regionalism,regionalbahn,functionary,nitrates,bicentenary,recreates,saboteurs,koshi,plasmids,thinned,124th,plainview,kardashian,neuville,victorians,radiates,127th,vieques,schoolmates,petru,tokusatsu,keying,sunaina,flamethrower,'bout,demersal,hosokawa,corelli,omniscient,o'doherty,niksic,reflectivity,transdev,cavour,metronome,temporally,gabba,nsaids,geert,mayport,hematite,boeotia,vaudreuil,torshavn,sailplane,mineralogist,eskisehir,practises,gallifrey,takumi,unease,slipstream,hedmark,paulinus,ailsa,wielkopolska,filmworks,adamantly,vinaya,facelifted,franchisee,augustana,toppling,velvety,crispa,stonington,histological,genealogist,tactician,tebow,betjeman,nyingma,overwinter,oberoi,rampal,overwinters,petaluma,lactarius,stanmore,balikpapan,vasant,inclines,laminate,munshi,sociedade,rabbah,septal,boyband,ingrained,faltering,inhumans,nhtsa,affix,l'ordre,kazuki,rossendale,mysims,latvians,slaveholders,basilicata,neuburg,assize,manzanillo,scrobipalpa,formula_61,belgique,pterosaurs,privateering,vaasa,veria,northport,pressurised,hobbyist,austerlitz,sahih,bhadra,siliguri,bistrica,bursaries,wynton,corot,lepidus,lully,libor,libera,olusegun,choline,mannerism,lymphocyte,chagos,duxbury,parasitism,ecowas,morotai,cancion,coniston,aggrieved,sputnikmusic,parle,ammonian,civilisations,malformation,cattaraugus,skyhawks,d'arc,demerara,bronfman,midwinter,piscataway,jogaila,threonine,matins,kohlberg,hubli,pentatonic,camillus,nigam,potro,unchained,chauvel,orangeville,cistercians,redeployment,xanthi,manju,carabinieri,pakeha,nikolaevich,kantakouzenos,sesquicentennial,gunships,symbolised,teramo,ballo,crusading,l'oeil,bharatpur,lazier,gabrovo,hysteresis,rothbard,chaumont,roundel,ma'mun,sudhir,queried,newts,shimane,presynaptic,playfield,taxonomists,sensitivities,freleng,burkinabe,orfeo,autovia,proselytizing,bhangra,pasok,jujutsu,heung,pivoting,hominid,commending,formula_64,epworth,christianized,oresund,hantuchova,rajputana,hilversum,masoretic,dayak,bakri,assen,magog,macromolecules,waheed,qaida,spassky,rumped,protrudes,preminger,misogyny,glencairn,salafi,lacunae,grilles,racemes,areva,alighieri,inari,epitomized,photoshoot,one-of-a-kind,tring,muralist,tincture,backwaters,weaned,yeasts,analytically,smaland,caltrans,vysocina,jamuna,mauthausen,175th,nouvelles,censoring,reggina,christology,gilad,amplifying,mehmood,johnsons,redirects,eastgate,sacrum,meteoric,riverbanks,guidebooks,ascribes,scoparia,iconoclastic,telegraphic,chine,merah,mistico,lectern,sheung,aethelstan,capablanca,anant,uspto,albatrosses,mymensingh,antiretroviral,clonal,coorg,vaillant,liquidator,gigas,yokai,eradicating,motorcyclists,waitakere,tandon,nears,montenegrins,250th,tatsuya,yassin,atheistic,syncretism,nahum,berisha,transcended,owensboro,lakshmana,abteilung,unadorned,nyack,overflows,harrisonburg,complainant,uematsu,frictional,worsens,sangguniang,abutment,bulwer,sarma,apollinaire,shippers,lycia,alentejo,porpoises,optus,trawling,augustow,blackwall,workbench,westmount,leaped,sikandar,conveniences,stornoway,culverts,zoroastrians,hristo,ansgar,assistive,reassert,fanned,compasses,delgada,maisons,arima,plonsk,verlaine,starstruck,rakhine,befell,spirally,wyclef,expend,colloquium,formula_63,albertus,bellarmine,handedness,holon,introns,movimiento,profitably,lohengrin,discoverers,awash,erste,pharisees,dwarka,oghuz,hashing,heterodox,uloom,vladikavkaz,linesman,rehired,nucleophile,germanicus,gulshan,songz,bayerische,paralympian,crumlin,enjoined,khanum,prahran,penitent,amersfoort,saranac,semisimple,vagrants,compositing,tualatin,oxalate,lavra,ironi,ilkeston,umpqua,calum,stretford,zakat,guelders,hydrazine,birkin,spurring,modularity,aspartate,sodermanland,hopital,bellary,legazpi,clasico,cadfael,hypersonic,volleys,pharmacokinetics,carotene,orientale,pausini,bataille,lunga,retailed,m.phil,mazowieckie,vijayan,rawal,sublimation,promissory,estimators,ploughed,conflagration,penda,segregationist,otley,amputee,coauthor,sopra,pellew,wreckers,tollywood,circumscription,permittivity,strabane,landward,articulates,beaverbrook,rutherglen,coterminous,whistleblowers,colloidal,surbiton,atlante,oswiecim,bhasa,lampooned,chanter,saarc,landkreis,tribulation,tolerates,daiichi,hatun,cowries,dyschirius,abercromby,attock,aldwych,inflows,absolutist,l'histoire,committeeman,vanbrugh,headstock,westbourne,appenzell,hoxton,oculus,westfalen,roundabouts,nickelback,trovatore,quenching,summarises,conservators,transmutation,talleyrand,barzani,unwillingly,axonal,'blue,opining,enveloping,fidesz,rafah,colborne,flickr,lozenge,dulcimer,ndebele,swaraj,oxidize,gonville,resonated,gilani,superiore,endeared,janakpur,shepperton,solidifying,memoranda,sochaux,kurnool,rewari,emirs,kooning,bruford,unavailability,kayseri,judicious,negating,pterosaur,cytosolic,chernihiv,variational,sabretooth,seawolves,devalued,nanded,adverb,volunteerism,sealers,nemours,smederevo,kashubian,bartin,animax,vicomte,polotsk,polder,archiepiscopal,acceptability,quidditch,tussock,seminaire,immolation,belge,coves,wellingborough,khaganate,mckellen,nayaka,brega,kabhi,pontoons,bascule,newsreels,injectors,cobol,weblog,diplo,biggar,wheatbelt,erythrocytes,pedra,showgrounds,bogdanovich,eclecticism,toluene,elegies,formalize,andromedae,airworthiness,springville,mainframes,overexpression,magadha,bijelo,emlyn,glutamine,accenture,uhuru,metairie,arabidopsis,patanjali,peruvians,berezovsky,accion,astrolabe,jayanti,earnestly,sausalito,recurved,1500s,ramla,incineration,galleons,laplacian,shiki,smethwick,isomerase,dordevic,janow,jeffersonville,internationalism,penciled,styrene,ashur,nucleoside,peristome,horsemanship,sedges,bachata,medes,kristallnacht,schneerson,reflectance,invalided,strutt,draupadi,destino,partridges,tejas,quadrennial,aurel,halych,ethnomusicology,autonomist,radyo,rifting,shi'ar,crvena,telefilm,zawahiri,plana,sultanates,theodorus,subcontractors,pavle,seneschal,teleports,chernivtsi,buccal,brattleboro,stankovic,safar,dunhuang,electrocution,chastised,ergonomic,midsomer,130th,zomba,nongovernmental,escapist,localize,xuzhou,kyrie,carinthian,karlovac,nisan,kramnik,pilipino,digitisation,khasi,andronicus,highwayman,maior,misspelling,sebastopol,socon,rhaetian,archimandrite,partway,positivity,otaku,dingoes,tarski,geopolitics,disciplinarian,zulfikar,kenzo,globose,electrophilic,modele,storekeeper,pohang,wheldon,washers,interconnecting,digraphs,intrastate,campy,helvetic,frontispiece,ferrocarril,anambra,petraeus,midrib,endometrial,dwarfism,mauryan,endocytosis,brigs,percussionists,furtherance,synergistic,apocynaceae,krona,berthier,circumvented,casal,siltstone,precast,ethnikos,realists,geodesy,zarzuela,greenback,tripathi,persevered,interments,neutralization,olbermann,departements,supercomputing,demobilised,cassavetes,dunder,ministering,veszprem,barbarism,'world,pieve,apologist,frentzen,sulfides,firewalls,pronotum,staatsoper,hachette,makhachkala,oberland,phonon,yoshihiro,instars,purnima,winslet,mutsu,ergative,sajid,nizamuddin,paraphrased,ardeidae,kodagu,monooxygenase,skirmishers,sportiva,o'byrne,mykolaiv,ophir,prieta,gyllenhaal,kantian,leche,copan,herero,ps250,gelsenkirchen,shalit,sammarinese,chetwynd,wftda,travertine,warta,sigmaringen,concerti,namespace,ostergotland,biomarker,universals,collegio,embarcadero,wimborne,fiddlers,likening,ransomed,stifled,unabated,kalakaua,khanty,gongs,goodrem,countermeasure,publicizing,geomorphology,swedenborg,undefended,catastrophes,diverts,storyboards,amesbury,contactless,placentia,festivity,authorise,terrane,thallium,stradivarius,antonine,consortia,estimations,consecrate,supergiant,belichick,pendants,butyl,groza,univac,afire,kavala,studi,teletoon,paucity,gonbad,koninklijke,128th,stoichiometric,multimodal,facundo,anatomic,melamine,creuse,altan,brigands,mcguinty,blomfield,tsvangirai,protrusion,lurgan,warminster,tenzin,russellville,discursive,definable,scotrail,lignin,reincorporated,o'dell,outperform,redland,multicolored,evaporates,dimitrie,limbic,patapsco,interlingua,surrogacy,cutty,potrero,masud,cahiers,jintao,ardashir,centaurus,plagiarized,minehead,musings,statuettes,logarithms,seaview,prohibitively,downforce,rivington,tomorrowland,microbiologist,ferric,morag,capsid,kucinich,clairvaux,demotic,seamanship,cicada,painterly,cromarty,carbonic,tupou,oconee,tehuantepec,typecast,anstruther,internalized,underwriters,tetrahedra,flagrant,quakes,pathologies,ulrik,nahal,tarquini,dongguan,parnassus,ryoko,senussi,seleucia,airasia,einer,sashes,d'amico,matriculating,arabesque,honved,biophysical,hardinge,kherson,mommsen,diels,icbms,reshape,brasiliensis,palmach,netaji,oblate,functionalities,grigor,blacksburg,recoilless,melanchthon,reales,astrodome,handcrafted,memes,theorizes,isma'il,aarti,pirin,maatschappij,stabilizes,honiara,ashbury,copts,rootes,defensed,queiroz,mantegna,galesburg,coraciiformesfamily,cabrillo,tokio,antipsychotics,kanon,173rd,apollonia,finial,lydian,hadamard,rangi,dowlatabad,monolingual,platformer,subclasses,chiranjeevi,mirabeau,newsgroup,idmanyurdu,kambojas,walkover,zamoyski,generalist,khedive,flanges,knowle,bande,157th,alleyn,reaffirm,pininfarina,zuckerberg,hakodate,131st,aditi,bellinzona,vaulter,planking,boscombe,colombians,lysis,toppers,metered,nahyan,queensryche,minho,nagercoil,firebrand,foundress,bycatch,mendota,freeform,antena,capitalisation,martinus,overijssel,purists,interventionist,zgierz,burgundians,hippolyta,trompe,umatilla,moroccans,dictionnaire,hydrography,changers,chota,rimouski,aniline,bylaw,grandnephew,neamt,lemnos,connoisseurs,tractive,rearrangements,fetishism,finnic,apalachicola,landowning,calligraphic,circumpolar,mansfeld,legible,orientalism,tannhauser,blamey,maximization,noinclude,blackbirds,angara,ostersund,pancreatitis,glabra,acleris,juried,jungian,triumphantly,singlet,plasmas,synesthesia,yellowhead,unleashes,choiseul,quanzhong,brookville,kaskaskia,igcse,skatepark,jatin,jewellers,scaritinae,techcrunch,tellurium,lachaise,azuma,codeshare,dimensionality,unidirectional,scolaire,macdill,camshafts,unassisted,verband,kahlo,eliya,prelature,chiefdoms,saddleback,sockers,iommi,coloratura,llangollen,biosciences,harshest,maithili,k'iche,plical,multifunctional,andreu,tuskers,confounding,sambre,quarterdeck,ascetics,berdych,transversal,tuolumne,sagami,petrobras,brecker,menxia,instilling,stipulating,korra,oscillate,deadpan,v/line,pyrotechnic,stoneware,prelims,intracoastal,retraining,ilija,berwyn,encrypt,achievers,zulfiqar,glycoproteins,khatib,farmsteads,occultist,saman,fionn,derulo,khilji,obrenovic,argosy,toowong,dementieva,sociocultural,iconostasis,craigslist,festschrift,taifa,intercalated,tanjong,penticton,sharad,marxian,extrapolation,guises,wettin,prabang,exclaiming,kosta,famas,conakry,wanderings,'aliabad,macleay,exoplanet,bancorp,besiegers,surmounting,checkerboard,rajab,vliet,tarek,operable,wargaming,haldimand,fukuyama,uesugi,aggregations,erbil,brachiopods,tokyu,anglais,unfavorably,ujpest,escorial,armagnac,nagara,funafuti,ridgeline,cocking,o'gorman,compactness,retardant,krajowa,barua,coking,bestows,thampi,chicagoland,variably,o'loughlin,minnows,schwa,shaukat,polycarbonate,chlorinated,godalming,gramercy,delved,banqueting,enlil,sarada,prasanna,domhnall,decadal,regressive,lipoprotein,collectable,surendra,zaporizhia,cycliste,suchet,offsetting,formula_65,pudong,d'arte,blyton,quonset,osmania,tientsin,manorama,proteomics,bille,jalpaiguri,pertwee,barnegat,inventiveness,gollancz,euthanized,henricus,shortfalls,wuxia,chlorides,cerrado,polyvinyl,folktale,straddled,bioengineering,eschewing,greendale,recharged,olave,ceylonese,autocephalous,peacebuilding,wrights,guyed,rosamund,abitibi,bannockburn,gerontology,scutari,souness,seagram,codice_9,'open,xhtml,taguig,purposed,darbar,orthopedics,unpopulated,kisumu,tarrytown,feodor,polyhedral,monadnock,gottorp,priam,redesigning,gasworks,elfin,urquiza,homologation,filipovic,bohun,manningham,gornik,soundness,shorea,lanus,gelder,darke,sandgate,criticality,paranaense,153rd,vieja,lithograph,trapezoid,tiebreakers,convalescence,yan'an,actuaries,balad,altimeter,thermoelectric,trailblazer,previn,tenryu,ancaster,endoscopy,nicolet,discloses,fracking,plaine,salado,americanism,placards,absurdist,propylene,breccia,jirga,documenta,ismailis,161st,brentano,dallas/fort,embellishment,calipers,subscribes,mahavidyalaya,wednesbury,barnstormers,miwok,schembechler,minigame,unterberger,dopaminergic,inacio,nizamabad,overridden,monotype,cavernous,stichting,sassafras,sotho,argentinean,myrrh,rapidity,flatts,gowrie,dejected,kasaragod,cyprinidae,interlinked,arcseconds,degeneracy,infamously,incubate,substructure,trigeminal,sectarianism,marshlands,hooliganism,hurlers,isolationist,urania,burrard,switchover,lecco,wilts,interrogator,strived,ballooning,volterra,raciborz,relegating,gilding,cybele,dolomites,parachutist,lochaber,orators,raeburn,backend,benaud,rallycross,facings,banga,nuclides,defencemen,futurity,emitters,yadkin,eudonia,zambales,manasseh,sirte,meshes,peculiarly,mcminnville,roundly,boban,decrypt,icelanders,sanam,chelan,jovian,grudgingly,penalised,subscript,gambrinus,poaceae,infringements,maleficent,runciman,148th,supersymmetry,granites,liskeard,eliciting,involution,hallstatt,kitzbuhel,shankly,sandhills,inefficiencies,yishuv,psychotropic,nightjars,wavell,sangamon,vaikundar,choshu,retrospectives,pitesti,gigantea,hashemi,bosna,gakuin,siochana,arrangers,baronetcies,narayani,temecula,creston,koscierzyna,autochthonous,wyandot,anniston,igreja,mobilise,buzau,dunster,musselburgh,wenzhou,khattak,detoxification,decarboxylase,manlius,campbells,coleoptera,copyist,sympathisers,suisun,eminescu,defensor,transshipment,thurgau,somerton,fluctuates,ambika,weierstrass,lukow,giambattista,volcanics,romanticized,innovated,matabeleland,scotiabank,garwolin,purine,d'auvergne,borderland,maozhen,pricewaterhousecoopers,testator,pallium,scout.com,mv/pi,nazca,curacies,upjohn,sarasvati,monegasque,ketrzyn,malory,spikelets,biomechanics,haciendas,rapped,dwarfed,stews,nijinsky,subjection,matsu,perceptible,schwarzburg,midsection,entertains,circuitous,epiphytic,wonsan,alpini,bluefield,sloths,transportable,braunfels,dictum,szczecinek,jukka,wielun,wejherowo,hucknall,grameen,duodenum,ribose,deshpande,shahar,nexstar,injurious,dereham,lithographer,dhoni,structuralist,progreso,deschutes,christus,pulteney,quoins,yitzchak,gyeongsang,breviary,makkah,chiyoda,jutting,vineland,angiosperms,necrotic,novelisation,redistribute,tirumala,140th,featureless,mafic,rivaling,toyline,2/1st,martius,saalfeld,monthan,texian,kathak,melodramas,mithila,regierungsbezirk,509th,fermenting,schoolmate,virtuosic,briain,kokoda,heliocentric,handpicked,kilwinning,sonically,dinars,kasim,parkways,bogdanov,luxembourgian,halland,avesta,bardic,daugavpils,excavator,qwest,frustrate,physiographic,majoris,'ndrangheta,unrestrained,firmness,montalban,abundances,preservationists,adare,executioners,guardsman,bonnaroo,neglects,nazrul,pro12,hoorn,abercorn,refuting,kabud,cationic,parapsychology,troposphere,venezuelans,malignancy,khoja,unhindered,accordionist,medak,visby,ejercito,laparoscopic,dinas,umayyads,valmiki,o'dowd,saplings,stranding,incisions,illusionist,avocets,buccleuch,amazonia,fourfold,turboprops,roosts,priscus,turnstile,areal,certifies,pocklington,spoofs,viseu,commonalities,dabrowka,annam,homesteaders,daredevils,mondrian,negotiates,fiestas,perennials,maximizes,lubavitch,ravindra,scrapers,finials,kintyre,violas,snoqualmie,wilders,openbsd,mlawa,peritoneal,devarajan,congke,leszno,mercurial,fakir,joannes,bognor,overloading,unbuilt,gurung,scuttle,temperaments,bautzen,jardim,tradesman,visitations,barbet,sagamore,graaff,forecasters,wilsons,assis,l'air,shariah,sochaczew,russa,dirge,biliary,neuve,heartbreakers,strathearn,jacobian,overgrazing,edrich,anticline,parathyroid,petula,lepanto,decius,channelled,parvathi,puppeteers,communicators,francorchamps,kahane,longus,panjang,intron,traite,xxvii,matsuri,amrit,katyn,disheartened,cacak,omonia,alexandrine,partaking,wrangling,adjuvant,haskovo,tendrils,greensand,lammermoor,otherworld,volusia,stabling,one-and-a-half,bresson,zapatista,eotvos,ps150,webisodes,stepchildren,microarray,braganca,quanta,dolne,superoxide,bellona,delineate,ratha,lindenwood,bruhl,cingulate,tallies,bickerton,helgi,bevin,takoma,tsukuba,statuses,changeling,alister,bytom,dibrugarh,magnesia,duplicating,outlier,abated,goncalo,strelitz,shikai,mardan,musculature,ascomycota,springhill,tumuli,gabaa,odenwald,reformatted,autocracy,theresienstadt,suplex,chattopadhyay,mencken,congratulatory,weatherfield,systema,solemnity,projekt,quanzhou,kreuzberg,postbellum,nobuo,mediaworks,finisterre,matchplay,bangladeshis,kothen,oocyte,hovered,aromas,afshar,browed,teases,chorlton,arshad,cesaro,backbencher,iquique,vulcans,padmini,unabridged,cyclase,despotic,kirilenko,achaean,queensberry,debre,octahedron,iphigenia,curbing,karimnagar,sagarmatha,smelters,surrealists,sanada,shrestha,turridae,leasehold,jiedushi,eurythmics,appropriating,correze,thimphu,amery,musicomh,cyborgs,sandwell,pushcart,retorts,ameliorate,deteriorates,stojanovic,spline,entrenchments,bourse,chancellorship,pasolini,lendl,personage,reformulated,pubescens,loiret,metalurh,reinvention,nonhuman,eilema,tarsal,complutense,magne,broadview,metrodome,outtake,stouffville,seinen,bataillon,phosphoric,ostensible,opatow,aristides,beefheart,glorifying,banten,romsey,seamounts,fushimi,prophylaxis,sibylla,ranjith,goslar,balustrades,georgiev,caird,lafitte,peano,canso,bankura,halfpenny,segregate,caisson,bizerte,jamshedpur,euromaidan,philosophie,ridged,cheerfully,reclassification,aemilius,visionaries,samoans,wokingham,chemung,wolof,unbranched,cinerea,bhosle,ourense,immortalised,cornerstones,sourcebook,khufu,archimedean,universitatea,intermolecular,fiscally,suffices,metacomet,adjudicator,stablemate,specks,glace,inowroclaw,patristic,muharram,agitating,ashot,neurologic,didcot,gamla,ilves,putouts,siraj,laski,coaling,diarmuid,ratnagiri,rotulorum,liquefaction,morbihan,harel,aftershock,gruiformesfamily,bonnier,falconiformesfamily,adorns,wikis,maastrichtian,stauffenberg,bishopsgate,fakhr,sevenfold,ponders,quantifying,castiel,opacity,depredations,lenten,gravitated,o'mahony,modulates,inuktitut,paston,kayfabe,vagus,legalised,balked,arianism,tendering,sivas,birthdate,awlaki,khvajeh,shahab,samtgemeinde,bridgeton,amalgamations,biogenesis,recharging,tsukasa,mythbusters,chamfered,enthronement,freelancers,maharana,constantia,sutil,messines,monkton,okanogan,reinvigorated,apoplexy,tanahashi,neues,valiants,harappan,russes,carding,volkoff,funchal,statehouse,imitative,intrepidity,mellotron,samaras,turkana,besting,longitudes,exarch,diarrhoea,transcending,zvonareva,darna,ramblin,disconnection,137th,refocused,diarmait,agricole,ba'athist,turenne,contrabass,communis,daviess,fatimids,frosinone,fittingly,polyphyletic,qanat,theocratic,preclinical,abacha,toorak,marketplaces,conidia,seiya,contraindicated,retford,bundesautobahn,rebuilds,climatology,seaworthy,starfighter,qamar,categoria,malai,hellinsia,newstead,airworthy,catenin,avonmouth,arrhythmias,ayyavazhi,downgrade,ashburnham,ejector,kinematics,petworth,rspca,filmation,accipitridae,chhatrapati,g/mol,bacau,agama,ringtone,yudhoyono,orchestrator,arbitrators,138th,powerplants,cumbernauld,alderley,misamis,hawai`i,cuando,meistriliiga,jermyn,alans,pedigrees,ottavio,approbation,omnium,purulia,prioress,rheinland,lymphoid,lutsk,oscilloscope,ballina,iliac,motorbikes,modernising,uffizi,phylloxera,kalevala,bengalis,amravati,syntheses,interviewers,inflectional,outflank,maryhill,unhurt,profiler,nacelles,heseltine,personalised,guarda,herpetologist,airpark,pigot,margaretha,dinos,peleliu,breakbeat,kastamonu,shaivism,delamere,kingsville,epigram,khlong,phospholipids,journeying,lietuvos,congregated,deviance,celebes,subsoil,stroma,kvitova,lubricating,layoff,alagoas,olafur,doron,interuniversity,raycom,agonopterix,uzice,nanna,springvale,raimundo,wrested,pupal,talat,skinheads,vestige,unpainted,handan,odawara,ammar,attendee,lapped,myotis,gusty,ciconiiformesfamily,traversal,subfield,vitaphone,prensa,hasidism,inwood,carstairs,kropotkin,turgenev,dobra,remittance,purim,tannin,adige,tabulation,lethality,pacha,micronesian,dhruva,defensemen,tibeto,siculus,radioisotope,sodertalje,phitsanulok,euphonium,oxytocin,overhangs,skinks,fabrica,reinterred,emulates,bioscience,paragliding,raekwon,perigee,plausibility,frolunda,erroll,aznar,vyasa,albinus,trevally,confederacion,terse,sixtieth,1530s,kendriya,skateboarders,frontieres,muawiyah,easements,shehu,conservatively,keystones,kasem,brutalist,peekskill,cowry,orcas,syllabary,paltz,elisabetta,denticles,hampering,dolni,eidos,aarau,lermontov,yankton,shahbaz,barrages,kongsvinger,reestablishment,acetyltransferase,zulia,mrnas,slingsby,eucalypt,efficacious,weybridge,gradation,cinematheque,malthus,bampton,coexisted,cisse,hamdi,cupertino,saumarez,chionodes,libertine,formers,sakharov,pseudonymous,vol.1,mcduck,gopalakrishnan,amberley,jorhat,grandmasters,rudiments,dwindle,param,bukidnon,menander,americanus,multipliers,pulawy,homoerotic,pillbox,cd+dvd,epigraph,aleksandrow,extrapolated,horseshoes,contemporain,angiography,hasselt,shawinigan,memorization,legitimized,cyclades,outsold,rodolphe,kelis,powerball,dijkstra,analyzers,incompressible,sambar,orangeburg,osten,reauthorization,adamawa,sphagnum,hypermarket,millipedes,zoroaster,madea,ossuary,murrayfield,pronominal,gautham,resellers,ethers,quarrelled,dolna,stragglers,asami,tangut,passos,educacion,sharaf,texel,berio,bethpage,bezalel,marfa,noronha,36ers,genteel,avram,shilton,compensates,sweetener,reinstalled,disables,noether,1590s,balakrishnan,kotaro,northallerton,cataclysm,gholam,cancellara,schiphol,commends,longinus,albinism,gemayel,hamamatsu,volos,islamism,sidereal,pecuniary,diggings,townsquare,neosho,lushan,chittoor,akhil,disputation,desiccation,cambodians,thwarting,deliberated,ellipsis,bahini,susumu,separators,kohneh,plebeians,kultur,ogaden,pissarro,trypeta,latur,liaodong,vetting,datong,sohail,alchemists,lengthwise,unevenly,masterly,microcontrollers,occupier,deviating,farringdon,baccalaureat,theocracy,chebyshev,archivists,jayaram,ineffectiveness,scandinavians,jacobins,encomienda,nambu,g/cm3,catesby,paavo,heeded,rhodium,idealised,10deg,infective,mecyclothorax,halevy,sheared,minbari,audax,lusatian,rebuffs,hitfix,fastener,subjugate,tarun,binet,compuserve,synthesiser,keisuke,amalric,ligatures,tadashi,ignazio,abramovich,groundnut,otomo,maeve,mortlake,ostrogoths,antillean,todor,recto,millimetre,espousing,inaugurate,paracetamol,galvanic,harpalinae,jedrzejow,reassessment,langlands,civita,mikan,stikine,bijar,imamate,istana,kaiserliche,erastus,federale,cytosine,expansionism,hommes,norrland,smriti,snapdragon,gulab,taleb,lossy,khattab,urbanised,sesto,rekord,diffuser,desam,morganatic,silting,pacts,extender,beauharnais,purley,bouches,halfpipe,discontinuities,houthi,farmville,animism,horni,saadi,interpretative,blockades,symeon,biogeographic,transcaucasian,jetties,landrieu,astrocytes,conjunto,stumpings,weevils,geysers,redux,arching,romanus,tazeh,marcellinus,casein,opava,misrata,anare,sattar,declarer,dreux,oporto,venta,vallis,icosahedron,cortona,lachine,mohammedan,sandnes,zynga,clarin,diomedes,tsuyoshi,pribram,gulbarga,chartist,superettan,boscawen,altus,subang,gating,epistolary,vizianagaram,ogdensburg,panna,thyssen,tarkovsky,dzogchen,biograph,seremban,unscientific,nightjar,legco,deism,n.w.a,sudha,siskel,sassou,flintlock,jovial,montbeliard,pallida,formula_66,tranquillity,nisei,adornment,'people,yamhill,hockeyallsvenskan,adopters,appian,lowicz,haplotypes,succinctly,starogard,presidencies,kheyrabad,sobibor,kinesiology,cowichan,militum,cromwellian,leiningen,ps1.5,concourses,dalarna,goldfield,brzeg,faeces,aquarii,matchless,harvesters,181st,numismatics,korfball,sectioned,transpires,facultative,brandishing,kieron,forages,menai,glutinous,debarge,heathfield,1580s,malang,photoelectric,froome,semiotic,alwar,grammophon,chiaroscuro,mentalist,maramures,flacco,liquors,aleutians,marvell,sutlej,patnaik,qassam,flintoff,bayfield,haeckel,sueno,avicii,exoplanets,hoshi,annibale,vojislav,honeycombs,celebrant,rendsburg,veblen,quails,141st,carronades,savar,narrations,jeeva,ontologies,hedonistic,marinette,godot,munna,bessarabian,outrigger,thame,gravels,hoshino,falsifying,stereochemistry,nacionalista,medially,radula,ejecting,conservatorio,odile,ceiba,jaina,essonne,isometry,allophones,recidivism,iveco,ganda,grammarians,jagan,signposted,uncompressed,facilitators,constancy,ditko,propulsive,impaling,interbank,botolph,amlaib,intergroup,sorbus,cheka,debye,praca,adorning,presbyteries,dormition,strategos,qarase,pentecostals,beehives,hashemite,goldust,euronext,egress,arpanet,soames,jurchens,slovenska,copse,kazim,appraisals,marischal,mineola,sharada,caricaturist,sturluson,galba,faizabad,overwintering,grete,uyezds,didsbury,libreville,ablett,microstructure,anadolu,belenenses,elocution,cloaks,timeslots,halden,rashidun,displaces,sympatric,germanus,tuples,ceska,equalize,disassembly,krautrock,babangida,memel,deild,gopala,hematology,underclass,sangli,wawrinka,assur,toshack,refrains,nicotinic,bhagalpur,badami,racetracks,pocatello,walgreens,nazarbayev,occultation,spinnaker,geneon,josias,hydrolyzed,dzong,corregimiento,waistcoat,thermoplastic,soldered,anticancer,lactobacillus,shafi'i,carabus,adjournment,schlumberger,triceratops,despotate,mendicant,krishnamurti,bahasa,earthworm,lavoisier,noetherian,kalki,fervently,bhawan,saanich,coquille,gannet,motagua,kennels,mineralization,fitzherbert,svein,bifurcated,hairdressing,felis,abounded,dimers,fervour,hebdo,bluffton,aetna,corydon,clevedon,carneiro,subjectively,deutz,gastropoda,overshot,concatenation,varman,carolla,maharshi,mujib,inelastic,riverhead,initialized,safavids,rohini,caguas,bulges,fotbollforbund,hefei,spithead,westville,maronites,lytham,americo,gediminas,stephanus,chalcolithic,hijra,gnu/linux,predilection,rulership,sterility,haidar,scarlatti,saprissa,sviatoslav,pointedly,sunroof,guarantor,thevar,airstrips,pultusk,sture,129th,divinities,daizong,dolichoderus,cobourg,maoists,swordsmanship,uprated,bohme,tashi,largs,chandi,bluebeard,householders,richardsonian,drepanidae,antigonish,elbasan,occultism,marca,hypergeometric,oirat,stiglitz,ignites,dzungar,miquelon,pritam,d'automne,ulidiid,niamey,vallecano,fondo,billiton,incumbencies,raceme,chambery,cadell,barenaked,kagame,summerside,haussmann,hatshepsut,apothecaries,criollo,feint,nasals,timurid,feltham,plotinus,oxygenation,marginata,officinalis,salat,participations,ising,downe,izumo,unguided,pretence,coursed,haruna,viscountcy,mainstage,justicia,powiat,takara,capitoline,implacable,farben,stopford,cosmopterix,tuberous,kronecker,galatians,kweli,dogmas,exhorted,trebinje,skanda,newlyn,ablative,basidia,bhiwani,encroachments,stranglers,regrouping,tubal,shoestring,wawel,anionic,mesenchymal,creationists,pyrophosphate,moshi,despotism,powerbook,fatehpur,rupiah,segre,ternate,jessore,b.i.g,shevardnadze,abounds,gliwice,densest,memoria,suborbital,vietcong,ratepayers,karunanidhi,toolbar,descents,rhymney,exhortation,zahedan,carcinomas,hyperbaric,botvinnik,billets,neuropsychological,tigranes,hoards,chater,biennially,thistles,scotus,wataru,flotillas,hungama,monopolistic,payouts,vetch,generalissimo,caries,naumburg,piran,blizzards,escalates,reactant,shinya,theorize,rizzoli,transitway,ecclesiae,streptomyces,cantal,nisibis,superconductor,unworkable,thallus,roehampton,scheckter,viceroys,makuuchi,ilkley,superseding,takuya,klodzko,borbon,raspberries,operand,w.a.k.o,sarabande,factionalism,egalitarianism,temasek,torbat,unscripted,jorma,westerner,perfective,vrije,underlain,goldfrapp,blaenau,jomon,barthes,drivetime,bassa,bannock,umaga,fengxiang,zulus,sreenivasan,farces,codice_10,freeholder,poddebice,imperialists,deregulated,wingtip,o'hagan,pillared,overtone,hofstadter,149th,kitano,saybrook,standardizing,aldgate,staveley,o'flaherty,hundredths,steerable,soltan,empted,cruyff,intramuros,taluks,cotonou,marae,karur,figueres,barwon,lucullus,niobe,zemlya,lathes,homeported,chaux,amyotrophic,opines,exemplars,bhamo,homomorphisms,gauleiter,ladin,mafiosi,airdrieonians,b/soul,decal,transcaucasia,solti,defecation,deaconess,numidia,sampradaya,normalised,wingless,schwaben,alnus,cinerama,yakutsk,ketchikan,orvieto,unearned,monferrato,rotem,aacsb,loong,decoders,skerries,cardiothoracic,repositioning,pimpernel,yohannan,tenebrionoidea,nargis,nouvel,costliest,interdenominational,noize,redirecting,zither,morcha,radiometric,frequenting,irtysh,gbagbo,chakri,litvinenko,infotainment,ravensbruck,harith,corbels,maegashira,jousting,natan,novus,falcao,minis,railed,decile,rauma,ramaswamy,cavitation,paranaque,berchtesgaden,reanimated,schomberg,polysaccharides,exclusionary,cleon,anurag,ravaging,dhanush,mitchells,granule,contemptuous,keisei,rolleston,atlantean,yorkist,daraa,wapping,micrometer,keeneland,comparably,baranja,oranje,schlafli,yogic,dinajpur,unimpressive,masashi,recreativo,alemannic,petersfield,naoko,vasudeva,autosport,rajat,marella,busko,wethersfield,ssris,soulcalibur,kobani,wildland,rookery,hoffenheim,kauri,aliphatic,balaclava,ferrite,publicise,victorias,theism,quimper,chapbook,functionalist,roadbed,ulyanovsk,cupen,purpurea,calthorpe,teofilo,mousavi,cochlea,linotype,detmold,ellerslie,gakkai,telkom,southsea,subcontractor,inguinal,philatelists,zeebrugge,piave,trochidae,dempo,spoilt,saharanpur,mihrab,parasympathetic,barbarous,chartering,antiqua,katsina,bugis,categorizes,altstadt,kandyan,pambansa,overpasses,miters,assimilating,finlandia,uneconomic,am/fm,harpsichordist,dresdner,luminescence,authentically,overpowers,magmatic,cliftonville,oilfields,skirted,berthe,cuman,oakham,frelimo,glockenspiel,confection,saxophonists,piaseczno,multilevel,antipater,levying,maltreatment,velho,opoczno,harburg,pedophilia,unfunded,palettes,plasterwork,breve,dharmendra,auchinleck,nonesuch,blackmun,libretti,rabbani,145th,hasselbeck,kinnock,malate,vanden,cloverdale,ashgabat,nares,radians,steelworkers,sabor,possums,catterick,hemispheric,ostra,outpaced,dungeness,almshouse,penryn,texians,1000m,franchitti,incumbency,texcoco,newar,tramcars,toroidal,meitetsu,spellbound,agronomist,vinifera,riata,bunko,pinas,ba'al,github,vasilyevich,obsolescent,geodesics,ancestries,tujue,capitalised,unassigned,throng,unpaired,psychometric,skegness,exothermic,buffered,kristiansund,tongued,berenger,basho,alitalia,prolongation,archaeologically,fractionation,cyprinid,echinoderms,agriculturally,justiciar,sonam,ilium,baits,danceable,grazer,ardahan,grassed,preemption,glassworks,hasina,ugric,umbra,wahhabi,vannes,tinnitus,capitaine,tikrit,lisieux,scree,hormuz,despenser,jagiellon,maisonneuve,gandaki,santarem,basilicas,lancing,landskrona,weilburg,fireside,elysian,isleworth,krishnamurthy,filton,cynon,tecmo,subcostal,scalars,triglycerides,hyperplane,farmingdale,unione,meydan,pilings,mercosur,reactivate,akiba,fecundity,jatra,natsume,zarqawi,preta,masao,presbyter,oakenfold,rhodri,ferran,ruizong,cloyne,nelvana,epiphanius,borde,scutes,strictures,troughton,whitestone,sholom,toyah,shingon,kutuzov,abelard,passant,lipno,cafeterias,residuals,anabaptists,paratransit,criollos,pleven,radiata,destabilizing,hadiths,bazaars,mannose,taiyo,crookes,welbeck,baoding,archelaus,nguesso,alberni,wingtips,herts,viasat,lankans,evreux,wigram,fassbinder,ryuichi,storting,reducible,olesnica,znojmo,hyannis,theophanes,flatiron,mustering,rajahmundry,kadir,wayang,prome,lethargy,zubin,illegality,conall,dramedy,beerbohm,hipparchus,ziarat,ryuji,shugo,glenorchy,microarchitecture,morne,lewinsky,cauvery,battenberg,hyksos,wayanad,hamilcar,buhari,brazo,bratianu,solms,aksaray,elamite,chilcotin,bloodstock,sagara,dolny,reunified,umlaut,proteaceae,camborne,calabrian,dhanbad,vaxjo,cookware,potez,rediffusion,semitones,lamentations,allgau,guernica,suntory,pleated,stationing,urgell,gannets,bertelsmann,entryway,raphitomidae,acetaldehyde,nephrology,categorizing,beiyang,permeate,tourney,geosciences,khana,masayuki,crucis,universitaria,slaskie,khaimah,finno,advani,astonishingly,tubulin,vampiric,jeolla,sociale,cleethorpes,badri,muridae,suzong,debater,decimation,kenyans,mutualism,pontifex,middlemen,insee,halevi,lamentation,psychopathy,brassey,wenders,kavya,parabellum,prolactin,inescapable,apses,malignancies,rinzai,stigmatized,menahem,comox,ateliers,welshpool,setif,centimetre,truthfulness,downfield,drusus,woden,glycosylation,emanated,agulhas,dalkeith,jazira,nucky,unifil,jobim,operon,oryzomys,heroically,seances,supernumerary,backhouse,hashanah,tatler,imago,invert,hayato,clockmaker,kingsmill,swiecie,analogously,golconda,poste,tacitly,decentralised,ge'ez,diplomatically,fossiliferous,linseed,mahavira,pedestals,archpriest,byelection,domiciled,jeffersonian,bombus,winegrowing,waukegan,uncultivated,haverfordwest,saumur,communally,disbursed,cleeve,zeljeznicar,speciosa,vacationers,sigur,vaishali,zlatko,iftikhar,cropland,transkei,incompleteness,bohra,subantarctic,slieve,physiologic,similis,klerk,replanted,'right,chafee,reproducible,bayburt,regicide,muzaffarpur,plurals,hanyu,orthologs,diouf,assailed,kamui,tarik,dodecanese,gorne,on/off,179th,shimoga,granaries,carlists,valar,tripolitania,sherds,simmern,dissociated,isambard,polytechnical,yuvraj,brabazon,antisense,pubmed,glans,minutely,masaaki,raghavendra,savoury,podcasting,tachi,bienville,gongsun,ridgely,deform,yuichi,binders,canna,carcetti,llobregat,implored,berri,njegos,intermingled,offload,athenry,motherhouse,corpora,kakinada,dannebrog,imperio,prefaces,musicologists,aerospatiale,shirai,nagapattinam,servius,cristoforo,pomfret,reviled,entebbe,stane,east/west,thermometers,matriarchal,siglo,bodil,legionnaire,ze'ev,theorizing,sangeetha,horticulturist,uncountable,lookalike,anoxic,ionospheric,genealogists,chicopee,imprinting,popish,crematoria,diamondback,cyathea,hanzhong,cameramen,halogaland,naklo,waclaw,storehouses,flexed,comuni,frits,glauca,nilgiris,compresses,nainital,continuations,albay,hypoxic,samajwadi,dunkerque,nanticoke,sarwar,interchanged,jubal,corba,jalgaon,derleth,deathstroke,magny,vinnytsia,hyphenated,rimfire,sawan,boehner,disrepute,normalize,aromanian,dualistic,approximant,chama,karimabad,barnacles,sanok,stipends,dyfed,rijksmuseum,reverberation,suncorp,fungicides,reverie,spectrograph,stereophonic,niazi,ordos,alcan,karaite,lautrec,tableland,lamellar,rieti,langmuir,russula,webern,tweaks,hawick,southerner,morphy,naturalisation,enantiomer,michinoku,barbettes,relieves,carburettors,redruth,oblates,vocabularies,mogilev,bagmati,galium,reasserted,extolled,symon,eurosceptic,inflections,tirtha,recompense,oruro,roping,gouverneur,pared,yayoi,watermills,retooled,leukocytes,jubilant,mazhar,nicolau,manheim,touraine,bedser,hambledon,kohat,powerhouses,tlemcen,reuven,sympathetically,afrikaners,interes,handcrafts,etcher,baddeley,wodonga,amaury,155th,vulgarity,pompadour,automorphisms,1540s,oppositions,prekmurje,deryni,fortifying,arcuate,mahila,bocage,uther,nozze,slashes,atlantica,hadid,rhizomatous,azeris,'with,osmena,lewisville,innervated,bandmaster,outcropping,parallelogram,dominicana,twang,ingushetia,extensional,ladino,sastry,zinoviev,relatable,nobilis,cbeebies,hitless,eulima,sporangia,synge,longlisted,criminalized,penitential,weyden,tubule,volyn,priestesses,glenbrook,kibbutzim,windshaft,canadair,falange,zsolt,bonheur,meine,archangels,safeguarded,jamaicans,malarial,teasers,badging,merseyrail,operands,pulsars,gauchos,biotin,bambara,necaxa,egmond,tillage,coppi,anxiolytic,preah,mausoleums,plautus,feroz,debunked,187th,belediyespor,mujibur,wantage,carboxyl,chettiar,murnau,vagueness,racemic,backstretch,courtland,municipio,palpatine,dezful,hyperbola,sreekumar,chalons,altay,arapahoe,tudors,sapieha,quilon,burdensome,kanya,xxviii,recension,generis,siphuncle,repressor,bitrate,mandals,midhurst,dioxin,democratique,upholds,rodez,cinematographic,epoque,jinping,rabelais,zhytomyr,glenview,rebooted,khalidi,reticulata,122nd,monnaie,passersby,ghazals,europaea,lippmann,earthbound,tadic,andorran,artvin,angelicum,banksy,epicentre,resemblances,shuttled,rathaus,bernt,stonemasons,balochi,siang,tynemouth,cygni,biosynthetic,precipitates,sharecroppers,d'annunzio,softbank,shiji,apeldoorn,polycyclic,wenceslas,wuchang,samnites,tamarack,silmarillion,madinah,palaeontology,kirchberg,sculpin,rohtak,aquabats,oviparous,thynne,caney,blimps,minimalistic,whatcom,palatalization,bardstown,direct3d,paramagnetic,kamboja,khash,globemaster,lengua,matej,chernigov,swanage,arsenals,cascadia,cundinamarca,tusculum,leavers,organics,warplanes,'three,exertions,arminius,gandharva,inquires,comercio,kuopio,chabahar,plotlines,mersenne,anquetil,paralytic,buckminster,ambit,acrolophus,quantifiers,clacton,ciliary,ansaldo,fergana,egoism,thracians,chicoutimi,northbrook,analgesia,brotherhoods,hunza,adriaen,fluoridation,snowfalls,soundboard,fangoria,cannibalistic,orthogonius,chukotka,dindigul,manzoni,chainz,macromedia,beltline,muruga,schistura,provable,litex,initio,pneumoniae,infosys,cerium,boonton,cannonballs,d'une,solvency,mandurah,houthis,dolmens,apologists,radioisotopes,blaxploitation,poroshenko,stawell,coosa,maximilien,tempelhof,espouse,declaratory,hambro,xalapa,outmoded,mihiel,benefitting,desirous,archeparchy,repopulated,telescoping,captor,mackaye,disparaged,ramanathan,crowne,tumbled,technetium,silted,chedi,nievre,hyeon,cartoonish,interlock,infocom,rediff.com,dioramas,timekeeping,concertina,kutaisi,cesky,lubomirski,unapologetic,epigraphic,stalactites,sneha,biofilm,falconry,miraflores,catena,'outstanding,prospekt,apotheosis,o'odham,pacemakers,arabica,gandhinagar,reminisces,iroquoian,ornette,tilling,neoliberalism,chameleons,pandava,prefontaine,haiyan,gneisenau,utama,bando,reconstitution,azaria,canola,paratroops,ayckbourn,manistee,stourton,manifestos,lympne,denouement,tractatus,rakim,bellflower,nanometer,sassanids,turlough,presbyterianism,varmland,20deg,phool,nyerere,almohad,manipal,vlaanderen,quickness,removals,makow,circumflex,eatery,morane,fondazione,alkylation,unenforceable,galliano,silkworm,junior/senior,abducts,phlox,konskie,lofoten,buuren,glyphosate,faired,naturae,cobbles,taher,skrulls,dostoevsky,walkout,wagnerian,orbited,methodically,denzil,sarat,extraterritorial,kohima,d'armor,brinsley,rostropovich,fengtian,comitatus,aravind,moche,wrangell,giscard,vantaa,viljandi,hakoah,seabees,muscatine,ballade,camanachd,sothern,mullioned,durad,margraves,maven,arete,chandni,garifuna,142nd,reading/literature,thickest,intensifies,trygve,khaldun,perinatal,asana,powerline,acetylation,nureyev,omiya,montesquieu,riverwalk,marly,correlating,intermountain,bulgar,hammerheads,underscores,wiretapping,quatrain,ruisseau,newsagent,tuticorin,polygyny,hemsworth,partisanship,banna,istrian,evaporator".split(","),
41332female_names:"mary,patricia,linda,barbara,elizabeth,jennifer,maria,susan,margaret,dorothy,lisa,nancy,karen,betty,helen,sandra,donna,carol,ruth,sharon,michelle,laura,sarah,kimberly,deborah,jessica,shirley,cynthia,angela,melissa,brenda,amy,anna,rebecca,virginia,kathleen,pamela,martha,debra,amanda,stephanie,carolyn,christine,marie,janet,catherine,frances,ann,joyce,diane,alice,julie,heather,teresa,doris,gloria,evelyn,jean,cheryl,mildred,katherine,joan,ashley,judith,rose,janice,kelly,nicole,judy,christina,kathy,theresa,beverly,denise,tammy,irene,jane,lori,rachel,marilyn,andrea,kathryn,louise,sara,anne,jacqueline,wanda,bonnie,julia,ruby,lois,tina,phyllis,norma,paula,diana,annie,lillian,emily,robin,peggy,crystal,gladys,rita,dawn,connie,florence,tracy,edna,tiffany,carmen,rosa,cindy,grace,wendy,victoria,edith,kim,sherry,sylvia,josephine,thelma,shannon,sheila,ethel,ellen,elaine,marjorie,carrie,charlotte,monica,esther,pauline,emma,juanita,anita,rhonda,hazel,amber,eva,debbie,april,leslie,clara,lucille,jamie,joanne,eleanor,valerie,danielle,megan,alicia,suzanne,michele,gail,bertha,darlene,veronica,jill,erin,geraldine,lauren,cathy,joann,lorraine,lynn,sally,regina,erica,beatrice,dolores,bernice,audrey,yvonne,annette,marion,dana,stacy,ana,renee,ida,vivian,roberta,holly,brittany,melanie,loretta,yolanda,jeanette,laurie,katie,kristen,vanessa,alma,sue,elsie,beth,jeanne,vicki,carla,tara,rosemary,eileen,terri,gertrude,lucy,tonya,ella,stacey,wilma,gina,kristin,jessie,natalie,agnes,vera,charlene,bessie,delores,melinda,pearl,arlene,maureen,colleen,allison,tamara,joy,georgia,constance,lillie,claudia,jackie,marcia,tanya,nellie,minnie,marlene,heidi,glenda,lydia,viola,courtney,marian,stella,caroline,dora,vickie,mattie,maxine,irma,mabel,marsha,myrtle,lena,christy,deanna,patsy,hilda,gwendolyn,jennie,nora,margie,nina,cassandra,leah,penny,kay,priscilla,naomi,carole,olga,billie,dianne,tracey,leona,jenny,felicia,sonia,miriam,velma,becky,bobbie,violet,kristina,toni,misty,mae,shelly,daisy,ramona,sherri,erika,katrina,claire,lindsey,lindsay,geneva,guadalupe,belinda,margarita,sheryl,cora,faye,ada,sabrina,isabel,marguerite,hattie,harriet,molly,cecilia,kristi,brandi,blanche,sandy,rosie,joanna,iris,eunice,angie,inez,lynda,madeline,amelia,alberta,genevieve,monique,jodi,janie,kayla,sonya,jan,kristine,candace,fannie,maryann,opal,alison,yvette,melody,luz,susie,olivia,flora,shelley,kristy,mamie,lula,lola,verna,beulah,antoinette,candice,juana,jeannette,pam,kelli,whitney,bridget,karla,celia,latoya,patty,shelia,gayle,della,vicky,lynne,sheri,marianne,kara,jacquelyn,erma,blanca,myra,leticia,pat,krista,roxanne,angelica,robyn,adrienne,rosalie,alexandra,brooke,bethany,sadie,bernadette,traci,jody,kendra,nichole,rachael,mable,ernestine,muriel,marcella,elena,krystal,angelina,nadine,kari,estelle,dianna,paulette,lora,mona,doreen,rosemarie,desiree,antonia,janis,betsy,christie,freda,meredith,lynette,teri,cristina,eula,leigh,meghan,sophia,eloise,rochelle,gretchen,cecelia,raquel,henrietta,alyssa,jana,gwen,jenna,tricia,laverne,olive,tasha,silvia,elvira,delia,kate,patti,lorena,kellie,sonja,lila,lana,darla,mindy,essie,mandy,lorene,elsa,josefina,jeannie,miranda,dixie,lucia,marta,faith,lela,johanna,shari,camille,tami,shawna,elisa,ebony,melba,ora,nettie,tabitha,ollie,winifred,kristie,alisha,aimee,rena,myrna,marla,tammie,latasha,bonita,patrice,ronda,sherrie,addie,francine,deloris,stacie,adriana,cheri,abigail,celeste,jewel,cara,adele,rebekah,lucinda,dorthy,effie,trina,reba,sallie,aurora,lenora,etta,lottie,kerri,trisha,nikki,estella,francisca,josie,tracie,marissa,karin,brittney,janelle,lourdes,laurel,helene,fern,elva,corinne,kelsey,ina,bettie,elisabeth,aida,caitlin,ingrid,iva,eugenia,christa,goldie,maude,jenifer,therese,dena,lorna,janette,latonya,candy,consuelo,tamika,rosetta,debora,cherie,polly,dina,jewell,fay,jillian,dorothea,nell,trudy,esperanza,patrica,kimberley,shanna,helena,cleo,stefanie,rosario,ola,janine,mollie,lupe,alisa,lou,maribel,susanne,bette,susana,elise,cecile,isabelle,lesley,jocelyn,paige,joni,rachelle,leola,daphne,alta,ester,petra,graciela,imogene,jolene,keisha,lacey,glenna,gabriela,keri,ursula,lizzie,kirsten,shana,adeline,mayra,jayne,jaclyn,gracie,sondra,carmela,marisa,rosalind,charity,tonia,beatriz,marisol,clarice,jeanine,sheena,angeline,frieda,lily,shauna,millie,claudette,cathleen,angelia,gabrielle,autumn,katharine,jodie,staci,lea,christi,justine,elma,luella,margret,dominique,socorro,martina,margo,mavis,callie,bobbi,maritza,lucile,leanne,jeannine,deana,aileen,lorie,ladonna,willa,manuela,gale,selma,dolly,sybil,abby,ivy,dee,winnie,marcy,luisa,jeri,magdalena,ofelia,meagan,audra,matilda,leila,cornelia,bianca,simone,bettye,randi,virgie,latisha,barbra,georgina,eliza,leann,bridgette,rhoda,haley,adela,nola,bernadine,flossie,ila,greta,ruthie,nelda,minerva,lilly,terrie,letha,hilary,estela,valarie,brianna,rosalyn,earline,catalina,ava,mia,clarissa,lidia,corrine,alexandria,concepcion,tia,sharron,rae,dona,ericka,jami,elnora,chandra,lenore,neva,marylou,melisa,tabatha,serena,avis,allie,sofia,jeanie,odessa,nannie,harriett,loraine,penelope,milagros,emilia,benita,allyson,ashlee,tania,esmeralda,eve,pearlie,zelma,malinda,noreen,tameka,saundra,hillary,amie,althea,rosalinda,lilia,alana,clare,alejandra,elinor,lorrie,jerri,darcy,earnestine,carmella,noemi,marcie,liza,annabelle,louisa,earlene,mallory,carlene,nita,selena,tanisha,katy,julianne,lakisha,edwina,maricela,margery,kenya,dollie,roxie,roslyn,kathrine,nanette,charmaine,lavonne,ilene,tammi,suzette,corine,kaye,chrystal,lina,deanne,lilian,juliana,aline,luann,kasey,maryanne,evangeline,colette,melva,lawanda,yesenia,nadia,madge,kathie,ophelia,valeria,nona,mitzi,mari,georgette,claudine,fran,alissa,roseann,lakeisha,susanna,reva,deidre,chasity,sheree,elvia,alyce,deirdre,gena,briana,araceli,katelyn,rosanne,wendi,tessa,berta,marva,imelda,marietta,marci,leonor,arline,sasha,madelyn,janna,juliette,deena,aurelia,josefa,augusta,liliana,lessie,amalia,savannah,anastasia,vilma,natalia,rosella,lynnette,corina,alfreda,leanna,amparo,coleen,tamra,aisha,wilda,karyn,maura,mai,evangelina,rosanna,hallie,erna,enid,mariana,lacy,juliet,jacklyn,freida,madeleine,mara,cathryn,lelia,casandra,bridgett,angelita,jannie,dionne,annmarie,katina,beryl,millicent,katheryn,diann,carissa,maryellen,liz,lauri,helga,gilda,rhea,marquita,hollie,tisha,tamera,angelique,francesca,kaitlin,lolita,florine,rowena,reyna,twila,fanny,janell,ines,concetta,bertie,alba,brigitte,alyson,vonda,pansy,elba,noelle,letitia,deann,brandie,louella,leta,felecia,sharlene,lesa,beverley,isabella,herminia,terra,celina,tori,octavia,jade,denice,germaine,michell,cortney,nelly,doretha,deidra,monika,lashonda,judi,chelsey,antionette,margot,adelaide,leeann,elisha,dessie,libby,kathi,gayla,latanya,mina,mellisa,kimberlee,jasmin,renae,zelda,elda,justina,gussie,emilie,camilla,abbie,rocio,kaitlyn,edythe,ashleigh,selina,lakesha,geri,allene,pamala,michaela,dayna,caryn,rosalia,jacquline,rebeca,marybeth,krystle,iola,dottie,belle,griselda,ernestina,elida,adrianne,demetria,delma,jaqueline,arleen,virgina,retha,fatima,tillie,eleanore,cari,treva,wilhelmina,rosalee,maurine,latrice,jena,taryn,elia,debby,maudie,jeanna,delilah,catrina,shonda,hortencia,theodora,teresita,robbin,danette,delphine,brianne,nilda,danna,cindi,bess,iona,winona,vida,rosita,marianna,racheal,guillermina,eloisa,celestine,caren,malissa,lona,chantel,shellie,marisela,leora,agatha,soledad,migdalia,ivette,christen,athena,janel,veda,pattie,tessie,tera,marilynn,lucretia,karrie,dinah,daniela,alecia,adelina,vernice,shiela,portia,merry,lashawn,dara,tawana,verda,alene,zella,sandi,rafaela,maya,kira,candida,alvina,suzan,shayla,lettie,samatha,oralia,matilde,larissa,vesta,renita,delois,shanda,phillis,lorri,erlinda,cathrine,barb,isabell,ione,gisela,roxanna,mayme,kisha,ellie,mellissa,dorris,dalia,bella,annetta,zoila,reta,reina,lauretta,kylie,christal,pilar,charla,elissa,tiffani,tana,paulina,leota,breanna,jayme,carmel,vernell,tomasa,mandi,dominga,santa,melodie,lura,alexa,tamela,mirna,kerrie,venus,felicita,cristy,carmelita,berniece,annemarie,tiara,roseanne,missy,cori,roxana,pricilla,kristal,jung,elyse,haydee,aletha,bettina,marge,gillian,filomena,zenaida,harriette,caridad,vada,aretha,pearline,marjory,marcela,flor,evette,elouise,alina,damaris,catharine,belva,nakia,marlena,luanne,lorine,karon,dorene,danita,brenna,tatiana,louann,julianna,andria,philomena,lucila,leonora,dovie,romona,mimi,jacquelin,gaye,tonja,misti,chastity,stacia,roxann,micaela,velda,marlys,johnna,aura,ivonne,hayley,nicki,majorie,herlinda,yadira,perla,gregoria,antonette,shelli,mozelle,mariah,joelle,cordelia,josette,chiquita,trista,laquita,georgiana,candi,shanon,hildegard,stephany,magda,karol,gabriella,tiana,roma,richelle,oleta,jacque,idella,alaina,suzanna,jovita,tosha,nereida,marlyn,kyla,delfina,tena,stephenie,sabina,nathalie,marcelle,gertie,darleen,thea,sharonda,shantel,belen,venessa,rosalina,genoveva,clementine,rosalba,renate,renata,georgianna,floy,dorcas,ariana,tyra,theda,mariam,juli,jesica,vikki,verla,roselyn,melvina,jannette,ginny,debrah,corrie,violeta,myrtis,latricia,collette,charleen,anissa,viviana,twyla,nedra,latonia,hellen,fabiola,annamarie,adell,sharyn,chantal,niki,maud,lizette,lindy,kesha,jeana,danelle,charline,chanel,valorie,dortha,cristal,sunny,leone,leilani,gerri,debi,andra,keshia,eulalia,easter,dulce,natividad,linnie,kami,georgie,catina,brook,alda,winnifred,sharla,ruthann,meaghan,magdalene,lissette,adelaida,venita,trena,shirlene,shameka,elizebeth,dian,shanta,latosha,carlotta,windy,rosina,mariann,leisa,jonnie,dawna,cathie,astrid,laureen,janeen,holli,fawn,vickey,teressa,shante,rubye,marcelina,chanda,terese,scarlett,marnie,lulu,lisette,jeniffer,elenor,dorinda,donita,carman,bernita,altagracia,aleta,adrianna,zoraida,lyndsey,janina,starla,phylis,phuong,kyra,charisse,blanch,sanjuanita,rona,nanci,marilee,maranda,brigette,sanjuana,marita,kassandra,joycelyn,felipa,chelsie,bonny,mireya,lorenza,kyong,ileana,candelaria,sherie,lucie,leatrice,lakeshia,gerda,edie,bambi,marylin,lavon,hortense,garnet,evie,tressa,shayna,lavina,kyung,jeanetta,sherrill,shara,phyliss,mittie,anabel,alesia,thuy,tawanda,joanie,tiffanie,lashanda,karissa,enriqueta,daria,daniella,corinna,alanna,abbey,roxane,roseanna,magnolia,lida,joellen,coral,carleen,tresa,peggie,novella,nila,maybelle,jenelle,carina,nova,melina,marquerite,margarette,josephina,evonne,cinthia,albina,toya,tawnya,sherita,myriam,lizabeth,lise,keely,jenni,giselle,cheryle,ardith,ardis,alesha,adriane,shaina,linnea,karolyn,felisha,dori,darci,artie,armida,zola,xiomara,vergie,shamika,nena,nannette,maxie,lovie,jeane,jaimie,inge,farrah,elaina,caitlyn,felicitas,cherly,caryl,yolonda,yasmin,teena,prudence,pennie,nydia,mackenzie,orpha,marvel,lizbeth,laurette,jerrie,hermelinda,carolee,tierra,mirian,meta,melony,kori,jennette,jamila,yoshiko,susannah,salina,rhiannon,joleen,cristine,ashton,aracely,tomeka,shalonda,marti,lacie,kala,jada,ilse,hailey,brittani,zona,syble,sherryl,nidia,marlo,kandice,kandi,alycia,ronna,norene,mercy,ingeborg,giovanna,gemma,christel,audry,zora,vita,trish,stephaine,shirlee,shanika,melonie,mazie,jazmin,inga,hettie,geralyn,fonda,estrella,adella,sarita,rina,milissa,maribeth,golda,evon,ethelyn,enedina,cherise,chana,velva,tawanna,sade,mirta,karie,jacinta,elna,davina,cierra,ashlie,albertha,tanesha,nelle,mindi,lorinda,larue,florene,demetra,dedra,ciara,chantelle,ashly,suzy,rosalva,noelia,lyda,leatha,krystyna,kristan,karri,darline,darcie,cinda,cherrie,awilda,almeda,rolanda,lanette,jerilyn,gisele,evalyn,cyndi,cleta,carin,zina,zena,velia,tanika,charissa,talia,margarete,lavonda,kaylee,kathlene,jonna,irena,ilona,idalia,candis,candance,brandee,anitra,alida,sigrid,nicolette,maryjo,linette,hedwig,christiana,alexia,tressie,modesta,lupita,lita,gladis,evelia,davida,cherri,cecily,ashely,annabel,agustina,wanita,shirly,rosaura,hulda,yetta,verona,thomasina,sibyl,shannan,mechelle,leandra,lani,kylee,kandy,jolynn,ferne,eboni,corene,alysia,zula,nada,moira,lyndsay,lorretta,jammie,hortensia,gaynell,adria,vina,vicenta,tangela,stephine,norine,nella,liana,leslee,kimberely,iliana,glory,felica,emogene,elfriede,eden,eartha,carma,ocie,lennie,kiara,jacalyn,carlota,arielle,otilia,kirstin,kacey,johnetta,joetta,jeraldine,jaunita,elana,dorthea,cami,amada,adelia,vernita,tamar,siobhan,renea,rashida,ouida,nilsa,meryl,kristyn,julieta,danica,breanne,aurea,anglea,sherron,odette,malia,lorelei,leesa,kenna,kathlyn,fiona,charlette,suzie,shantell,sabra,racquel,myong,mira,martine,lucienne,lavada,juliann,elvera,delphia,christiane,charolette,carri,asha,angella,paola,ninfa,leda,stefani,shanell,palma,machelle,lissa,kecia,kathryne,karlene,julissa,jettie,jenniffer,corrina,carolann,alena,rosaria,myrtice,marylee,liane,kenyatta,judie,janey,elmira,eldora,denna,cristi,cathi,zaida,vonnie,viva,vernie,rosaline,mariela,luciana,lesli,karan,felice,deneen,adina,wynona,tarsha,sheron,shanita,shani,shandra,randa,pinkie,nelida,marilou,lyla,laurene,laci,janene,dorotha,daniele,dani,carolynn,carlyn,berenice,ayesha,anneliese,alethea,thersa,tamiko,rufina,oliva,mozell,marylyn,kristian,kathyrn,kasandra,kandace,janae,domenica,debbra,dannielle,chun,arcelia,zenobia,sharen,sharee,lavinia,kacie,jackeline,huong,felisa,emelia,eleanora,cythia,cristin,claribel,anastacia,zulma,zandra,yoko,tenisha,susann,sherilyn,shay,shawanda,romana,mathilda,linsey,keiko,joana,isela,gretta,georgetta,eugenie,desirae,delora,corazon,antonina,anika,willene,tracee,tamatha,nichelle,mickie,maegan,luana,lanita,kelsie,edelmira,bree,afton,teodora,tamie,shena,linh,keli,kaci,danyelle,arlette,albertine,adelle,tiffiny,simona,nicolasa,nichol,nakisha,maira,loreen,kizzy,fallon,christene,bobbye,ying,vincenza,tanja,rubie,roni,queenie,margarett,kimberli,irmgard,idell,hilma,evelina,esta,emilee,dennise,dania,carie,risa,rikki,particia,masako,luvenia,loree,loni,lien,gigi,florencia,denita,billye,tomika,sharita,rana,nikole,neoma,margarite,madalyn,lucina,laila,kali,jenette,gabriele,evelyne,elenora,clementina,alejandrina,zulema,violette,vannessa,thresa,retta,patience,noella,nickie,jonell,chaya,camelia,bethel,anya,suzann,mila,lilla,laverna,keesha,kattie,georgene,eveline,estell,elizbeth,vivienne,vallie,trudie,stephane,magaly,madie,kenyetta,karren,janetta,hermine,drucilla,debbi,celestina,candie,britni,beckie,amina,zita,yolande,vivien,vernetta,trudi,pearle,patrina,ossie,nicolle,loyce,letty,katharina,joselyn,jonelle,jenell,iesha,heide,florinda,florentina,elodia,dorine,brunilda,brigid,ashli,ardella,twana,tarah,shavon,serina,rayna,ramonita,margurite,lucrecia,kourtney,kati,jesenia,crista,ayana,alica,alia,vinnie,suellen,romelia,rachell,olympia,michiko,kathaleen,jolie,jessi,janessa,hana,elease,carletta,britany,shona,salome,rosamond,regena,raina,ngoc,nelia,louvenia,lesia,latrina,laticia,larhonda,jina,jacki,emmy,deeann,coretta,arnetta,thalia,shanice,neta,mikki,micki,lonna,leana,lashunda,kiley,joye,jacqulyn,ignacia,hyun,hiroko,henriette,elayne,delinda,dahlia,coreen,consuela,conchita,babette,ayanna,anette,albertina,shawnee,shaneka,quiana,pamelia,merri,merlene,margit,kiesha,kiera,kaylene,jodee,jenise,erlene,emmie,dalila,daisey,casie,belia,babara,versie,vanesa,shelba,shawnda,nikia,naoma,marna,margeret,madaline,lawana,kindra,jutta,jazmine,janett,hannelore,glendora,gertrud,garnett,freeda,frederica,florance,flavia,carline,beverlee,anjanette,valda,tamala,shonna,sarina,oneida,merilyn,marleen,lurline,lenna,katherin,jeni,gracia,glady,farah,enola,dominque,devona,delana,cecila,caprice,alysha,alethia,vena,theresia,tawny,shakira,samara,sachiko,rachele,pamella,marni,mariel,maren,malisa,ligia,lera,latoria,larae,kimber,kathern,karey,jennefer,janeth,halina,fredia,delisa,debroah,ciera,angelika,andree,altha,vivan,terresa,tanna,sudie,signe,salena,ronni,rebbecca,myrtie,malika,maida,leonarda,kayleigh,ethyl,ellyn,dayle,cammie,brittni,birgit,avelina,asuncion,arianna,akiko,venice,tyesha,tonie,tiesha,takisha,steffanie,sindy,meghann,manda,macie,kellye,kellee,joslyn,inger,indira,glinda,glennis,fernanda,faustina,eneida,elicia,digna,dell,arletta,willia,tammara,tabetha,sherrell,sari,rebbeca,pauletta,natosha,nakita,mammie,kenisha,kazuko,kassie,earlean,daphine,corliss,clotilde,carolyne,bernetta,augustina,audrea,annis,annabell,tennille,tamica,selene,rosana,regenia,qiana,markita,macy,leeanne,laurine,jessenia,janita,georgine,genie,emiko,elvie,deandra,dagmar,corie,collen,cherish,romaine,porsha,pearlene,micheline,merna,margorie,margaretta,lore,jenine,hermina,fredericka,elke,drusilla,dorathy,dione,celena,brigida,allegra,tamekia,synthia,sook,slyvia,rosann,reatha,raye,marquetta,margart,ling,layla,kymberly,kiana,kayleen,katlyn,karmen,joella,emelda,eleni,detra,clemmie,cheryll,chantell,cathey,arnita,arla,angle,angelic,alyse,zofia,thomasine,tennie,sherly,sherley,sharyl,remedios,petrina,nickole,myung,myrle,mozella,louanne,lisha,latia,krysta,julienne,jeanene,jacqualine,isaura,gwenda,earleen,cleopatra,carlie,audie,antonietta,alise,verdell,tomoko,thao,talisha,shemika,savanna,santina,rosia,raeann,odilia,nana,minna,magan,lynelle,karma,joeann,ivana,inell,ilana,gudrun,dreama,crissy,chante,carmelina,arvilla,annamae,alvera,aleida,yanira,vanda,tianna,stefania,shira,nicol,nancie,monserrate,melynda,melany,lovella,laure,kacy,jacquelynn,hyon,gertha,eliana,christena,christeen,charise,caterina,carley,candyce,arlena,ammie,willette,vanita,tuyet,syreeta,penney,nyla,maryam,marya,magen,ludie,loma,livia,lanell,kimberlie,julee,donetta,diedra,denisha,deane,dawne,clarine,cherryl,bronwyn,alla,valery,tonda,sueann,soraya,shoshana,shela,sharleen,shanelle,nerissa,meridith,mellie,maye,maple,magaret,lili,leonila,leonie,leeanna,lavonia,lavera,kristel,kathey,kathe,jann,ilda,hildred,hildegarde,genia,fumiko,evelin,ermelinda,elly,dung,doloris,dionna,danae,berneice,annice,alix,verena,verdie,shawnna,shawana,shaunna,rozella,randee,ranae,milagro,lynell,luise,loida,lisbeth,karleen,junita,jona,isis,hyacinth,hedy,gwenn,ethelene,erline,donya,domonique,delicia,dannette,cicely,branda,blythe,bethann,ashlyn,annalee,alline,yuko,vella,trang,towanda,tesha,sherlyn,narcisa,miguelina,meri,maybell,marlana,marguerita,madlyn,lory,loriann,leonore,leighann,laurice,latesha,laronda,katrice,kasie,kaley,jadwiga,glennie,gearldine,francina,epifania,dyan,dorie,diedre,denese,demetrice,delena,cristie,cleora,catarina,carisa,barbera,almeta,trula,tereasa,solange,sheilah,shavonne,sanora,rochell,mathilde,margareta,maia,lynsey,lawanna,launa,kena,keena,katia,glynda,gaylene,elvina,elanor,danuta,danika,cristen,cordie,coletta,clarita,carmon,brynn,azucena,aundrea,angele,verlie,verlene,tamesha,silvana,sebrina,samira,reda,raylene,penni,norah,noma,mireille,melissia,maryalice,laraine,kimbery,karyl,karine,jolanda,johana,jesusa,jaleesa,jacquelyne,iluminada,hilaria,hanh,gennie,francie,floretta,exie,edda,drema,delpha,barbar,assunta,ardell,annalisa,alisia,yukiko,yolando,wonda,waltraud,veta,temeka,tameika,shirleen,shenita,piedad,ozella,mirtha,marilu,kimiko,juliane,jenice,janay,jacquiline,hilde,elois,echo,devorah,chau,brinda,betsey,arminda,aracelis,apryl,annett,alishia,veola,usha,toshiko,theola,tashia,talitha,shery,renetta,reiko,rasheeda,obdulia,mika,melaine,meggan,marlen,marget,marceline,mana,magdalen,librada,lezlie,latashia,lasandra,kelle,isidra,inocencia,gwyn,francoise,erminia,erinn,dimple,devora,criselda,armanda,arie,ariane,angelena,aliza,adriene,adaline,xochitl,twanna,tomiko,tamisha,taisha,susy,rutha,rhona,noriko,natashia,merrie,marinda,mariko,margert,loris,lizzette,leisha,kaila,joannie,jerrica,jene,jannet,janee,jacinda,herta,elenore,doretta,delaine,daniell,claudie,britta,apolonia,amberly,alease,yuri,waneta,tomi,sharri,sandie,roselle,reynalda,raguel,phylicia,patria,olimpia,odelia,mitzie,minda,mignon,mica,mendy,marivel,maile,lynetta,lavette,lauryn,latrisha,lakiesha,kiersten,kary,josphine,jolyn,jetta,janise,jacquie,ivelisse,glynis,gianna,gaynelle,danyell,danille,dacia,coralee,cher,ceola,arianne,aleshia,yung,williemae,trinh,thora,sherika,shemeka,shaunda,roseline,ricki,melda,mallie,lavonna,latina,laquanda,lala,lachelle,klara,kandis,johna,jeanmarie,jaye,grayce,gertude,emerita,ebonie,clorinda,ching,chery,carola,breann,blossom,bernardine,becki,arletha,argelia,alita,yulanda,yessenia,tobi,tasia,sylvie,shirl,shirely,shella,shantelle,sacha,rebecka,providencia,paulene,misha,miki,marline,marica,lorita,latoyia,lasonya,kerstin,kenda,keitha,kathrin,jaymie,gricelda,ginette,eryn,elina,elfrieda,danyel,cheree,chanelle,barrie,aurore,annamaria,alleen,ailene,aide,yasmine,vashti,treasa,tiffaney,sheryll,sharie,shanae,raisa,neda,mitsuko,mirella,milda,maryanna,maragret,mabelle,luetta,lorina,letisha,latarsha,lanelle,lajuana,krissy,karly,karena,jessika,jerica,jeanelle,jalisa,jacelyn,izola,euna,etha,domitila,dominica,daina,creola,carli,camie,brittny,ashanti,anisha,aleen,adah,yasuko,valrie,tona,tinisha,terisa,taneka,simonne,shalanda,serita,ressie,refugia,olene,margherita,mandie,maire,lyndia,luci,lorriane,loreta,leonia,lavona,lashawnda,lakia,kyoko,krystina,krysten,kenia,kelsi,jeanice,isobel,georgiann,genny,felicidad,eilene,deloise,deedee,conception,clora,cherilyn,calandra,armandina,anisa,tiera,theressa,stephania,sima,shyla,shonta,shera,shaquita,shala,rossana,nohemi,nery,moriah,melita,melida,melani,marylynn,marisha,mariette,malorie,madelene,ludivina,loria,lorette,loralee,lianne,lavenia,laurinda,lashon,kimi,keila,katelynn,jone,joane,jayna,janella,hertha,francene,elinore,despina,delsie,deedra,clemencia,carolin,bulah,brittanie,blondell,bibi,beaulah,beata,annita,agripina,virgen,valene,twanda,tommye,tarra,tari,tammera,shakia,sadye,ruthanne,rochel,rivka,pura,nenita,natisha,ming,merrilee,melodee,marvis,lucilla,leena,laveta,larita,lanie,keren,ileen,georgeann,genna,frida,eufemia,emely,edyth,deonna,deadra,darlena,chanell,cathern,cassondra,cassaundra,bernarda,berna,arlinda,anamaria,vertie,valeri,torri,stasia,sherise,sherill,sanda,ruthe,rosy,robbi,ranee,quyen,pearly,palmira,onita,nisha,niesha,nida,merlyn,mayola,marylouise,marth,margene,madelaine,londa,leontine,leoma,leia,lauralee,lanora,lakita,kiyoko,keturah,katelin,kareen,jonie,johnette,jenee,jeanett,izetta,hiedi,heike,hassie,giuseppina,georgann,fidela,fernande,elwanda,ellamae,eliz,dusti,dotty,cyndy,coralie,celesta,alverta,xenia,wava,vanetta,torrie,tashina,tandy,tambra,tama,stepanie,shila,shaunta,sharan,shaniqua,shae,setsuko,serafina,sandee,rosamaria,priscila,olinda,nadene,muoi,michelina,mercedez,maryrose,marcene,magali,mafalda,lannie,kayce,karoline,kamilah,kamala,justa,joline,jennine,jacquetta,iraida,georgeanna,franchesca,emeline,elane,ehtel,earlie,dulcie,dalene,classie,chere,charis,caroyln,carmina,carita,bethanie,ayako,arica,alysa,alessandra,akilah,adrien,zetta,youlanda,yelena,yahaira,xuan,wendolyn,tijuana,terina,teresia,suzi,sherell,shavonda,shaunte,sharda,shakita,sena,ryann,rubi,riva,reginia,rachal,parthenia,pamula,monnie,monet,michaele,melia,malka,maisha,lisandra,lekisha,lean,lakendra,krystin,kortney,kizzie,kittie,kera,kendal,kemberly,kanisha,julene,jule,johanne,jamee,halley,gidget,fredricka,fleta,fatimah,eusebia,elza,eleonore,dorthey,doria,donella,dinorah,delorse,claretha,christinia,charlyn,bong,belkis,azzie,andera,aiko,adena,yajaira,vania,ulrike,toshia,tifany,stefany,shizue,shenika,shawanna,sharolyn,sharilyn,shaquana,shantay,rozanne,roselee,remona,reanna,raelene,phung,petronila,natacha,nancey,myrl,miyoko,miesha,merideth,marvella,marquitta,marhta,marchelle,lizeth,libbie,lahoma,ladawn,kina,katheleen,katharyn,karisa,kaleigh,junie,julieann,johnsie,janean,jaimee,jackqueline,hisako,herma,helaine,gwyneth,gita,eustolia,emelina,elin,edris,donnette,donnetta,dierdre,denae,darcel,clarisa,cinderella,chia,charlesetta,charita,celsa,cassy,cassi,carlee,bruna,brittaney,brande,billi,antonetta,angla,angelyn,analisa,alane,wenona,wendie,veronique,vannesa,tobie,tempie,sumiko,sulema,somer,sheba,sharice,shanel,shalon,rosio,roselia,renay,rema,reena,ozie,oretha,oralee,ngan,nakesha,milly,marybelle,margrett,maragaret,manie,lurlene,lillia,lieselotte,lavelle,lashaunda,lakeesha,kaycee,kalyn,joya,joette,jenae,janiece,illa,grisel,glayds,genevie,gala,fredda,eleonor,debera,deandrea,corrinne,cordia,contessa,colene,cleotilde,chantay,cecille,beatris,azalee,arlean,ardath,anjelica,anja,alfredia,aleisha,zada,yuonne,xiao,willodean,vennie,vanna,tyisha,tova,torie,tonisha,tilda,tien,sirena,sherril,shanti,shan,senaida,samella,robbyn,renda,reita,phebe,paulita,nobuko,nguyet,neomi,mikaela,melania,maximina,marg,maisie,lynna,lilli,lashaun,lakenya,lael,kirstie,kathline,kasha,karlyn,karima,jovan,josefine,jennell,jacqui,jackelyn,hien,grazyna,florrie,floria,eleonora,dwana,dorla,delmy,deja,dede,dann,crysta,clelia,claris,chieko,cherlyn,cherelle,charmain,chara,cammy,arnette,ardelle,annika,amiee,amee,allena,yvone,yuki,yoshie,yevette,yael,willetta,voncile,venetta,tula,tonette,timika,temika,telma,teisha,taren,stacee,shawnta,saturnina,ricarda,pasty,onie,nubia,marielle,mariella,marianela,mardell,luanna,loise,lisabeth,lindsy,lilliana,lilliam,lelah,leigha,leanora,kristeen,khalilah,keeley,kandra,junko,joaquina,jerlene,jani,jamika,hsiu,hermila,genevive,evia,eugena,emmaline,elfreda,elene,donette,delcie,deeanna,darcey,clarinda,cira,chae,celinda,catheryn,casimira,carmelia,camellia,breana,bobette,bernardina,bebe,basilia,arlyne,amal,alayna,zonia,zenia,yuriko,yaeko,wynell,willena,vernia,tora,terrilyn,terica,tenesha,tawna,tajuana,taina,stephnie,sona,sina,shondra,shizuko,sherlene,sherice,sharika,rossie,rosena,rima,rheba,renna,natalya,nancee,melodi,meda,matha,marketta,maricruz,marcelene,malvina,luba,louetta,leida,lecia,lauran,lashawna,laine,khadijah,katerine,kasi,kallie,julietta,jesusita,jestine,jessia,jeffie,janyce,isadora,georgianne,fidelia,evita,eura,eulah,estefana,elsy,eladia,dodie,denisse,deloras,delila,daysi,crystle,concha,claretta,charlsie,charlena,carylon,bettyann,asley,ashlea,amira,agueda,agnus,yuette,vinita,victorina,tynisha,treena,toccara,tish,thomasena,tegan,soila,shenna,sharmaine,shantae,shandi,saran,sarai,sana,rosette,rolande,regine,otelia,olevia,nicholle,necole,naida,myrta,myesha,mitsue,minta,mertie,margy,mahalia,madalene,loura,lorean,lesha,leonida,lenita,lavone,lashell,lashandra,lamonica,kimbra,katherina,karry,kanesha,jong,jeneva,jaquelyn,gilma,ghislaine,gertrudis,fransisca,fermina,ettie,etsuko,ellan,elidia,edra,dorethea,doreatha,denyse,deetta,daine,cyrstal,corrin,cayla,carlita,camila,burma,bula,buena,barabara,avril,alaine,zana,wilhemina,wanetta,verline,vasiliki,tonita,tisa,teofila,tayna,taunya,tandra,takako,sunni,suanne,sixta,sharell,seema,rosenda,robena,raymonde,pamila,ozell,neida,mistie,micha,merissa,maurita,maryln,maryetta,marcell,malena,makeda,lovetta,lourie,lorrine,lorilee,laurena,lashay,larraine,laree,lacresha,kristle,keva,keira,karole,joie,jinny,jeannetta,jama,heidy,gilberte,gema,faviola,evelynn,enda,elli,ellena,divina,dagny,collene,codi,cindie,chassidy,chasidy,catrice,catherina,cassey,caroll,carlena,candra,calista,bryanna,britteny,beula,bari,audrie,audria,ardelia,annelle,angila,alona,allyn".split(","),surnames:"smith,johnson,williams,jones,brown,davis,miller,wilson,moore,taylor,anderson,jackson,white,harris,martin,thompson,garcia,martinez,robinson,clark,rodriguez,lewis,lee,walker,hall,allen,young,hernandez,king,wright,lopez,hill,green,adams,baker,gonzalez,nelson,carter,mitchell,perez,roberts,turner,phillips,campbell,parker,evans,edwards,collins,stewart,sanchez,morris,rogers,reed,cook,morgan,bell,murphy,bailey,rivera,cooper,richardson,cox,howard,ward,torres,peterson,gray,ramirez,watson,brooks,sanders,price,bennett,wood,barnes,ross,henderson,coleman,jenkins,perry,powell,long,patterson,hughes,flores,washington,butler,simmons,foster,gonzales,bryant,alexander,griffin,diaz,hayes,myers,ford,hamilton,graham,sullivan,wallace,woods,cole,west,owens,reynolds,fisher,ellis,harrison,gibson,mcdonald,cruz,marshall,ortiz,gomez,murray,freeman,wells,webb,simpson,stevens,tucker,porter,hicks,crawford,boyd,mason,morales,kennedy,warren,dixon,ramos,reyes,burns,gordon,shaw,holmes,rice,robertson,hunt,black,daniels,palmer,mills,nichols,grant,knight,ferguson,stone,hawkins,dunn,perkins,hudson,spencer,gardner,stephens,payne,pierce,berry,matthews,arnold,wagner,willis,watkins,olson,carroll,duncan,snyder,hart,cunningham,lane,andrews,ruiz,harper,fox,riley,armstrong,carpenter,weaver,greene,elliott,chavez,sims,peters,kelley,franklin,lawson,fields,gutierrez,schmidt,carr,vasquez,castillo,wheeler,chapman,montgomery,richards,williamson,johnston,banks,meyer,bishop,mccoy,howell,alvarez,morrison,hansen,fernandez,garza,harvey,burton,nguyen,jacobs,reid,fuller,lynch,garrett,romero,welch,larson,frazier,burke,hanson,mendoza,moreno,bowman,medina,fowler,brewer,hoffman,carlson,silva,pearson,holland,fleming,jensen,vargas,byrd,davidson,hopkins,herrera,wade,soto,walters,neal,caldwell,lowe,jennings,barnett,graves,jimenez,horton,shelton,barrett,obrien,castro,sutton,mckinney,lucas,miles,rodriquez,chambers,holt,lambert,fletcher,watts,bates,hale,rhodes,pena,beck,newman,haynes,mcdaniel,mendez,bush,vaughn,parks,dawson,santiago,norris,hardy,steele,curry,powers,schultz,barker,guzman,page,munoz,ball,keller,chandler,weber,walsh,lyons,ramsey,wolfe,schneider,mullins,benson,sharp,bowen,barber,cummings,hines,baldwin,griffith,valdez,hubbard,salazar,reeves,warner,stevenson,burgess,santos,tate,cross,garner,mann,mack,moss,thornton,mcgee,farmer,delgado,aguilar,vega,glover,manning,cohen,harmon,rodgers,robbins,newton,blair,higgins,ingram,reese,cannon,strickland,townsend,potter,goodwin,walton,rowe,hampton,ortega,patton,swanson,goodman,maldonado,yates,becker,erickson,hodges,rios,conner,adkins,webster,malone,hammond,flowers,cobb,moody,quinn,pope,osborne,mccarthy,guerrero,estrada,sandoval,gibbs,gross,fitzgerald,stokes,doyle,saunders,wise,colon,gill,alvarado,greer,padilla,waters,nunez,ballard,schwartz,mcbride,houston,christensen,klein,pratt,briggs,parsons,mclaughlin,zimmerman,buchanan,moran,copeland,pittman,brady,mccormick,holloway,brock,poole,logan,bass,marsh,drake,wong,jefferson,morton,abbott,sparks,norton,huff,massey,figueroa,carson,bowers,roberson,barton,tran,lamb,harrington,boone,cortez,clarke,mathis,singleton,wilkins,cain,underwood,hogan,mckenzie,collier,luna,phelps,mcguire,bridges,wilkerson,nash,summers,atkins,wilcox,pitts,conley,marquez,burnett,cochran,chase,davenport,hood,gates,ayala,sawyer,vazquez,dickerson,hodge,acosta,flynn,espinoza,nicholson,monroe,wolf,morrow,whitaker,oconnor,skinner,ware,molina,kirby,huffman,gilmore,dominguez,oneal,lang,combs,kramer,hancock,gallagher,gaines,shaffer,wiggins,mathews,mcclain,fischer,wall,melton,hensley,bond,dyer,grimes,contreras,wyatt,baxter,snow,mosley,shepherd,larsen,hoover,beasley,petersen,whitehead,meyers,garrison,shields,horn,savage,olsen,schroeder,hartman,woodard,mueller,kemp,deleon,booth,patel,calhoun,wiley,eaton,cline,navarro,harrell,humphrey,parrish,duran,hutchinson,hess,dorsey,bullock,robles,beard,dalton,avila,rich,blackwell,johns,blankenship,trevino,salinas,campos,pruitt,callahan,montoya,hardin,guerra,mcdowell,stafford,gallegos,henson,wilkinson,booker,merritt,atkinson,orr,decker,hobbs,tanner,knox,pacheco,stephenson,glass,rojas,serrano,marks,hickman,sweeney,strong,mcclure,conway,roth,maynard,farrell,lowery,hurst,nixon,weiss,trujillo,ellison,sloan,juarez,winters,mclean,boyer,villarreal,mccall,gentry,carrillo,ayers,lara,sexton,pace,hull,leblanc,browning,velasquez,leach,chang,sellers,herring,noble,foley,bartlett,mercado,landry,durham,walls,barr,mckee,bauer,rivers,bradshaw,pugh,velez,rush,estes,dodson,morse,sheppard,weeks,camacho,bean,barron,livingston,middleton,spears,branch,blevins,chen,kerr,mcconnell,hatfield,harding,solis,frost,giles,blackburn,pennington,woodward,finley,mcintosh,koch,mccullough,blanchard,rivas,brennan,mejia,kane,benton,buckley,valentine,maddox,russo,mcknight,buck,moon,mcmillan,crosby,berg,dotson,mays,roach,chan,richmond,meadows,faulkner,oneill,knapp,kline,ochoa,jacobson,gay,hendricks,horne,shepard,hebert,cardenas,mcintyre,waller,holman,donaldson,cantu,morin,gillespie,fuentes,tillman,bentley,peck,key,salas,rollins,gamble,dickson,santana,cabrera,cervantes,howe,hinton,hurley,spence,zamora,yang,mcneil,suarez,petty,gould,mcfarland,sampson,carver,bray,macdonald,stout,hester,melendez,dillon,farley,hopper,galloway,potts,joyner,stein,aguirre,osborn,mercer,bender,franco,rowland,sykes,pickett,sears,mayo,dunlap,hayden,wilder,mckay,coffey,mccarty,ewing,cooley,vaughan,bonner,cotton,holder,stark,ferrell,cantrell,fulton,lott,calderon,pollard,hooper,burch,mullen,fry,riddle,levy,duke,odonnell,britt,daugherty,berger,dillard,alston,frye,riggs,chaney,odom,duffy,fitzpatrick,valenzuela,mayer,alford,mcpherson,acevedo,barrera,cote,reilly,compton,mooney,mcgowan,craft,clemons,wynn,nielsen,baird,stanton,snider,rosales,bright,witt,hays,holden,rutledge,kinney,clements,castaneda,slater,hahn,burks,delaney,pate,lancaster,sharpe,whitfield,talley,macias,burris,ratliff,mccray,madden,kaufman,beach,goff,cash,bolton,mcfadden,levine,byers,kirkland,kidd,workman,carney,mcleod,holcomb,finch,sosa,haney,franks,sargent,nieves,downs,rasmussen,bird,hewitt,foreman,valencia,oneil,delacruz,vinson,dejesus,hyde,forbes,gilliam,guthrie,wooten,huber,barlow,boyle,mcmahon,buckner,rocha,puckett,langley,knowles,cooke,velazquez,whitley,vang,shea,rouse,hartley,mayfield,elder,rankin,hanna,cowan,lucero,arroyo,slaughter,haas,oconnell,minor,boucher,archer,boggs,dougherty,andersen,newell,crowe,wang,friedman,bland,swain,holley,pearce,childs,yarbrough,galvan,proctor,meeks,lozano,mora,rangel,bacon,villanueva,schaefer,rosado,helms,boyce,goss,stinson,ibarra,hutchins,covington,crowley,hatcher,mackey,bunch,womack,polk,dodd,childress,childers,villa,springer,mahoney,dailey,belcher,lockhart,griggs,costa,brandt,walden,moser,tatum,mccann,akers,lutz,pryor,orozco,mcallister,lugo,davies,shoemaker,rutherford,newsome,magee,chamberlain,blanton,simms,godfrey,flanagan,crum,cordova,escobar,downing,sinclair,donahue,krueger,mcginnis,gore,farris,webber,corbett,andrade,starr,lyon,yoder,hastings,mcgrath,spivey,krause,harden,crabtree,kirkpatrick,arrington,ritter,mcghee,bolden,maloney,gagnon,dunbar,ponce,pike,mayes,beatty,mobley,kimball,butts,montes,eldridge,braun,hamm,gibbons,moyer,manley,herron,plummer,elmore,cramer,rucker,pierson,fontenot,rubio,goldstein,elkins,wills,novak,hickey,worley,gorman,katz,dickinson,broussard,woodruff,crow,britton,nance,lehman,bingham,zuniga,whaley,shafer,coffman,steward,delarosa,neely,mata,davila,mccabe,kessler,hinkle,welsh,pagan,goldberg,goins,crouch,cuevas,quinones,mcdermott,hendrickson,samuels,denton,bergeron,ivey,locke,haines,snell,hoskins,byrne,arias,corbin,beltran,chappell,downey,dooley,tuttle,couch,payton,mcelroy,crockett,groves,cartwright,dickey,mcgill,dubois,muniz,tolbert,dempsey,cisneros,sewell,latham,vigil,tapia,rainey,norwood,stroud,meade,tipton,kuhn,hilliard,bonilla,teague,gunn,greenwood,correa,reece,pineda,phipps,frey,kaiser,ames,gunter,schmitt,milligan,espinosa,bowden,vickers,lowry,pritchard,costello,piper,mcclellan,lovell,sheehan,hatch,dobson,singh,jeffries,hollingsworth,sorensen,meza,fink,donnelly,burrell,tomlinson,colbert,billings,ritchie,helton,sutherland,peoples,mcqueen,thomason,givens,crocker,vogel,robison,dunham,coker,swartz,keys,ladner,richter,hargrove,edmonds,brantley,albright,murdock,boswell,muller,quintero,padgett,kenney,daly,connolly,inman,quintana,lund,barnard,villegas,simons,huggins,tidwell,sanderson,bullard,mcclendon,duarte,draper,marrero,dwyer,abrams,stover,goode,fraser,crews,bernal,godwin,conklin,mcneal,baca,esparza,crowder,bower,brewster,mcneill,rodrigues,leal,coates,raines,mccain,mccord,miner,holbrook,swift,dukes,carlisle,aldridge,ackerman,starks,ricks,holliday,ferris,hairston,sheffield,lange,fountain,doss,betts,kaplan,carmichael,bloom,ruffin,penn,kern,bowles,sizemore,larkin,dupree,seals,metcalf,hutchison,henley,farr,mccauley,hankins,gustafson,curran,waddell,ramey,cates,pollock,cummins,messer,heller,funk,cornett,palacios,galindo,cano,hathaway,pham,enriquez,salgado,pelletier,painter,wiseman,blount,feliciano,houser,doherty,mead,mcgraw,swan,capps,blanco,blackmon,thomson,mcmanus,burkett,gleason,dickens,cormier,voss,rushing,rosenberg,hurd,dumas,benitez,arellano,marin,caudill,bragg,jaramillo,huerta,gipson,colvin,biggs,vela,platt,cassidy,tompkins,mccollum,dolan,daley,crump,sneed,kilgore,grove,grimm,davison,brunson,prater,marcum,devine,dodge,stratton,rosas,choi,tripp,ledbetter,hightower,feldman,epps,yeager,posey,scruggs,cope,stubbs,richey,overton,trotter,sprague,cordero,butcher,stiles,burgos,woodson,horner,bassett,purcell,haskins,akins,ziegler,spaulding,hadley,grubbs,sumner,murillo,zavala,shook,lockwood,driscoll,dahl,thorpe,redmond,putnam,mcwilliams,mcrae,romano,joiner,sadler,hedrick,hager,hagen,fitch,coulter,thacker,mansfield,langston,guidry,ferreira,corley,conn,rossi,lackey,baez,saenz,mcnamara,mcmullen,mckenna,mcdonough,link,engel,browne,roper,peacock,eubanks,drummond,stringer,pritchett,parham,mims,landers,grayson,schafer,egan,timmons,ohara,keen,hamlin,finn,cortes,mcnair,nadeau,moseley,michaud,rosen,oakes,kurtz,jeffers,calloway,beal,bautista,winn,suggs,stern,stapleton,lyles,laird,montano,dawkins,hagan,goldman,bryson,barajas,lovett,segura,metz,lockett,langford,hinson,eastman,hooks,smallwood,shapiro,crowell,whalen,triplett,chatman,aldrich,cahill,youngblood,ybarra,stallings,sheets,reeder,connelly,bateman,abernathy,winkler,wilkes,masters,hackett,granger,gillis,schmitz,sapp,napier,souza,lanier,gomes,weir,otero,ledford,burroughs,babcock,ventura,siegel,dugan,bledsoe,atwood,wray,varner,spangler,anaya,staley,kraft,fournier,belanger,wolff,thorne,bynum,burnette,boykin,swenson,purvis,pina,khan,duvall,darby,xiong,kauffman,healy,engle,benoit,valle,steiner,spicer,shaver,randle,lundy,chin,calvert,staton,neff,kearney,darden,oakley,medeiros,mccracken,crenshaw,perdue,dill,whittaker,tobin,washburn,hogue,goodrich,easley,bravo,dennison,shipley,kerns,jorgensen,crain,villalobos,maurer,longoria,keene,coon,witherspoon,staples,pettit,kincaid,eason,madrid,echols,lusk,stahl,currie,thayer,shultz,mcnally,seay,maher,gagne,barrow,nava,moreland,honeycutt,hearn,diggs,caron,whitten,westbrook,stovall,ragland,munson,meier,looney,kimble,jolly,hobson,goddard,culver,burr,presley,negron,connell,tovar,huddleston,ashby,salter,root,pendleton,oleary,nickerson,myrick,judd,jacobsen,bain,adair,starnes,matos,busby,herndon,hanley,bellamy,doty,bartley,yazzie,rowell,parson,gifford,cullen,christiansen,benavides,barnhart,talbot,mock,crandall,connors,bonds,whitt,gage,bergman,arredondo,addison,lujan,dowdy,jernigan,huynh,bouchard,dutton,rhoades,ouellette,kiser,herrington,hare,blackman,babb,allred,rudd,paulson,ogden,koenig,geiger,begay,parra,lassiter,hawk,esposito,waldron,ransom,prather,chacon,vick,sands,roark,parr,mayberry,greenberg,coley,bruner,whitman,skaggs,shipman,leary,hutton,romo,medrano,ladd,kruse,askew,schulz,alfaro,tabor,mohr,gallo,bermudez,pereira,bliss,reaves,flint,comer,woodall,naquin,guevara,delong,carrier,pickens,tilley,schaffer,knutson,fenton,doran,vogt,vann,prescott,mclain,landis,corcoran,zapata,hyatt,hemphill,faulk,dove,boudreaux,aragon,whitlock,trejo,tackett,shearer,saldana,hanks,mckinnon,koehler,bourgeois,keyes,goodson,foote,lunsford,goldsmith,flood,winslow,sams,reagan,mccloud,hough,esquivel,naylor,loomis,coronado,ludwig,braswell,bearden,huang,fagan,ezell,edmondson,cronin,nunn,lemon,guillory,grier,dubose,traylor,ryder,dobbins,coyle,aponte,whitmore,smalls,rowan,malloy,cardona,braxton,borden,humphries,carrasco,ruff,metzger,huntley,hinojosa,finney,madsen,ernst,dozier,burkhart,bowser,peralta,daigle,whittington,sorenson,saucedo,roche,redding,fugate,avalos,waite,lind,huston,hawthorne,hamby,boyles,boles,regan,faust,crook,beam,barger,hinds,gallardo,willoughby,willingham,eckert,busch,zepeda,worthington,tinsley,hoff,hawley,carmona,varela,rector,newcomb,kinsey,dube,whatley,ragsdale,bernstein,becerra,yost,mattson,felder,cheek,handy,grossman,gauthier,escobedo,braden,beckman,mott,hillman,flaherty,dykes,stockton,stearns,lofton,coats,cavazos,beavers,barrios,tang,mosher,cardwell,coles,burnham,weller,lemons,beebe,aguilera,parnell,harman,couture,alley,schumacher,redd,dobbs,blum,blalock,merchant,ennis,denson,cottrell,brannon,bagley,aviles,watt,sousa,rosenthal,rooney,dietz,blank,paquette,mcclelland,duff,velasco,lentz,grubb,burrows,barbour,ulrich,shockley,rader,beyer,mixon,layton,altman,weathers,stoner,squires,shipp,priest,lipscomb,cutler,caballero,zimmer,willett,thurston,storey,medley,epperson,shah,mcmillian,baggett,torrez,hirsch,dent,poirier,peachey,farrar,creech,barth,trimble,dupre,albrecht,sample,lawler,crisp,conroy,wetzel,nesbitt,murry,jameson,wilhelm,patten,minton,matson,kimbrough,guinn,croft,toth,pulliam,nugent,newby,littlejohn,dias,canales,bernier,baron,singletary,renteria,pruett,mchugh,mabry,landrum,brower,stoddard,cagle,stjohn,scales,kohler,kellogg,hopson,gant,tharp,gann,zeigler,pringle,hammons,fairchild,deaton,chavis,carnes,rowley,matlock,kearns,irizarry,carrington,starkey,lopes,jarrell,craven,baum,littlefield,linn,humphreys,etheridge,cuellar,chastain,bundy,speer,skelton,quiroz,pyle,portillo,ponder,moulton,machado,killian,hutson,hitchcock,dowling,cloud,burdick,spann,pedersen,levin,leggett,hayward,dietrich,beaulieu,barksdale,wakefield,snowden,briscoe,bowie,berman,ogle,mcgregor,laughlin,helm,burden,wheatley,schreiber,pressley,parris,alaniz,agee,swann,snodgrass,schuster,radford,monk,mattingly,harp,girard,cheney,yancey,wagoner,ridley,lombardo,hudgins,gaskins,duckworth,coburn,willey,prado,newberry,magana,hammonds,elam,whipple,slade,serna,ojeda,liles,dorman,diehl,upton,reardon,michaels,goetz,eller,bauman,baer,layne,hummel,brenner,amaya,adamson,ornelas,dowell,cloutier,castellanos,wellman,saylor,orourke,moya,montalvo,kilpatrick,durbin,shell,oldham,kang,garvin,foss,branham,bartholomew,templeton,maguire,holton,rider,monahan,mccormack,beaty,anders,streeter,nieto,nielson,moffett,lankford,keating,heck,gatlin,delatorre,callaway,adcock,worrell,unger,robinette,nowak,jeter,brunner,steen,parrott,overstreet,nobles,montanez,clevenger,brinkley,trahan,quarles,pickering,pederson,jansen,grantham,gilchrist,crespo,aiken,schell,schaeffer,lorenz,leyva,harms,dyson,wallis,pease,leavitt,cheng,cavanaugh,batts,warden,seaman,rockwell,quezada,paxton,linder,houck,fontaine,durant,caruso,adler,pimentel,mize,lytle,cleary,cason,acker,switzer,isaacs,higginbotham,waterman,vandyke,stamper,sisk,shuler,riddick,mcmahan,levesque,hatton,bronson,bollinger,arnett,okeefe,gerber,gannon,farnsworth,baughman,silverman,satterfield,mccrary,kowalski,grigsby,greco,cabral,trout,rinehart,mahon,linton,gooden,curley,baugh,wyman,weiner,schwab,schuler,morrissey,mahan,bunn,thrasher,spear,waggoner,qualls,purdy,mcwhorter,mauldin,gilman,perryman,newsom,menard,martino,graf,billingsley,artis,simpkins,salisbury,quintanilla,gilliland,fraley,foust,crouse,scarborough,grissom,fultz,marlow,markham,madrigal,lawton,barfield,whiting,varney,schwarz,gooch,arce,wheat,truong,poulin,hurtado,selby,gaither,fortner,culpepper,coughlin,brinson,boudreau,bales,stepp,holm,schilling,morrell,kahn,heaton,gamez,causey,turpin,shanks,schrader,meek,isom,hardison,carranza,yanez,scroggins,schofield,runyon,ratcliff,murrell,moeller,irby,currier,butterfield,ralston,pullen,pinson,estep,carbone,hawks,ellington,casillas,spurlock,sikes,motley,mccartney,kruger,isbell,houle,burk,tomlin,quigley,neumann,lovelace,fennell,cheatham,bustamante,skidmore,hidalgo,forman,culp,bowens,betancourt,aquino,robb,milner,martel,gresham,wiles,ricketts,dowd,collazo,bostic,blakely,sherrod,kenyon,gandy,ebert,deloach,allard,sauer,robins,olivares,gillette,chestnut,bourque,paine,hite,hauser,devore,crawley,chapa,talbert,poindexter,meador,mcduffie,mattox,kraus,harkins,choate,wren,sledge,sanborn,kinder,geary,cornwell,barclay,abney,seward,rhoads,howland,fortier,benner,vines,tubbs,troutman,rapp,mccurdy,deluca,westmoreland,havens,guajardo,clary,seal,meehan,herzog,guillen,ashcraft,waugh,renner,milam,elrod,churchill,breaux,bolin,asher,windham,tirado,pemberton,nolen,noland,knott,emmons,cornish,christenson,brownlee,barbee,waldrop,pitt,olvera,lombardi,gruber,gaffney,eggleston,banda,archuleta,slone,prewitt,pfeiffer,nettles,mena,mcadams,henning,gardiner,cromwell,chisholm,burleson,vest,oglesby,mccarter,lumpkin,wofford,vanhorn,thorn,teel,swafford,stclair,stanfield,ocampo,herrmann,hannon,arsenault,roush,mcalister,hiatt,gunderson,forsythe,duggan,delvalle,cintron,wilks,weinstein,uribe,rizzo,noyes,mclendon,gurley,bethea,winstead,maples,guyton,giordano,alderman,valdes,polanco,pappas,lively,grogan,griffiths,bobo,arevalo,whitson,sowell,rendon,fernandes,farrow,benavidez,ayres,alicea,stump,smalley,seitz,schulte,gilley,gallant,canfield,wolford,omalley,mcnutt,mcnulty,mcgovern,hardman,harbin,cowart,chavarria,brink,beckett,bagwell,armstead,anglin,abreu,reynoso,krebs,jett,hoffmann,greenfield,forte,burney,broome,sisson,trammell,partridge,mace,lomax,lemieux,gossett,frantz,fogle,cooney,broughton,pence,paulsen,muncy,mcarthur,hollins,beauchamp,withers,osorio,mulligan,hoyle,dockery,cockrell,begley,amador,roby,rains,lindquist,gentile,everhart,bohannon,wylie,sommers,purnell,fortin,dunning,breeden,vail,phelan,phan,marx,cosby,colburn,boling,biddle,ledesma,gaddis,denney,chow,bueno,berrios,wicker,tolliver,thibodeaux,nagle,lavoie,fisk,crist,barbosa,reedy,locklear,kolb,himes,behrens,beckwith,weems,wahl,shorter,shackelford,rees,muse,cerda,valadez,thibodeau,saavedra,ridgeway,reiter,mchenry,majors,lachance,keaton,ferrara,clemens,blocker,applegate,needham,mojica,kuykendall,hamel,escamilla,doughty,burchett,ainsworth,vidal,upchurch,thigpen,strauss,spruill,sowers,riggins,ricker,mccombs,harlow,buffington,sotelo,olivas,negrete,morey,macon,logsdon,lapointe,bigelow,bello,westfall,stubblefield,lindley,hein,hawes,farrington,breen,birch,wilde,steed,sepulveda,reinhardt,proffitt,minter,messina,mcnabb,maier,keeler,gamboa,donohue,basham,shinn,crooks,cota,borders,bills,bachman,tisdale,tavares,schmid,pickard,gulley,fonseca,delossantos,condon,batista,wicks,wadsworth,martell,littleton,ison,haag,folsom,brumfield,broyles,brito,mireles,mcdonnell,leclair,hamblin,gough,fanning,binder,winfield,whitworth,soriano,palumbo,newkirk,mangum,hutcherson,comstock,carlin,beall,bair,wendt,watters,walling,putman,otoole,morley,mares,lemus,keener,hundley,dial,damico,billups,strother,mcfarlane,lamm,eaves,crutcher,caraballo,canty,atwell,taft,siler,rust,rawls,rawlings,prieto,mcneely,mcafee,hulsey,hackney,galvez,escalante,delagarza,crider,bandy,wilbanks,stowe,steinberg,renfro,masterson,massie,lanham,haskell,hamrick,dehart,burdette,branson,bourne,babin,aleman,worthy,tibbs,smoot,slack,paradis,mull,luce,houghton,gantt,furman,danner,christianson,burge,ashford,arndt,almeida,stallworth,shade,searcy,sager,noonan,mclemore,mcintire,maxey,lavigne,jobe,ferrer,falk,coffin,byrnes,aranda,apodaca,stamps,rounds,peek,olmstead,lewandowski,kaminski,dunaway,bruns,brackett,amato,reich,mcclung,lacroix,koontz,herrick,hardesty,flanders,cousins,cato,cade,vickery,shank,nagel,dupuis,croteau,cotter,stuckey,stine,porterfield,pauley,moffitt,knudsen,hardwick,goforth,dupont,blunt,barrows,barnhill,shull,rash,loftis,lemay,kitchens,horvath,grenier,fuchs,fairbanks,culbertson,calkins,burnside,beattie,ashworth,albertson,wertz,vaught,vallejo,turk,tuck,tijerina,sage,peterman,marroquin,marr,lantz,hoang,demarco,cone,berube,barnette,wharton,stinnett,slocum,scanlon,sander,pinto,mancuso,lima,headley,epstein,counts,clarkson,carnahan,boren,arteaga,adame,zook,whittle,whitehurst,wenzel,saxton,reddick,puente,handley,haggerty,earley,devlin,chaffin,cady,acuna,solano,sigler,pollack,pendergrass,ostrander,janes,francois,crutchfield,chamberlin,brubaker,baptiste,willson,reis,neeley,mullin,mercier,lira,layman,keeling,higdon,espinal,chapin,warfield,toledo,pulido,peebles,nagy,montague,mello,lear,jaeger,hogg,graff,furr,soliz,poore,mendenhall,mclaurin,maestas,gable,barraza,tillery,snead,pond,neill,mcculloch,mccorkle,lightfoot,hutchings,holloman,harness,dorn,bock,zielinski,turley,treadwell,stpierre,starling,somers,oswald,merrick,easterling,bivens,truitt,poston,parry,ontiveros,olivarez,moreau,medlin,lenz,knowlton,fairley,cobbs,chisolm,bannister,woodworth,toler,ocasio,noriega,neuman,moye,milburn,mcclanahan,lilley,hanes,flannery,dellinger,danielson,conti,blodgett,beers,weatherford,strain,karr,hitt,denham,custer,coble,clough,casteel,bolduc,batchelor,ammons,whitlow,tierney,staten,sibley,seifert,schubert,salcedo,mattison,laney,haggard,grooms,dees,cromer,cooks,colson,caswell,zarate,swisher,shin,ragan,pridgen,mcvey,matheny,lafleur,franz,ferraro,dugger,whiteside,rigsby,mcmurray,lehmann,jacoby,hildebrand,hendrick,headrick,goad,fincher,drury,borges,archibald,albers,woodcock,trapp,soares,seaton,monson,luckett,lindberg,kopp,keeton,healey,garvey,gaddy,fain,burchfield,wentworth,strand,stack,spooner,saucier,ricci,plunkett,pannell,ness,leger,freitas,fong,elizondo,duval,beaudoin,urbina,rickard,partin,mcgrew,mcclintock,ledoux,forsyth,faison,devries,bertrand,wasson,tilton,scarbrough,leung,irvine,garber,denning,corral,colley,castleberry,bowlin,bogan,beale,baines,trice,rayburn,parkinson,nunes,mcmillen,leahy,kimmel,higgs,fulmer,carden,bedford,taggart,spearman,prichard,morrill,koonce,heinz,hedges,guenther,grice,findley,dover,creighton,boothe,bayer,arreola,vitale,valles,raney,osgood,hanlon,burley,bounds,worden,weatherly,vetter,tanaka,stiltner,nevarez,mosby,montero,melancon,harter,hamer,goble,gladden,gist,ginn,akin,zaragoza,tarver,sammons,royster,oreilly,muir,morehead,luster,kingsley,kelso,grisham,glynn,baumann,alves,yount,tamayo,paterson,oates,menendez,longo,hargis,gillen,desantis,conover,breedlove,sumpter,scherer,rupp,reichert,heredia,creel,cohn,clemmons,casas,bickford,belton,bach,williford,whitcomb,tennant,sutter,stull,mccallum,langlois,keel,keegan,dangelo,dancy,damron,clapp,clanton,bankston,oliveira,mintz,mcinnis,martens,mabe,laster,jolley,hildreth,hefner,glaser,duckett,demers,brockman,blais,alcorn,agnew,toliver,tice,seeley,najera,musser,mcfall,laplante,galvin,fajardo,doan,coyne,copley,clawson,cheung,barone,wynne,woodley,tremblay,stoll,sparrow,sparkman,schweitzer,sasser,samples,roney,legg,heim,farias,colwell,christman,bratcher,winchester,upshaw,southerland,sorrell,sells,mccloskey,martindale,luttrell,loveless,lovejoy,linares,latimer,embry,coombs,bratton,bostick,venable,tuggle,toro,staggs,sandlin,jefferies,heckman,griffis,crayton,clem,browder,thorton,sturgill,sprouse,royer,rousseau,ridenour,pogue,perales,peeples,metzler,mesa,mccutcheon,mcbee,hornsby,heffner,corrigan,armijo,plante,peyton,paredes,macklin,hussey,hodgson,granados,frias,becnel,batten,almanza,turney,teal,sturgeon,meeker,mcdaniels,limon,keeney,hutto,holguin,gorham,fishman,fierro,blanchette,rodrigue,reddy,osburn,oden,lerma,kirkwood,keefer,haugen,hammett,chalmers,brinkman,baumgartner,zhang,valerio,tellez,steffen,shumate,sauls,ripley,kemper,guffey,evers,craddock,carvalho,blaylock,banuelos,balderas,wheaton,turnbull,shuman,pointer,mosier,mccue,ligon,kozlowski,johansen,ingle,herr,briones,snipes,rickman,pipkin,pantoja,orosco,moniz,lawless,kunkel,hibbard,galarza,enos,bussey,schott,salcido,perreault,mcdougal,mccool,haight,garris,easton,conyers,atherton,wimberly,utley,spellman,smithson,slagle,ritchey,rand,petit,osullivan,oaks,nutt,mcvay,mccreary,mayhew,knoll,jewett,harwood,cardoza,ashe,arriaga,zeller,wirth,whitmire,stauffer,rountree,redden,mccaffrey,martz,larose,langdon,humes,gaskin,faber,devito,cass,almond,wingfield,wingate,villareal,tyner,smothers,severson,reno,pennell,maupin,leighton,janssen,hassell,hallman,halcomb,folse,fitzsimmons,fahey,cranford,bolen,battles,battaglia,wooldridge,trask,rosser,regalado,mcewen,keefe,fuqua,echevarria,caro,boynton,andrus,viera,vanmeter,taber,spradlin,seibert,provost,prentice,oliphant,laporte,hwang,hatchett,hass,greiner,freedman,covert,chilton,byars,wiese,venegas,swank,shrader,roberge,mullis,mortensen,mccune,marlowe,kirchner,keck,isaacson,hostetler,halverson,gunther,griswold,fenner,durden,blackwood,ahrens,sawyers,savoy,nabors,mcswain,mackay,lavender,lash,labbe,jessup,fullerton,cruse,crittenden,correia,centeno,caudle,canady,callender,alarcon,ahern,winfrey,tribble,salley,roden,musgrove,minnick,fortenberry,carrion,bunting,batiste,whited,underhill,stillwell,rauch,pippin,perrin,messenger,mancini,lister,kinard,hartmann,fleck,wilt,treadway,thornhill,spalding,rafferty,pitre,patino,ordonez,linkous,kelleher,homan,galbraith,feeney,curtin,coward,camarillo,buss,bunnell,bolt,beeler,autry,alcala,witte,wentz,stidham,shively,nunley,meacham,martins,lemke,lefebvre,hynes,horowitz,hoppe,holcombe,dunne,derr,cochrane,brittain,bedard,beauregard,torrence,strunk,soria,simonson,shumaker,scoggins,oconner,moriarty,kuntz,ives,hutcheson,horan,hales,garmon,fitts,bohn,atchison,wisniewski,vanwinkle,sturm,sallee,prosser,moen,lundberg,kunz,kohl,keane,jorgenson,jaynes,funderburk,freed,durr,creamer,cosgrove,batson,vanhoose,thomsen,teeter,smyth,redmon,orellana,maness,heflin,goulet,frick,forney,bunker,asbury,aguiar,talbott,southard,mowery,mears,lemmon,krieger,hickson,elston,duong,delgadillo,dayton,dasilva,conaway,catron,bruton,bradbury,bordelon,bivins,bittner,bergstrom,beals,abell,whelan,tejada,pulley,pino,norfleet,nealy,maes,loper,gatewood,frierson,freund,finnegan,cupp,covey,catalano,boehm,bader,yoon,walston,tenney,sipes,rawlins,medlock,mccaskill,mccallister,marcotte,maclean,hughey,henke,harwell,gladney,gilson,chism,caskey,brandenburg,baylor,villasenor,veal,thatcher,stegall,petrie,nowlin,navarrete,lombard,loftin,lemaster,kroll,kovach,kimbrell,kidwell,hershberger,fulcher,cantwell,bustos,boland,bobbitt,binkley,wester,weis,verdin,tong,tiller,sisco,sharkey,seymore,rosenbaum,rohr,quinonez,pinkston,malley,logue,lessard,lerner,lebron,krauss,klinger,halstead,haller,getz,burrow,alger,shores,pfeifer,perron,nelms,munn,mcmaster,mckenney,manns,knudson,hutchens,huskey,goebel,flagg,cushman,click,castellano,carder,bumgarner,wampler,spinks,robson,neel,mcreynolds,mathias,maas,loera,jenson,florez,coons,buckingham,brogan,berryman,wilmoth,wilhite,thrash,shephard,seidel,schulze,roldan,pettis,obryan,maki,mackie,hatley,frazer,fiore,chesser,bottoms,bisson,benefield,allman,wilke,trudeau,timm,shifflett,mundy,milliken,mayers,leake,kohn,huntington,horsley,hermann,guerin,fryer,frizzell,foret,flemming,fife,criswell,carbajal,bozeman,boisvert,angulo,wallen,tapp,silvers,ramsay,oshea,orta,moll,mckeever,mcgehee,linville,kiefer,ketchum,howerton,groce,gass,fusco,corbitt,betz,bartels,amaral,aiello,weddle,sperry,seiler,runyan,raley,overby,osteen,olds,mckeown,matney,lauer,lattimore,hindman,hartwell,fredrickson,fredericks,espino,clegg,carswell,cambell,burkholder,woodbury,welker,totten,thornburg,theriault,stitt,stamm,stackhouse,scholl,saxon,rife,razo,quinlan,pinkerton,olivo,nesmith,nall,mattos,lafferty,justus,giron,geer,fielder,drayton,dortch,conners,conger,boatwright,billiot,barden,armenta,tibbetts,steadman,slattery,rinaldi,raynor,pinckney,pettigrew,milne,matteson,halsey,gonsalves,fellows,durand,desimone,cowley,cowles,brill,barham,barela,barba,ashmore,withrow,valenti,tejeda,spriggs,sayre,salerno,peltier,peel,merriman,matheson,lowman,lindstrom,hyland,giroux,earls,dugas,dabney,collado,briseno,baxley,whyte,wenger,vanover,vanburen,thiel,schindler,schiller,rigby,pomeroy,passmore,marble,manzo,mahaffey,lindgren,laflamme,greathouse,fite,calabrese,bayne,yamamoto,wick,townes,thames,reinhart,peeler,naranjo,montez,mcdade,mast,markley,marchand,leeper,kellum,hudgens,hennessey,hadden,gainey,coppola,borrego,bolling,beane,ault,slaton,pape,null,mulkey,lightner,langer,hillard,ethridge,enright,derosa,baskin,weinberg,turman,somerville,pardo,noll,lashley,ingraham,hiller,hendon,glaze,cothran,cooksey,conte,carrico,abner,wooley,swope,summerlin,sturgis,sturdivant,stott,spurgeon,spillman,speight,roussel,popp,nutter,mckeon,mazza,magnuson,lanning,kozak,jankowski,heyward,forster,corwin,callaghan,bays,wortham,usher,theriot,sayers,sabo,poling,loya,lieberman,laroche,labelle,howes,harr,garay,fogarty,everson,durkin,dominquez,chaves,chambliss,witcher,vieira,vandiver,terrill,stoker,schreiner,moorman,liddell,lawhorn,krug,irons,hylton,hollenbeck,herrin,hembree,goolsby,goodin,gilmer,foltz,dinkins,daughtry,caban,brim,briley,bilodeau,wyant,vergara,tallent,swearingen,stroup,scribner,quillen,pitman,mccants,maxfield,martinson,holtz,flournoy,brookins,brody,baumgardner,straub,sills,roybal,roundtree,oswalt,mcgriff,mcdougall,mccleary,maggard,gragg,gooding,godinez,doolittle,donato,cowell,cassell,bracken,appel,zambrano,reuter,perea,nakamura,monaghan,mickens,mcclinton,mcclary,marler,kish,judkins,gilbreath,freese,flanigan,felts,erdmann,dodds,chew,brownell,boatright,barreto,slayton,sandberg,saldivar,pettway,odum,narvaez,moultrie,montemayor,merrell,lees,keyser,hoke,hardaway,hannan,gilbertson,fogg,dumont,deberry,coggins,buxton,bucher,broadnax,beeson,araujo,appleton,amundson,aguayo,ackley,yocum,worsham,shivers,sanches,sacco,robey,rhoden,pender,ochs,mccurry,madera,luong,knotts,jackman,heinrich,hargrave,gault,comeaux,chitwood,caraway,boettcher,bernhardt,barrientos,zink,wickham,whiteman,thorp,stillman,settles,schoonover,roque,riddell,pilcher,phifer,novotny,macleod,hardee,haase,grider,doucette,clausen,bevins,beamon,badillo,tolley,tindall,soule,snook,seale,pinkney,pellegrino,nowell,nemeth,mondragon,mclane,lundgren,ingalls,hudspeth,hixson,gearhart,furlong,downes,dibble,deyoung,cornejo,camara,brookshire,boyette,wolcott,surratt,sellars,segal,salyer,reeve,rausch,labonte,haro,gower,freeland,fawcett,eads,driggers,donley,collett,bromley,boatman,ballinger,baldridge,volz,trombley,stonge,shanahan,rivard,rhyne,pedroza,matias,jamieson,hedgepeth,hartnett,estevez,eskridge,denman,chiu,chinn,catlett,carmack,buie,bechtel,beardsley,bard,ballou,ulmer,skeen,robledo,rincon,reitz,piazza,munger,moten,mcmichael,loftus,ledet,kersey,groff,fowlkes,crumpton,clouse,bettis,villagomez,timmerman,strom,santoro,roddy,penrod,musselman,macpherson,leboeuf,harless,haddad,guido,golding,fulkerson,fannin,dulaney,dowdell,cottle,ceja,cate,bosley,benge,albritton,voigt,trowbridge,soileau,seely,rohde,pearsall,paulk,orth,nason,mota,mcmullin,marquardt,madigan,hoag,gillum,gabbard,fenwick,danforth,cushing,cress,creed,cazares,bettencourt,barringer,baber,stansberry,schramm,rutter,rivero,oquendo,necaise,mouton,montenegro,miley,mcgough,marra,macmillan,lamontagne,jasso,horst,hetrick,heilman,gaytan,gall,fortney,dingle,desjardins,dabbs,burbank,brigham,breland,beaman,arriola,yarborough,wallin,toscano,stowers,reiss,pichardo,orton,michels,mcnamee,mccrory,leatherman,kell,keister,horning,hargett,guay,ferro,deboer,dagostino,carper,blanks,beaudry,towle,tafoya,stricklin,strader,soper,sonnier,sigmon,schenk,saddler,pedigo,mendes,lunn,lohr,lahr,kingsbury,jarman,hume,holliman,hofmann,haworth,harrelson,hambrick,flick,edmunds,dacosta,crossman,colston,chaplin,carrell,budd,weiler,waits,valentino,trantham,tarr,solorio,roebuck,powe,plank,pettus,pagano,mink,luker,leathers,joslin,hartzell,gambrell,cepeda,carty,caputo,brewington,bedell,ballew,applewhite,warnock,walz,urena,tudor,reel,pigg,parton,mickelson,meagher,mclellan,mcculley,mandel,leech,lavallee,kraemer,kling,kipp,kehoe,hochstetler,harriman,gregoire,grabowski,gosselin,gammon,fancher,edens,desai,brannan,armendariz,woolsey,whitehouse,whetstone,ussery,towne,testa,tallman,studer,strait,steinmetz,sorrells,sauceda,rolfe,paddock,mitchem,mcginn,mccrea,lovato,hazen,gilpin,gaynor,fike,devoe,delrio,curiel,burkhardt,bode,backus,zinn,watanabe,wachter,vanpelt,turnage,shaner,schroder,sato,riordan,quimby,portis,natale,mckoy,mccown,kilmer,hotchkiss,hesse,halbert,gwinn,godsey,delisle,chrisman,canter,arbogast,angell,acree,yancy,woolley,wesson,weatherspoon,trainor,stockman,spiller,sipe,rooks,reavis,propst,porras,neilson,mullens,loucks,llewellyn,kumar,koester,klingensmith,kirsch,kester,honaker,hodson,hennessy,helmick,garrity,garibay,drain,casarez,callis,botello,aycock,avant,wingard,wayman,tully,theisen,szymanski,stansbury,segovia,rainwater,preece,pirtle,padron,mincey,mckelvey,mathes,larrabee,kornegay,klug,ingersoll,hecht,germain,eggers,dykstra,deering,decoteau,deason,dearing,cofield,carrigan,bonham,bahr,aucoin,appleby,almonte,yager,womble,wimmer,weimer,vanderpool,stancil,sprinkle,romine,remington,pfaff,peckham,olivera,meraz,maze,lathrop,koehn,hazelton,halvorson,hallock,haddock,ducharme,dehaven,caruthers,brehm,bosworth,bost,bias,beeman,basile,bane,aikens,wold,walther,tabb,suber,strawn,stocker,shirey,schlosser,riedel,rembert,reimer,pyles,peele,merriweather,letourneau,latta,kidder,hixon,hillis,hight,herbst,henriquez,haygood,hamill,gabel,fritts,eubank,dawes,correll,bushey,buchholz,brotherton,botts,barnwell,auger,atchley,westphal,veilleux,ulloa,stutzman,shriver,ryals,pilkington,moyers,marrs,mangrum,maddux,lockard,laing,kuhl,harney,hammock,hamlett,felker,doerr,depriest,carrasquillo,carothers,bogle,bischoff,bergen,albanese,wyckoff,vermillion,vansickle,thibault,tetreault,stickney,shoemake,ruggiero,rawson,racine,philpot,paschal,mcelhaney,mathison,legrand,lapierre,kwan,kremer,jiles,hilbert,geyer,faircloth,ehlers,egbert,desrosiers,dalrymple,cotten,cashman,cadena,boardman,alcaraz,wyrick,therrien,tankersley,strickler,puryear,plourde,pattison,pardue,mcginty,mcevoy,landreth,kuhns,koon,hewett,giddens,emerick,eades,deangelis,cosme,ceballos,birdsong,benham,bemis,armour,anguiano,welborn,tsosie,storms,shoup,sessoms,samaniego,rood,rojo,rhinehart,raby,northcutt,myer,munguia,morehouse,mcdevitt,mallett,lozada,lemoine,kuehn,hallett,grim,gillard,gaylor,garman,gallaher,feaster,faris,darrow,dardar,coney,carreon,braithwaite,boylan,boyett,bixler,bigham,benford,barragan,barnum,zuber,wyche,westcott,vining,stoltzfus,simonds,shupe,sabin,ruble,rittenhouse,richman,perrone,mulholland,millan,lomeli,kite,jemison,hulett,holler,hickerson,herold,hazelwood,griffen,gause,forde,eisenberg,dilworth,charron,chaisson,bristow,breunig,brace,boutwell,bentz,belk,bayless,batchelder,baran,baeza,zimmermann,weathersby,volk,toole,theis,tedesco,searle,schenck,satterwhite,ruelas,rankins,partida,nesbit,morel,menchaca,levasseur,kaylor,johnstone,hulse,hollar,hersey,harrigan,harbison,guyer,gish,giese,gerlach,geller,geisler,falcone,elwell,doucet,deese,darr,corder,chafin,byler,bussell,burdett,brasher,bowe,bellinger,bastian,barner,alleyne,wilborn,weil,wegner,tatro,spitzer,smithers,schoen,resendez,parisi,overman,obrian,mudd,mahler,maggio,lindner,lalonde,lacasse,laboy,killion,kahl,jessen,jamerson,houk,henshaw,gustin,graber,durst,duenas,davey,cundiff,conlon,colunga,coakley,chiles,capers,buell,bricker,bissonnette,bartz,bagby,zayas,volpe,treece,toombs,thom,terrazas,swinney,skiles,silveira,shouse,senn,ramage,moua,langham,kyles,holston,hoagland,herd,feller,denison,carraway,burford,bickel,ambriz,abercrombie,yamada,weidner,waddle,verduzco,thurmond,swindle,schrock,sanabria,rosenberger,probst,peabody,olinger,nazario,mccafferty,mcbroom,mcabee,mazur,matherne,mapes,leverett,killingsworth,heisler,griego,gosnell,frankel,franke,ferrante,fenn,ehrlich,christopherso,chasse,caton,brunelle,bloomfield,babbitt,azevedo,abramson,ables,abeyta,youmans,wozniak,wainwright,stowell,smitherman,samuelson,runge,rothman,rosenfeld,peake,owings,olmos,munro,moreira,leatherwood,larkins,krantz,kovacs,kizer,kindred,karnes,jaffe,hubbell,hosey,hauck,goodell,erdman,dvorak,doane,cureton,cofer,buehler,bierman,berndt,banta,abdullah,warwick,waltz,turcotte,torrey,stith,seger,sachs,quesada,pinder,peppers,pascual,paschall,parkhurst,ozuna,oster,nicholls,lheureux,lavalley,kimura,jablonski,haun,gourley,gilligan,croy,cotto,cargill,burwell,burgett,buckman,booher,adorno,wrenn,whittemore,urias,szabo,sayles,saiz,rutland,rael,pharr,pelkey,ogrady,nickell,musick,moats,mather,massa,kirschner,kieffer,kellar,hendershot,gott,godoy,gadson,furtado,fiedler,erskine,dutcher,dever,daggett,chevalier,brake,ballesteros,amerson,wingo,waldon,trott,silvey,showers,schlegel,ritz,pepin,pelayo,parsley,palermo,moorehead,mchale,lett,kocher,kilburn,iglesias,humble,hulbert,huckaby,hartford,hardiman,gurney,grigg,grasso,goings,fillmore,farber,depew,dandrea,cowen,covarrubias,burrus,bracy,ardoin,thompkins,standley,radcliffe,pohl,persaud,parenteau,pabon,newson,newhouse,napolitano,mulcahy,malave,keim,hooten,hernandes,heffernan,hearne,greenleaf,glick,fuhrman,fetter,faria,dishman,dickenson,crites,criss,clapper,chenault,castor,casto,bugg,bove,bonney,anderton,allgood,alderson,woodman,warrick,toomey,tooley,tarrant,summerville,stebbins,sokol,searles,schutz,schumann,scheer,remillard,raper,proulx,palmore,monroy,messier,melo,melanson,mashburn,manzano,lussier,jenks,huneycutt,hartwig,grimsley,fulk,fielding,fidler,engstrom,eldred,dantzler,crandell,calder,brumley,breton,brann,bramlett,boykins,bianco,bancroft,almaraz,alcantar,whitmer,whitener,welton,vineyard,rahn,paquin,mizell,mcmillin,mckean,marston,maciel,lundquist,liggins,lampkin,kranz,koski,kirkham,jiminez,hazzard,harrod,graziano,grammer,gendron,garrido,fordham,englert,dryden,demoss,deluna,crabb,comeau,brummett,blume,benally,wessel,vanbuskirk,thorson,stumpf,stockwell,reams,radtke,rackley,pelton,niemi,newland,nelsen,morrissette,miramontes,mcginley,mccluskey,marchant,luevano,lampe,lail,jeffcoat,infante,hinman,gaona,eady,desmarais,decosta,dansby,cisco,choe,breckenridge,bostwick,borg,bianchi,alberts,wilkie,whorton,vargo,tait,soucy,schuman,ousley,mumford,lippert,leath,lavergne,laliberte,kirksey,kenner,johnsen,izzo,hiles,gullett,greenwell,gaspar,galbreath,gaitan,ericson,delapaz,croom,cottingham,clift,bushnell,bice,beason,arrowood,waring,voorhees,truax,shreve,shockey,schatz,sandifer,rubino,rozier,roseberry,pieper,peden,nester,nave,murphey,malinowski,macgregor,lafrance,kunkle,kirkman,hipp,hasty,haddix,gervais,gerdes,gamache,fouts,fitzwater,dillingham,deming,deanda,cedeno,cannady,burson,bouldin,arceneaux,woodhouse,whitford,wescott,welty,weigel,torgerson,toms,surber,sunderland,sterner,setzer,riojas,pumphrey,puga,metts,mcgarry,mccandless,magill,lupo,loveland,llamas,leclerc,koons,kahler,huss,holbert,heintz,haupt,grimmett,gaskill,ellingson,dorr,dingess,deweese,desilva,crossley,cordeiro,converse,conde,caldera,cairns,burmeister,burkhalter,brawner,bott,youngs,vierra,valladares,shrum,shropshire,sevilla,rusk,rodarte,pedraza,nino,merino,mcminn,markle,mapp,lajoie,koerner,kittrell,kato,hyder,hollifield,heiser,hazlett,greenwald,fant,eldredge,dreher,delafuente,cravens,claypool,beecher,aronson,alanis,worthen,wojcik,winger,whitacre,valverde,valdivia,troupe,thrower,swindell,suttles,stroman,spires,slate,shealy,sarver,sartin,sadowski,rondeau,rolon,rascon,priddy,paulino,nolte,munroe,molloy,mciver,lykins,loggins,lenoir,klotz,kempf,hupp,hollowell,hollander,haynie,harkness,harker,gottlieb,frith,eddins,driskell,doggett,densmore,charette,cassady,byrum,burcham,buggs,benn,whitted,warrington,vandusen,vaillancourt,steger,siebert,scofield,quirk,purser,plumb,orcutt,nordstrom,mosely,michalski,mcphail,mcdavid,mccraw,marchese,mannino,lefevre,largent,lanza,kress,isham,hunsaker,hoch,hildebrandt,guarino,grijalva,graybill,fick,ewell,ewald,cusick,crumley,coston,cathcart,carruthers,bullington,bowes,blain,blackford,barboza,yingling,wert,weiland,varga,silverstein,sievers,shuster,shumway,runnels,rumsey,renfroe,provencher,polley,mohler,middlebrooks,kutz,koster,groth,glidden,fazio,deen,chipman,chenoweth,champlin,cedillo,carrero,carmody,buckles,brien,boutin,bosch,berkowitz,altamirano,wilfong,wiegand,waites,truesdale,toussaint,tobey,tedder,steelman,sirois,schnell,robichaud,richburg,plumley,pizarro,piercy,ortego,oberg,neace,mertz,mcnew,matta,lapp,lair,kibler,howlett,hollister,hofer,hatten,hagler,falgoust,engelhardt,eberle,dombrowski,dinsmore,daye,casares,braud,balch,autrey,wendel,tyndall,strobel,stoltz,spinelli,serrato,reber,rathbone,palomino,nickels,mayle,mathers,mach,loeffler,littrell,levinson,leong,lemire,lejeune,lazo,lasley,koller,kennard,hoelscher,hintz,hagerman,greaves,fore,eudy,engler,corrales,cordes,brunet,bidwell,bennet,tyrrell,tharpe,swinton,stribling,southworth,sisneros,savoie,samons,ruvalcaba,ries,ramer,omara,mosqueda,millar,mcpeak,macomber,luckey,litton,lehr,lavin,hubbs,hoard,hibbs,hagans,futrell,exum,evenson,culler,carbaugh,callen,brashear,bloomer,blakeney,bigler,addington,woodford,unruh,tolentino,sumrall,stgermain,smock,sherer,rayner,pooler,oquinn,nero,mcglothlin,linden,kowal,kerrigan,ibrahim,harvell,hanrahan,goodall,geist,fussell,fung,ferebee,eley,eggert,dorsett,dingman,destefano,colucci,clemmer,burnell,brumbaugh,boddie,berryhill,avelar,alcantara,winder,winchell,vandenberg,trotman,thurber,thibeault,stlouis,stilwell,sperling,shattuck,sarmiento,ruppert,rumph,renaud,randazzo,rademacher,quiles,pearman,palomo,mercurio,lowrey,lindeman,lawlor,larosa,lander,labrecque,hovis,holifield,henninger,hawkes,hartfield,hann,hague,genovese,garrick,fudge,frink,eddings,dinh,cribbs,calvillo,bunton,brodeur,bolding,blanding,agosto,zahn,wiener,trussell,tello,teixeira,speck,sharma,shanklin,sealy,scanlan,santamaria,roundy,robichaux,ringer,rigney,prevost,polson,nord,moxley,medford,mccaslin,mcardle,macarthur,lewin,lasher,ketcham,keiser,heine,hackworth,grose,grizzle,gillman,gartner,frazee,fleury,edson,edmonson,derry,cronk,conant,burress,burgin,broom,brockington,bolick,boger,birchfield,billington,baily,bahena,armbruster,anson,yoho,wilcher,tinney,timberlake,thielen,sutphin,stultz,sikora,serra,schulman,scheffler,santillan,rego,preciado,pinkham,mickle,lomas,lizotte,lent,kellerman,keil,johanson,hernadez,hartsfield,haber,gorski,farkas,eberhardt,duquette,delano,cropper,cozart,cockerham,chamblee,cartagena,cahoon,buzzell,brister,brewton,blackshear,benfield,aston,ashburn,arruda,wetmore,weise,vaccaro,tucci,sudduth,stromberg,stoops,showalter,shears,runion,rowden,rosenblum,riffle,renfrow,peres,obryant,leftwich,lark,landeros,kistler,killough,kerley,kastner,hoggard,hartung,guertin,govan,gatling,gailey,fullmer,fulford,flatt,esquibel,endicott,edmiston,edelstein,dufresne,dressler,dickman,chee,busse,bonnett,berard,yoshida,velarde,veach,vanhouten,vachon,tolson,tolman,tennyson,stites,soler,shutt,ruggles,rhone,pegues,neese,muro,moncrief,mefford,mcphee,mcmorris,mceachern,mcclurg,mansour,mader,leija,lecompte,lafountain,labrie,jaquez,heald,hash,hartle,gainer,frisby,farina,eidson,edgerton,dyke,durrett,duhon,cuomo,cobos,cervantez,bybee,brockway,borowski,binion,beery,arguello,amaro,acton,yuen,winton,wigfall,weekley,vidrine,vannoy,tardiff,shoop,shilling,schick,safford,prendergast,pilgrim,pellerin,osuna,nissen,nalley,moller,messner,messick,merrifield,mcguinness,matherly,marcano,mahone,lemos,lebrun,jara,hoffer,herren,hecker,haws,haug,gwin,gober,gilliard,fredette,favela,echeverria,downer,donofrio,desrochers,crozier,corson,bechtold,argueta,aparicio,zamudio,westover,westerman,utter,troyer,thies,tapley,slavin,shirk,sandler,roop,rimmer,raymer,radcliff,otten,moorer,millet,mckibben,mccutchen,mcavoy,mcadoo,mayorga,mastin,martineau,marek,madore,leflore,kroeger,kennon,jimerson,hostetter,hornback,hendley,hance,guardado,granado,gowen,goodale,flinn,fleetwood,fitz,durkee,duprey,dipietro,dilley,clyburn,brawley,beckley,arana,weatherby,vollmer,vestal,tunnell,trigg,tingle,takahashi,sweatt,storer,snapp,shiver,rooker,rathbun,poisson,perrine,perri,parmer,parke,pare,papa,palmieri,midkiff,mecham,mccomas,mcalpine,lovelady,lillard,lally,knopp,kile,kiger,haile,gupta,goldsberry,gilreath,fulks,friesen,franzen,flack,findlay,ferland,dreyer,dore,dennard,deckard,debose,crim,coulombe,chancey,cantor,branton,bissell,barns,woolard,witham,wasserman,spiegel,shoffner,scholz,ruch,rossman,petry,palacio,paez,neary,mortenson,millsap,miele,menke,mckim,mcanally,martines,lemley,larochelle,klaus,klatt,kaufmann,kapp,helmer,hedge,halloran,glisson,frechette,fontana,eagan,distefano,danley,creekmore,chartier,chaffee,carillo,burg,bolinger,berkley,benz,basso,bash,zelaya,woodring,witkowski,wilmot,wilkens,wieland,verdugo,urquhart,tsai,timms,swiger,swaim,sussman,pires,molnar,mcatee,lowder,loos,linker,landes,kingery,hufford,higa,hendren,hammack,hamann,gillam,gerhardt,edelman,delk,deans,curl,constantine,cleaver,claar,casiano,carruth,carlyle,brophy,bolanos,bibbs,bessette,beggs,baugher,bartel,averill,andresen,amin,adames,valente,turnbow,swink,sublett,stroh,stringfellow,ridgway,pugliese,poteat,ohare,neubauer,murchison,mingo,lemmons,kwon,kellam,kean,jarmon,hyden,hudak,hollinger,henkel,hemingway,hasson,hansel,halter,haire,ginsberg,gillispie,fogel,flory,etter,elledge,eckman,deas,currin,crafton,coomer,colter,claxton,bulter,braddock,bowyer,binns,bellows,baskerville,barros,ansley,woolf,wight,waldman,wadley,tull,trull,tesch,stouffer,stadler,slay,shubert,sedillo,santacruz,reinke,poynter,neri,neale,mowry,moralez,monger,mitchum,merryman,manion,macdougall,litchfield,levitt,lepage,lasalle,khoury,kavanagh,karns,ivie,huebner,hodgkins,halpin,garica,eversole,dutra,dunagan,duffey,dillman,dillion,deville,dearborn,damato,courson,coulson,burdine,bousquet,bonin,bish,atencio,westbrooks,wages,vaca,toner,tillis,swett,struble,stanfill,solorzano,slusher,sipple,silvas,shults,schexnayder,saez,rodas,rager,pulver,penton,paniagua,meneses,mcfarlin,mcauley,matz,maloy,magruder,lohman,landa,lacombe,jaimes,holzer,holst,heil,hackler,grundy,gilkey,farnham,durfee,dunton,dunston,duda,dews,craver,corriveau,conwell,colella,chambless,bremer,boutte,bourassa,blaisdell,backman,babineaux,audette,alleman,towner,taveras,tarango,sullins,suiter,stallard,solberg,schlueter,poulos,pimental,owsley,okelley,moffatt,metcalfe,meekins,medellin,mcglynn,mccowan,marriott,marable,lennox,lamoureux,koss,kerby,karp,isenberg,howze,hockenberry,highsmith,hallmark,gusman,greeley,giddings,gaudet,gallup,fleenor,eicher,edington,dimaggio,dement,demello,decastro,bushman,brundage,brooker,bourg,blackstock,bergmann,beaton,banister,argo,appling,wortman,watterson,villalpando,tillotson,tighe,sundberg,sternberg,stamey,shipe,seeger,scarberry,sattler,sain,rothstein,poteet,plowman,pettiford,penland,partain,pankey,oyler,ogletree,ogburn,moton,merkel,lucier,lakey,kratz,kinser,kershaw,josephson,imhoff,hendry,hammon,frisbie,frawley,fraga,forester,eskew,emmert,drennan,doyon,dandridge,cawley,carvajal,bracey,belisle,batey,ahner,wysocki,weiser,veliz,tincher,sansone,sankey,sandstrom,rohrer,risner,pridemore,pfeffer,persinger,peery,oubre,nowicki,musgrave,murdoch,mullinax,mccary,mathieu,livengood,kyser,klink,kimes,kellner,kavanaugh,kasten,imes,hoey,hinshaw,hake,gurule,grube,grillo,geter,gatto,garver,garretson,farwell,eiland,dunford,decarlo,corso,colman,collard,cleghorn,chasteen,cavender,carlile,calvo,byerly,brogdon,broadwater,breault,bono,bergin,behr,ballenger,amick,tamez,stiffler,steinke,simmon,shankle,schaller,salmons,sackett,saad,rideout,ratcliffe,ranson,plascencia,petterson,olszewski,olney,olguin,nilsson,nevels,morelli,montiel,monge,michaelson,mertens,mcchesney,mcalpin,mathewson,loudermilk,lineberry,liggett,kinlaw,kight,jost,hereford,hardeman,halpern,halliday,hafer,gaul,friel,freitag,forsberg,evangelista,doering,dicarlo,dendy,delp,deguzman,dameron,curtiss,cosper,cauthen,bradberry,bouton,bonnell,bixby,bieber,beveridge,bedwell,barhorst,bannon,baltazar,baier,ayotte,attaway,arenas,abrego,turgeon,tunstall,thaxton,tenorio,stotts,sthilaire,shedd,seabolt,scalf,salyers,ruhl,rowlett,robinett,pfister,perlman,pepe,parkman,nunnally,norvell,napper,modlin,mckellar,mcclean,mascarenas,leibowitz,ledezma,kuhlman,kobayashi,hunley,holmquist,hinkley,hazard,hartsell,gribble,gravely,fifield,eliason,doak,crossland,carleton,bridgeman,bojorquez,boggess,auten,woosley,whiteley,wexler,twomey,tullis,townley,standridge,santoyo,rueda,riendeau,revell,pless,ottinger,nigro,nickles,mulvey,menefee,mcshane,mcloughlin,mckinzie,markey,lockridge,lipsey,knisley,knepper,kitts,kiel,jinks,hathcock,godin,gallego,fikes,fecteau,estabrook,ellinger,dunlop,dudek,countryman,chauvin,chatham,bullins,brownfield,boughton,bloodworth,bibb,baucom,barbieri,aubin,armitage,alessi,absher,abbate,zito,woolery,wiggs,wacker,tynes,tolle,telles,tarter,swarey,strode,stockdale,stalnaker,spina,schiff,saari,risley,rameriz,rakes,pettaway,penner,paulus,palladino,omeara,montelongo,melnick,mehta,mcgary,mccourt,mccollough,marchetti,manzanares,lowther,leiva,lauderdale,lafontaine,kowalczyk,knighton,joubert,jaworski,huth,hurdle,housley,hackman,gulick,gordy,gilstrap,gehrke,gebhart,gaudette,foxworth,endres,dunkle,cimino,caddell,brauer,braley,bodine,blackmore,belden,backer,ayer,andress,wisner,vuong,valliere,twigg,tavarez,strahan,steib,staub,sowder,seiber,schutt,scharf,schade,rodriques,risinger,renshaw,rahman,presnell,piatt,nieman,nevins,mcilwain,mcgaha,mccully,mccomb,massengale,macedo,lesher,kearse,jauregui,husted,hudnall,holmberg,hertel,hardie,glidewell,frausto,fassett,dalessandro,dahlgren,corum,constantino,conlin,colquitt,colombo,claycomb,cardin,buller,boney,bocanegra,biggers,benedetto,araiza,andino,albin,zorn,werth,weisman,walley,vanegas,ulibarri,towe,tedford,teasley,suttle,steffens,stcyr,squire,singley,sifuentes,shuck,schram,sass,rieger,ridenhour,rickert,richerson,rayborn,rabe,raab,pendley,pastore,ordway,moynihan,mellott,mckissick,mcgann,mccready,mauney,marrufo,lenhart,lazar,lafave,keele,kautz,jardine,jahnke,jacobo,hord,hardcastle,hageman,giglio,gehring,fortson,duque,duplessis,dicken,derosier,deitz,dalessio,cram,castleman,candelario,callison,caceres,bozarth,biles,bejarano,bashaw,avina,armentrout,alverez,acord,waterhouse,vereen,vanlandingham,strawser,shotwell,severance,seltzer,schoonmaker,schock,schaub,schaffner,roeder,rodrigez,riffe,rasberry,rancourt,railey,quade,pursley,prouty,perdomo,oxley,osterman,nickens,murphree,mounts,merida,maus,mattern,masse,martinelli,mangan,lutes,ludwick,loney,laureano,lasater,knighten,kissinger,kimsey,kessinger,honea,hollingshead,hockett,heyer,heron,gurrola,gove,glasscock,gillett,galan,featherstone,eckhardt,duron,dunson,dasher,culbreth,cowden,cowans,claypoole,churchwell,chabot,caviness,cater,caston,callan,byington,burkey,boden,beckford,atwater,archambault,alvey,alsup,whisenant,weese,voyles,verret,tsang,tessier,sweitzer,sherwin,shaughnessy,revis,remy,prine,philpott,peavy,paynter,parmenter,ovalle,offutt,nightingale,newlin,nakano,myatt,muth,mohan,mcmillon,mccarley,mccaleb,maxson,marinelli,maley,liston,letendre,kain,huntsman,hirst,hagerty,gulledge,greenway,grajeda,gorton,goines,gittens,frederickson,fanelli,embree,eichelberger,dunkin,dixson,dillow,defelice,chumley,burleigh,borkowski,binette,biggerstaff,berglund,beller,audet,arbuckle,allain,alfano,youngman,wittman,weintraub,vanzant,vaden,twitty,stollings,standifer,sines,shope,scalise,saville,posada,pisano,otte,nolasco,mier,merkle,mendiola,melcher,mejias,mcmurry,mccalla,markowitz,manis,mallette,macfarlane,lough,looper,landin,kittle,kinsella,kinnard,hobart,helman,hellman,hartsock,halford,hage,gordan,glasser,gayton,gattis,gastelum,gaspard,frisch,fitzhugh,eckstein,eberly,dowden,despain,crumpler,crotty,cornelison,chouinard,chamness,catlin,cann,bumgardner,budde,branum,bradfield,braddy,borst,birdwell,bazan,banas,bade,arango,ahearn,addis,zumwalt,wurth,wilk,widener,wagstaff,urrutia,terwilliger,tart,steinman,staats,sloat,rives,riggle,revels,reichard,prickett,poff,pitzer,petro,pell,northrup,nicks,moline,mielke,maynor,mallon,magness,lingle,lindell,lieb,lesko,lebeau,lammers,lafond,kiernan,ketron,jurado,holmgren,hilburn,hayashi,hashimoto,harbaugh,guillot,gard,froehlich,feinberg,falco,dufour,drees,doney,diep,delao,daves,dail,crowson,coss,congdon,carner,camarena,butterworth,burlingame,bouffard,bloch,bilyeu,barta,bakke,baillargeon,avent,aquilar,zeringue,yarber,wolfson,vogler,voelker,truss,troxell,thrift,strouse,spielman,sistrunk,sevigny,schuller,schaaf,ruffner,routh,roseman,ricciardi,peraza,pegram,overturf,olander,odaniel,millner,melchor,maroney,machuca,macaluso,livesay,layfield,laskowski,kwiatkowski,kilby,hovey,heywood,hayman,havard,harville,haigh,hagood,grieco,glassman,gebhardt,fleischer,fann,elson,eccles,cunha,crumb,blakley,bardwell,abshire,woodham,wines,welter,wargo,varnado,tutt,traynor,swaney,stricker,stoffel,stambaugh,sickler,shackleford,selman,seaver,sansom,sanmiguel,royston,rourke,rockett,rioux,puleo,pitchford,nardi,mulvaney,middaugh,malek,leos,lathan,kujawa,kimbro,killebrew,houlihan,hinckley,herod,hepler,hamner,hammel,hallowell,gonsalez,gingerich,gambill,funkhouser,fricke,fewell,falkner,endsley,dulin,drennen,deaver,dambrosio,chadwell,castanon,burkes,brune,brisco,brinker,bowker,boldt,berner,beaumont,beaird,bazemore,barrick,albano,younts,wunderlich,weidman,vanness,toland,theobald,stickler,steiger,stanger,spies,spector,sollars,smedley,seibel,scoville,saito,rummel,rowles,rouleau,roos,rogan,roemer,ream,raya,purkey,priester,perreira,penick,paulin,parkins,overcash,oleson,neves,muldrow,minard,midgett,michalak,melgar,mcentire,mcauliffe,marte,lydon,lindholm,leyba,langevin,lagasse,lafayette,kesler,kelton,kaminsky,jaggers,humbert,huck,howarth,hinrichs,higley,gupton,guimond,gravois,giguere,fretwell,fontes,feeley,faucher,eichhorn,ecker,earp,dole,dinger,derryberry,demars,deel,copenhaver,collinsworth,colangelo,cloyd,claiborne,caulfield,carlsen,calzada,caffey,broadus,brenneman,bouie,bodnar,blaney,blanc,beltz,behling,barahona,yockey,winkle,windom,wimer,villatoro,trexler,teran,taliaferro,sydnor,swinson,snelling,smtih,simonton,simoneaux,simoneau,sherrer,seavey,scheel,rushton,rupe,ruano,rippy,reiner,reiff,rabinowitz,quach,penley,odle,nock,minnich,mckown,mccarver,mcandrew,longley,laux,lamothe,lafreniere,kropp,krick,kates,jepson,huie,howse,howie,henriques,haydon,haught,hatter,hartzog,harkey,grimaldo,goshorn,gormley,gluck,gilroy,gillenwater,giffin,fluker,feder,eyre,eshelman,eakins,detwiler,delrosario,davisson,catalan,canning,calton,brammer,botelho,blakney,bartell,averett,askins,aker,witmer,winkelman,widmer,whittier,weitzel,wardell,wagers,ullman,tupper,tingley,tilghman,talton,simard,seda,scheller,sala,rundell,rost,ribeiro,rabideau,primm,pinon,peart,ostrom,ober,nystrom,nussbaum,naughton,murr,moorhead,monti,monteiro,melson,meissner,mclin,mcgruder,marotta,makowski,majewski,madewell,lunt,lukens,leininger,lebel,lakin,kepler,jaques,hunnicutt,hungerford,hoopes,hertz,heins,halliburton,grosso,gravitt,glasper,gallman,gallaway,funke,fulbright,falgout,eakin,dostie,dorado,dewberry,derose,cutshall,crampton,costanzo,colletti,cloninger,claytor,chiang,campagna,burd,brokaw,broaddus,bretz,brainard,binford,bilbrey,alpert,aitken,ahlers,zajac,woolfolk,witten,windle,wayland,tramel,tittle,talavera,suter,straley,specht,sommerville,soloman,skeens,sigman,sibert,shavers,schuck,schmit,sartain,sabol,rosenblatt,rollo,rashid,rabb,polston,nyberg,northrop,navarra,muldoon,mikesell,mcdougald,mcburney,mariscal,lozier,lingerfelt,legere,latour,lagunas,lacour,kurth,killen,kiely,kayser,kahle,isley,huertas,hower,hinz,haugh,gumm,galicia,fortunato,flake,dunleavy,duggins,doby,digiovanni,devaney,deltoro,cribb,corpuz,coronel,coen,charbonneau,caine,burchette,blakey,blakemore,bergquist,beene,beaudette,bayles,ballance,bakker,bailes,asberry,arwood,zucker,willman,whitesell,wald,walcott,vancleave,trump,strasser,simas,shick,schleicher,schaal,saleh,rotz,resnick,rainer,partee,ollis,oller,oday,noles,munday,mong,millican,merwin,mazzola,mansell,magallanes,llanes,lewellen,lepore,kisner,keesee,jeanlouis,ingham,hornbeck,hawn,hartz,harber,haffner,gutshall,guth,grays,gowan,finlay,finkelstein,eyler,enloe,dungan,diez,dearman,cull,crosson,chronister,cassity,campion,callihan,butz,breazeale,blumenthal,berkey,batty,batton,arvizu,alderete,aldana,albaugh,abernethy,wolter,wille,tweed,tollefson,thomasson,teter,testerman,sproul,spates,southwick,soukup,skelly,senter,sealey,sawicki,sargeant,rossiter,rosemond,repp,pifer,ormsby,nickelson,naumann,morabito,monzon,millsaps,millen,mcelrath,marcoux,mantooth,madson,macneil,mackinnon,louque,leister,lampley,kushner,krouse,kirwan,jessee,janson,jahn,jacquez,islas,hutt,holladay,hillyer,hepburn,hensel,harrold,gingrich,geis,gales,fults,finnell,ferri,featherston,epley,ebersole,eames,dunigan,drye,dismuke,devaughn,delorenzo,damiano,confer,collum,clower,clow,claussen,clack,caylor,cawthon,casias,carreno,bluhm,bingaman,bewley,belew,beckner,auld,amey,wolfenbarger,wilkey,wicklund,waltman,villalba,valero,valdovinos,ullrich,tyus,twyman,trost,tardif,tanguay,stripling,steinbach,shumpert,sasaki,sappington,sandusky,reinhold,reinert,quijano,placencia,pinkard,phinney,perrotta,pernell,parrett,oxendine,owensby,orman,nuno,mori,mcroberts,mcneese,mckamey,mccullum,markel,mardis,maines,lueck,lubin,lefler,leffler,larios,labarbera,kershner,josey,jeanbaptiste,izaguirre,hermosillo,haviland,hartshorn,hafner,ginter,getty,franck,fiske,dufrene,doody,davie,dangerfield,dahlberg,cuthbertson,crone,coffelt,chidester,chesson,cauley,caudell,cantara,campo,caines,bullis,bucci,brochu,bogard,bickerstaff,benning,arzola,antonelli,adkinson,zellers,wulf,worsley,woolridge,whitton,westerfield,walczak,vassar,truett,trueblood,trawick,townsley,topping,tobar,telford,steverson,stagg,sitton,sill,sergent,schoenfeld,sarabia,rutkowski,rubenstein,rigdon,prentiss,pomerleau,plumlee,philbrick,patnode,oloughlin,obregon,nuss,morell,mikell,mele,mcinerney,mcguigan,mcbrayer,lollar,kuehl,kinzer,kamp,joplin,jacobi,howells,holstein,hedden,hassler,harty,halle,greig,gouge,goodrum,gerhart,geier,geddes,gast,forehand,ferree,fendley,feltner,esqueda,encarnacion,eichler,egger,edmundson,eatmon,doud,donohoe,donelson,dilorenzo,digiacomo,diggins,delozier,dejong,danford,crippen,coppage,cogswell,clardy,cioffi,cabe,brunette,bresnahan,blomquist,blackstone,biller,bevis,bevan,bethune,benbow,baty,basinger,balcom,andes,aman,aguero,adkisson,yandell,wilds,whisenhunt,weigand,weeden,voight,villar,trottier,tillett,suazo,setser,scurry,schuh,schreck,schauer,samora,roane,rinker,reimers,ratchford,popovich,parkin,natal,melville,mcbryde,magdaleno,loehr,lockman,lingo,leduc,larocca,lamere,laclair,krall,korte,koger,jalbert,hughs,higbee,henton,heaney,haith,gump,greeson,goodloe,gholston,gasper,gagliardi,fregoso,farthing,fabrizio,ensor,elswick,elgin,eklund,eaddy,drouin,dorton,dizon,derouen,deherrera,davy,dampier,cullum,culley,cowgill,cardoso,cardinale,brodsky,broadbent,brimmer,briceno,branscum,bolyard,boley,bennington,beadle,baur,ballentine,azure,aultman,arciniega,aguila,aceves,yepez,woodrum,wethington,weissman,veloz,trusty,troup,trammel,tarpley,stivers,steck,sprayberry,spraggins,spitler,spiers,sohn,seagraves,schiffman,rudnick,rizo,riccio,rennie,quackenbush,puma,plott,pearcy,parada,paiz,munford,moskowitz,mease,mcnary,mccusker,lozoya,longmire,loesch,lasky,kuhlmann,krieg,koziol,kowalewski,konrad,kindle,jowers,jolin,jaco,horgan,hine,hileman,hepner,heise,heady,hawkinson,hannigan,haberman,guilford,grimaldi,garton,gagliano,fruge,follett,fiscus,ferretti,ebner,easterday,eanes,dirks,dimarco,depalma,deforest,cruce,craighead,christner,candler,cadwell,burchell,buettner,brinton,brazier,brannen,brame,bova,bomar,blakeslee,belknap,bangs,balzer,athey,armes,alvis,alverson,alvardo,yeung,wheelock,westlund,wessels,volkman,threadgill,thelen,tague,symons,swinford,sturtevant,straka,stier,stagner,segarra,seawright,rutan,roux,ringler,riker,ramsdell,quattlebaum,purifoy,poulson,permenter,peloquin,pasley,pagel,osman,obannon,nygaard,newcomer,munos,motta,meadors,mcquiston,mcniel,mcmann,mccrae,mayne,matte,legault,lechner,kucera,krohn,kratzer,koopman,jeske,horrocks,hock,hibbler,hesson,hersh,harvin,halvorsen,griner,grindle,gladstone,garofalo,frampton,forbis,eddington,diorio,dingus,dewar,desalvo,curcio,creasy,cortese,cordoba,connally,cluff,cascio,capuano,canaday,calabro,bussard,brayton,borja,bigley,arnone,arguelles,acuff,zamarripa,wooton,widner,wideman,threatt,thiele,templin,teeters,synder,swint,swick,sturges,stogner,stedman,spratt,siegfried,shetler,scull,savino,sather,rothwell,rook,rone,rhee,quevedo,privett,pouliot,poche,pickel,petrillo,pellegrini,peaslee,partlow,otey,nunnery,morelock,morello,meunier,messinger,mckie,mccubbin,mccarron,lerch,lavine,laverty,lariviere,lamkin,kugler,krol,kissel,keeter,hubble,hickox,hetzel,hayner,hagy,hadlock,groh,gottschalk,goodsell,gassaway,garrard,galligan,firth,fenderson,feinstein,etienne,engleman,emrick,ellender,drews,doiron,degraw,deegan,dart,crissman,corr,cookson,coil,cleaves,charest,chapple,chaparro,castano,carpio,byer,bufford,bridgewater,bridgers,brandes,borrero,bonanno,aube,ancheta,abarca,abad,wooster,wimbush,willhite,willams,wigley,weisberg,wardlaw,vigue,vanhook,unknow,torre,tasker,tarbox,strachan,slover,shamblin,semple,schuyler,schrimsher,sayer,salzman,rubalcava,riles,reneau,reichel,rayfield,rabon,pyatt,prindle,poss,polito,plemmons,pesce,perrault,pereyra,ostrowski,nilsen,niemeyer,munsey,mundell,moncada,miceli,meader,mcmasters,mckeehan,matsumoto,marron,marden,lizarraga,lingenfelter,lewallen,langan,lamanna,kovac,kinsler,kephart,keown,kass,kammerer,jeffreys,hysell,hosmer,hardnett,hanner,guyette,greening,glazer,ginder,fromm,fluellen,finkle,fessler,essary,eisele,duren,dittmer,crochet,cosentino,cogan,coelho,cavin,carrizales,campuzano,brough,bopp,bookman,bobb,blouin,beesley,battista,bascom,bakken,badgett,arneson,anselmo,albino,ahumada,woodyard,wolters,wireman,willison,warman,waldrup,vowell,vantassel,twombly,toomer,tennison,teets,tedeschi,swanner,stutz,stelly,sheehy,schermerhorn,scala,sandidge,salters,salo,saechao,roseboro,rolle,ressler,renz,renn,redford,raposa,rainbolt,pelfrey,orndorff,oney,nolin,nimmons,nardone,myhre,morman,menjivar,mcglone,mccammon,maxon,marciano,manus,lowrance,lorenzen,lonergan,lollis,littles,lindahl,lamas,lach,kuster,krawczyk,knuth,knecht,kirkendall,keitt,keever,kantor,jarboe,hoye,houchens,holter,holsinger,hickok,helwig,helgeson,hassett,harner,hamman,hames,hadfield,goree,goldfarb,gaughan,gaudreau,gantz,gallion,frady,foti,flesher,ferrin,faught,engram,donegan,desouza,degroot,cutright,crowl,criner,coan,clinkscales,chewning,chavira,catchings,carlock,bulger,buenrostro,bramblett,brack,boulware,bookout,bitner,birt,baranowski,baisden,allmon,acklin,yoakum,wilbourn,whisler,weinberger,washer,vasques,vanzandt,vanatta,troxler,tomes,tindle,tims,throckmorton,thach,stpeter,stlaurent,stenson,spry,spitz,songer,snavely,shroyer,shortridge,shenk,sevier,seabrook,scrivner,saltzman,rosenberry,rockwood,robeson,roan,reiser,ramires,raber,posner,popham,piotrowski,pinard,peterkin,pelham,peiffer,peay,nadler,musso,millett,mestas,mcgowen,marques,marasco,manriquez,manos,mair,lipps,leiker,krumm,knorr,kinslow,kessel,kendricks,kelm,irick,ickes,hurlburt,horta,hoekstra,heuer,helmuth,heatherly,hampson,hagar,haga,greenlaw,grau,godbey,gingras,gillies,gibb,gayden,gauvin,garrow,fontanez,florio,finke,fasano,ezzell,ewers,eveland,eckenrode,duclos,drumm,dimmick,delancey,defazio,dashiell,cusack,crowther,crigger,cray,coolidge,coldiron,cleland,chalfant,cassel,camire,cabrales,broomfield,brittingham,brisson,brickey,braziel,brazell,bragdon,boulanger,boman,bohannan,beem,barre,azar,ashbaugh,armistead,almazan,adamski,zendejas,winburn,willaims,wilhoit,westberry,wentzel,wendling,visser,vanscoy,vankirk,vallee,tweedy,thornberry,sweeny,spradling,spano,smelser,shim,sechrist,schall,scaife,rugg,rothrock,roesler,riehl,ridings,render,ransdell,radke,pinero,petree,pendergast,peluso,pecoraro,pascoe,panek,oshiro,navarrette,murguia,moores,moberg,michaelis,mcwhirter,mcsweeney,mcquade,mccay,mauk,mariani,marceau,mandeville,maeda,lunde,ludlow,loeb,lindo,linderman,leveille,leith,larock,lambrecht,kulp,kinsley,kimberlin,kesterson,hoyos,helfrich,hanke,grisby,goyette,gouveia,glazier,gile,gerena,gelinas,gasaway,funches,fujimoto,flynt,fenske,fellers,fehr,eslinger,escalera,enciso,duley,dittman,dineen,diller,devault,collings,clymer,clowers,chavers,charland,castorena,castello,camargo,bunce,bullen,boyes,borchers,borchardt,birnbaum,birdsall,billman,benites,bankhead,ange,ammerman,adkison,winegar,wickman,warr,warnke,villeneuve,veasey,vassallo,vannatta,vadnais,twilley,towery,tomblin,tippett,theiss,talkington,talamantes,swart,swanger,streit,stines,stabler,spurling,sobel,sine,simmers,shippy,shiflett,shearin,sauter,sanderlin,rusch,runkle,ruckman,rorie,roesch,richert,rehm,randel,ragin,quesenberry,puentes,plyler,plotkin,paugh,oshaughnessy,ohalloran,norsworthy,niemann,nader,moorefield,mooneyham,modica,miyamoto,mickel,mebane,mckinnie,mazurek,mancilla,lukas,lovins,loughlin,lotz,lindsley,liddle,levan,lederman,leclaire,lasseter,lapoint,lamoreaux,lafollette,kubiak,kirtley,keffer,kaczmarek,housman,hiers,hibbert,herrod,hegarty,hathorn,greenhaw,grafton,govea,futch,furst,franko,forcier,foran,flickinger,fairfield,eure,emrich,embrey,edgington,ecklund,eckard,durante,deyo,delvecchio,dade,currey,creswell,cottrill,casavant,cartier,cargile,capel,cammack,calfee,burse,burruss,brust,brousseau,bridwell,braaten,borkholder,bloomquist,bjork,bartelt,amburgey,yeary,whitefield,vinyard,vanvalkenburg,twitchell,timmins,tapper,stringham,starcher,spotts,slaugh,simonsen,sheffer,sequeira,rosati,rhymes,quint,pollak,peirce,patillo,parkerson,paiva,nilson,nevin,narcisse,mitton,merriam,merced,meiners,mckain,mcelveen,mcbeth,marsden,marez,manke,mahurin,mabrey,luper,krull,hunsicker,hornbuckle,holtzclaw,hinnant,heston,hering,hemenway,hegwood,hearns,halterman,guiterrez,grote,granillo,grainger,glasco,gilder,garren,garlock,garey,fryar,fredricks,fraizer,foshee,ferrel,felty,everitt,evens,esser,elkin,eberhart,durso,duguay,driskill,doster,dewall,deveau,demps,demaio,delreal,deleo,darrah,cumberbatch,culberson,cranmer,cordle,colgan,chesley,cavallo,castellon,castelli,carreras,carnell,carlucci,bontrager,blumberg,blasingame,becton,artrip,andujar,alkire,alder,zukowski,zuckerman,wroblewski,wrigley,woodside,wigginton,westman,westgate,werts,washam,wardlow,walser,waiters,tadlock,stringfield,stimpson,stickley,standish,spurlin,spindler,speller,spaeth,sotomayor,sluder,shryock,shepardson,shatley,scannell,santistevan,rosner,resto,reinhard,rathburn,prisco,poulsen,pinney,phares,pennock,pastrana,oviedo,ostler,nauman,mulford,moise,moberly,mirabal,metoyer,metheny,mentzer,meldrum,mcinturff,mcelyea,mcdougle,massaro,lumpkins,loveday,lofgren,lirette,lesperance,lefkowitz,ledger,lauzon,lachapelle,klassen,keough,kempton,kaelin,jeffords,hsieh,hoyer,horwitz,hoeft,hennig,haskin,gourdine,golightly,girouard,fulgham,fritsch,freer,frasher,foulk,firestone,fiorentino,fedor,ensley,englehart,eells,dunphy,donahoe,dileo,dibenedetto,dabrowski,crick,coonrod,conder,coddington,chunn,chaput,cerna,carreiro,calahan,braggs,bourdon,bollman,bittle,bauder,barreras,aubuchon,anzalone,adamo,zerbe,willcox,westberg,weikel,waymire,vroman,vinci,vallejos,truesdell,troutt,trotta,tollison,toles,tichenor,symonds,surles,strayer,stgeorge,sroka,sorrentino,solares,snelson,silvestri,sikorski,shawver,schumaker,schorr,schooley,scates,satterlee,satchell,rymer,roselli,robitaille,riegel,regis,reames,provenzano,priestley,plaisance,pettey,palomares,nowakowski,monette,minyard,mclamb,mchone,mccarroll,masson,magoon,maddy,lundin,licata,leonhardt,landwehr,kircher,kinch,karpinski,johannsen,hussain,houghtaling,hoskinson,hollaway,holeman,hobgood,hiebert,goggin,geissler,gadbois,gabaldon,fleshman,flannigan,fairman,eilers,dycus,dunmire,duffield,dowler,deloatch,dehaan,deemer,clayborn,christofferso,chilson,chesney,chatfield,carron,canale,brigman,branstetter,bosse,borton,bonar,biron,barroso,arispe,zacharias,zabel,yaeger,woolford,whetzel,weakley,veatch,vandeusen,tufts,troxel,troche,traver,townsel,talarico,swilley,sterrett,stenger,speakman,sowards,sours,souders,souder,soles,sobers,snoddy,smither,shute,shoaf,shahan,schuetz,scaggs,santini,rosson,rolen,robidoux,rentas,recio,pixley,pawlowski,pawlak,paull,overbey,orear,oliveri,oldenburg,nutting,naugle,mossman,misner,milazzo,michelson,mcentee,mccullar,mccree,mcaleer,mazzone,mandell,manahan,malott,maisonet,mailloux,lumley,lowrie,louviere,lipinski,lindemann,leppert,leasure,labarge,kubik,knisely,knepp,kenworthy,kennelly,kelch,kanter,houchin,hosley,hosler,hollon,holleman,heitman,haggins,gwaltney,goulding,gorden,geraci,gathers,frison,feagin,falconer,espada,erving,erikson,eisenhauer,ebeling,durgin,dowdle,dinwiddie,delcastillo,dedrick,crimmins,covell,cournoyer,coria,cohan,cataldo,carpentier,canas,campa,brode,brashears,blaser,bicknell,bednar,barwick,ascencio,althoff,almodovar,alamo,zirkle,zabala,wolverton,winebrenner,wetherell,westlake,wegener,weddington,tuten,trosclair,tressler,theroux,teske,swinehart,swensen,sundquist,southall,socha,sizer,silverberg,shortt,shimizu,sherrard,shaeffer,scheid,scheetz,saravia,sanner,rubinstein,rozell,romer,rheaume,reisinger,randles,pullum,petrella,payan,nordin,norcross,nicoletti,nicholes,newbold,nakagawa,monteith,milstead,milliner,mellen,mccardle,liptak,leitch,latimore,larrison,landau,laborde,koval,izquierdo,hymel,hoskin,holte,hoefer,hayworth,hausman,harrill,harrel,hardt,gully,groover,grinnell,greenspan,graver,grandberry,gorrell,goldenberg,goguen,gilleland,fuson,feldmann,everly,dyess,dunnigan,downie,dolby,deatherage,cosey,cheever,celaya,caver,cashion,caplinger,cansler,byrge,bruder,breuer,breslin,brazelton,botkin,bonneau,bondurant,bohanan,bogue,bodner,boatner,blatt,bickley,belliveau,beiler,beier,beckstead,bachmann,atkin,altizer,alloway,allaire,albro,abron,zellmer,yetter,yelverton,wiens,whidden,viramontes,vanwormer,tarantino,tanksley,sumlin,strauch,strang,stice,spahn,sosebee,sigala,shrout,seamon,schrum,schneck,schantz,ruddy,romig,roehl,renninger,reding,polak,pohlman,pasillas,oldfield,oldaker,ohanlon,ogilvie,norberg,nolette,neufeld,nellis,mummert,mulvihill,mullaney,monteleone,mendonca,meisner,mcmullan,mccluney,mattis,massengill,manfredi,luedtke,lounsbury,liberatore,lamphere,laforge,jourdan,iorio,iniguez,ikeda,hubler,hodgdon,hocking,heacock,haslam,haralson,hanshaw,hannum,hallam,haden,garnes,garces,gammage,gambino,finkel,faucett,ehrhardt,eggen,dusek,durrant,dubay,dones,depasquale,delucia,degraff,decamp,davalos,cullins,conard,clouser,clontz,cifuentes,chappel,chaffins,celis,carwile,byram,bruggeman,bressler,brathwaite,brasfield,bradburn,boose,bodie,blosser,bertsch,bernardi,bernabe,bengtson,barrette,astorga,alday,albee,abrahamson,yarnell,wiltse,wiebe,waguespack,vasser,upham,turek,traxler,torain,tomaszewski,tinnin,tiner,tindell,styron,stahlman,staab,skiba,sheperd,seidl,secor,schutte,sanfilippo,ruder,rondon,rearick,procter,prochaska,pettengill,pauly,neilsen,nally,mullenax,morano,meads,mcnaughton,mcmurtry,mcmath,mckinsey,matthes,massenburg,marlar,margolis,malin,magallon,mackin,lovette,loughran,loring,longstreet,loiselle,lenihan,kunze,koepke,kerwin,kalinowski,kagan,innis,innes,holtzman,heinemann,harshman,haider,haack,grondin,grissett,greenawalt,goudy,goodlett,goldston,gokey,gardea,galaviz,gafford,gabrielson,furlow,fritch,fordyce,folger,elizalde,ehlert,eckhoff,eccleston,ealey,dubin,diemer,deschamps,delapena,decicco,debolt,cullinan,crittendon,crase,cossey,coppock,coots,colyer,cluck,chamberland,burkhead,bumpus,buchan,borman,birkholz,berardi,benda,behnke,barter,amezquita,wotring,wirtz,wingert,wiesner,whitesides,weyant,wainscott,venezia,varnell,tussey,thurlow,tabares,stiver,stell,starke,stanhope,stanek,sisler,sinnott,siciliano,shehan,selph,seager,scurlock,scranton,santucci,santangelo,saltsman,rogge,rettig,renwick,reidy,reider,redfield,premo,parente,paolucci,palmquist,ohler,netherton,mutchler,morita,mistretta,minnis,middendorf,menzel,mendosa,mendelson,meaux,mcspadden,mcquaid,mcnatt,manigault,maney,mager,lukes,lopresti,liriano,letson,lechuga,lazenby,lauria,larimore,krupp,krupa,kopec,kinchen,kifer,kerney,kerner,kennison,kegley,karcher,justis,johson,jellison,janke,huskins,holzman,hinojos,hefley,hatmaker,harte,halloway,hallenbeck,goodwyn,glaspie,geise,fullwood,fryman,frakes,fraire,farrer,enlow,engen,ellzey,eckles,earles,dunkley,drinkard,dreiling,draeger,dinardo,dills,desroches,desantiago,curlee,crumbley,critchlow,coury,courtright,coffield,cleek,charpentier,cardone,caples,cantin,buntin,bugbee,brinkerhoff,brackin,bourland,blassingame,beacham,banning,auguste,andreasen,amann,almon,alejo,adelman,abston,yerger,wymer,woodberry,windley,whiteaker,westfield,weibel,wanner,waldrep,villani,vanarsdale,utterback,updike,triggs,topete,tolar,tigner,thoms,tauber,tarvin,tally,swiney,sweatman,studebaker,stennett,starrett,stannard,stalvey,sonnenberg,smithey,sieber,sickles,shinault,segars,sanger,salmeron,rothe,rizzi,restrepo,ralls,ragusa,quiroga,papenfuss,oropeza,okane,mudge,mozingo,molinaro,mcvicker,mcgarvey,mcfalls,mccraney,matus,magers,llanos,livermore,linehan,leitner,laymon,lawing,lacourse,kwong,kollar,kneeland,kennett,kellett,kangas,janzen,hutter,huling,hofmeister,hewes,harjo,habib,guice,grullon,greggs,grayer,granier,grable,gowdy,giannini,getchell,gartman,garnica,ganey,gallimore,fetters,fergerson,farlow,fagundes,exley,esteves,enders,edenfield,easterwood,drakeford,dipasquale,desousa,deshields,deeter,dedmon,debord,daughtery,cutts,courtemanche,coursey,copple,coomes,collis,cogburn,clopton,choquette,chaidez,castrejon,calhoon,burbach,bulloch,buchman,bruhn,bohon,blough,baynes,barstow,zeman,zackery,yardley,yamashita,wulff,wilken,wiliams,wickersham,wible,whipkey,wedgeworth,walmsley,walkup,vreeland,verrill,umana,traub,swingle,summey,stroupe,stockstill,steffey,stefanski,statler,stapp,speights,solari,soderberg,shunk,shorey,shewmaker,sheilds,schiffer,schank,schaff,sagers,rochon,riser,rickett,reale,raglin,polen,plata,pitcock,percival,palen,orona,oberle,nocera,navas,nault,mullings,montejano,monreal,minick,middlebrook,meece,mcmillion,mccullen,mauck,marshburn,maillet,mahaney,magner,maclin,lucey,litteral,lippincott,leite,leaks,lamarre,jurgens,jerkins,jager,hurwitz,hughley,hotaling,horstman,hohman,hocker,hively,hipps,hessler,hermanson,hepworth,helland,hedlund,harkless,haigler,gutierez,grindstaff,glantz,giardina,gerken,gadsden,finnerty,farnum,encinas,drakes,dennie,cutlip,curtsinger,couto,cortinas,corby,chiasson,carle,carballo,brindle,borum,bober,blagg,berthiaume,beahm,batres,basnight,backes,axtell,atterberry,alvares,alegria,woodell,wojciechowski,winfree,winbush,wiest,wesner,wamsley,wakeman,verner,truex,trafton,toman,thorsen,theus,tellier,tallant,szeto,strope,stills,simkins,shuey,shaul,servin,serio,serafin,salguero,ryerson,rudder,ruark,rother,rohrbaugh,rohrbach,rohan,rogerson,risher,reeser,pryce,prokop,prins,priebe,prejean,pinheiro,petrone,petri,penson,pearlman,parikh,natoli,murakami,mullikin,mullane,motes,morningstar,mcveigh,mcgrady,mcgaughey,mccurley,marchan,manske,lusby,linde,likens,licon,leroux,lemaire,legette,laskey,laprade,laplant,kolar,kittredge,kinley,kerber,kanagy,jetton,janik,ippolito,inouye,hunsinger,howley,howery,horrell,holthaus,hiner,hilson,hilderbrand,hartzler,harnish,harada,hansford,halligan,hagedorn,gwynn,gudino,greenstein,greear,gracey,goudeau,goodner,ginsburg,gerth,gerner,fujii,frier,frenette,folmar,fleisher,fleischmann,fetzer,eisenman,earhart,dupuy,dunkelberger,drexler,dillinger,dilbeck,dewald,demby,deford,craine,chesnut,casady,carstens,carrick,carino,carignan,canchola,bushong,burman,buono,brownlow,broach,britten,brickhouse,boyden,boulton,borland,bohrer,blubaugh,bever,berggren,benevides,arocho,arends,amezcua,almendarez,zalewski,witzel,winkfield,wilhoite,vangundy,vanfleet,vanetten,vandergriff,urbanski,troiano,thibodaux,straus,stoneking,stjean,stillings,stange,speicher,speegle,smeltzer,slawson,simmonds,shuttleworth,serpa,senger,seidman,schweiger,schloss,schimmel,schechter,sayler,sabatini,ronan,rodiguez,riggleman,richins,reamer,prunty,porath,plunk,piland,philbrook,pettitt,perna,peralez,pascale,padula,oboyle,nivens,nickols,mundt,munden,montijo,mcmanis,mcgrane,mccrimmon,manzi,mangold,malick,mahar,maddock,losey,litten,leedy,leavell,ladue,krahn,kluge,junker,iversen,imler,hurtt,huizar,hubbert,howington,hollomon,holdren,hoisington,heiden,hauge,hartigan,gutirrez,griffie,greenhill,gratton,granata,gottfried,gertz,gautreaux,furry,furey,funderburg,flippen,fitzgibbon,drucker,donoghue,dildy,devers,detweiler,despres,denby,degeorge,cueto,cranston,courville,clukey,cirillo,chivers,caudillo,butera,bulluck,buckmaster,braunstein,bracamonte,bourdeau,bonnette".split(","),
41333us_tv_and_film:"you,i,to,that,it,me,what,this,know,i'm,no,have,my,don't,just,not,do,be,your,we,it's,so,but,all,well,oh,about,right,you're,get,here,out,going,like,yeah,if,can,up,want,think,that's,now,go,him,how,got,did,why,see,come,good,really,look,will,okay,back,can't,mean,tell,i'll,hey,he's,could,didn't,yes,something,because,say,take,way,little,make,need,gonna,never,we're,too,she's,i've,sure,our,sorry,what's,let,thing,maybe,down,man,very,there's,should,anything,said,much,any,even,off,please,doing,thank,give,thought,help,talk,god,still,wait,find,nothing,again,things,let's,doesn't,call,told,great,better,ever,night,away,believe,feel,everything,you've,fine,last,keep,does,put,around,stop,they're,i'd,guy,isn't,always,listen,wanted,guys,huh,those,big,lot,happened,thanks,won't,trying,kind,wrong,talking,guess,care,bad,mom,remember,getting,we'll,together,dad,leave,understand,wouldn't,actually,hear,baby,nice,father,else,stay,done,wasn't,course,might,mind,every,enough,try,hell,came,someone,you'll,whole,yourself,idea,ask,must,coming,looking,woman,room,knew,tonight,real,son,hope,went,hmm,happy,pretty,saw,girl,sir,friend,already,saying,next,job,problem,minute,thinking,haven't,heard,honey,matter,myself,couldn't,exactly,having,probably,happen,we've,hurt,boy,dead,gotta,alone,excuse,start,kill,hard,you'd,today,car,ready,without,wants,hold,wanna,yet,seen,deal,once,gone,morning,supposed,friends,head,stuff,worry,live,truth,face,forget,true,cause,soon,knows,telling,wife,who's,chance,run,move,anyone,person,bye,somebody,heart,miss,making,meet,anyway,phone,reason,damn,lost,looks,bring,case,turn,wish,tomorrow,kids,trust,check,change,anymore,least,aren't,working,makes,taking,means,brother,hate,ago,says,beautiful,gave,fact,crazy,sit,afraid,important,rest,fun,kid,word,watch,glad,everyone,sister,minutes,everybody,bit,couple,whoa,either,mrs,feeling,daughter,wow,gets,asked,break,promise,door,close,hand,easy,question,tried,far,walk,needs,mine,killed,hospital,anybody,alright,wedding,shut,able,die,perfect,stand,comes,hit,waiting,dinner,funny,husband,almost,pay,answer,cool,eyes,news,child,shouldn't,yours,moment,sleep,read,where's,sounds,sonny,pick,sometimes,bed,date,plan,hours,lose,hands,serious,shit,behind,inside,ahead,week,wonderful,fight,past,cut,quite,he'll,sick,it'll,eat,nobody,goes,save,seems,finally,lives,worried,upset,carly,met,brought,seem,sort,safe,weren't,leaving,front,shot,loved,asking,running,clear,figure,hot,felt,parents,drink,absolutely,how's,daddy,sweet,alive,sense,meant,happens,bet,blood,ain't,kidding,lie,meeting,dear,seeing,sound,fault,ten,buy,hour,speak,lady,jen,thinks,christmas,outside,hang,possible,worse,mistake,ooh,handle,spend,totally,giving,here's,marriage,realize,unless,sex,send,needed,scared,picture,talked,ass,hundred,changed,completely,explain,certainly,sign,boys,relationship,loves,hair,lying,choice,anywhere,future,weird,luck,she'll,turned,touch,kiss,crane,questions,obviously,wonder,pain,calling,somewhere,throw,straight,cold,fast,words,food,none,drive,feelings,they'll,marry,drop,cannot,dream,protect,twenty,surprise,sweetheart,poor,looked,mad,except,gun,y'know,dance,takes,appreciate,especially,situation,besides,pull,hasn't,worth,sheridan,amazing,expect,swear,piece,busy,happening,movie,we'd,catch,perhaps,step,fall,watching,kept,darling,dog,honor,moving,till,admit,problems,murder,he'd,evil,definitely,feels,honest,eye,broke,missed,longer,dollars,tired,evening,starting,entire,trip,niles,suppose,calm,imagine,fair,caught,blame,sitting,favor,apartment,terrible,clean,learn,frasier,relax,accident,wake,prove,smart,message,missing,forgot,interested,table,nbsp,mouth,pregnant,ring,careful,shall,dude,ride,figured,wear,shoot,stick,follow,angry,write,stopped,ran,standing,forgive,jail,wearing,ladies,kinda,lunch,cristian,greenlee,gotten,hoping,phoebe,thousand,ridge,paper,tough,tape,count,boyfriend,proud,agree,birthday,they've,share,offer,hurry,feet,wondering,decision,ones,finish,voice,herself,would've,mess,deserve,evidence,cute,dress,interesting,hotel,enjoy,quiet,concerned,staying,beat,sweetie,mention,clothes,fell,neither,mmm,fix,respect,prison,attention,holding,calls,surprised,bar,keeping,gift,hadn't,putting,dark,owe,ice,helping,normal,aunt,lawyer,apart,plans,jax,girlfriend,floor,whether,everything's,box,judge,upstairs,sake,mommy,possibly,worst,acting,accept,blow,strange,saved,conversation,plane,mama,yesterday,lied,quick,lately,stuck,difference,store,she'd,bought,doubt,listening,walking,cops,deep,dangerous,buffy,sleeping,chloe,rafe,join,card,crime,gentlemen,willing,window,walked,guilty,likes,fighting,difficult,soul,joke,favorite,uncle,promised,bother,seriously,cell,knowing,broken,advice,somehow,paid,losing,push,helped,killing,boss,liked,innocent,rules,learned,thirty,risk,letting,speaking,ridiculous,afternoon,apologize,nervous,charge,patient,boat,how'd,hide,detective,planning,huge,breakfast,horrible,awful,pleasure,driving,hanging,picked,sell,quit,apparently,dying,notice,congratulations,visit,could've,c'mon,letter,decide,forward,fool,showed,smell,seemed,spell,memory,pictures,slow,seconds,hungry,hearing,kitchen,ma'am,should've,realized,kick,grab,discuss,fifty,reading,idiot,suddenly,agent,destroy,bucks,shoes,peace,arms,demon,livvie,consider,papers,incredible,witch,drunk,attorney,tells,knock,ways,gives,nose,skye,turns,keeps,jealous,drug,sooner,cares,plenty,extra,outta,weekend,matters,gosh,opportunity,impossible,waste,pretend,jump,eating,proof,slept,arrest,breathe,perfectly,warm,pulled,twice,easier,goin,dating,suit,romantic,drugs,comfortable,finds,checked,divorce,begin,ourselves,closer,ruin,smile,laugh,treat,fear,what'd,otherwise,excited,mail,hiding,stole,pacey,noticed,fired,excellent,bringing,bottom,note,sudden,bathroom,honestly,sing,foot,remind,charges,witness,finding,tree,dare,hardly,that'll,steal,silly,contact,teach,shop,plus,colonel,fresh,trial,invited,roll,reach,dirty,choose,emergency,dropped,butt,credit,obvious,locked,loving,nuts,agreed,prue,goodbye,condition,guard,fuckin,grow,cake,mood,crap,crying,belong,partner,trick,pressure,dressed,taste,neck,nurse,raise,lots,carry,whoever,drinking,they'd,breaking,file,lock,wine,spot,paying,assume,asleep,turning,viki,bedroom,shower,nikolas,camera,fill,reasons,forty,bigger,nope,breath,doctors,pants,freak,movies,folks,cream,wild,truly,desk,convince,client,threw,hurts,spending,answers,shirt,chair,rough,doin,sees,ought,empty,wind,aware,dealing,pack,tight,hurting,guest,arrested,salem,confused,surgery,expecting,deacon,unfortunately,goddamn,bottle,beyond,whenever,pool,opinion,starts,jerk,secrets,falling,necessary,barely,dancing,tests,copy,cousin,ahem,twelve,tess,skin,fifteen,speech,orders,complicated,nowhere,escape,biggest,restaurant,grateful,usual,burn,address,someplace,screw,everywhere,regret,goodness,mistakes,details,responsibility,suspect,corner,hero,dumb,terrific,whoo,hole,memories,o'clock,teeth,ruined,bite,stenbeck,liar,showing,cards,desperate,search,pathetic,spoke,scare,marah,afford,settle,stayed,checking,hired,heads,concern,blew,alcazar,champagne,connection,tickets,happiness,saving,kissing,hated,personally,suggest,prepared,onto,downstairs,ticket,it'd,loose,holy,duty,convinced,throwing,kissed,legs,loud,saturday,babies,where'd,warning,miracle,carrying,blind,ugly,shopping,hates,sight,bride,coat,clearly,celebrate,brilliant,wanting,forrester,lips,custody,screwed,buying,toast,thoughts,reality,lexie,attitude,advantage,grandfather,sami,grandma,someday,roof,marrying,powerful,grown,grandmother,fake,must've,ideas,exciting,familiar,bomb,bout,harmony,schedule,capable,practically,correct,clue,forgotten,appointment,deserves,threat,bloody,lonely,shame,jacket,hook,scary,investigation,invite,shooting,lesson,criminal,victim,funeral,considering,burning,strength,harder,sisters,pushed,shock,pushing,heat,chocolate,miserable,corinthos,nightmare,brings,zander,crash,chances,sending,recognize,healthy,boring,feed,engaged,headed,treated,knife,drag,badly,hire,paint,pardon,behavior,closet,warn,gorgeous,milk,survive,ends,dump,rent,remembered,thanksgiving,rain,revenge,prefer,spare,pray,disappeared,aside,statement,sometime,meat,fantastic,breathing,laughing,stood,affair,ours,depends,protecting,jury,brave,fingers,murdered,explanation,picking,blah,stronger,handsome,unbelievable,anytime,shake,oakdale,wherever,pulling,facts,waited,lousy,circumstances,disappointed,weak,trusted,license,nothin,trash,understanding,slip,sounded,awake,friendship,stomach,weapon,threatened,mystery,vegas,understood,basically,switch,frankly,cheap,lifetime,deny,clock,garbage,why'd,tear,ears,indeed,changing,singing,tiny,decent,avoid,messed,filled,touched,disappear,exact,pills,kicked,harm,fortune,pretending,insurance,fancy,drove,cared,belongs,nights,lorelai,lift,timing,guarantee,chest,woke,burned,watched,heading,selfish,drinks,doll,committed,elevator,freeze,noise,wasting,ceremony,uncomfortable,staring,files,bike,stress,permission,thrown,possibility,borrow,fabulous,doors,screaming,bone,xander,what're,meal,apology,anger,honeymoon,bail,parking,fixed,wash,stolen,sensitive,stealing,photo,chose,lets,comfort,worrying,pocket,mateo,bleeding,shoulder,ignore,talent,tied,garage,dies,demons,dumped,witches,rude,crack,bothering,radar,soft,meantime,gimme,kinds,fate,concentrate,throat,prom,messages,intend,ashamed,somethin,manage,guilt,interrupt,guts,tongue,shoe,basement,sentence,purse,glasses,cabin,universe,repeat,mirror,wound,travers,tall,engagement,therapy,emotional,jeez,decisions,soup,thrilled,stake,chef,moves,extremely,moments,expensive,counting,shots,kidnapped,cleaning,shift,plate,impressed,smells,trapped,aidan,knocked,charming,attractive,argue,puts,whip,embarrassed,package,hitting,bust,stairs,alarm,pure,nail,nerve,incredibly,walks,dirt,stamp,terribly,friendly,damned,jobs,suffering,disgusting,stopping,deliver,riding,helps,disaster,bars,crossed,trap,talks,eggs,chick,threatening,spoken,introduce,confession,embarrassing,bags,impression,gate,reputation,presents,chat,suffer,argument,talkin,crowd,homework,coincidence,cancel,pride,solve,hopefully,pounds,pine,mate,illegal,generous,outfit,maid,bath,punch,freaked,begging,recall,enjoying,prepare,wheel,defend,signs,painful,yourselves,maris,that'd,suspicious,cooking,button,warned,sixty,pity,yelling,awhile,confidence,offering,pleased,panic,hers,gettin,refuse,grandpa,testify,choices,cruel,mental,gentleman,coma,cutting,proteus,guests,expert,benefit,faces,jumped,toilet,sneak,halloween,privacy,smoking,reminds,twins,swing,solid,options,commitment,crush,ambulance,wallet,gang,eleven,option,laundry,assure,stays,skip,fail,discussion,clinic,betrayed,sticking,bored,mansion,soda,sheriff,suite,handled,busted,load,happier,studying,romance,procedure,commit,assignment,suicide,minds,swim,yell,llanview,chasing,proper,believes,humor,hopes,lawyers,giant,latest,escaped,parent,tricks,insist,dropping,cheer,medication,flesh,routine,sandwich,handed,false,beating,warrant,awfully,odds,treating,thin,suggesting,fever,sweat,silent,clever,sweater,mall,sharing,assuming,judgment,goodnight,divorced,surely,steps,confess,math,listened,comin,answered,vulnerable,bless,dreaming,chip,zero,pissed,nate,kills,tears,knees,chill,brains,unusual,packed,dreamed,cure,lookin,grave,cheating,breaks,locker,gifts,awkward,thursday,joking,reasonable,dozen,curse,quartermaine,millions,dessert,rolling,detail,alien,delicious,closing,vampires,wore,tail,secure,salad,murderer,spit,offense,dust,conscience,bread,answering,lame,invitation,grief,smiling,pregnancy,prisoner,delivery,guards,virus,shrink,freezing,wreck,massimo,wire,technically,blown,anxious,cave,holidays,cleared,wishes,caring,candles,bound,charm,pulse,jumping,jokes,boom,occasion,silence,nonsense,frightened,slipped,dimera,blowing,relationships,kidnapping,spin,tool,roxy,packing,blaming,wrap,obsessed,fruit,torture,personality,there'll,fairy,necessarily,seventy,print,motel,underwear,grams,exhausted,believing,freaking,carefully,trace,touching,messing,recovery,intention,consequences,belt,sacrifice,courage,enjoyed,attracted,remove,testimony,intense,heal,defending,unfair,relieved,loyal,slowly,buzz,alcohol,surprises,psychiatrist,plain,attic,who'd,uniform,terrified,cleaned,zach,threaten,fella,enemies,satisfied,imagination,hooked,headache,forgetting,counselor,andie,acted,badge,naturally,frozen,sakes,appropriate,trunk,dunno,costume,sixteen,impressive,kicking,junk,grabbed,understands,describe,clients,owns,affect,witnesses,starving,instincts,happily,discussing,deserved,strangers,surveillance,admire,questioning,dragged,barn,deeply,wrapped,wasted,tense,hoped,fellas,roommate,mortal,fascinating,stops,arrangements,agenda,literally,propose,honesty,underneath,sauce,promises,lecture,eighty,torn,shocked,backup,differently,ninety,deck,biological,pheebs,ease,creep,waitress,telephone,ripped,raising,scratch,rings,prints,thee,arguing,ephram,asks,oops,diner,annoying,taggert,sergeant,blast,towel,clown,habit,creature,bermuda,snap,react,paranoid,handling,eaten,therapist,comment,sink,reporter,nurses,beats,priority,interrupting,warehouse,loyalty,inspector,pleasant,excuses,threats,guessing,tend,praying,motive,unconscious,mysterious,unhappy,tone,switched,rappaport,sookie,neighbor,loaded,swore,piss,balance,toss,misery,thief,squeeze,lobby,goa'uld,geez,exercise,forth,booked,sandburg,poker,eighteen,d'you,bury,everyday,digging,creepy,wondered,liver,hmmm,magical,fits,discussed,moral,helpful,searching,flew,depressed,aisle,cris,amen,vows,neighbors,darn,cents,arrange,annulment,useless,adventure,resist,fourteen,celebrating,inch,debt,violent,sand,teal'c,celebration,reminded,phones,paperwork,emotions,stubborn,pound,tension,stroke,steady,overnight,chips,beef,suits,boxes,cassadine,collect,tragedy,spoil,realm,wipe,surgeon,stretch,stepped,nephew,neat,limo,confident,perspective,climb,punishment,finest,springfield,hint,furniture,blanket,twist,proceed,fries,worries,niece,gloves,soap,signature,disappoint,crawl,convicted,flip,counsel,doubts,crimes,accusing,shaking,remembering,hallway,halfway,bothered,madam,gather,cameras,blackmail,symptoms,rope,ordinary,imagined,cigarette,supportive,explosion,trauma,ouch,furious,cheat,avoiding,whew,thick,oooh,boarding,approve,urgent,shhh,misunderstanding,drawer,phony,interfere,catching,bargain,tragic,respond,punish,penthouse,thou,rach,ohhh,insult,bugs,beside,begged,absolute,strictly,socks,senses,sneaking,reward,polite,checks,tale,physically,instructions,fooled,blows,tabby,bitter,adorable,y'all,tested,suggestion,jewelry,alike,jacks,distracted,shelter,lessons,constable,circus,audition,tune,shoulders,mask,helpless,feeding,explains,sucked,robbery,objection,behave,valuable,shadows,courtroom,confusing,talented,smarter,mistaken,customer,bizarre,scaring,motherfucker,alert,vecchio,reverend,foolish,compliment,bastards,worker,wheelchair,protective,gentle,reverse,picnic,knee,cage,wives,wednesday,voices,toes,stink,scares,pour,cheated,slide,ruining,filling,exit,cottage,upside,proves,parked,diary,complaining,confessed,pipe,merely,massage,chop,spill,prayer,betray,waiter,scam,rats,fraud,brush,tables,sympathy,pill,filthy,seventeen,employee,bracelet,pays,fairly,deeper,arrive,tracking,spite,shed,recommend,oughta,nanny,menu,diet,corn,roses,patch,dime,devastated,subtle,bullets,beans,pile,confirm,strings,parade,borrowed,toys,straighten,steak,premonition,planted,honored,exam,convenient,traveling,laying,insisted,dish,aitoro,kindly,grandson,donor,temper,teenager,proven,mothers,denial,backwards,tent,swell,noon,happiest,drives,thinkin,spirits,potion,holes,fence,whatsoever,rehearsal,overheard,lemme,hostage,bench,tryin,taxi,shove,moron,impress,needle,intelligent,instant,disagree,stinks,rianna,recover,groom,gesture,constantly,bartender,suspects,sealed,legally,hears,dresses,sheet,psychic,teenage,knocking,judging,accidentally,waking,rumor,manners,homeless,hollow,desperately,tapes,referring,item,genoa,gear,majesty,cried,tons,spells,instinct,quote,motorcycle,convincing,fashioned,aids,accomplished,grip,bump,upsetting,needing,invisible,forgiveness,feds,compare,bothers,tooth,inviting,earn,compromise,cocktail,tramp,jabot,intimate,dignity,dealt,souls,informed,gods,dressing,cigarettes,alistair,leak,fond,corky,seduce,liquor,fingerprints,enchantment,butters,stuffed,stavros,emotionally,transplant,tips,oxygen,nicely,lunatic,drill,complain,announcement,unfortunate,slap,prayers,plug,opens,oath,o'neill,mutual,yacht,remembers,fried,extraordinary,bait,warton,sworn,stare,safely,reunion,burst,might've,dive,aboard,expose,buddies,trusting,booze,sweep,sore,scudder,properly,parole,ditch,canceled,speaks,glow,wears,thirsty,skull,ringing,dorm,dining,bend,unexpected,pancakes,harsh,flattered,ahhh,troubles,fights,favourite,eats,rage,undercover,spoiled,sloane,shine,destroying,deliberately,conspiracy,thoughtful,sandwiches,plates,nails,miracles,fridge,drank,contrary,beloved,allergic,washed,stalking,solved,sack,misses,forgiven,bent,maciver,involve,dragging,cooked,pointing,foul,dull,beneath,heels,faking,deaf,stunt,jealousy,hopeless,fears,cuts,scenario,necklace,crashed,accuse,restraining,homicide,helicopter,firing,safer,auction,videotape,tore,reservations,pops,appetite,wounds,vanquish,ironic,fathers,excitement,anyhow,tearing,sends,rape,laughed,belly,dealer,cooperate,accomplish,wakes,spotted,sorts,reservation,ashes,tastes,supposedly,loft,intentions,integrity,wished,towels,suspected,investigating,inappropriate,lipstick,lawn,compassion,cafeteria,scarf,precisely,obsession,loses,lighten,infection,granddaughter,explode,balcony,this'll,spying,publicity,depend,cracked,conscious,ally,absurd,vicious,invented,forbid,directions,defendant,bare,announce,screwing,salesman,robbed,leap,lakeview,insanity,reveal,possibilities,kidnap,gown,chairs,wishing,setup,punished,criminals,regrets,raped,quarters,lamp,dentist,anyways,anonymous,semester,risks,owes,lungs,explaining,delicate,tricked,eager,doomed,adoption,stab,sickness,scum,floating,envelope,vault,sorel,pretended,potatoes,plea,photograph,payback,misunderstood,kiddo,healing,cascade,capeside,stabbed,remarkable,brat,privilege,passionate,nerves,lawsuit,kidney,disturbed,cozy,tire,shirts,oven,ordering,delay,risky,monsters,honorable,grounded,closest,breakdown,bald,abandon,scar,collar,worthless,sucking,enormous,disturbing,disturb,distract,deals,conclusions,vodka,dishes,crawling,briefcase,wiped,whistle,sits,roast,rented,pigs,flirting,deposit,bottles,topic,riot,overreacting,logical,hostile,embarrass,casual,beacon,amusing,altar,claus,survival,skirt,shave,porch,ghosts,favors,drops,dizzy,chili,advise,strikes,rehab,photographer,peaceful,leery,heavens,fortunately,fooling,expectations,cigar,weakness,ranch,practicing,examine,cranes,bribe,sail,prescription,hush,fragile,forensics,expense,drugged,cows,bells,visitor,suitcase,sorta,scan,manticore,insecure,imagining,hardest,clerk,wrist,what'll,starters,silk,pump,pale,nicer,haul,flies,boot,thumb,there'd,how're,elders,quietly,pulls,idiots,erase,denying,ankle,amnesia,accepting,heartbeat,devane,confront,minus,legitimate,fixing,arrogant,tuna,supper,slightest,sins,sayin,recipe,pier,paternity,humiliating,genuine,snack,rational,minded,guessed,weddings,tumor,humiliated,aspirin,spray,picks,eyed,drowning,contacts,ritual,perfume,hiring,hating,docks,creatures,visions,thanking,thankful,sock,nineteen,fork,throws,teenagers,stressed,slice,rolls,plead,ladder,kicks,detectives,assured,tellin,shallow,responsibilities,repay,howdy,girlfriends,deadly,comforting,ceiling,verdict,insensitive,spilled,respected,messy,interrupted,halliwell,blond,bleed,wardrobe,takin,murders,backs,underestimate,justify,harmless,frustrated,fold,enzo,communicate,bugging,arson,whack,salary,rumors,obligation,liking,dearest,congratulate,vengeance,rack,puzzle,fires,courtesy,caller,blamed,tops,quiz,prep,curiosity,circles,barbecue,sunnydale,spinning,psychotic,cough,accusations,resent,laughs,freshman,envy,drown,bartlet,asses,sofa,poster,highness,dock,apologies,theirs,stat,stall,realizes,psych,mmmm,fools,understandable,treats,succeed,stir,relaxed,makin,gratitude,faithful,accent,witter,wandering,locate,inevitable,gretel,deed,crushed,controlling,smelled,robe,gossip,gambling,cosmetics,accidents,surprising,stiff,sincere,rushed,refrigerator,preparing,nightmares,mijo,ignoring,hunch,fireworks,drowned,brass,whispering,sophisticated,luggage,hike,explore,emotion,crashing,contacted,complications,shining,rolled,righteous,reconsider,goody,geek,frightening,ethics,creeps,courthouse,camping,affection,smythe,haircut,essay,baked,apologized,vibe,respects,receipt,mami,hats,destructive,adore,adopt,tracked,shorts,reminding,dough,creations,cabot,barrel,snuck,slight,reporters,pressing,magnificent,madame,lazy,glorious,fiancee,bits,visitation,sane,kindness,shoulda,rescued,mattress,lounge,lifted,importantly,glove,enterprises,disappointment,condo,beings,admitting,yelled,waving,spoon,screech,satisfaction,reads,nailed,worm,tick,resting,marvelous,fuss,cortlandt,chased,pockets,luckily,lilith,filing,conversations,consideration,consciousness,worlds,innocence,forehead,aggressive,trailer,slam,quitting,inform,delighted,daylight,danced,confidential,aunts,washing,tossed,spectra,marrow,lined,implying,hatred,grill,corpse,clues,sober,offended,morgue,infected,humanity,distraction,cart,wired,violation,promising,harassment,glue,d'angelo,cursed,brutal,warlocks,wagon,unpleasant,proving,priorities,mustn't,lease,flame,disappearance,depressing,thrill,sitter,ribs,flush,earrings,deadline,corporal,collapsed,update,snapped,smack,melt,figuring,delusional,coulda,burnt,tender,sperm,realise,pork,popped,interrogation,esteem,choosing,undo,pres,prayed,plague,manipulate,insulting,detention,delightful,coffeehouse,betrayal,apologizing,adjust,wrecked,wont,whipped,rides,reminder,monsieur,faint,bake,distress,correctly,complaint,blocked,tortured,risking,pointless,handing,dumping,cups,alibi,struggling,shiny,risked,mummy,mint,hose,hobby,fortunate,fleischman,fitting,curtain,counseling,rode,puppet,modeling,memo,irresponsible,humiliation,hiya,freakin,felony,choke,blackmailing,appreciated,tabloid,suspicion,recovering,pledge,panicked,nursery,louder,jeans,investigator,homecoming,frustrating,buys,busting,buff,sleeve,irony,dope,declare,autopsy,workin,torch,prick,limb,hysterical,goddamnit,fetch,dimension,crowded,clip,climbing,bonding,woah,trusts,negotiate,lethal,iced,fantasies,deeds,bore,babysitter,questioned,outrageous,kiriakis,insulted,grudge,driveway,deserted,definite,beep,wires,suggestions,searched,owed,lend,drunken,demanding,costanza,conviction,bumped,weigh,touches,tempted,shout,resolve,relate,poisoned,meals,invitations,haunted,bogus,autograph,affects,tolerate,stepping,spontaneous,sleeps,probation,manny,fist,spectacular,hostages,heroin,havin,habits,encouraging,consult,burgers,boyfriends,bailed,baggage,watches,troubled,torturing,teasing,sweetest,qualities,postpone,overwhelmed,malkovich,impulse,classy,charging,amazed,policeman,hypocrite,humiliate,hideous,d'ya,costumes,bluffing,betting,bein,bedtime,alcoholic,vegetable,tray,suspicions,spreading,splendid,shrimp,shouting,pressed,nooo,grieving,gladly,fling,eliminate,cereal,aaah,sonofabitch,paralyzed,lotta,locks,guaranteed,dummy,despise,dental,briefing,bluff,batteries,whatta,sounding,servants,presume,handwriting,fainted,dried,allright,acknowledge,whacked,toxic,reliable,quicker,overwhelming,lining,harassing,fatal,endless,dolls,convict,whatcha,unlikely,shutting,positively,overcome,goddam,essence,dose,diagnosis,cured,bully,ahold,yearbook,tempting,shelf,prosecution,pouring,possessed,greedy,wonders,thorough,spine,rath,psychiatric,meaningless,latte,jammed,ignored,fiance,evidently,contempt,compromised,cans,weekends,urge,theft,suing,shipment,scissors,responding,proposition,noises,matching,hormones,hail,grandchildren,gently,smashed,sexually,sentimental,nicest,manipulated,intern,handcuffs,framed,errands,entertaining,crib,carriage,barge,spends,slipping,seated,rubbing,rely,reject,recommendation,reckon,headaches,float,embrace,corners,whining,sweating,skipped,mountie,motives,listens,cristobel,cleaner,cheerleader,balsom,unnecessary,stunning,scent,quartermaines,pose,montega,loosen,info,hottest,haunt,gracious,forgiving,errand,cakes,blames,abortion,sketch,shifts,plotting,perimeter,pals,mere,mattered,lonigan,interference,eyewitness,enthusiasm,diapers,strongest,shaken,punched,portal,catches,backyard,terrorists,sabotage,organs,needy,cuff,civilization,woof,who'll,prank,obnoxious,mates,hereby,gabby,faked,cellar,whitelighter,void,strangle,sour,muffins,interfering,demonic,clearing,boutique,barrington,terrace,smoked,righty,quack,petey,pact,knot,ketchup,disappearing,cordy,uptight,ticking,terrifying,tease,swamp,secretly,rejection,reflection,realizing,rays,mentally,marone,doubted,deception,congressman,cheesy,toto,stalling,scoop,ribbon,immune,expects,destined,bets,bathing,appreciation,accomplice,wander,shoved,sewer,scroll,retire,lasts,fugitive,freezer,discount,cranky,crank,clearance,bodyguard,anxiety,accountant,whoops,volunteered,talents,stinking,remotely,garlic,decency,cord,beds,altogether,uniforms,tremendous,popping,outa,observe,lung,hangs,feelin,dudes,donation,disguise,curb,bites,antique,toothbrush,realistic,predict,landlord,hourglass,hesitate,consolation,babbling,tipped,stranded,smartest,repeating,puke,psst,paycheck,overreacted,macho,juvenile,grocery,freshen,disposal,cuffs,caffeine,vanished,unfinished,ripping,pinch,flattering,expenses,dinners,colleague,ciao,belthazor,attorneys,woulda,whereabouts,waitin,truce,tripped,tasted,steer,poisoning,manipulative,immature,husbands,heel,granddad,delivering,condoms,addict,trashed,raining,pasta,needles,leaning,detector,coolest,batch,appointments,almighty,vegetables,spark,perfection,pains,momma,mole,meow,hairs,getaway,cracking,compliments,behold,verge,tougher,timer,tapped,taped,specialty,snooping,shoots,rendezvous,pentagon,leverage,jeopardize,janitor,grandparents,forbidden,clueless,bidding,ungrateful,unacceptable,tutor,serum,scuse,pajamas,mouths,lure,irrational,doom,cries,beautifully,arresting,approaching,traitor,sympathetic,smug,smash,rental,prostitute,premonitions,jumps,inventory,darlin,committing,banging,asap,worms,violated,vent,traumatic,traced,sweaty,shaft,overboard,insight,healed,grasp,experiencing,crappy,crab,chunk,awww,stain,shack,reacted,pronounce,poured,moms,marriages,jabez,handful,flipped,fireplace,embarrassment,disappears,concussion,bruises,brakes,twisting,swept,summon,splitting,sloppy,settling,reschedule,notch,hooray,grabbing,exquisite,disrespect,thornhart,straw,slapped,shipped,shattered,ruthless,refill,payroll,numb,mourning,manly,hunk,entertain,drift,dreadful,doorstep,confirmation,chops,appreciates,vague,tires,stressful,stashed,stash,sensed,preoccupied,predictable,noticing,madly,gunshot,dozens,dork,confuse,cleaners,charade,chalk,cappuccino,bouquet,amulet,addiction,who've,warming,unlock,satisfy,sacrificed,relaxing,lone,blocking,blend,blankets,addicted,yuck,hunger,hamburger,greeting,greet,gravy,gram,dreamt,dice,caution,backpack,agreeing,whale,taller,supervisor,sacrifices,phew,ounce,irrelevant,gran,felon,favorites,farther,fade,erased,easiest,convenience,compassionate,cane,backstage,agony,adores,veins,tweek,thieves,surgical,strangely,stetson,recital,proposing,productive,meaningful,immunity,hassle,goddamned,frighten,dearly,cease,ambition,wage,unstable,salvage,richer,refusing,raging,pumping,pressuring,mortals,lowlife,intimidated,intentionally,inspire,forgave,devotion,despicable,deciding,dash,comfy,breach,bark,aaaah,switching,swallowed,stove,screamed,scars,russians,pounding,poof,pipes,pawn,legit,invest,farewell,curtains,civilized,caviar,boost,token,superstition,supernatural,sadness,recorder,psyched,motivated,microwave,hallelujah,fraternity,dryer,cocoa,chewing,acceptable,unbelievably,smiled,smelling,simpler,respectable,remarks,khasinau,indication,gutter,grabs,fulfill,flashlight,ellenor,blooded,blink,blessings,beware,uhhh,turf,swings,slips,shovel,shocking,puff,mirrors,locking,heartless,fras,childish,cardiac,utterly,tuscany,ticked,stunned,statesville,sadly,purely,kiddin,jerks,hitch,flirt,fare,equals,dismiss,christening,casket,c'mere,breakup,biting,antibiotics,accusation,abducted,witchcraft,thread,runnin,punching,paramedics,newest,murdering,masks,lawndale,initials,grampa,choking,charms,careless,bushes,buns,bummed,shred,saves,saddle,rethink,regards,precinct,persuade,meds,manipulating,llanfair,leash,hearted,guarantees,fucks,disgrace,deposition,bookstore,boil,vitals,veil,trespassing,sidewalk,sensible,punishing,overtime,optimistic,obsessing,notify,mornin,jeopardy,jaffa,injection,hilarious,desires,confide,cautious,yada,where're,vindictive,vial,teeny,stroll,sittin,scrub,rebuild,posters,ordeal,nuns,intimacy,inheritance,exploded,donate,distracting,despair,crackers,wildwind,virtue,thoroughly,tails,spicy,sketches,sights,sheer,shaving,seize,scarecrow,refreshing,prosecute,platter,napkin,misplaced,merchandise,loony,jinx,heroic,frankenstein,ambitious,syrup,solitary,resemblance,reacting,premature,lavery,flashes,cheque,awright,acquainted,wrapping,untie,salute,realised,priceless,partying,lightly,lifting,kasnoff,insisting,glowing,generator,explosives,cutie,confronted,buts,blouse,ballistic,antidote,analyze,allowance,adjourned,unto,understatement,tucked,touchy,subconscious,screws,sarge,roommates,rambaldi,offend,nerd,knives,irresistible,incapable,hostility,goddammit,fuse,frat,curfew,blackmailed,walkin,starve,sleigh,sarcastic,recess,rebound,pinned,parlor,outfits,livin,heartache,haired,fundraiser,doorman,discreet,dilucca,cracks,considerate,climbed,catering,apophis,zoey,urine,strung,stitches,sordid,sark,protector,phoned,pets,hostess,flaw,flavor,deveraux,consumed,confidentiality,bourbon,straightened,specials,spaghetti,prettier,powerless,playin,playground,paranoia,instantly,havoc,exaggerating,eavesdropping,doughnuts,diversion,deepest,cutest,comb,bela,behaving,anyplace,accessory,workout,translate,stuffing,speeding,slime,royalty,polls,marital,lurking,lottery,imaginary,greetings,fairwinds,elegant,elbow,credibility,credentials,claws,chopped,bridal,bedside,babysitting,witty,unforgivable,underworld,tempt,tabs,sophomore,selfless,secrecy,restless,okey,movin,metaphor,messes,meltdown,lecter,incoming,gasoline,diefenbaker,buckle,admired,adjustment,warmth,throats,seduced,queer,parenting,noses,luckiest,graveyard,gifted,footsteps,dimeras,cynical,wedded,verbal,unpredictable,tuned,stoop,slides,sinking,rigged,plumbing,lingerie,hankey,greed,everwood,elope,dresser,chauffeur,bulletin,bugged,bouncing,temptation,strangest,slammed,sarcasm,pending,packages,orderly,obsessive,murderers,meteor,inconvenience,glimpse,froze,execute,courageous,consulate,closes,bosses,bees,amends,wuss,wolfram,wacky,unemployed,testifying,syringe,stew,startled,sorrow,sleazy,shaky,screams,rsquo,remark,poke,nutty,mentioning,mend,inspiring,impulsive,housekeeper,foam,fingernails,conditioning,baking,whine,thug,starved,sniffing,sedative,programmed,picket,paged,hound,homosexual,homo,hips,forgets,flipping,flea,flatter,dwell,dumpster,choo,assignments,ants,vile,unreasonable,tossing,thanked,steals,souvenir,scratched,psychopath,outs,obstruction,obey,lump,insists,harass,gloat,filth,edgy,didn,coroner,confessing,bruise,betraying,bailing,appealing,adebisi,wrath,wandered,waist,vain,traps,stepfather,poking,obligated,heavenly,dilemma,crazed,contagious,coaster,cheering,bundle,vomit,thingy,speeches,robbing,raft,pumped,pillows,peep,packs,neglected,m'kay,loneliness,intrude,helluva,gardener,forresters,drooling,betcha,vase,supermarket,squat,spitting,rhyme,relieve,receipts,racket,pictured,pause,overdue,motivation,morgendorffer,kidnapper,insect,horns,feminine,eyeballs,dumps,disappointing,crock,convertible,claw,clamp,canned,cambias,bathtub,avanya,artery,weep,warmer,suspense,summoned,spiders,reiber,raving,pushy,postponed,ohhhh,noooo,mold,laughter,incompetent,hugging,groceries,drip,communicating,auntie,adios,wraps,wiser,willingly,weirdest,timmih,thinner,swelling,swat,steroids,sensitivity,scrape,rehearse,prophecy,ledge,justified,insults,hateful,handles,doorway,chatting,buyer,buckaroo,bedrooms,askin,ammo,tutoring,subpoena,scratching,privileges,pager,mart,intriguing,idiotic,grape,enlighten,corrupt,brunch,bridesmaid,barking,applause,acquaintance,wretched,superficial,soak,smoothly,sensing,restraint,posing,pleading,payoff,oprah,nemo,morals,loaf,jumpy,ignorant,herbal,hangin,germs,generosity,flashing,doughnut,clumsy,chocolates,captive,behaved,apologise,vanity,stumbled,preview,poisonous,perjury,parental,onboard,mugged,minding,linen,knots,interviewing,humour,grind,greasy,goons,drastic,coop,comparing,cocky,clearer,bruised,brag,bind,worthwhile,whoop,vanquishing,tabloids,sprung,spotlight,sentencing,racist,provoke,pining,overly,locket,imply,impatient,hovering,hotter,fest,endure,dots,doren,debts,crawled,chained,brit,breaths,weirdo,warmed,wand,troubling,tok'ra,strapped,soaked,skipping,scrambled,rattle,profound,musta,mocking,misunderstand,limousine,kacl,hustle,forensic,enthusiastic,duct,drawers,devastating,conquer,clarify,chores,cheerleaders,cheaper,callin,blushing,barging,abused,yoga,wrecking,wits,waffles,virginity,vibes,uninvited,unfaithful,teller,strangled,scheming,ropes,rescuing,rave,postcard,o'reily,morphine,lotion,lads,kidneys,judgement,itch,indefinitely,grenade,glamorous,genetically,freud,discretion,delusions,crate,competent,bakery,argh,ahhhh,wedge,wager,unfit,tripping,torment,superhero,stirring,spinal,sorority,seminar,scenery,rabble,pneumonia,perks,override,ooooh,mija,manslaughter,mailed,lime,lettuce,intimidate,guarded,grieve,grad,frustration,doorbell,chinatown,authentic,arraignment,annulled,allergies,wanta,verify,vegetarian,tighter,telegram,stalk,spared,shoo,satisfying,saddam,requesting,pens,overprotective,obstacles,notified,nasedo,grandchild,genuinely,flushed,fluids,floss,escaping,ditched,cramp,corny,bunk,bitten,billions,bankrupt,yikes,wrists,ultrasound,ultimatum,thirst,sniff,shakes,salsa,retrieve,reassuring,pumps,neurotic,negotiating,needn't,monitors,millionaire,lydecker,limp,incriminating,hatchet,gracias,gordie,fills,feeds,doubting,decaf,biopsy,whiz,voluntarily,ventilator,unpack,unload,toad,spooked,snitch,schillinger,reassure,persuasive,mystical,mysteries,matrimony,mails,jock,headline,explanations,dispatch,curly,cupid,condolences,comrade,cassadines,bulb,bragging,awaits,assaulted,ambush,adolescent,abort,yank,whit,vaguely,undermine,tying,swamped,stabbing,slippers,slash,sincerely,sigh,setback,secondly,rotting,precaution,pcpd,melting,liaison,hots,hooking,headlines,haha,ganz,fury,felicity,fangs,encouragement,earring,dreidel,dory,donut,dictate,decorating,cocktails,bumps,blueberry,believable,backfired,backfire,apron,adjusting,vous,vouch,vitamins,ummm,tattoos,slimy,sibling,shhhh,renting,peculiar,parasite,paddington,marries,mailbox,magically,lovebirds,knocks,informant,exits,drazen,distractions,disconnected,dinosaurs,dashwood,crooked,conveniently,wink,warped,underestimated,tacky,shoving,seizure,reset,pushes,opener,mornings,mash,invent,indulge,horribly,hallucinating,festive,eyebrows,enjoys,desperation,dealers,darkest,daph,boragora,belts,bagel,authorization,auditions,agitated,wishful,wimp,vanish,unbearable,tonic,suffice,suction,slaying,safest,rocking,relive,puttin,prettiest,noisy,newlyweds,nauseous,misguided,mildly,midst,liable,judgmental,indy,hunted,givin,fascinated,elephants,dislike,deluded,decorate,crummy,contractions,carve,bottled,bonded,bahamas,unavailable,twenties,trustworthy,surgeons,stupidity,skies,remorse,preferably,pies,nausea,napkins,mule,mourn,melted,mashed,inherit,greatness,golly,excused,dumbo,drifting,delirious,damaging,cubicle,compelled,comm,chooses,checkup,boredom,bandages,alarms,windshield,who're,whaddya,transparent,surprisingly,sunglasses,slit,roar,reade,prognosis,probe,pitiful,persistent,peas,nosy,nagging,morons,masterpiece,martinis,limbo,liars,irritating,inclined,hump,hoynes,fiasco,eatin,cubans,concentrating,colorful,clam,cider,brochure,barto,bargaining,wiggle,welcoming,weighing,vanquished,stains,sooo,snacks,smear,sire,resentment,psychologist,pint,overhear,morality,landingham,kisser,hoot,holling,handshake,grilled,formality,elevators,depths,confirms,boathouse,accidental,westbridge,wacko,ulterior,thugs,thighs,tangled,stirred,snag,sling,sleaze,rumour,ripe,remarried,puddle,pins,perceptive,miraculous,longing,lockup,librarian,impressions,immoral,hypothetically,guarding,gourmet,gabe,faxed,extortion,downright,digest,cranberry,bygones,buzzing,burying,bikes,weary,taping,takeout,sweeping,stepmother,stale,senor,seaborn,pros,pepperoni,newborn,ludicrous,injected,geeks,forged,faults,drue,dire,dief,desi,deceiving,caterer,calmed,budge,ankles,vending,typing,tribbiani,there're,squared,snowing,shades,sexist,rewrite,regretted,raises,picky,orphan,mural,misjudged,miscarriage,memorize,leaking,jitters,invade,interruption,illegally,handicapped,glitch,gittes,finer,distraught,dispose,dishonest,digs,dads,cruelty,circling,canceling,butterflies,belongings,barbrady,amusement,alias,zombies,where've,unborn,swearing,stables,squeezed,sensational,resisting,radioactive,questionable,privileged,portofino,owning,overlook,orson,oddly,interrogate,imperative,impeccable,hurtful,hors,heap,graders,glance,disgust,devious,destruct,crazier,countdown,chump,cheeseburger,burglar,berries,ballroom,assumptions,annoyed,allergy,admirer,admirable,activate,underpants,twit,tack,strokes,stool,sham,scrap,retarded,resourceful,remarkably,refresh,pressured,precautions,pointy,nightclub,mustache,maui,lace,hunh,hubby,flare,dont,dokey,dangerously,crushing,clinging,choked,chem,cheerleading,checkbook,cashmere,calmly,blush,believer,amazingly,alas,what've,toilets,tacos,stairwell,spirited,sewing,rubbed,punches,protects,nuisance,motherfuckers,mingle,kynaston,knack,kinkle,impose,gullible,godmother,funniest,friggin,folding,fashions,eater,dysfunctional,drool,dripping,ditto,cruising,criticize,conceive,clone,cedars,caliber,brighter,blinded,birthdays,banquet,anticipate,annoy,whim,whichever,volatile,veto,vested,shroud,rests,reindeer,quarantine,pleases,painless,orphans,orphanage,offence,obliged,negotiation,narcotics,mistletoe,meddling,manifest,lookit,lilah,intrigued,injustice,homicidal,gigantic,exposing,elves,disturbance,disastrous,depended,demented,correction,cooped,cheerful,buyers,brownies,beverage,basics,arvin,weighs,upsets,unethical,swollen,sweaters,stupidest,sensation,scalpel,props,prescribed,pompous,objections,mushrooms,mulwray,manipulation,lured,internship,insignificant,inmate,incentive,fulfilled,disagreement,crypt,cornered,copied,brightest,beethoven,attendant,amaze,yogurt,wyndemere,vocabulary,tulsa,tactic,stuffy,respirator,pretends,polygraph,pennies,ordinarily,olives,necks,morally,martyr,leftovers,joints,hopping,homey,hints,heartbroken,forge,florist,firsthand,fiend,dandy,crippled,corrected,conniving,conditioner,clears,chemo,bubbly,bladder,beeper,baptism,wiring,wench,weaknesses,volunteering,violating,unlocked,tummy,surrogate,subid,stray,startle,specifics,slowing,scoot,robbers,rightful,richest,qfxmjrie,puffs,pierced,pencils,paralysis,makeover,luncheon,linksynergy,jerky,jacuzzi,hitched,hangover,fracture,flock,firemen,disgusted,darned,clams,borrowing,banged,wildest,weirder,unauthorized,stunts,sleeves,sixties,shush,shalt,retro,quits,pegged,painfully,paging,omelet,memorized,lawfully,jackets,intercept,ingredient,grownup,glued,fulfilling,enchanted,delusion,daring,compelling,carton,bridesmaids,bribed,boiling,bathrooms,bandage,awaiting,assign,arrogance,antiques,ainsley,turkeys,trashing,stockings,stalked,stabilized,skates,sedated,robes,respecting,psyche,presumptuous,prejudice,paragraph,mocha,mints,mating,mantan,lorne,loads,listener,itinerary,hepatitis,heave,guesses,fading,examining,dumbest,dishwasher,deceive,cunning,cripple,convictions,confided,compulsive,compromising,burglary,bumpy,brainwashed,benes,arnie,affirmative,adrenaline,adamant,watchin,waitresses,transgenic,toughest,tainted,surround,stormed,spree,spilling,spectacle,soaking,shreds,sewers,severed,scarce,scamming,scalp,rewind,rehearsing,pretentious,potions,overrated,obstacle,nerds,meems,mcmurphy,maternity,maneuver,loathe,fertility,eloping,ecstatic,ecstasy,divorcing,dignan,costing,clubhouse,clocks,candid,bursting,breather,braces,bending,arsonist,adored,absorb,valiant,uphold,unarmed,topolsky,thrilling,thigh,terminate,sustain,spaceship,snore,sneeze,smuggling,salty,quaint,patronize,patio,morbid,mamma,kettle,joyous,invincible,interpret,insecurities,impulses,illusions,holed,exploit,drivin,defenseless,dedicate,cradle,coupon,countless,conjure,cardboard,booking,backseat,accomplishment,wordsworth,wisely,valet,vaccine,urges,unnatural,unlucky,truths,traumatized,tasting,swears,strawberries,steaks,stats,skank,seducing,secretive,scumbag,screwdriver,schedules,rooting,rightfully,rattled,qualifies,puppets,prospects,pronto,posse,polling,pedestal,palms,muddy,morty,microscope,merci,lecturing,inject,incriminate,hygiene,grapefruit,gazebo,funnier,cuter,bossy,booby,aides,zende,winthrop,warrants,valentines,undressed,underage,truthfully,tampered,suffers,speechless,sparkling,sidelines,shrek,railing,puberty,pesky,outrage,outdoors,motions,moods,lunches,litter,kidnappers,itching,intuition,imitation,humility,hassling,gallons,drugstore,dosage,disrupt,dipping,deranged,debating,cuckoo,cremated,craziness,cooperating,circumstantial,chimney,blinking,biscuits,admiring,weeping,triad,trashy,soothing,slumber,slayers,skirts,siren,shindig,sentiment,rosco,riddance,quaid,purity,proceeding,pretzels,panicking,mckechnie,lovin,leaked,intruding,impersonating,ignorance,hamburgers,footprints,fluke,fleas,festivities,fences,feisty,evacuate,emergencies,deceived,creeping,craziest,corpses,conned,coincidences,bounced,bodyguards,blasted,bitterness,baloney,ashtray,apocalypse,zillion,watergate,wallpaper,telesave,sympathize,sweeter,startin,spades,sodas,snowed,sleepover,signor,seein,retainer,restroom,rested,repercussions,reliving,reconcile,prevail,preaching,overreact,o'neil,noose,moustache,manicure,maids,landlady,hypothetical,hopped,homesick,hives,hesitation,herbs,hectic,heartbreak,haunting,gangs,frown,fingerprint,exhausting,everytime,disregard,cling,chevron,chaperone,blinding,bitty,beads,battling,badgering,anticipation,upstanding,unprofessional,unhealthy,turmoil,truthful,toothpaste,tippin,thoughtless,tagataya,shooters,senseless,rewarding,propane,preposterous,pigeons,pastry,overhearing,obscene,negotiable,loner,jogging,itchy,insinuating,insides,hospitality,hormone,hearst,forthcoming,fists,fifties,etiquette,endings,destroys,despises,deprived,cuddy,crust,cloak,circumstance,chewed,casserole,bidder,bearer,artoo,applaud,appalling,vowed,virgins,vigilante,undone,throttle,testosterone,tailor,symptom,swoop,suitcases,stomp,sticker,stakeout,spoiling,snatched,smoochy,smitten,shameless,restraints,researching,renew,refund,reclaim,raoul,puzzles,purposely,punks,prosecuted,plaid,picturing,pickin,parasites,mysteriously,multiply,mascara,jukebox,interruptions,gunfire,furnace,elbows,duplicate,drapes,deliberate,decoy,cryptic,coupla,condemn,complicate,colossal,clerks,clarity,brushed,banished,argon,alarmed,worships,versa,uncanny,technicality,sundae,stumble,stripping,shuts,schmuck,satin,saliva,robber,relentless,reconnect,recipes,rearrange,rainy,psychiatrists,policemen,plunge,plugged,patched,overload,o'malley,mindless,menus,lullaby,lotte,leavin,killin,karinsky,invalid,hides,grownups,griff,flaws,flashy,flaming,fettes,evicted,dread,degrassi,dealings,dangers,cushion,bowel,barged,abide,abandoning,wonderfully,wait'll,violate,suicidal,stayin,sorted,slamming,sketchy,shoplifting,raiser,quizmaster,prefers,needless,motherhood,momentarily,migraine,lifts,leukemia,leftover,keepin,hinks,hellhole,gowns,goodies,gallon,futures,entertained,eighties,conspiring,cheery,benign,apiece,adjustments,abusive,abduction,wiping,whipping,welles,unspeakable,unidentified,trivial,transcripts,textbook,supervise,superstitious,stricken,stimulating,spielberg,slices,shelves,scratches,sabotaged,retrieval,repressed,rejecting,quickie,ponies,peeking,outraged,o'connell,moping,moaning,mausoleum,licked,kovich,klutz,interrogating,interfered,insulin,infested,incompetence,hyper,horrified,handedly,gekko,fraid,fractured,examiner,eloped,disoriented,dashing,crashdown,courier,cockroach,chipped,brushing,bombed,bolts,baths,baptized,astronaut,assurance,anemia,abuela,abiding,withholding,weave,wearin,weaker,suffocating,straws,straightforward,stench,steamed,starboard,sideways,shrinks,shortcut,scram,roasted,roaming,riviera,respectfully,repulsive,psychiatry,provoked,penitentiary,painkillers,ninotchka,mitzvah,milligrams,midge,marshmallows,looky,lapse,kubelik,intellect,improvise,implant,goa'ulds,giddy,geniuses,fruitcake,footing,fightin,drinkin,doork,detour,cuddle,crashes,combo,colonnade,cheats,cetera,bailiff,auditioning,assed,amused,alienate,aiding,aching,unwanted,topless,tongues,tiniest,superiors,soften,sheldrake,rawley,raisins,presses,plaster,nessa,narrowed,minions,merciful,lawsuits,intimidating,infirmary,inconvenient,imposter,hugged,honoring,holdin,hades,godforsaken,fumes,forgery,foolproof,folder,flattery,fingertips,exterminator,explodes,eccentric,dodging,disguised,crave,constructive,concealed,compartment,chute,chinpokomon,bodily,astronauts,alimony,accustomed,abdominal,wrinkle,wallow,valium,untrue,uncover,trembling,treasures,torched,toenails,timed,termites,telly,taunting,taransky,talker,succubus,smarts,sliding,sighting,semen,seizures,scarred,savvy,sauna,saddest,sacrificing,rubbish,riled,ratted,rationally,provenance,phonse,perky,pedal,overdose,nasal,nanites,mushy,movers,missus,midterm,merits,melodramatic,manure,knitting,invading,interpol,incapacitated,hotline,hauling,gunpoint,grail,ganza,framing,flannel,faded,eavesdrop,desserts,calories,breathtaking,bleak,blacked,batter,aggravated,yanked,wigand,whoah,unwind,undoubtedly,unattractive,twitch,trimester,torrance,timetable,taxpayers,strained,stared,slapping,sincerity,siding,shenanigans,shacking,sappy,samaritan,poorer,politely,paste,oysters,overruled,nightcap,mosquito,millimeter,merrier,manhood,lucked,kilos,ignition,hauled,harmed,goodwill,freshmen,fenmore,fasten,farce,exploding,erratic,drunks,ditching,d'artagnan,cramped,contacting,closets,clientele,chimp,bargained,arranging,anesthesia,amuse,altering,afternoons,accountable,abetting,wolek,waved,uneasy,toddy,tattooed,spauldings,sliced,sirens,schibetta,scatter,rinse,remedy,redemption,pleasures,optimism,oblige,mmmmm,masked,malicious,mailing,kosher,kiddies,judas,isolate,insecurity,incidentally,heals,headlights,growl,grilling,glazed,flunk,floats,fiery,fairness,exercising,excellency,disclosure,cupboard,counterfeit,condescending,conclusive,clicked,cleans,cholesterol,cashed,broccoli,brats,blueprints,blindfold,billing,attach,appalled,alrighty,wynant,unsolved,unreliable,toots,tighten,sweatshirt,steinbrenner,steamy,spouse,sonogram,slots,sleepless,shines,retaliate,rephrase,redeem,rambling,quilt,quarrel,prying,proverbial,priced,prescribe,prepped,pranks,possessive,plaintiff,pediatrics,overlooked,outcast,nightgown,mumbo,mediocre,mademoiselle,lunchtime,lifesaver,leaned,lambs,interns,hounding,hellmouth,hahaha,goner,ghoul,gardening,frenzy,foyer,extras,exaggerate,everlasting,enlightened,dialed,devote,deceitful,d'oeuvres,cosmetic,contaminated,conspired,conning,cavern,carving,butting,boiled,blurry,babysit,ascension,aaaaah,wildly,whoopee,whiny,weiskopf,walkie,vultures,vacations,upfront,unresolved,tampering,stockholders,snaps,sleepwalking,shrunk,sermon,seduction,scams,revolve,phenomenal,patrolling,paranormal,ounces,omigod,nightfall,lashing,innocents,infierno,incision,humming,haunts,gloss,gloating,frannie,fetal,feeny,entrapment,discomfort,detonator,dependable,concede,complication,commotion,commence,chulak,caucasian,casually,brainer,bolie,ballpark,anwar,analyzing,accommodations,youse,wring,wallowing,transgenics,thrive,tedious,stylish,strippers,sterile,squeezing,squeaky,sprained,solemn,snoring,shattering,shabby,seams,scrawny,revoked,residue,reeks,recite,ranting,quoting,predicament,plugs,pinpoint,petrified,pathological,passports,oughtta,nighter,navigate,kippie,intrigue,intentional,insufferable,hunky,how've,horrifying,hearty,hamptons,grazie,funerals,forks,fetched,excruciating,enjoyable,endanger,dumber,drying,diabolical,crossword,corry,comprehend,clipped,classmates,candlelight,brutally,brutality,boarded,bathrobe,authorize,assemble,aerobics,wholesome,whiff,vermin,trophies,trait,tragically,toying,testy,tasteful,stocked,spinach,sipping,sidetracked,scrubbing,scraping,sanctity,robberies,ridin,retribution,refrain,realities,radiant,protesting,projector,plutonium,payin,parting,o'reilly,nooooo,motherfucking,measly,manic,lalita,juggling,jerking,intro,inevitably,hypnosis,huddle,horrendous,hobbies,heartfelt,harlin,hairdresser,gonorrhea,fussing,furtwangler,fleeting,flawless,flashed,fetus,eulogy,distinctly,disrespectful,denies,crossbow,cregg,crabs,cowardly,contraction,contingency,confirming,condone,coffins,cleansing,cheesecake,certainty,cages,c'est,briefed,bravest,bosom,boils,binoculars,bachelorette,appetizer,ambushed,alerted,woozy,withhold,vulgar,utmost,unleashed,unholy,unhappiness,unconditional,typewriter,typed,twists,supermodel,subpoenaed,stringing,skeptical,schoolgirl,romantically,rocked,revoir,reopen,puncture,preach,polished,planetarium,penicillin,peacefully,nurturing,more'n,mmhmm,midgets,marklar,lodged,lifeline,jellyfish,infiltrate,hutch,horseback,heist,gents,frickin,freezes,forfeit,flakes,flair,fathered,eternally,epiphany,disgruntled,discouraged,delinquent,decipher,danvers,cubes,credible,coping,chills,cherished,catastrophe,bombshell,birthright,billionaire,ample,affections,admiration,abbotts,whatnot,watering,vinegar,unthinkable,unseen,unprepared,unorthodox,underhanded,uncool,timeless,thump,thermometer,theoretically,tapping,tagged,swung,stares,spiked,solves,smuggle,scarier,saucer,quitter,prudent,powdered,poked,pointers,peril,penetrate,penance,opium,nudge,nostrils,neurological,mockery,mobster,medically,loudly,insights,implicate,hypocritical,humanly,holiness,healthier,hammered,haldeman,gunman,gloom,freshly,francs,flunked,flawed,emptiness,drugging,dozer,derevko,deprive,deodorant,cryin,crocodile,coloring,colder,cognac,clocked,clippings,charades,chanting,certifiable,caterers,brute,brochures,botched,blinders,bitchin,banter,woken,ulcer,tread,thankfully,swine,swimsuit,swans,stressing,steaming,stamped,stabilize,squirm,snooze,shuffle,shredded,seafood,scratchy,savor,sadistic,rhetorical,revlon,realist,prosecuting,prophecies,polyester,petals,persuasion,paddles,o'leary,nuthin,neighbour,negroes,muster,meningitis,matron,lockers,letterman,legged,indictment,hypnotized,housekeeping,hopelessly,hallucinations,grader,goldilocks,girly,flask,envelopes,downside,doves,dissolve,discourage,disapprove,diabetic,deliveries,decorator,crossfire,criminally,containment,comrades,complimentary,chatter,catchy,cashier,cartel,caribou,cardiologist,brawl,booted,barbershop,aryan,angst,administer,zellie,wreak,whistles,vandalism,vamps,uterus,upstate,unstoppable,understudy,tristin,transcript,tranquilizer,toxins,tonsils,stempel,spotting,spectator,spatula,softer,snotty,slinging,showered,sexiest,sensual,sadder,rimbaud,restrain,resilient,remission,reinstate,rehash,recollection,rabies,popsicle,plausible,pediatric,patronizing,ostrich,ortolani,oooooh,omelette,mistrial,marseilles,loophole,laughin,kevvy,irritated,infidelity,hypothermia,horrific,groupie,grinding,graceful,goodspeed,gestures,frantic,extradition,echelon,disks,dawnie,dared,damsel,curled,collateral,collage,chant,calculating,bumping,bribes,boardwalk,blinds,blindly,bleeds,bickering,beasts,backside,avenge,apprehended,anguish,abusing,youthful,yells,yanking,whomever,when'd,vomiting,vengeful,unpacking,unfamiliar,undying,tumble,trolls,treacherous,tipping,tantrum,tanked,summons,straps,stomped,stinkin,stings,staked,squirrels,sprinkles,speculate,sorting,skinned,sicko,sicker,shootin,shatter,seeya,schnapps,s'posed,ronee,respectful,regroup,regretting,reeling,reckoned,ramifications,puddy,projections,preschool,plissken,platonic,permalash,outdone,outburst,mutants,mugging,misfortune,miserably,miraculously,medications,margaritas,manpower,lovemaking,logically,leeches,latrine,kneel,inflict,impostor,hypocrisy,hippies,heterosexual,heightened,hecuba,healer,gunned,grooming,groin,gooey,gloomy,frying,friendships,fredo,firepower,fathom,exhaustion,evils,endeavor,eggnog,dreaded,d'arcy,crotch,coughing,coronary,cookin,consummate,congrats,companionship,caved,caspar,bulletproof,brilliance,breakin,brash,blasting,aloud,airtight,advising,advertise,adultery,aches,wronged,upbeat,trillion,thingies,tending,tarts,surreal,specs,specialize,spade,shrew,shaping,selves,schoolwork,roomie,recuperating,rabid,quart,provocative,proudly,pretenses,prenatal,pharmaceuticals,pacing,overworked,originals,nicotine,murderous,mileage,mayonnaise,massages,losin,interrogated,injunction,impartial,homing,heartbreaker,hacks,glands,giver,fraizh,flips,flaunt,englishman,electrocuted,dusting,ducking,drifted,donating,cylon,crutches,crates,cowards,comfortably,chummy,chitchat,childbirth,businesswoman,brood,blatant,bethy,barring,bagged,awakened,asbestos,airplanes,worshipped,winnings,why're,visualize,unprotected,unleash,trays,thicker,therapists,takeoff,streisand,storeroom,stethoscope,stacked,spiteful,sneaks,snapping,slaughtered,slashed,simplest,silverware,shits,secluded,scruples,scrubs,scraps,ruptured,roaring,receptionist,recap,raditch,radiator,pushover,plastered,pharmacist,perverse,perpetrator,ornament,ointment,nineties,napping,nannies,mousse,moors,momentary,misunderstandings,manipulator,malfunction,laced,kivar,kickin,infuriating,impressionable,holdup,hires,hesitated,headphones,hammering,groundwork,grotesque,graces,gauze,gangsters,frivolous,freeing,fours,forwarding,ferrars,faulty,fantasizing,extracurricular,empathy,divorces,detonate,depraved,demeaning,deadlines,dalai,cursing,cufflink,crows,coupons,comforted,claustrophobic,casinos,camped,busboy,bluth,bennetts,baskets,attacker,aplastic,angrier,affectionate,zapped,wormhole,weaken,unrealistic,unravel,unimportant,unforgettable,twain,suspend,superbowl,stutter,stewardess,stepson,standin,spandex,souvenirs,sociopath,skeletons,shivering,sexier,selfishness,scrapbook,ritalin,ribbons,reunite,remarry,relaxation,rattling,rapist,psychosis,prepping,poses,pleasing,pisses,piling,persecuted,padded,operatives,negotiator,natty,menopause,mennihan,martimmys,loyalties,laynie,lando,justifies,intimately,inexperienced,impotent,immortality,horrors,hooky,hinges,heartbreaking,handcuffed,gypsies,guacamole,grovel,graziella,goggles,gestapo,fussy,ferragamo,feeble,eyesight,explosions,experimenting,enchanting,doubtful,dizziness,dismantle,detectors,deserving,defective,dangling,dancin,crumble,creamed,cramping,conceal,clockwork,chrissakes,chrissake,chopping,cabinets,brooding,bonfire,blurt,bloated,blackmailer,beforehand,bathed,bathe,barcode,banish,badges,babble,await,attentive,aroused,antibodies,animosity,ya'll,wrinkled,wonderland,willed,whisk,waltzing,waitressing,vigilant,upbringing,unselfish,uncles,trendy,trajectory,striped,stamina,stalled,staking,stacks,spoils,snuff,snooty,snide,shrinking,senora,secretaries,scoundrel,saline,salads,rundown,riddles,relapse,recommending,raspberry,plight,pecan,pantry,overslept,ornaments,niner,negligent,negligence,nailing,mucho,mouthed,monstrous,malpractice,lowly,loitering,logged,lingering,lettin,lattes,kamal,juror,jillefsky,jacked,irritate,intrusion,insatiable,infect,impromptu,icing,hmmmm,hefty,gasket,frightens,flapping,firstborn,faucet,estranged,envious,dopey,doesn,disposition,disposable,disappointments,dipped,dignified,deceit,dealership,deadbeat,curses,coven,counselors,concierge,clutches,casbah,callous,cahoots,brotherly,britches,brides,bethie,beige,autographed,attendants,attaboy,astonishing,appreciative,antibiotic,aneurysm,afterlife,affidavit,zoning,whats,whaddaya,vasectomy,unsuspecting,toula,topanga,tonio,toasted,tiring,terrorized,tenderness,tailing,sweats,suffocated,sucky,subconsciously,starvin,sprouts,spineless,sorrows,snowstorm,smirk,slicery,sledding,slander,simmer,signora,sigmund,seventies,sedate,scented,sandals,rollers,retraction,resigning,recuperate,receptive,racketeering,queasy,provoking,priors,prerogative,premed,pinched,pendant,outsiders,orbing,opportunist,olanov,neurologist,nanobot,mommies,molested,misread,mannered,laundromat,intercom,inspect,insanely,infatuation,indulgent,indiscretion,inconsiderate,hurrah,howling,herpes,hasta,harassed,hanukkah,groveling,groosalug,gander,galactica,futile,fridays,flier,fixes,exploiting,exorcism,evasive,endorse,emptied,dreary,dreamy,downloaded,dodged,doctored,disobeyed,disneyland,disable,dehydrated,contemplating,coconuts,cockroaches,clogged,chilling,chaperon,cameraman,bulbs,bucklands,bribing,brava,bracelets,bowels,bluepoint,appetizers,appendix,antics,anointed,analogy,almonds,yammering,winch,weirdness,wangler,vibrations,vendor,unmarked,unannounced,twerp,trespass,travesty,transfusion,trainee,towelie,tiresome,straightening,staggering,sonar,socializing,sinus,sinners,shambles,serene,scraped,scones,scepter,sarris,saberhagen,ridiculously,ridicule,rents,reconciled,radios,publicist,pubes,prune,prude,precrime,postponing,pluck,perish,peppermint,peeled,overdo,nutshell,nostalgic,mulan,mouthing,mistook,meddle,maybourne,martimmy,lobotomy,livelihood,lippman,likeness,kindest,kaffee,jocks,jerked,jeopardizing,jazzed,insured,inquisition,inhale,ingenious,holier,helmets,heirloom,heinous,haste,harmsway,hardship,hanky,gutters,gruesome,groping,goofing,godson,glare,finesse,figuratively,ferrie,endangerment,dreading,dozed,dorky,dmitri,divert,discredit,dialing,cufflinks,crutch,craps,corrupted,cocoon,cleavage,cannery,bystander,brushes,bruising,bribery,brainstorm,bolted,binge,ballistics,astute,arroway,adventurous,adoptive,addicts,addictive,yadda,whitelighters,wematanye,weeds,wedlock,wallets,vulnerability,vroom,vents,upped,unsettling,unharmed,trippin,trifle,tracing,tormenting,thats,syphilis,subtext,stickin,spices,sores,smacked,slumming,sinks,signore,shitting,shameful,shacked,septic,seedy,righteousness,relish,rectify,ravishing,quickest,phoebs,perverted,peeing,pedicure,pastrami,passionately,ozone,outnumbered,oregano,offender,nukes,nosed,nighty,nifty,mounties,motivate,moons,misinterpreted,mercenary,mentality,marsellus,lupus,lumbar,lovesick,lobsters,leaky,laundering,latch,jafar,instinctively,inspires,indoors,incarcerated,hundredth,handkerchief,gynecologist,guittierez,groundhog,grinning,goodbyes,geese,fullest,eyelashes,eyelash,enquirer,endlessly,elusive,disarm,detest,deluding,dangle,cotillion,corsage,conjugal,confessional,cones,commandment,coded,coals,chuckle,christmastime,cheeseburgers,chardonnay,celery,campfire,calming,burritos,brundle,broflovski,brighten,borderline,blinked,bling,beauties,bauers,battered,articulate,alienated,ahhhhh,agamemnon,accountants,y'see,wrongful,wrapper,workaholic,winnebago,whispered,warts,vacate,unworthy,unanswered,tonane,tolerated,throwin,throbbing,thrills,thorns,thereof,there've,tarot,sunscreen,stretcher,stereotype,soggy,sobbing,sizable,sightings,shucks,shrapnel,sever,senile,seaboard,scorned,saver,rebellious,rained,putty,prenup,pores,pinching,pertinent,peeping,paints,ovulating,opposites,occult,nutcracker,nutcase,newsstand,newfound,mocked,midterms,marshmallow,marbury,maclaren,leans,krudski,knowingly,keycard,junkies,juilliard,jolinar,irritable,invaluable,inuit,intoxicating,instruct,insolent,inexcusable,incubator,illustrious,hunsecker,houseguest,homosexuals,homeroom,hernia,harming,handgun,hallways,hallucination,gunshots,groupies,groggy,goiter,gingerbread,giggling,frigging,fledged,fedex,fairies,exchanging,exaggeration,esteemed,enlist,drags,dispense,disloyal,disconnect,desks,dentists,delacroix,degenerate,daydreaming,cushions,cuddly,corroborate,complexion,compensated,cobbler,closeness,chilled,checkmate,channing,carousel,calms,bylaws,benefactor,ballgame,baiting,backstabbing,artifact,airspace,adversary,actin,accuses,accelerant,abundantly,abstinence,zissou,zandt,yapping,witchy,willows,whadaya,vilandra,veiled,undress,undivided,underestimating,ultimatums,twirl,truckload,tremble,toasting,tingling,tents,tempered,sulking,stunk,sponges,spills,softly,snipers,scourge,rooftop,riana,revolting,revisit,refreshments,redecorating,recapture,raysy,pretense,prejudiced,precogs,pouting,poofs,pimple,piles,pediatrician,padre,packets,paces,orvelle,oblivious,objectivity,nighttime,nervosa,mexicans,meurice,melts,matchmaker,maeby,lugosi,lipnik,leprechaun,kissy,kafka,introductions,intestines,inspirational,insightful,inseparable,injections,inadvertently,hussy,huckabees,hittin,hemorrhaging,headin,haystack,hallowed,grudges,granilith,grandkids,grading,gracefully,godsend,gobbles,fragrance,fliers,finchley,farts,eyewitnesses,expendable,existential,dorms,delaying,degrading,deduction,darlings,danes,cylons,counsellor,contraire,consciously,conjuring,congratulating,cokes,buffay,brooch,bitching,bistro,bijou,bewitched,benevolent,bends,bearings,barren,aptitude,amish,amazes,abomination,worldly,whispers,whadda,wayward,wailing,vanishing,upscale,untouchable,unspoken,uncontrollable,unavoidable,unattended,trite,transvestite,toupee,timid,timers,terrorizing,swana,stumped,strolling,storybook,storming,stomachs,stoked,stationery,springtime,spontaneity,spits,spins,soaps,sentiments,scramble,scone,rooftops,retract,reflexes,rawdon,ragged,quirky,quantico,psychologically,prodigal,pounce,potty,pleasantries,pints,petting,perceive,onstage,notwithstanding,nibble,newmans,neutralize,mutilated,millionaires,mayflower,masquerade,mangy,macreedy,lunatics,lovable,locating,limping,lasagna,kwang,keepers,juvie,jaded,ironing,intuitive,intensely,insure,incantation,hysteria,hypnotize,humping,happenin,griet,grasping,glorified,ganging,g'night,focker,flunking,flimsy,flaunting,fixated,fitzwallace,fainting,eyebrow,exonerated,ether,electrician,egotistical,earthly,dusted,dignify,detonation,debrief,dazzling,dan'l,damnedest,daisies,crushes,crucify,contraband,confronting,collapsing,cocked,clicks,cliche,circled,chandelier,carburetor,callers,broads,breathes,bloodshed,blindsided,blabbing,bialystock,bashing,ballerina,aviva,arteries,anomaly,airstrip,agonizing,adjourn,aaaaa,yearning,wrecker,witnessing,whence,warhead,unsure,unheard,unfreeze,unfold,unbalanced,ugliest,troublemaker,toddler,tiptoe,threesome,thirties,thermostat,swipe,surgically,subtlety,stung,stumbling,stubs,stride,strangling,sprayed,socket,smuggled,showering,shhhhh,sabotaging,rumson,rounding,risotto,repairman,rehearsed,ratty,ragging,radiology,racquetball,racking,quieter,quicksand,prowl,prompt,premeditated,prematurely,prancing,porcupine,plated,pinocchio,peeked,peddle,panting,overweight,overrun,outing,outgrown,obsess,nursed,nodding,negativity,negatives,musketeers,mugger,motorcade,merrily,matured,masquerading,marvellous,maniacs,lovey,louse,linger,lilies,lawful,kudos,knuckle,juices,judgments,itches,intolerable,intermission,inept,incarceration,implication,imaginative,huckleberry,holster,heartburn,gunna,groomed,graciously,fulfillment,fugitives,forsaking,forgives,foreseeable,flavors,flares,fixation,fickle,fantasize,famished,fades,expiration,exclamation,erasing,eiffel,eerie,earful,duped,dulles,dissing,dissect,dispenser,dilated,detergent,desdemona,debriefing,damper,curing,crispina,crackpot,courting,cordial,conflicted,comprehension,commie,cleanup,chiropractor,charmer,chariot,cauldron,catatonic,bullied,buckets,brilliantly,breathed,booths,boardroom,blowout,blindness,blazing,biologically,bibles,biased,beseech,barbaric,balraj,audacity,anticipating,alcoholics,airhead,agendas,admittedly,absolution,youre,yippee,wittlesey,withheld,willful,whammy,weakest,washes,virtuous,videotapes,vials,unplugged,unpacked,unfairly,turbulence,tumbling,tricking,tremendously,traitors,torches,tinga,thyroid,teased,tawdry,taker,sympathies,swiped,sundaes,suave,strut,stepdad,spewing,spasm,socialize,slither,simulator,shutters,shrewd,shocks,semantics,schizophrenic,scans,savages,rya'c,runny,ruckus,royally,roadblocks,rewriting,revoke,repent,redecorate,recovers,recourse,ratched,ramali,racquet,quince,quiche,puppeteer,puking,puffed,problemo,praises,pouch,postcards,pooped,poised,piled,phoney,phobia,patching,parenthood,pardner,oozing,ohhhhh,numbing,nostril,nosey,neatly,nappa,nameless,mortuary,moronic,modesty,midwife,mcclane,matuka,maitre,lumps,lucid,loosened,loins,lawnmower,lamotta,kroehner,jinxy,jessep,jamming,jailhouse,jacking,intruders,inhuman,infatuated,indigestion,implore,implanted,hormonal,hoboken,hillbilly,heartwarming,headway,hatched,hartmans,harping,grapevine,gnome,forties,flyin,flirted,fingernail,exhilarating,enjoyment,embark,dumper,dubious,drell,docking,disillusioned,dishonor,disbarred,dicey,custodial,counterproductive,corned,cords,contemplate,concur,conceivable,cobblepot,chickened,checkout,carpe,cap'n,campers,buyin,bullies,braid,boxed,bouncy,blueberries,blubbering,bloodstream,bigamy,beeped,bearable,autographs,alarming,wretch,wimps,widower,whirlwind,whirl,warms,vandelay,unveiling,undoing,unbecoming,turnaround,touche,togetherness,tickles,ticker,teensy,taunt,sweethearts,stitched,standpoint,staffers,spotless,soothe,smothered,sickening,shouted,shepherds,shawl,seriousness,schooled,schoolboy,s'mores,roped,reminders,raggedy,preemptive,plucked,pheromones,particulars,pardoned,overpriced,overbearing,outrun,ohmigod,nosing,nicked,neanderthal,mosquitoes,mortified,milky,messin,mecha,markinson,marivellas,mannequin,manderley,madder,macready,lookie,locusts,lifetimes,lanna,lakhi,kholi,impersonate,hyperdrive,horrid,hopin,hogging,hearsay,harpy,harboring,hairdo,hafta,grasshopper,gobble,gatehouse,foosball,floozy,fished,firewood,finalize,felons,euphemism,entourage,elitist,elegance,drokken,drier,dredge,dossier,diseased,diarrhea,diagnose,despised,defuse,d'amour,contesting,conserve,conscientious,conjured,collars,clogs,chenille,chatty,chamomile,casing,calculator,brittle,breached,blurted,birthing,bikinis,astounding,assaulting,aroma,appliance,antsy,amnio,alienating,aliases,adolescence,xerox,wrongs,workload,willona,whistling,werewolves,wallaby,unwelcome,unseemly,unplug,undermining,ugliness,tyranny,tuesdays,trumpets,transference,ticks,tangible,tagging,swallowing,superheroes,studs,strep,stowed,stomping,steffy,sprain,spouting,sponsoring,sneezing,smeared,slink,shakin,sewed,seatbelt,scariest,scammed,sanctimonious,roasting,rightly,retinal,rethinking,resented,reruns,remover,racks,purest,progressing,presidente,preeclampsia,postponement,portals,poppa,pliers,pinning,pelvic,pampered,padding,overjoyed,ooooo,one'll,octavius,nonono,nicknames,neurosurgeon,narrows,misled,mislead,mishap,milltown,milking,meticulous,mediocrity,meatballs,machete,lurch,layin,knockin,khruschev,jurors,jumpin,jugular,jeweler,intellectually,inquiries,indulging,indestructible,indebted,imitate,ignores,hyperventilating,hyenas,hurrying,hermano,hellish,heheh,harshly,handout,grunemann,glances,giveaway,getup,gerome,furthest,frosting,frail,forwarded,forceful,flavored,flammable,flaky,fingered,fatherly,ethic,embezzlement,duffel,dotted,distressed,disobey,disappearances,dinky,diminish,diaphragm,deuces,creme,courteous,comforts,coerced,clots,clarification,chunks,chickie,chases,chaperoning,cartons,caper,calves,caged,bustin,bulging,bringin,boomhauer,blowin,blindfolded,biscotti,ballplayer,bagging,auster,assurances,aschen,arraigned,anonymity,alters,albatross,agreeable,adoring,abduct,wolfi,weirded,watchers,washroom,warheads,vincennes,urgency,understandably,uncomplicated,uhhhh,twitching,treadmill,thermos,tenorman,tangle,talkative,swarm,surrendering,summoning,strive,stilts,stickers,squashed,spraying,sparring,soaring,snort,sneezed,slaps,skanky,singin,sidle,shreck,shortness,shorthand,sharper,shamed,sadist,rydell,rusik,roulette,resumes,respiration,recount,reacts,purgatory,princesses,presentable,ponytail,plotted,pinot,pigtails,phillippe,peddling,paroled,orbed,offends,o'hara,moonlit,minefield,metaphors,malignant,mainframe,magicks,maggots,maclaine,loathing,leper,leaps,leaping,lashed,larch,larceny,lapses,ladyship,juncture,jiffy,jakov,invoke,infantile,inadmissible,horoscope,hinting,hideaway,hesitating,heddy,heckles,hairline,gripe,gratifying,governess,goebbels,freddo,foresee,fascination,exemplary,executioner,etcetera,escorts,endearing,eaters,earplugs,draped,disrupting,disagrees,dimes,devastate,detain,depositions,delicacy,darklighter,cynicism,cyanide,cutters,cronus,continuance,conquering,confiding,compartments,combing,cofell,clingy,cleanse,christmases,cheered,cheekbones,buttle,burdened,bruenell,broomstick,brained,bozos,bontecou,bluntman,blazes,blameless,bizarro,bellboy,beaucoup,barkeep,awaken,astray,assailant,appease,aphrodisiac,alleys,yesss,wrecks,woodpecker,wondrous,wimpy,willpower,wheeling,weepy,waxing,waive,videotaped,veritable,untouched,unlisted,unfounded,unforeseen,twinge,triggers,traipsing,toxin,tombstone,thumping,therein,testicles,telephones,tarmac,talby,tackled,swirling,suicides,suckered,subtitles,sturdy,strangler,stockbroker,stitching,steered,standup,squeal,sprinkler,spontaneously,splendor,spiking,spender,snipe,snagged,skimming,siddown,showroom,shovels,shotguns,shoelaces,shitload,shellfish,sharpest,shadowy,seizing,scrounge,scapegoat,sayonara,saddled,rummaging,roomful,renounce,reconsidered,recharge,realistically,radioed,quirks,quadrant,punctual,practising,pours,poolhouse,poltergeist,pocketbook,plainly,picnics,pesto,pawing,passageway,partied,oneself,numero,nostalgia,nitwit,neuro,mixer,meanest,mcbeal,matinee,margate,marce,manipulations,manhunt,manger,magicians,loafers,litvack,lightheaded,lifeguard,lawns,laughingstock,ingested,indignation,inconceivable,imposition,impersonal,imbecile,huddled,housewarming,horizons,homicides,hiccups,hearse,hardened,gushing,gushie,greased,goddamit,freelancer,forging,fondue,flustered,flung,flinch,flicker,fixin,festivus,fertilizer,farted,faggots,exonerate,evict,enormously,encrypted,emdash,embracing,duress,dupres,dowser,doormat,disfigured,disciplined,dibbs,depository,deathbed,dazzled,cuttin,cures,crowding,crepe,crammed,copycat,contradict,confidant,condemning,conceited,commute,comatose,clapping,circumference,chuppah,chore,choksondik,chestnuts,briault,bottomless,bonnet,blokes,berluti,beret,beggars,bankroll,bania,athos,arsenic,apperantly,ahhhhhh,afloat,accents,zipped,zeros,zeroes,zamir,yuppie,youngsters,yorkers,wisest,wipes,wield,whyn't,weirdos,wednesdays,vicksburg,upchuck,untraceable,unsupervised,unpleasantness,unhook,unconscionable,uncalled,trappings,tragedies,townie,thurgood,things'll,thine,tetanus,terrorize,temptations,tanning,tampons,swarming,straitjacket,steroid,startling,starry,squander,speculating,sollozzo,sneaked,slugs,skedaddle,sinker,silky,shortcomings,sellin,seasoned,scrubbed,screwup,scrapes,scarves,sandbox,salesmen,rooming,romances,revere,reproach,reprieve,rearranging,ravine,rationalize,raffle,punchy,psychobabble,provocation,profoundly,prescriptions,preferable,polishing,poached,pledges,pirelli,perverts,oversized,overdressed,outdid,nuptials,nefarious,mouthpiece,motels,mopping,mongrel,missin,metaphorically,mertin,memos,melodrama,melancholy,measles,meaner,mantel,maneuvering,mailroom,luring,listenin,lifeless,licks,levon,legwork,kneecaps,kippur,kiddie,kaput,justifiable,insistent,insidious,innuendo,innit,indecent,imaginable,horseshit,hemorrhoid,hella,healthiest,haywire,hamsters,hairbrush,grouchy,grisly,gratuitous,glutton,glimmer,gibberish,ghastly,gentler,generously,geeky,fuhrer,fronting,foolin,faxes,faceless,extinguisher,expel,etched,endangering,ducked,dodgeball,dives,dislocated,discrepancy,devour,derail,dementia,daycare,cynic,crumbling,cowardice,covet,cornwallis,corkscrew,cookbook,commandments,coincidental,cobwebs,clouded,clogging,clicking,clasp,chopsticks,chefs,chaps,cashing,carat,calmer,brazen,brainwashing,bradys,bowing,boned,bloodsucking,bleachers,bleached,bedpan,bearded,barrenger,bachelors,awwww,assures,assigning,asparagus,apprehend,anecdote,amoral,aggravation,afoot,acquaintances,accommodating,yakking,worshipping,wladek,willya,willies,wigged,whoosh,whisked,watered,warpath,volts,violates,valuables,uphill,unwise,untimely,unsavory,unresponsive,unpunished,unexplained,tubby,trolling,toxicology,tormented,toothache,tingly,timmiihh,thursdays,thoreau,terrifies,temperamental,telegrams,talkie,takers,symbiote,swirl,suffocate,stupider,strapping,steckler,springing,someway,sleepyhead,sledgehammer,slant,slams,showgirl,shoveling,shmoopy,sharkbait,shan't,scrambling,schematics,sandeman,sabbatical,rummy,reykjavik,revert,responsive,rescheduled,requisition,relinquish,rejoice,reckoning,recant,rebadow,reassurance,rattlesnake,ramble,primed,pricey,prance,pothole,pocus,persist,perpetrated,pekar,peeling,pastime,parmesan,pacemaker,overdrive,ominous,observant,nothings,noooooo,nonexistent,nodded,nieces,neglecting,nauseating,mutated,musket,mumbling,mowing,mouthful,mooseport,monologue,mistrust,meetin,masseuse,mantini,mailer,madre,lowlifes,locksmith,livid,liven,limos,liberating,lhasa,leniency,leering,laughable,lashes,lasagne,laceration,korben,katan,kalen,jittery,jammies,irreplaceable,intubate,intolerant,inhaler,inhaled,indifferent,indifference,impound,impolite,humbly,heroics,heigh,guillotine,guesthouse,grounding,grips,gossiping,goatee,gnomes,gellar,frutt,frobisher,freudian,foolishness,flagged,femme,fatso,fatherhood,fantasized,fairest,faintest,eyelids,extravagant,extraterrestrial,extraordinarily,escalator,elevate,drivel,dissed,dismal,disarray,dinnertime,devastation,dermatologist,delicately,defrost,debutante,debacle,damone,dainty,cuvee,culpa,crucified,creeped,crayons,courtship,convene,congresswoman,concocted,compromises,comprende,comma,coleslaw,clothed,clinically,chickenshit,checkin,cesspool,caskets,calzone,brothel,boomerang,bodega,blasphemy,bitsy,bicentennial,berlini,beatin,beards,barbas,barbarians,backpacking,arrhythmia,arousing,arbitrator,antagonize,angling,anesthetic,altercation,aggressor,adversity,acathla,aaahhh,wreaking,workup,wonderin,wither,wielding,what'm,what'cha,waxed,vibrating,veterinarian,venting,vasey,valor,validate,upholstery,untied,unscathed,uninterrupted,unforgiving,undies,uncut,twinkies,tucking,treatable,treasured,tranquility,townspeople,torso,tomei,tipsy,tinsel,tidings,thirtieth,tantrums,tamper,talky,swayed,swapping,suitor,stylist,stirs,standoff,sprinklers,sparkly,snobby,snatcher,smoother,sleepin,shrug,shoebox,sheesh,shackles,setbacks,sedatives,screeching,scorched,scanned,satyr,roadblock,riverbank,ridiculed,resentful,repellent,recreate,reconvene,rebuttal,realmedia,quizzes,questionnaire,punctured,pucker,prolong,professionalism,pleasantly,pigsty,penniless,paychecks,patiently,parading,overactive,ovaries,orderlies,oracles,oiled,offending,nudie,neonatal,neighborly,moops,moonlighting,mobilize,mmmmmm,milkshake,menial,meats,mayan,maxed,mangled,magua,lunacy,luckier,liters,lansbury,kooky,knowin,jeopardized,inkling,inhalation,inflated,infecting,incense,inbound,impractical,impenetrable,idealistic,i'mma,hypocrites,hurtin,humbled,hologram,hokey,hocus,hitchhiking,hemorrhoids,headhunter,hassled,harts,hardworking,haircuts,hacksaw,genitals,gazillion,gammy,gamesphere,fugue,footwear,folly,flashlights,fives,filet,extenuating,estrogen,entails,embezzled,eloquent,egomaniac,ducts,drowsy,drones,doree,donovon,disguises,diggin,deserting,depriving,defying,deductible,decorum,decked,daylights,daybreak,dashboard,damnation,cuddling,crunching,crickets,crazies,councilman,coughed,conundrum,complimented,cohaagen,clutching,clued,clader,cheques,checkpoint,chats,channeling,ceases,carasco,capisce,cantaloupe,cancelling,campsite,burglars,breakfasts,bra'tac,blueprint,bleedin,blabbed,beneficiary,basing,avert,atone,arlyn,approves,apothecary,antiseptic,aleikuum,advisement,zadir,wobbly,withnail,whattaya,whacking,wedged,wanders,vaginal,unimaginable,undeniable,unconditionally,uncharted,unbridled,tweezers,tvmegasite,trumped,triumphant,trimming,treading,tranquilizers,toontown,thunk,suture,suppressing,strays,stonewall,stogie,stepdaughter,stace,squint,spouses,splashed,speakin,sounder,sorrier,sorrel,sombrero,solemnly,softened,snobs,snippy,snare,smoothing,slump,slimeball,slaving,silently,shiller,shakedown,sensations,scrying,scrumptious,screamin,saucy,santoses,roundup,roughed,rosary,robechaux,retrospect,rescind,reprehensible,repel,remodeling,reconsidering,reciprocate,railroaded,psychics,promos,prob'ly,pristine,printout,priestess,prenuptial,precedes,pouty,phoning,peppy,pariah,parched,panes,overloaded,overdoing,nymphs,nother,notebooks,nearing,nearer,monstrosity,milady,mieke,mephesto,medicated,marshals,manilow,mammogram,m'lady,lotsa,loopy,lesion,lenient,learner,laszlo,kross,kinks,jinxed,involuntary,insubordination,ingrate,inflatable,incarnate,inane,hypoglycemia,huntin,humongous,hoodlum,honking,hemorrhage,helpin,hathor,hatching,grotto,grandmama,gorillas,godless,girlish,ghouls,gershwin,frosted,flutter,flagpole,fetching,fatter,faithfully,exert,evasion,escalate,enticing,enchantress,elopement,drills,downtime,downloading,dorks,doorways,divulge,dissociative,disgraceful,disconcerting,deteriorate,destinies,depressive,dented,denim,decruz,decidedly,deactivate,daydreams,curls,culprit,cruelest,crippling,cranberries,corvis,copped,commend,coastguard,cloning,cirque,churning,chock,chivalry,catalogues,cartwheels,carols,canister,buttered,bundt,buljanoff,bubbling,brokers,broaden,brimstone,brainless,bores,badmouthing,autopilot,ascertain,aorta,ampata,allenby,accosted,absolve,aborted,aaagh,aaaaaah,yonder,yellin,wyndham,wrongdoing,woodsboro,wigging,wasteland,warranty,waltzed,walnuts,vividly,veggie,unnecessarily,unloaded,unicorns,understated,unclean,umbrellas,twirling,turpentine,tupperware,triage,treehouse,tidbit,tickled,threes,thousandth,thingie,terminally,teething,tassel,talkies,swoon,switchboard,swerved,suspiciously,subsequentlyne,subscribe,strudel,stroking,strictest,stensland,starin,stannart,squirming,squealing,sorely,softie,snookums,sniveling,smidge,sloth,skulking,simian,sightseeing,siamese,shudder,shoppers,sharpen,shannen,semtex,secondhand,seance,scowl,scorn,safekeeping,russe,rummage,roshman,roomies,roaches,rinds,retrace,retires,resuscitate,rerun,reputations,rekall,refreshment,reenactment,recluse,ravioli,raves,raking,purses,punishable,punchline,puked,prosky,previews,poughkeepsie,poppins,polluted,placenta,pissy,petulant,perseverance,pears,pawns,pastries,partake,panky,palate,overzealous,orchids,obstructing,objectively,obituaries,obedient,nothingness,musty,motherly,mooning,momentous,mistaking,minutemen,milos,microchip,meself,merciless,menelaus,mazel,masturbate,mahogany,lysistrata,lillienfield,likable,liberate,leveled,letdown,larynx,lardass,lainey,lagged,klorel,kidnappings,keyed,karmic,jeebies,irate,invulnerable,intrusive,insemination,inquire,injecting,informative,informants,impure,impasse,imbalance,illiterate,hurled,hunts,hematoma,headstrong,handmade,handiwork,growling,gorky,getcha,gesundheit,gazing,galley,foolishly,fondness,floris,ferocious,feathered,fateful,fancies,fakes,faker,expire,ever'body,essentials,eskimos,enlightening,enchilada,emissary,embolism,elsinore,ecklie,drenched,drazi,doped,dogging,doable,dislikes,dishonesty,disengage,discouraging,derailed,deformed,deflect,defer,deactivated,crips,constellations,congressmen,complimenting,clubbing,clawing,chromium,chimes,chews,cheatin,chaste,cellblock,caving,catered,catacombs,calamari,bucking,brulee,brits,brisk,breezes,bounces,boudoir,binks,better'n,bellied,behrani,behaves,bedding,balmy,badmouth,backers,avenging,aromatherapy,armpit,armoire,anythin,anonymously,anniversaries,aftershave,affliction,adrift,admissible,adieu,acquittal,yucky,yearn,whitter,whirlpool,wendigo,watchdog,wannabes,wakey,vomited,voicemail,valedictorian,uttered,unwed,unrequited,unnoticed,unnerving,unkind,unjust,uniformed,unconfirmed,unadulterated,unaccounted,uglier,turnoff,trampled,tramell,toads,timbuktu,throwback,thimble,tasteless,tarantula,tamale,takeovers,swish,supposing,streaking,stargher,stanzi,stabs,squeamish,splattered,spiritually,spilt,speciality,smacking,skywire,skips,skaara,simpatico,shredding,showin,shortcuts,shite,shielding,shamelessly,serafine,sentimentality,seasick,schemer,scandalous,sainted,riedenschneider,rhyming,revel,retractor,retards,resurrect,remiss,reminiscing,remanded,reiben,regains,refuel,refresher,redoing,redheaded,reassured,rearranged,rapport,qumar,prowling,prejudices,precarious,powwow,pondering,plunger,plunged,pleasantville,playpen,phlegm,perfected,pancreas,paley,ovary,outbursts,oppressed,ooohhh,omoroca,offed,o'toole,nurture,nursemaid,nosebleed,necktie,muttering,munchies,mucking,mogul,mitosis,misdemeanor,miscarried,millionth,migraines,midler,manicurist,mandelbaum,manageable,malfunctioned,magnanimous,loudmouth,longed,lifestyles,liddy,lickety,leprechauns,komako,klute,kennel,justifying,irreversible,inventing,intergalactic,insinuate,inquiring,ingenuity,inconclusive,incessant,improv,impersonation,hyena,humperdinck,hubba,housework,hoffa,hither,hissy,hippy,hijacked,heparin,hellooo,hearth,hassles,hairstyle,hahahaha,hadda,guys'll,gutted,gulls,gritty,grievous,graft,gossamer,gooder,gambled,gadgets,fundamentals,frustrations,frolicking,frock,frilly,foreseen,footloose,fondly,flirtation,flinched,flatten,farthest,exposer,evading,escrow,empathize,embryos,embodiment,ellsberg,ebola,dulcinea,dreamin,drawbacks,doting,doose,doofy,disturbs,disorderly,disgusts,detox,denominator,demeanor,deliriously,decode,debauchery,croissant,cravings,cranked,coworkers,councilor,confuses,confiscate,confines,conduit,compress,combed,clouding,clamps,cinch,chinnery,celebratory,catalogs,carpenters,carnal,canin,bundys,bulldozer,buggers,bueller,brainy,booming,bookstores,bloodbath,bittersweet,bellhop,beeping,beanstalk,beady,baudelaire,bartenders,bargains,averted,armadillo,appreciating,appraised,antlers,aloof,allowances,alleyway,affleck,abject,zilch,youore,xanax,wrenching,wouldn,witted,wicca,whorehouse,whooo,whips,vouchers,victimized,vicodin,untested,unsolicited,unfocused,unfettered,unfeeling,unexplainable,understaffed,underbelly,tutorial,tryst,trampoline,towering,tirade,thieving,thang,swimmin,swayzak,suspecting,superstitions,stubbornness,streamers,strattman,stonewalling,stiffs,stacking,spout,splice,sonrisa,smarmy,slows,slicing,sisterly,shrill,shined,seeming,sedley,seatbelts,scour,scold,schoolyard,scarring,salieri,rustling,roxbury,rewire,revved,retriever,reputable,remodel,reins,reincarnation,rance,rafters,rackets,quail,pumbaa,proclaim,probing,privates,pried,prewedding,premeditation,posturing,posterity,pleasurable,pizzeria,pimps,penmanship,penchant,pelvis,overturn,overstepped,overcoat,ovens,outsmart,outed,ooohh,oncologist,omission,offhand,odour,nyazian,notarized,nobody'll,nightie,navel,nabbed,mystique,mover,mortician,morose,moratorium,mockingbird,mobsters,mingling,methinks,messengered,merde,masochist,martouf,martians,marinara,manray,majorly,magnifying,mackerel,lurid,lugging,lonnegan,loathsome,llantano,liberace,leprosy,latinos,lanterns,lamest,laferette,kraut,intestine,innocencia,inhibitions,ineffectual,indisposed,incurable,inconvenienced,inanimate,improbable,implode,hydrant,hustling,hustled,huevos,how'm,hooey,hoods,honcho,hinge,hijack,heimlich,hamunaptra,haladki,haiku,haggle,gutsy,grunting,grueling,gribbs,greevy,grandstanding,godparents,glows,glistening,gimmick,gaping,fraiser,formalities,foreigner,folders,foggy,fitty,fiends,fe'nos,favours,eyeing,extort,expedite,escalating,epinephrine,entitles,entice,eminence,eights,earthlings,eagerly,dunville,dugout,doublemeat,doling,dispensing,dispatcher,discoloration,diners,diddly,dictates,diazepam,derogatory,delights,defies,decoder,dealio,danson,cutthroat,crumbles,croissants,crematorium,craftsmanship,could'a,cordless,cools,conked,confine,concealing,complicates,communique,cockamamie,coasters,clobbered,clipping,clipboard,clemenza,cleanser,circumcision,chanukah,certainaly,cellmate,cancels,cadmium,buzzed,bumstead,bucko,browsing,broth,braver,boggling,bobbing,blurred,birkhead,benet,belvedere,bellies,begrudge,beckworth,banky,baldness,baggy,babysitters,aversion,astonished,assorted,appetites,angina,amiss,ambulances,alibis,airway,admires,adhesive,yoyou,xxxxxx,wreaked,wracking,woooo,wooing,wised,wilshire,wedgie,waging,violets,vincey,uplifting,untrustworthy,unmitigated,uneventful,undressing,underprivileged,unburden,umbilical,tweaking,turquoise,treachery,tosses,torching,toothpick,toasts,thickens,tereza,tenacious,teldar,taint,swill,sweatin,subtly,subdural,streep,stopwatch,stockholder,stillwater,stalkers,squished,squeegee,splinters,spliced,splat,spied,spackle,sophistication,snapshots,smite,sluggish,slithered,skeeters,sidewalks,sickly,shrugs,shrubbery,shrieking,shitless,settin,sentinels,selfishly,scarcely,sangria,sanctum,sahjhan,rustle,roving,rousing,rosomorf,riddled,responsibly,renoir,remoray,remedial,refundable,redirect,recheck,ravenwood,rationalizing,ramus,ramelle,quivering,pyjamas,psychos,provocations,prouder,protestors,prodded,proctologist,primordial,pricks,prickly,precedents,pentangeli,pathetically,parka,parakeet,panicky,overthruster,outsmarted,orthopedic,oncoming,offing,nutritious,nuthouse,nourishment,nibbling,newlywed,narcissist,mutilation,mundane,mummies,mumble,mowed,morvern,mortem,mopes,molasses,misplace,miscommunication,miney,midlife,menacing,memorizing,massaging,masking,magnets,luxuries,lounging,lothario,liposuction,lidocaine,libbets,levitate,leeway,launcelot,larek,lackeys,kumbaya,kryptonite,knapsack,keyhole,katarangura,juiced,jakey,ironclad,invoice,intertwined,interlude,interferes,injure,infernal,indeedy,incur,incorrigible,incantations,impediment,igloo,hysterectomy,hounded,hollering,hindsight,heebie,havesham,hasenfuss,hankering,hangers,hakuna,gutless,gusto,grubbing,grrrr,grazed,gratification,grandeur,gorak,godammit,gnawing,glanced,frostbite,frees,frazzled,fraulein,fraternizing,fortuneteller,formaldehyde,followup,foggiest,flunky,flickering,firecrackers,figger,fetuses,fates,eyeliner,extremities,extradited,expires,exceedingly,evaporate,erupt,epileptic,entrails,emporium,egregious,eggshells,easing,duwayne,droll,dreyfuss,dovey,doubly,doozy,donkeys,donde,distrust,distressing,disintegrate,discreetly,decapitated,dealin,deader,dashed,darkroom,dares,daddies,dabble,cushy,cupcakes,cuffed,croupier,croak,crapped,coursing,coolers,contaminate,consummated,construed,condos,concoction,compulsion,commish,coercion,clemency,clairvoyant,circulate,chesterton,checkered,charlatan,chaperones,categorically,cataracts,carano,capsules,capitalize,burdon,bullshitting,brewed,breathless,breasted,brainstorming,bossing,borealis,bonsoir,bobka,boast,blimp,bleep,bleeder,blackouts,bisque,billboards,beatings,bayberry,bashed,bamboozled,balding,baklava,baffled,backfires,babak,awkwardness,attest,attachments,apologizes,anyhoo,antiquated,alcante,advisable,aahhh,aaahh,zatarc,yearbooks,wuddya,wringing,womanhood,witless,winging,whatsa,wetting,waterproof,wastin,vogelman,vocation,vindicated,vigilance,vicariously,venza,vacuuming,utensils,uplink,unveil,unloved,unloading,uninhibited,unattached,tweaked,turnips,trinkets,toughen,toting,topside,terrors,terrify,technologically,tarnish,tagliati,szpilman,surly,supple,summation,suckin,stepmom,squeaking,splashmore,souffle,solitaire,solicitation,solarium,smokers,slugged,slobbering,skylight,skimpy,sinuses,silenced,sideburns,shrinkage,shoddy,shhhhhh,shelled,shareef,shangri,seuss,serenade,scuffle,scoff,scanners,sauerkraut,sardines,sarcophagus,salvy,rusted,russells,rowboat,rolfsky,ringside,respectability,reparations,renegotiate,reminisce,reimburse,regimen,raincoat,quibble,puzzled,purposefully,pubic,proofing,prescribing,prelim,poisons,poaching,personalized,personable,peroxide,pentonville,payphone,payoffs,paleontology,overflowing,oompa,oddest,objecting,o'hare,o'daniel,notches,nobody'd,nightstand,neutralized,nervousness,nerdy,needlessly,naquadah,nappy,nantucket,nambla,mountaineer,motherfuckin,morrie,monopolizing,mohel,mistreated,misreading,misbehave,miramax,minivan,milligram,milkshakes,metamorphosis,medics,mattresses,mathesar,matchbook,matata,marys,malucci,magilla,lymphoma,lowers,lordy,linens,lindenmeyer,limelight,leapt,laxative,lather,lapel,lamppost,laguardia,kindling,kegger,kawalsky,juries,jokin,jesminder,interning,innermost,injun,infallible,industrious,indulgence,incinerator,impossibility,impart,illuminate,iguanas,hypnotic,hyped,hospitable,hoses,homemaker,hirschmuller,helpers,headset,guardianship,guapo,grubby,granola,granddaddy,goren,goblet,gluttony,globes,giorno,getter,geritol,gassed,gaggle,foxhole,fouled,foretold,floorboards,flippers,flaked,fireflies,feedings,fashionably,farragut,fallback,facials,exterminate,excites,everything'll,evenin,ethically,ensue,enema,empath,eluded,eloquently,eject,edema,dumpling,droppings,dolled,distasteful,disputing,displeasure,disdain,deterrent,dehydration,defied,decomposing,dawned,dailies,custodian,crusts,crucifix,crowning,crier,crept,craze,crawls,couldn,correcting,corkmaster,copperfield,cooties,contraption,consumes,conspire,consenting,consented,conquers,congeniality,complains,communicator,commendable,collide,coladas,colada,clout,clooney,classifieds,clammy,civility,cirrhosis,chink,catskills,carvers,carpool,carelessness,cardio,carbs,capades,butabi,busmalis,burping,burdens,bunks,buncha,bulldozers,browse,brockovich,breakthroughs,bravado,boogety,blossoms,blooming,bloodsucker,blight,betterton,betrayer,belittle,beeps,bawling,barts,bartending,bankbooks,babish,atropine,assertive,armbrust,anyanka,annoyance,anemic,anago,airwaves,aimlessly,aaargh,aaand,yoghurt,writhing,workable,winking,winded,widen,whooping,whiter,whatya,wazoo,voila,virile,vests,vestibule,versed,vanishes,urkel,uproot,unwarranted,unscheduled,unparalleled,undergrad,tweedle,turtleneck,turban,trickery,transponder,toyed,townhouse,thyself,thunderstorm,thinning,thawed,tether,technicalities,tau'ri,tarnished,taffeta,tacked,systolic,swerve,sweepstakes,swabs,suspenders,superwoman,sunsets,succulent,subpoenas,stumper,stosh,stomachache,stewed,steppin,stepatech,stateside,spicoli,sparing,soulless,sonnets,sockets,snatching,smothering,slush,sloman,slashing,sitters,simpleton,sighs,sidra,sickens,shunned,shrunken,showbiz,shopped,shimmering,shagging,semblance,segue,sedation,scuzzlebutt,scumbags,screwin,scoundrels,scarsdale,scabs,saucers,saintly,saddened,runaways,runaround,rheya,resenting,rehashing,rehabilitated,regrettable,refreshed,redial,reconnecting,ravenous,raping,rafting,quandary,pylea,putrid,puffing,psychopathic,prunes,probate,prayin,pomegranate,plummeting,planing,plagues,pinata,pithy,perversion,personals,perched,peeps,peckish,pavarotti,pajama,packin,pacifier,overstepping,okama,obstetrician,nutso,nuance,normalcy,nonnegotiable,nomak,ninny,nines,nicey,newsflash,neutered,nether,negligee,necrosis,navigating,narcissistic,mylie,muses,momento,moisturizer,moderation,misinformed,misconception,minnifield,mikkos,methodical,mebbe,meager,maybes,matchmaking,masry,markovic,malakai,luzhin,lusting,lumberjack,loopholes,loaning,lightening,leotard,launder,lamaze,kubla,kneeling,kibosh,jumpsuit,joliet,jogger,janover,jakovasaurs,irreparable,innocently,inigo,infomercial,inexplicable,indispensable,impregnated,impossibly,imitating,hunches,hummus,houmfort,hothead,hostiles,hooves,hooligans,homos,homie,hisself,heyyy,hesitant,hangout,handsomest,handouts,hairless,gwennie,guzzling,guinevere,grungy,goading,glaring,gavel,gardino,gangrene,fruitful,friendlier,freckle,freakish,forthright,forearm,footnote,flops,fixer,firecracker,finito,figgered,fezzik,fastened,farfetched,fanciful,familiarize,faire,fahrenheit,extravaganza,exploratory,explanatory,everglades,eunuch,estas,escapade,erasers,emptying,embarassing,dweeb,dutiful,dumplings,dries,drafty,dollhouse,dismissing,disgraced,discrepancies,disbelief,disagreeing,digestion,didnt,deviled,deviated,demerol,delectable,decaying,decadent,dears,dateless,d'algout,cultivating,cryto,crumpled,crumbled,cronies,crease,craves,cozying,corduroy,congratulated,confidante,compressions,complicating,compadre,coerce,classier,chums,chumash,chivalrous,chinpoko,charred,chafing,celibacy,carted,carryin,carpeting,carotid,cannibals,candor,butterscotch,busts,busier,bullcrap,buggin,brookside,brodski,brassiere,brainwash,brainiac,botrelle,bonbon,boatload,blimey,blaring,blackness,bipartisan,bimbos,bigamist,biebe,biding,betrayals,bestow,bellerophon,bedpans,bassinet,basking,barzini,barnyard,barfed,backups,audited,asinine,asalaam,arouse,applejack,annoys,anchovies,ampule,alameida,aggravate,adage,accomplices,yokel,y'ever,wringer,witwer,withdrawals,windward,willfully,whorfin,whimsical,whimpering,weddin,weathered,warmest,wanton,volant,visceral,vindication,veggies,urinate,uproar,unwritten,unwrap,unsung,unsubstantiated,unspeakably,unscrupulous,unraveling,unquote,unqualified,unfulfilled,undetectable,underlined,unattainable,unappreciated,ummmm,ulcers,tylenol,tweak,turnin,tuatha,tropez,trellis,toppings,tootin,toodle,tinkering,thrives,thespis,theatrics,thatherton,tempers,tavington,tartar,tampon,swelled,sutures,sustenance,sunflowers,sublet,stubbins,strutting,strewn,stowaway,stoic,sternin,stabilizing,spiraling,spinster,speedometer,speakeasy,soooo,soiled,sneakin,smithereens,smelt,smacks,slaughterhouse,slacks,skids,sketching,skateboards,sizzling,sixes,sirree,simplistic,shouts,shorted,shoelace,sheeit,shards,shackled,sequestered,selmak,seduces,seclusion,seamstress,seabeas,scoops,scooped,scavenger,satch,s'more,rudeness,romancing,rioja,rifkin,rieper,revise,reunions,repugnant,replicating,repaid,renewing,relaxes,rekindle,regrettably,regenerate,reels,reciting,reappear,readin,ratting,rapes,rancher,rammed,rainstorm,railroading,queers,punxsutawney,punishes,pssst,prudy,proudest,protectors,procrastinating,proactive,priss,postmortem,pompoms,poise,pickings,perfectionist,peretti,people'll,pecking,patrolman,paralegal,paragraphs,paparazzi,pankot,pampering,overstep,overpower,outweigh,omnipotent,odious,nuwanda,nurtured,newsroom,neeson,needlepoint,necklaces,neato,muggers,muffler,mousy,mourned,mosey,mopey,mongolians,moldy,misinterpret,minibar,microfilm,mendola,mended,melissande,masturbating,masbath,manipulates,maimed,mailboxes,magnetism,m'lord,m'honey,lymph,lunge,lovelier,lefferts,leezak,ledgers,larraby,laloosh,kundun,kozinski,knockoff,kissin,kiosk,kennedys,kellman,karlo,kaleidoscope,jeffy,jaywalking,instructing,infraction,informer,infarction,impulsively,impressing,impersonated,impeach,idiocy,hyperbole,hurray,humped,huhuh,hsing,hordes,hoodlums,honky,hitchhiker,hideously,heaving,heathcliff,headgear,headboard,hazing,harem,handprint,hairspray,gutiurrez,goosebumps,gondola,glitches,gasping,frolic,freeways,frayed,fortitude,forgetful,forefathers,fonder,foiled,foaming,flossing,flailing,fitzgeralds,firehouse,finders,fiftieth,fellah,fawning,farquaad,faraway,fancied,extremists,exorcist,exhale,ethros,entrust,ennui,energized,encephalitis,embezzling,elster,elixir,electrolytes,duplex,dryers,drexl,dredging,drawback,don'ts,dobisch,divorcee,disrespected,disprove,disobeying,disinfectant,dingy,digress,dieting,dictating,devoured,devise,detonators,desist,deserter,derriere,deron,deceptive,debilitating,deathwok,daffodils,curtsy,cursory,cuppa,cumin,cronkite,cremation,credence,cranking,coverup,courted,countin,counselling,cornball,contentment,consensual,compost,cluett,cleverly,cleansed,cleanliness,chopec,chomp,chins,chime,cheswick,chessler,cheapest,chatted,cauliflower,catharsis,catchin,caress,camcorder,calorie,cackling,bystanders,buttoned,buttering,butted,buries,burgel,buffoon,brogna,bragged,boutros,bogeyman,blurting,blurb,blowup,bloodhound,blissful,birthmark,bigot,bestest,belted,belligerent,beggin,befall,beeswax,beatnik,beaming,barricade,baggoli,badness,awoke,artsy,artful,aroun,armpits,arming,annihilate,anise,angiogram,anaesthetic,amorous,ambiance,alligators,adoration,admittance,adama,abydos,zonked,zhivago,yorkin,wrongfully,writin,wrappers,worrywart,woops,wonderfalls,womanly,wickedness,whoopie,wholeheartedly,whimper,which'll,wheelchairs,what'ya,warranted,wallop,wading,wacked,virginal,vermouth,vermeil,verger,ventriss,veneer,vampira,utero,ushers,urgently,untoward,unshakable,unsettled,unruly,unlocks,ungodly,undue,uncooperative,uncontrollably,unbeatable,twitchy,tumbler,truest,triumphs,triplicate,tribbey,tortures,tongaree,tightening,thorazine,theres,testifies,teenaged,tearful,taxing,taldor,syllabus,swoops,swingin,suspending,sunburn,stuttering,stupor,strides,strategize,strangulation,stooped,stipulation,stingy,stapled,squeaks,squawking,spoilsport,splicing,spiel,spencers,spasms,spaniard,softener,sodding,soapbox,smoldering,smithbauer,skittish,sifting,sickest,sicilians,shuffling,shrivel,segretti,seeping,securely,scurrying,scrunch,scrote,screwups,schenkman,sawing,savin,satine,sapiens,salvaging,salmonella,sacrilege,rumpus,ruffle,roughing,rotted,rondall,ridding,rickshaw,rialto,rhinestone,restrooms,reroute,requisite,repress,rednecks,redeeming,rayed,ravell,raked,raincheck,raffi,racked,pushin,profess,prodding,procure,presuming,preppy,prednisone,potted,posttraumatic,poorhouse,podiatrist,plowed,pledging,playroom,plait,placate,pinback,picketing,photographing,pharoah,petrak,petal,persecuting,perchance,pellets,peeved,peerless,payable,pauses,pathologist,pagliacci,overwrought,overreaction,overqualified,overheated,outcasts,otherworldly,opinionated,oodles,oftentimes,occured,obstinate,nutritionist,numbness,nubile,nooooooo,nobodies,nepotism,neanderthals,mushu,mucus,mothering,mothballs,monogrammed,molesting,misspoke,misspelled,misconstrued,miscalculated,minimums,mince,mildew,mighta,middleman,mementos,mellowed,mayol,mauled,massaged,marmalade,mardi,makings,lundegaard,lovingly,loudest,lotto,loosing,loompa,looming,longs,loathes,littlest,littering,lifelike,legalities,laundered,lapdog,lacerations,kopalski,knobs,knitted,kittridge,kidnaps,kerosene,karras,jungles,jockeys,iranoff,invoices,invigorating,insolence,insincere,insectopia,inhumane,inhaling,ingrates,infestation,individuality,indeterminate,incomprehensible,inadequacy,impropriety,importer,imaginations,illuminating,ignite,hysterics,hypodermic,hyperventilate,hyperactive,humoring,honeymooning,honed,hoist,hoarding,hitching,hiker,hightail,hemoglobin,hell'd,heinie,growin,grasped,grandparent,granddaughters,gouged,goblins,gleam,glades,gigantor,get'em,geriatric,gatekeeper,gargoyles,gardenias,garcon,garbo,gallows,gabbing,futon,fulla,frightful,freshener,fortuitous,forceps,fogged,fodder,foamy,flogging,flaun,flared,fireplaces,feverish,favell,fattest,fattening,fallow,extraordinaire,evacuating,errant,envied,enchant,enamored,egocentric,dussander,dunwitty,dullest,dropout,dredged,dorsia,doornail,donot,dongs,dogged,dodgy,ditty,dishonorable,discriminating,discontinue,dings,dilly,dictation,dialysis,delly,delightfully,daryll,dandruff,cruddy,croquet,cringe,crimp,credo,crackling,courtside,counteroffer,counterfeiting,corrupting,copping,conveyor,contusions,contusion,conspirator,consoling,connoisseur,confetti,composure,compel,colic,coddle,cocksuckers,coattails,cloned,claustrophobia,clamoring,churn,chugga,chirping,chasin,chapped,chalkboard,centimeter,caymans,catheter,casings,caprica,capelli,cannolis,cannoli,camogli,camembert,butchers,butchered,busboys,bureaucrats,buckled,bubbe,brownstone,bravely,brackley,bouquets,botox,boozing,boosters,bodhi,blunders,blunder,blockage,biocyte,betrays,bested,beryllium,beheading,beggar,begbie,beamed,bastille,barstool,barricades,barbecues,barbecued,bandwagon,backfiring,bacarra,avenged,autopsies,aunties,associating,artichoke,arrowhead,appendage,apostrophe,antacid,ansel,annul,amuses,amped,amicable,amberg,alluring,adversaries,admirers,adlai,acupuncture,abnormality,aaaahhhh,zooming,zippity,zipping,zeroed,yuletide,yoyodyne,yengeese,yeahhh,wrinkly,wracked,withered,winks,windmills,whopping,wendle,weigart,waterworks,waterbed,watchful,wantin,wagging,waaah,vying,ventricle,varnish,vacuumed,unreachable,unprovoked,unmistakable,unfriendly,unfolding,underpaid,uncuff,unappealing,unabomber,typhoid,tuxedos,tushie,turds,tumnus,troubadour,trinium,treaters,treads,transpired,transgression,tought,thready,thins,thinners,techs,teary,tattaglia,tassels,tarzana,tanking,tablecloths,synchronize,symptomatic,sycophant,swimmingly,sweatshop,surfboard,superpowers,sunroom,sunblock,sugarplum,stupidly,strumpet,strapless,stooping,stools,stealthy,stalks,stairmaster,staffer,sshhh,squatting,squatters,spectacularly,sorbet,socked,sociable,snubbed,snorting,sniffles,snazzy,snakebite,smuggler,smorgasbord,smooching,slurping,slouch,slingshot,slaved,skimmed,sisterhood,silliest,sidarthur,sheraton,shebang,sharpening,shanghaied,shakers,sendoff,scurvy,scoliosis,scaredy,scagnetti,sawchuk,saugus,sasquatch,sandbag,saltines,s'pose,roston,rostle,riveting,ristle,rifling,revulsion,reverently,retrograde,restful,resents,reptilian,reorganize,renovating,reiterate,reinvent,reinmar,reibers,reechard,recuse,reconciling,recognizance,reclaiming,recitation,recieved,rebate,reacquainted,rascals,railly,quintuplets,quahog,pygmies,puzzling,punctuality,prosthetic,proms,probie,preys,preserver,preppie,poachers,plummet,plumbers,plannin,pitying,pitfalls,piqued,pinecrest,pinches,pillage,pigheaded,physique,pessimistic,persecute,perjure,percentile,pentothal,pensky,penises,peini,pazzi,pastels,parlour,paperweight,pamper,pained,overwhelm,overalls,outrank,outpouring,outhouse,outage,ouija,obstructed,obsessions,obeying,obese,o'riley,o'higgins,nosebleeds,norad,noooooooo,nononono,nonchalant,nippy,neurosis,nekhorvich,necronomicon,naquada,n'est,mystik,mystified,mumps,muddle,mothership,moped,monumentally,monogamous,mondesi,misogynistic,misinterpreting,mindlock,mending,megaphone,meeny,medicating,meanie,masseur,markstrom,marklars,margueritas,manifesting,maharajah,lukewarm,loveliest,loran,lizardo,liquored,lipped,lingers,limey,lemkin,leisurely,lathe,latched,lapping,ladle,krevlorneswath,kosygin,khakis,kenaru,keats,kaitlan,julliard,jollies,jaundice,jargon,jackals,invisibility,insipid,inflamed,inferiority,inexperience,incinerated,incinerate,incendiary,incan,inbred,implicating,impersonator,hunks,horsing,hooded,hippopotamus,hiked,hetson,hetero,hessian,henslowe,hendler,hellstrom,headstone,hayloft,harbucks,handguns,hallucinate,haldol,haggling,gynaecologist,gulag,guilder,guaranteeing,groundskeeper,grindstone,grimoir,grievance,griddle,gribbit,greystone,graceland,gooders,goeth,gentlemanly,gelatin,gawking,ganged,fukes,fromby,frenchmen,foursome,forsley,forbids,footwork,foothold,floater,flinging,flicking,fittest,fistfight,fireballs,fillings,fiddling,fennyman,felonious,felonies,feces,favoritism,fatten,fanatics,faceman,excusing,excepted,entwined,entree,ensconced,eladio,ehrlichman,easterland,dueling,dribbling,drape,downtrodden,doused,dosed,dorleen,dokie,distort,displeased,disown,dismount,disinherited,disarmed,disapproves,diperna,dined,diligent,dicaprio,depress,decoded,debatable,dealey,darsh,damsels,damning,dad'll,d'oeuvre,curlers,curie,cubed,crikey,crepes,countrymen,cornfield,coppers,copilot,copier,cooing,conspiracies,consigliere,condoning,commoner,commies,combust,comas,colds,clawed,clamped,choosy,chomping,chimps,chigorin,chianti,cheep,checkups,cheaters,celibate,cautiously,cautionary,castell,carpentry,caroling,carjacking,caritas,caregiver,cardiology,candlesticks,canasta,cain't,burro,burnin,bunking,bumming,bullwinkle,brummel,brooms,brews,breathin,braslow,bracing,botulism,boorish,bloodless,blayne,blatantly,blankie,bedbugs,becuase,barmaid,bared,baracus,banal,bakes,backpacks,attentions,atrocious,ativan,athame,asunder,astound,assuring,aspirins,asphyxiation,ashtrays,aryans,arnon,apprehension,applauding,anvil,antiquing,antidepressants,annoyingly,amputate,altruistic,alotta,alerting,afterthought,affront,affirm,actuality,abysmal,absentee,yeller,yakushova,wuzzy,wriggle,worrier,woogyman,womanizer,windpipe,windbag,willin,whisking,whimsy,wendall,weeny,weensy,weasels,watery,watcha,wasteful,waski,washcloth,waaay,vouched,viznick,ventriloquist,vendettas,veils,vayhue,vamanos,vadimus,upstage,uppity,unsaid,unlocking,unintentionally,undetected,undecided,uncaring,unbearably,tween,tryout,trotting,trini,trimmings,trickier,treatin,treadstone,trashcan,transcendent,tramps,townsfolk,torturous,torrid,toothpicks,tolerable,tireless,tiptoeing,timmay,tillinghouse,tidying,tibia,thumbing,thrusters,thrashing,these'll,thatos,testicular,teriyaki,tenors,tenacity,tellers,telemetry,tarragon,switchblade,swicker,swells,sweatshirts,swatches,surging,supremely,sump'n,succumb,subsidize,stumbles,stuffs,stoppin,stipulate,stenographer,steamroll,stasis,stagger,squandered,splint,splendidly,splashy,splashing,specter,sorcerers,somewheres,somber,snuggled,snowmobile,sniffed,snags,smugglers,smudged,smirking,smearing,slings,sleet,sleepovers,sleek,slackers,siree,siphoning,singed,sincerest,sickened,shuffled,shriveled,shorthanded,shittin,shish,shipwrecked,shins,sheetrock,shawshank,shamu,sha're,servitude,sequins,seascape,scrapings,scoured,scorching,sandpaper,saluting,salud,ruffled,roughnecks,rougher,rosslyn,rosses,roost,roomy,romping,revolutionize,reprimanded,refute,refrigerated,reeled,redundancies,rectal,recklessly,receding,reassignment,reapers,readout,ration,raring,ramblings,raccoons,quarantined,purging,punters,psychically,premarital,pregnancies,predisposed,precautionary,pollute,podunk,plums,plaything,pixilated,pitting,piranhas,pieced,piddles,pickled,photogenic,phosphorous,pffft,pestilence,pessimist,perspiration,perps,penticoff,passageways,pardons,panics,pancamo,paleontologist,overwhelms,overstating,overpaid,overdid,outlive,orthodontist,orgies,oreos,ordover,ordinates,ooooooh,oooohhh,omelettes,officiate,obtuse,obits,nymph,novocaine,noooooooooo,nipping,nilly,nightstick,negate,neatness,natured,narcotic,narcissism,namun,nakatomi,murky,muchacho,mouthwash,motzah,morsel,morph,morlocks,mooch,moloch,molest,mohra,modus,modicum,mockolate,misdemeanors,miscalculation,middies,meringue,mercilessly,meditating,mayakovsky,maximillian,marlee,markovski,maniacal,maneuvered,magnificence,maddening,lutze,lunged,lovelies,lorry,loosening,lookee,littered,lilac,lightened,laces,kurzon,kurtzweil,kind've,kimono,kenji,kembu,keanu,kazuo,jonesing,jilted,jiggling,jewelers,jewbilee,jacqnoud,jacksons,ivories,insurmountable,innocuous,innkeeper,infantery,indulged,indescribable,incoherent,impervious,impertinent,imperfections,hunnert,huffy,horsies,horseradish,hollowed,hogwash,hockley,hissing,hiromitsu,hidin,hereafter,helpmann,hehehe,haughty,happenings,hankie,handsomely,halliwells,haklar,haise,gunsights,grossly,grope,grocer,grits,gripping,grabby,glorificus,gizzard,gilardi,gibarian,geminon,gasses,garnish,galloping,gairwyn,futterman,futility,fumigated,fruitless,friendless,freon,foregone,forego,floored,flighty,flapjacks,fizzled,ficus,festering,farbman,fabricate,eyghon,extricate,exalted,eventful,esophagus,enterprising,entail,endor,emphatically,embarrasses,electroshock,easel,duffle,drumsticks,dissection,dissected,disposing,disparaging,disorientation,disintegrated,disarming,devoting,dessaline,deprecating,deplorable,delve,degenerative,deduct,decomposed,deathly,dearie,daunting,dankova,cyclotron,cyberspace,cutbacks,culpable,cuddled,crumpets,cruelly,crouching,cranium,cramming,cowering,couric,cordesh,conversational,conclusively,clung,clotting,cleanest,chipping,chimpanzee,chests,cheapen,chainsaws,censure,catapult,caravaggio,carats,captivating,calrissian,butlers,busybody,bussing,bunion,bulimic,budging,brung,browbeat,brokenhearted,brecher,breakdowns,bracebridge,boning,blowhard,blisters,blackboard,bigotry,bialy,bhamra,bended,begat,battering,baste,basquiat,barricaded,barometer,balled,baited,badenweiler,backhand,ascenscion,argumentative,appendicitis,apparition,anxiously,antagonistic,angora,anacott,amniotic,ambience,alonna,aleck,akashic,ageless,abouts,aawwww,aaaaarrrrrrggghhh,aaaaaa,zendi,yuppies,yodel,y'hear,wrangle,wombosi,wittle,withstanding,wisecracks,wiggling,wierd,whittlesley,whipper,whattya,whatsamatter,whatchamacallit,whassup,whad'ya,weakling,warfarin,waponis,wampum,wadn't,vorash,vizzini,virtucon,viridiana,veracity,ventilated,varicose,varcon,vandalized,vamos,vamoose,vaccinated,vacationing,usted,urinal,uppers,unwittingly,unsealed,unplanned,unhinged,unhand,unfathomable,unequivocally,unbreakable,unadvisedly,udall,tynacorp,tuxes,tussle,turati,tunic,tsavo,trussed,troublemakers,trollop,tremors,transsexual,transfusions,toothbrushes,toned,toddlers,tinted,tightened,thundering,thorpey,this'd,thespian,thaddius,tenuous,tenths,tenement,telethon,teleprompter,teaspoon,taunted,tattle,tardiness,taraka,tappy,tapioca,tapeworm,talcum,tacks,swivel,swaying,superpower,summarize,sumbitch,sultry,suburbia,styrofoam,stylings,strolls,strobe,stockpile,stewardesses,sterilized,sterilize,stealin,stakeouts,squawk,squalor,squabble,sprinkled,sportsmanship,spokes,spiritus,sparklers,spareribs,sowing,sororities,sonovabitch,solicit,softy,softness,softening,snuggling,snatchers,snarling,snarky,snacking,smears,slumped,slowest,slithering,sleazebag,slayed,slaughtering,skidded,skated,sivapathasundaram,sissies,silliness,silences,sidecar,sicced,shylock,shtick,shrugged,shriek,shoves,should'a,shortcake,shockingly,shirking,shaves,shatner,sharpener,shapely,shafted,sexless,septum,selflessness,seabea,scuff,screwball,scoping,scooch,scolding,schnitzel,schemed,scalper,santy,sankara,sanest,salesperson,sakulos,safehouse,sabers,runes,rumblings,rumbling,ruijven,ringers,righto,rhinestones,retrieving,reneging,remodelling,relentlessly,regurgitate,refills,reeking,reclusive,recklessness,recanted,ranchers,rafer,quaking,quacks,prophesied,propensity,profusely,problema,prided,prays,postmark,popsicles,poodles,pollyanna,polaroids,pokes,poconos,pocketful,plunging,plugging,pleeease,platters,pitied,pinetti,piercings,phooey,phonies,pestering,periscope,pentagram,pelts,patronized,paramour,paralyze,parachutes,pales,paella,paducci,owatta,overdone,overcrowded,overcompensating,ostracized,ordinate,optometrist,operandi,omens,okayed,oedipal,nuttier,nuptial,nunheim,noxious,nourish,notepad,nitroglycerin,nibblet,neuroses,nanosecond,nabbit,mythic,munchkins,multimillion,mulroney,mucous,muchas,mountaintop,morlin,mongorians,moneybags,mom'll,molto,mixup,misgivings,mindset,michalchuk,mesmerized,merman,mensa,meaty,mbwun,materialize,materialistic,masterminded,marginally,mapuhe,malfunctioning,magnify,macnamara,macinerney,machinations,macadamia,lysol,lurks,lovelorn,lopsided,locator,litback,litany,linea,limousines,limes,lighters,liebkind,levity,levelheaded,letterhead,lesabre,leron,lepers,lefts,leftenant,laziness,layaway,laughlan,lascivious,laryngitis,lapsed,landok,laminated,kurten,kobol,knucklehead,knowed,knotted,kirkeby,kinsa,karnovsky,jolla,jimson,jettison,jeric,jawed,jankis,janitors,jango,jalopy,jailbreak,jackers,jackasses,invalidate,intercepting,intercede,insinuations,infertile,impetuous,impaled,immerse,immaterial,imbeciles,imagines,idyllic,idolized,icebox,i'd've,hypochondriac,hyphen,hurtling,hurried,hunchback,hullo,horsting,hoooo,homeboys,hollandaise,hoity,hijinks,hesitates,herrero,herndorff,helplessly,heeyy,heathen,hearin,headband,harrassment,harpies,halstrom,hahahahaha,hacer,grumbling,grimlocks,grift,greets,grandmothers,grander,grafts,gordievsky,gondorff,godorsky,glscripts,gaudy,gardeners,gainful,fuses,fukienese,frizzy,freshness,freshening,fraught,frantically,foxbooks,fortieth,forked,foibles,flunkies,fleece,flatbed,fisted,firefight,fingerpaint,filibuster,fhloston,fenceline,femur,fatigues,fanucci,fantastically,familiars,falafel,fabulously,eyesore,expedient,ewwww,eviscerated,erogenous,epidural,enchante,embarassed,embarass,embalming,elude,elspeth,electrocute,eigth,eggshell,echinacea,eases,earpiece,earlobe,dumpsters,dumbshit,dumbasses,duloc,duisberg,drummed,drinkers,dressy,dorma,doily,divvy,diverting,dissuade,disrespecting,displace,disorganized,disgustingly,discord,disapproving,diligence,didja,diced,devouring,detach,destructing,desolate,demerits,delude,delirium,degrade,deevak,deemesa,deductions,deduce,debriefed,deadbeats,dateline,darndest,damnable,dalliance,daiquiri,d'agosta,cussing,cryss,cripes,cretins,crackerjack,cower,coveting,couriers,countermission,cotswolds,convertibles,conversationalist,consorting,consoled,consarn,confides,confidentially,commited,commiserate,comme,comforter,comeuppance,combative,comanches,colosseum,colling,coexist,coaxing,cliffside,chutes,chucked,chokes,childlike,childhoods,chickening,chenowith,charmingly,changin,catsup,captioning,capsize,cappucino,capiche,candlewell,cakewalk,cagey,caddie,buxley,bumbling,bulky,buggered,brussel,brunettes,brumby,brotha,bronck,brisket,bridegroom,braided,bovary,bookkeeper,bluster,bloodline,blissfully,blase,billionaires,bicker,berrisford,bereft,berating,berate,bendy,belive,belated,beikoku,beens,bedspread,bawdy,barreling,baptize,banya,balthazar,balmoral,bakshi,bails,badgered,backstreet,awkwardly,auras,attuned,atheists,astaire,assuredly,arrivederci,appetit,appendectomy,apologetic,antihistamine,anesthesiologist,amulets,albie,alarmist,aiight,adstream,admirably,acquaint,abound,abominable,aaaaaaah,zekes,zatunica,wussy,worded,wooed,woodrell,wiretap,windowsill,windjammer,windfall,whisker,whims,whatiya,whadya,weirdly,weenies,waunt,washout,wanto,waning,victimless,verdad,veranda,vandaley,vancomycin,valise,vaguest,upshot,unzip,unwashed,untrained,unstuck,unprincipled,unmentionables,unjustly,unfolds,unemployable,uneducated,unduly,undercut,uncovering,unconsciousness,unconsciously,tyndareus,turncoat,turlock,tulle,tryouts,trouper,triplette,trepkos,tremor,treeger,trapeze,traipse,tradeoff,trach,torin,tommorow,tollan,toity,timpani,thumbprint,thankless,tell'em,telepathy,telemarketing,telekinesis,teevee,teeming,tarred,tambourine,talentless,swooped,switcheroo,swirly,sweatpants,sunstroke,suitors,sugarcoat,subways,subterfuge,subservient,subletting,stunningly,strongbox,striptease,stravanavitch,stradling,stoolie,stodgy,stocky,stifle,stealer,squeezes,squatter,squarely,sprouted,spool,spindly,speedos,soups,soundly,soulmates,somebody'll,soliciting,solenoid,sobering,snowflakes,snowballs,snores,slung,slimming,skulk,skivvies,skewered,skewer,sizing,sistine,sidebar,sickos,shushing,shunt,shugga,shone,shol'va,sharpened,shapeshifter,shadowing,shadoe,selectman,sefelt,seared,scrounging,scribbling,scooping,scintillating,schmoozing,scallops,sapphires,sanitarium,sanded,safes,rudely,roust,rosebush,rosasharn,rondell,roadhouse,riveted,rewrote,revamp,retaliatory,reprimand,replicators,replaceable,remedied,relinquishing,rejoicing,reincarnated,reimbursed,reevaluate,redid,redefine,recreating,reconnected,rebelling,reassign,rearview,rayne,ravings,ratso,rambunctious,radiologist,quiver,quiero,queef,qualms,pyrotechnics,pulsating,psychosomatic,proverb,promiscuous,profanity,prioritize,preying,predisposition,precocious,precludes,prattling,prankster,povich,potting,postpartum,porridge,polluting,plowing,pistachio,pissin,pickpocket,physicals,peruse,pertains,personified,personalize,perjured,perfecting,pepys,pepperdine,pembry,peering,peels,pedophile,patties,passkey,paratrooper,paraphernalia,paralyzing,pandering,paltry,palpable,pagers,pachyderm,overstay,overestimated,overbite,outwit,outgrow,outbid,ooops,oomph,oohhh,oldie,obliterate,objectionable,nygma,notting,noches,nitty,nighters,newsstands,newborns,neurosurgery,nauseated,nastiest,narcolepsy,mutilate,muscled,murmur,mulva,mulling,mukada,muffled,morgues,moonbeams,monogamy,molester,molestation,molars,moans,misprint,mismatched,mirth,mindful,mimosas,millander,mescaline,menstrual,menage,mellowing,medevac,meddlesome,matey,manicures,malevolent,madmen,macaroons,lydell,lycra,lunchroom,lunching,lozenges,looped,litigious,liquidate,linoleum,lingk,limitless,limber,lilacs,ligature,liftoff,lemmiwinks,leggo,learnin,lazarre,lawyered,lactose,knelt,kenosha,kemosabe,jussy,junky,jordy,jimmies,jeriko,jakovasaur,issacs,isabela,irresponsibility,ironed,intoxication,insinuated,inherits,ingest,ingenue,inflexible,inflame,inevitability,inedible,inducement,indignant,indictments,indefensible,incomparable,incommunicado,improvising,impounded,illogical,ignoramus,hydrochloric,hydrate,hungover,humorless,humiliations,hugest,hoverdrone,hovel,hmmph,hitchhike,hibernating,henchman,helloooo,heirlooms,heartsick,headdress,hatches,harebrained,hapless,hanen,handsomer,hallows,habitual,guten,gummy,guiltier,guidebook,gstaad,gruff,griss,grieved,grata,gorignak,goosed,goofed,glowed,glitz,glimpses,glancing,gilmores,gianelli,geraniums,garroway,gangbusters,gamblers,galls,fuddy,frumpy,frowning,frothy,fro'tak,frere,fragrances,forgettin,follicles,flowery,flophouse,floatin,flirts,flings,flatfoot,fingerprinting,fingerprinted,fingering,finald,fillet,fianc,femoral,federales,fawkes,fascinates,farfel,fambly,falsified,fabricating,exterminators,expectant,excusez,excrement,excercises,evian,etins,esophageal,equivalency,equate,equalizer,entrees,enquire,endearment,empathetic,emailed,eggroll,earmuffs,dyslexic,duper,duesouth,drunker,druggie,dreadfully,dramatics,dragline,downplay,downers,dominatrix,doers,docket,docile,diversify,distracts,disloyalty,disinterested,discharging,disagreeable,dirtier,dinghy,dimwitted,dimoxinil,dimmy,diatribe,devising,deviate,detriment,desertion,depressants,depravity,deniability,delinquents,defiled,deepcore,deductive,decimate,deadbolt,dauthuille,dastardly,daiquiris,daggers,dachau,curiouser,curdled,cucamonga,cruller,cruces,crosswalk,crinkle,crescendo,cremate,counseled,couches,cornea,corday,copernicus,contrition,contemptible,constipated,conjoined,confounded,condescend,concoct,conch,compensating,committment,commandeered,comely,coddled,cockfight,cluttered,clunky,clownfish,cloaked,clenched,cleanin,civilised,circumcised,cimmeria,cilantro,chutzpah,chucking,chiseled,chicka,chattering,cervix,carrey,carpal,carnations,cappuccinos,candied,calluses,calisthenics,bushy,burners,budington,buchanans,brimming,braids,boycotting,bouncers,botticelli,botherin,bookkeeping,bogyman,bogged,bloodthirsty,blintzes,blanky,binturong,billable,bigboote,bewildered,betas,bequeath,behoove,befriend,bedpost,bedded,baudelaires,barreled,barboni,barbeque,bangin,baltus,bailout,backstabber,baccarat,awning,augie,arguillo,archway,apricots,apologising,annyong,anchorman,amenable,amazement,allspice,alannis,airfare,airbags,ahhhhhhhhh,ahhhhhhhh,ahhhhhhh,agitator,adrenal,acidosis,achoo,accessorizing,accentuate,abrasions,abductor,aaaahhh,aaaaaaaa,aaaaaaa,zeroing,zelner,zeldy,yevgeny,yeska,yellows,yeesh,yeahh,yamuri,wouldn't've,workmanship,woodsman,winnin,winked,wildness,whoring,whitewash,whiney,when're,wheezer,wheelman,wheelbarrow,westerburg,weeding,watermelons,washboard,waltzes,wafting,voulez,voluptuous,vitone,vigilantes,videotaping,viciously,vices,veruca,vermeer,verifying,vasculitis,valets,upholstered,unwavering,untold,unsympathetic,unromantic,unrecognizable,unpredictability,unmask,unleashing,unintentional,unglued,unequivocal,underrated,underfoot,unchecked,unbutton,unbind,unbiased,unagi,uhhhhh,tugging,triads,trespasses,treehorn,traviata,trappers,transplants,trannie,tramping,tracheotomy,tourniquet,tooty,toothless,tomarrow,toasters,thruster,thoughtfulness,thornwood,tengo,tenfold,telltale,telephoto,telephoned,telemarketer,tearin,tastic,tastefully,tasking,taser,tamed,tallow,taketh,taillight,tadpoles,tachibana,syringes,sweated,swarthy,swagger,surges,supermodels,superhighway,sunup,sun'll,sulfa,sugarless,sufficed,subside,strolled,stringy,strengthens,straightest,straightens,storefront,stopper,stockpiling,stimulant,stiffed,steyne,sternum,stepladder,stepbrother,steers,steelheads,steakhouse,stathis,stankylecartmankennymr,standoffish,stalwart,squirted,spritz,sprig,sprawl,spousal,sphincter,spenders,spearmint,spatter,spangled,southey,soured,sonuvabitch,somethng,snuffed,sniffs,smokescreen,smilin,slobs,sleepwalker,sleds,slays,slayage,skydiving,sketched,skanks,sixed,siphoned,siphon,simpering,sigfried,sidearm,siddons,sickie,shuteye,shuffleboard,shrubberies,shrouded,showmanship,shouldn't've,shoplift,shiatsu,sentries,sentance,sensuality,seething,secretions,searing,scuttlebutt,sculpt,scowling,scouring,scorecard,schoolers,schmucks,scepters,scaly,scalps,scaffolding,sauces,sartorius,santen,salivating,sainthood,saget,saddens,rygalski,rusting,ruination,rueland,rudabaga,rottweiler,roofies,romantics,rollerblading,roldy,roadshow,rickets,rible,rheza,revisiting,retentive,resurface,restores,respite,resounding,resorting,resists,repulse,repressing,repaying,reneged,refunds,rediscover,redecorated,reconstructive,recommitted,recollect,receptacle,reassess,reanimation,realtors,razinin,rationalization,ratatouille,rashum,rasczak,rancheros,rampler,quizzing,quips,quartered,purring,pummeling,puede,proximo,prospectus,pronouncing,prolonging,procreation,proclamations,principled,prides,preoccupation,prego,precog,prattle,pounced,potshots,potpourri,porque,pomegranates,polenta,plying,pluie,plesac,playmates,plantains,pillowcase,piddle,pickers,photocopied,philistine,perpetuate,perpetually,perilous,pawned,pausing,pauper,parter,parlez,parlay,pally,ovulation,overtake,overstate,overpowering,overpowered,overconfident,overbooked,ovaltine,outweighs,outings,ottos,orrin,orifice,orangutan,oopsy,ooooooooh,oooooo,ooohhhh,ocular,obstruct,obscenely,o'dwyer,nutjob,nunur,notifying,nostrand,nonny,nonfat,noblest,nimble,nikes,nicht,newsworthy,nestled,nearsighted,ne'er,nastier,narco,nakedness,muted,mummified,mudda,mozzarella,moxica,motivator,motility,mothafucka,mortmain,mortgaged,mores,mongers,mobbed,mitigating,mistah,misrepresented,mishke,misfortunes,misdirection,mischievous,mineshaft,millaney,microwaves,metzenbaum,mccovey,masterful,masochistic,marliston,marijawana,manya,mantumbi,malarkey,magnifique,madrona,madox,machida,m'hidi,lullabies,loveliness,lotions,looka,lompoc,litterbug,litigator,lithe,liquorice,linds,limericks,lightbulb,lewises,letch,lemec,layover,lavatory,laurels,lateness,laparotomy,laboring,kuato,kroff,krispy,krauts,knuckleheads,kitschy,kippers,kimbrow,keypad,keepsake,kebab,karloff,junket,judgemental,jointed,jezzie,jetting,jeeze,jeeter,jeesus,jeebs,janeane,jails,jackhammer,ixnay,irritates,irritability,irrevocable,irrefutable,irked,invoking,intricacies,interferon,intents,insubordinate,instructive,instinctive,inquisitive,inlay,injuns,inebriated,indignity,indecisive,incisors,incacha,inalienable,impresses,impregnate,impregnable,implosion,idolizes,hypothyroidism,hypoglycemic,huseni,humvee,huddling,honing,hobnobbing,hobnob,histrionics,histamine,hirohito,hippocratic,hindquarters,hikita,hikes,hightailed,hieroglyphics,heretofore,herbalist,hehey,hedriks,heartstrings,headmistress,headlight,hardheaded,happend,handlebars,hagitha,habla,gyroscope,guys'd,guy'd,guttersnipe,grump,growed,grovelling,groan,greenbacks,gravedigger,grating,grasshoppers,grandiose,grandest,grafted,gooood,goood,gooks,godsakes,goaded,glamorama,giveth,gingham,ghostbusters,germane,georgy,gazzo,gazelles,gargle,garbled,galgenstein,gaffe,g'day,fyarl,furnish,furies,fulfills,frowns,frowned,frighteningly,freebies,freakishly,forewarned,foreclose,forearms,fordson,fonics,flushes,flitting,flemmer,flabby,fishbowl,fidgeting,fevers,feigning,faxing,fatigued,fathoms,fatherless,fancier,fanatical,factored,eyelid,eyeglasses,expresso,expletive,expectin,excruciatingly,evidentiary,ever'thing,eurotrash,eubie,estrangement,erlich,epitome,entrap,enclose,emphysema,embers,emasculating,eighths,eardrum,dyslexia,duplicitous,dumpty,dumbledore,dufus,duddy,duchamp,drunkenness,drumlin,drowns,droid,drinky,drifts,drawbridge,dramamine,douggie,douchebag,dostoyevsky,doodling,don'tcha,domineering,doings,dogcatcher,doctoring,ditzy,dissimilar,dissecting,disparage,disliking,disintegrating,dishwalla,dishonored,dishing,disengaged,disavowed,dippy,diorama,dimmed,dilate,digitalis,diggory,dicing,diagnosing,devola,desolation,dennings,denials,deliverance,deliciously,delicacies,degenerates,degas,deflector,defile,deference,decrepit,deciphered,dawdle,dauphine,daresay,dangles,dampen,damndest,cucumbers,cucaracha,cryogenically,croaks,croaked,criticise,crisper,creepiest,creams,crackle,crackin,covertly,counterintelligence,corrosive,cordially,cops'll,convulsions,convoluted,conversing,conga,confrontational,confab,condolence,condiments,complicit,compiegne,commodus,comings,cometh,collusion,collared,cockeyed,clobber,clemonds,clarithromycin,cienega,christmasy,christmassy,chloroform,chippie,chested,cheeco,checklist,chauvinist,chandlers,chambermaid,chakras,cellophane,caveat,cataloguing,cartmanland,carples,carny,carded,caramels,cappy,caped,canvassing,callback,calibrated,calamine,buttermilk,butterfingers,bunsen,bulimia,bukatari,buildin,budged,brobich,bringer,brendell,brawling,bratty,braised,boyish,boundless,botch,boosh,bookies,bonbons,bodes,bobunk,bluntly,blossoming,bloomers,bloodstains,bloodhounds,blech,biter,biometric,bioethics,bijan,bigoted,bicep,bereaved,bellowing,belching,beholden,beached,batmobile,barcodes,barch,barbecuing,bandanna,backwater,backtrack,backdraft,augustino,atrophy,atrocity,atley,atchoo,asthmatic,assoc,armchair,arachnids,aptly,appetizing,antisocial,antagonizing,anorexia,anini,andersons,anagram,amputation,alleluia,airlock,aimless,agonized,agitate,aggravating,aerosol,acing,accomplishing,accidently,abuser,abstain,abnormally,aberration,aaaaahh,zlotys,zesty,zerzura,zapruder,zantopia,yelburton,yeess,y'knowwhati'msayin,wwhat,wussies,wrenched,would'a,worryin,wormser,wooooo,wookiee,wolchek,wishin,wiseguys,windbreaker,wiggy,wieners,wiedersehen,whoopin,whittled,wherefore,wharvey,welts,wellstone,wedges,wavered,watchit,wastebasket,wango,waken,waitressed,wacquiem,vrykolaka,voula,vitally,visualizing,viciousness,vespers,vertes,verily,vegetarians,vater,vaporize,vannacutt,vallens,ussher,urinating,upping,unwitting,untangle,untamed,unsanitary,unraveled,unopened,unisex,uninvolved,uninteresting,unintelligible,unimaginative,undeserving,undermines,undergarments,unconcerned,tyrants,typist,tykes,tybalt,twosome,twits,tutti,turndown,tularemia,tuberculoma,tsimshian,truffaut,truer,truant,trove,triumphed,tripe,trigonometry,trifled,trifecta,tribulations,tremont,tremoille,transcends,trafficker,touchin,tomfoolery,tinkered,tinfoil,tightrope,thousan,thoracotomy,thesaurus,thawing,thatta,tessio,temps,taxidermist,tator,tachycardia,t'akaya,swelco,sweetbreads,swatting,supercollider,sunbathing,summarily,suffocation,sueleen,succinct,subsided,submissive,subjecting,subbing,subatomic,stupendous,stunted,stubble,stubbed,streetwalker,strategizing,straining,straightaway,stoli,stiffer,stickup,stens,steamroller,steadwell,steadfast,stateroom,stans,sshhhh,squishing,squinting,squealed,sprouting,sprimp,spreadsheets,sprawled,spotlights,spooning,spirals,speedboat,spectacles,speakerphone,southglen,souse,soundproof,soothsayer,sommes,somethings,solidify,soars,snorted,snorkeling,snitches,sniping,snifter,sniffin,snickering,sneer,snarl,smila,slinking,slanted,slanderous,slammin,skimp,skilosh,siteid,sirloin,singe,sighing,sidekicks,sicken,showstopper,shoplifter,shimokawa,sherborne,shavadai,sharpshooters,sharking,shagged,shaddup,senorita,sesterces,sensuous,seahaven,scullery,scorcher,schotzie,schnoz,schmooze,schlep,schizo,scents,scalping,scalped,scallop,scalding,sayeth,saybrooke,sawed,savoring,sardine,sandstorm,sandalwood,salutations,sagman,s'okay,rsvp'd,rousted,rootin,romper,romanovs,rollercoaster,rolfie,robinsons,ritzy,ritualistic,ringwald,rhymed,rheingold,rewrites,revoking,reverts,retrofit,retort,retinas,respirations,reprobate,replaying,repaint,renquist,renege,relapsing,rekindled,rejuvenating,rejuvenated,reinstating,recriminations,rechecked,reassemble,rears,reamed,reacquaint,rayanne,ravish,rathole,raspail,rarest,rapists,rants,racketeer,quittin,quitters,quintessential,queremos,quellek,quelle,quasimodo,pyromaniac,puttanesca,puritanical,purer,puree,pungent,pummel,puedo,psychotherapist,prosecutorial,prosciutto,propositioning,procrastination,probationary,primping,preventative,prevails,preservatives,preachy,praetorians,practicality,powders,potus,postop,positives,poser,portolano,portokalos,poolside,poltergeists,pocketed,poach,plummeted,plucking,plimpton,playthings,plastique,plainclothes,pinpointed,pinkus,pinks,pigskin,piffle,pictionary,piccata,photocopy,phobias,perignon,perfumes,pecks,pecked,patently,passable,parasailing,paramus,papier,paintbrush,pacer,paaiint,overtures,overthink,overstayed,overrule,overestimate,overcooked,outlandish,outgrew,outdoorsy,outdo,orchestrate,oppress,opposable,oooohh,oomupwah,okeydokey,okaaay,ohashi,of'em,obscenities,oakie,o'gar,nurection,nostradamus,norther,norcom,nooch,nonsensical,nipped,nimbala,nervously,neckline,nebbleman,narwhal,nametag,n'n't,mycenae,muzak,muumuu,mumbled,mulvehill,muggings,muffet,mouthy,motivates,motaba,moocher,mongi,moley,moisturize,mohair,mocky,mmkay,mistuh,missis,misdeeds,mincemeat,miggs,miffed,methadone,messieur,menopausal,menagerie,mcgillicuddy,mayflowers,matrimonial,matick,masai,marzipan,maplewood,manzelle,mannequins,manhole,manhandle,malfunctions,madwoman,machiavelli,lynley,lynched,lurconis,lujack,lubricant,looove,loons,loofah,lonelyhearts,lollipops,lineswoman,lifers,lexter,lepner,lemony,leggy,leafy,leadeth,lazerus,lazare,lawford,languishing,lagoda,ladman,kundera,krinkle,krendler,kreigel,kowolski,knockdown,knifed,kneed,kneecap,kids'll,kennie,kenmore,keeled,kazootie,katzenmoyer,kasdan,karak,kapowski,kakistos,julyan,jockstrap,jobless,jiggly,jaunt,jarring,jabbering,irrigate,irrevocably,irrationally,ironies,invitro,intimated,intently,intentioned,intelligently,instill,instigator,instep,inopportune,innuendoes,inflate,infects,infamy,indiscretions,indiscreet,indio,indignities,indict,indecision,inconspicuous,inappropriately,impunity,impudent,impotence,implicates,implausible,imperfection,impatience,immutable,immobilize,idealist,iambic,hysterically,hyperspace,hygienist,hydraulics,hydrated,huzzah,husks,hunched,huffed,hubris,hubbub,hovercraft,houngan,hosed,horoscopes,hopelessness,hoodwinked,honorably,honeysuckle,homegirl,holiest,hippity,hildie,hieroglyphs,hexton,herein,heckle,heaping,healthilizer,headfirst,hatsue,harlot,hardwired,halothane,hairstyles,haagen,haaaaa,gutting,gummi,groundless,groaning,gristle,grills,graynamore,grabbin,goodes,goggle,glittering,glint,gleaming,glassy,girth,gimbal,giblets,gellers,geezers,geeze,garshaw,gargantuan,garfunkel,gangway,gandarium,gamut,galoshes,gallivanting,gainfully,gachnar,fusionlips,fusilli,furiously,frugal,fricking,frederika,freckling,frauds,fountainhead,forthwith,forgo,forgettable,foresight,foresaw,fondling,fondled,fondle,folksy,fluttering,fluffing,floundering,flirtatious,flexing,flatterer,flaring,fixating,finchy,figurehead,fiendish,fertilize,ferment,fending,fellahs,feelers,fascinate,fantabulous,falsify,fallopian,faithless,fairer,fainter,failings,facetious,eyepatch,exxon,extraterrestrials,extradite,extracurriculars,extinguish,expunged,expelling,exorbitant,exhilarated,exertion,exerting,excercise,everbody,evaporated,escargot,escapee,erases,epizootics,epithelials,ephrum,entanglements,enslave,engrossed,emphatic,emeralds,ember,emancipated,elevates,ejaculate,effeminate,eccentricities,easygoing,earshot,dunks,dullness,dulli,dulled,drumstick,dropper,driftwood,dregs,dreck,dreamboat,draggin,downsizing,donowitz,dominoes,diversions,distended,dissipate,disraeli,disqualify,disowned,dishwashing,disciplining,discerning,disappoints,dinged,digested,dicking,detonating,despising,depressor,depose,deport,dents,defused,deflecting,decryption,decoys,decoupage,decompress,decibel,decadence,deafening,dawning,dater,darkened,dappy,dallying,dagon,czechoslovakians,cuticles,cuteness,cupboards,culottes,cruisin,crosshairs,cronyn,criminalistics,creatively,creaming,crapping,cranny,cowed,contradicting,constipation,confining,confidences,conceiving,conceivably,concealment,compulsively,complainin,complacent,compels,communing,commode,comming,commensurate,columnists,colonoscopy,colchicine,coddling,clump,clubbed,clowning,cliffhanger,clang,cissy,choosers,choker,chiffon,channeled,chalet,cellmates,cathartic,caseload,carjack,canvass,canisters,candlestick,candlelit,camry,calzones,calitri,caldy,byline,butterball,bustier,burlap,bureaucrat,buffoons,buenas,brookline,bronzed,broiled,broda,briss,brioche,briar,breathable,brays,brassieres,boysenberry,bowline,boooo,boonies,booklets,bookish,boogeyman,boogey,bogas,boardinghouse,bluuch,blundering,bluer,blowed,blotchy,blossomed,bloodwork,bloodied,blithering,blinks,blathering,blasphemous,blacking,birdson,bings,bfmid,bfast,bettin,berkshires,benjamins,benevolence,benched,benatar,bellybutton,belabor,behooves,beddy,beaujolais,beattle,baxworth,baseless,barfing,bannish,bankrolled,banek,ballsy,ballpoint,baffling,badder,badda,bactine,backgammon,baako,aztreonam,authoritah,auctioning,arachtoids,apropos,aprons,apprised,apprehensive,anythng,antivenin,antichrist,anorexic,anoint,anguished,angioplasty,angio,amply,ampicillin,amphetamines,alternator,alcove,alabaster,airlifted,agrabah,affidavits,admonished,admonish,addled,addendum,accuser,accompli,absurdity,absolved,abrusso,abreast,aboot,abductions,abducting,aback,ababwa,aaahhhh,zorin,zinthar,zinfandel,zillions,zephyrs,zatarcs,zacks,youuu,yokels,yardstick,yammer,y'understand,wynette,wrung,wreaths,wowed,wouldn'ta,worming,wormed,workday,woodsy,woodshed,woodchuck,wojadubakowski,withering,witching,wiseass,wiretaps,wining,willoby,wiccaning,whupped,whoopi,whoomp,wholesaler,whiteness,whiner,whatchya,wharves,wenus,weirdoes,weaning,watusi,waponi,waistband,wackos,vouching,votre,vivica,viveca,vivant,vivacious,visor,visitin,visage,vicrum,vetted,ventriloquism,venison,varnsen,vaporized,vapid,vanstock,uuuuh,ushering,urologist,urination,upstart,uprooted,unsubtitled,unspoiled,unseat,unseasonably,unseal,unsatisfying,unnerve,unlikable,unleaded,uninsured,uninspired,unicycle,unhooked,unfunny,unfreezing,unflattering,unfairness,unexpressed,unending,unencumbered,unearth,undiscovered,undisciplined,understan,undershirt,underlings,underline,undercurrent,uncivilized,uncharacteristic,umpteenth,uglies,tuney,trumps,truckasaurus,trubshaw,trouser,tringle,trifling,trickster,trespassers,trespasser,traumas,trattoria,trashes,transgressions,trampling,tp'ed,toxoplasmosis,tounge,tortillas,topsy,topple,topnotch,tonsil,tions,timmuh,timithious,tilney,tighty,tightness,tightens,tidbits,ticketed,thyme,threepio,thoughtfully,thorkel,thommo,thing'll,thefts,that've,thanksgivings,tetherball,testikov,terraforming,tepid,tendonitis,tenboom,telex,teenybopper,tattered,tattaglias,tanneke,tailspin,tablecloth,swooping,swizzle,swiping,swindled,swilling,swerving,sweatshops,swaddling,swackhammer,svetkoff,supossed,superdad,sumptuous,sugary,sugai,subvert,substantiate,submersible,sublimating,subjugation,stymied,strychnine,streetlights,strassmans,stranglehold,strangeness,straddling,straddle,stowaways,stotch,stockbrokers,stifling,stepford,steerage,steena,statuary,starlets,staggeringly,ssshhh,squaw,spurt,spungeon,spritzer,sprightly,sprays,sportswear,spoonful,splittin,splitsville,speedily,specialise,spastic,sparrin,souvlaki,southie,sourpuss,soupy,soundstage,soothes,somebody'd,softest,sociopathic,socialized,snyders,snowmobiles,snowballed,snatches,smugness,smoothest,smashes,sloshed,sleight,skyrocket,skied,skewed,sixpence,sipowicz,singling,simulates,shyness,shuvanis,showoff,shortsighted,shopkeeper,shoehorn,shithouse,shirtless,shipshape,shifu,shelve,shelbyville,sheepskin,sharpens,shaquille,shanshu,servings,sequined,seizes,seashells,scrambler,scopes,schnauzer,schmo,schizoid,scampered,savagely,saudis,santas,sandovals,sanding,saleswoman,sagging,s'cuse,rutting,ruthlessly,runneth,ruffians,rubes,rosalita,rollerblades,rohypnol,roasts,roadies,ritten,rippling,ripples,rigoletto,richardo,rethought,reshoot,reserving,reseda,rescuer,reread,requisitions,repute,reprogram,replenish,repetitious,reorganizing,reinventing,reinvented,reheat,refrigerators,reenter,recruiter,recliner,rawdy,rashes,rajeski,raison,raisers,rages,quinine,questscape,queller,pygmalion,pushers,pusan,purview,pumpin,pubescent,prudes,provolone,propriety,propped,procrastinate,processional,preyed,pretrial,portent,pooling,poofy,polloi,policia,poacher,pluses,pleasuring,platitudes,plateaued,plaguing,pittance,pinheads,pincushion,pimply,pimped,piggyback,piecing,phillipe,philipse,philby,pharaohs,petyr,petitioner,peshtigo,pesaram,persnickety,perpetrate,percolating,pepto,penne,penell,pemmican,peeks,pedaling,peacemaker,pawnshop,patting,pathologically,patchouli,pasts,pasties,passin,parlors,paltrow,palamon,padlock,paddling,oversleep,overheating,overdosed,overcharge,overblown,outrageously,ornery,opportune,oooooooooh,oohhhh,ohhhhhh,ogres,odorless,obliterated,nyong,nymphomaniac,ntozake,novocain,nough,nonnie,nonissue,nodules,nightmarish,nightline,niceties,newsman,needra,nedry,necking,navour,nauseam,nauls,narim,namath,nagged,naboo,n'sync,myslexia,mutator,mustafi,musketeer,murtaugh,murderess,munching,mumsy,muley,mouseville,mortifying,morgendorffers,moola,montel,mongoloid,molestered,moldings,mocarbies,mo'ss,mixers,misrell,misnomer,misheard,mishandled,miscreant,misconceptions,miniscule,millgate,mettle,metricconverter,meteors,menorah,mengele,melding,meanness,mcgruff,mcarnold,matzoh,matted,mastectomy,massager,marveling,marooned,marmaduke,marick,manhandled,manatees,man'll,maltin,maliciously,malfeasance,malahide,maketh,makeovers,maiming,machismo,lumpectomy,lumbering,lucci,lording,lorca,lookouts,loogie,loners,loathed,lissen,lighthearted,lifer,lickin,lewen,levitation,lestercorp,lessee,lentils,legislate,legalizing,lederhosen,lawmen,lasskopf,lardner,lambeau,lamagra,ladonn,lactic,lacquer,labatier,krabappel,kooks,knickknacks,klutzy,kleynach,klendathu,kinross,kinkaid,kind'a,ketch,kesher,karikos,karenina,kanamits,junshi,jumbled,joust,jotted,jobson,jingling,jigalong,jerries,jellies,jeeps,javna,irresistable,internist,intercranial,inseminated,inquisitor,infuriate,inflating,infidelities,incessantly,incensed,incase,incapacitate,inasmuch,inaccuracies,imploding,impeding,impediments,immaturity,illegible,iditarod,icicles,ibuprofen,i'i'm,hymie,hydrolase,hunker,humps,humons,humidor,humdinger,humbling,huggin,huffing,housecleaning,hothouse,hotcakes,hosty,hootenanny,hootchie,hoosegow,honks,honeymooners,homily,homeopathic,hitchhikers,hissed,hillnigger,hexavalent,hewwo,hershe,hermey,hergott,henny,hennigans,henhouse,hemolytic,helipad,heifer,hebrews,hebbing,heaved,headlock,harrowing,harnessed,hangovers,handi,handbasket,halfrek,hacene,gyges,guys're,gundersons,gumption,gruntmaster,grubs,grossie,groped,grins,greaseball,gravesite,gratuity,granma,grandfathers,grandbaby,gradski,gracing,gossips,gooble,goners,golitsyn,gofer,godsake,goddaughter,gnats,gluing,glares,givers,ginza,gimmie,gimmee,gennero,gemme,gazpacho,gazed,gassy,gargling,gandhiji,galvanized,gallbladder,gaaah,furtive,fumigation,fucka,fronkonsteen,frills,freezin,freewald,freeloader,frailty,forger,foolhardy,fondest,fomin,followin,follicle,flotation,flopping,floodgates,flogged,flicked,flenders,fleabag,fixings,fixable,fistful,firewater,firelight,fingerbang,finalizing,fillin,filipov,fiderer,felling,feldberg,feign,faunia,fatale,farkus,fallible,faithfulness,factoring,eyeful,extramarital,exterminated,exhume,exasperated,eviscerate,estoy,esmerelda,escapades,epoxy,enticed,enthused,entendre,engrossing,endorphins,emptive,emmys,eminently,embezzler,embarressed,embarrassingly,embalmed,eludes,eling,elated,eirie,egotitis,effecting,eerily,eecom,eczema,earthy,earlobes,eally,dyeing,dwells,duvet,duncans,dulcet,droves,droppin,drools,drey'auc,downriver,domesticity,dollop,doesnt,dobler,divulged,diversionary,distancing,dispensers,disorienting,disneyworld,dismissive,disingenuous,disheveled,disfiguring,dinning,dimming,diligently,dilettante,dilation,dickensian,diaphragms,devastatingly,destabilize,desecrate,deposing,deniece,demony,delving,delicates,deigned,defraud,deflower,defibrillator,defiantly,defenceless,defacing,deconstruction,decompose,deciphering,decibels,deceptively,deceptions,decapitation,debutantes,debonair,deadlier,dawdling,davic,darwinism,darnit,darks,danke,danieljackson,dangled,cytoxan,cutout,cutlery,curveball,curfews,cummerbund,crunches,crouched,crisps,cripples,crilly,cribs,crewman,creepin,creeds,credenza,creak,crawly,crawlin,crawlers,crated,crackheads,coworker,couldn't've,corwins,coriander,copiously,convenes,contraceptives,contingencies,contaminating,conniption,condiment,concocting,comprehending,complacency,commendatore,comebacks,com'on,collarbone,colitis,coldly,coiffure,coffers,coeds,codependent,cocksucking,cockney,cockles,clutched,closeted,cloistered,cleve,cleats,clarifying,clapped,cinnabar,chunnel,chumps,cholinesterase,choirboy,chocolatey,chlamydia,chigliak,cheesie,chauvinistic,chasm,chartreuse,charo,charnier,chapil,chalked,chadway,certifiably,cellulite,celled,cavalcade,cataloging,castrated,cassio,cashews,cartouche,carnivore,carcinogens,capulet,captivated,capt'n,cancellations,campin,callate,callar,caffeinated,cadavers,cacophony,cackle,buzzes,buttoning,busload,burglaries,burbs,buona,bunions,bullheaded,buffs,bucyk,buckling,bruschetta,browbeating,broomsticks,broody,bromly,brolin,briefings,brewskies,breathalyzer,breakups,bratwurst,brania,braiding,brags,braggin,bradywood,bottomed,bossa,bordello,bookshelf,boogida,bondsman,bolder,boggles,bludgeoned,blowtorch,blotter,blips,blemish,bleaching,blainetologists,blading,blabbermouth,birdseed,bimmel,biloxi,biggly,bianchinni,betadine,berenson,belus,belloq,begets,befitting,beepers,beelzebub,beefed,bedridden,bedevere,beckons,beaded,baubles,bauble,battleground,bathrobes,basketballs,basements,barroom,barnacle,barkin,barked,baretta,bangles,bangler,banality,bambang,baltar,ballplayers,bagman,baffles,backroom,babysat,baboons,averse,audiotape,auctioneer,atten,atcha,astonishment,arugula,arroz,antihistamines,annoyances,anesthesiology,anatomically,anachronism,amiable,amaretto,allahu,alight,aimin,ailment,afterglow,affronte,advil,adrenals,actualization,acrost,ached,accursed,accoutrements,absconded,aboveboard,abetted,aargh,aaaahh,zuwicky,zolda,ziploc,zakamatak,youve,yippie,yesterdays,yella,yearns,yearnings,yearned,yawning,yalta,yahtzee,y'mean,y'are,wuthering,wreaks,worrisome,workiiing,wooooooo,wonky,womanizing,wolodarsky,wiwith,withdraws,wishy,wisht,wipers,wiper,winos,windthorne,windsurfing,windermere,wiggled,wiggen,whwhat,whodunit,whoaaa,whittling,whitesnake,whereof,wheezing,wheeze,whatd'ya,whataya,whammo,whackin,wellll,weightless,weevil,wedgies,webbing,weasly,wayside,waxes,waturi,washy,washrooms,wandell,waitaminute,waddya,waaaah,vornac,vishnoor,virulent,vindictiveness,vinceres,villier,vigeous,vestigial,ventilate,vented,venereal,veering,veered,veddy,vaslova,valosky,vailsburg,vaginas,vagas,urethra,upstaged,uploading,unwrapping,unwieldy,untapped,unsatisfied,unquenchable,unnerved,unmentionable,unlovable,unknowns,uninformed,unimpressed,unhappily,unguarded,unexplored,undergarment,undeniably,unclench,unclaimed,uncharacteristically,unbuttoned,unblemished,ululd,uhhhm,tweeze,tutsami,tushy,tuscarora,turkle,turghan,turbinium,tubers,trucoat,troxa,tropicana,triquetra,trimmers,triceps,trespassed,traya,traumatizing,transvestites,trainors,tradin,trackers,townies,tourelles,toucha,tossin,tortious,topshop,topes,tonics,tongs,tomsk,tomorrows,toiling,toddle,tizzy,tippers,timmi,thwap,thusly,ththe,thrusts,throwers,throwed,throughway,thickening,thermonuclear,thelwall,thataway,terrifically,tendons,teleportation,telepathically,telekinetic,teetering,teaspoons,tarantulas,tapas,tanned,tangling,tamales,tailors,tahitian,tactful,tachy,tablespoon,syrah,synchronicity,synch,synapses,swooning,switchman,swimsuits,sweltering,sweetly,suvolte,suslov,surfed,supposition,suppertime,supervillains,superfluous,superego,sunspots,sunning,sunless,sundress,suckah,succotash,sublevel,subbasement,studious,striping,strenuously,straights,stonewalled,stillness,stilettos,stevesy,steno,steenwyck,stargates,stammering,staedert,squiggly,squiggle,squashing,squaring,spreadsheet,spramp,spotters,sporto,spooking,splendido,spittin,spirulina,spiky,spate,spartacus,spacerun,soonest,something'll,someth,somepin,someone'll,sofas,soberly,sobered,snowmen,snowbank,snowballing,snivelling,sniffling,snakeskin,snagging,smush,smooter,smidgen,smackers,slumlord,slossum,slimmer,slighted,sleepwalk,sleazeball,skokie,skeptic,sitarides,sistah,sipped,sindell,simpletons,simony,silkwood,silks,silken,sightless,sideboard,shuttles,shrugging,shrouds,showy,shoveled,shouldn'ta,shoplifters,shitstorm,sheeny,shapetype,shaming,shallows,shackle,shabbily,shabbas,seppuku,senility,semite,semiautomatic,selznick,secretarial,sebacio,scuzzy,scummy,scrutinized,scrunchie,scribbled,scotches,scolded,scissor,schlub,scavenging,scarin,scarfing,scallions,scald,savour,savored,saute,sarcoidosis,sandbar,saluted,salish,saith,sailboats,sagittarius,sacre,saccharine,sacamano,rushdie,rumpled,rumba,rulebook,rubbers,roughage,rotisserie,rootie,roofy,roofie,romanticize,rittle,ristorante,rippin,rinsing,ringin,rincess,rickety,reveling,retest,retaliating,restorative,reston,restaurateur,reshoots,resetting,resentments,reprogramming,repossess,repartee,renzo,remore,remitting,remeber,relaxants,rejuvenate,rejections,regenerated,refocus,referrals,reeno,recycles,recrimination,reclining,recanting,reattach,reassigning,razgul,raved,rattlesnakes,rattles,rashly,raquetball,ransack,raisinettes,raheem,radisson,radishes,raban,quoth,qumari,quints,quilts,quilting,quien,quarreled,purty,purblind,punchbowl,publically,psychotics,psychopaths,psychoanalyze,pruning,provasik,protectin,propping,proportioned,prophylactic,proofed,prompter,procreate,proclivities,prioritizing,prinze,pricked,press'll,presets,prescribes,preocupe,prejudicial,prefex,preconceived,precipice,pralines,pragmatist,powerbar,pottie,pottersville,potsie,potholes,posses,posies,portkey,porterhouse,pornographers,poring,poppycock,poppers,pomponi,pokin,poitier,podiatry,pleeze,pleadings,playbook,platelets,plane'arium,placebos,place'll,pistachios,pirated,pinochle,pineapples,pinafore,pimples,piggly,piddling,picon,pickpockets,picchu,physiologically,physic,phobic,philandering,phenomenally,pheasants,pewter,petticoat,petronis,petitioning,perturbed,perpetuating,permutat,perishable,perimeters,perfumed,percocet,per'sus,pepperjack,penalize,pelting,pellet,peignoir,pedicures,peckers,pecans,pawning,paulsson,pattycake,patrolmen,patois,pathos,pasted,parishioner,parcheesi,parachuting,papayas,pantaloons,palpitations,palantine,paintballing,overtired,overstress,oversensitive,overnights,overexcited,overanxious,overachiever,outwitted,outvoted,outnumber,outlast,outlander,out've,orphey,orchestrating,openers,ooooooo,okies,ohhhhhhhhh,ohhhhhhhh,ogling,offbeat,obsessively,obeyed,o'hana,o'bannon,o'bannion,numpce,nummy,nuked,nuances,nourishing,nosedive,norbu,nomlies,nomine,nixed,nihilist,nightshift,newmeat,neglectful,neediness,needin,naphthalene,nanocytes,nanite,naivete,n'yeah,mystifying,myhnegon,mutating,musing,mulled,muggy,muerto,muckraker,muchachos,mountainside,motherless,mosquitos,morphed,mopped,moodoo,moncho,mollem,moisturiser,mohicans,mocks,mistresses,misspent,misinterpretation,miscarry,minuses,mindee,mimes,millisecond,milked,mightn't,mightier,mierzwiak,microchips,meyerling,mesmerizing,mershaw,meecrob,medicate,meddled,mckinnons,mcgewan,mcdunnough,mcats,mbien,matzah,matriarch,masturbated,masselin,martialed,marlboros,marksmanship,marinate,marchin,manicured,malnourished,malign,majorek,magnon,magnificently,macking,machiavellian,macdougal,macchiato,macaws,macanaw,m'self,lydells,lusts,lucite,lubricants,lopper,lopped,loneliest,lonelier,lomez,lojack,loath,liquefy,lippy,limps,likin,lightness,liesl,liebchen,licious,libris,libation,lhamo,leotards,leanin,laxatives,lavished,latka,lanyard,lanky,landmines,lameness,laddies,lacerated,labored,l'amour,kreskin,kovitch,kournikova,kootchy,konoss,knknow,knickety,knackety,kmart,klicks,kiwanis,kissable,kindergartners,kilter,kidnet,kid'll,kicky,kickbacks,kickback,kholokov,kewpie,kendo,katra,kareoke,kafelnikov,kabob,junjun,jumba,julep,jordie,jondy,jolson,jenoff,jawbone,janitorial,janiro,ipecac,invigorated,intruded,intros,intravenously,interruptus,interrogations,interject,interfacing,interestin,insuring,instilled,insensitivity,inscrutable,inroads,innards,inlaid,injector,ingratitude,infuriates,infra,infliction,indelicate,incubators,incrimination,inconveniencing,inconsolable,incestuous,incas,incarcerate,inbreeding,impudence,impressionists,impeached,impassioned,imipenem,idling,idiosyncrasies,icebergs,hypotensive,hydrochloride,hushed,humus,humph,hummm,hulking,hubcaps,hubald,howya,howbout,how'll,housebroken,hotwire,hotspots,hotheaded,horrace,hopsfield,honto,honkin,honeymoons,homewrecker,hombres,hollers,hollerin,hoedown,hoboes,hobbling,hobble,hoarse,hinky,highlighters,hexes,heru'ur,hernias,heppleman,hell're,heighten,heheheheheh,heheheh,hedging,heckling,heckled,heavyset,heatshield,heathens,heartthrob,headpiece,hayseed,haveo,hauls,hasten,harridan,harpoons,hardens,harcesis,harbouring,hangouts,halkein,haleh,halberstam,hairnet,hairdressers,hacky,haaaa,h'yah,gusta,gushy,gurgling,guilted,gruel,grudging,grrrrrr,grosses,groomsmen,griping,gravest,gratified,grated,goulash,goopy,goona,goodly,godliness,godawful,godamn,glycerin,glutes,glowy,globetrotters,glimpsed,glenville,glaucoma,girlscout,giraffes,gilbey,gigglepuss,ghora,gestating,gelato,geishas,gearshift,gayness,gasped,gaslighting,garretts,garba,gablyczyck,g'head,fumigating,fumbling,fudged,fuckwad,fuck're,fuchsia,fretting,freshest,frenchies,freezers,fredrica,fraziers,fraidy,foxholes,fourty,fossilized,forsake,forfeits,foreclosed,foreal,footsies,florists,flopped,floorshow,floorboard,flinching,flecks,flaubert,flatware,flatulence,flatlined,flashdance,flail,flagging,fiver,fitzy,fishsticks,finetti,finelli,finagle,filko,fieldstone,fibber,ferrini,feedin,feasting,favore,fathering,farrouhk,farmin,fairytale,fairservice,factoid,facedown,fabled,eyeballin,extortionist,exquisitely,expedited,exorcise,existentialist,execs,exculpatory,exacerbate,everthing,eventuality,evander,euphoric,euphemisms,estamos,erred,entitle,enquiries,enormity,enfants,endive,encyclopedias,emulating,embittered,effortless,ectopic,ecirc,easely,earphones,earmarks,dweller,durslar,durned,dunois,dunking,dunked,dumdum,dullard,dudleys,druthers,druggist,drossos,drooled,driveways,drippy,dreamless,drawstring,drang,drainpipe,dozing,dotes,dorkface,doorknobs,doohickey,donnatella,doncha,domicile,dokos,dobermans,dizzying,divola,ditsy,distaste,disservice,dislodged,dislodge,disinherit,disinformation,discounting,dinka,dimly,digesting,diello,diddling,dictatorships,dictators,diagnostician,devours,devilishly,detract,detoxing,detours,detente,destructs,desecrated,derris,deplore,deplete,demure,demolitions,demean,delish,delbruck,delaford,degaulle,deftly,deformity,deflate,definatly,defector,decrypted,decontamination,decapitate,decanter,dardis,dampener,damme,daddy'll,dabbling,dabbled,d'etre,d'argent,d'alene,d'agnasti,czechoslovakian,cymbal,cyberdyne,cutoffs,cuticle,curvaceous,curiousity,crowing,crowed,croutons,cropped,criminy,crescentis,crashers,cranwell,coverin,courtrooms,countenance,cosmically,cosign,corroboration,coroners,cornflakes,copperpot,copperhead,copacetic,coordsize,convulsing,consults,conjures,congenial,concealer,compactor,commercialism,cokey,cognizant,clunkers,clumsily,clucking,cloves,cloven,cloths,clothe,clods,clocking,clings,clavicle,classless,clashing,clanking,clanging,clamping,civvies,citywide,circulatory,circuited,chronisters,chromic,choos,chloroformed,chillun,cheesed,chatterbox,chaperoned,channukah,cerebellum,centerpieces,centerfold,ceecee,ccedil,cavorting,cavemen,cauterized,cauldwell,catting,caterine,cassiopeia,carves,cartwheel,carpeted,carob,caressing,carelessly,careening,capricious,capitalistic,capillaries,candidly,camaraderie,callously,calfskin,caddies,buttholes,busywork,busses,burps,burgomeister,bunkhouse,bungchow,bugler,buffets,buffed,brutish,brusque,bronchitis,bromden,brolly,broached,brewskis,brewin,brean,breadwinner,brana,bountiful,bouncin,bosoms,borgnine,bopping,bootlegs,booing,bombosity,bolting,boilerplate,bluey,blowback,blouses,bloodsuckers,bloodstained,bloat,bleeth,blackface,blackest,blackened,blacken,blackballed,blabs,blabbering,birdbrain,bipartisanship,biodegradable,biltmore,bilked,big'uns,bidet,besotted,bernheim,benegas,bendiga,belushi,bellboys,belittling,behinds,begone,bedsheets,beckoning,beaute,beaudine,beastly,beachfront,bathes,batak,baser,baseballs,barbella,bankrolling,bandaged,baerly,backlog,backin,babying,azkaban,awwwww,aviary,authorizes,austero,aunty,attics,atreus,astounded,astonish,artemus,arses,arintero,appraiser,apathetic,anybody'd,anxieties,anticlimactic,antar,anglos,angleman,anesthetist,androscoggin,andolini,andale,amway,amuck,amniocentesis,amnesiac,americano,amara,alvah,altruism,alternapalooza,alphabetize,alpaca,allus,allergist,alexandros,alaikum,akimbo,agoraphobia,agides,aggrhh,aftertaste,adoptions,adjuster,addictions,adamantium,activator,accomplishes,aberrant,aaaaargh,aaaaaaaaaaaaa,a'ight,zzzzzzz,zucchini,zookeeper,zirconia,zippers,zequiel,zellary,zeitgeist,zanuck,zagat,you'n,ylang,yes'm,yenta,yecchh,yecch,yawns,yankin,yahdah,yaaah,y'got,xeroxed,wwooww,wristwatch,wrangled,wouldst,worthiness,worshiping,wormy,wormtail,wormholes,woosh,wollsten,wolfing,woefully,wobbling,wintry,wingding,windstorm,windowtext,wiluna,wilting,wilted,willick,willenholly,wildflowers,wildebeest,whyyy,whoppers,whoaa,whizzing,whizz,whitest,whistled,whist,whinny,wheelies,whazzup,whatwhatwhaaat,whato,whatdya,what'dya,whacks,wewell,wetsuit,welluh,weeps,waylander,wavin,wassail,wasnt,warneford,warbucks,waltons,wallbanger,waiving,waitwait,vowing,voucher,vornoff,vorhees,voldemort,vivre,vittles,vindaloo,videogames,vichyssoise,vicarious,vesuvius,verguenza,ven't,velveteen,velour,velociraptor,vastness,vasectomies,vapors,vanderhof,valmont,validates,valiantly,vacuums,usurp,usernum,us'll,urinals,unyielding,unvarnished,unturned,untouchables,untangled,unsecured,unscramble,unreturned,unremarkable,unpretentious,unnerstand,unmade,unimpeachable,unfashionable,underwrite,underlining,underling,underestimates,underappreciated,uncouth,uncork,uncommonly,unclog,uncircumcised,unchallenged,uncas,unbuttoning,unapproved,unamerican,unafraid,umpteen,umhmm,uhwhy,ughuh,typewriters,twitches,twitched,twirly,twinkling,twinges,twiddling,turners,turnabout,tumblin,tryed,trowel,trousseau,trivialize,trifles,tribianni,trenchcoat,trembled,traumatize,transitory,transients,transfuse,transcribing,tranq,trampy,traipsed,trainin,trachea,traceable,touristy,toughie,toscanini,tortola,tortilla,torreon,toreador,tommorrow,tollbooth,tollans,toidy,togas,tofurkey,toddling,toddies,toasties,toadstool,to've,tingles,timin,timey,timetables,tightest,thuggee,thrusting,thrombus,throes,thrifty,thornharts,thinnest,thicket,thetas,thesulac,tethered,testaburger,tersenadine,terrif,terdlington,tepui,temping,tector,taxidermy,tastebuds,tartlets,tartabull,tar'd,tantamount,tangy,tangles,tamer,tabula,tabletops,tabithia,szechwan,synthedyne,svenjolly,svengali,survivalists,surmise,surfboards,surefire,suprise,supremacists,suppositories,superstore,supercilious,suntac,sunburned,summercliff,sullied,sugared,suckle,subtleties,substantiated,subsides,subliminal,subhuman,strowman,stroked,stroganoff,streetlight,straying,strainer,straighter,straightener,stoplight,stirrups,stewing,stereotyping,stepmommy,stephano,stashing,starshine,stairwells,squatsie,squandering,squalid,squabbling,squab,sprinkling,spreader,spongy,spokesmen,splintered,spittle,spitter,spiced,spews,spendin,spect,spearchucker,spatulas,southtown,soused,soshi,sorter,sorrowful,sooth,some'in,soliloquy,soiree,sodomized,sobriki,soaping,snows,snowcone,snitching,snitched,sneering,snausages,snaking,smoothed,smoochies,smarten,smallish,slushy,slurring,sluman,slithers,slippin,sleuthing,sleeveless,skinless,skillfully,sketchbook,skagnetti,sista,sinning,singularly,sinewy,silverlake,siguto,signorina,sieve,sidearms,shying,shunning,shtud,shrieks,shorting,shortbread,shopkeepers,shmancy,shizzit,shitheads,shitfaced,shipmates,shiftless,shelving,shedlow,shavings,shatters,sharifa,shampoos,shallots,shafter,sha'nauc,sextant,serviceable,sepsis,senores,sendin,semis,semanski,selflessly,seinfelds,seers,seeps,seductress,secaucus,sealant,scuttling,scusa,scrunched,scissorhands,schreber,schmancy,scamps,scalloped,savoir,savagery,sarong,sarnia,santangel,samool,sallow,salino,safecracker,sadism,sacrilegious,sabrini,sabath,s'aright,ruttheimer,rudest,rubbery,rousting,rotarian,roslin,roomed,romari,romanica,rolltop,rolfski,rockettes,roared,ringleader,riffing,ribcage,rewired,retrial,reting,resuscitated,restock,resale,reprogrammed,replicant,repentant,repellant,repays,repainting,renegotiating,rendez,remem,relived,relinquishes,relearn,relaxant,rekindling,rehydrate,refueled,refreshingly,refilling,reexamine,reeseman,redness,redeemable,redcoats,rectangles,recoup,reciprocated,reassessing,realy,realer,reachin,re'kali,rawlston,ravages,rappaports,ramoray,ramming,raindrops,rahesh,radials,racists,rabartu,quiches,quench,quarreling,quaintly,quadrants,putumayo,put'em,purifier,pureed,punitis,pullout,pukin,pudgy,puddings,puckering,pterodactyl,psychodrama,psats,protestations,protectee,prosaic,propositioned,proclivity,probed,printouts,prevision,pressers,preset,preposition,preempt,preemie,preconceptions,prancan,powerpuff,potties,potpie,poseur,porthole,poops,pooping,pomade,polyps,polymerized,politeness,polisher,polack,pocketknife,poatia,plebeian,playgroup,platonically,platitude,plastering,plasmapheresis,plaids,placemats,pizzazz,pintauro,pinstripes,pinpoints,pinkner,pincer,pimento,pileup,pilates,pigmen,pieeee,phrased,photocopies,phoebes,philistines,philanderer,pheromone,phasers,pfeffernuesse,pervs,perspire,personify,perservere,perplexed,perpetrating,perkiness,perjurer,periodontist,perfunctory,perdido,percodan,pentameter,pentacle,pensive,pensione,pennybaker,pennbrooke,penhall,pengin,penetti,penetrates,pegnoir,peeve,peephole,pectorals,peckin,peaky,peaksville,paxcow,paused,patted,parkishoff,parkers,pardoning,paraplegic,paraphrasing,paperers,papered,pangs,paneling,palooza,palmed,palmdale,palatable,pacify,pacified,owwwww,oversexed,overrides,overpaying,overdrawn,overcompensate,overcomes,overcharged,outmaneuver,outfoxed,oughtn't,ostentatious,oshun,orthopedist,or'derves,ophthalmologist,operagirl,oozes,oooooooh,onesie,omnis,omelets,oktoberfest,okeydoke,ofthe,ofher,obstetrical,obeys,obeah,o'henry,nyquil,nyanyanyanyah,nuttin,nutsy,nutball,nurhachi,numbskull,nullifies,nullification,nucking,nubbin,nourished,nonspecific,noing,noinch,nohoho,nobler,nitwits,newsprint,newspaperman,newscaster,neuropathy,netherworld,neediest,navasky,narcissists,napped,nafta,mache,mykonos,mutilating,mutherfucker,mutha,mutates,mutate,musn't,murchy,multitasking,mujeeb,mudslinging,muckraking,mousetrap,mourns,mournful,motherf,mostro,morphing,morphate,moralistic,moochy,mooching,monotonous,monopolize,monocle,molehill,moland,mofet,mockup,mobilizing,mmmmmmm,mitzvahs,mistreating,misstep,misjudge,misinformation,misdirected,miscarriages,miniskirt,mindwarped,minced,milquetoast,miguelito,mightily,midstream,midriff,mideast,microbe,methuselah,mesdames,mescal,men'll,memma,megaton,megara,megalomaniac,meeee,medulla,medivac,meaninglessness,mcnuggets,mccarthyism,maypole,may've,mauve,mateys,marshack,markles,marketable,mansiere,manservant,manse,manhandling,mallomars,malcontent,malaise,majesties,mainsail,mailmen,mahandra,magnolias,magnified,magev,maelstrom,machu,macado,m'boy,m'appelle,lustrous,lureen,lunges,lumped,lumberyard,lulled,luego,lucks,lubricated,loveseat,loused,lounger,loski,lorre,loora,looong,loonies,loincloth,lofts,lodgers,lobbing,loaner,livered,liqueur,ligourin,lifesaving,lifeguards,lifeblood,liaisons,let'em,lesbianism,lence,lemonlyman,legitimize,leadin,lazars,lazarro,lawyering,laugher,laudanum,latrines,lations,laters,lapels,lakefront,lahit,lafortunata,lachrymose,l'italien,kwaini,kruczynski,kramerica,kowtow,kovinsky,korsekov,kopek,knowakowski,knievel,knacks,kiowas,killington,kickball,keyworth,keymaster,kevie,keveral,kenyons,keggers,keepsakes,kechner,keaty,kavorka,karajan,kamerev,kaggs,jujyfruit,jostled,jonestown,jokey,joists,jocko,jimmied,jiggled,jests,jenzen,jenko,jellyman,jedediah,jealitosis,jaunty,jarmel,jankle,jagoff,jagielski,jackrabbits,jabbing,jabberjaw,izzat,irresponsibly,irrepressible,irregularity,irredeemable,inuvik,intuitions,intubated,intimates,interminable,interloper,intercostal,instyle,instigate,instantaneously,ining,ingrown,ingesting,infusing,infringe,infinitum,infact,inequities,indubitably,indisputable,indescribably,indentation,indefinable,incontrovertible,inconsequential,incompletes,incoherently,inclement,incidentals,inarticulate,inadequacies,imprudent,improprieties,imprison,imprinted,impressively,impostors,importante,imperious,impale,immodest,immobile,imbedded,imbecilic,illegals,idn't,hysteric,hypotenuse,hygienic,hyeah,hushpuppies,hunhh,humpback,humored,hummed,humiliates,humidifier,huggy,huggers,huckster,hotbed,hosing,hosers,horsehair,homebody,homebake,holing,holies,hoisting,hogwallop,hocks,hobbits,hoaxes,hmmmmm,hisses,hippest,hillbillies,hilarity,heurh,herniated,hermaphrodite,hennifer,hemlines,hemline,hemery,helplessness,helmsley,hellhound,heheheheh,heeey,hedda,heartbeats,heaped,healers,headstart,headsets,headlong,hawkland,havta,haulin,harvey'll,hanta,hansom,hangnail,handstand,handrail,handoff,hallucinogen,hallor,halitosis,haberdashery,gypped,guy'll,gumbel,guerillas,guava,guardrail,grunther,grunick,groppi,groomer,grodin,gripes,grinds,grifters,gretch,greevey,greasing,graveyards,grandkid,grainy,gouging,gooney,googly,goldmuff,goldenrod,goingo,godly,gobbledygook,gobbledegook,glues,gloriously,glengarry,glassware,glamor,gimmicks,giggly,giambetti,ghoulish,ghettos,ghali,gether,geriatrics,gerbils,geosynchronous,georgio,gente,gendarme,gelbman,gazillionth,gayest,gauging,gastro,gaslight,gasbag,garters,garish,garas,gantu,gangy,gangly,gangland,galling,gadda,furrowed,funnies,funkytown,fugimotto,fudging,fuckeen,frustrates,froufrou,froot,fromberge,frizzies,fritters,frightfully,friendliest,freeloading,freelancing,freakazoid,fraternization,framers,fornication,fornicating,forethought,footstool,foisting,focussing,focking,flurries,fluffed,flintstones,fledermaus,flayed,flawlessly,flatters,flashbang,flapped,fishies,firmer,fireproof,firebug,fingerpainting,finessed,findin,financials,finality,fillets,fiercest,fiefdom,fibbing,fervor,fentanyl,fenelon,fedorchuk,feckless,feathering,faucets,farewells,fantasyland,fanaticism,faltered,faggy,faberge,extorting,extorted,exterminating,exhumation,exhilaration,exhausts,exfoliate,excels,exasperating,exacting,everybody'd,evasions,espressos,esmail,errrr,erratically,eroding,ernswiler,epcot,enthralled,ensenada,enriching,enrage,enhancer,endear,encrusted,encino,empathic,embezzle,emanates,electricians,eking,egomaniacal,egging,effacing,ectoplasm,eavesdropped,dummkopf,dugray,duchaisne,drunkard,drudge,droop,droids,drips,dripped,dribbles,drazens,downy,downsize,downpour,dosages,doppelganger,dopes,doohicky,dontcha,doneghy,divining,divest,diuretics,diuretic,distrustful,disrupts,dismemberment,dismember,disinfect,disillusionment,disheartening,discourteous,discotheque,discolored,dirtiest,diphtheria,dinks,dimpled,didya,dickwad,diatribes,diathesis,diabetics,deviants,detonates,detests,detestable,detaining,despondent,desecration,derision,derailing,deputized,depressors,dependant,dentures,denominators,demur,demonology,delts,dellarte,delacour,deflated,defib,defaced,decorators,deaqon,davola,datin,darwinian,darklighters,dandelions,dampened,damaskinos,dalrimple,d'peshu,d'hoffryn,d'astier,cynics,cutesy,cutaway,curmudgeon,curdle,culpability,cuisinart,cuffing,crypts,cryptid,crunched,crumblers,crudely,crosscheck,croon,crissake,crevasse,creswood,creepo,creases,creased,creaky,cranks,crabgrass,coveralls,couple'a,coughs,coslaw,corporeal,cornucopia,cornering,corks,cordoned,coolly,coolin,cookbooks,contrite,contented,constrictor,confound,confit,confiscating,condoned,conditioners,concussions,comprendo,comers,combustible,combusted,collingswood,coldness,coitus,codicil,coasting,clydesdale,cluttering,clunker,clunk,clumsiness,clotted,clothesline,clinches,clincher,cleverness,clench,clein,cleanses,claymores,clammed,chugging,chronically,christsakes,choque,chompers,chiseling,chirpy,chirp,chinks,chingachgook,chickenpox,chickadee,chewin,chessboard,chargin,chanteuse,chandeliers,chamdo,chagrined,chaff,certs,certainties,cerreno,cerebrum,censured,cemetary,caterwauling,cataclysmic,casitas,cased,carvel,carting,carrear,carolling,carolers,carnie,cardiogram,carbuncle,capulets,canines,candaules,canape,caldecott,calamitous,cadillacs,cachet,cabeza,cabdriver,buzzards,butai,businesswomen,bungled,bumpkins,bummers,bulldoze,buffybot,bubut,bubbies,brrrrr,brownout,brouhaha,bronzing,bronchial,broiler,briskly,briefcases,bricked,breezing,breeher,breakable,breadstick,bravenet,braved,brandies,brainwaves,brainiest,braggart,bradlee,boys're,boys'll,boys'd,boutonniere,bossed,bosomy,borans,boosts,bookshelves,bookends,boneless,bombarding,bollo,boinked,boink,bluest,bluebells,bloodshot,blockhead,blockbusters,blithely,blather,blankly,bladders,blackbeard,bitte,bippy,biogenetics,bilge,bigglesworth,bicuspids,beususe,betaseron,besmirch,bernece,bereavement,bentonville,benchley,benching,bembe,bellyaching,bellhops,belie,beleaguered,behrle,beginnin,begining,beenie,beefs,beechwood,becau,beaverhausen,beakers,bazillion,baudouin,barrytown,barringtons,barneys,barbs,barbers,barbatus,bankrupted,bailiffs,backslide,baby'd,baaad,b'fore,awwwk,aways,awakes,automatics,authenticate,aught,aubyn,attired,attagirl,atrophied,asystole,astroturf,assertiveness,artichokes,arquillians,aright,archenemy,appraise,appeased,antin,anspaugh,anesthetics,anaphylactic,amscray,ambivalence,amalio,alriiight,alphabetized,alpena,alouette,allora,alliteration,allenwood,allegiances,algerians,alcerro,alastor,ahaha,agitators,aforethought,advertises,admonition,adirondacks,adenoids,acupuncturist,acula,actuarial,activators,actionable,achingly,accusers,acclimated,acclimate,absurdly,absorbent,absolvo,absolutes,absences,abdomenizer,aaaaaaaaah,aaaaaaaaaa,a'right".split(","),
41334male_names:"james,john,robert,michael,william,david,richard,charles,joseph,thomas,christopher,daniel,paul,mark,donald,george,kenneth,steven,edward,brian,ronald,anthony,kevin,jason,matthew,gary,timothy,jose,larry,jeffrey,frank,scott,eric,stephen,andrew,raymond,gregory,joshua,jerry,dennis,walter,patrick,peter,harold,douglas,henry,carl,arthur,ryan,roger,joe,juan,jack,albert,jonathan,justin,terry,gerald,keith,samuel,willie,ralph,lawrence,nicholas,roy,benjamin,bruce,brandon,adam,harry,fred,wayne,billy,steve,louis,jeremy,aaron,randy,eugene,carlos,russell,bobby,victor,ernest,phillip,todd,jesse,craig,alan,shawn,clarence,sean,philip,chris,johnny,earl,jimmy,antonio,danny,bryan,tony,luis,mike,stanley,leonard,nathan,dale,manuel,rodney,curtis,norman,marvin,vincent,glenn,jeffery,travis,jeff,chad,jacob,melvin,alfred,kyle,francis,bradley,jesus,herbert,frederick,ray,joel,edwin,don,eddie,ricky,troy,randall,barry,bernard,mario,leroy,francisco,marcus,micheal,theodore,clifford,miguel,oscar,jay,jim,tom,calvin,alex,jon,ronnie,bill,lloyd,tommy,leon,derek,darrell,jerome,floyd,leo,alvin,tim,wesley,dean,greg,jorge,dustin,pedro,derrick,dan,zachary,corey,herman,maurice,vernon,roberto,clyde,glen,hector,shane,ricardo,sam,rick,lester,brent,ramon,tyler,gilbert,gene,marc,reginald,ruben,brett,nathaniel,rafael,edgar,milton,raul,ben,cecil,duane,andre,elmer,brad,gabriel,ron,roland,jared,adrian,karl,cory,claude,erik,darryl,neil,christian,javier,fernando,clinton,ted,mathew,tyrone,darren,lonnie,lance,cody,julio,kurt,allan,clayton,hugh,max,dwayne,dwight,armando,felix,jimmie,everett,ian,ken,bob,jaime,casey,alfredo,alberto,dave,ivan,johnnie,sidney,byron,julian,isaac,clifton,willard,daryl,virgil,andy,salvador,kirk,sergio,seth,kent,terrance,rene,eduardo,terrence,enrique,freddie,stuart,fredrick,arturo,alejandro,joey,nick,luther,wendell,jeremiah,evan,julius,donnie,otis,trevor,luke,homer,gerard,doug,kenny,hubert,angelo,shaun,lyle,matt,alfonso,orlando,rex,carlton,ernesto,pablo,lorenzo,omar,wilbur,blake,horace,roderick,kerry,abraham,rickey,ira,andres,cesar,johnathan,malcolm,rudolph,damon,kelvin,rudy,preston,alton,archie,marco,pete,randolph,garry,geoffrey,jonathon,felipe,bennie,gerardo,dominic,loren,delbert,colin,guillermo,earnest,benny,noel,rodolfo,myron,edmund,salvatore,cedric,lowell,gregg,sherman,devin,sylvester,roosevelt,israel,jermaine,forrest,wilbert,leland,simon,irving,owen,rufus,woodrow,sammy,kristopher,levi,marcos,gustavo,jake,lionel,marty,gilberto,clint,nicolas,laurence,ismael,orville,drew,ervin,dewey,wilfred,josh,hugo,ignacio,caleb,tomas,sheldon,erick,frankie,darrel,rogelio,terence,alonzo,elias,bert,elbert,ramiro,conrad,noah,grady,phil,cornelius,lamar,rolando,clay,percy,bradford,merle,darin,amos,terrell,moses,irvin,saul,roman,darnell,randal,tommie,timmy,darrin,brendan,toby,van,abel,dominick,emilio,elijah,cary,domingo,aubrey,emmett,marlon,emanuel,jerald,edmond,emil,dewayne,otto,teddy,reynaldo,bret,jess,trent,humberto,emmanuel,stephan,louie,vicente,lamont,garland,micah,efrain,heath,rodger,demetrius,ethan,eldon,rocky,pierre,eli,bryce,antoine,robbie,kendall,royce,sterling,grover,elton,cleveland,dylan,chuck,damian,reuben,stan,leonardo,russel,erwin,benito,hans,monte,blaine,ernie,curt,quentin,agustin,jamal,devon,adolfo,tyson,wilfredo,bart,jarrod,vance,denis,damien,joaquin,harlan,desmond,elliot,darwin,gregorio,kermit,roscoe,esteban,anton,solomon,norbert,elvin,nolan,carey,rod,quinton,hal,brain,rob,elwood,kendrick,darius,moises,marlin,fidel,thaddeus,cliff,marcel,ali,raphael,bryon,armand,alvaro,jeffry,dane,joesph,thurman,ned,sammie,rusty,michel,monty,rory,fabian,reggie,kris,isaiah,gus,avery,loyd,diego,adolph,millard,rocco,gonzalo,derick,rodrigo,gerry,rigoberto,alphonso,rickie,noe,vern,elvis,bernardo,mauricio,hiram,donovan,basil,nickolas,scot,vince,quincy,eddy,sebastian,federico,ulysses,heriberto,donnell,denny,gavin,emery,romeo,jayson,dion,dante,clement,coy,odell,jarvis,bruno,issac,dudley,sanford,colby,carmelo,nestor,hollis,stefan,donny,linwood,beau,weldon,galen,isidro,truman,delmar,johnathon,silas,frederic,irwin,merrill,charley,marcelino,carlo,trenton,kurtis,aurelio,winfred,vito,collin,denver,leonel,emory,pasquale,mohammad,mariano,danial,landon,dirk,branden,adan,numbers,clair,buford,bernie,wilmer,emerson,zachery,jacques,errol,josue,edwardo,wilford,theron,raymundo,daren,tristan,robby,lincoln,jame,genaro,octavio,cornell,hung,arron,antony,herschel,alva,giovanni,garth,cyrus,cyril,ronny,stevie,lon,kennith,carmine,augustine,erich,chadwick,wilburn,russ,myles,jonas,mitchel,mervin,zane,jamel,lazaro,alphonse,randell,johnie,jarrett,ariel,abdul,dusty,luciano,seymour,scottie,eugenio,mohammed,arnulfo,lucien,ferdinand,thad,ezra,aldo,rubin,mitch,earle,abe,marquis,lanny,kareem,jamar,boris,isiah,emile,elmo,aron,leopoldo,everette,josef,eloy,dorian,rodrick,reinaldo,lucio,jerrod,weston,hershel,lemuel,lavern,burt,jules,gil,eliseo,ahmad,nigel,efren,antwan,alden,margarito,refugio,dino,osvaldo,les,deandre,normand,kieth,ivory,trey,norberto,napoleon,jerold,fritz,rosendo,milford,sang,deon,christoper,alfonzo,lyman,josiah,brant,wilton,rico,jamaal,dewitt,brenton,yong,olin,faustino,claudio,judson,gino,edgardo,alec,jarred,donn,trinidad,tad,porfirio,odis,lenard,chauncey,tod,mel,marcelo,kory,augustus,keven,hilario,bud,sal,orval,mauro,dannie,zachariah,olen,anibal,milo,jed,thanh,amado,lenny,tory,richie,horacio,brice,mohamed,delmer,dario,mac,jonah,jerrold,robt,hank,sung,rupert,rolland,kenton,damion,chi,antone,waldo,fredric,bradly,kip,burl,tyree,jefferey,ahmed,willy,stanford,oren,moshe,mikel,enoch,brendon,quintin,jamison,florencio,darrick,tobias,minh,hassan,giuseppe,demarcus,cletus,tyrell,lyndon,keenan,werner,theo,geraldo,columbus,chet,bertram,markus,huey,hilton,dwain,donte,tyron,omer,isaias,hipolito,fermin,chung,adalberto,jamey,teodoro,mckinley,maximo,raleigh,lawerence,abram,rashad,emmitt,daron,chong,samual,otha,miquel,eusebio,dong,domenic,darron,wilber,renato,hoyt,haywood,ezekiel,chas,florentino,elroy,clemente,arden,neville,edison,deshawn,carrol,shayne,nathanial,jordon,danilo,claud,sherwood,raymon,rayford,cristobal,ambrose,titus,hyman,felton,ezequiel,erasmo,lonny,milan,lino,jarod,herb,andreas,rhett,jude,douglass,cordell,oswaldo,ellsworth,virgilio,toney,nathanael,benedict,mose,hong,isreal,garret,fausto,arlen,zack,modesto,francesco,manual,gaylord,gaston,filiberto,deangelo,michale,granville,malik,zackary,tuan,nicky,cristopher,antione,malcom,korey,jospeh,colton,waylon,hosea,shad,santo,rudolf,rolf,renaldo,marcellus,lucius,kristofer,harland,arnoldo,rueben,leandro,kraig,jerrell,jeromy,hobert,cedrick,arlie,winford,wally,luigi,keneth,jacinto,graig,franklyn,edmundo,leif,jeramy,willian,vincenzo,shon,michal,lynwood,jere,elden,darell,broderick,alonso".split(",")},module.exports=frequency_lists;
41335
41336},{}],4:[function(require,module,exports){
41337var feedback,matching,scoring,time,time_estimates,zxcvbn;matching=require("./matching"),scoring=require("./scoring"),time_estimates=require("./time_estimates"),feedback=require("./feedback"),time=function(){return(new Date).getTime()},zxcvbn=function(e,t){var i,n,c,s,a,r,m,o,u,g,_;for(null==t&&(t=[]),g=time(),u=[],c=0,s=t.length;c<s;c++)i=t[c],"string"!=(m=typeof i)&&"number"!==m&&"boolean"!==m||u.push(i.toString().toLowerCase());matching.set_user_input_dictionary(u),a=matching.omnimatch(e),o=scoring.most_guessable_match_sequence(e,a),o.calc_time=time()-g,n=time_estimates.estimate_attack_times(o.guesses);for(r in n)_=n[r],o[r]=_;return o.feedback=feedback.get_feedback(o.score,o.sequence),o},module.exports=zxcvbn;
41338
41339},{"./feedback":2,"./matching":5,"./scoring":6,"./time_estimates":7}],5:[function(require,module,exports){
41340var DATE_MAX_YEAR,DATE_MIN_YEAR,DATE_SPLITS,GRAPHS,L33T_TABLE,RANKED_DICTIONARIES,REGEXEN,adjacency_graphs,build_ranked_dict,frequency_lists,lst,matching,name,scoring;frequency_lists=require("./frequency_lists"),adjacency_graphs=require("./adjacency_graphs"),scoring=require("./scoring"),build_ranked_dict=function(e){var t,n,r,i,a;for(i={},t=1,r=0,n=e.length;r<n;r++)a=e[r],i[a]=t,t+=1;return i},RANKED_DICTIONARIES={};for(name in frequency_lists)lst=frequency_lists[name],RANKED_DICTIONARIES[name]=build_ranked_dict(lst);GRAPHS={qwerty:adjacency_graphs.qwerty,dvorak:adjacency_graphs.dvorak,keypad:adjacency_graphs.keypad,mac_keypad:adjacency_graphs.mac_keypad},L33T_TABLE={a:["4","@"],b:["8"],c:["(","{","[","<"],e:["3"],g:["6","9"],i:["1","!","|"],l:["1","|","7"],o:["0"],s:["$","5"],t:["+","7"],x:["%"],z:["2"]},REGEXEN={recent_year:/19\d\d|200\d|201\d/g},DATE_MAX_YEAR=2050,DATE_MIN_YEAR=1e3,DATE_SPLITS={4:[[1,2],[2,3]],5:[[1,3],[2,3]],6:[[1,2],[2,4],[4,5]],7:[[1,3],[2,3],[4,5],[4,6]],8:[[2,4],[4,6]]},matching={empty:function(e){var t;return 0===function(){var n;n=[];for(t in e)n.push(t);return n}().length},extend:function(e,t){return e.push.apply(e,t)},translate:function(e,t){var n;return function(){var r,i,a,s;for(a=e.split(""),s=[],i=0,r=a.length;i<r;i++)n=a[i],s.push(t[n]||n);return s}().join("")},mod:function(e,t){return(e%t+t)%t},sorted:function(e){return e.sort(function(e,t){return e.i-t.i||e.j-t.j})},omnimatch:function(e){var t,n,r,i,a;for(i=[],r=[this.dictionary_match,this.reverse_dictionary_match,this.l33t_match,this.spatial_match,this.repeat_match,this.sequence_match,this.regex_match,this.date_match],a=0,t=r.length;a<t;a++)n=r[a],this.extend(i,n.call(this,e));return this.sorted(i)},dictionary_match:function(e,t){var n,r,i,a,s,o,h,u,c,l,_,f,d,p;null==t&&(t=RANKED_DICTIONARIES),s=[],a=e.length,u=e.toLowerCase();for(n in t)for(l=t[n],r=o=0,_=a;0<=_?o<_:o>_;r=0<=_?++o:--o)for(i=h=f=r,d=a;f<=d?h<d:h>d;i=f<=d?++h:--h)u.slice(r,+i+1||9e9)in l&&(p=u.slice(r,+i+1||9e9),c=l[p],s.push({pattern:"dictionary",i:r,j:i,token:e.slice(r,+i+1||9e9),matched_word:p,rank:c,dictionary_name:n,reversed:!1,l33t:!1}));return this.sorted(s)},reverse_dictionary_match:function(e,t){var n,r,i,a,s,o;for(null==t&&(t=RANKED_DICTIONARIES),o=e.split("").reverse().join(""),i=this.dictionary_match(o,t),a=0,n=i.length;a<n;a++)r=i[a],r.token=r.token.split("").reverse().join(""),r.reversed=!0,s=[e.length-1-r.j,e.length-1-r.i],r.i=s[0],r.j=s[1];return this.sorted(i)},set_user_input_dictionary:function(e){return RANKED_DICTIONARIES.user_inputs=build_ranked_dict(e.slice())},relevant_l33t_subtable:function(e,t){var n,r,i,a,s,o,h,u,c,l;for(s={},o=e.split(""),a=0,r=o.length;a<r;a++)n=o[a],s[n]=!0;l={};for(i in t)c=t[i],h=function(){var e,t,n;for(n=[],t=0,e=c.length;t<e;t++)u=c[t],u in s&&n.push(u);return n}(),h.length>0&&(l[i]=h);return l},enumerate_l33t_subs:function(e){var t,n,r,i,a,s,o,h,u,c,l,_,f,d,p;a=function(){var t;t=[];for(i in e)t.push(i);return t}(),p=[[]],n=function(e){var t,n,r,a,s,o,h,u;for(n=[],s={},o=0,a=e.length;o<a;o++)h=e[o],t=function(){var e,t,n;for(n=[],u=t=0,e=h.length;t<e;u=++t)i=h[u],n.push([i,u]);return n}(),t.sort(),r=function(){var e,n,r;for(r=[],u=n=0,e=t.length;n<e;u=++n)i=t[u],r.push(i+","+u);return r}().join("-"),r in s||(s[r]=!0,n.push(h));return n},r=function(t){var i,a,s,o,h,u,c,l,_,f,d,g,m,A,E,y;if(t.length){for(a=t[0],m=t.slice(1),c=[],d=e[a],l=0,h=d.length;l<h;l++)for(o=d[l],_=0,u=p.length;_<u;_++){for(A=p[_],i=-1,s=f=0,g=A.length;0<=g?f<g:f>g;s=0<=g?++f:--f)if(A[s][0]===o){i=s;break}i===-1?(y=A.concat([[o,a]]),c.push(y)):(E=A.slice(0),E.splice(i,1),E.push([o,a]),c.push(A),c.push(E))}return p=n(c),r(m)}},r(a),d=[];for(u=0,o=p.length;u<o;u++){for(_=p[u],f={},c=0,h=_.length;c<h;c++)l=_[c],s=l[0],t=l[1],f[s]=t;d.push(f)}return d},l33t_match:function(e,t,n){var r,i,a,s,o,h,u,c,l,_,f,d,p,g,m,A;for(null==t&&(t=RANKED_DICTIONARIES),null==n&&(n=L33T_TABLE),u=[],_=this.enumerate_l33t_subs(this.relevant_l33t_subtable(e,n)),c=0,a=_.length;c<a&&(d=_[c],!this.empty(d));c++)for(g=this.translate(e,d),f=this.dictionary_match(g,t),l=0,s=f.length;l<s;l++)if(o=f[l],m=e.slice(o.i,+o.j+1||9e9),m.toLowerCase()!==o.matched_word){h={};for(p in d)r=d[p],m.indexOf(p)!==-1&&(h[p]=r);o.l33t=!0,o.token=m,o.sub=h,o.sub_display=function(){var e;e=[];for(i in h)A=h[i],e.push(i+" -> "+A);return e}().join(", "),u.push(o)}return this.sorted(u.filter(function(e){return e.token.length>1}))},spatial_match:function(e,t){var n,r,i;null==t&&(t=GRAPHS),i=[];for(r in t)n=t[r],this.extend(i,this.spatial_match_helper(e,n,r));return this.sorted(i)},SHIFTED_RX:/[~!@#$%^&*()_+QWERTYUIOP{}|ASDFGHJKL:"ZXCVBNM<>?]/,spatial_match_helper:function(e,t,n){var r,i,a,s,o,h,u,c,l,_,f,d,p,g,m;for(f=[],u=0;u<e.length-1;)for(c=u+1,l=null,m=0,g="qwerty"!==n&&"dvorak"!==n||!this.SHIFTED_RX.exec(e.charAt(u))?0:1;;){if(p=e.charAt(c-1),o=!1,h=-1,s=-1,i=t[p]||[],c<e.length)for(a=e.charAt(c),d=0,_=i.length;d<_;d++)if(r=i[d],s+=1,r&&r.indexOf(a)!==-1){o=!0,h=s,1===r.indexOf(a)&&(g+=1),l!==h&&(m+=1,l=h);break}if(!o){c-u>2&&f.push({pattern:"spatial",i:u,j:c-1,token:e.slice(u,c),graph:n,turns:m,shifted_count:g}),u=c;break}c+=1}return f},repeat_match:function(e){var t,n,r,i,a,s,o,h,u,c,l,_,f,d,p;for(d=[],a=/(.+)\1+/g,c=/(.+?)\1+/g,l=/^(.+?)\1+$/,u=0;u<e.length&&(a.lastIndex=c.lastIndex=u,s=a.exec(e),_=c.exec(e),null!=s);)s[0].length>_[0].length?(f=s,i=l.exec(f[0])[1]):(f=_,i=f[1]),p=[f.index,f.index+f[0].length-1],o=p[0],h=p[1],t=scoring.most_guessable_match_sequence(i,this.omnimatch(i)),r=t.sequence,n=t.guesses,d.push({pattern:"repeat",i:o,j:h,token:f[0],base_token:i,base_guesses:n,base_matches:r,repeat_count:f[0].length/i.length}),u=h+1;return d},MAX_DELTA:5,sequence_match:function(e){var t,n,r,i,a,s,o,h,u;if(1===e.length)return[];for(u=function(t){return function(n,r,i){var a,s,o,u;if((r-n>1||1===Math.abs(i))&&0<(a=Math.abs(i))&&a<=t.MAX_DELTA)return u=e.slice(n,+r+1||9e9),/^[a-z]+$/.test(u)?(s="lower",o=26):/^[A-Z]+$/.test(u)?(s="upper",o=26):/^\d+$/.test(u)?(s="digits",o=10):(s="unicode",o=26),h.push({pattern:"sequence",i:n,j:r,token:e.slice(n,+r+1||9e9),sequence_name:s,sequence_space:o,ascending:i>0})}}(this),h=[],n=0,a=null,i=s=1,o=e.length;1<=o?s<o:s>o;i=1<=o?++s:--s)t=e.charCodeAt(i)-e.charCodeAt(i-1),null==a&&(a=t),t!==a&&(r=i-1,u(n,r,a),n=r,a=t);return u(n,e.length-1,a),h},regex_match:function(e,t){var n,r,i,a;null==t&&(t=REGEXEN),n=[];for(name in t)for(r=t[name],r.lastIndex=0;i=r.exec(e);)a=i[0],n.push({pattern:"regex",token:a,i:i.index,j:i.index+i[0].length-1,regex_name:name,regex_match:i});return this.sorted(n)},date_match:function(e){var t,n,r,i,a,s,o,h,u,c,l,_,f,d,p,g,m,A,E,y,v,I,R,T,D,k,x,j,b,N,S,q,L,M;for(_=[],f=/^\d{4,8}$/,d=/^(\d{1,4})([\s\/\\_.-])(\d{1,2})\2(\d{1,4})$/,s=m=0,v=e.length-4;0<=v?m<=v:m>=v;s=0<=v?++m:--m)for(o=A=I=s+3,R=s+7;(I<=R?A<=R:A>=R)&&!(o>=e.length);o=I<=R?++A:--A)if(M=e.slice(s,+o+1||9e9),f.exec(M)){for(r=[],T=DATE_SPLITS[M.length],E=0,c=T.length;E<c;E++)D=T[E],h=D[0],u=D[1],a=this.map_ints_to_dmy([parseInt(M.slice(0,h)),parseInt(M.slice(h,u)),parseInt(M.slice(u))]),null!=a&&r.push(a);if(r.length>0){for(t=r[0],p=function(e){return Math.abs(e.year-scoring.REFERENCE_YEAR)},g=p(r[0]),k=r.slice(1),y=0,l=k.length;y<l;y++)n=k[y],i=p(n),i<g&&(x=[n,i],t=x[0],g=x[1]);_.push({pattern:"date",token:M,i:s,j:o,separator:"",year:t.year,month:t.month,day:t.day})}}for(s=q=0,j=e.length-6;0<=j?q<=j:q>=j;s=0<=j?++q:--q)for(o=L=b=s+5,N=s+9;(b<=N?L<=N:L>=N)&&!(o>=e.length);o=b<=N?++L:--L)M=e.slice(s,+o+1||9e9),S=d.exec(M),null!=S&&(a=this.map_ints_to_dmy([parseInt(S[1]),parseInt(S[3]),parseInt(S[4])]),null!=a&&_.push({pattern:"date",token:M,i:s,j:o,separator:S[2],year:a.year,month:a.month,day:a.day}));return this.sorted(_.filter(function(e){var t,n,r,i;for(t=!1,i=0,n=_.length;i<n;i++)if(r=_[i],e!==r&&r.i<=e.i&&r.j>=e.j){t=!0;break}return!t}))},map_ints_to_dmy:function(e){var t,n,r,i,a,s,o,h,u,c,l,_,f,d,p,g;if(!(e[1]>31||e[1]<=0)){for(o=0,h=0,p=0,s=0,r=e.length;s<r;s++){if(n=e[s],99<n&&n<DATE_MIN_YEAR||n>DATE_MAX_YEAR)return;n>31&&(h+=1),n>12&&(o+=1),n<=0&&(p+=1)}if(!(h>=2||3===o||p>=2)){for(c=[[e[2],e.slice(0,2)],[e[0],e.slice(1,3)]],u=0,i=c.length;u<i;u++)if(_=c[u],g=_[0],d=_[1],DATE_MIN_YEAR<=g&&g<=DATE_MAX_YEAR)return t=this.map_ints_to_dm(d),null!=t?{year:g,month:t.month,day:t.day}:void 0;for(l=0,a=c.length;l<a;l++)if(f=c[l],g=f[0],d=f[1],t=this.map_ints_to_dm(d),null!=t)return g=this.two_to_four_digit_year(g),{year:g,month:t.month,day:t.day}}}},map_ints_to_dm:function(e){var t,n,r,i,a,s;for(a=[e,e.slice().reverse()],i=0,n=a.length;i<n;i++)if(s=a[i],t=s[0],r=s[1],1<=t&&t<=31&&1<=r&&r<=12)return{day:t,month:r}},two_to_four_digit_year:function(e){return e>99?e:e>50?e+1900:e+2e3}},module.exports=matching;
41341
41342},{"./adjacency_graphs":1,"./frequency_lists":3,"./scoring":6}],6:[function(require,module,exports){
41343var BRUTEFORCE_CARDINALITY,MIN_GUESSES_BEFORE_GROWING_SEQUENCE,MIN_SUBMATCH_GUESSES_MULTI_CHAR,MIN_SUBMATCH_GUESSES_SINGLE_CHAR,adjacency_graphs,calc_average_degree,k,scoring,v;adjacency_graphs=require("./adjacency_graphs"),calc_average_degree=function(e){var t,r,n,s,a,u;t=0;for(n in e)a=e[n],t+=function(){var e,t,r;for(r=[],t=0,e=a.length;t<e;t++)s=a[t],s&&r.push(s);return r}().length;return t/=function(){var t;t=[];for(r in e)u=e[r],t.push(r);return t}().length},BRUTEFORCE_CARDINALITY=10,MIN_GUESSES_BEFORE_GROWING_SEQUENCE=1e4,MIN_SUBMATCH_GUESSES_SINGLE_CHAR=10,MIN_SUBMATCH_GUESSES_MULTI_CHAR=50,scoring={nCk:function(e,t){var r,n,s,a;if(t>e)return 0;if(0===t)return 1;for(s=1,r=n=1,a=t;1<=a?n<=a:n>=a;r=1<=a?++n:--n)s*=e,s/=r,e-=1;return s},log10:function(e){return Math.log(e)/Math.log(10)},log2:function(e){return Math.log(e)/Math.log(2)},factorial:function(e){var t,r,n,s;if(e<2)return 1;for(t=1,r=n=2,s=e;2<=s?n<=s:n>=s;r=2<=s?++n:--n)t*=r;return t},most_guessable_match_sequence:function(e,t,r){var n,s,a,u,i,_,o,h,E,c,g,f,l,p,A,S,R,v,I,M,N,C,U,T;for(null==r&&(r=!1),l=e.length,f=function(){var e,t,r;for(r=[],n=e=0,t=l;0<=t?e<t:e>t;n=0<=t?++e:--e)r.push([]);return r}(),p=0,_=t.length;p<_;p++)c=t[p],f[c.j].push(c);for(v=0,o=f.length;v<o;v++)E=f[v],E.sort(function(e,t){return e.i-t.i});for(A={m:function(){var e,t,r;for(t=[],n=r=0,e=l;0<=e?r<e:r>e;n=0<=e?++r:--r)t.push({});return t}(),pi:function(){var e,t,r;for(t=[],n=r=0,e=l;0<=e?r<e:r>e;n=0<=e?++r:--r)t.push({});return t}(),g:function(){var e,t,r;for(t=[],n=r=0,e=l;0<=e?r<e:r>e;n=0<=e?++r:--r)t.push({});return t}()},U=function(t){return function(n,s){var a,u,i,_,o,h;_=n.j,o=t.estimate_guesses(n,e),s>1&&(o*=A.pi[n.i-1][s-1]),i=t.factorial(s)*o,r||(i+=Math.pow(MIN_GUESSES_BEFORE_GROWING_SEQUENCE,s-1)),h=A.g[_];for(u in h)if(a=h[u],!(u>s)&&a<=i)return;return A.g[_][s]=i,A.m[_][s]=n,A.pi[_][s]=o}}(this),s=function(e){return function(e){var t,r,n,s,a,u;for(c=g(0,e),U(c,1),a=[],t=u=1,s=e;1<=s?u<=s:u>=s;t=1<=s?++u:--u)c=g(t,e),a.push(function(){var e,s;e=A.m[t-1],s=[];for(r in e)n=e[r],r=parseInt(r),"bruteforce"!==n.pattern&&s.push(U(c,r+1));return s}());return a}}(this),g=function(t){return function(t,r){return{pattern:"bruteforce",token:e.slice(t,+r+1||9e9),i:t,j:r}}}(this),C=function(e){return function(e){var t,r,n,s,a,u,i;u=[],s=e-1,a=void 0,n=1/0,i=A.g[s];for(r in i)t=i[r],t<n&&(a=r,n=t);for(;s>=0;)c=A.m[s][a],u.unshift(c),s=c.i-1,a--;return u}}(this),u=N=0,I=l;0<=I?N<I:N>I;u=0<=I?++N:--N){for(M=f[u],T=0,h=M.length;T<h;T++)if(c=M[T],c.i>0)for(i in A.m[c.i-1])i=parseInt(i),U(c,i+1);else U(c,1);s(u)}return R=C(l),S=R.length,a=0===e.length?1:A.g[l-1][S],{password:e,guesses:a,guesses_log10:this.log10(a),sequence:R}},estimate_guesses:function(e,t){var r,n,s;return null!=e.guesses?e.guesses:(s=1,e.token.length<t.length&&(s=1===e.token.length?MIN_SUBMATCH_GUESSES_SINGLE_CHAR:MIN_SUBMATCH_GUESSES_MULTI_CHAR),r={bruteforce:this.bruteforce_guesses,dictionary:this.dictionary_guesses,spatial:this.spatial_guesses,repeat:this.repeat_guesses,sequence:this.sequence_guesses,regex:this.regex_guesses,date:this.date_guesses},n=r[e.pattern].call(this,e),e.guesses=Math.max(n,s),e.guesses_log10=this.log10(e.guesses),e.guesses)},bruteforce_guesses:function(e){var t,r;return t=Math.pow(BRUTEFORCE_CARDINALITY,e.token.length),r=1===e.token.length?MIN_SUBMATCH_GUESSES_SINGLE_CHAR+1:MIN_SUBMATCH_GUESSES_MULTI_CHAR+1,Math.max(t,r)},repeat_guesses:function(e){return e.base_guesses*e.repeat_count},sequence_guesses:function(e){var t,r;return r=e.token.charAt(0),t="a"===r||"A"===r||"z"===r||"Z"===r||"0"===r||"1"===r||"9"===r?4:r.match(/\d/)?10:26,e.ascending||(t*=2),t*e.token.length},MIN_YEAR_SPACE:20,REFERENCE_YEAR:2016,regex_guesses:function(e){var t,r;if(t={alpha_lower:26,alpha_upper:26,alpha:52,alphanumeric:62,digits:10,symbols:33},e.regex_name in t)return Math.pow(t[e.regex_name],e.token.length);switch(e.regex_name){case"recent_year":return r=Math.abs(parseInt(e.regex_match[0])-this.REFERENCE_YEAR),r=Math.max(r,this.MIN_YEAR_SPACE)}},date_guesses:function(e){var t,r;return r=Math.max(Math.abs(e.year-this.REFERENCE_YEAR),this.MIN_YEAR_SPACE),t=365*r,e.separator&&(t*=4),t},KEYBOARD_AVERAGE_DEGREE:calc_average_degree(adjacency_graphs.qwerty),KEYPAD_AVERAGE_DEGREE:calc_average_degree(adjacency_graphs.keypad),KEYBOARD_STARTING_POSITIONS:function(){var e,t;e=adjacency_graphs.qwerty,t=[];for(k in e)v=e[k],t.push(k);return t}().length,KEYPAD_STARTING_POSITIONS:function(){var e,t;e=adjacency_graphs.keypad,t=[];for(k in e)v=e[k],t.push(k);return t}().length,spatial_guesses:function(e){var t,r,n,s,a,u,i,_,o,h,E,c,g,f,l,p,A,S;for("qwerty"===(E=e.graph)||"dvorak"===E?(l=this.KEYBOARD_STARTING_POSITIONS,s=this.KEYBOARD_AVERAGE_DEGREE):(l=this.KEYPAD_STARTING_POSITIONS,s=this.KEYPAD_AVERAGE_DEGREE),a=0,t=e.token.length,A=e.turns,u=_=2,c=t;2<=c?_<=c:_>=c;u=2<=c?++_:--_)for(o=Math.min(A,u-1),i=h=1,g=o;1<=g?h<=g:h>=g;i=1<=g?++h:--h)a+=this.nCk(u-1,i-1)*l*Math.pow(s,i);if(e.shifted_count)if(r=e.shifted_count,n=e.token.length-e.shifted_count,0===r||0===n)a*=2;else{for(p=0,u=S=1,f=Math.min(r,n);1<=f?S<=f:S>=f;u=1<=f?++S:--S)p+=this.nCk(r+n,u);a*=p}return a},dictionary_guesses:function(e){var t;return e.base_guesses=e.rank,e.uppercase_variations=this.uppercase_variations(e),e.l33t_variations=this.l33t_variations(e),t=e.reversed&&2||1,e.base_guesses*e.uppercase_variations*e.l33t_variations*t},START_UPPER:/^[A-Z][^A-Z]+$/,END_UPPER:/^[^A-Z]+[A-Z]$/,ALL_UPPER:/^[^a-z]+$/,ALL_LOWER:/^[^A-Z]+$/,uppercase_variations:function(e){var t,r,n,s,a,u,i,_,o,h,E,c;if(c=e.token,c.match(this.ALL_LOWER)||c.toLowerCase()===c)return 1;for(_=[this.START_UPPER,this.END_UPPER,this.ALL_UPPER],u=0,a=_.length;u<a;u++)if(h=_[u],c.match(h))return 2;for(r=function(){var e,t,r,s;for(r=c.split(""),s=[],t=0,e=r.length;t<e;t++)n=r[t],n.match(/[A-Z]/)&&s.push(n);return s}().length,t=function(){var e,t,r,s;for(r=c.split(""),s=[],t=0,e=r.length;t<e;t++)n=r[t],n.match(/[a-z]/)&&s.push(n);return s}().length,E=0,s=i=1,o=Math.min(r,t);1<=o?i<=o:i>=o;s=1<=o?++i:--i)E+=this.nCk(r+t,s);return E},l33t_variations:function(e){var t,r,n,s,a,u,i,_,o,h,E,c,g;if(!e.l33t)return 1;g=1,o=e.sub;for(E in o)if(c=o[E],s=e.token.toLowerCase().split(""),t=function(){var e,t,r;for(r=[],t=0,e=s.length;t<e;t++)n=s[t],n===E&&r.push(n);return r}().length,r=function(){var e,t,r;for(r=[],t=0,e=s.length;t<e;t++)n=s[t],n===c&&r.push(n);return r}().length,0===t||0===r)g*=2;else{for(i=Math.min(r,t),_=0,a=u=1,h=i;1<=h?u<=h:u>=h;a=1<=h?++u:--u)_+=this.nCk(r+t,a);g*=_}return g}},module.exports=scoring;
41344
41345},{"./adjacency_graphs":1}],7:[function(require,module,exports){
41346var time_estimates;time_estimates={estimate_attack_times:function(e){var t,n,s,o;n={online_throttling_100_per_hour:e/(100/3600),online_no_throttling_10_per_second:e/10,offline_slow_hashing_1e4_per_second:e/1e4,offline_fast_hashing_1e10_per_second:e/1e10},t={};for(s in n)o=n[s],t[s]=this.display_time(o);return{crack_times_seconds:n,crack_times_display:t,score:this.guesses_to_score(e)}},guesses_to_score:function(e){var t;return t=5,e<1e3+t?0:e<1e6+t?1:e<1e8+t?2:e<1e10+t?3:4},display_time:function(e){var t,n,s,o,_,r,i,a,u,c;return i=60,r=60*i,s=24*r,a=31*s,c=12*a,n=100*c,u=e<1?[null,"less than a second"]:e<i?(t=Math.round(e),[t,t+" second"]):e<r?(t=Math.round(e/i),[t,t+" minute"]):e<s?(t=Math.round(e/r),[t,t+" hour"]):e<a?(t=Math.round(e/s),[t,t+" day"]):e<c?(t=Math.round(e/a),[t,t+" month"]):e<n?(t=Math.round(e/c),[t,t+" year"]):[null,"centuries"],o=u[0],_=u[1],null!=o&&1!==o&&(_+="s"),_}},module.exports=time_estimates;
41347
41348},{}]},{},[4])(4)
41349});
41350//# sourceMappingURL=zxcvbn.js.map
41351</script>
41352 <script>/*
41353 * Detects entropy from a string.
41354 *
41355 * Formats include:
41356 * binary [0-1]
41357 * base 6 [0-5]
41358 * dice 6 [1-6]
41359 * decimal [0-9]
41360 * hexadecimal [0-9A-F]
9e97eb76 41361 * card [A2-9TJQK][CDHS]
95f04905
IC
41362 *
41363 * Automatically uses lowest entropy to avoid issues such as interpretting 0101
41364 * as hexadecimal which would be 16 bits when really it's only 4 bits of binary
41365 * entropy.
41366 */
41367
41368window.Entropy = new (function() {
41369
78b8d604
IC
41370 var TWO = new BigInteger(2);
41371
95f04905
IC
41372 // matchers returns an array of the matched events for each type of entropy.
41373 // eg
41374 // matchers.binary("010") returns ["0", "1", "0"]
41375 // matchers.binary("a10") returns ["1", "0"]
41376 // matchers.hex("a10") returns ["a", "1", "0"]
41377 var matchers = {
41378 binary: function(str) {
41379 return str.match(/[0-1]/gi) || [];
41380 },
41381 base6: function(str) {
41382 return str.match(/[0-5]/gi) || [];
41383 },
41384 dice: function(str) {
41385 return str.match(/[1-6]/gi) || []; // ie dice numbers
41386 },
41387 base10: function(str) {
41388 return str.match(/[0-9]/gi) || [];
41389 },
41390 hex: function(str) {
41391 return str.match(/[0-9A-F]/gi) || [];
41392 },
41393 card: function(str) {
41394 // Format is NumberSuit, eg
41395 // AH ace of hearts
41396 // 8C eight of clubs
41397 // TD ten of diamonds
41398 // JS jack of spades
41399 // QH queen of hearts
41400 // KC king of clubs
41401 return str.match(/([A2-9TJQK][CDHS])/gi) || [];
41402 }
41403 }
41404
41405 // Convert array of cards from ["ac", "4d", "ks"]
41406 // to numbers between 0 and 51 [0, 16, 51]
41407 function convertCardsToInts(cards) {
41408 var ints = [];
41409 var values = "a23456789tjqk";
41410 var suits = "cdhs";
41411 for (var i=0; i<cards.length; i++) {
41412 var card = cards[i].toLowerCase();
41413 var value = card[0];
41414 var suit = card[1];
41415 var asInt = 13 * suits.indexOf(suit) + values.indexOf(value);
41416 ints.push(asInt);
41417 }
41418 return ints;
41419 }
41420
41421 this.fromString = function(rawEntropyStr) {
41422 // Find type of entropy being used (binary, hex, dice etc)
41423 var base = getBase(rawEntropyStr);
41424 // Convert dice to base6 entropy (ie 1-6 to 0-5)
41425 // This is done by changing all 6s to 0s
41426 if (base.str == "dice") {
41427 var newParts = [];
41428 var newInts = [];
41429 for (var i=0; i<base.parts.length; i++) {
41430 var c = base.parts[i];
41431 if ("12345".indexOf(c) > -1) {
41432 newParts[i] = base.parts[i];
41433 newInts[i] = base.ints[i];
41434 }
41435 else {
41436 newParts[i] = "0";
41437 newInts[i] = 0;
41438 }
41439 }
41440 base.str = "base 6 (dice)";
41441 base.ints = newInts;
41442 base.parts = newParts;
41443 base.matcher = matchers.base6;
41444 }
41445 // Detect empty entropy
41446 if (base.parts.length == 0) {
41447 return {
41448 binaryStr: "",
41449 cleanStr: "",
41450 cleanHtml: "",
41451 base: base,
41452 };
41453 }
41454 // Convert base.ints to BigInteger.
41455 // Due to using unusual bases, eg cards of base52, this is not as simple as
41456 // using BigInteger.parse()
41457 var entropyInt = BigInteger.ZERO;
41458 for (var i=base.ints.length-1; i>=0; i--) {
41459 var thisInt = BigInteger.parse(base.ints[i]);
41460 var power = (base.ints.length - 1) - i;
41461 var additionalEntropy = BigInteger.parse(base.asInt).pow(power).multiply(thisInt);
41462 entropyInt = entropyInt.add(additionalEntropy);
41463 }
41464 // Convert entropy to binary
41465 var entropyBin = entropyInt.toString(2);
41466 // If the first integer is small, it must be padded with zeros.
41467 // Otherwise the chance of the first bit being 1 is 100%, which is
41468 // obviously incorrect.
41469 // This is not perfect for non-2^n bases.
41470 var expectedBits = Math.floor(base.parts.length * Math.log2(base.asInt));
41471 while (entropyBin.length < expectedBits) {
41472 entropyBin = "0" + entropyBin;
41473 }
94959756
IC
41474 // Calculate the number of bits per event
41475 var bitsPerEvent = Math.log2(base.asInt);
ea87f1d3 41476 // Cards binary must be handled differently, since they're not replaced
9e97eb76 41477 if (base.asInt == 52) {
94959756
IC
41478 var cardEntropy = processCardEntropy(base.parts);
41479 entropyBin = cardEntropy.binaryStr;
41480 bitsPerEvent = cardEntropy.bitsPerEvent;
9e97eb76 41481 }
95f04905
IC
41482 // Supply a 'filtered' entropy string for display purposes
41483 var entropyClean = base.parts.join("");
41484 var entropyHtml = base.parts.join("");
41485 if (base.asInt == 52) {
41486 entropyClean = base.parts.join(" ").toUpperCase();
41487 entropyClean = entropyClean.replace(/C/g, "\u2663");
41488 entropyClean = entropyClean.replace(/D/g, "\u2666");
41489 entropyClean = entropyClean.replace(/H/g, "\u2665");
41490 entropyClean = entropyClean.replace(/S/g, "\u2660");
41491 entropyHtml = base.parts.join(" ").toUpperCase();
41492 entropyHtml = entropyHtml.replace(/C/g, "<span class='card-suit club'>\u2663</span>");
41493 entropyHtml = entropyHtml.replace(/D/g, "<span class='card-suit diamond'>\u2666</span>");
41494 entropyHtml = entropyHtml.replace(/H/g, "<span class='card-suit heart'>\u2665</span>");
41495 entropyHtml = entropyHtml.replace(/S/g, "<span class='card-suit spade'>\u2660</span>");
41496 }
9e97eb76 41497 // Return the result
95f04905
IC
41498 var e = {
41499 binaryStr: entropyBin,
41500 cleanStr: entropyClean,
41501 cleanHtml: entropyHtml,
94959756 41502 bitsPerEvent: bitsPerEvent,
95f04905
IC
41503 base: base,
41504 }
41505 return e;
41506 }
41507
78b8d604
IC
41508 function getSortedDeck() {
41509 var s = [];
41510 var suits = "CDHS";
41511 var values = "A23456789TJQK";
41512 for (var i=0; i<suits.length; i++) {
41513 for (var j=0; j<values.length; j++) {
41514 s.push(values[j]+suits[i]);
41515 }
41516 }
41517 return s;
41518 }
41519
95f04905
IC
41520 function getBase(str) {
41521 // Need to get the lowest base for the supplied entropy.
41522 // This prevents interpreting, say, dice rolls as hexadecimal.
41523 var binaryMatches = matchers.binary(str);
41524 var hexMatches = matchers.hex(str);
41525 // Find the lowest base that can be used, whilst ignoring any irrelevant chars
41526 if (binaryMatches.length == hexMatches.length && hexMatches.length > 0) {
41527 var ints = binaryMatches.map(function(i) { return parseInt(i, 2) });
41528 return {
41529 ints: ints,
41530 parts: binaryMatches,
41531 matcher: matchers.binary,
41532 asInt: 2,
41533 str: "binary",
41534 }
41535 }
41536 var cardMatches = matchers.card(str);
41537 if (cardMatches.length >= hexMatches.length / 2) {
41538 var ints = convertCardsToInts(cardMatches);
41539 return {
41540 ints: ints,
41541 parts: cardMatches,
41542 matcher: matchers.card,
41543 asInt: 52,
41544 str: "card",
41545 }
41546 }
41547 var diceMatches = matchers.dice(str);
41548 if (diceMatches.length == hexMatches.length && hexMatches.length > 0) {
41549 var ints = diceMatches.map(function(i) { return parseInt(i) });
41550 return {
41551 ints: ints,
41552 parts: diceMatches,
41553 matcher: matchers.dice,
41554 asInt: 6,
41555 str: "dice",
41556 }
41557 }
41558 var base6Matches = matchers.base6(str);
41559 if (base6Matches.length == hexMatches.length && hexMatches.length > 0) {
41560 var ints = base6Matches.map(function(i) { return parseInt(i) });
41561 return {
41562 ints: ints,
41563 parts: base6Matches,
41564 matcher: matchers.base6,
41565 asInt: 6,
41566 str: "base 6",
41567 }
41568 }
41569 var base10Matches = matchers.base10(str);
41570 if (base10Matches.length == hexMatches.length && hexMatches.length > 0) {
41571 var ints = base10Matches.map(function(i) { return parseInt(i) });
41572 return {
41573 ints: ints,
41574 parts: base10Matches,
41575 matcher: matchers.base10,
41576 asInt: 10,
41577 str: "base 10",
41578 }
41579 }
41580 var ints = hexMatches.map(function(i) { return parseInt(i, 16) });
41581 return {
41582 ints: ints,
41583 parts: hexMatches,
41584 matcher: matchers.hex,
41585 asInt: 16,
41586 str: "hexadecimal",
41587 }
41588 }
41589
ea87f1d3
IC
41590 // Assume cards are NOT replaced.
41591 // Additional entropy decreases as more cards are used. This means
41592 // total possible entropy is measured using n!, not base^n.
41593 // eg the second last card can be only one of two, not one of fifty two
41594 // so the added entropy for that card is only one bit at most
94959756 41595 function processCardEntropy(cards) {
ea87f1d3
IC
41596 // Track how many instances of each card have been used, and thus
41597 // how many decks are in use.
41598 var cardCounts = {};
41599 var numberOfDecks = 0;
41600 // Work out number of decks by max(duplicates)
41601 for (var i=0; i<cards.length; i++) {
41602 // Get the card that was drawn
41603 var cardLower = cards[i];
41604 var card = cardLower.toUpperCase();
41605 // Initialize the count for this card if needed
41606 if (!(card in cardCounts)) {
41607 cardCounts[card] = 0;
41608 }
41609 cardCounts[card] += 1;
41610 // See if this is max(duplicates)
41611 if (cardCounts[card] > numberOfDecks) {
41612 numberOfDecks = cardCounts[card];
41613 }
41614 }
41615 // Work out the total number of bits for this many decks
41616 // See http://crypto.stackexchange.com/q/41886
fc7c248f
IC
41617 var gainedBits = 0;
41618 // Equivalent of Math.log2(factorial(52*numberOfDecks))
41619 // which becomes infinity for numberOfDecks > 4
41620 for (var i=1; i<=52*numberOfDecks; i++) {
41621 gainedBits = gainedBits + Math.log2(i);
41622 }
ea87f1d3
IC
41623 var lostBits = 52 * Math.log2(factorial(numberOfDecks));
41624 var maxBits = gainedBits - lostBits;
41625 // Convert the drawn cards to a binary representation.
41626 // The exact technique for doing this is unclear.
41627 // See
41628 // http://crypto.stackexchange.com/a/41896
41629 // "I even doubt that this is well defined (only the average entropy
41630 // is, I believe)."
41631 // See
41632 // https://github.com/iancoleman/bip39/issues/33#issuecomment-263021856
41633 // "The binary representation can be the first log(permutations,2) bits
41634 // of the sha-2 hash of the normalized deck string."
41635 //
41636 // In this specific implementation, the first N bits of the hash of the
41637 // normalized cards string is being used. Uppercase, no spaces; eg
41638 // sha256("AH8DQSTC2H")
41639 var totalCards = numberOfDecks * 52;
41640 var percentUsed = cards.length / totalCards;
41641 // Calculate the average number of bits of entropy for the number of
41642 // cards drawn.
41643 var numberOfBits = Math.floor(maxBits * percentUsed);
41644 // Create a normalized string of the selected cards
41645 var normalizedCards = cards.join("").toUpperCase();
41646 // Convert to binary using the SHA256 hash of the normalized cards.
434caecd 41647 // If the number of bits is more than 256, multiple hashes
ea87f1d3
IC
41648 // are used until the required number of bits is reached.
41649 var entropyBin = "";
41650 var iterations = 0;
41651 while (entropyBin.length < numberOfBits) {
434caecd 41652 var hashedCards = sjcl.hash.sha256.hash(normalizedCards + ":" + iterations);
ea87f1d3
IC
41653 var hashHex = sjcl.codec.hex.fromBits(hashedCards);
41654 for (var i=0; i<hashHex.length; i++) {
41655 var decimal = parseInt(hashHex[i], 16);
41656 var binary = decimal.toString(2);
41657 while (binary.length < 4) {
41658 binary = "0" + binary;
41659 }
41660 entropyBin = entropyBin + binary;
41661 }
41662 iterations = iterations + 1;
41663 }
41664 // Truncate to the appropriate number of bits.
41665 entropyBin = entropyBin.substring(0, numberOfBits);
94959756
IC
41666 // Get the number of bits per event
41667 bitsPerEvent = maxBits / totalCards;
41668 return {
41669 binaryStr: entropyBin,
41670 bitsPerEvent: bitsPerEvent,
41671 }
ea87f1d3
IC
41672 }
41673
95f04905
IC
41674 // Polyfill for Math.log2
41675 // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/log2#Polyfill
41676 Math.log2 = Math.log2 || function(x) {
41677 // The polyfill isn't good enough because of the poor accuracy of
41678 // Math.LOG2E
41679 // log2(8) gave 2.9999999999999996 which when floored causes issues.
41680 // So instead use the BigInteger library to get it right.
41681 return BigInteger.log(x) / BigInteger.log(2);
41682 };
41683
9e97eb76
IC
41684 // Depends on BigInteger
41685 function factorial(n) {
41686 if (n == 0) {
41687 return 1;
41688 }
41689 f = BigInteger.ONE;
41690 for (var i=1; i<=n; i++) {
41691 f = f.multiply(new BigInteger(i));
41692 }
41693 return f;
41694 }
41695
95f04905 41696})();
c6624d51
IC
41697</script>
41698 <script>(function() {
41699
41700 // mnemonics is populated as required by getLanguage
41701 var mnemonics = { "english": new Mnemonic("english") };
41702 var mnemonic = mnemonics["english"];
3725abb5 41703 var seed = null;
c6624d51
IC
41704 var bip32RootKey = null;
41705 var bip32ExtendedKey = null;
41706 var network = bitcoin.networks.bitcoin;
41707 var addressRowTemplate = $("#address-row-template");
41708
41709 var showIndex = true;
41710 var showAddress = true;
41711 var showPubKey = true;
41712 var showPrivKey = true;
52da415f 41713 var showQr = false;
c6624d51
IC
41714
41715 var entropyChangeTimeoutEvent = null;
41716 var phraseChangeTimeoutEvent = null;
41717 var rootKeyChangedTimeoutEvent = null;
41718
40892aba
IC
41719 var generationProcesses = [];
41720
c6624d51
IC
41721 var DOM = {};
41722 DOM.network = $(".network");
56530adc 41723 DOM.bip32Client = $("#bip32-client");
c6624d51
IC
41724 DOM.phraseNetwork = $("#network-phrase");
41725 DOM.useEntropy = $(".use-entropy");
41726 DOM.entropyContainer = $(".entropy-container");
41727 DOM.entropy = $(".entropy");
2a6dd137
IC
41728 DOM.entropyFiltered = DOM.entropyContainer.find(".filtered");
41729 DOM.entropyType = DOM.entropyContainer.find(".type");
41730 DOM.entropyStrength = DOM.entropyContainer.find(".strength");
41731 DOM.entropyEventCount = DOM.entropyContainer.find(".event-count");
41732 DOM.entropyBits = DOM.entropyContainer.find(".bits");
41733 DOM.entropyBitsPerEvent = DOM.entropyContainer.find(".bits-per-event");
41734 DOM.entropyWordCount = DOM.entropyContainer.find(".word-count");
41735 DOM.entropyBinary = DOM.entropyContainer.find(".binary");
41736 DOM.entropyMnemonicLength = DOM.entropyContainer.find(".mnemonic-length");
c6624d51
IC
41737 DOM.phrase = $(".phrase");
41738 DOM.passphrase = $(".passphrase");
41739 DOM.generateContainer = $(".generate-container");
41740 DOM.generate = $(".generate");
41741 DOM.seed = $(".seed");
41742 DOM.rootKey = $(".root-key");
41743 DOM.extendedPrivKey = $(".extended-priv-key");
41744 DOM.extendedPubKey = $(".extended-pub-key");
41745 DOM.bip32tab = $("#bip32-tab");
41746 DOM.bip44tab = $("#bip44-tab");
41747 DOM.bip32panel = $("#bip32");
41748 DOM.bip44panel = $("#bip44");
41749 DOM.bip32path = $("#bip32-path");
41750 DOM.bip44path = $("#bip44-path");
41751 DOM.bip44purpose = $("#bip44 .purpose");
41752 DOM.bip44coin = $("#bip44 .coin");
41753 DOM.bip44account = $("#bip44 .account");
20083ab9
IC
41754 DOM.bip44accountXprv = $("#bip44 .account-xprv");
41755 DOM.bip44accountXpub = $("#bip44 .account-xpub");
c6624d51 41756 DOM.bip44change = $("#bip44 .change");
18abe53b 41757 DOM.generatedStrength = $(".generate-container .strength");
c6624d51
IC
41758 DOM.hardenedAddresses = $(".hardened-addresses");
41759 DOM.addresses = $(".addresses");
41760 DOM.rowsToAdd = $(".rows-to-add");
41761 DOM.more = $(".more");
41762 DOM.feedback = $(".feedback");
41763 DOM.tab = $(".derivation-type a");
41764 DOM.indexToggle = $(".index-toggle");
41765 DOM.addressToggle = $(".address-toggle");
41766 DOM.publicKeyToggle = $(".public-key-toggle");
41767 DOM.privateKeyToggle = $(".private-key-toggle");
41768 DOM.languages = $(".languages a");
e00964cc 41769 DOM.qrContainer = $(".qr-container");
52da415f 41770 DOM.qrHider = DOM.qrContainer.find(".qr-hider");
e00964cc
IC
41771 DOM.qrImage = DOM.qrContainer.find(".qr-image");
41772 DOM.qrHint = DOM.qrContainer.find(".qr-hint");
41773 DOM.showQrEls = $("[data-show-qr]");
c6624d51
IC
41774
41775 function init() {
41776 // Events
41777 DOM.network.on("change", networkChanged);
56530adc 41778 DOM.bip32Client.on("change", bip32ClientChanged);
c6624d51
IC
41779 DOM.useEntropy.on("change", setEntropyVisibility);
41780 DOM.entropy.on("input", delayedEntropyChanged);
18abe53b 41781 DOM.entropyMnemonicLength.on("change", entropyChanged);
c6624d51
IC
41782 DOM.phrase.on("input", delayedPhraseChanged);
41783 DOM.passphrase.on("input", delayedPhraseChanged);
41784 DOM.generate.on("click", generateClicked);
41785 DOM.more.on("click", showMore);
41786 DOM.rootKey.on("input", delayedRootKeyChanged);
41787 DOM.bip32path.on("input", calcForDerivationPath);
41788 DOM.bip44purpose.on("input", calcForDerivationPath);
41789 DOM.bip44coin.on("input", calcForDerivationPath);
41790 DOM.bip44account.on("input", calcForDerivationPath);
41791 DOM.bip44change.on("input", calcForDerivationPath);
41792 DOM.tab.on("shown.bs.tab", calcForDerivationPath);
41793 DOM.hardenedAddresses.on("change", calcForDerivationPath);
41794 DOM.indexToggle.on("click", toggleIndexes);
41795 DOM.addressToggle.on("click", toggleAddresses);
41796 DOM.publicKeyToggle.on("click", togglePublicKeys);
41797 DOM.privateKeyToggle.on("click", togglePrivateKeys);
41798 DOM.languages.on("click", languageChanged);
e00964cc 41799 setQrEvents(DOM.showQrEls);
c6624d51
IC
41800 disableForms();
41801 hidePending();
41802 hideValidationError();
41803 populateNetworkSelect();
56530adc 41804 populateClientSelect();
c6624d51
IC
41805 }
41806
41807 // Event handlers
41808
41809 function networkChanged(e) {
41810 var networkIndex = e.target.value;
41811 networks[networkIndex].onSelect();
41812 if (seed != null) {
41813 phraseChanged();
41814 }
41815 else {
41816 rootKeyChanged();
41817 }
41818 }
41819
56530adc
IC
41820 function bip32ClientChanged(e) {
41821 var clientIndex = DOM.bip32Client.val();
41822 if (clientIndex == "custom") {
41823 DOM.bip32path.prop("readonly", false);
41824 }
41825 else {
41826 DOM.bip32path.prop("readonly", true);
41827 clients[clientIndex].onSelect();
41828 if (seed != null) {
41829 phraseChanged();
41830 }
41831 else {
41832 rootKeyChanged();
41833 }
41834 }
41835 }
41836
c6624d51
IC
41837 function setEntropyVisibility() {
41838 if (isUsingOwnEntropy()) {
41839 DOM.entropyContainer.removeClass("hidden");
41840 DOM.generateContainer.addClass("hidden");
41841 DOM.phrase.prop("readonly", true);
41842 DOM.entropy.focus();
41843 entropyChanged();
41844 }
41845 else {
41846 DOM.entropyContainer.addClass("hidden");
41847 DOM.generateContainer.removeClass("hidden");
41848 DOM.phrase.prop("readonly", false);
18abe53b 41849 hidePending();
c6624d51
IC
41850 }
41851 }
41852
41853 function delayedPhraseChanged() {
41854 hideValidationError();
41855 showPending();
41856 if (phraseChangeTimeoutEvent != null) {
41857 clearTimeout(phraseChangeTimeoutEvent);
41858 }
41859 phraseChangeTimeoutEvent = setTimeout(phraseChanged, 400);
41860 }
41861
41862 function phraseChanged() {
41863 showPending();
41864 hideValidationError();
41865 setMnemonicLanguage();
41866 // Get the mnemonic phrase
41867 var phrase = DOM.phrase.val();
41868 var errorText = findPhraseErrors(phrase);
41869 if (errorText) {
41870 showValidationError(errorText);
41871 return;
41872 }
41873 // Calculate and display
41874 var passphrase = DOM.passphrase.val();
41875 calcBip32RootKeyFromSeed(phrase, passphrase);
41876 calcForDerivationPath();
41877 hidePending();
41878 }
41879
41880 function delayedEntropyChanged() {
41881 hideValidationError();
41882 showPending();
41883 if (entropyChangeTimeoutEvent != null) {
41884 clearTimeout(entropyChangeTimeoutEvent);
41885 }
41886 entropyChangeTimeoutEvent = setTimeout(entropyChanged, 400);
41887 }
41888
41889 function entropyChanged() {
18abe53b
IC
41890 // If blank entropy, clear mnemonic, addresses, errors
41891 if (DOM.entropy.val().trim().length == 0) {
41892 clearDisplay();
2a6dd137 41893 clearEntropyFeedback();
18abe53b
IC
41894 DOM.phrase.val("");
41895 showValidationError("Blank entropy");
41896 return;
41897 }
41898 // Get the current phrase to detect changes
41899 var phrase = DOM.phrase.val();
41900 // Set the phrase from the entropy
c6624d51 41901 setMnemonicFromEntropy();
18abe53b
IC
41902 // Recalc addresses if the phrase has changed
41903 var newPhrase = DOM.phrase.val();
41904 if (newPhrase != phrase) {
41905 if (newPhrase.length == 0) {
41906 clearDisplay();
41907 }
41908 else {
41909 phraseChanged();
41910 }
41911 }
41912 else {
41913 hidePending();
41914 }
c6624d51
IC
41915 }
41916
41917 function delayedRootKeyChanged() {
41918 // Warn if there is an existing mnemonic or passphrase.
41919 if (DOM.phrase.val().length > 0 || DOM.passphrase.val().length > 0) {
41920 if (!confirm("This will clear existing mnemonic and passphrase")) {
41921 DOM.rootKey.val(bip32RootKey);
41922 return
41923 }
41924 }
41925 hideValidationError();
41926 showPending();
41927 // Clear existing mnemonic and passphrase
41928 DOM.phrase.val("");
41929 DOM.passphrase.val("");
41930 seed = null;
41931 if (rootKeyChangedTimeoutEvent != null) {
41932 clearTimeout(rootKeyChangedTimeoutEvent);
41933 }
41934 rootKeyChangedTimeoutEvent = setTimeout(rootKeyChanged, 400);
41935 }
41936
41937 function rootKeyChanged() {
41938 showPending();
41939 hideValidationError();
41940 // Validate the root key TODO
41941 var rootKeyBase58 = DOM.rootKey.val();
41942 var errorText = validateRootKey(rootKeyBase58);
41943 if (errorText) {
41944 showValidationError(errorText);
41945 return;
41946 }
41947 // Calculate and display
41948 calcBip32RootKeyFromBase58(rootKeyBase58);
41949 calcForDerivationPath();
c6624d51
IC
41950 }
41951
41952 function calcForDerivationPath() {
41953 showPending();
ba3cb9ec 41954 clearAddressesList();
c6624d51
IC
41955 hideValidationError();
41956 // Get the derivation path
41957 var derivationPath = getDerivationPath();
41958 var errorText = findDerivationPathErrors(derivationPath);
41959 if (errorText) {
41960 showValidationError(errorText);
41961 return;
41962 }
20083ab9
IC
41963 bip32ExtendedKey = calcBip32ExtendedKey(derivationPath);
41964 if (bip44TabSelected()) {
41965 displayBip44Info();
41966 }
c6624d51
IC
41967 displayBip32Info();
41968 hidePending();
41969 }
41970
41971 function generateClicked() {
41972 if (isUsingOwnEntropy()) {
41973 return;
41974 }
41975 clearDisplay();
41976 showPending();
41977 setTimeout(function() {
41978 setMnemonicLanguage();
41979 var phrase = generateRandomPhrase();
41980 if (!phrase) {
41981 return;
41982 }
41983 phraseChanged();
41984 }, 50);
41985 }
41986
41987 function languageChanged() {
41988 setTimeout(function() {
41989 setMnemonicLanguage();
41990 if (DOM.phrase.val().length > 0) {
41991 var newPhrase = convertPhraseToNewLanguage();
41992 DOM.phrase.val(newPhrase);
41993 phraseChanged();
41994 }
41995 else {
41996 DOM.generate.trigger("click");
41997 }
41998 }, 50);
41999 }
42000
42001 function toggleIndexes() {
42002 showIndex = !showIndex;
42003 $("td.index span").toggleClass("invisible");
42004 }
42005
42006 function toggleAddresses() {
42007 showAddress = !showAddress;
42008 $("td.address span").toggleClass("invisible");
42009 }
42010
42011 function togglePublicKeys() {
42012 showPubKey = !showPubKey;
42013 $("td.pubkey span").toggleClass("invisible");
42014 }
42015
42016 function togglePrivateKeys() {
42017 showPrivKey = !showPrivKey;
42018 $("td.privkey span").toggleClass("invisible");
42019 }
42020
42021 // Private methods
42022
42023 function generateRandomPhrase() {
42024 if (!hasStrongRandom()) {
42025 var errorText = "This browser does not support strong randomness";
42026 showValidationError(errorText);
42027 return;
42028 }
18abe53b 42029 var numWords = parseInt(DOM.generatedStrength.val());
c6624d51
IC
42030 var strength = numWords / 3 * 32;
42031 var words = mnemonic.generate(strength);
42032 DOM.phrase.val(words);
42033 return words;
42034 }
42035
42036 function calcBip32RootKeyFromSeed(phrase, passphrase) {
42037 seed = mnemonic.toSeed(phrase, passphrase);
42038 bip32RootKey = bitcoin.HDNode.fromSeedHex(seed, network);
42039 }
42040
42041 function calcBip32RootKeyFromBase58(rootKeyBase58) {
42042 bip32RootKey = bitcoin.HDNode.fromBase58(rootKeyBase58, network);
42043 }
42044
42045 function calcBip32ExtendedKey(path) {
0a1f0259
IC
42046 // Check there's a root key to derive from
42047 if (!bip32RootKey) {
42048 return bip32RootKey;
42049 }
20083ab9 42050 var extendedKey = bip32RootKey;
c6624d51
IC
42051 // Derive the key from the path
42052 var pathBits = path.split("/");
ebd8d4e8
IC
42053 for (var i=0; i<pathBits.length; i++) {
42054 var bit = pathBits[i];
42055 var index = parseInt(bit);
42056 if (isNaN(index)) {
42057 continue;
42058 }
42059 var hardened = bit[bit.length-1] == "'";
ba3cb9ec
IC
42060 var isPriv = "privKey" in extendedKey;
42061 var invalidDerivationPath = hardened && !isPriv;
42062 if (invalidDerivationPath) {
42063 extendedKey = null;
42064 }
42065 else if (hardened) {
20083ab9 42066 extendedKey = extendedKey.deriveHardened(index);
ebd8d4e8
IC
42067 }
42068 else {
20083ab9 42069 extendedKey = extendedKey.derive(index);
ebd8d4e8
IC
42070 }
42071 }
20083ab9 42072 return extendedKey
ebd8d4e8
IC
42073 }
42074
42075 function showValidationError(errorText) {
42076 DOM.feedback
42077 .text(errorText)
42078 .show();
42079 }
42080
42081 function hideValidationError() {
42082 DOM.feedback
42083 .text("")
42084 .hide();
42085 }
42086
42087 function findPhraseErrors(phrase) {
ebd8d4e8 42088 // Preprocess the words
783981de 42089 phrase = mnemonic.normalizeString(phrase);
0515eeec 42090 var words = phraseToWordArray(phrase);
18abe53b
IC
42091 // Detect blank phrase
42092 if (words.length == 0) {
42093 return "Blank mnemonic";
42094 }
563e401a 42095 // Check each word
0515eeec
IC
42096 for (var i=0; i<words.length; i++) {
42097 var word = words[i];
42098 var language = getLanguage();
42099 if (WORDLISTS[language].indexOf(word) == -1) {
563e401a
IC
42100 console.log("Finding closest match to " + word);
42101 var nearestWord = findNearestWord(word);
42102 return word + " not in wordlist, did you mean " + nearestWord + "?";
42103 }
42104 }
ebd8d4e8 42105 // Check the words are valid
0515eeec 42106 var properPhrase = wordArrayToPhrase(words);
ebd8d4e8
IC
42107 var isValid = mnemonic.check(properPhrase);
42108 if (!isValid) {
42109 return "Invalid mnemonic";
42110 }
42111 return false;
42112 }
42113
efe41586
IC
42114 function validateRootKey(rootKeyBase58) {
42115 try {
42116 bitcoin.HDNode.fromBase58(rootKeyBase58);
42117 }
42118 catch (e) {
42119 return "Invalid root key";
42120 }
42121 return "";
42122 }
42123
38523d36 42124 function getDerivationPath() {
20083ab9 42125 if (bip44TabSelected()) {
38523d36
IC
42126 var purpose = parseIntNoNaN(DOM.bip44purpose.val(), 44);
42127 var coin = parseIntNoNaN(DOM.bip44coin.val(), 0);
42128 var account = parseIntNoNaN(DOM.bip44account.val(), 0);
42129 var change = parseIntNoNaN(DOM.bip44change.val(), 0);
42130 var path = "m/";
42131 path += purpose + "'/";
42132 path += coin + "'/";
42133 path += account + "'/";
42134 path += change;
42135 DOM.bip44path.val(path);
42136 var derivationPath = DOM.bip44path.val();
42137 console.log("Using derivation path from BIP44 tab: " + derivationPath);
42138 return derivationPath;
42139 }
20083ab9 42140 else if (bip32TabSelected()) {
38523d36
IC
42141 var derivationPath = DOM.bip32path.val();
42142 console.log("Using derivation path from BIP32 tab: " + derivationPath);
42143 return derivationPath;
42144 }
42145 else {
42146 console.log("Unknown derivation path");
42147 }
42148 }
42149
ebd8d4e8 42150 function findDerivationPathErrors(path) {
30c9e79d
IC
42151 // TODO is not perfect but is better than nothing
42152 // Inspired by
42153 // https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#test-vectors
42154 // and
42155 // https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#extended-keys
42156 var maxDepth = 255; // TODO verify this!!
42157 var maxIndexValue = Math.pow(2, 31); // TODO verify this!!
42158 if (path[0] != "m") {
42159 return "First character must be 'm'";
42160 }
42161 if (path.length > 1) {
42162 if (path[1] != "/") {
42163 return "Separator must be '/'";
42164 }
42165 var indexes = path.split("/");
42166 if (indexes.length > maxDepth) {
42167 return "Derivation depth is " + indexes.length + ", must be less than " + maxDepth;
42168 }
42169 for (var depth = 1; depth<indexes.length; depth++) {
42170 var index = indexes[depth];
42171 var invalidChars = index.replace(/^[0-9]+'?$/g, "")
42172 if (invalidChars.length > 0) {
42173 return "Invalid characters " + invalidChars + " found at depth " + depth;
42174 }
42175 var indexValue = parseInt(index.replace("'", ""));
42176 if (isNaN(depth)) {
42177 return "Invalid number at depth " + depth;
42178 }
42179 if (indexValue > maxIndexValue) {
42180 return "Value of " + indexValue + " at depth " + depth + " must be less than " + maxIndexValue;
42181 }
42182 }
42183 }
0a1f0259
IC
42184 // Check root key exists or else derivation path is useless!
42185 if (!bip32RootKey) {
42186 return "No root key";
42187 }
ba3cb9ec
IC
42188 // Check no hardened derivation path when using xpub keys
42189 var hardened = path.indexOf("'") > -1;
42190 var isXpubkey = !("privKey" in bip32RootKey);
42191 if (hardened && isXpubkey) {
42192 return "Hardened derivation path is invalid with xpub key";
42193 }
ebd8d4e8
IC
42194 return false;
42195 }
42196
20083ab9
IC
42197 function displayBip44Info() {
42198 // Get the derivation path for the account
42199 var purpose = parseIntNoNaN(DOM.bip44purpose.val(), 44);
42200 var coin = parseIntNoNaN(DOM.bip44coin.val(), 0);
42201 var account = parseIntNoNaN(DOM.bip44account.val(), 0);
42202 var path = "m/";
42203 path += purpose + "'/";
42204 path += coin + "'/";
42205 path += account + "'/";
42206 // Calculate the account extended keys
42207 var accountExtendedKey = calcBip32ExtendedKey(path);
42208 var accountXprv = accountExtendedKey.toBase58();
42209 var accountXpub = accountExtendedKey.toBase58(false);
42210 // Display the extended keys
42211 DOM.bip44accountXprv.val(accountXprv);
42212 DOM.bip44accountXpub.val(accountXpub);
42213 }
42214
ebd8d4e8
IC
42215 function displayBip32Info() {
42216 // Display the key
73161a92 42217 DOM.seed.val(seed);
ebd8d4e8
IC
42218 var rootKey = bip32RootKey.toBase58();
42219 DOM.rootKey.val(rootKey);
ba3cb9ec
IC
42220 var xprvkeyB58 = "NA";
42221 if (bip32ExtendedKey.privKey) {
42222 xprvkeyB58 = bip32ExtendedKey.toBase58();
42223 }
42224 var extendedPrivKey = xprvkeyB58;
ebd8d4e8
IC
42225 DOM.extendedPrivKey.val(extendedPrivKey);
42226 var extendedPubKey = bip32ExtendedKey.toBase58(false);
42227 DOM.extendedPubKey.val(extendedPubKey);
42228 // Display the addresses and privkeys
42229 clearAddressesList();
42230 displayAddresses(0, 20);
42231 }
42232
42233 function displayAddresses(start, total) {
40892aba
IC
42234 generationProcesses.push(new (function() {
42235
42236 var rows = [];
42237
42238 this.stop = function() {
42239 for (var i=0; i<rows.length; i++) {
42240 rows[i].shouldGenerate = false;
42241 }
42242 }
42243
42244 for (var i=0; i<total; i++) {
42245 var index = i + start;
42246 rows.push(new TableRow(index));
42247 }
42248
42249 })());
80c4dd2a
IC
42250 }
42251
42252 function TableRow(index) {
42253
40892aba
IC
42254 var self = this;
42255 this.shouldGenerate = true;
1975bfbc
IC
42256 var useHardenedAddresses = DOM.hardenedAddresses.prop("checked");
42257
80c4dd2a
IC
42258 function init() {
42259 calculateValues();
42260 }
42261
42262 function calculateValues() {
42263 setTimeout(function() {
40892aba
IC
42264 if (!self.shouldGenerate) {
42265 return;
42266 }
1975bfbc
IC
42267 var key = "";
42268 if (useHardenedAddresses) {
42269 key = bip32ExtendedKey.deriveHardened(index);
42270 }
42271 else {
42272 key = bip32ExtendedKey.derive(index);
42273 }
80c4dd2a 42274 var address = key.getAddress().toString();
ba3cb9ec
IC
42275 var privkey = "NA";
42276 if (key.privKey) {
42277 privkey = key.privKey.toWIF(network);
42278 }
1b12b2f5 42279 var pubkey = key.pubKey.toHex();
38523d36 42280 var indexText = getDerivationPath() + "/" + index;
1975bfbc
IC
42281 if (useHardenedAddresses) {
42282 indexText = indexText + "'";
42283 }
8b095871
IC
42284 // Ethereum values are different
42285 if (networks[DOM.network.val()].name == "Ethereum") {
42286 var privKeyBuffer = key.privKey.d.toBuffer();
42287 privkey = privKeyBuffer.toString('hex');
42288 var addressBuffer = ethUtil.privateToAddress(privKeyBuffer);
49b21f12
IC
42289 var hexAddress = addressBuffer.toString('hex');
42290 var checksumAddress = ethUtil.toChecksumAddress(hexAddress);
42291 address = ethUtil.addHexPrefix(checksumAddress);
8b095871 42292 }
1b12b2f5 42293 addAddressToList(indexText, address, pubkey, privkey);
80c4dd2a 42294 }, 50)
ebd8d4e8 42295 }
80c4dd2a
IC
42296
42297 init();
42298
ebd8d4e8
IC
42299 }
42300
42301 function showMore() {
42302 var start = DOM.addresses.children().length;
42303 var rowsToAdd = parseInt(DOM.rowsToAdd.val());
42304 if (isNaN(rowsToAdd)) {
42305 rowsToAdd = 20;
42306 DOM.rowsToAdd.val("20");
42307 }
42308 if (rowsToAdd > 200) {
42309 var msg = "Generating " + rowsToAdd + " rows could take a while. ";
42310 msg += "Do you want to continue?";
42311 if (!confirm(msg)) {
42312 return;
42313 }
42314 }
ebd8d4e8 42315 displayAddresses(start, rowsToAdd);
ebd8d4e8
IC
42316 }
42317
42318 function clearDisplay() {
42319 clearAddressesList();
42320 clearKey();
42321 hideValidationError();
42322 }
42323
42324 function clearAddressesList() {
42325 DOM.addresses.empty();
40892aba
IC
42326 stopGenerating();
42327 }
42328
42329 function stopGenerating() {
42330 while (generationProcesses.length > 0) {
42331 var generation = generationProcesses.shift();
42332 generation.stop();
42333 }
ebd8d4e8
IC
42334 }
42335
42336 function clearKey() {
42337 DOM.rootKey.val("");
42338 DOM.extendedPrivKey.val("");
42339 DOM.extendedPubKey.val("");
42340 }
42341
1b12b2f5 42342 function addAddressToList(indexText, address, pubkey, privkey) {
ebd8d4e8 42343 var row = $(addressRowTemplate.html());
80c4dd2a
IC
42344 // Elements
42345 var indexCell = row.find(".index span");
42346 var addressCell = row.find(".address span");
1b12b2f5 42347 var pubkeyCell = row.find(".pubkey span");
80c4dd2a
IC
42348 var privkeyCell = row.find(".privkey span");
42349 // Content
ae30fed8 42350 indexCell.text(indexText);
80c4dd2a 42351 addressCell.text(address);
1b12b2f5 42352 pubkeyCell.text(pubkey);
80c4dd2a
IC
42353 privkeyCell.text(privkey);
42354 // Visibility
42355 if (!showIndex) {
42356 indexCell.addClass("invisible");
42357 }
42358 if (!showAddress) {
42359 addressCell.addClass("invisible");
42360 }
1b12b2f5
IC
42361 if (!showPubKey) {
42362 pubkeyCell.addClass("invisible");
42363 }
80c4dd2a 42364 if (!showPrivKey) {
6d628db7 42365 privkeyCell.addClass("invisible");
80c4dd2a 42366 }
ebd8d4e8 42367 DOM.addresses.append(row);
e00964cc
IC
42368 var rowShowQrEls = row.find("[data-show-qr]");
42369 setQrEvents(rowShowQrEls);
ebd8d4e8
IC
42370 }
42371
42372 function hasStrongRandom() {
42373 return 'crypto' in window && window['crypto'] !== null;
42374 }
42375
42376 function disableForms() {
42377 $("form").on("submit", function(e) {
42378 e.preventDefault();
42379 });
42380 }
42381
ebd8d4e8
IC
42382 function parseIntNoNaN(val, defaultVal) {
42383 var v = parseInt(val);
42384 if (isNaN(v)) {
42385 return defaultVal;
42386 }
42387 return v;
42388 }
42389
42390 function showPending() {
42391 DOM.feedback
42392 .text("Calculating...")
42393 .show();
42394 }
42395
563e401a 42396 function findNearestWord(word) {
0515eeec
IC
42397 var language = getLanguage();
42398 var words = WORDLISTS[language];
563e401a
IC
42399 var minDistance = 99;
42400 var closestWord = words[0];
42401 for (var i=0; i<words.length; i++) {
42402 var comparedTo = words[i];
6ea15134
IC
42403 if (comparedTo.indexOf(word) == 0) {
42404 return comparedTo;
42405 }
563e401a
IC
42406 var distance = Levenshtein.get(word, comparedTo);
42407 if (distance < minDistance) {
42408 closestWord = comparedTo;
42409 minDistance = distance;
42410 }
42411 }
42412 return closestWord;
42413 }
42414
ebd8d4e8
IC
42415 function hidePending() {
42416 DOM.feedback
42417 .text("")
42418 .hide();
42419 }
42420
ab78acc6
IC
42421 function populateNetworkSelect() {
42422 for (var i=0; i<networks.length; i++) {
42423 var network = networks[i];
42424 var option = $("<option>");
42425 option.attr("value", i);
42426 option.text(network.name);
42427 DOM.phraseNetwork.append(option);
42428 }
42429 }
42430
56530adc
IC
42431 function populateClientSelect() {
42432 for (var i=0; i<clients.length; i++) {
42433 var client = clients[i];
42434 var option = $("<option>");
42435 option.attr("value", i);
42436 option.text(client.name);
42437 DOM.bip32Client.append(option);
42438 }
42439 }
42440
0515eeec
IC
42441 function getLanguage() {
42442 var defaultLanguage = "english";
42443 // Try to get from existing phrase
42444 var language = getLanguageFromPhrase();
42445 // Try to get from url if not from phrase
42446 if (language.length == 0) {
42447 language = getLanguageFromUrl();
42448 }
42449 // Default to English if no other option
42450 if (language.length == 0) {
42451 language = defaultLanguage;
42452 }
42453 return language;
42454 }
42455
42456 function getLanguageFromPhrase(phrase) {
42457 // Check if how many words from existing phrase match a language.
42458 var language = "";
42459 if (!phrase) {
42460 phrase = DOM.phrase.val();
42461 }
42462 if (phrase.length > 0) {
42463 var words = phraseToWordArray(phrase);
42464 var languageMatches = {};
42465 for (l in WORDLISTS) {
42466 // Track how many words match in this language
42467 languageMatches[l] = 0;
42468 for (var i=0; i<words.length; i++) {
42469 var wordInLanguage = WORDLISTS[l].indexOf(words[i]) > -1;
42470 if (wordInLanguage) {
42471 languageMatches[l]++;
42472 }
42473 }
42474 // Find languages with most word matches.
42475 // This is made difficult due to commonalities between Chinese
42476 // simplified vs traditional.
42477 var mostMatches = 0;
42478 var mostMatchedLanguages = [];
42479 for (var l in languageMatches) {
42480 var numMatches = languageMatches[l];
42481 if (numMatches > mostMatches) {
42482 mostMatches = numMatches;
42483 mostMatchedLanguages = [l];
42484 }
42485 else if (numMatches == mostMatches) {
42486 mostMatchedLanguages.push(l);
42487 }
42488 }
42489 }
42490 if (mostMatchedLanguages.length > 0) {
42491 // Use first language and warn if multiple detected
42492 language = mostMatchedLanguages[0];
42493 if (mostMatchedLanguages.length > 1) {
42494 console.warn("Multiple possible languages");
42495 console.warn(mostMatchedLanguages);
42496 }
42497 }
42498 }
42499 return language;
42500 }
42501
42502 function getLanguageFromUrl() {
c6624d51
IC
42503 for (var language in WORDLISTS) {
42504 if (window.location.hash.indexOf(language) > -1) {
42505 return language;
42506 }
42507 }
42508 return "";
0515eeec
IC
42509 }
42510
42511 function setMnemonicLanguage() {
42512 var language = getLanguage();
42513 // Load the bip39 mnemonic generator for this language if required
42514 if (!(language in mnemonics)) {
42515 mnemonics[language] = new Mnemonic(language);
42516 }
42517 mnemonic = mnemonics[language];
42518 }
42519
42520 function convertPhraseToNewLanguage() {
42521 var oldLanguage = getLanguageFromPhrase();
42522 var newLanguage = getLanguageFromUrl();
42523 var oldPhrase = DOM.phrase.val();
42524 var oldWords = phraseToWordArray(oldPhrase);
42525 var newWords = [];
42526 for (var i=0; i<oldWords.length; i++) {
42527 var oldWord = oldWords[i];
42528 var index = WORDLISTS[oldLanguage].indexOf(oldWord);
42529 var newWord = WORDLISTS[newLanguage][index];
42530 newWords.push(newWord);
42531 }
42532 newPhrase = wordArrayToPhrase(newWords);
42533 return newPhrase;
42534 }
42535
42536 // TODO look at jsbip39 - mnemonic.splitWords
42537 function phraseToWordArray(phrase) {
42538 var words = phrase.split(/\s/g);
42539 var noBlanks = [];
42540 for (var i=0; i<words.length; i++) {
42541 var word = words[i];
42542 if (word.length > 0) {
42543 noBlanks.push(word);
42544 }
42545 }
42546 return noBlanks;
42547 }
42548
42549 // TODO look at jsbip39 - mnemonic.joinWords
42550 function wordArrayToPhrase(words) {
42551 var phrase = words.join(" ");
42552 var language = getLanguageFromPhrase(phrase);
42553 if (language == "japanese") {
42554 phrase = words.join("\u3000");
42555 }
42556 return phrase;
42557 }
42558
c6624d51
IC
42559 function isUsingOwnEntropy() {
42560 return DOM.useEntropy.prop("checked");
42561 }
42562
42563 function setMnemonicFromEntropy() {
2a6dd137 42564 clearEntropyFeedback();
18abe53b 42565 // Get entropy value
c6624d51 42566 var entropyStr = DOM.entropy.val();
18abe53b 42567 // Work out minimum base for entropy
c6624d51 42568 var entropy = Entropy.fromString(entropyStr);
18abe53b 42569 if (entropy.binaryStr.length == 0) {
c6624d51
IC
42570 return;
42571 }
42572 // Show entropy details
18abe53b
IC
42573 showEntropyFeedback(entropy);
42574 // Use entropy hash if not using raw entropy
42575 var bits = entropy.binaryStr;
42576 var mnemonicLength = DOM.entropyMnemonicLength.val();
42577 if (mnemonicLength != "raw") {
42578 // Get bits by hashing entropy with SHA256
42579 var hash = sjcl.hash.sha256.hash(entropy.cleanStr);
42580 var hex = sjcl.codec.hex.fromBits(hash);
42581 bits = BigInteger.parse(hex, 16).toString(2);
53aaab27 42582 while (bits.length % 256 != 0) {
18abe53b
IC
42583 bits = "0" + bits;
42584 }
42585 // Truncate hash to suit number of words
42586 mnemonicLength = parseInt(mnemonicLength);
42587 var numberOfBits = 32 * mnemonicLength / 3;
42588 bits = bits.substring(0, numberOfBits);
c6624d51 42589 }
c6624d51 42590 // Discard trailing entropy
18abe53b 42591 var bitsToUse = Math.floor(bits.length / 32) * 32;
2a6dd137
IC
42592 var start = bits.length - bitsToUse;
42593 var binaryStr = bits.substring(start);
c6624d51
IC
42594 // Convert entropy string to numeric array
42595 var entropyArr = [];
18abe53b
IC
42596 for (var i=0; i<binaryStr.length / 8; i++) {
42597 var byteAsBits = binaryStr.substring(i*8, i*8+8);
42598 var entropyByte = parseInt(byteAsBits, 2);
c6624d51
IC
42599 entropyArr.push(entropyByte)
42600 }
42601 // Convert entropy array to mnemonic
42602 var phrase = mnemonic.toMnemonic(entropyArr);
42603 // Set the mnemonic in the UI
42604 DOM.phrase.val(phrase);
42605 }
42606
2a6dd137
IC
42607 function clearEntropyFeedback() {
42608 DOM.entropyStrength.text("...");
18abe53b 42609 DOM.entropyType.text("");
2a6dd137
IC
42610 DOM.entropyWordCount.text("0");
42611 DOM.entropyEventCount.text("0");
42612 DOM.entropyBitsPerEvent.text("0");
42613 DOM.entropyBits.text("0");
42614 DOM.entropyFiltered.html("&nbsp;");
42615 DOM.entropyBinary.html("&nbsp;");
c6624d51
IC
42616 }
42617
18abe53b 42618 function showEntropyFeedback(entropy) {
9e97eb76 42619 var numberOfBits = entropy.binaryStr.length;
18abe53b 42620 var strength = "extremely weak";
9e97eb76 42621 if (numberOfBits >= 64) {
18abe53b
IC
42622 strength = "very weak";
42623 }
9e97eb76 42624 if (numberOfBits >= 96) {
18abe53b
IC
42625 strength = "weak";
42626 }
9e97eb76 42627 if (numberOfBits >= 128) {
18abe53b
IC
42628 strength = "strong";
42629 }
9e97eb76 42630 if (numberOfBits >= 160) {
18abe53b
IC
42631 strength = "very strong";
42632 }
9e97eb76 42633 if (numberOfBits >= 192) {
18abe53b
IC
42634 strength = "extremely strong";
42635 }
42636 // If time to crack is less than one day, and password is considered
42637 // strong or better based on the number of bits, rename strength to
42638 // 'easily cracked'.
95f04905
IC
42639 try {
42640 var z = zxcvbn(entropy.base.parts.join(""));
42641 var timeToCrack = z.crack_times_seconds.offline_fast_hashing_1e10_per_second;
42642 if (timeToCrack < 86400 && entropy.binaryStr.length >= 128) {
42643 strength = "easily cracked";
42644 if (z.feedback.warning != "") {
42645 strength = strength + " - " + z.feedback.warning;
42646 };
42647 }
18abe53b 42648 }
95f04905
IC
42649 catch (e) {
42650 strength = "unknown";
42651 console.log("Error detecting entropy strength with zxcvbn:");
42652 console.log(e);
42653 }
95f04905 42654 var entropyTypeStr = getEntropyTypeStr(entropy);
9e97eb76 42655 var wordCount = Math.floor(numberOfBits / 32) * 3;
94959756 42656 var bitsPerEvent = entropy.bitsPerEvent.toFixed(2);
2a6dd137 42657 DOM.entropyFiltered.html(entropy.cleanHtml);
95f04905 42658 DOM.entropyType.text(entropyTypeStr);
18abe53b
IC
42659 DOM.entropyStrength.text(strength);
42660 DOM.entropyEventCount.text(entropy.base.ints.length);
9e97eb76 42661 DOM.entropyBits.text(numberOfBits);
2a6dd137
IC
42662 DOM.entropyWordCount.text(wordCount);
42663 DOM.entropyBinary.text(entropy.binaryStr);
9e97eb76 42664 DOM.entropyBitsPerEvent.text(bitsPerEvent);
95f04905
IC
42665 }
42666
42667 function getEntropyTypeStr(entropy) {
42668 var typeStr = entropy.base.str;
42669 // Add some detail if these are cards
42670 if (entropy.base.asInt == 52) {
42671 var cardDetail = []; // array of message strings
42672 // Detect duplicates
42673 var dupes = [];
42674 var dupeTracker = {};
42675 for (var i=0; i<entropy.base.parts.length; i++) {
42676 var card = entropy.base.parts[i];
9e97eb76
IC
42677 var cardUpper = card.toUpperCase();
42678 if (cardUpper in dupeTracker) {
95f04905
IC
42679 dupes.push(card);
42680 }
9e97eb76 42681 dupeTracker[cardUpper] = true;
95f04905
IC
42682 }
42683 if (dupes.length > 0) {
42684 var dupeWord = "duplicates";
42685 if (dupes.length == 1) {
42686 dupeWord = "duplicate";
42687 }
42688 var msg = dupes.length + " " + dupeWord + ": " + dupes.slice(0,3).join(" ");
42689 if (dupes.length > 3) {
42690 msg += "...";
42691 }
42692 cardDetail.push(msg);
42693 }
42694 // Detect full deck
42695 var uniqueCards = [];
42696 for (var uniqueCard in dupeTracker) {
42697 uniqueCards.push(uniqueCard);
42698 }
42699 if (uniqueCards.length == 52) {
42700 cardDetail.unshift("full deck");
42701 }
9e97eb76
IC
42702 // Detect missing cards
42703 var values = "A23456789TJQK";
42704 var suits = "CDHS";
42705 var missingCards = [];
42706 for (var i=0; i<suits.length; i++) {
42707 for (var j=0; j<values.length; j++) {
42708 var card = values[j] + suits[i];
42709 if (!(card in dupeTracker)) {
42710 missingCards.push(card);
42711 }
42712 }
42713 }
42714 // Display missing cards if six or less, ie clearly going for full deck
42715 if (missingCards.length > 0 && missingCards.length <= 6) {
42716 var msg = missingCards.length + " missing: " + missingCards.slice(0,3).join(" ");
42717 if (missingCards.length > 3) {
42718 msg += "...";
42719 }
42720 cardDetail.push(msg);
42721 }
95f04905
IC
42722 // Add card details to typeStr
42723 if (cardDetail.length > 0) {
42724 typeStr += " (" + cardDetail.join(", ") + ")";
42725 }
42726 }
42727 return typeStr;
42728 }
42729
e00964cc
IC
42730 function setQrEvents(els) {
42731 els.on("mouseenter", createQr);
42732 els.on("mouseleave", destroyQr);
42733 els.on("click", toggleQr);
42734 }
42735
42736 function createQr(e) {
42737 var content = e.target.textContent || e.target.value;
42738 if (content) {
42739 var size = 130;
42740 DOM.qrImage.qrcode({width: size, height: size, text: content});
42741 if (!showQr) {
52da415f
IC
42742 DOM.qrHider.addClass("hidden");
42743 }
42744 else {
42745 DOM.qrHider.removeClass("hidden");
e00964cc
IC
42746 }
42747 DOM.qrContainer.removeClass("hidden");
42748 }
42749 }
42750
42751 function destroyQr() {
42752 DOM.qrImage.text("");
42753 DOM.qrContainer.addClass("hidden");
42754 }
42755
42756 function toggleQr() {
42757 showQr = !showQr;
52da415f 42758 DOM.qrHider.toggleClass("hidden");
e00964cc
IC
42759 DOM.qrHint.toggleClass("hidden");
42760 }
42761
20083ab9
IC
42762 function bip44TabSelected() {
42763 return DOM.bip44tab.hasClass("active");
42764 }
42765
42766 function bip32TabSelected() {
42767 return DOM.bip32tab.hasClass("active");
42768 }
42769
ab78acc6
IC
42770 var networks = [
42771 {
42772 name: "Bitcoin",
42773 onSelect: function() {
42774 network = bitcoin.networks.bitcoin;
42775 DOM.bip44coin.val(0);
ab78acc6
IC
42776 },
42777 },
42778 {
42779 name: "Bitcoin Testnet",
42780 onSelect: function() {
42781 network = bitcoin.networks.testnet;
42782 DOM.bip44coin.val(1);
ab78acc6
IC
42783 },
42784 },
42785 {
52d589ea 42786 name: "CLAM",
ab78acc6 42787 onSelect: function() {
52d589ea
IC
42788 network = bitcoin.networks.clam;
42789 DOM.bip44coin.val(23);
ab78acc6
IC
42790 },
42791 },
42792 {
42793 name: "Dogecoin",
42794 onSelect: function() {
42795 network = bitcoin.networks.dogecoin;
42796 DOM.bip44coin.val(3);
42797 },
42798 },
d5dc92fd 42799 {
52d589ea 42800 name: "DASH",
d5dc92fd 42801 onSelect: function() {
52d589ea
IC
42802 network = bitcoin.networks.dash;
42803 DOM.bip44coin.val(5);
d5dc92fd
IC
42804 },
42805 },
42806 {
52d589ea 42807 name: "Ethereum",
d5dc92fd 42808 onSelect: function() {
52d589ea
IC
42809 network = bitcoin.networks.bitcoin;
42810 DOM.bip44coin.val(60);
d5dc92fd
IC
42811 },
42812 },
f88fab20 42813 {
42814 name: "GAME",
42815 onSelect: function() {
42816 network = bitcoin.networks.game;
42817 DOM.bip44coin.val(101);
42818 },
42819 },
a3baa26e 42820 {
52d589ea 42821 name: "Jumbucks",
a3baa26e 42822 onSelect: function() {
52d589ea
IC
42823 network = bitcoin.networks.jumbucks;
42824 DOM.bip44coin.val(26);
a3baa26e
IC
42825 },
42826 },
42827 {
52d589ea 42828 name: "Litecoin",
a3baa26e 42829 onSelect: function() {
52d589ea
IC
42830 network = bitcoin.networks.litecoin;
42831 DOM.bip44coin.val(2);
a3baa26e
IC
42832 },
42833 },
42834 {
52d589ea 42835 name: "Namecoin",
a3baa26e 42836 onSelect: function() {
52d589ea
IC
42837 network = bitcoin.networks.namecoin;
42838 DOM.bip44coin.val(7);
a3baa26e
IC
42839 },
42840 },
5c434a8a 42841 {
52d589ea 42842 name: "Peercoin",
5c434a8a 42843 onSelect: function() {
52d589ea
IC
42844 network = bitcoin.networks.peercoin;
42845 DOM.bip44coin.val(6);
5c434a8a
CM
42846 },
42847 },
5493efc3 42848 {
52d589ea 42849 name: "ShadowCash",
5493efc3 42850 onSelect: function() {
52d589ea
IC
42851 network = bitcoin.networks.shadow;
42852 DOM.bip44coin.val(35);
5493efc3 42853 },
42854 },
07ac4350 42855 {
52d589ea 42856 name: "ShadowCash Testnet",
07ac4350 42857 onSelect: function() {
52d589ea
IC
42858 network = bitcoin.networks.shadowtn;
42859 DOM.bip44coin.val(1);
07ac4350 42860 },
42861 },
01e81e53
GH
42862 {
42863 name: "Slimcoin",
42864 onSelect: function() {
42865 network = bitcoin.networks.slimcoin;
42866 DOM.bip44coin.val(63);
42867 },
42868 },
42869 {
42870 name: "Slimcoin Testnet",
42871 onSelect: function() {
42872 network = bitcoin.networks.slimcointn;
42873 DOM.bip44coin.val(111);
42874 },
42875 },
07ac4350 42876 {
52d589ea 42877 name: "Viacoin",
07ac4350 42878 onSelect: function() {
52d589ea
IC
42879 network = bitcoin.networks.viacoin;
42880 DOM.bip44coin.val(14);
07ac4350 42881 },
42882 },
8b095871 42883 {
52d589ea 42884 name: "Viacoin Testnet",
8b095871 42885 onSelect: function() {
52d589ea
IC
42886 network = bitcoin.networks.viacointestnet;
42887 DOM.bip44coin.val(1);
8b095871
IC
42888 },
42889 },
ab78acc6
IC
42890 ]
42891
56530adc
IC
42892 var clients = [
42893 {
42894 name: "Bitcoin Core",
42895 onSelect: function() {
42896 DOM.bip32path.val("m/0'/0'");
42897 DOM.hardenedAddresses.prop('checked', true);
42898 },
42899 },
42900 {
42901 name: "blockchain.info",
42902 onSelect: function() {
42903 DOM.bip32path.val("m/44'/0'/0'");
42904 DOM.hardenedAddresses.prop('checked', false);
42905 },
42906 },
42907 {
42908 name: "MultiBit HD",
42909 onSelect: function() {
42910 DOM.bip32path.val("m/0'/0");
42911 DOM.hardenedAddresses.prop('checked', false);
42912 },
42913 }
42914 ]
42915
ebd8d4e8
IC
42916 init();
42917
42918})();
dc55c6b0 42919</script>
ebd8d4e8
IC
42920 </body>
42921</html>