]> git.immae.eu Git - perso/Immae/Projets/Cryptomonnaies/BIP39.git/blame - bip39-standalone.html
Add virtual keyboard
[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 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>
5802c0b7 11 <style>/* keyboard - jQuery UI Widget */
12.ui-keyboard {
13 text-align: center;
14 padding: .3em;
15 position: absolute;
16 left: 0;
17 top: 0;
18 z-index: 16000;
19 /* see issue #484 */
20 -ms-touch-action: manipulation;
21 touch-action: manipulation;
22}
23.ui-keyboard-has-focus {
24 z-index: 16001;
25}
26.ui-keyboard div {
27 font-size: 1.1em;
28}
29.ui-keyboard-button {
30 height: 2em;
31 min-width: 2em;
32 margin: .1em;
33 cursor: pointer;
34 overflow: hidden;
35 line-height: 2em;
36 -moz-user-focus: ignore;
37}
38.ui-keyboard-button span {
39 padding: 0;
40 margin: 0;
41 white-space: nowrap;
42 display: inline-block;
43}
44.ui-keyboard-button-endrow {
45 clear: left;
46}
47.ui-keyboard-space {
48 width: 15em;
49}
50/* see http://nicolasgallagher.com/another-css-image-replacement-technique/ */
51.ui-keyboard-space span, .ui-keyboard-empty span {
52 font: 0/0 a;
53 text-shadow: none;
54 color: transparent;
55}
56.ui-keyboard-preview-wrapper {
57 text-align: center;
58 position: relative;
59 overflow: hidden;
60}
61/* width is calculated in IE, since 99% = 99% full browser width =( */
62.ui-keyboard-preview {
63 text-align: left;
64 margin: 0 0 3px 0;
65 display: inline;
66 width: 99%;
67}
68.ui-keyboard-keyset {
69 text-align: center;
70 white-space: nowrap;
71}
72.ui-keyboard-input {
73 text-align: left;
74}
75.ui-keyboard-input-current {
76 -moz-box-shadow: 0 0 5px #4d90fe;
77 -webkit-box-shadow: 0 0 5px #4d90fe;
78 box-shadow: 0 0 5px #4d90fe;
79}
80.ui-keyboard-placeholder {
81 color: #888;
82}
83/* disabled or readonly inputs, or use
84 input[disabled='disabled'] { color: #f00; } */
85.ui-keyboard-nokeyboard {
86 color: #888;
87 border-color: #888;
88}
89.ui-keyboard-spacer {
90 display: inline-block;
91 width: 1px;
92 height: 0;
93 cursor: default;
94}
95
96.ui-keyboard-NBSP span, .ui-keyboard-ZWSP span, .ui-keyboard-ZWNJ span,
97.ui-keyboard-ZWJ span, .ui-keyboard-LRM span, .ui-keyboard-RLM span {
98 font-size: 0.5em;
99 line-height: 1.5em;
100 white-space: normal;
101}
102
103/* combo key styling - toggles diacritics on/off */
104.ui-keyboard-button.ui-keyboard-combo.ui-state-default {
105 border-color: #ffaf0f;
106}
107
108/* (in)valid inputs */
109button.ui-keyboard-accept.ui-keyboard-valid-input {
110 border-color: #0c0;
111 background: #080;
112 color: #fff;
113}
114button.ui-keyboard-accept.ui-keyboard-valid-input:not([disabled]):hover {
115 background: #0a0;
116}
117button.ui-keyboard-accept.ui-keyboard-invalid-input {
118 border-color: #c00;
119 background: #800;
120 color: #fff;
121 opacity: 0.5;
122 filter: alpha(opacity=50);
123}
124button.ui-keyboard-accept.ui-keyboard-invalid-input:not([disabled]):hover {
125 background: #a00;
126}
127
128/*** Caret extension definition ***/
129/* margin-top => is added to the caret height (top & bottom) */
130.ui-keyboard-caret {
131 background: #c00;
132 width: 1px;
133 margin-top: 3px;
134}
135
136/*** jQuery Mobile definitions ***/
137/* jQuery Mobile styles - need wider buttons because of font size and
138 text-overflow:ellipsis */
139div.ui-body.ui-keyboard button.ui-keyboard-button.ui-btn {
140 padding: 0.5em 1em;
141 border-color: transparent;
142}
143.ui-body .ui-keyboard-button {
144 width: 3em;
145 height: 3em;
146 display: inline-block;
147}
148.ui-body .ui-keyboard-widekey {
149 width: 5.5em;
150}
151.ui-body .ui-keyboard-space {
152 width: 15em;
153}
154.ui-body .ui-keyboard-space span {
155 visibility: hidden; /* hides the ellipsis */
156}
157.ui-body .ui-keyboard-keyset {
158 line-height: 0.5em;
159}
160.ui-body input.ui-input-text, .ui-body textarea.ui-input-text {
161 width: 95%;
162}
163
164/* over-ride padding set by mobile ui theme - needed because the mobile script
165 wraps button text with several more spans */
166.ui-body .ui-btn-inner {
167 height: 2em;
168 padding: 0.2em 0;
169 margin: 0;
170}
171.ui-body .ui-btn {
172 margin: 0;
173 font-size: 13px; /* mobile default size is 13px */
174}
175
176/* override Bootstrap excessive button padding */
177button.ui-keyboard-button.btn {
178 padding: 1px 6px;
179}
180
181/* enable/disable icons */
182button.ui-keyboard-toggle span {
183 width: .8em;
184 height: .8em;
185 display: inline-block;
186 background-repeat: no-repeat;
187 background-position: center center;
188 background-size: contain;
189}
190/* unlocked icon (keyboard enabled) */
191button.ui-keyboard-toggle span {
192 /* light theme unlocked icon - fill: #111 */
193 background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMCIgaGVpZ2h0PSIxMCIgZmlsbD0iIzExMSI+PHBhdGggZD0iTTguNyw0LjRINy41SDUuMHYtMS45YzAtMS40LTEuMS0yLjUtMi41LTIuNWMtMS40LDAtMi41LDEuMS0yLjUsMi41djEuOWgxLjIgdi0xLjljMC0wLjcsMC42LTEuMiwxLjItMS4yczEuMiwwLjYsMS4yLDEuMnYxLjljLTAuNywwLTEuMiwwLjYtMS4yLDEuMlY4LjggYzAsMC43LDAuNiwxLjIsMS4yLDEuMmg1LjBDOS40LDEwLDEwLDkuNCwxMCw4LjhWNS42QzEwLDUuMCw5LjQsNC40LDguOCw0LjR6IE02LjYsNy40djEuMCBjMCwwLjItMC4xLDAuMy0wLjMsMC4zUzYuMCw4LjYsNi4wLDguNFY3LjRjLTAuMi0wLjEtMC4zLTAuMy0wLjMtMC41YzAtMC4zLDAuMy0wLjYsMC42LTAuNiBTNi45LDYuNiw2LjksNi45QzYuOSw3LjEsNi44LDcuMyw2LjYsNy40eiIvPjwvc3ZnPg==);
194}
195.ui-keyboard-dark-theme button.ui-keyboard-toggle span {
196 /* dark theme unlocked icon - fill: #eee */
197 background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMCIgaGVpZ2h0PSIxMCIgZmlsbD0iI2VlZSI+PHBhdGggZD0iTTguNyw0LjRINy41SDUuMHYtMS45YzAtMS40LTEuMS0yLjUtMi41LTIuNWMtMS40LDAtMi41LDEuMS0yLjUsMi41djEuOWgxLjIgdi0xLjljMC0wLjcsMC42LTEuMiwxLjItMS4yczEuMiwwLjYsMS4yLDEuMnYxLjljLTAuNywwLTEuMiwwLjYtMS4yLDEuMlY4LjggYzAsMC43LDAuNiwxLjIsMS4yLDEuMmg1LjBDOS40LDEwLDEwLDkuNCwxMCw4LjhWNS42QzEwLDUuMCw5LjQsNC40LDguOCw0LjR6IE02LjYsNy40djEuMCBjMCwwLjItMC4xLDAuMy0wLjMsMC4zUzYuMCw4LjYsNi4wLDguNFY3LjRjLTAuMi0wLjEtMC4zLTAuMy0wLjMtMC41YzAtMC4zLDAuMy0wLjYsMC42LTAuNiBTNi45LDYuNiw2LjksNi45QzYuOSw3LjEsNi44LDcuMyw2LjYsNy40eiIvPjwvc3ZnPg==);
198}
199
200/* locked icon (keyboard disabled) */
201button.ui-keyboard-toggle.ui-keyboard-disabled span {
202 /* light theme locked icon - fill: #111 */
203 background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMCIgaGVpZ2h0PSIxMCIgZmlsbD0iIzExMSI+PHBhdGggZD0iTTcuNCA0LjRWMi41YzAtMS40LTEuMS0yLjUtMi41LTIuNWMtMS40IDAtMi41IDEuMS0yLjUgMi41djEuOSBjLTAuNyAwLTEuMiAwLjUtMS4yIDEuMnYzLjFDMS4zIDkuNCAxLjggMTAgMi41IDEwaDQuOWMwLjcgMCAxLjItMC42IDEuMi0xLjJWNS42IEM4LjcgNC45IDguMSA0LjQgNy40IDQuNHogTTUuMyA3LjR2MS4wYzAgMC4yLTAuMSAwLjMtMC4zIDAuM2MtMC4yIDAtMC4zLTAuMS0wLjMtMC4zVjcuNCBjLTAuMi0wLjEtMC4zLTAuMy0wLjMtMC41YzAtMC4zIDAuMy0wLjYgMC42LTAuNmMwLjMgMCAwLjYgMC4zIDAuNiAwLjYgQzUuNiA3LjEgNS41IDcuMyA1LjMgNy40eiBNNi4yIDQuNEgzLjdWMi41YzAtMC43IDAuNS0xLjIgMS4yLTEuMmMwLjcgMCAxLjIgMC42IDEuMiAxLjIgVjQuNHoiLz48L3N2Zz4=);
204}
205.ui-keyboard-dark-theme button.ui-keyboard-toggle.ui-keyboard-disabled span {
206 /* dark theme locked icon - fill: #eee */
207 background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMCIgaGVpZ2h0PSIxMCIgZmlsbD0iI2VlZSI+PHBhdGggZD0iTTcuNCA0LjRWMi41YzAtMS40LTEuMS0yLjUtMi41LTIuNWMtMS40IDAtMi41IDEuMS0yLjUgMi41djEuOSBjLTAuNyAwLTEuMiAwLjUtMS4yIDEuMnYzLjFDMS4zIDkuNCAxLjggMTAgMi41IDEwaDQuOWMwLjcgMCAxLjItMC42IDEuMi0xLjJWNS42IEM4LjcgNC45IDguMSA0LjQgNy40IDQuNHogTTUuMyA3LjR2MS4wYzAgMC4yLTAuMSAwLjMtMC4zIDAuM2MtMC4yIDAtMC4zLTAuMS0wLjMtMC4zVjcuNCBjLTAuMi0wLjEtMC4zLTAuMy0wLjMtMC41YzAtMC4zIDAuMy0wLjYgMC42LTAuNmMwLjMgMCAwLjYgMC4zIDAuNiAwLjYgQzUuNiA3LjEgNS41IDcuMyA1LjMgNy40eiBNNi4yIDQuNEgzLjdWMi41YzAtMC43IDAuNS0xLjIgMS4yLTEuMmMwLjcgMCAxLjIgMC42IDEuMiAxLjIgVjQuNHoiLz48L3N2Zz4=);
208}
209
210.ui-keyboard.ui-keyboard-disabled button:not(.ui-keyboard-toggle),
211.ui-keyboard.ui-keyboard-disabled input {
212 opacity: 0.5;
213}
214
215/*** Alt-Keys Popup extension ***/
216/* clickable overlay on top of keyboard to hide the popup */
217.ui-keyboard-overlay {
218 position: absolute;
219 top: 0;
220 left: 0;
221 bottom: 0;
222 right: 0;
223 background: rgba(0, 0, 0, 0.5);
224}
225/* the actual popup styling, class names from the css.container option are also
226 added */
227.ui-keyboard-popup {
228 display: inline-block;
229 /* default buttons are 2em wide + .1em margin on either side (set in
230 .ui-keyboard-button definition); so use multiples of 2.2em for a max-width
231 if you don't want any extra white space on the sides, e.g.
232 5 buttons * 2.2em = 11em,
233 6 buttons * 2.2em = 13.2em, etc
234 */
235 max-width: 22em; /* 10 buttons */
236}
237
238/*** Extender keyboard extension ***/
239div.ui-keyboard-extender {
240 margin-left: 5px;
241}
242button.ui-keyboard-extender span {
243 width: .9em;
244 height: .9em;
245 display: inline-block;
246 margin-bottom: 3px;
247 background-repeat: no-repeat;
248 background-position: center center;
249 background-size: contain;
250 /* light theme extender icon - fill: #111 */
251 background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgc3R5bGU9ImZpbGw6IzExMSI+PGc+PHBhdGggc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzExMSIgZD0iTSAwLjUsNC41IDE1LjUsNC41IDE1LjUsMTUuNSAwLjUsMTUuNSBaIj48L3BhdGg+PHJlY3Qgd2lkdGg9IjIiIGhlaWdodD0iMiIgeD0iMiIgeT0iNiI+PC9yZWN0PjxyZWN0IHdpZHRoPSIyIiBoZWlnaHQ9IjIiIHg9IjUiIHk9IjYiPjwvcmVjdD48cmVjdCB3aWR0aD0iMiIgaGVpZ2h0PSIyIiB4PSI4IiB5PSI2Ij48L3JlY3Q+PHBhdGggZD0ibSAxMSw2IDMsMCAwLDUgLTIsMCAwLC0zIC0xLDAgeiI+PC9wYXRoPjxyZWN0IHdpZHRoPSIyIiBoZWlnaHQ9IjIiIHg9IjEyIiB5PSIxMiI+PC9yZWN0PjxyZWN0IHdpZHRoPSI2IiBoZWlnaHQ9IjIiIHg9IjUiIHk9IjEyIj48L3JlY3Q+PHJlY3Qgd2lkdGg9IjIiIGhlaWdodD0iMiIgeD0iOSIgeT0iOSI+PC9yZWN0PjxyZWN0IHdpZHRoPSIyIiBoZWlnaHQ9IjIiIHg9IjYiIHk9IjkiPjwvcmVjdD48cmVjdCB3aWR0aD0iMiIgaGVpZ2h0PSIyIiB4PSIyIiB5PSIxMiI+PC9yZWN0PjxyZWN0IHdpZHRoPSIzIiBoZWlnaHQ9IjIiIHg9IjIiIHk9IjkiPjwvcmVjdD48L2c+PC9zdmc+);
252}
253.ui-keyboard-dark-theme button.ui-keyboard-extender span {
254 /* dark theme extender icon - fill: #eee */
255 background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgc3R5bGU9ImZpbGw6I2VlZSI+PGc+PHBhdGggc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6I2VlZSIgZD0iTSAwLjUsNC41IDE1LjUsNC41IDE1LjUsMTUuNSAwLjUsMTUuNSBaIj48L3BhdGg+PHJlY3Qgd2lkdGg9IjIiIGhlaWdodD0iMiIgeD0iMiIgeT0iNiI+PC9yZWN0PjxyZWN0IHdpZHRoPSIyIiBoZWlnaHQ9IjIiIHg9IjUiIHk9IjYiPjwvcmVjdD48cmVjdCB3aWR0aD0iMiIgaGVpZ2h0PSIyIiB4PSI4IiB5PSI2Ij48L3JlY3Q+PHBhdGggZD0ibSAxMSw2IDMsMCAwLDUgLTIsMCAwLC0zIC0xLDAgeiI+PC9wYXRoPjxyZWN0IHdpZHRoPSIyIiBoZWlnaHQ9IjIiIHg9IjEyIiB5PSIxMiI+PC9yZWN0PjxyZWN0IHdpZHRoPSI2IiBoZWlnaHQ9IjIiIHg9IjUiIHk9IjEyIj48L3JlY3Q+PHJlY3Qgd2lkdGg9IjIiIGhlaWdodD0iMiIgeD0iOSIgeT0iOSI+PC9yZWN0PjxyZWN0IHdpZHRoPSIyIiBoZWlnaHQ9IjIiIHg9IjYiIHk9IjkiPjwvcmVjdD48cmVjdCB3aWR0aD0iMiIgaGVpZ2h0PSIyIiB4PSIyIiB5PSIxMiI+PC9yZWN0PjxyZWN0IHdpZHRoPSIzIiBoZWlnaHQ9IjIiIHg9IjIiIHk9IjkiPjwvcmVjdD48L2c+PC9zdmc+);
256}
257
258/* Media Queries (optimized for jQuery UI themes;
259 may be slightly off in jQuery Mobile themes) */
260/* 240 x 320 (small phone) */
261@media all and (max-width: 319px) {
262 .ui-keyboard div {
263 font-size: 9px;
264 }
265 .ui-keyboard .ui-keyboard-input {
266 font-size: 12px;
267 }
268 /* I don't own an iPhone so I have no idea how small this really is... is it
269 even clickable with your finger? */
270 .ui-body .ui-btn {
271 margin: 0;
272 font-size: 9px;
273 }
274 .ui-body .ui-keyboard-button {
275 width: 1.8em;
276 height: 2.5em;
277 }
278 .ui-body .ui-keyboard-widekey {
279 width: 4em;
280 }
281 .ui-body .ui-keyboard-space {
282 width: 8em;
283 }
284 .ui-body .ui-btn-inner {
285 height: 2.5em;
286 padding: 0.3em 0;
287 }
288}
289
290/* 320 x 480 (iPhone) */
291@media all and (min-width: 320px) and (max-width: 479px) {
292 .ui-keyboard div {
293 font-size: 9px;
294 }
295 .ui-keyboard .ui-keyboard-input {
296 font-size: 14px;
297 }
298 /* I don't own an iPhone so I have no idea how small this really is... is it
299 even clickable with your finger? */
300 .ui-body .ui-btn {
301 margin: 0;
302 font-size: 11px;
303 }
304 .ui-body .ui-keyboard-button {
305 width: 1.8em;
306 height: 3em;
307 }
308 .ui-body .ui-keyboard-widekey {
309 width: 4.5em;
310 }
311 .ui-body .ui-keyboard-space {
312 width: 10em;
313 }
314 .ui-body .ui-btn-inner {
315 height: 3em;
316 padding: 0.7em 0;
317 }
318}
319
320/* 480 x 640 (small tablet) */
321@media all and (min-width: 480px) and (max-width: 767px) {
322 .ui-keyboard div {
323 font-size: 13px;
324 }
325 .ui-keyboard .ui-keyboard-input {
326 font-size: 14px;
327 }
328 .ui-body .ui-btn {
329 margin: 0;
330 font-size: 10px;
331 }
332 .ui-body .ui-keyboard-button {
333 height: 2.5em;
334 }
335 .ui-body .ui-btn-inner {
336 height: 2.5em;
337 padding: 0.5em 0;
338 }
339}
340</style>
341 <style>.ui-keyboard-has-focus {
342 background: #eeeeee 50% bottom repeat-x;
343 border-style: solid;
344 border-width: 1px;
345 border-color: #cccccc;
346}
347</style>
ab78acc6
IC
348 <meta content="Mnemonic code for generating deterministic keys" name="description"/>
349 <meta content="width=device-width, initial-scale=1.0" name="viewport" />
350 <meta content="bitcoin mnemonic converter" name="description" />
b630f83d 351 <meta content="Ian Coleman" name="author" />
18f16009 352 <link type="image/x-icon" rel="icon" href="data:image/x-icon;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQEAYAAABPYyMiAAAABmJLR0T///////8JWPfcAAAACXBIWXMAAABIAAAASABGyWs+AAAAF0lEQVRIx2NgGAWjYBSMglEwCkbBSAcACBAAAeaR9cIAAAAASUVORK5CYII=" />
3af2954a 353
ab78acc6
IC
354 <style>
355 body {
356 padding-bottom: 32px;
357 }
358 .form-control[readonly] {
359 cursor: text;
360 }
361 .feedback-container {
362 position: fixed;
363 top: 0;
364 width: 100%;
365 text-align: center;
366 z-index: 4;
367 }
368 .feedback {
369 display: table;
370 padding: 0.5em 1em;
371 background-color: orange;
372 margin: 0 auto;
373 font-size: 2em;
374 color: #444;
375 border: 2px solid #555;
376 border-top: 0;
377 border-bottom-left-radius: 20px 20px;
378 border-bottom-right-radius: 20px 20px;
379 }
d5dc92fd
IC
380 .no-border {
381 border: 0;
382 box-shadow: inset 0 1px 1px rgba(0,0,0,.0);
383 -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.0);
384 }
0515eeec
IC
385 .phrase {
386 word-break: keep-all;
387 }
2a6dd137 388 .generate-container .strength {
b0818b31
IC
389 /* override mobile width from bootstrap */
390 width: auto!important;
391 display: inline-block;
392 }
ea87f1d3 393 .languages a {
0515eeec
IC
394 padding-left: 10px;
395 }
ea87f1d3
IC
396 .languages a:nth-of-type(1) {
397 margin-left: -12px;
398 padding-left: 0;
399 }
d737abf6
IC
400 .monospace {
401 font-family: monospace;
402 }
2a6dd137
IC
403 .entropy-container .filtered,
404 .entropy-container .binary {
405 word-wrap: break-word;
406 }
407 .entropy-container li {
408 padding-bottom: 5px;
409 }
410 .card-suit {
411 font-size: 19px;
412 line-height: 0;
413 }
414 .card-suit.club {
415 color: #009F00;
416 }
417 .card-suit.diamond {
418 color: #3D5DC4;
419 }
420 .card-suit.heart {
421 color: #F00;
422 }
423 .card-suit.spade {
424 color: #000;
425 }
e00964cc
IC
426 .qr-container {
427 position: fixed;
428 top: 0;
429 right: 0;
430 text-align: center;
431 background-color: #FFF;
432 border: 1px solid #CCC;
433 }
434 .qr-image {
435 margin: 5px;
436 }
52da415f
IC
437 .qr-hint,
438 .qr-warning {
e00964cc 439 padding: 2px;
52da415f
IC
440 max-width: 150px;
441 }
442 .more-info {
443 cursor: help;
444 border-bottom: 1px dashed #000;
445 text-decoration: none;
e00964cc 446 }
ab78acc6
IC
447 </style>
448 </head>
449 <body>
450 <div class="container">
3af2954a 451
ab78acc6
IC
452 <h1 class="text-center">Mnemonic Code Converter</h1>
453 <hr>
454 <div class="row">
455 <div class="col-md-12">
456 <h2>Mnemonic</h2>
457 <form class="form-horizontal" role="form">
ab78acc6 458 <div class="form-group">
c6624d51
IC
459 <div class="col-sm-2"></div>
460 <div class="col-sm-10">
ea87f1d3
IC
461 <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>
462 <p data-translate-html>
463 For more info see the
464 <a href="https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki" target="_blank">BIP39 spec</a>.
465 </p>
c6624d51
IC
466 </div>
467 </div>
468 <div class="form-group generate-container">
b0818b31 469 <label class="col-sm-2 control-label"></label>
ab78acc6 470 <div class="col-sm-10">
b0818b31
IC
471 <div class="form-inline">
472 <div class="input-group-inline">
ea87f1d3 473 <span data-translate>Generate a random mnemonic, or enter your own below</span>:
b0818b31 474 <button class="btn generate">Generate</button>
b0818b31
IC
475 <select id="strength" class="strength form-control">
476 <option value="3">3</option>
477 <option value="6">6</option>
478 <option value="9">9</option>
479 <option value="12">12</option>
480 <option value="15" selected>15</option>
481 <option value="18">18</option>
482 <option value="21">21</option>
483 <option value="24">24</option>
484 </select>
ea87f1d3 485 <span data-translate>words</span>
b0818b31
IC
486 </div>
487 </div>
ab78acc6 488 </div>
0515eeec 489 </div>
c6624d51 490 <div class="entropy-container hidden">
2a6dd137 491 <div class="form-group text-danger">
ea87f1d3 492 <label class="col-sm-2 control-label" data-translate>Warning</label>
2a6dd137 493 <div class="col-sm-10 form-control-static">
ea87f1d3
IC
494 <span data-translate>Entropy is an advanced feature. Your mnemonic may be insecure if this feature is used incorrectly.</span>
495 <a href="#entropy-notes" data-translate>Read more</a>
18abe53b
IC
496 </div>
497 </div>
2a6dd137 498 <div class="form-group">
ea87f1d3 499 <label for="entropy" class="col-sm-2 control-label" data-translate>Entropy</label>
2a6dd137 500 <div class="col-sm-7">
5802c0b7 501 <textarea id="entropy" rows="2" class="entropy form-control virtual-keyboard" placeholder="Accepts binary, base 6, 6-sided dice, base 10, hexadecimal, cards" data-translate-placeholder></textarea>
95f04905 502 <div class="row">
ea87f1d3 503 <label class="col-sm-3 control-label" data-translate>Strength</label>
95f04905 504 <div class="strength col-sm-3 form-control-static"></div>
ea87f1d3 505 <label class="col-sm-3 control-label" data-translate>Event Count</label>
95f04905
IC
506 <div class="event-count col-sm-3 form-control-static"></div>
507 </div>
508 <div class="row">
ea87f1d3 509 <label class="col-sm-3 control-label" data-translate>Entropy Type</label>
95f04905 510 <div class="type col-sm-3 form-control-static"></div>
ea87f1d3 511 <label class="col-sm-3 control-label" data-translate>Bits Per Event</label>
95f04905
IC
512 <div class="bits-per-event col-sm-3 form-control-static"></div>
513 </div>
514 <div class="row">
ea87f1d3 515 <label class="col-sm-3 control-label" data-translate>Word Count</label>
95f04905 516 <div class="word-count col-sm-3 form-control-static"></div>
52da415f 517 <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
518 <div class="bits col-sm-3 form-control-static"></div>
519 </div>
ea87f1d3 520 <label class="col-sm-3 control-label" data-translate>Filtered Entropy</label>
2a6dd137 521 <div class="filtered col-sm-9 form-control-static"></div>
ea87f1d3 522 <label class="col-sm-3 control-label" data-translate>Raw Binary</label>
2a6dd137 523 <div class="binary col-sm-9 form-control-static"></div>
ea87f1d3 524 <label class="col-sm-3 control-label" data-translate>Mnemonic Length</label>
2a6dd137 525 <div class="col-sm-9">
18abe53b 526 <select class="mnemonic-length form-control">
5ed50bd9 527 <option value="raw" selected data-translate>Use Raw Entropy (3 words per 32 bits)</option>
ea87f1d3 528 <option value="12">12 <span data-translate>Words</span></option>
5ed50bd9 529 <option value="15">15 <span data-translate>Words</option>
ea87f1d3
IC
530 <option value="18">18 <span data-translate>Words</span></option>
531 <option value="21">21 <span data-translate>Words</span></option>
532 <option value="24">24 <span data-translate>Words</span></option>
18abe53b 533 </select>
c6624d51 534 </div>
18abe53b 535 </div>
2a6dd137 536 <div class="col-sm-3">
ea87f1d3 537 <p data-translate>Valid entropy values include:</p>
2a6dd137 538 <ul>
ea87f1d3
IC
539 <li><strong data-translate>Binary</strong> [0-1]<br>101010011</li>
540 <li><strong data-translate>Base 6</strong> [0-5]<br>123434014</li>
541 <li><strong data-translate>Dice</strong> [1-6]<br>62535634</li>
542 <li><strong data-translate>Base 10</strong> [0-9]<br>90834528</li>
543 <li><strong data-translate>Hex</strong> [0-9A-F]<br>4187a8bfd9</li>
544 <li><strong data-translate>Card</strong> [A2-9TJQK][CDHS]<br>ahqs9dtc</li>
2a6dd137
IC
545 </ul>
546 </div>
c6624d51
IC
547 </div>
548 </div>
549 <div class="form-group">
550 <div class="col-sm-2"></div>
551 <div class="col-sm-10 checkbox">
552 <label>
553 <input type="checkbox" class="use-entropy">
ea87f1d3 554 <span data-translate>Supply my own source of entropy</span>
c6624d51
IC
555 </label>
556 </div>
557 </div>
558 <div class="form-group">
ea87f1d3 559 <label class="col-sm-2 control-label" data-translate>Mnemonic Language</label>
0515eeec 560 <div class="col-sm-10 languages">
ea87f1d3
IC
561 <div class="form-control no-border">
562 <a href="#english">English</a>
563 <a href="#japanese" title="Japanese">日本語</a>
564 <a href="#spanish" title="Spanish">Español</a>
565 <a href="#chinese_simplified" title="Chinese (Simplified)">中文(简体)</a>
566 <a href="#chinese_traditional" title="Chinese (Traditional)">中文(繁體)</a>
567 <a href="#french" title="French">Français</a>
568 <a href="#italian" title="Italian">Italiano</a>
569 </div>
0515eeec 570 </div>
ab78acc6
IC
571 </div>
572 <div class="form-group">
ea87f1d3 573 <label for="phrase" class="col-sm-2 control-label" data-translate>BIP39 Mnemonic</label>
ab78acc6 574 <div class="col-sm-10">
e00964cc 575 <textarea id="phrase" class="phrase form-control" data-show-qr></textarea>
ab78acc6
IC
576 </div>
577 </div>
578 <div class="form-group">
ea87f1d3 579 <label for="passphrase" class="col-sm-2 control-label" data-translate>BIP39 Passphrase (optional)</label>
ab78acc6
IC
580 <div class="col-sm-10">
581 <textarea id="passphrase" class="passphrase form-control"></textarea>
582 </div>
583 </div>
73161a92 584 <div class="form-group">
ea87f1d3 585 <label for="seed" class="col-sm-2 control-label" data-translate>BIP39 Seed</label>
73161a92 586 <div class="col-sm-10">
e00964cc 587 <textarea id="seed" class="seed form-control" readonly="readonly" data-show-qr></textarea>
73161a92
IC
588 </div>
589 </div>
ab78acc6 590 <div class="form-group">
ea87f1d3 591 <label for="network-phrase" class="col-sm-2 control-label" data-translate>Coin</label>
ab78acc6
IC
592 <div class="col-sm-10">
593 <select id="network-phrase" class="network form-control">
594 <!-- populated by javascript -->
595 </select>
596 </div>
597 </div>
598 <div class="form-group">
ea87f1d3 599 <label for="root-key" class="col-sm-2 control-label" data-translate>BIP32 Root Key</label>
ab78acc6 600 <div class="col-sm-10">
e00964cc 601 <textarea id="root-key" class="root-key form-control" data-show-qr></textarea>
ab78acc6
IC
602 </div>
603 </div>
604 </form>
605 </div>
606 </div>
3af2954a 607
ab78acc6 608 <hr>
3af2954a 609
ab78acc6
IC
610 <div class="row">
611 <div class="col-md-12">
612 <h2>Derivation Path</h2>
613 <ul class="derivation-type nav nav-tabs" role="tablist">
d5dc92fd 614 <li id="bip44-tab" class="active">
ab78acc6
IC
615 <a href="#bip44" role="tab" data-toggle="tab">BIP44</a>
616 </li>
617 <li id="bip32-tab">
618 <a href="#bip32" role="tab" data-toggle="tab">BIP32</a>
619 </li>
620 </ul>
621 <div class="derivation-type tab-content">
d5dc92fd 622 <div id="bip44" class="tab-pane active">
ab78acc6
IC
623 <form class="form-horizontal" role="form">
624 <br>
625 <div class="col-sm-2"></div>
626 <div class="col-sm-10">
ea87f1d3
IC
627 <p data-translate-html>
628 For more info see the
629 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target="_blank">BIP44 spec</a>.
630 </p>
ab78acc6
IC
631 </div>
632 <div class="form-group">
633 <label for="purpose" class="col-sm-2 control-label">
ea87f1d3 634 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#purpose" target="_blank" data-translate>Purpose</a>
ab78acc6
IC
635 </label>
636 <div class="col-sm-10">
637 <input id="purpose" type="text" class="purpose form-control" value="44">
638 </div>
639 </div>
640 <div class="form-group">
641 <label for="coin" class="col-sm-2 control-label">
ea87f1d3 642 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#registered-coin-types" target="_blank" data-translate>Coin</a>
ab78acc6
IC
643 </label>
644 <div class="col-sm-10">
645 <input id="coin" type="text" class="coin form-control" value="0">
646 </div>
647 </div>
648 <div class="form-group">
649 <label for="account" class="col-sm-2 control-label">
ea87f1d3 650 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#account" target="_blank" data-translate>Account</a>
ab78acc6
IC
651 </label>
652 <div class="col-sm-10">
653 <input id="account" type="text" class="account form-control" value="0">
654 </div>
655 </div>
656 <div class="form-group">
657 <label for="change" class="col-sm-2 control-label">
ea87f1d3 658 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#change" target="_blank" data-translate>External / Internal</a>
ab78acc6
IC
659 </label>
660 <div class="col-sm-10">
661 <input id="change" type="text" class="change form-control" value="0">
662 </div>
663 </div>
20083ab9
IC
664 <div class="form-group">
665 <label class="col-sm-2 control-label">
666 </label>
667 <div class="col-sm-10">
f3bfd2a5 668 <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
669 </div>
670 </div>
671 <div class="form-group">
672 <label for="account-xprv" class="col-sm-2 control-label">
673 <span data-translate>Account Extended Private Key</span>
674 </label>
675 <div class="col-sm-10">
676 <textarea id="account-xprv" type="text" class="account-xprv form-control" readonly data-show-qr></textarea>
677 </div>
678 </div>
679 <div class="form-group">
680 <label for="account-xpub" class="col-sm-2 control-label">
681 <span data-translate>Account Extended Public Key</span>
682 </label>
683 <div class="col-sm-10">
684 <textarea id="account-xpub" type="text" class="account-xpub form-control" readonly data-show-qr></textarea>
685 </div>
686 </div>
687 <div class="form-group">
688 <label class="col-sm-2 control-label">
689 </label>
690 <div class="col-sm-10">
691 <p data-translate>The BIP32 derivation path and extended keys are the basis for the derived addresses.</p>
692 </div>
693 </div>
ab78acc6 694 <div class="form-group">
ea87f1d3 695 <label for="bip44-path" class="col-sm-2 control-label" data-translate>BIP32 Derivation Path</label>
ab78acc6
IC
696 <div class="col-sm-10">
697 <input id="bip44-path" type="text" class="path form-control" value="m/44'/0'/0'/0" readonly="readonly">
698 </div>
699 </div>
700 </form>
701 </div>
702 <div id="bip32" class="tab-pane">
703 <form class="form-horizontal" role="form">
704 <br>
705 <div class="col-sm-2"></div>
706 <div class="col-sm-10">
ea87f1d3
IC
707 <p data-translate>
708 For more info see the
709 <a href="https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target="_blank">BIP32 spec</a>
710 </p>
ab78acc6 711 </div>
56530adc
IC
712 <div class="form-group">
713 <label for="bip32-client" class="col-sm-2 control-label" data-translate>Client</label>
714 <div class="col-sm-10">
715 <select id="bip32-client" class="client form-control">
716 <option value="custom">Custom derivation path</option>
717 <!-- populated by javascript -->
718 </select>
719 </div>
720 </div>
ab78acc6 721 <div class="form-group">
ea87f1d3 722 <label for="bip32-path" class="col-sm-2 control-label" data-translate>BIP32 Derivation Path</label>
ab78acc6
IC
723 <div class="col-sm-10">
724 <input id="bip32-path" type="text" class="path form-control" value="m/0">
725 </div>
726 </div>
1975bfbc
IC
727 <div class="form-group">
728 <div class="col-sm-2"></div>
729 <label class="col-sm-10">
730 <input class="hardened-addresses" type="checkbox">
ea87f1d3 731 <span data-translate>Use hardened addresses</span>
1975bfbc
IC
732 </label>
733 </div>
1975bfbc 734 <div class="form-group">
ea87f1d3 735 <label for="core-path" class="col-sm-2 control-label" data-translate>Bitcoin Core</label>
1975bfbc 736 <div class="col-sm-10">
ea87f1d3 737 <p class="form-control no-border" data-translate-html>
1975bfbc 738 Use path <code>m/0'/0'</code> with hardened addresses.
c866242d 739 </p>
ea87f1d3
IC
740 <p class="form-control no-border" data-translate-html>
741 For more info see the
742 <a href="https://github.com/bitcoin/bitcoin/pull/8035" target="_blank">Bitcoin Core BIP32 implementation</a>
1975bfbc
IC
743 </p>
744 </div>
745 </div>
56530adc
IC
746 <div class="form-group">
747 <label for="core-path" class="col-sm-2 control-label" data-translate>Multibit</label>
748 <div class="col-sm-10">
749 <p class="form-control no-border">
750 <span data-translate-html>Use path <code>m/0'/0</code>.</span>
751 </p>
752 <p class="form-control no-border">
753 <span data-translate>For more info see</span>
754 <a href="https://multibit.org/" target="_blank">MultiBit HD</a>
755 </p>
756 </div>
757 </div>
aa51da11 758 <div class="form-group">
ea87f1d3 759 <label class="col-sm-2 control-label" data-translate>Block Explorers</label>
aa51da11
IC
760 <div class="col-sm-10">
761 <p class="form-control no-border">
ea87f1d3
IC
762 <span data-translate-html>Use path <code>m/44'/0'/0'</code>.</span>
763 <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
764 </p>
765 <p class="form-control no-border">
ea87f1d3
IC
766 <span data-translate>Can be used with</span>:
767 <a href="https://blockchain.info/" target="_blank">blockchain.info</a>
aa51da11
IC
768 </p>
769 </div>
770 </div>
ab78acc6
IC
771 </form>
772 </div>
773 </div>
774 <form class="form-horizontal" role="form">
775 <div class="form-group">
20083ab9 776 <label for="extended-priv-key" class="col-sm-2 control-label" data-translate>BIP32 Extended Private Key</label>
ab78acc6 777 <div class="col-sm-10">
e00964cc 778 <textarea id="extended-priv-key" class="extended-priv-key form-control" readonly="readonly" data-show-qr></textarea>
ab78acc6
IC
779 </div>
780 </div>
781 <div class="form-group">
20083ab9 782 <label for="extended-pub-key" class="col-sm-2 control-label" data-translate>BIP32 Extended Public Key</label>
ab78acc6 783 <div class="col-sm-10">
e00964cc 784 <textarea id="extended-pub-key" class="extended-pub-key form-control" readonly="readonly" data-show-qr></textarea>
ab78acc6
IC
785 </div>
786 </div>
787 </form>
788 </div>
789 </div>
3af2954a 790
ab78acc6 791 <hr>
3af2954a 792
ab78acc6
IC
793 <div class="row">
794 <div class="col-md-12">
795 <h2>Derived Addresses</h2>
ea87f1d3 796 <p data-translate>Note these addreses are derived from the BIP32 Extended Key</p>
ab78acc6
IC
797 <table class="table table-striped">
798 <thead>
799 <th>
800 <div class="input-group">
ea87f1d3
IC
801 <span data-translate>Path</span>&nbsp;&nbsp;
802 <button class="index-toggle" data-translate>Toggle</button>
ab78acc6
IC
803 </div>
804 </th>
805 <th>
806 <div class="input-group">
ea87f1d3
IC
807 <span data-translate>Address</span>&nbsp;&nbsp;
808 <button class="address-toggle" data-translate>Toggle</button>
ab78acc6
IC
809 </div>
810 </th>
1b12b2f5
IC
811 <th>
812 <div class="input-group">
ea87f1d3
IC
813 <span data-translate>Public Key</span>&nbsp;&nbsp;
814 <button class="public-key-toggle" data-translate>Toggle</button>
1b12b2f5
IC
815 </div>
816 </th>
ab78acc6
IC
817 <th>
818 <div class="input-group">
ea87f1d3
IC
819 <span data-translate>Private Key</span>&nbsp;&nbsp;
820 <button class="private-key-toggle" data-translate>Toggle</button>
ab78acc6
IC
821 </div>
822 </th>
823 </thead>
d737abf6 824 <tbody class="addresses monospace">
c866242d
IC
825 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
826 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
827 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
828 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
829 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
ab78acc6
IC
830 </tbody>
831 </table>
832 </div>
833 </div>
ea87f1d3 834 <span data-translate>Show more rows</span>:
ab78acc6 835 <input type="number" class="rows-to-add" value="20">
ea87f1d3 836 <button class="more" data-translate>Show</button>
3af2954a 837
ab78acc6 838 <hr>
3af2954a 839
ab78acc6
IC
840 <div class="row">
841 <div class="col-md-12">
ea87f1d3
IC
842 <h2 data-translate>More info</h2>
843 <h3>BIP39 <span class="small" data-translate>Mnemonic code for generating deterministic keys</span></h3>
844 <p data-translate-html>
ab78acc6
IC
845 Read more at the
846 <a href="https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki">official BIP39 spec</a>
847 </p>
ea87f1d3
IC
848 <h3>BIP32 <span class="small" data-translate>Hierarchical Deterministic Wallets</span></h3>
849 <p data-translate-html>
ab78acc6
IC
850 Read more at the
851 <a href="https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target="_blank">official BIP32 spec</a>
ea87f1d3
IC
852 </p>
853 <p data-translate-html>
854 See the demo at
ab78acc6
IC
855 <a href="http://bip32.org/" target="_blank">bip32.org</a>
856 </p>
ea87f1d3
IC
857 <h3>BIP44 <span class="small" data-translate>Multi-Account Hierarchy for Deterministic Wallets</span></h3>
858 <p data-translate-html>
ab78acc6
IC
859 Read more at the
860 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target="_blank">official BIP44 spec</a>
861 </p>
ea87f1d3 862 <h3 data-translate>Private Keys</h3>
ab78acc6 863 <p>
ea87f1d3
IC
864 <span data-translate-html>
865 Use private keys at
866 <a href="https://web.archive.org/web/20150707020924/https://brainwallet.org/" target="_blank">brainwallet.org</a>.
867 </span>
868 <span data-translate>Be careful - it can be easy to make mistakes if you don't know what you're doing.</span>
ab78acc6 869 </p>
ea87f1d3 870 <h3 id="entropy-notes" data-translate>Entropy</h3>
c6624d51 871 <p>
ea87f1d3
IC
872 <span data-translate-html>
873 Entropy values must be sourced from a
874 <a href="https://en.wikipedia.org/wiki/Random_number_generation" target="_blank">strong source of randomness</a>.
875 </span>
876 <span data-translate>This means flipping a fair coin, rolling a fair dice, noise measurements etc.</span>
877 <span data-translate-html>
878 Do <strong>NOT</strong> use phrases from books, lyrics from songs, your birthday or steet address,
879 keyboard mashing, or anything you <i>think</i> is random, because chances are overwhelming it isn't
880 random enough for the needs of this tool.
881 </span>
c6624d51 882 </p>
434caecd
IC
883 <p>
884 <strong><span data-translate>Do not store entropy.</span></strong>
885 </p>
886 <p>
887 <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>
888 <span data-translate>Instead of storing entropy, store the mnemonic generated from the entropy.</span>
889 <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>
890 </p>
c6624d51 891 <p>
ea87f1d3
IC
892 <span data-translate-html>
893 The random mnemonic generator on this page uses a
894 <a href="https://developer.mozilla.org/en-US/docs/Web/API/RandomSource/getRandomValues" target="_blank">cryptographically secure random number generator</a>.
895 </span>
896 <span data-translate>The built in random generator can generally be trusted more than your own intuition about randomness.</span>
897 <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>
898 <span data-translate>In that case you might choose to use your own source of entropy.</span>
c6624d51
IC
899 </p>
900 <p>
ea87f1d3 901 <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 902 </p>
52da415f
IC
903 <h3 data-translate>License</h3>
904 <p>
905 <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.
906 </span>
907 </p>
908 <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
909 </div>
910 </div>
3af2954a 911
ab78acc6 912 <hr>
3af2954a 913
ab78acc6
IC
914 <div class="row">
915 <div class="col-md-12">
3af2954a 916
ea87f1d3 917 <h2 data-translate>Offline Usage</h2>
3af2954a 918
ea87f1d3 919 <p data-translate>
ab78acc6
IC
920 You can use this tool without having to be online.
921 </p>
ea87f1d3 922 <p data-translate>
ab78acc6
IC
923 In your browser, select file save-as, and save this page
924 as a file.
925 </p>
ea87f1d3 926 <p data-translate>
ab78acc6
IC
927 Double-click that file to open it in a browser
928 on any offline computer.
929 </p>
930 <p>
ea87f1d3
IC
931 <span data-translate>Alternatively, download the file from the repository</span>
932 -
933 <a href="https://github.com/iancoleman/bip39">https://github.com/iancoleman/bip39</a>
934 </p>
3af2954a 935
ab78acc6
IC
936 </div>
937 </div>
3af2954a 938
ab78acc6 939 <hr>
3af2954a 940
ab78acc6
IC
941 <div class="row">
942 <div class="col-md-12">
3af2954a 943
ea87f1d3 944 <h2 data-translate>This project is 100% open-source code</h2>
3af2954a 945
ab78acc6 946 <p>
ea87f1d3
IC
947 <span data-translate>Get the source code from the repository</span>
948 -
b630f83d
IC
949 <a href="https://github.com/iancoleman/bip39" target="_blank">
950 https://github.com/iancoleman/bip39
ab78acc6
IC
951 </a>
952 </p>
3af2954a 953
ea87f1d3 954 <h3 data-translate>Libraries</h3>
3af2954a 955
ab78acc6
IC
956 <p>
957 <span>BitcoinJS - </span>
958 <a href="https://github.com/bitcoinjs/bitcoinjs-lib" target="_blank">
959 https://github.com/bitcoinjs/bitcoinjs-lib
960 </a>
961 </p>
3af2954a 962
ab78acc6
IC
963 <p>
964 <span>jsBIP39 - </span>
965 <a href="https://github.com/iancoleman/jsbip39" target="_blank">
966 https://github.com/iancoleman/jsbip39
967 </a>
968 </p>
3af2954a 969
ab78acc6
IC
970 <p>
971 <span>sjcl - </span>
972 <a href="https://github.com/bitwiseshiftleft/sjcl" target="_blank">
973 https://github.com/bitwiseshiftleft/sjcl
974 </a>
975 </p>
3af2954a 976
ab78acc6
IC
977 <p>
978 <span>jQuery - </span>
979 <a href="https://jquery.com/" target="_blank">
980 https://jquery.com/
981 </a>
982 </p>
3af2954a 983
ab78acc6
IC
984 <p>
985 <span>Twitter Bootstrap - </span>
986 <a href="http://getbootstrap.com/" target="_blank">
987 http://getbootstrap.com/
988 </a>
989 </p>
3af2954a 990
ab78acc6
IC
991 </div>
992 </div>
3af2954a 993
ab78acc6 994 </div>
3af2954a 995
e00964cc 996 <div class="qr-container hidden">
52da415f
IC
997 <div class="qr-hint bg-primary hidden" data-translate>Click field to hide QR</div>
998 <div class="qr-hint bg-primary" data-translate>Click field to show QR</div>
999 <div class="qr-hider hidden">
1000 <div class="qr-image"></div>
1001 <div class="qr-warning bg-primary" data-translate>Caution: Scanner may keep history</div>
1002 </div>
e00964cc
IC
1003 </div>
1004
ab78acc6
IC
1005 <div class="feedback-container">
1006 <div class="feedback">Loading...</div>
1007 </div>
3af2954a 1008
ab78acc6
IC
1009 <script type="text/template" id="address-row-template">
1010 <tr>
1011 <td class="index"><span></span></td>
e00964cc
IC
1012 <td class="address"><span data-show-qr></span></td>
1013 <td class="pubkey"><span data-show-qr></span></td>
1014 <td class="privkey"><span data-show-qr></span></td>
ab78acc6
IC
1015 </tr>
1016 </script>
8b095871
IC
1017 <script>// From
1018// https://raw.githubusercontent.com/inexorabletash/polyfill/a6bc6ced78160c994f76a909b6ff6bbbab3d43de/es6.js
1019// Required for ethereumjs-utils.js when run in phantomjs-2.1.1
1020// but is not required in any modern browsers.
1021// For more information, see
1022// https://www.bountysource.com/issues/38485709-error-rendering-plot-with-phantomjs
1023
1024//----------------------------------------------------------------------
1025//
1026// ECMAScript 2015 Polyfills
1027//
1028//----------------------------------------------------------------------
563e401a 1029
8b095871
IC
1030(function (global) {
1031 "use strict";
1032
1033 // Set this to always override native implementations, for testing
1034 // the polyfill in browsers with partial/full ES2015 support.
1035 var OVERRIDE_NATIVE_FOR_TESTING = false;
1036
1037 var undefined = (void 0); // Paranoia
1038
1039 // Helpers
1040
1041 function strict(o) {
1042 return o === global ? undefined : o;
1043 }
1044
1045 function hook(o, p, f) {
1046 var op = o[p];
1047 console.assert(typeof op === 'function', 'Hooking a non-function');
1048 o[p] = function() {
1049 var o = strict(this);
1050 var r = f.apply(o, arguments);
1051 return r !== undefined ? r : op.apply(o, arguments);
1052 };
1053 }
1054
1055 function isSymbol(s) {
1056 return (typeof s === 'symbol') || ('Symbol' in global && s instanceof global.Symbol);
1057 }
1058
1059 function getPropertyDescriptor(target, name) {
1060 var desc = Object.getOwnPropertyDescriptor(target, name);
1061 var proto = Object.getPrototypeOf(target);
1062 while (!desc && proto) {
1063 desc = Object.getOwnPropertyDescriptor(proto, name);
1064 proto = Object.getPrototypeOf(proto);
563e401a 1065 }
8b095871
IC
1066 return desc;
1067 }
563e401a 1068
8b095871
IC
1069 var enqueue = (function(nativePromise, nativeSetImmediate) {
1070 if (nativePromise)
1071 return function(job) { nativePromise.resolve().then(function() { job(); }); };
1072 if (nativeSetImmediate)
1073 return function(job) { nativeSetImmediate(job); };
1074 return function(job) { setTimeout(job, 0); };
1075 }(global['Promise'], global['setImmediate']));
563e401a 1076
8b095871
IC
1077 function define(o, p, v, override) {
1078 if (p in o && !override && !OVERRIDE_NATIVE_FOR_TESTING)
1079 return;
1080
1081 if (typeof v === 'function') {
1082 // Sanity check that functions are appropriately named (where possible)
1083 console.assert(isSymbol(p) || !('name' in v) || v.name === p || v.name === p + '_', 'Expected function name "' + p.toString() + '", was "' + v.name + '"');
1084 Object.defineProperty(o, p, {
1085 value: v,
1086 configurable: true,
1087 enumerable: false,
1088 writable: true
1089 });
563e401a 1090 } else {
8b095871
IC
1091 Object.defineProperty(o, p, {
1092 value: v,
1093 configurable: false,
1094 enumerable: false,
1095 writable: false
1096 });
563e401a 1097 }
8b095871 1098 }
563e401a 1099
8b095871
IC
1100 function set_internal(o, p, v) {
1101 Object.defineProperty(o, p, {
1102 value: v,
1103 configurable: false,
1104 enumerable: false,
1105 writable: true
1106 });
1107 }
563e401a 1108
8b095871
IC
1109 // Snapshot intrinsic functions
1110 var $isNaN = global.isNaN,
1111 $parseInt = global.parseInt,
1112 $parseFloat = global.parseFloat;
1113
1114 var E = Math.E,
1115 LOG10E = Math.LOG10E,
1116 LOG2E = Math.LOG2E,
1117 abs = Math.abs,
1118 ceil = Math.ceil,
1119 exp = Math.exp,
1120 floor = Math.floor,
1121 log = Math.log,
1122 max = Math.max,
1123 min = Math.min,
1124 pow = Math.pow,
1125 random = Math.random,
1126 sqrt = Math.sqrt;
1127
1128 var orig_match = String.prototype.match,
1129 orig_replace = String.prototype.replace,
1130 orig_search = String.prototype.search,
1131 orig_split = String.prototype.split;
1132
1133 // These are used for implementing the polyfills, but not exported.
1134
1135 // Inspired by https://gist.github.com/1638059
1136 /** @constructor */
1137 function EphemeronTable() {
1138 var secretKey = ObjectCreate(null);
1139
1140 function conceal(o) {
1141 var oValueOf = o.valueOf, secrets = ObjectCreate(null);
1142 Object.defineProperty(o, 'valueOf', {
1143 value: (function(secretKey) {
1144 return function (k) {
1145 return (k === secretKey) ? secrets : oValueOf.apply(o, arguments);
1146 };
1147 }(secretKey)),
1148 configurable: true,
1149 writeable: true,
1150 enumerable: false
1151 });
1152 return secrets;
1153 }
563e401a 1154
8b095871
IC
1155 function reveal(o) {
1156 var v = typeof o.valueOf === 'function' && o.valueOf(secretKey);
1157 return v === o ? null : v;
1158 }
1159
1160 return {
1161 clear: function() {
1162 secretKey = ObjectCreate(null);
1163 },
1164 remove: function(key) {
1165 var secrets = reveal(key);
1166 if (secrets && HasOwnProperty(secrets, 'value')) {
1167 delete secrets.value;
1168 return true;
1169 }
1170 return false;
1171 },
1172 get: function(key, defaultValue) {
1173 var secrets = reveal(key);
1174 return (secrets && HasOwnProperty(secrets, 'value')) ? secrets.value : defaultValue;
1175 },
1176 has: function(key) {
1177 var secrets = reveal(key);
1178 return Boolean(secrets && HasOwnProperty(secrets, 'value'));
1179 },
1180 set: function(key, value) {
1181 var secrets = reveal(key) || conceal(key);
1182 secrets.value = value;
563e401a 1183 }
8b095871
IC
1184 };
1185 }
563e401a 1186
8b095871 1187 var empty = Object.create(null);
563e401a 1188
8b095871
IC
1189 //----------------------------------------------------------------------
1190 //
1191 // ECMAScript 2015
1192 // http://www.ecma-international.org/ecma-262/6.0/
1193 //
1194 //----------------------------------------------------------------------
563e401a 1195
8b095871
IC
1196 // ---------------------------------------
1197 // 19.4 Symbol Objects
1198 // ---------------------------------------
563e401a 1199
8b095871
IC
1200 // NOTE: Symbols are defined here - out of spec order - since we need the
1201 // properties and prototype to be populated for other polyfills.
563e401a 1202
8b095871 1203 // NOTE: Not secure, nor is obj[$$symbol] hidden from Object.keys()
563e401a 1204
8b095871
IC
1205 var symbolForKey;
1206 (function() {
1207 var secret = Object.create(null);
1208 var symbolMap = {};
1209 symbolForKey = function(k) {
1210 return symbolMap[k];
1211 };
563e401a 1212
8b095871 1213 var GlobalSymbolRegistry = [];
563e401a 1214
8b095871
IC
1215 function unique(bits) {
1216 return Array(bits + 1).join('x').replace(/x/g, function() {
1217 return random() < 0.5 ? '\u200C' : '\u200D'; // JWNJ / ZWJ
1218 });
1219 }
563e401a 1220
8b095871
IC
1221 // 19.4.1 The Symbol Constructor
1222 // 19.4.1.1 Symbol ( description=undefined )
1223 function Symbol(description) {
1224 if (!(this instanceof Symbol)) return new Symbol(description, secret);
1225 if (this instanceof Symbol && arguments[1] !== secret) throw TypeError();
563e401a 1226
8b095871
IC
1227 var descString = description === undefined ? undefined : String(description);
1228
1229 set_internal(this, '[[SymbolData]]', unique(128));
1230 set_internal(this, '[[Description]]', descString);
1231
1232 symbolMap[this] = this;
1233 return this;
1234 }
1235
1236 if (!('Symbol' in global) || OVERRIDE_NATIVE_FOR_TESTING)
1237 global.Symbol = Symbol;
1238
1239 // 19.4.2 Properties of the Symbol Constructor
1240
1241 // 19.4.2.1 Symbol.for (key)
1242 define(Symbol, 'for', function for_(key) {
1243 var stringKey = String(key);
1244 for (var i = 0; i < GlobalSymbolRegistry.length; ++i) {
1245 var e = GlobalSymbolRegistry[i];
1246 if (SameValue(e['[[key]]'], stringKey)) return e['[[symbol]]'];
563e401a 1247 }
8b095871
IC
1248 var newSymbol = Symbol(key);
1249 GlobalSymbolRegistry.push({'[[key]]': stringKey, '[[symbol]]': newSymbol});
1250 return newSymbol;
1251 });
563e401a 1252
8b095871
IC
1253 // 19.4.2.2 Symbol.hasInstance
1254 // 19.4.2.3 Symbol.isConcatSpreadable
563e401a 1255
8b095871
IC
1256 // 19.4.2.4 Symbol.iterator
1257 define(global.Symbol, 'iterator', global.Symbol('Symbol.iterator'));
563e401a 1258
8b095871
IC
1259 // 19.4.2.5 Symbol.keyFor (sym)
1260 define(Symbol, 'keyFor', function keyFor(sym) {
1261 if (!(sym instanceof Symbol)) throw TypeError();
1262 for (var i = 0; i < GlobalSymbolRegistry.length; ++i) {
1263 var e = GlobalSymbolRegistry[i];
1264 if (SameValue(e['[[symbol]]'], sym)) return e['[[key]]'];
1265 }
1266 return undefined;
1267 });
563e401a 1268
8b095871
IC
1269 // 19.4.2.6 Symbol.match
1270 define(global.Symbol, 'match', global.Symbol('Symbol.match'));
563e401a 1271
8b095871 1272 // 19.4.2.7 Symbol.prototype
563e401a 1273
8b095871
IC
1274 // 19.4.2.8 Symbol.replace
1275 define(global.Symbol, 'replace', global.Symbol('Symbol.replace'));
563e401a 1276
8b095871
IC
1277 // 19.4.2.9 Symbol.search
1278 define(global.Symbol, 'search', global.Symbol('Symbol.search'));
563e401a 1279
8b095871 1280 // 19.4.2.10 Symbol.species
563e401a 1281
8b095871
IC
1282 // 19.4.2.11 Symbol.search
1283 define(global.Symbol, 'split', global.Symbol('Symbol.split'));
563e401a 1284
8b095871 1285 // 19.4.2.12 Symbol.toPrimitive
563e401a 1286
8b095871
IC
1287 // 19.4.2.13 Symbol.toStringTag
1288 define(global.Symbol, 'toStringTag', global.Symbol('Symbol.toStringTag'));
1289
1290 // 19.4.2.14 Symbol.unscopables
1291
1292 // 19.4.3 Properties of the Symbol Prototype Object
1293 // 19.4.3.1 Symbol.prototype.constructor
1294
1295 // 19.4.3.2 Symbol.prototype.toString ( )
1296 Object.defineProperty(Symbol.prototype, 'toString', {
1297 value: function toString() {
1298 var s = strict(this);
1299 var desc = s['[[Description]]'];
1300 return 'Symbol(' + (desc === undefined ? '' : desc) + s['[[SymbolData]]'] + ')';
1301 },
1302 configurable: true, writeable: true, enumerable: false });
1303
1304 // 19.4.3.3 Symbol.prototype.valueOf ( )
1305 Object.defineProperty(Symbol.prototype, 'valueOf', {
1306 value: function valueOf() {
1307 // To prevent automatic string conversion:
1308 throw TypeError();
1309
1310 // Spec has approximately the following:
1311 //var s = strict(this);
1312 //if (Type(s) === 'symbol') return s;
1313 //if (Type(s) !== 'object') throw TypeError();
1314 //if (!('[[SymbolData]]' in s)) throw TypeError();
1315 //return s['[[SymbolData]]'];
1316 },
1317 configurable: true, writeable: true, enumerable: false });
1318
1319 // 19.4.3.4 Symbol.prototype [ @@toStringTag ]
1320 // (Done later to polyfill partial implementations)
1321
1322 // 19.4.4 Properties of Symbol Instances
1323 }());
1324
1325 console.assert(typeof global.Symbol() === 'symbol' || symbolForKey(String(global.Symbol('x'))));
1326
1327 // Defined here so that other prototypes can reference it
1328 // 25.1.2 The %IteratorPrototype% Object
1329 var $IteratorPrototype$ = {};
1330
1331 //----------------------------------------
1332 // 6 ECMAScript Data Types and Values
1333 //----------------------------------------
1334
1335 // 6.1 ECMAScript Language Types
1336
1337 // "Type(x)" is used as shorthand for "the type of x"...
1338 function Type(v) {
1339 switch (typeof v) {
1340 case 'undefined': return 'undefined';
1341 case 'boolean': return 'boolean';
1342 case 'number': return 'number';
1343 case 'string': return 'string';
1344 case 'symbol': return 'symbol';
1345 default:
1346 if (v === null) return 'null';
1347 if (v instanceof global.Symbol) return 'symbol';
1348 return 'object';
563e401a 1349 }
8b095871 1350 }
563e401a 1351
8b095871
IC
1352 // 6.1.5.1 Well-Known Symbols
1353 var $$iterator = global.Symbol.iterator,
1354 $$match = global.Symbol.match,
1355 $$replace = global.Symbol.replace,
1356 $$search = global.Symbol.search,
1357 $$split = global.Symbol.split,
1358 $$toStringTag = global.Symbol.toStringTag;
563e401a 1359
8b095871
IC
1360 //----------------------------------------
1361 // 7 Abstract Operations
1362 //----------------------------------------
1363
1364 //----------------------------------------
1365 // 7.1 Type Conversion
1366 //----------------------------------------
1367
1368 // 7.1.1 ToPrimitive ( input [, PreferredType] )
1369 // just use valueOf()
1370
1371 // 7.1.2 ToBoolean ( argument )
1372 // just use Boolean()
1373
1374 // 7.1.3 ToNumber ( argument )
1375 // just use Number()
1376
1377 // 7.1.4 ToInteger ( argument )
1378 function ToInteger(n) {
1379 n = Number(n);
1380 if ($isNaN(n)) return 0;
1381 if (n === 0 || n === Infinity || n === -Infinity) return n;
1382 return ((n < 0) ? -1 : 1) * floor(abs(n));
563e401a 1383 }
8b095871
IC
1384
1385 // 7.1.5 ToInt32 ( argument )
1386 function ToInt32(v) { return v >> 0; }
1387
1388 // 7.1.6 ToUint32 ( argument )
1389 function ToUint32(v) { return v >>> 0; }
1390
1391 // 7.1.7 ToInt16 ( argument )
1392 function ToInt16(v) { return (v << 16) >> 16; }
1393
1394 // 7.1.8 ToUint16 ( argument )
1395 function ToUint16(v) { return v & 0xFFFF; }
1396
1397 // 7.1.9 ToInt8 ( argument )
1398 function ToInt8(v) { return (v << 24) >> 24; }
1399
1400 // 7.1.10 ToUint8 ( argument )
1401 function ToUint8(v) { return v & 0xFF; }
1402
1403 // 7.1.11 ToUint8Clamp ( argument )
1404 function ToUint8Clamp(argument) {
1405 var number = Number(argument);
1406 if ($isNaN(number)) return 0;
1407 if (number <= 0) return 0;
1408 if (number >= 255) return 255;
1409 var f = floor(number);
1410 if ((f + 0.5) < number) return f + 1;
1411 if (number < (f + 0.5)) return f;
1412 if (f % 2) return f + 1;
1413 return f;
563e401a 1414 }
8b095871
IC
1415
1416 // 7.1.12 ToString ( argument )
1417 // just use String()
1418
1419 // 7.1.13 ToObject ( argument )
1420 function ToObject(v) {
1421 if (v === null || v === undefined) throw TypeError();
1422 return Object(v);
563e401a 1423 }
563e401a 1424
8b095871
IC
1425 // 7.1.14 ToPropertyKey ( argument )
1426 function ToPropertyKey(v) {
1427 return String(v);
1428 }
3af2954a 1429
8b095871
IC
1430 // 7.1.15 ToLength ( argument )
1431 function ToLength(v) {
1432 var len = ToInteger(v);
1433 if (len <= 0) return 0;
1434 if (len === Infinity) return 0x20000000000000 - 1; // 2^53-1
1435 return min(len, 0x20000000000000 - 1); // 2^53-1
ab78acc6 1436 }
3af2954a 1437
8b095871 1438 // 7.1.16 CanonicalNumericIndexString ( argument )
3af2954a 1439
8b095871
IC
1440 //----------------------------------------
1441 // 7.2 Testing and Comparison Operations
1442 //----------------------------------------
3af2954a 1443
8b095871
IC
1444 // 7.2.1 RequireObjectCoercible ( argument )
1445 // 7.2.2 IsArray ( argument )
3af2954a 1446
8b095871
IC
1447 // 7.2.3 IsCallable ( argument )
1448 function IsCallable(o) { return typeof o === 'function'; }
3af2954a 1449
8b095871
IC
1450 // 7.2.4 IsConstructor ( argument )
1451 function IsConstructor(o) {
1452 // Hacks for Safari 7 TypedArray XXXConstructor objects
1453 if (/Constructor/.test(Object.prototype.toString.call(o))) return true;
1454 if (/Function/.test(Object.prototype.toString.call(o))) return true;
1455 // TODO: Can this be improved on?
1456 return typeof o === 'function';
3af2954a 1457 }
8b095871
IC
1458
1459 // 7.2.5 IsExtensible (O)
1460 // 7.2.6 IsInteger ( argument )
1461
1462 // 7.2.7 IsPropertyKey ( argument )
1463 function IsPropertyKey(argument) {
1464 if (Type(argument) === 'string') return true;
1465 if (Type(argument) === 'symbol') return true;
1466 return false;
3af2954a
IC
1467 }
1468
8b095871
IC
1469 // 7.2.8 IsRegExp ( argument )
1470 // 7.2.5 IsConstructor ( argument )
3af2954a 1471
8b095871
IC
1472 // 7.2.9 SameValue(x, y)
1473 function SameValue(x, y) {
1474 if (typeof x !== typeof y) return false;
1475 switch (typeof x) {
1476 case 'undefined':
1477 return true;
1478 case 'number':
1479 if (x !== x && y !== y) return true;
1480 if (x === 0 && y === 0) return 1/x === 1/y;
1481 return x === y;
1482 case 'boolean':
1483 case 'string':
1484 case 'object':
1485 default:
1486 return x === y;
1487 }
1488 }
3af2954a 1489
8b095871
IC
1490 // 7.2.10 SameValueZero(x, y)
1491 function SameValueZero(x, y) {
1492 if (typeof x !== typeof y) return false;
1493 switch (typeof x) {
1494 case 'undefined':
1495 return true;
1496 case 'number':
1497 if (x !== x && y !== y) return true;
1498 return x === y;
1499 case 'boolean':
1500 case 'string':
1501 case 'object':
1502 default:
1503 return x === y;
1504 }
1505 }
3af2954a 1506
8b095871
IC
1507 //----------------------------------------
1508 // 7.3 Operations on Objects
1509 //----------------------------------------
3af2954a 1510
8b095871
IC
1511 // 7.3.1 Get (O, P)
1512 // - just use o.p or o[p]
3af2954a 1513
8b095871
IC
1514 // 7.3.2 GetV (V, P)
1515 function GetV(v, p) {
1516 var o = ToObject(v);
1517 return o[p];
1518 }
3af2954a 1519
8b095871
IC
1520 // 7.3.3 Set (O, P, V, Throw)
1521 // - just use o.p = v or o[p] = v
3af2954a 1522
3af2954a 1523
3af2954a 1524
3af2954a 1525
8b095871
IC
1526 // 7.3.9 GetMethod (O, P)
1527 function GetMethod(o, p) {
1528 var func = GetV(o, p);
1529 if (func === undefined || func === null) return undefined;
1530 if (!IsCallable(func)) throw TypeError();
1531 return func;
ab78acc6 1532 }
8b095871
IC
1533
1534 // 7.3.10 HasProperty (O, P)
1535 function HasProperty(o, p) {
1536 while (o) {
1537 if (Object.prototype.hasOwnProperty.call(o, p)) return true;
1538 if (Type(o) !== 'object') return false;
1539 o = Object.getPrototypeOf(o);
ab78acc6 1540 }
8b095871 1541 return false;
ab78acc6 1542 }
8b095871
IC
1543
1544 // 7.3.11 HasOwnProperty (O, P)
1545 function HasOwnProperty(o, p) {
1546 return Object.prototype.hasOwnProperty.call(o, p);
ab78acc6 1547 }
3af2954a 1548
8b095871
IC
1549 //----------------------------------------
1550 // 7.4 Operations on Iterator Objects
1551 //----------------------------------------
3af2954a 1552
8b095871
IC
1553 // 7.4.1 GetIterator ( obj, method )
1554 function GetIterator(obj, method) {
1555 if (arguments.length < 2)
1556 method = GetMethod(obj, $$iterator);
1557 var iterator = method.call(obj);
1558 if (Type(iterator) !== 'object') throw TypeError();
1559 return iterator;
3af2954a
IC
1560 }
1561
8b095871
IC
1562 // 7.4.2 IteratorNext ( iterator, value )
1563 function IteratorNext(iterator, value) {
1564 if (arguments.length < 2)
1565 var result = iterator.next();
1566 else
1567 result = iterator.next(value);
1568 if (Type(result) !== 'object') throw TypeError();
1569 return result;
1570 }
3af2954a 1571
8b095871
IC
1572 // 7.4.3 IteratorComplete ( iterResult )
1573 function IteratorComplete(iterResult) {
1574 console.assert(Type(iterResult) === 'object');
1575 return Boolean(iterResult.done);
1576 }
3af2954a 1577
8b095871
IC
1578 // 7.4.4 IteratorValue ( iterResult )
1579 function IteratorValue(iterResult) {
1580 console.assert(Type(iterResult) === 'object');
1581 return iterResult.value;
1582 }
1583
1584 // 7.4.5 IteratorStep ( iterator )
1585 function IteratorStep( iterator, value ) {
1586 var result = IteratorNext(iterator, value);
1587 var done = result['done'];
1588 if (Boolean(done) === true) return false;
1589 return result;
1590 }
1591
1592 // 7.4.6 IteratorClose( iterator, completion )
1593 function IteratorClose( iterator, completion ) {
1594 console.assert(Type(iterator) === 'object');
1595 var _return = GetMethod(iterator, 'return');
1596 if (_return === undefined) return completion;
1597 try {
1598 var innerResult = _return[iterator]();
1599 } catch (result) {
1600 // TODO: If completion.[[type]] is throw, return completion
1601 return result;
1602 }
1603 if (Type(innerResult) !== 'object') throw TypeError();
1604 return completion;
1605 }
1606
1607 // 7.4.7 CreateIterResultObject (value, done)
1608 function CreateIterResultObject(value, done) {
1609 console.assert(Type(done) === 'boolean');
1610 var obj = {};
1611 obj["value"] = value;
1612 obj["done"] = done;
1613 return obj;
1614 }
1615
1616 // 7.4.8 CreateListIterator (list)
1617 // 7.4.8.1 ListIterator next( )
1618 // 7.4.9 CreateCompoundIterator ( iterator1, iterator2 )
1619 // 7.4.9.1 CompoundIterator next( )
1620
1621 //----------------------------------------
1622 // 8 Executable Code and Execution Contexts
1623 //----------------------------------------
1624
1625 //----------------------------------------
1626 // 8.4 Jobs and Job Queues
1627 //----------------------------------------
1628
1629 // 8.4.1 EnqueueJob ( queueName, job, arguments)
1630 function EnqueueJob(queueName, job, args) {
1631 var fn = function() { job.apply(undefined, args); };
1632 enqueue(fn);
1633 }
1634
1635 // 8.4.2 NextJob result
1636 function NextJob(result) {
1637 // no-op
1638 }
1639
1640 //----------------------------------------
1641 // 9 Ordinary and Exotic Objects Behaviors
1642 //----------------------------------------
1643
1644 // 9.1.11 [[Enumerate]] ()
1645 function Enumerate(obj) {
1646 var e = [];
1647 if (Object(obj) !== obj) return e;
1648 var visited = new Set;
1649 while (obj !== null) {
1650 Object.getOwnPropertyNames(obj).forEach(function(name) {
1651 if (!visited.has(name)) {
1652 var desc = Object.getOwnPropertyDescriptor(obj, name);
1653 if (desc) {
1654 visited.add(name);
1655 if (desc.enumerable) e.push(name);
1656 }
1657 }
1658 });
1659 obj = Object.getPrototypeOf(obj);
1660 }
1661 return e[$$iterator]();
1662 }
1663
1664 // 9.1.12 [[OwnPropertyKeys]] ( )
1665 function OwnPropertyKeys(o) {
1666 return Object.getOwnPropertyNames(o);
1667 }
1668
1669 // 9.1.13 ObjectCreate(proto, internalSlotsList)
1670 function ObjectCreate(proto, internalSlotsList) {
1671 return Object.create(proto, internalSlotsList);
1672 }
1673
1674 // ---------------------------------------
1675 // 19 Fundamental Objects
1676 // ---------------------------------------
1677
1678 // ---------------------------------------
1679 // 19.1 Object Objects
1680 // ---------------------------------------
1681
1682 // 19.1.1 The Object Constructor
1683 // 19.1.1.1 Object ( [ value ] )
1684 // 19.1.2 Properties of the Object Constructor
1685 // 19.1.2.1 Object.assign ( target, ...sources )
1686 define(
1687 Object, 'assign',
1688 function assign(target, /*...*/sources) {
1689 var to = ToObject(target);
1690 if (arguments.length < 2) return to;
1691
1692 var sourcesIndex = 1;
1693 while (sourcesIndex < arguments.length) {
1694 var nextSource = arguments[sourcesIndex++];
1695 if (nextSource === undefined || nextSource === null) {
1696 var keys = [];
1697 } else {
1698 var from = ToObject(nextSource);
1699 keys = OwnPropertyKeys(from);
1700 }
1701 for (var keysIndex = 0; keysIndex < keys.length; ++keysIndex) {
1702 var nextKey = keys[keysIndex];
1703 var desc = Object.getOwnPropertyDescriptor(from, nextKey);
1704 if (desc !== undefined && desc.enumerable) {
1705 var propValue = from[nextKey];
1706 to[nextKey] = propValue;
1707 }
1708 }
1709 }
1710 return to;
1711 });
1712
1713 // 19.1.2.2 Object.create ( O [ , Properties ] )
1714 // 19.1.2.3 Object.defineProperties ( O, Properties )
1715 // 19.1.2.4 Object.defineProperty ( O, P, Attributes )
1716 // 19.1.2.5 Object.freeze ( O )
1717 // 19.1.2.6 Object.getOwnPropertyDescriptor ( O, P )
1718
1719 (function() {
1720 var nativeSymbols = (typeof global.Symbol() === 'symbol'),
1721 $getOwnPropertyNames = Object.getOwnPropertyNames,
1722 $keys = Object.keys,
1723 $window_names = (typeof window === 'object' ? $getOwnPropertyNames(window) : []);
1724
1725 function isStringKey(k) { return !symbolForKey(k); }
1726
1727 // 19.1.2.7 Object.getOwnPropertyNames ( O )
1728 define(
1729 Object, 'getOwnPropertyNames',
1730 function getOwnPropertyNames(o) {
1731 if (Object.prototype.toString.call(o) === '[object Window]') {
1732 // Workaround for cross-realm calling by IE itself.
1733 // https://github.com/inexorabletash/polyfill/issues/96
1734 try {
1735 return $getOwnPropertyNames(o).filter(isStringKey);
1736 } catch (_) {
1737 return $window_names.slice();
1738 }
1739 }
1740 return $getOwnPropertyNames(o).filter(isStringKey);
1741 }, !nativeSymbols);
1742
1743 // 19.1.2.8 Object.getOwnPropertySymbols ( O )
1744 define(
1745 Object, 'getOwnPropertySymbols',
1746 function getOwnPropertySymbols(o) {
1747 return $getOwnPropertyNames(o).filter(symbolForKey).map(symbolForKey);
1748 }, !nativeSymbols);
1749
1750 // 19.1.2.14 Object.keys ( O )
1751 define(
1752 Object, 'keys',
1753 function keys(o) {
1754 return $keys(o).filter(isStringKey);
1755 }, !nativeSymbols);
1756 }());
1757
1758 // 19.1.2.9 Object.getPrototypeOf ( O )
1759 // 19.1.2.10 Object.is ( value1, value2 )
1760 define(
1761 Object, 'is',
1762 function is(value1, value2) {
1763 return SameValue(value1, value2);
1764 });
1765
1766 // 19.1.2.11 Object.isExtensible ( O )
1767 // 19.1.2.12 Object.isFrozen ( O )
1768 // 19.1.2.13 Object.isSealed ( O )
1769
1770 // 19.1.2.14 Object.keys ( O )
1771 // see above
1772
1773 // 19.1.2.15 Object.preventExtensions ( O )
1774 // 19.1.2.16 Object.prototype
1775 // 19.1.2.17 Object.seal ( O )
1776
1777 // 19.1.2.18 Object.setPrototypeOf ( O, proto )
1778 define(
1779 Object, 'setPrototypeOf',
1780 function setPrototypeOf(o, proto) {
1781 if (Type(o) !== 'object') throw TypeError();
1782 if (Type(proto) !== 'object' && Type(proto) !== 'null') throw TypeError();
1783 o.__proto__ = proto;
1784 return o;
1785 }
1786 );
1787
1788 // 19.1.3 Properties of the Object Prototype Object
1789 // 19.1.3.1 Object.prototype.constructor
1790 // 19.1.3.2 Object.prototype.hasOwnProperty ( V )
1791 // 19.1.3.3 Object.prototype.isPrototypeOf ( V )
1792 // 19.1.3.4 Object.prototype.propertyIsEnumerable ( V )
1793 // 19.1.3.5 Object.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )
1794 // 19.1.3.6 Object.prototype.toString ( )
1795 hook(Object.prototype, 'toString',
1796 function() {
1797 var o = strict(this);
1798 if (o === Object(o) && $$toStringTag in o) {
1799 return '[object ' + o[$$toStringTag] + ']';
1800 }
1801 return undefined;
1802 });
1803
1804 // 19.1.3.7 Object.prototype.valueOf ( )
1805 // 19.1.4 Properties of Object Instances
1806
1807 // ---------------------------------------
1808 // 19.2 Function Objects
1809 // ---------------------------------------
1810
1811 // 19.2.1 The Function Constructor
1812 // 19.2.1.1 Function ( p1, p2, … , pn, body )
1813 // 19.2.2 Properties of the Function Constructor
1814 // 19.2.2.1 Function.length
1815 // 19.2.2.2 Function.prototype
1816 // 19.2.3 Properties of the Function Prototype Object
1817 // 19.2.3.1 Function.prototype.apply ( thisArg, argArray )
1818 // 19.2.3.2 Function.prototype.bind ( thisArg , ...args)
1819 // 19.2.3.3 Function.prototype.call (thisArg , ...args)
1820 // 19.2.3.4 Function.prototype.constructor
1821 // 19.2.3.5 Function.prototype.toString ( )
1822 // 19.2.3.6 Function.prototype[@@hasInstance] ( V )
1823 // 19.2.4 Function Instances
1824 // 19.2.4.1 length
1825 // 19.2.4.2 name
1826 // 19.2.4.3 prototype
1827
1828 // (No polyfillable changes from ES5)
1829
1830 // ---------------------------------------
1831 // 19.3 Boolean Objects
1832 // ---------------------------------------
1833
1834 // 19.3.1 The Boolean Constructor
1835 // 19.3.1.1 Boolean ( value )
1836 // 19.3.2 Properties of the Boolean Constructor
1837 // 19.3.2.1 Boolean.prototype
1838 // 19.3.3 Properties of the Boolean Prototype Object
1839 // 19.3.3.1 Boolean.prototype.constructor
1840 // 19.3.3.2 Boolean.prototype.toString ( )
1841 // 19.3.3.3 Boolean.prototype.valueOf ( )
1842 // 19.3.4 Properties of Boolean Instances
1843
1844 // (No polyfillable changes from ES5)
1845
1846 // ---------------------------------------
1847 // 19.4 Symbol Objects
1848 // ---------------------------------------
1849
1850 // Moved earlier in this script, so that other polyfills can depend on them.
1851
1852 // 19.4.3.4 Symbol.prototype [ @@toStringTag ]
1853 define(global.Symbol.prototype, global.Symbol.toStringTag, 'Symbol');
1854
1855 // ---------------------------------------
1856 // 19.5 Error Objects
1857 // ---------------------------------------
1858
1859 // 19.5.1 The Error Constructor
1860 // 19.5.1.1 Error ( message )
1861 // 19.5.1.2 new Error( ...argumentsList )
1862 // 19.5.2 Properties of the Error Constructor
1863 // 19.5.2.1 Error.prototype
1864 // 19.5.3 Properties of the Error Prototype Object
1865 // 19.5.3.1 Error.prototype.constructor
1866 // 19.5.3.2 Error.prototype.message
1867 // 19.5.3.3 Error.prototype.name
1868 // 19.5.3.4 Error.prototype.toString ( )
1869 // 19.5.4 Properties of Error Instances
1870 // 19.5.5 Native Error Types Used in This Standard
1871 // 19.5.5.1 EvalError
1872 // 19.5.5.2 RangeError
1873 // 19.5.5.3 ReferenceError
1874 // 19.5.5.4 SyntaxError
1875 // 19.5.5.5 TypeError
1876 // 19.5.5.6 URIError
1877 // 19.5.6 NativeError Object Structure
1878 // 19.5.6.1 NativeError Constructors
1879 // 19.5.6.1.1 NativeError ( message )
1880 // 19.5.6.1.2 new NativeError ( ...argumentsList )
1881 // 19.5.6.2 Properties of the NativeError Constructors
1882 // 19.5.6.2.1 NativeError.prototype
1883 // 19.5.6.3 Properties of the NativeError Prototype Objects
1884 // 19.5.6.4 Properties of NativeError Instances
1885
1886 // (No polyfillable changes from ES5)
1887
1888 // ---------------------------------------
1889 // 20 Numbers and Dates
1890 // ---------------------------------------
1891
1892 // ---------------------------------------
1893 // 20.1 Number Objects
1894 // ---------------------------------------
1895
1896 // 20.1.1 The Number Constructor
1897 // 20.1.1.1 Number ( [ value ] )
1898 // 20.1.1.2 new Number ( ...argumentsList )
1899 // 20.1.2 Properties of the Number Constructor
1900
1901 // 20.1.2.1 Number.EPSILON
1902 define(
1903 Number, 'EPSILON',
1904 (function () {
1905 var next, result;
1906 for (next = 1; 1 + next !== 1; next = next / 2)
1907 result = next;
1908 return result;
1909 }()));
1910
1911 // 20.1.2.2 Number.isFinite ( number )
1912 define(
1913 Number, 'isFinite',
1914 function isFinite(number) {
1915 if (Type(number) !== 'number') return false;
1916 if (number !== number || number === +Infinity || number === -Infinity) return false;
1917 return true;
1918 });
1919
1920 // 20.1.2.3 Number.isInteger ( number )
1921 define(
1922 Number, 'isInteger',
1923 function isInteger(number) {
1924 if (Type(number) !== 'number') return false;
1925 if (number !== number || number === +Infinity || number === -Infinity) return false;
1926 var integer = ToInteger(number);
1927 if (integer !== number) return false;
1928 return true;
1929 });
1930
1931 // 20.1.2.4 Number.isNaN ( number )
1932 define(
1933 Number, 'isNaN',
1934 function isNaN(number) {
1935 if (Type(number) !== 'number') return false;
1936 if (number !== number) return true;
1937 return false;
1938 });
1939
1940 // 20.1.2.5 Number.isSafeInteger ( number )
1941 define(
1942 Number, 'isSafeInteger',
1943 function isSafeInteger(number) {
1944 if (Type(number) !== 'number') return false;
1945 if (number !== number || number === +Infinity || number === -Infinity) return false;
1946 var integer = ToInteger(number);
1947 if (integer !== number) return false;
1948 if (abs(integer) <= (0x20000000000000 - 1)) // 2^53-1
1949 return true;
1950 return false;
1951 });
1952
1953 // 20.1.2.6 Number.MAX_SAFE_INTEGER
1954 define(
1955 Number, 'MAX_SAFE_INTEGER',
1956 9007199254740991); // 2^53-1
1957
1958 // 20.1.2.7 Number.MAX_VALUE
1959
1960 // 20.1.2.8 Number.MIN_SAFE_INTEGER
1961 define(
1962 Number, 'MIN_SAFE_INTEGER',
1963 -9007199254740991); // -2^53+1
1964
1965 // 20.1.2.9 Number.MIN_VALUE
1966 // 20.1.2.10 Number.NaN
1967 // 20.1.2.11 Number.NEGATIVE_INFINITY
1968
1969 // 20.1.2.12 Number.parseFloat ( string )
1970 define(Number, 'parseFloat', $parseFloat);
1971
1972 // 20.1.2.13 Number.parseInt ( string, radix )
1973 define(Number, 'parseInt', $parseInt);
1974
1975 // 20.1.2.14 Number.POSITIVE_INFINITY
1976 // 20.1.2.15 Number.prototype
1977
1978 // 20.1.3 Properties of the Number Prototype Object
1979 // 20.1.3.1 Number.prototype.constructor
1980 // 20.1.3.2 Number.prototype.toExponential ( fractionDigits )
1981 // 20.1.3.3 Number.prototype.toFixed ( fractionDigits )
1982 // 20.1.3.4 Number.prototype.toLocaleString( [ reserved1 [ , reserved2 ] ])
1983 // 20.1.3.5 Number.prototype.toPrecision ( precision )
1984 // 20.1.3.6 Number.prototype.toString ( [ radix ] )
1985 // 20.1.3.7 Number.prototype.valueOf ( )
1986 // 20.1.4 Properties of Number Instances
1987
1988 // ---------------------------------------
1989 // 20.2 The Math Object
1990 // ---------------------------------------
1991
1992 // 20.2.1 Value Properties of the Math Object
1993 // 20.2.1.1 Math.E
1994 // 20.2.1.2 Math.LN10
1995 // 20.2.1.3 Math.LN2
1996 // 20.2.1.4 Math.LOG10E
1997 // 20.2.1.5 Math.LOG2E
1998 // 20.2.1.6 Math.PI
1999 // 20.2.1.7 Math.SQRT1_2
2000 // 20.2.1.8 Math.SQRT2
2001
2002 // 20.2.1.9 Math [ @@toStringTag ]
2003 define(Math, $$toStringTag, 'Math');
2004
2005 // 20.2.2 Function Properties of the Math Object
2006 // 20.2.2.1 Math.abs ( x )
2007 // 20.2.2.2 Math.acos ( x )
2008
2009 // 20.2.2.3 Math.acosh(x)
2010 define(
2011 Math, 'acosh',
2012 function acosh(x) {
2013 x = Number(x);
2014 return log(x + sqrt(x * x - 1));
2015 });
2016
2017 // 20.2.2.4 Math.asin ( x )
2018
2019 // 20.2.2.5 Math.asinh( x )
2020 define(
2021 Math, 'asinh',
2022 function asinh(x) {
2023 x = Number(x);
2024 if (SameValue(x, -0)) {
2025 return x;
2026 }
2027 var s = sqrt(x * x + 1);
2028 return (s === -x) ? log(0) : log(x + s);
2029 });
2030
2031 // 20.2.2.6 Math.atan ( x )
2032
2033 // 20.2.2.7 Math.atanh( x )
2034 define(
2035 Math, 'atanh',
2036 function atanh(x) {
2037 x = Number(x);
2038 return (x === 0) ? x : log((1 + x) / (1 - x)) / 2;
2039 });
2040
2041 // 20.2.2.8 Math.atan2 ( y, x )
2042
2043 // 20.2.2.9 Math.cbrt ( x )
2044 define(
2045 Math, 'cbrt',
2046 function cbrt(x) {
2047 x = Number(x);
2048 if ($isNaN(x/x)) {
2049 return x;
2050 }
2051 var r = pow(abs(x), 1/3);
2052 var t = x/r/r;
2053 return r + (r * (t-r) / (2*r + t));
2054 });
2055
2056 // 20.2.2.10 Math.ceil ( x )
2057
2058 // 20.2.2.11 Math.clz32 ( x )
2059 define(
2060 Math, 'clz32',
2061 function clz32(x) {
2062 function clz8(x) {
2063 return (x & 0xf0) ? (x & 0x80 ? 0 : x & 0x40 ? 1 : x & 0x20 ? 2 : 3) :
2064 (x & 0x08 ? 4 : x & 0x04 ? 5 : x & 0x02 ? 6 : x & 0x01 ? 7 : 8);
2065 }
2066 x = ToUint32(x);
2067 return x & 0xff000000 ? clz8(x >> 24) :
2068 x & 0xff0000 ? clz8(x >> 16) + 8 :
2069 x & 0xff00 ? clz8(x >> 8) + 16 : clz8(x) + 24;
2070 });
2071
2072
2073
2074 // 20.2.2.12 Math.cos ( x )
2075
2076 // 20.2.2.13 Math.cosh ( x )
2077 define(
2078 Math, 'cosh',
2079 function cosh(x) {
2080 x = Number(x);
2081 return (pow(E, x) + pow(E, -x)) / 2;
2082 });
2083
2084 // 20.2.2.14 Math.exp ( x )
2085
2086 // 20.2.2.15 Math.expm1 ( x )
2087 define(
2088 Math, 'expm1',
2089 function expm1(x) {
2090 x = Number(x);
2091 // from: http://www.johndcook.com/cpp_log1p.html
2092 if (SameValue(x, -0)) {
2093 return -0;
2094 } else if (abs(x) < 1e-5) {
2095 return x + 0.5 * x * x; // two terms of Taylor expansion
2096 } else {
2097 return exp(x) - 1;
2098 }
2099 });
2100
2101 // 20.2.2.16 Math.floor ( x )
2102
2103 // 20.2.2.17 Math.fround ( x )
2104 define(
2105 Math, 'fround',
2106 function fround(x) {
2107 if ($isNaN(x)) {
2108 return NaN;
2109 }
2110 if (1/x === +Infinity || 1/x === -Infinity || x === +Infinity || x === -Infinity) {
2111 return x;
2112 }
2113 return (new Float32Array([x]))[0];
2114 });
2115
2116 // 20.2.2.18 Math.hypot ( value1 [, value2 [ ... ] ] )
2117 define(
2118 Math, 'hypot',
2119 function hypot() {
2120 var values = [];
2121 var m = 0, sawNaN = false;
2122 for (var i = 0; i < arguments.length; ++i) {
2123 var n = abs(Number(arguments[i]));
2124 if (n === Infinity) return n;
2125 if (n !== n) sawNaN = true;
2126 if (n > m) m = n;
2127 values[i] = n;
2128 }
2129 if (sawNaN) return NaN;
2130 if (m === 0) return +0;
2131 var sum = +0;
2132 for (i = 0; i < values.length; ++i) {
2133 var r = values[i] / m;
2134 sum = sum + r * r;
2135 }
2136 return m * sqrt(sum);
2137 });
2138
2139 // 20.2.2.19 Math.imul ( x, y )
2140 define(
2141 Math, 'imul',
2142 function imul(x, y) {
2143 var a = ToUint32(x);
2144 var b = ToUint32(y);
2145 // (slow but accurate)
2146 var ah = (a >>> 16) & 0xffff;
2147 var al = a & 0xffff;
2148 var bh = (b >>> 16) & 0xffff;
2149 var bl = b & 0xffff;
2150 return ((al * bl) + (((ah * bl + al * bh) << 16) >>> 0)|0);
2151 }, ('imul' in Math && Math.imul(1, 0x80000000) === 0) // Safari 7 bug
2152 );
2153
2154 // 20.2.2.20 Math.log ( x )
2155
2156 // 20.2.2.21 Math.log1p ( x )
2157 define(
2158 Math, 'log1p',
2159 function log1p(x) {
2160 x = Number(x);
2161 // from: http://www.johndcook.com/cpp_expm1.html
2162 if (x < -1) {
2163 return NaN;
2164 } else if (SameValue(x, -0)) {
2165 return -0;
2166 } else if (abs(x) > 1e-4) {
2167 return log(1 + x);
2168 } else {
2169 return (-0.5 * x + 1) * x;
2170 }
2171 });
2172
2173 // 20.2.2.22 Math.log10 ( x )
2174 define(
2175 Math, 'log10',
2176 function log10(x) {
2177 x = Number(x);
2178 return log(x) * LOG10E;
2179 });
2180
2181 // 20.2.2.23 Math.log2 ( x )
2182 define(
2183 Math, 'log2',
2184 function log2(x) {
2185 x = Number(x);
2186 return log(x) * LOG2E;
2187 });
2188
2189 // 20.2.2.24 Math.max ( value1, value2 , ...values )
2190 // 20.2.2.25 Math.min ( value1, value2 , ...values )
2191 // 20.2.2.26 Math.pow ( x, y )
2192 // 20.2.2.27 Math.random ( )
2193 // 20.2.2.28 Math.round ( x )
2194
2195 // 20.2.2.29 Math.sign(x)
2196 define(
2197 Math, 'sign',
2198 function sign(x) {
2199 x = Number(x);
2200 return x < 0 ? -1 : x > 0 ? 1 : x;
2201 });
2202
2203 // 20.2.2.30 Math.sin ( x )
2204
2205 // 20.2.2.31 Math.sinh( x )
2206 define(
2207 Math, 'sinh',
2208 function sinh(x) {
2209 x = Number(x);
2210 return SameValue(x, -0) ? x : (pow(E, x) - pow(E, -x)) / 2;
2211 });
2212
2213 // 20.2.2.32 Math.sqrt ( x )
2214 // 20.2.2.33 Math.tan ( x )
2215
2216 // 20.2.2.34 Math.tanh ( x )
2217 define(
2218 Math, 'tanh',
2219 function tanh(x) {
2220 x = Number(x);
2221 var n = pow(E, 2 * x) - 1,
2222 d = pow(E, 2 * x) + 1;
2223 if (SameValue(x, -0))
2224 return x;
2225 return (n === d) ? 1 : n / d; // Handle Infinity/Infinity
2226 });
2227
2228 // 20.2.2.35 Math.trunc ( x )
2229 define(
2230 Math, 'trunc',
2231 function trunc(x) {
2232 x = Number(x);
2233 return $isNaN(x) ? NaN :
2234 x < 0 ? ceil(x) : floor(x);
2235 });
2236
2237 // ---------------------------------------
2238 // 20.3 Date Objects
2239 // ---------------------------------------
2240
2241 // 20.3.1 Overview of Date Objects and Definitions of Abstract Operations
2242 // 20.3.1.1 Time Values and Time Range
2243 // 20.3.1.2 Day Number and Time within Day
2244 // 20.3.1.3 Year Number
2245 // 20.3.1.4 Month Number
2246 // 20.3.1.5 Date Number
2247 // 20.3.1.6 Week Day
2248 // 20.3.1.7 Local Time Zone Adjustment
2249 // 20.3.1.8 Daylight Saving Time Adjustment
2250 // 20.3.1.9 Local Time
2251 // 20.3.1.10 Hours, Minutes, Second, and Milliseconds
2252 // 20.3.1.11 MakeTime (hour, min, sec, ms)
2253 // 20.3.1.12 MakeDay (year, month, date)
2254 // 20.3.1.13 MakeDate (day, time)
2255 // 20.3.1.14 TimeClip (time)
2256 // 20.3.1.15 Date Time String Format
2257 // 20.3.1.15.1 Extended years
2258 // 20.3.2 The Date Constructor
2259 // 20.3.2.1 Date ( year, month [, date [ , hours [ , minutes [ , seconds [ , ms ] ] ] ] ] )
2260 // 20.3.2.2 Date ( value )
2261 // 20.3.2.3 Date ( )
2262 // 20.3.3 Properties of the Date Constructor
2263 // 20.3.3.1 Date.now ( )
2264 // 20.3.3.2 Date.parse (string)
2265 // 20.3.3.3 Date.prototype
2266 // 20.3.3.4 Date.UTC ( year, month [ , date [ , hours [ , minutes [ , seconds [ , ms ] ] ] ] ] )
2267 // 20.3.4 Properties of the Date Prototype Object
2268 // 20.3.4.1 Date.prototype.constructor
2269 // 20.3.4.2 Date.prototype.getDate ( )
2270 // 20.3.4.3 Date.prototype.getDay ( )
2271 // 20.3.4.4 Date.prototype.getFullYear ( )
2272 // 20.3.4.5 Date.prototype.getHours ( )
2273 // 20.3.4.6 Date.prototype.getMilliseconds ( )
2274 // 20.3.4.7 Date.prototype.getMinutes ( )
2275 // 20.3.4.8 Date.prototype.getMonth ( )
2276 // 20.3.4.9 Date.prototype.getSeconds ( )
2277 // 20.3.4.10 Date.prototype.getTime ( )
2278 // 20.3.4.11 Date.prototype.getTimezoneOffset ( )
2279 // 20.3.4.12 Date.prototype.getUTCDate ( )
2280 // 20.3.4.13 Date.prototype.getUTCDay ( )
2281 // 20.3.4.14 Date.prototype.getUTCFullYear ( )
2282 // 20.3.4.15 Date.prototype.getUTCHours ( )
2283 // 20.3.4.16 Date.prototype.getUTCMilliseconds ( )
2284 // 20.3.4.17 Date.prototype.getUTCMinutes ( )
2285 // 20.3.4.18 Date.prototype.getUTCMonth ( )
2286 // 20.3.4.19 Date.prototype.getUTCSeconds ( )
2287 // 20.3.4.20 Date.prototype.setDate ( date )
2288 // 20.3.4.21 Date.prototype.setFullYear ( year [ , month [ , date ] ] )
2289 // 20.3.4.22 Date.prototype.setHours ( hour [ , min [ , sec [ , ms ] ] ] )
2290 // 20.3.4.23 Date.prototype.setMilliseconds ( ms )
2291 // 20.3.4.24 Date.prototype.setMinutes ( min [ , sec [ , ms ] ] )
2292 // 20.3.4.25 Date.prototype.setMonth ( month [ , date ] )
2293 // 20.3.4.26 Date.prototype.setSeconds ( sec [ , ms ] )
2294 // 20.3.4.27 Date.prototype.setTime ( time )
2295 // 20.3.4.28 Date.prototype.setUTCDate ( date )
2296 // 20.3.4.29 Date.prototype.setUTCFullYear ( year [ , month [ , date ] ] )
2297 // 20.3.4.30 Date.prototype.setUTCHours ( hour [ , min [ , sec [ , ms ] ] ] )
2298 // 20.3.4.31 Date.prototype.setUTCMilliseconds ( ms )
2299 // 20.3.4.32 Date.prototype.setUTCMinutes ( min [ , sec [, ms ] ] )
2300 // 20.3.4.33 Date.prototype.setUTCMonth ( month [ , date ] )
2301 // 20.3.4.34 Date.prototype.setUTCSeconds ( sec [ , ms ] )
2302 // 20.3.4.35 Date.prototype.toDateString ( )
2303 // 20.3.4.36 Date.prototype.toISOString ( )
2304 // 20.3.4.37 Date.prototype.toJSON ( key )
2305 // 20.3.4.38 Date.prototype.toLocaleDateString ( [ reserved1 [ , reserved2 ] ] )
2306 // 20.3.4.39 Date.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )
2307 // 20.3.4.40 Date.prototype.toLocaleTimeString ( [ reserved1 [ , reserved2 ] ] )
2308 // 20.3.4.41 Date.prototype.toString ( )
2309 // 20.3.4.42 Date.prototype.toTimeString ( )
2310 // 20.3.4.43 Date.prototype.toUTCString ( )
2311 // 20.3.4.44 Date.prototype.valueOf ( )
2312 // 20.3.4.45 Date.prototype [ @@toPrimitive ] ( hint )
2313 // 20.3.5 Properties of Date Instances
2314
2315 // (No polyfillable changes from ES5)
2316
2317 // ---------------------------------------
2318 // 21 Text Processing
2319 // ---------------------------------------
2320
2321 var string_regexp_dispatch = (function() {
2322 var faux = {}, secret = Symbol();
2323 faux[Symbol.match] = function() { return secret; };
2324 return ("").match(faux) === secret;
2325 }());
2326
2327 // 21.1 String Objects
2328 // 21.1.1 The String Constructor
2329 // 21.1.1.1 String ( value )
2330 // 21.1.2 Properties of the String Constructor
2331 // 21.1.2.1 String.fromCharCode ( ...codeUnits )
2332
2333 // 21.1.2.2 String.fromCodePoint ( ...codePoints )
2334 define(
2335 String, 'fromCodePoint',
2336 function fromCodePoint(/*...codePoints*/) {
2337 var codePoints = arguments,
2338 length = codePoints.length,
2339 elements = [],
2340 nextIndex = 0;
2341 while (nextIndex < length) {
2342 var next = codePoints[nextIndex];
2343 var nextCP = Number(next);
2344 if (!SameValue(nextCP, ToInteger(nextCP)) ||
2345 nextCP < 0 || nextCP > 0x10FFFF) {
2346 throw RangeError('Invalid code point ' + nextCP);
2347 }
2348 if (nextCP < 0x10000) {
2349 elements.push(String.fromCharCode(nextCP));
2350 } else {
2351 nextCP -= 0x10000;
2352 elements.push(String.fromCharCode((nextCP >> 10) + 0xD800));
2353 elements.push(String.fromCharCode((nextCP % 0x400) + 0xDC00));
2354 }
2355 nextIndex += 1;
2356 }
2357 return elements.join('');
2358 });
2359
2360 // 21.1.2.3 String.prototype
2361
2362 // 21.1.2.4 String.raw ( template , ...substitutions )
2363 define(
2364 String, 'raw',
2365 function raw(template /*, ...substitutions*/) {
2366 var substitutions = [].slice.call(arguments, 1);
2367
2368 var cooked = Object(template);
2369 var rawValue = cooked['raw'];
2370 var raw = Object(rawValue);
2371 var len = raw['length'];
2372 var literalSegments = ToLength(len);
2373 if (literalSegments <= 0) return '';
2374 var stringElements = [];
2375 var nextIndex = 0;
2376 while (true) {
2377 var next = raw[nextIndex];
2378 var nextSeg = String(next);
2379 stringElements.push(nextSeg);
2380 if (nextIndex + 1 === literalSegments)
2381 return stringElements.join('');
2382 next = substitutions[nextIndex];
2383 var nextSub = String(next);
2384 stringElements.push(nextSub);
2385 nextIndex = nextIndex + 1;
2386 }
2387 });
2388
2389 // See https://githib.com/inexorabletash/uate for a more useful version.
2390
2391 // 21.1.3 Properties of the String Prototype Object
2392 // 21.1.3.1 String.prototype.charAt ( pos )
2393 // 21.1.3.2 String.prototype.charCodeAt ( pos )
2394
2395 // 21.1.3.3 String.prototype.codePointAt ( pos )
2396 define(
2397 String.prototype, 'codePointAt',
2398 function codePointAt(pos) {
2399 var o = strict(this);
2400 var s = String(o);
2401 var position = ToInteger(pos);
2402 var size = s.length;
2403 if (position < 0 || position >= size) return undefined;
2404 var first = s.charCodeAt(position);
2405 if (first < 0xD800 || first > 0xDBFF || position + 1 === size) return first;
2406 var second = s.charCodeAt(position + 1);
2407 if (second < 0xDC00 || second > 0xDFFF) return first;
2408 return ((first - 0xD800) * 1024) + (second - 0xDC00) + 0x10000;
2409 });
2410
2411 // 21.1.3.4 String.prototype.concat ( ...args )
2412 // 21.1.3.5 String.prototype.constructor
2413
2414 // 21.1.3.6 String.prototype.endsWith ( searchString [ , endPosition] )
2415 define(
2416 String.prototype, 'endsWith',
2417 function endsWith(searchString) {
2418 var endPosition = arguments[1];
2419
2420 var o = strict(this);
2421 var s = String(o);
2422 var searchStr = String(searchString);
2423 var len = s.length;
2424 var pos = (endPosition === undefined) ? len : ToInteger(endPosition);
2425 var end = min(max(pos, 0), len);
2426 var searchLength = searchStr.length;
2427 var start = end - searchLength;
2428 if (start < 0) return false;
2429 if (s.substring(start, start + searchLength) === searchStr) return true;
2430 return false;
2431 });
2432
2433 // 21.1.3.7 String.prototype.includes ( searchString [ , position ] )
2434 define(
2435 String.prototype, 'includes',
2436 function includes(searchString) {
2437 var position = arguments[1];
2438
2439 var o = strict(this);
2440 var s = String(o);
2441 var searchStr = String(searchString);
2442 var pos = ToInteger(position);
2443 var len = s.length;
2444 var start = min(max(pos, 0), len);
2445 return s.indexOf(searchStr, start) !== -1;
2446 });
2447
2448 // 21.1.3.8 String.prototype.indexOf ( searchString [ , position ] )
2449 // 21.1.3.9 String.prototype.lastIndexOf ( searchString [ , position ] )
2450 // 21.1.3.10 String.prototype.localeCompare ( that [, reserved1 [ , reserved2 ] ] )
2451 // 21.1.3.11 String.prototype.match ( regexp )
2452 define(
2453 String.prototype, 'match',
2454 function match(regexp) {
2455 var o = strict(this);
2456 var s = String(o);
2457 if (HasProperty(regexp, $$match)) var rx = regexp;
2458 else rx = new RegExp(regexp);
2459 return rx[$$match](s);
2460 }, !string_regexp_dispatch);
2461
2462 // 21.1.3.12 String.prototype.normalize ( [ form ] )
2463
2464 // Not practical due to table sizes; if needed, pull in:
2465 // https://github.com/walling/unorm/
2466
2467 // 21.1.3.13 String.prototype.repeat ( count )
2468 define(
2469 String.prototype, 'repeat',
2470 function repeat(count) {
2471 var o = strict(this);
2472 var s = String(o);
2473 var n = ToInteger(count);
2474 if (n < 0) throw RangeError();
2475 if (n === Infinity) throw RangeError();
2476 var t = new Array(n + 1).join(s);
2477 return t;
2478 });
2479
2480 // 21.1.3.14 String.prototype.replace (searchValue, replaceValue )
2481 define(
2482 String.prototype, 'replace',
2483 function replace(searchValue, replaceValue) {
2484 var o = strict(this);
2485 if (HasProperty(searchValue, $$replace))
2486 return searchValue[$$replace](o, replaceValue);
2487 return orig_replace.call(o, searchValue, replaceValue);
2488 }, !string_regexp_dispatch);
2489
2490 // 21.1.3.15 String.prototype.search ( regexp )
2491 define(
2492 String.prototype, 'search',
2493 function search(regexp) {
2494 var o = strict(this);
2495 var string = String(o);
2496 if (HasProperty(regexp, $$search)) var rx = regexp;
2497 else rx = new RegExp(regexp);
2498 return rx[$$search](string);
2499 }, !string_regexp_dispatch);
2500
2501 // 21.1.3.16 String.prototype.slice ( start, end )
2502 // 21.1.3.17 String.prototype.split ( separator, limit )
2503 define(
2504 String.prototype, 'split',
2505 function split(separator, limit) {
2506 var o = strict(this);
2507 if (HasProperty(separator, $$split))
2508 return separator[$$split](o, limit);
2509 return orig_split.call(o, separator, limit);
2510 }, !string_regexp_dispatch);
2511
2512 // 21.1.3.18 String.prototype.startsWith ( searchString [, position ] )
2513 define(
2514 String.prototype, 'startsWith',
2515 function startsWith(searchString) {
2516 var position = arguments[1];
2517
2518 var o = strict(this);
2519 var s = String(o);
2520 var searchStr = String(searchString);
2521 var pos = ToInteger(position);
2522 var len = s.length;
2523 var start = min(max(pos, 0), len);
2524 var searchLength = searchStr.length;
2525 if (searchLength + start > len) return false;
2526 if (s.substring(start, start + searchLength) === searchStr) return true;
2527 return false;
2528 });
2529
2530 // 21.1.3.19 String.prototype.substring ( start, end )
2531 // 21.1.3.20 String.prototype.toLocaleLowerCase ( [ reserved1 [ , reserved2 ] ] )
2532 // 21.1.3.21 String.prototype.toLocaleUpperCase ([ reserved1 [ , reserved2 ] ] )
2533 // 21.1.3.22 String.prototype.toLowerCase ( )
2534 // 21.1.3.23 String.prototype.toString ( )
2535 // 21.1.3.24 String.prototype.toUpperCase ( )
2536 // 21.1.3.25 String.prototype.trim ( )
2537 // 21.1.3.26 String.prototype.valueOf ( )
2538
2539 // 21.1.3.27 String.prototype [ @@iterator ]( )
2540 define(
2541 String.prototype, $$iterator,
2542 function entries() {
2543 return CreateStringIterator(this, 'value');
2544 });
2545
2546 // 21.1.4 Properties of String Instances
2547 // 21.1.4.1 length
2548
2549 // 21.1.5 String Iterator Objects
2550 /** @constructor */
2551 function StringIterator() {}
2552
2553 // 21.1.5.1 CreateStringIterator Abstract Operation
2554 function CreateStringIterator(string, kind) {
2555 var s = String(string);
2556 var iterator = new StringIterator;
2557 set_internal(iterator, '[[IteratedString]]', s);
2558 set_internal(iterator, '[[StringIteratorNextIndex]]', 0);
2559 set_internal(iterator, '[[StringIterationKind]]', kind);
2560 return iterator;
2561 }
2562
2563 // 21.1.5.2 The %StringIteratorPrototype% Object
2564 var $StringIteratorPrototype$ = Object.create($IteratorPrototype$);
2565 StringIterator.prototype = $StringIteratorPrototype$;
2566
2567 // 21.1.5.2.1 %StringIteratorPrototype%.next ( )
2568 define(
2569 $StringIteratorPrototype$, 'next',
2570 function next() {
2571 var o = ToObject(this);
2572 var s = String(o['[[IteratedString]]']),
2573 index = o['[[StringIteratorNextIndex]]'],
2574 len = s.length;
2575 if (index >= len) {
2576 set_internal(o, '[[StringIteratorNextIndex]]', Infinity);
2577 return CreateIterResultObject(undefined, true);
2578 }
2579 var cp = s.codePointAt(index);
2580 set_internal(o, '[[StringIteratorNextIndex]]', index + (cp > 0xFFFF ? 2 : 1));
2581 return CreateIterResultObject(String.fromCodePoint(cp), false);
2582 });
2583
2584 // 21.1.5.2.2 %StringIteratorPrototype% [ @@toStringTag ]
2585 define($StringIteratorPrototype$, $$toStringTag, 'String Iterator');
2586
2587 // 21.1.5.3 Properties of String Iterator Instances
2588
2589 // ---------------------------------------
2590 // 21.2 RegExp (Regular Expression) Objects
2591 // ---------------------------------------
2592
2593 // 21.2.1 Patterns
2594 // 21.2.2 Pattern Semantics
2595 // 21.2.2.1 Notation
2596 // 21.2.2.2 Pattern
2597 // 21.2.2.3 Disjunction
2598 // 21.2.2.4 Alternative
2599 // 21.2.2.5 Term
2600 // 21.2.2.6 Assertion
2601 // 21.2.2.7 Quantifier
2602 // 21.2.2.8 Atom
2603 // 21.2.2.9 AtomEscape
2604 // 21.2.2.10 CharacterEscape
2605 // 21.2.2.11 DecimalEscape
2606 // 21.2.2.12 CharacterClassEscape
2607 // 21.2.2.13 CharacterClass
2608 // 21.2.2.14 ClassRanges
2609 // 21.2.2.15 NonemptyClassRanges
2610 // 21.2.2.16 NonemptyClassRangesNoDash
2611 // 21.2.2.17 ClassAtom
2612 // 21.2.2.18 ClassAtomNoDash
2613 // 21.2.2.19 ClassEscape
2614 // 21.2.3 The RegExp Constructor
2615 // 21.2.3.1 RegExp ( pattern, flags )
2616 // 21.2.3.2 new RegExp( ...argumentsList )
2617 // 21.2.3.3 Abstract Operations for the RegExp Constructor
2618 // 21.2.4 Properties of the RegExp Constructor
2619 // 21.2.4.1 RegExp.prototype
2620 // 21.2.5 Properties of the RegExp Prototype Object
2621 // 21.2.5.1 RegExp.prototype.constructor
2622 // 21.2.5.2 RegExp.prototype.exec ( string )
2623
2624 // 21.2.5.3 get RegExp.prototype.flags
2625 if (!('flags' in RegExp.prototype)) {
2626 Object.defineProperty(
2627 RegExp.prototype, 'flags', {
2628 get: function() {
2629 var s = String(this);
2630 return s.substring(s.lastIndexOf('/') + 1);
2631 }
2632 });
2633 }
2634
2635 // 21.2.5.4 get RegExp.prototype.global
2636 // 21.2.5.5 get RegExp.prototype.ignoreCase
2637
2638 // 21.2.5.6 RegExp.prototype [ @@match ] ( string )
2639 define(RegExp.prototype, $$match, function(string) {
2640 var o = strict(this);
2641 return orig_match.call(string, o);
2642 });
2643
2644 // 21.2.5.7 get RegExp.prototype.multiline
2645
2646 // 21.2.5.8 RegExp.prototype [ @@replace ] ( string, replaceValue )
2647 define(RegExp.prototype, $$replace, function(string, replaceValue) {
2648 var o = strict(this);
2649 return orig_replace.call(string, o, replaceValue);
2650 });
2651
2652 // 21.2.5.9 RegExp.prototype [ @@search ] ( string )
2653 define(RegExp.prototype, $$search, function(string) {
2654 var o = strict(this);
2655 return orig_search.call(string, o);
2656 });
2657
2658 // 21.2.5.10 get RegExp.prototype.source
2659
2660 // 21.2.5.11 RegExp.prototype [ @@split ] ( string, limit )
2661 define(RegExp.prototype, $$split, function(string, limit) {
2662 var o = strict(this);
2663 return orig_split.call(string, o, limit);
2664 });
2665
2666 // 21.2.5.12 get RegExp.prototype.sticky
2667 // 21.2.5.13 RegExp.prototype.test( S )
2668 // 21.2.5.14 RegExp.prototype.toString ( )
2669 // 21.2.5.15 get RegExp.prototype.unicode
2670
2671 // 21.2.6 Properties of RegExp Instances
2672 // 21.2.6.1 lastIndex
2673
2674 // (No polyfillable changes from ES5)
2675
2676 // ---------------------------------------
2677 // 22 Indexed Collections
2678 // ---------------------------------------
2679
2680 // ---------------------------------------
2681 // 22.1 Array Objects
2682 // ---------------------------------------
2683
2684 // 22.1.1 The Array Constructor
2685 // 22.1.1.1 Array ( )
2686 // 22.1.1.2 Array (len)
2687 // 22.1.1.3 Array (...items )
2688
2689 // 22.1.2 Properties of the Array Constructor
2690
2691 // 22.1.2.1 Array.from ( items [ , mapfn [ , thisArg ] ] )
2692 define(
2693 Array, 'from',
2694 function from(items) {
2695 var mapfn = arguments[1];
2696 var thisArg = arguments[2];
2697
2698 var c = strict(this);
2699 if (mapfn === undefined) {
2700 var mapping = false;
2701 } else {
2702 if (!IsCallable(mapfn)) throw TypeError();
2703 var t = thisArg;
2704 mapping = true;
2705 }
2706 var usingIterator = GetMethod(items, $$iterator);
2707 if (usingIterator !== undefined) {
2708 if (IsConstructor(c)) {
2709 var a = new c();
2710 } else {
2711 a = new Array(0);
2712 }
2713 var iterator = GetIterator(items, usingIterator);
2714 var k = 0;
2715 while (true) {
2716 var next = IteratorStep(iterator);
2717 if (next === false) {
2718 a.length = k;
2719 return a;
2720 }
2721 var nextValue = IteratorValue(next);
2722 if (mapping)
2723 var mappedValue = mapfn.call(t, nextValue);
2724 else
2725 mappedValue = nextValue;
2726 a[k] = mappedValue;
2727 k += 1;
2728 }
2729 }
2730 var arrayLike = ToObject(items);
2731 var lenValue = arrayLike.length;
2732 var len = ToLength(lenValue);
2733 if (IsConstructor(c)) {
2734 a = new c(len);
2735 } else {
2736 a = new Array(len);
2737 }
2738 k = 0;
2739 while (k < len) {
2740 var kValue = arrayLike[k];
2741 if (mapping)
2742 mappedValue = mapfn.call(t, kValue, k);
2743 else
2744 mappedValue = kValue;
2745 a[k] = mappedValue;
2746 k += 1;
2747 }
2748 a.length = len;
2749 return a;
2750 });
2751
2752 // 22.1.2.2 Array.isArray ( arg )
2753
2754 // 22.1.2.3 Array.of ( ...items )
2755 define(
2756 Array, 'of',
2757 function of() {
2758 var items = arguments;
2759
2760 var lenValue = items.length;
2761 var len = ToUint32(lenValue);
2762 var c = strict(this), a;
2763 if (IsConstructor(c)) {
2764 a = new c(len);
2765 a = ToObject(a);
2766 } else {
2767 a = new Array(len);
2768 }
2769 var k = 0;
2770 while (k < len) {
2771 a[k] = items[k];
2772 k += 1;
2773 }
2774 a.length = len;
2775 return a;
2776 });
2777
2778 // 22.1.2.4 Array.prototype
2779 // 22.1.2.5 get Array [ @@species ]
2780 // 22.1.3 Properties of the Array Prototype Object
2781 // 22.1.3.1 Array.prototype.concat ( ...arguments )
2782 // 22.1.3.1.1 Runtime Semantics: IsConcatSpreadable ( O )
2783 // 22.1.3.2 Array.prototype.constructor
2784 // 22.1.3.3 Array.prototype.copyWithin (target, start [ , end ] )
2785 define(
2786 Array.prototype, 'copyWithin',
2787 function copyWithin(target, start/*, end*/) {
2788 var end = arguments[2];
2789
2790 var o = ToObject(this);
2791 var lenVal = o.length;
2792 var len = ToLength(lenVal);
2793 len = max(len, 0);
2794 var relativeTarget = ToInteger(target);
2795 var to;
2796 if (relativeTarget < 0)
2797 to = max(len + relativeTarget, 0);
2798 else
2799 to = min(relativeTarget, len);
2800 var relativeStart = ToInteger(start);
2801 var from;
2802 if (relativeStart < 0)
2803 from = max(len + relativeStart, 0);
2804 else
2805 from = min(relativeStart, len);
2806 var relativeEnd;
2807 if (end === undefined)
2808 relativeEnd = len;
2809 else
2810 relativeEnd = ToInteger(end);
2811 var final;
2812 if (relativeEnd < 0)
2813 final = max(len + relativeEnd, 0);
2814 else
2815 final = min(relativeEnd, len);
2816 var count = min(final - from, len - to);
2817 var direction;
2818 if (from < to && to < from + count) {
2819 direction = -1;
2820 from = from + count - 1;
2821 to = to + count - 1;
2822 } else {
2823 direction = 1;
2824 }
2825 while (count > 0) {
2826 var fromKey = String(from);
2827 var toKey = String(to);
2828 var fromPresent = HasProperty(o, fromKey);
2829 if (fromPresent) {
2830 var fromVal = o[fromKey];
2831 o[toKey] = fromVal;
2832 } else {
2833 delete o[toKey];
2834 }
2835 from = from + direction;
2836 to = to + direction;
2837 count = count - 1;
2838 }
2839 return o;
2840 });
2841
2842 // 22.1.3.4 Array.prototype.entries ( )
2843 var nativeArrayIteratorMethods =
2844 ('entries' in Array.prototype && 'next' in [].entries());
2845
2846 define(
2847 Array.prototype, 'entries',
2848 function entries() {
2849 return CreateArrayIterator(this, 'key+value');
2850 }, !nativeArrayIteratorMethods);
2851
2852 // 22.1.3.5 Array.prototype.every ( callbackfn [ , thisArg] )
2853
2854 // 22.1.3.6 Array.prototype.fill (value [ , start [ , end ] ] )
2855 define(
2856 Array.prototype, 'fill',
2857 function fill(value/*, start, end*/) {
2858 var start = arguments[1],
2859 end = arguments[2];
2860
2861 var o = ToObject(this);
2862 var lenVal = o.length;
2863 var len = ToLength(lenVal);
2864 len = max(len, 0);
2865 var relativeStart = ToInteger(start);
2866 var k;
2867 if (relativeStart < 0)
2868 k = max((len + relativeStart), 0);
2869 else
2870 k = min(relativeStart, len);
2871 var relativeEnd;
2872 if (end === undefined)
2873 relativeEnd = len;
2874 else
2875 relativeEnd = ToInteger(end);
2876 var final;
2877 if (relativeEnd < 0)
2878 final = max((len + relativeEnd), 0);
2879 else
2880 final = min(relativeEnd, len);
2881 while (k < final) {
2882 var pk = String(k);
2883 o[pk] = value;
2884 k += 1;
2885 }
2886 return o;
2887 });
2888
2889 // 22.1.3.7 Array.prototype.filter ( callbackfn [ , thisArg ] )
2890
2891 // 22.1.3.8 Array.prototype.find ( predicate [ , thisArg ] )
2892 define(
2893 Array.prototype, 'find',
2894 function find(predicate) {
2895 var o = ToObject(this);
2896 var lenValue = o.length;
2897 var len = ToInteger(lenValue);
2898 if (!IsCallable(predicate)) throw TypeError();
2899 var t = arguments.length > 1 ? arguments[1] : undefined;
2900 var k = 0;
2901 while (k < len) {
2902 var pk = String(k);
2903 var kPresent = HasProperty(o, pk);
2904 if (kPresent) {
2905 var kValue = o[pk];
2906 var testResult = predicate.call(t, kValue, k, o);
2907 if (Boolean(testResult)) {
2908 return kValue;
2909 }
2910 }
2911 ++k;
2912 }
2913 return undefined;
2914 });
2915
2916 // 22.1.3.9 Array.prototype.findIndex ( predicate [ , thisArg ] )
2917 define(
2918 Array.prototype, 'findIndex',
2919 function findIndex(predicate) {
2920 var o = ToObject(this);
2921 var lenValue = o.length;
2922 var len = ToLength(lenValue);
2923 if (!IsCallable(predicate)) throw TypeError();
2924 var t = arguments.length > 1 ? arguments[1] : undefined;
2925 var k = 0;
2926 while (k < len) {
2927 var pk = String(k);
2928 var kPresent = HasProperty(o, pk);
2929 if (kPresent) {
2930 var kValue = o[pk];
2931 var testResult = predicate.call(t, kValue, k, o);
2932 if (Boolean(testResult)) {
2933 return k;
2934 }
2935 }
2936 ++k;
2937 }
2938 return -1;
2939 });
2940
2941 // 22.1.3.10 Array.prototype.forEach ( callbackfn [ , thisArg ] )
2942 // 22.1.3.11 Array.prototype.indexOf ( searchElement [ , fromIndex ] )
2943 // 22.1.3.12 Array.prototype.join (separator)
2944
2945 // 22.1.3.13 Array.prototype.keys ( )
2946 define(
2947 Array.prototype, 'keys',
2948 function keys() {
2949 return CreateArrayIterator(this, 'key');
2950 }, !nativeArrayIteratorMethods);
2951
2952 // 22.1.3.14 Array.prototype.lastIndexOf ( searchElement [ , fromIndex ] )
2953 // 22.1.3.15 Array.prototype.map ( callbackfn [ , thisArg ] )
2954 // 22.1.3.16 Array.prototype.pop ( )
2955 // 22.1.3.17 Array.prototype.push ( ...items )
2956 // 22.1.3.18 Array.prototype.reduce ( callbackfn [ , initialValue ] )
2957 // 22.1.3.19 Array.prototype.reduceRight ( callbackfn [ , initialValue ] )
2958 // 22.1.3.20 Array.prototype.reverse ( )
2959 // 22.1.3.21 Array.prototype.shift ( )
2960 // 22.1.3.22 Array.prototype.slice (start, end)
2961 // 22.1.3.23 Array.prototype.some ( callbackfn [ , thisArg ] )
2962 // 22.1.3.24 Array.prototype.sort (comparefn)
2963 // 22.1.3.25 Array.prototype.splice (start, deleteCount , ...items )
2964 // 22.1.3.26 Array.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )
2965 // 22.1.3.27 Array.prototype.toString ( )
2966 // 22.1.3.28 Array.prototype.unshift ( ...items )
2967
2968 // 22.1.3.29 Array.prototype.values ( )
2969 define(
2970 Array.prototype, 'values',
2971 function values() {
2972 return CreateArrayIterator(this, 'value');
2973 }, !nativeArrayIteratorMethods);
2974
2975 // 22.1.3.30 Array.prototype [ @@iterator ] ( )
2976 define(
2977 Array.prototype, $$iterator,
2978 Array.prototype.values
2979 );
2980
2981 // 22.1.3.31 Array.prototype [ @@unscopables ]
2982 // 22.1.4 Properties of Array Instances
2983 // 22.1.4.1 length
2984
2985 // 22.1.5 Array Iterator Objects
2986 function ArrayIterator() {}
2987
2988 // 22.1.5.1 CreateArrayIterator Abstract Operation
2989 function CreateArrayIterator(array, kind) {
2990 var o = ToObject(array);
2991 var iterator = new ArrayIterator;
2992 set_internal(iterator, '[[IteratedObject]]', o);
2993 set_internal(iterator, '[[ArrayIteratorNextIndex]]', 0);
2994 set_internal(iterator, '[[ArrayIterationKind]]', kind);
2995 return iterator;
2996 }
2997
2998 // 22.1.5.2 The %ArrayIteratorPrototype% Object
2999 var $ArrayIteratorPrototype$ = Object.create($IteratorPrototype$);
3000 ArrayIterator.prototype = $ArrayIteratorPrototype$;
3001
3002 // 22.1.5.2.1 %ArrayIteratorPrototype%. next( )
3003 define(
3004 $ArrayIteratorPrototype$, 'next',
3005 function next() {
3006 var o = strict(this);
3007 if (Type(o) !== 'object') throw TypeError();
3008 var a = o['[[IteratedObject]]'],
3009 index = o['[[ArrayIteratorNextIndex]]'],
3010 itemKind = o['[[ArrayIterationKind]]'],
3011 lenValue = a.length,
3012 len = ToUint32(lenValue),
3013 elementKey,
3014 elementValue;
3015 if (itemKind.indexOf('sparse') !== -1) {
3016 var found = false;
3017 while (!found && index < len) {
3018 elementKey = String(index);
3019 found = HasProperty(a, elementKey);
3020 if (!found) {
3021 index += 1;
3022 }
3023 }
3024 }
3025 if (index >= len) {
3026 set_internal(o, '[[ArrayIteratorNextIndex]]', Infinity);
3027 return CreateIterResultObject(undefined, true);
3028 }
3029 elementKey = index;
3030 set_internal(o, '[[ArrayIteratorNextIndex]]', index + 1);
3031 if (itemKind.indexOf('value') !== -1)
3032 elementValue = a[elementKey];
3033 if (itemKind.indexOf('key+value') !== -1)
3034 return CreateIterResultObject([elementKey, elementValue], false);
3035 if (itemKind.indexOf('key') !== -1)
3036 return CreateIterResultObject(elementKey, false);
3037 if (itemKind === 'value')
3038 return CreateIterResultObject(elementValue, false);
3039 throw Error('Internal error');
3040 });
3041
3042 // 22.1.5.2.2 %ArrayIteratorPrototype% [ @@toStringTag ]
3043 define($ArrayIteratorPrototype$, $$toStringTag, 'Array Iterator');
3044
3045 // 22.1.5.3 Properties of Array Iterator Instances
3046
3047
3048 // ---------------------------------------
3049 // 22.2 TypedArray Objects
3050 // ---------------------------------------
3051
3052 // See typedarray.js for TypedArray polyfill
3053
3054 ['Int8Array', 'Uint8Array', 'Uint8ClampedArray',
3055 'Int16Array', 'Uint16Array',
3056 'Int32Array', 'Uint32Array',
3057 'Float32Array', 'Float64Array'].forEach(function ($TypedArrayName$) {
3058 if (!($TypedArrayName$ in global))
3059 return;
3060 var $TypedArray$ = global[$TypedArrayName$];
3061
3062 // 22.2.1 The %TypedArray% Intrinsic Object
3063 // 22.2.1.1 %TypedArray% ( length )
3064 // 22.2.1.2 %TypedArray% ( typedArray )
3065 // 22.2.1.3 %TypedArray% ( object )
3066 // 22.2.1.4 %TypedArray% ( buffer [ , byteOffset [ , length ] ] )
3067 // 22.2.1.5 %TypedArray% ( all other argument combinations )
3068 // 22.2.2 Properties of the %TypedArray% Intrinsic Object
3069
3070 // 22.2.2.1 %TypedArray%.from ( source [ , mapfn [ , thisArg ] ] )
3071 define(
3072 $TypedArray$, 'from',
3073 function from(source) {
3074 var mapfn = arguments[1];
3075 var thisArg = arguments[2];
3076
3077 var c = strict(this);
3078 if (!IsConstructor(c)) throw TypeError();
3079 if (mapfn === undefined) {
3080 var mapping = false;
3081 } else {
3082 if (IsCallable(mapfn)) throw TypeError();
3083 var t = thisArg;
3084 mapping = true;
3085 }
3086 var usingIterator = GetMethod(source, $$iterator);
3087 if (usingIterator !== undefined) {
3088 var iterator = GetIterator(source, usingIterator);
3089 var values = [];
3090 var next = true;
3091 while (next !== false) {
3092 next = IteratorStep(iterator);
3093 if (next !== false) {
3094 var nextValue = IteratorValue(next);
3095 values.push(nextValue);
3096 }
3097 }
3098 var len = values.length;
3099 var newObj = new c(len);
3100 var k = 0;
3101 while (k < len) {
3102 var kValue = values.shift();
3103 if (mapping) {
3104 var mappedValue = mapfn.call(t, kValue);
3105 } else {
3106 mappedValue = kValue;
3107 }
3108 newObj[k] = mappedValue;
3109 ++k;
3110 }
3111 console.assert(values.length === 0);
3112 return newObj;
3113 }
3114 var arrayLike = ToObject(source);
3115 var lenValue = arrayLike.length;
3116 len = ToLength(lenValue);
3117 newObj = new c(len);
3118 k = 0;
3119 while (k < len) {
3120 kValue = arrayLike[k];
3121 if (mapping) {
3122 mappedValue = mapfn.call(t, kValue, k);
3123 } else {
3124 mappedValue = kValue;
3125 }
3126 newObj[k] = mappedValue;
3127 ++k;
3128 }
3129 return newObj;
3130 });
3131
3132 // 22.2.2.2 %TypedArray%.of ( ...items )
3133 define(
3134 $TypedArray$, 'of',
3135 function of() {
3136 var items = arguments;
3137
3138 var len = items.length;
3139 var c = strict(this);
3140 var newObj = new c(len);
3141 var k = 0;
3142 while (k < len) {
3143 newObj[k] = items[k];
3144 ++k;
3145 }
3146 return newObj;
3147 });
3148
3149 // 22.2.2.3 %TypedArray%.prototype
3150 // 22.2.2.4 get %TypedArray% [ @@species ]
3151 // 22.2.3 Properties of the %TypedArrayPrototype% Object
3152 // 22.2.3.1 get %TypedArray%.prototype.buffer
3153 // 22.2.3.2 get %TypedArray%.prototype.byteLength
3154 // 22.2.3.3 get %TypedArray%.prototype.byteOffset
3155 // 22.2.3.4 %TypedArray%.prototype.constructor
3156
3157 // 22.2.3.5 %TypedArray%.prototype.copyWithin (target, start [, end ] )
3158 define($TypedArray$.prototype, 'copyWithin', Array.prototype.copyWithin);
3159
3160 // 22.2.3.6 %TypedArray%.prototype.entries ( )
3161 define($TypedArray$.prototype, 'entries', Array.prototype.entries);
3162
3163 // 22.2.3.7 %TypedArray%.prototype.every ( callbackfn [ , thisArg ] )
3164 define($TypedArray$.prototype, 'every', Array.prototype.every);
3165
3166 // 22.2.3.8 %TypedArray%.prototype.fill (value [ , start [ , end ] ] )
3167 define(
3168 $TypedArray$.prototype, 'fill',
3169 //Array.prototype.fill // Doesn't work in Safari 7
3170 function fill(value/*, start, end*/) {
3171 var start = arguments[1],
3172 end = arguments[2];
3173
3174 var o = ToObject(this);
3175 var lenVal = o.length;
3176 var len = ToLength(lenVal);
3177 len = max(len, 0);
3178 var relativeStart = ToInteger(start);
3179 var k;
3180 if (relativeStart < 0) k = max((len + relativeStart), 0);
3181 else k = min(relativeStart, len);
3182 var relativeEnd;
3183 if (end === undefined) relativeEnd = len;
3184 else relativeEnd = ToInteger(end);
3185 var final;
3186 if (relativeEnd < 0) final = max((len + relativeEnd), 0);
3187 else final = min(relativeEnd, len);
3188 while (k < final) {
3189 var pk = String(k);
3190 o[pk] = value;
3191 k += 1;
3192 }
3193 return o;
3194 });
3195
3196 // 22.2.3.9 %TypedArray%.prototype.filter ( callbackfn [ , thisArg ] )
3197 define(
3198 $TypedArray$.prototype, 'filter',
3199 function filter(callbackfn) {
3200 var thisArg = arguments[1];
3201
3202 var o = ToObject(this);
3203 var lenVal = o.length;
3204 var len = ToLength(lenVal);
3205 if (!IsCallable(callbackfn)) throw TypeError();
3206 var t = thisArg;
3207 var c = o.constructor;
3208 var kept = [];
3209 var k = 0;
3210 var captured = 0;
3211 while (k < len) {
3212 var kValue = o[k];
3213 var selected = callbackfn.call(t, kValue, k, o);
3214 if (selected) {
3215 kept.push(kValue);
3216 ++captured;
3217 }
3218 ++k;
3219 }
3220 var a = new c(captured);
3221 var n = 0;
3222 for (var i = 0; i < kept.length; ++i) {
3223 var e = kept[i];
3224 a[n] = e;
3225 ++n;
3226 }
3227 return a;
3228 });
3229
3230 // 22.2.3.10 %TypedArray%.prototype.find (predicate [ , thisArg ] )
3231 define($TypedArray$.prototype, 'find', Array.prototype.find);
3232
3233 // 22.2.3.11 %TypedArray%.prototype.findIndex ( predicate [ , thisArg ] )
3234 define($TypedArray$.prototype, 'findIndex', Array.prototype.findIndex);
3235
3236 // 22.2.3.12 %TypedArray%.prototype.forEach ( callbackfn [ , thisArg ] )
3237 define($TypedArray$.prototype, 'forEach', Array.prototype.forEach);
3238
3239 // 22.2.3.13 %TypedArray%.prototype.indexOf (searchElement [ , fromIndex ] )
3240 define($TypedArray$.prototype, 'indexOf', Array.prototype.indexOf);
3241
3242 // 22.2.3.14 %TypedArray%.prototype.join ( separator )
3243 define($TypedArray$.prototype, 'join', Array.prototype.join);
3244
3245 // 22.2.3.15 %TypedArray%.prototype.keys ( )
3246 define($TypedArray$.prototype, 'keys', Array.prototype.keys);
3247
3248 // 22.2.3.16 %TypedArray%.prototype.lastIndexOf ( searchElement [ , fromIndex ] )
3249 define($TypedArray$.prototype, 'lastIndexOf', Array.prototype.lastIndexOf);
3250
3251 // 22.2.3.17 get %TypedArray%.prototype.length
3252
3253 // 22.2.3.18 %TypedArray%.prototype.map ( callbackfn [ , thisArg ] )
3254 define(
3255 $TypedArray$.prototype, 'map',
3256 function map(callbackfn) {
3257 var thisArg = arguments[1];
3258
3259 var o = ToObject(this);
3260 var lenValue = o.length;
3261 var len = ToLength(lenValue);
3262 if (!IsCallable(callbackfn)) throw TypeError();
3263 var t = thisArg;
3264 var a = undefined;
3265 var c = o.constructor;
3266 if (IsConstructor(c))
3267 a = new c(len);
3268 if (a === undefined)
3269 a = new Array(len);
3270 var k = 0;
3271 while (k < len) {
3272 var kPresent = HasProperty(o, k);
3273 if (kPresent) {
3274 var kValue = o[k];
3275 var mappedValue = callbackfn.call(t, kValue, k, o);
3276 a[k] = mappedValue;
3277 }
3278 ++k;
3279 }
3280 return a;
3281 });
3282
3283 // 22.2.3.19 %TypedArray%.prototype.reduce ( callbackfn [, initialValue] )
3284 define($TypedArray$.prototype, 'reduce', Array.prototype.reduce);
3285
3286 // 22.2.3.20 %TypedArray%.prototype.reduceRight ( callbackfn [, initialValue] )
3287 define($TypedArray$.prototype, 'reduceRight', Array.prototype.reduceRight);
3288
3289 // 22.2.3.21 %TypedArray%.prototype.reverse ( )
3290 define($TypedArray$.prototype, 'reverse', Array.prototype.reverse);
3291
3292 // 22.2.3.22 %TypedArray%.prototype.set ( overloaded [ , offset ])
3293 // 22.2.3.22.1 %TypedArray%.prototype.set (array [ , offset ] )
3294 // 22.2.3.22.2 %TypedArray%.prototype.set(typedArray [, offset ] )
3295
3296 // 22.2.3.23 %TypedArray%.prototype.slice ( start, end )
3297 define(
3298 $TypedArray$.prototype, 'slice',
3299 function slice(start, end) {
3300 var o = ToObject(this);
3301 var lenVal = o.length;
3302 var len = ToLength(lenVal);
3303 var relativeStart = ToInteger(start);
3304 var k = (relativeStart < 0) ? max(len + relativeStart, 0) : min(relativeStart, len);
3305 var relativeEnd = (end === undefined) ? len : ToInteger(end);
3306 var final = (relativeEnd < 0) ? max(len + relativeEnd, 0) : min(relativeEnd, len);
3307 var count = final - k;
3308 var c = o.constructor;
3309 if (IsConstructor(c)) {
3310 var a = new c(count);
3311 } else {
3312 throw TypeError();
3313 }
3314 var n = 0;
3315 while (k < final) {
3316 var kValue = o[k];
3317 a[n] = kValue;
3318 ++k;
3319 ++n;
3320 }
3321 return a;
3322 });
3323
3324 // 22.2.3.24 %TypedArray%.prototype.some ( callbackfn [ , thisArg ] )
3325 define($TypedArray$.prototype, 'some', Array.prototype.some);
3326
3327 // 22.2.3.25 %TypedArray%.prototype.sort ( comparefn )
3328 define(
3329 $TypedArray$.prototype, 'sort',
3330 function sort() {
3331 var comparefn = arguments[0];
3332
3333 function sortCompare(x, y) {
3334 console.assert(Type(x) === 'number' && Type(y) === 'number');
3335 if (x !== x && y !== y) return +0;
3336 if (x !== x) return 1;
3337 if (y !== y) return -1;
3338 if (comparefn !== undefined) {
3339 return comparefn(x, y);
3340 }
3341 if (x < y) return -1;
3342 if (x > y) return 1;
3343 return +0;
3344 }
3345 return Array.prototype.sort.call(this, sortCompare);
3346 });
3347
3348 // 22.2.3.26 %TypedArray%.prototype.subarray( [ begin [ , end ] ] )
3349 // 22.2.3.27 %TypedArray%.prototype.toLocaleString ([ reserved1 [ , reserved2 ] ])
3350 // 22.2.3.28 %TypedArray%.prototype.toString ( )
3351
3352 // 22.2.3.29 %TypedArray%.prototype.values ( )
3353 define($TypedArray$.prototype, 'values', Array.prototype.values);
3354
3355 // 22.2.3.30 %TypedArray%.prototype [ @@iterator ] ( )
3356 define(
3357 $TypedArray$.prototype, $$iterator,
3358 $TypedArray$.prototype.values
3359 );
3360
3361 // 22.2.3.31 get %TypedArray%.prototype [ @@toStringTag ]
3362 define($TypedArray$.prototype, $$toStringTag, $TypedArrayName$);
3363
3364 // 22.2.4 The TypedArray Constructors
3365 // 22.2.4.1TypedArray( ... argumentsList)
3366 // 22.2.5 Properties of the TypedArray Constructors
3367 // 22.2.5.1 TypedArray.BYTES_PER_ELEMENT
3368 // 22.2.5.2 TypedArray.prototype
3369 // 22.2.6 Properties of TypedArray Prototype Objects
3370 // 22.2.6.1 TypedArray.prototype.BYTES_PER_ELEMENT
3371 // 22.2.6.2 TypedArray.prototype.constructor
3372 // 22.2.7 Properties of TypedArray Instances
3373 });
3374
3375 // ---------------------------------------
3376 // 23 Keyed Collection
3377 // ---------------------------------------
3378
3379 // ---------------------------------------
3380 // 23.1 Map Objects
3381 // ---------------------------------------
3382
3383 (function() {
3384 // 23.1.1 The Map Constructor
3385
3386 // 23.1.1.1 Map ( [ iterable ] )
3387 /** @constructor */
3388 function Map(/*iterable*/) {
3389 var map = strict(this);
3390 var iterable = arguments[0];
3391
3392 if (Type(map) !== 'object') throw TypeError();
3393 if ('[[MapData]]' in map) throw TypeError();
3394
3395 if (iterable !== undefined) {
3396 var adder = map['set'];
3397 if (!IsCallable(adder)) throw TypeError();
3398 var iter = GetIterator(ToObject(iterable));
3399 }
3400 set_internal(map, '[[MapData]]', { keys: [], values: [] });
3401 if (iter === undefined) return map;
3402 while (true) {
3403 var next = IteratorStep(iter);
3404 if (next === false)
3405 return map;
3406 var nextItem = IteratorValue(next);
3407 if (Type(nextItem) !== 'object') throw TypeError();
3408 var k = nextItem[0];
3409 var v = nextItem[1];
3410 adder.call(map, k, v);
3411 }
3412
3413 return map;
3414 }
3415
3416 if (!('Map' in global) || OVERRIDE_NATIVE_FOR_TESTING ||
3417 (function() { try { new global.Map([]); return false; } catch (_) { return true; } }()) ||
3418 (function() { try { return !new global.Map().entries().next; } catch (_) { return true; } }()) ||
3419 (new global.Map([['a', 1]]).size !== 1))
3420 global.Map = Map;
3421
3422
3423 function MapDataIndexOf(mapData, key) {
3424 var i;
3425 if (key === key) return mapData.keys.indexOf(key);
3426 // Slow case for NaN
3427 for (i = 0; i < mapData.keys.length; i += 1)
3428 if (SameValueZero(mapData.keys[i], key)) return i;
3429 return -1;
3430 }
3431
3432 // 23.1.1.2 new Map ( ... argumentsList )
3433 // 23.1.2 Properties of the Map Constructor
3434 // 23.1.2.1 Map.prototype
3435 var $MapPrototype$ = {};
3436 Map.prototype = $MapPrototype$;
3437
3438 // 23.1.2.2 get Map [ @@species ]
3439
3440 // 23.1.3 Properties of the Map Prototype Object
3441 // 23.1.3.1 Map.prototype.clear ()
3442 define(
3443 Map.prototype, 'clear',
3444 function clear() {
3445 var m = strict(this);
3446 if (Type(m) !== 'object') throw TypeError();
3447 if (!('[[MapData]]' in m)) throw TypeError();
3448 if (m['[[MapData]]'] === undefined) throw TypeError();
3449 var entries = m['[[MapData]]'];
3450 entries.keys.length = 0;
3451 entries.values.length = 0;
3452 return undefined;
3453 });
3454
3455 // 23.1.3.2 Map.prototype.constructor
3456
3457 // 23.1.3.3 Map.prototype.delete ( key )
3458 define(
3459 Map.prototype, 'delete',
3460 function delete_(key) {
3461 var m = strict(this);
3462 if (Type(m) !== 'object') throw TypeError();
3463 if (!('[[MapData]]' in m)) throw TypeError();
3464 if (m['[[MapData]]'] === undefined) throw TypeError();
3465 var entries = m['[[MapData]]'];
3466 var i = MapDataIndexOf(entries, key);
3467 if (i < 0) return false;
3468 entries.keys[i] = empty;
3469 entries.values[i] = empty;
3470 return true;
3471 });
3472
3473 // 23.1.3.4 Map.prototype.entries ( )
3474 define(
3475 Map.prototype, 'entries',
3476 function entries() {
3477 var m = strict(this);
3478 if (Type(m) !== 'object') throw TypeError();
3479 return CreateMapIterator(m, 'key+value');
3480 });
3481
3482 // 23.1.3.5 Map.prototype.forEach ( callbackfn [ , thisArg ] )
3483 define(
3484 Map.prototype, 'forEach',
3485 function forEach(callbackfn /*, thisArg*/) {
3486 var thisArg = arguments[1];
3487
3488 var m = strict(this);
3489 if (Type(m) !== 'object') throw TypeError();
3490 if (!('[[MapData]]' in m)) throw TypeError();
3491 if (m['[[MapData]]'] === undefined) throw TypeError();
3492 var entries = m['[[MapData]]'];
3493
3494 if (!IsCallable(callbackfn)) {
3495 throw TypeError('First argument to forEach is not callable.');
3496 }
3497 for (var i = 0; i < entries.keys.length; ++i) {
3498 if (entries.keys[i] !== empty) {
3499 callbackfn.call(thisArg, entries.values[i], entries.keys[i], m);
3500 }
3501 }
3502 return undefined;
3503 });
3504
3505 // 23.1.3.6 Map.prototype.get ( key )
3506 define(
3507 Map.prototype, 'get',
3508 function get(key) {
3509 var m = strict(this);
3510 if (Type(m) !== 'object') throw TypeError();
3511 if (!('[[MapData]]' in m)) throw TypeError();
3512 if (m['[[MapData]]'] === undefined) throw TypeError();
3513 var entries = m['[[MapData]]'];
3514 var i = MapDataIndexOf(entries, key);
3515 if (i >= 0) return entries.values[i];
3516 return undefined;
3517 });
3518
3519 // 23.1.3.7 Map.prototype.has ( key )
3520 define(
3521 Map.prototype, 'has',
3522 function has(key) {
3523 var m = strict(this);
3524 if (Type(m) !== 'object') throw TypeError();
3525 if (!('[[MapData]]' in m)) throw TypeError();
3526 if (m['[[MapData]]'] === undefined) throw TypeError();
3527 var entries = m['[[MapData]]'];
3528 if (MapDataIndexOf(entries, key) >= 0) return true;
3529 return false;
3530 });
3531
3532 // 23.1.3.8 Map.prototype.keys ( )
3533 define(
3534 Map.prototype, 'keys',
3535 function keys() {
3536 var m = strict(this);
3537 if (Type(m) !== 'object') throw TypeError();
3538 return CreateMapIterator(m, 'key');
3539 });
3540
3541 // 23.1.3.9 Map.prototype.set ( key , value )
3542 define(
3543 Map.prototype, 'set',
3544 function set(key, value) {
3545 var m = strict(this);
3546 if (Type(m) !== 'object') throw TypeError();
3547 if (!('[[MapData]]' in m)) throw TypeError();
3548 if (m['[[MapData]]'] === undefined) throw TypeError();
3549 var entries = m['[[MapData]]'];
3550 var i = MapDataIndexOf(entries, key);
3551 if (i < 0) i = entries.keys.length;
3552 if (SameValue(key, -0)) key = 0;
3553 entries.keys[i] = key;
3554 entries.values[i] = value;
3555 return m;
3556 });
3557
3558 // 23.1.3.10 get Map.prototype.size
3559 Object.defineProperty(
3560 Map.prototype, 'size', {
3561 get: function() {
3562 var m = strict(this);
3563 if (Type(m) !== 'object') throw TypeError();
3564 if (!('[[MapData]]' in m)) throw TypeError();
3565 if (m['[[MapData]]'] === undefined) throw TypeError();
3566 var entries = m['[[MapData]]'];
3567 var count = 0;
3568 for (var i = 0; i < entries.keys.length; ++i) {
3569 if (entries.keys[i] !== empty)
3570 count = count + 1;
3571 }
3572 return count;
3573 }
3574 });
3575
3576 // 23.1.3.11 Map.prototype.values ( )
3577 define(
3578 Map.prototype, 'values',
3579 function values() {
3580 var m = strict(this);
3581 if (Type(m) !== 'object') throw TypeError();
3582 return CreateMapIterator(m, 'value');
3583 });
3584
3585 // 23.1.3.12 Map.prototype [ @@iterator ]( )
3586 define(
3587 Map.prototype, $$iterator,
3588 function() {
3589 var m = strict(this);
3590 if (Type(m) !== 'object') throw TypeError();
3591 return CreateMapIterator(m, 'key+value');
3592 });
3593
3594 // 23.1.3.13 Map.prototype [ @@toStringTag ]
3595 define(global.Map.prototype, $$toStringTag, 'Map');
3596
3597 // 23.1.4 Properties of Map Instances
3598 // 23.1.5 Map Iterator Objects
3599
3600 /** @constructor */
3601 function MapIterator() {}
3602
3603 // 23.1.5.1 CreateMapIterator Abstract Operation
3604 function CreateMapIterator(map, kind) {
3605 if (Type(map) !== 'object') throw TypeError();
3606 if (!('[[MapData]]' in map)) throw TypeError();
3607 if (map['[[MapData]]'] === undefined) throw TypeError();
3608 var iterator = new MapIterator;
3609 set_internal(iterator, '[[Map]]', map);
3610 set_internal(iterator, '[[MapNextIndex]]', 0);
3611 set_internal(iterator, '[[MapIterationKind]]', kind);
3612 return iterator;
3613 }
3614
3615 // 23.1.5.2 The %MapIteratorPrototype% Object
3616 var $MapIteratorPrototype$ = Object.create($IteratorPrototype$);
3617 MapIterator.prototype = $MapIteratorPrototype$;
3618
3619 // 23.1.5.2.1 %MapIteratorPrototype%.next ( )
3620 define(
3621 $MapIteratorPrototype$, 'next',
3622 function next() {
3623 var o = strict(this);
3624 if (Type(o) !== 'object') throw TypeError();
3625 var m = o['[[Map]]'],
3626 index = o['[[MapNextIndex]]'],
3627 itemKind = o['[[MapIterationKind]]'],
3628 entries = m['[[MapData]]'];
3629 while (index < entries.keys.length) {
3630 var e = {key: entries.keys[index], value: entries.values[index]};
3631 index = index += 1;
3632 set_internal(o, '[[MapNextIndex]]', index);
3633 if (e.key !== empty) {
3634 if (itemKind === 'key') {
3635 return CreateIterResultObject(e.key, false);
3636 } else if (itemKind === 'value') {
3637 return CreateIterResultObject(e.value, false);
3638 } else {
3639 return CreateIterResultObject([e.key, e.value], false);
3640 }
3641 }
3642 }
3643 return CreateIterResultObject(undefined, true);
3644 });
3645
3646 // 23.1.5.2.2 %MapIteratorPrototype% [ @@toStringTag ]
3647 define($MapIteratorPrototype$, $$toStringTag, 'Map Iterator');
3648
3649 // 23.1.5.3 Properties of Map Iterator Instances
3650 }());
3651
3652 // ---------------------------------------
3653 // 23.2 Set Objects
3654 // ---------------------------------------
3655
3656 (function() {
3657 // 23.2.1 The Set Constructor
3658 // 23.2.1.1 Set ( [ iterable ] )
3659
3660 /** @constructor */
3661 function Set(/*iterable*/) {
3662 var set = strict(this);
3663 var iterable = arguments[0];
3664
3665 if (Type(set) !== 'object') throw TypeError();
3666 if ('[[SetData]]' in set) throw TypeError();
3667
3668 if (iterable !== undefined) {
3669 var adder = set['add'];
3670 if (!IsCallable(adder)) throw TypeError();
3671 var iter = GetIterator(ToObject(iterable));
3672 }
3673 set_internal(set, '[[SetData]]', []);
3674 if (iter === undefined) return set;
3675 while (true) {
3676 var next = IteratorStep(iter);
3677 if (next === false)
3678 return set;
3679 var nextValue = IteratorValue(next);
3680 adder.call(set, nextValue);
3681 }
3682
3683 return set;
3684 }
3685
3686 if (!('Set' in global) || OVERRIDE_NATIVE_FOR_TESTING ||
3687 (function() { try { return !new global.Set().entries().next; } catch (_) { return true; } }()) ||
3688 (new global.Set([1]).size !== 1))
3689 global.Set = Set;
3690
3691 function SetDataIndexOf(setData, key) {
3692 var i;
3693 if (key === key)
3694 return setData.indexOf(key);
3695 // Slow case for NaN
3696 for (i = 0; i < setData.length; i += 1)
3697 if (SameValueZero(setData[i], key)) return i;
3698 return -1;
3699 }
3700
3701 // 23.2.1.2 new Set ( ...argumentsList )
3702 // 23.2.2 Properties of the Set Constructor
3703
3704 // 23.2.2.1 Set.prototype
3705 var $SetPrototype$ = {};
3706 Set.prototype = $SetPrototype$;
3707
3708 // 23.2.2.2 get Set [ @@species ]
3709 // 23.2.3 Properties of the Set Prototype Object
3710
3711 // 23.2.3.1 Set.prototype.add (value )
3712 define(
3713 Set.prototype, 'add',
3714 function add(value) {
3715 var s = strict(this);
3716 if (Type(s) !== 'object') throw TypeError();
3717 if (!('[[SetData]]' in s)) throw TypeError();
3718 if (s['[[SetData]]'] === undefined) throw TypeError();
3719 if (SameValue(value, -0)) value = 0;
3720 var entries = s['[[SetData]]'];
3721 var i = SetDataIndexOf(entries, value);
3722 if (i < 0) i = s['[[SetData]]'].length;
3723 s['[[SetData]]'][i] = value;
3724
3725 return s;
3726 });
3727
3728 // 23.2.3.2 Set.prototype.clear ()
3729 define(
3730 Set.prototype, 'clear',
3731 function clear() {
3732 var s = strict(this);
3733 if (Type(s) !== 'object') throw TypeError();
3734 if (!('[[SetData]]' in s)) throw TypeError();
3735 if (s['[[SetData]]'] === undefined) throw TypeError();
3736 var entries = s['[[SetData]]'];
3737 entries.length = 0;
3738 return undefined;
3739 });
3740
3741 // 23.2.3.3 Set.prototype.constructor
3742 // 23.2.3.4 Set.prototype.delete ( value )
3743 define(
3744 Set.prototype, 'delete',
3745 function delete_(value) {
3746 var s = strict(this);
3747 if (Type(s) !== 'object') throw TypeError();
3748 if (!('[[SetData]]' in s)) throw TypeError();
3749 if (s['[[SetData]]'] === undefined) throw TypeError();
3750 var entries = s['[[SetData]]'];
3751 var i = SetDataIndexOf(entries, value);
3752 if (i < 0) return false;
3753 entries[i] = empty;
3754 return true;
3755 });
3756
3757 // 23.2.3.5 Set.prototype.entries ( )
3758 define(
3759 Set.prototype, 'entries',
3760 function entries() {
3761 var s = strict(this);
3762 if (Type(s) !== 'object') throw TypeError();
3763 return CreateSetIterator(s, 'key+value');
3764 });
3765
3766 // 23.2.3.6 Set.prototype.forEach ( callbackfn [ , thisArg ] )
3767 define(
3768 Set.prototype, 'forEach',
3769 function forEach(callbackfn/*, thisArg*/) {
3770 var thisArg = arguments[1];
3771
3772 var s = strict(this);
3773 if (Type(s) !== 'object') throw TypeError();
3774 if (!('[[SetData]]' in s)) throw TypeError();
3775 if (s['[[SetData]]'] === undefined) throw TypeError();
3776 var entries = s['[[SetData]]'];
3777
3778 if (!IsCallable(callbackfn)) {
3779 throw TypeError('First argument to forEach is not callable.');
3780 }
3781 for (var i = 0; i < entries.length; ++i) {
3782 if (entries[i] !== empty) {
3783 callbackfn.call(thisArg, entries[i], entries[i], s);
3784 }
3785 }
3786 });
3787
3788 // 23.2.3.7 Set.prototype.has ( value )
3789 define(
3790 Set.prototype, 'has',
3791 function has(key) {
3792 var s = strict(this);
3793 if (Type(s) !== 'object') throw TypeError();
3794 if (!('[[SetData]]' in s)) throw TypeError();
3795 if (s['[[SetData]]'] === undefined) throw TypeError();
3796 var entries = s['[[SetData]]'];
3797 return SetDataIndexOf(entries, key) !== -1;
3798 });
3799
3800 // 23.2.3.8 Set.prototype.keys ( )
3801 // See Set.prototype.values
3802
3803 // 23.2.3.9 get Set.prototype.size
3804 Object.defineProperty(
3805 Set.prototype, 'size', {
3806 get: function() {
3807 var s = strict(this);
3808 if (Type(s) !== 'object') throw TypeError();
3809 if (!('[[SetData]]' in s)) throw TypeError();
3810 if (s['[[SetData]]'] === undefined) throw TypeError();
3811 var entries = s['[[SetData]]'];
3812 var count = 0;
3813 for (var i = 0; i < entries.length; ++i) {
3814 if (entries[i] !== empty)
3815 count = count + 1;
3816 }
3817 return count;
3818 }
3819 });
3820
3821 // 23.2.3.10 Set.prototype.values ( )
3822 define(
3823 Set.prototype, 'values',
3824 function values() {
3825 var s = strict(this);
3826 if (Type(s) !== 'object') throw TypeError();
3827 return CreateSetIterator(s, 'value');
3828 });
3829 // NOTE: function name is still 'values':
3830 Set.prototype.keys = Set.prototype.values;
3831
3832 // 23.2.3.11 Set.prototype [@@iterator ] ( )
3833 define(
3834 Set.prototype, $$iterator,
3835 function() {
3836 var s = strict(this);
3837 if (Type(s) !== 'object') throw TypeError();
3838 return CreateSetIterator(s);
3839 });
3840
3841 // 23.2.3.12 Set.prototype [ @@toStringTag ]
3842 define(global.Set.prototype, $$toStringTag, 'Set');
3843
3844 // 23.2.4 Properties of Set Instances
3845 // 23.2.5 Set Iterator Objects
3846 /** @constructor */
3847 function SetIterator() {}
3848
3849 // 23.2.5.1 CreateSetIterator Abstract Operation
3850 function CreateSetIterator(set, kind) {
3851 if (Type(set) !== 'object') throw TypeError();
3852 if (!('[[SetData]]' in set)) throw TypeError();
3853 if (set['[[SetData]]'] === undefined) throw TypeError();
3854 var iterator = new SetIterator;
3855 set_internal(iterator, '[[IteratedSet]]', set);
3856 set_internal(iterator, '[[SetNextIndex]]', 0);
3857 set_internal(iterator, '[[SetIterationKind]]', kind);
3858 return iterator;
3859 }
3860
3861 // 23.2.5.2 The %SetIteratorPrototype% Object
3862 var $SetIteratorPrototype$ = Object.create($IteratorPrototype$);
3863 SetIterator.prototype = $SetIteratorPrototype$;
3864
3865 // 23.2.5.2.1 %SetIteratorPrototype%.next( )
3866 define(
3867 $SetIteratorPrototype$, 'next',
3868 function next() {
3869 var o = strict(this);
3870 if (Type(o) !== 'object') throw TypeError();
3871 var s = o['[[IteratedSet]]'],
3872 index = o['[[SetNextIndex]]'],
3873 itemKind = o['[[SetIterationKind]]'],
3874 entries = s['[[SetData]]'];
3875 while (index < entries.length) {
3876 var e = entries[index];
3877 index = index += 1;
3878 set_internal(o, '[[SetNextIndex]]', index);
3879 if (e !== empty) {
3880 if (itemKind === 'key+value')
3881 return CreateIterResultObject([e, e], false);
3882 return CreateIterResultObject(e, false);
3883 }
3884 }
3885 return CreateIterResultObject(undefined, true);
3886 });
3887
3888 // 23.2.5.2.2 %SetIteratorPrototype% [ @@toStringTag ]
3889 define($SetIteratorPrototype$, $$toStringTag, 'Set Iterator');
3890
3891 // 23.2.5.3 Properties of Set Iterator Instances
3892
3893 }());
3894
3895 // ---------------------------------------
3896 // 23.3 WeakMap Objects
3897 // ---------------------------------------
3898
3899 (function() {
3900 // 23.3.1 The WeakMap Constructor
3901 // 23.3.1.1 WeakMap ( [ iterable ] )
3902 /** @constructor */
3903 function WeakMap(/*iterable*/) {
3904 var map = strict(this);
3905 var iterable = arguments[0];
3906
3907 if (Type(map) !== 'object') throw TypeError();
3908 if ('[[WeakMapData]]' in map) throw TypeError();
3909
3910 if (iterable !== undefined) {
3911 var adder = map['set'];
3912 if (!IsCallable(adder)) throw TypeError();
3913 var iter = GetIterator(ToObject(iterable));
3914 }
3915 set_internal(map, '[[WeakMapData]]', new EphemeronTable);
3916 if (iter === undefined) return map;
3917 while (true) {
3918 var next = IteratorStep(iter);
3919 if (next === false)
3920 return map;
3921 var nextValue = IteratorValue(next);
3922 if (Type(nextValue) !== 'object') throw TypeError();
3923 var k = nextValue[0];
3924 var v = nextValue[1];
3925 adder.call(map, k, v);
3926 }
3927
3928 return map;
3929 }
3930
3931 if (!('WeakMap' in global) || OVERRIDE_NATIVE_FOR_TESTING)
3932 global.WeakMap = WeakMap;
3933
3934 // 23.3.2 Properties of the WeakMap Constructor
3935 // 23.3.2.1 WeakMap.prototype
3936 var $WeakMapPrototype$ = {};
3937 WeakMap.prototype = $WeakMapPrototype$;
3938
3939
3940
3941 // 23.3.2.2 WeakMap[ @@create ] ( )
3942 // 23.3.3 Properties of the WeakMap Prototype Object
3943
3944 // 23.3.3.1 WeakMap.prototype.constructor
3945
3946 // 23.3.3.2 WeakMap.prototype.delete ( key )
3947 define(
3948 WeakMap.prototype, 'delete',
3949 function delete_(key) {
3950 var M = strict(this);
3951 if (Type(M) !== 'object') throw TypeError();
3952 if (M['[[WeakMapData]]'] === undefined) throw TypeError();
3953 if (Type(key) !== 'object') throw TypeError('Expected object');
3954 return M['[[WeakMapData]]'].remove(key);
3955 });
3956
3957 // 23.3.3.3 WeakMap.prototype.get ( key )
3958 define(
3959 WeakMap.prototype, 'get',
3960 function get(key, defaultValue) {
3961 var M = strict(this);
3962 if (Type(M) !== 'object') throw TypeError();
3963 if (M['[[WeakMapData]]'] === undefined) throw TypeError();
3964 if (Type(key) !== 'object') throw TypeError('Expected object');
3965 return M['[[WeakMapData]]'].get(key, defaultValue);
3966 });
3967
3968 // 23.3.3.4 WeakMap.prototype.has ( key )
3969 define(
3970 WeakMap.prototype, 'has',
3971 function has(key) {
3972 var M = strict(this);
3973 if (Type(M) !== 'object') throw TypeError();
3974 if (M['[[WeakMapData]]'] === undefined) throw TypeError();
3975 if (Type(key) !== 'object') throw TypeError('Expected object');
3976 return M['[[WeakMapData]]'].has(key);
3977 });
3978
3979 // 23.3.3.5 WeakMap.prototype.set ( key , value )
3980 define(
3981 WeakMap.prototype, 'set',
3982 function set(key, value) {
3983 var M = strict(this);
3984 if (Type(M) !== 'object') throw TypeError();
3985 if (M['[[WeakMapData]]'] === undefined) throw TypeError();
3986 if (Type(key) !== 'object') throw TypeError('Expected object');
3987 M['[[WeakMapData]]'].set(key, value);
3988 return M;
3989 });
3990
3991 // 23.3.3.6 WeakMap.prototype [ @@toStringTag ]
3992 define(global.WeakMap.prototype, $$toStringTag, 'WeakMap');
3993
3994 // 23.3.4 Properties of WeakMap Instances
3995
3996 // Polyfills for incomplete native implementations:
3997 (function() {
3998 var wm = new global.WeakMap();
3999 var orig = global.WeakMap.prototype.set;
4000 define(global.WeakMap.prototype, 'set', function set() {
4001 orig.apply(this, arguments);
4002 return this;
4003 }, wm.set({}, 0) !== wm);
4004 }());
4005 }());
4006
4007 // ---------------------------------------
4008 // 23.4 WeakSet Objects
4009 // ---------------------------------------
4010
4011 (function() {
4012 // 23.4.1 The WeakSet Constructor
4013 // 23.4.1.1 WeakSet ( [ iterable ] )
4014 /** @constructor */
4015 function WeakSet(/*iterable*/) {
4016 var set = strict(this);
4017 var iterable = arguments[0];
4018
4019 if (Type(set) !== 'object') throw TypeError();
4020 if ('[[WeakSetData]]' in set) throw TypeError();
4021
4022 if (iterable !== undefined) {
4023 var adder = set['add'];
4024 if (!IsCallable(adder)) throw TypeError();
4025 var iter = GetIterator(ToObject(iterable));
4026 }
4027 set_internal(set, '[[WeakSetData]]', new EphemeronTable);
4028 if (iter === undefined) return set;
4029 while (true) {
4030 var next = IteratorStep(iter);
4031 if (next === false)
4032 return set;
4033 var nextValue = IteratorValue(next);
4034 adder.call(set, nextValue);
4035 }
4036
4037 return set;
4038 }
4039
4040 if (!('WeakSet' in global) || OVERRIDE_NATIVE_FOR_TESTING)
4041 global.WeakSet = WeakSet;
4042
4043 // 23.4.2 Properties of the WeakSet Constructor
4044 // 23.4.2.1 WeakSet.prototype
4045 var $WeakSetPrototype$ = {};
4046 WeakSet.prototype = $WeakSetPrototype$;
4047
4048 // 23.4.3 Properties of the WeakSet Prototype Object
4049 // 23.4.3.1 WeakSet.prototype.add (value )
4050 define(
4051 WeakSet.prototype, 'add',
4052 function add(value) {
4053 var S = strict(this);
4054 if (Type(S) !== 'object') throw TypeError();
4055 if (S['[[WeakSetData]]'] === undefined) throw TypeError();
4056 if (Type(value) !== 'object') throw TypeError('Expected object');
4057 S['[[WeakSetData]]'].set(value, true);
4058 return S;
4059 });
4060
4061 // 23.4.3.2 WeakSet.prototype.constructor
4062 // 23.4.3.3 WeakSet.prototype.delete ( value )
4063 define(
4064 WeakSet.prototype, 'delete',
4065 function delete_(value) {
4066 var S = strict(this);
4067 if (Type(S) !== 'object') throw TypeError();
4068 if (S['[[WeakSetData]]'] === undefined) throw TypeError();
4069 if (Type(value) !== 'object') throw TypeError('Expected object');
4070 return S['[[WeakSetData]]'].remove(value);
4071 });
4072
4073 // 23.4.3.4 WeakSet.prototype.has ( value )
4074 define(
4075 WeakSet.prototype, 'has',
4076 function has(key) {
4077 var S = strict(this);
4078 if (Type(S) !== 'object') throw TypeError();
4079 if (S['[[WeakSetData]]'] === undefined) throw TypeError();
4080 if (Type(key) !== 'object') throw TypeError('Expected object');
4081 return S['[[WeakSetData]]'].has(key);
4082 });
4083
4084 // 23.4.3.5 WeakSet.prototype [ @@toStringTag ]
4085 define(global.WeakSet.prototype, $$toStringTag, 'WeakSet');
4086
4087 // 23.4.4 Properties of WeakSet Instances
4088
4089 // Polyfills for incomplete native implementations:
4090 (function() {
4091 var ws = new global.WeakSet();
4092 var orig = global.WeakSet.prototype.add;
4093 define(global.WeakSet.prototype, 'add', function add() {
4094 orig.apply(this, arguments);
4095 return this;
4096 }, ws.add({}) !== ws);
4097 }());
4098 }());
4099
4100 // ---------------------------------------
4101 // 24 Structured Data
4102 // ---------------------------------------
4103
4104 // ---------------------------------------
4105 // 24.1 ArrayBuffer Objects
4106 // ---------------------------------------
4107
4108 // See typedarray.js for TypedArray polyfill
4109
4110 (function() {
4111 if (!('ArrayBuffer' in global))
4112 return;
4113
4114 // 24.1.1 Abstract Operations For ArrayBuffer Objects
4115 // 24.1.1.1 AllocateArrayBuffer( constructor, byteLength )
4116 // 24.1.1.2 IsDetachedBuffer( arrayBuffer )
4117 // 24.1.1.3 DetachArrayBuffer( arrayBuffer )
4118 // 24.1.1.4 CloneArrayBuffer( srcBuffer, srcByteOffset [, cloneConstructor] )
4119 // 24.1.1.5 GetValueFromBuffer ( arrayBuffer, byteIndex, type, isLittleEndian )
4120 // 24.1.1.6 SetValueInBuffer ( arrayBuffer, byteIndex, type, value, isLittleEndian )
4121 // 24.1.2 The ArrayBuffer Constructor
4122 // 24.1.2.1 ArrayBuffer( length )
4123 // 24.1.3 Properties of the ArrayBuffer Constructor
4124
4125 // 24.1.3.1 ArrayBuffer.isView ( arg )
4126 define(
4127 ArrayBuffer, 'isView',
4128 function isView(arg) {
4129 if (Type(arg) !== 'object') return false;
4130 if ('buffer' in arg && arg.buffer instanceof ArrayBuffer) return true;
4131 return false;
4132 });
4133
4134 // 24.1.3.2 ArrayBuffer.prototype
4135 // 24.1.3.3 get ArrayBuffer [ @@species ]
4136 // 24.1.4 Properties of the ArrayBuffer Prototype Object
4137 // 24.1.4.1 get ArrayBuffer.prototype.byteLength
4138 // 24.1.4.2 ArrayBuffer.prototype.constructor
4139 // 24.1.4.3 ArrayBuffer.prototype.slice ( start , end)
4140
4141 // 24.1.4.4 ArrayBuffer.prototype [ @@toStringTag ]
4142 define(ArrayBuffer.prototype, $$toStringTag, 'ArrayBuffer');
4143
4144 // 24.1.5 Properties of the ArrayBuffer Instances
4145 }());
4146
4147 // ---------------------------------------
4148 // 24.2 DataView Objects
4149 // ---------------------------------------
4150
4151 // See typedarray.js for TypedArray polyfill
4152
4153 (function() {
4154 if (!('DataView' in global))
4155 return;
4156
4157 // 24.2.1 Abstract Operations For DataView Objects
4158 // 24.2.1.1 GetViewValue(view, requestIndex, isLittleEndian, type)
4159 // 24.2.1.2 SetViewValue(view, requestIndex, isLittleEndian, type, value)
4160 // 24.2.2 The DataView Constructor
4161 // 24.2.2.1 DataView (buffer [ , byteOffset [ , byteLength ] ] )
4162 // 24.2.3 Properties of the DataView Constructor
4163 // 24.2.3.1 DataView.prototype
4164 // 24.2.4 Properties of the DataView Prototype Object
4165 // 24.2.4.1 get DataView.prototype.buffer
4166 // 24.2.4.2 get DataView.prototype.byteLength
4167 // 24.2.4.3 get DataView.prototype.byteOffset
4168 // 24.2.4.4 DataView.prototype.constructor
4169 // 24.2.4.5 DataView.prototype.getFloat32 ( byteOffset [ , littleEndian ] )
4170 // 24.2.4.6 DataView.prototype.getFloat64 ( byteOffset [ , littleEndian ] )
4171 // 24.2.4.7 DataView.prototype.getInt8 ( byteOffset )
4172 // 24.2.4.8 DataView.prototype.getInt16 ( byteOffset [ , littleEndian ] )
4173 // 24.2.4.9 DataView.prototype.getInt32 ( byteOffset [ , littleEndian ] )
4174 // 24.2.4.10 DataView.prototype.getUint8 ( byteOffset )
4175 // 24.2.4.11 DataView.prototype.getUint16 ( byteOffset [ , littleEndian ] )
4176 // 24.2.4.12 DataView.prototype.getUint32 ( byteOffset [ , littleEndian ] )
4177 // 24.2.4.13 DataView.prototype.setFloat32 ( byteOffset, value [ , littleEndian ] )
4178 // 24.2.4.14 DataView.prototype.setFloat64 ( byteOffset, value [ , littleEndian ] )
4179 // 24.2.4.15 DataView.prototype.setInt8 ( byteOffset, value )
4180 // 24.2.4.16 DataView.prototype.setInt16 ( byteOffset, value [ , littleEndian ] )
4181 // 24.2.4.17 DataView.prototype.setInt32 ( byteOffset, value [ , littleEndian ] )
4182 // 24.2.4.18 DataView.prototype.setUint8 ( byteOffset, value )
4183 // 24.2.4.19 DataView.prototype.setUint16 ( byteOffset, value [ , littleEndian ] )
4184 // 24.2.4.20 DataView.prototype.setUint32 ( byteOffset, value [ , littleEndian ] )
4185
4186 // 24.2.4.21 DataView.prototype[ @@toStringTag ]
4187 define(DataView.prototype, $$toStringTag, 'DataView');
4188
4189 // 24.2.5 Properties of DataView Instances
4190 }());
4191
4192 // ---------------------------------------
4193 // 24.3 The JSON Object
4194 // ---------------------------------------
4195
4196 // 24.3.1 JSON.parse ( text [ , reviver ] )
4197 // 24.3.2 JSON.stringify ( value [ , replacer [ , space ] ] )
4198 // 24.3.3 JSON [ @@toStringTag ]
4199 define(JSON, $$toStringTag, 'JSON');
4200
4201 // ---------------------------------------
4202 // 25.1 Iteration
4203 // ---------------------------------------
4204
4205 // 25.1.1 Common Iteration Interfaces
4206 // 25.1.1.1 The Iterable Interface
4207 // 25.1.1.2 The Iterator Interface
4208 // 25.1.1.3 The IteratorResult Interface
4209
4210 // 25.1.2 The %IteratorPrototype% Object
4211 // Defined earlier, so other prototypes can reference it.
4212 // 25.1.2.1 %IteratorPrototype% [ @@iterator ] ( )
4213 define($IteratorPrototype$, $$iterator, function() {
4214 return this;
4215 });
4216
4217
4218 // ---------------------------------------
4219 // 25.4 Promise Objects
4220 // ---------------------------------------
4221
4222 (function() {
4223 // 25.4 Promise Objects
4224
4225 // 25.4.1 Promise Abstract Operations
4226
4227 // 25.4.1.1 PromiseCapability Records
4228 // 25.4.1.1.1 IfAbruptRejectPromise ( value, capability )
4229
4230 function IfAbruptRejectPromise(value, capability) {
4231 var rejectResult = capability['[[Reject]]'].call(undefined, value);
4232 return capability['[[Promise]]'];
4233 }
4234
4235 // 25.4.1.2 PromiseReaction Records
4236
4237 // 25.4.1.3 CreateResolvingFunctions ( promise )
4238
4239 function CreateResolvingFunctions(promise) {
4240 var alreadyResolved = {'[[value]]': false};
4241 var resolve = PromiseResolveFunction();
4242 set_internal(resolve, '[[Promise]]', promise);
4243 set_internal(resolve, '[[AlreadyResolved]]', alreadyResolved);
4244 var reject = PromiseRejectFunction();
4245 set_internal(reject, '[[Promise]]', promise);
4246 set_internal(reject, '[[AlreadyResolved]]', alreadyResolved);
4247 return { '[[Resolve]]': resolve, '[[Reject]]': reject};
4248 }
4249
4250 // 25.4.1.3.1 Promise Reject Functions
4251
4252 function PromiseRejectFunction() {
4253 var F = function(reason) {
4254 console.assert(Type(F['[[Promise]]']) === 'object');
4255 var promise = F['[[Promise]]'];
4256 var alreadyResolved = F['[[AlreadyResolved]]'];
4257 if (alreadyResolved['[[value]]']) return undefined;
4258 set_internal(alreadyResolved, '[[value]]', true);
4259 return RejectPromise(promise, reason);
4260 };
4261 return F;
4262 }
4263
4264 // 25.4.1.3.2 Promise Resolve Functions
4265
4266 function PromiseResolveFunction() {
4267 var F = function(resolution) {
4268 console.assert(Type(F['[[Promise]]']) === 'object');
4269 var promise = F['[[Promise]]'];
4270 var alreadyResolved = F['[[AlreadyResolved]]'];
4271 if (alreadyResolved['[[value]]']) return undefined;
4272 set_internal(alreadyResolved, '[[value]]', true);
4273
4274 if (SameValue(resolution, promise)) {
4275 var selfResolutionError = TypeError();
4276 return RejectPromise(promise, selfResolutionError);
4277 }
4278 if (Type(resolution) !== 'object')
4279 return FulfillPromise(promise, resolution);
4280 try {
4281 var then = resolution['then'];
4282 } catch(then) {
4283 return RejectPromise(promise, then);
4284 }
4285 if (!IsCallable(then))
4286 return FulfillPromise(promise, resolution);
4287 EnqueueJob('PromiseJobs', PromiseResolveThenableJob, [promise, resolution, then]);
4288 return undefined;
4289 };
4290 return F;
4291 }
4292
4293 // 25.4.1.4 FulfillPromise ( promise, value )
4294
4295 function FulfillPromise(promise, value) {
4296 console.assert(promise['[[PromiseState]]'] === 'pending');
4297 var reactions = promise['[[PromiseFulfillReactions]]'];
4298 set_internal(promise, '[[PromiseResult]]', value);
4299 set_internal(promise, '[[PromiseFulfillReactions]]', undefined);
4300 set_internal(promise, '[[PromiseRejectReactions]]', undefined);
4301 set_internal(promise, '[[PromiseState]]', 'fulfilled');
4302 return TriggerPromiseReactions(reactions, value);
4303 }
4304
4305 // 25.4.1.5 NewPromiseCapability ( C )
4306
4307 function NewPromiseCapability(c) {
4308 // To keep Promise hermetic, this doesn't look much like the spec.
4309 return CreatePromiseCapabilityRecord(undefined, c);
4310 }
4311
4312 // 25.4.1.5.1 CreatePromiseCapabilityRecord ( promise, constructor )
4313
4314 function CreatePromiseCapabilityRecord(promise, constructor) {
4315 // To keep Promise hermetic, this doesn't look much like the spec.
4316 console.assert(IsConstructor(constructor));
4317 var promiseCapability = {};
4318 set_internal(promiseCapability, '[[Promise]]', promise);
4319 set_internal(promiseCapability, '[[Resolve]]', undefined);
4320 set_internal(promiseCapability, '[[Reject]]', undefined);
4321 var executor = GetCapabilitiesExecutor();
4322 set_internal(executor, '[[Capability]]', promiseCapability);
4323
4324 // NOTE: Differs from spec; object is constructed here
4325 var constructorResult = promise = new constructor(executor);
4326 set_internal(promiseCapability, '[[Promise]]', promise);
4327
4328 if (!IsCallable(promiseCapability['[[Resolve]]'])) throw TypeError();
4329 if (!IsCallable(promiseCapability['[[Reject]]'])) throw TypeError();
4330 if (Type(constructorResult) === 'object' && !SameValue(promise, constructorResult)) throw TypeError();
4331 return promiseCapability;
4332 }
4333
4334 // 25.4.1.5.2 GetCapabilitiesExecutor Functions
4335
4336 function GetCapabilitiesExecutor() {
4337 var F = function(resolve, reject) {
4338 console.assert(F['[[Capability]]']);
4339 var promiseCapability = F['[[Capability]]'];
4340 if (promiseCapability['[[Resolve]]'] !== undefined) throw TypeError();
4341 if (promiseCapability['[[Reject]]'] !== undefined) throw TypeError();
4342 set_internal(promiseCapability, '[[Resolve]]', resolve);
4343 set_internal(promiseCapability, '[[Reject]]', reject);
4344 return undefined;
4345 };
4346 return F;
4347 }
4348
4349 // 25.4.1.6 IsPromise ( x )
4350
4351 function IsPromise(x) {
4352 if (Type(x) !== 'object') return false;
4353 if (!('[[PromiseState]]' in x)) return false;
4354 if (x['[[PromiseState]]'] === undefined) return false;
4355 return true;
4356 }
4357
4358 // 25.4.1.7 RejectPromise ( promise, reason )
4359
4360 function RejectPromise(promise, reason) {
4361 console.assert(promise['[[PromiseState]]'] === 'pending');
4362 var reactions = promise['[[PromiseRejectReactions]]'];
4363 set_internal(promise, '[[PromiseResult]]', reason);
4364 set_internal(promise, '[[PromiseFulfillReactions]]', undefined);
4365 set_internal(promise, '[[PromiseRejectReactions]]', undefined);
4366 set_internal(promise, '[[PromiseState]]', 'rejected');
4367 return TriggerPromiseReactions(reactions, reason);
4368 }
4369
4370 // 25.4.1.8 TriggerPromiseReactions ( reactions, argument )
4371
4372 function TriggerPromiseReactions(reactions, argument) {
4373 for (var i = 0, len = reactions.length; i < len; ++i)
4374 EnqueueJob('PromiseJobs', PromiseReactionJob, [reactions[i], argument]);
4375 return undefined;
4376 }
4377
4378 // 25.4.2 Promise Jobs
4379
4380 // 25.4.2.1 PromiseReactionJob ( reaction, argument )
4381
4382 function PromiseReactionJob(reaction, argument) {
4383 var promiseCapability = reaction['[[Capabilities]]'];
4384 var handler = reaction['[[Handler]]'];
4385 var handlerResult, status;
4386 try {
4387 if (handler === 'Identity') handlerResult = argument;
4388 else if (handler === 'Thrower') throw argument;
4389 else handlerResult = handler.call(undefined, argument);
4390 } catch (handlerResult) {
4391 status = promiseCapability['[[Reject]]'].call(undefined, handlerResult);
4392 NextJob(status); return;
4393 }
4394 status = promiseCapability['[[Resolve]]'].call(undefined, handlerResult);
4395 NextJob(status);
4396 }
4397
4398 // 25.4.2.2 PromiseResolveThenableJob ( promiseToResolve, thenable, then)
4399
4400 function PromiseResolveThenableJob(promiseToResolve, thenable, then) {
4401 // SPEC BUG: promise vs. promiseToResolve
4402 var resolvingFunctions = CreateResolvingFunctions(promiseToResolve);
4403 try {
4404 var thenCallResult = then.call(thenable, resolvingFunctions['[[Resolve]]'],
4405 resolvingFunctions['[[Reject]]']);
4406 } catch (thenCallResult) {
4407 var status = resolvingFunctions['[[Reject]]'].call(undefined, thenCallResult);
4408 NextJob(status); return;
4409 }
4410 NextJob(thenCallResult);
4411 }
4412
4413 // 25.4.3 The Promise Constructor
4414
4415 // 25.4.3.1 Promise ( executor )
4416
4417 function Promise(executor) {
4418 var config = { configurable: false, enumerable: false, writable: true, value: undefined };
4419 Object.defineProperty(this, '[[PromiseState]]', config);
4420 Object.defineProperty(this, '[[PromiseConstructor]]', config);
4421 Object.defineProperty(this, '[[PromiseResult]]', config);
4422 Object.defineProperty(this, '[[PromiseFulfillReactions]]', config);
4423 Object.defineProperty(this, '[[PromiseRejectReactions]]', config);
4424
4425 var promise = this;
4426 if (Type(promise) !== 'object') throw new TypeError();
4427 if (!('[[PromiseState]]' in promise)) throw TypeError();
4428 if (promise['[[PromiseState]]'] !== undefined) throw TypeError();
4429 if (!IsCallable(executor)) throw TypeError();
4430
4431 set_internal(promise, '[[PromiseConstructor]]', Promise);
4432
4433 return InitializePromise(promise, executor);
4434 }
4435
4436 // 25.4.3.1.1 InitializePromise ( promise, executor )
4437
4438 function InitializePromise(promise, executor) {
4439 console.assert('[[PromiseState]]' in promise);
4440 console.assert(IsCallable(executor));
4441 set_internal(promise, '[[PromiseState]]', 'pending');
4442 set_internal(promise, '[[PromiseFulfillReactions]]', []);
4443 set_internal(promise, '[[PromiseRejectReactions]]', []);
4444 var resolvingFunctions = CreateResolvingFunctions(promise);
4445 try {
4446 var completion = executor.call(undefined, resolvingFunctions['[[Resolve]]'],
4447 resolvingFunctions['[[Reject]]']);
4448 } catch (completion) {
4449 var status = resolvingFunctions['[[Reject]]'].call(undefined, completion);
4450 }
4451 return promise;
4452 }
4453
4454 // 25.4.4 Properties of the Promise Constructor
4455 // 25.4.4.1 Promise.all ( iterable )
4456
4457 define(Promise, 'all', function all(iterable) {
4458 var c = strict(this);
4459 var promiseCapability = NewPromiseCapability(c);
4460 try {
4461 var iterator = GetIterator(iterable);
4462 } catch (value) {
4463 promiseCapability['[[Reject]]'].call(undefined, value);
4464 return promiseCapability['[[Promise]]'];
4465 }
4466 var values = [];
4467 var remainingElementsCount = { value: 1 };
4468 var index = 0;
4469 while (true) {
4470 try {
4471 var next = IteratorStep(iterator);
4472 } catch (value) {
4473 promiseCapability['[[Reject]]'].call(undefined, value);
4474 return promiseCapability['[[Promise]]'];
4475 }
4476 if (!next) {
4477 remainingElementsCount.value -= 1;
4478 if (remainingElementsCount.value === 0) {
4479 var resolveResult = promiseCapability['[[Resolve]]'].apply(undefined, values);
4480
4481
4482 }
4483 return promiseCapability['[[Promise]]'];
4484 }
4485 try {
4486 var nextValue = IteratorValue(next);
4487 } catch (value) {
4488 promiseCapability['[[Reject]]'].call(undefined, value);
4489 return promiseCapability['[[Promise]]'];
4490 }
4491 try {
4492 var nextPromise = c.resolve(nextValue);
4493 } catch (value) {
4494 promiseCapability['[[Reject]]'].call(undefined, value);
4495 return promiseCapability['[[Promise]]'];
4496 }
4497 var resolveElement = PromiseAllResolveElementFunction();
4498 set_internal(resolveElement, '[[AlreadyCalled]]', { value: false });
4499 set_internal(resolveElement, '[[Index]]', index);
4500 set_internal(resolveElement, '[[Values]]', values);
4501 set_internal(resolveElement, '[[Capabilities]]', promiseCapability);
4502 set_internal(resolveElement, '[[RemainingElements]]', remainingElementsCount);
4503 remainingElementsCount.value += 1;
4504 try {
4505 var result = nextPromise.then(resolveElement, promiseCapability['[[Reject]]']);
4506 } catch (value) {
4507 promiseCapability['[[Reject]]'].call(undefined, value);
4508 return promiseCapability['[[Promise]]'];
4509 }
4510 index += 1;
4511 }
4512 });
4513
4514 // 25.4.4.1.1 Promise.all Resolve Element Functions
4515
4516 function PromiseAllResolveElementFunction() {
4517 var F = function(x) {
4518 var alreadyCalled = F['[[AlreadyCalled]]'];
4519 if (alreadyCalled.value) return undefined;
4520 alreadyCalled.value = true;
4521 var index = F['[[Index]]'];
4522 var values = F['[[Values]]'];
4523 var promiseCapability = F['[[Capabilities]]'];
4524 var remainingElementsCount = F['[[RemainingElements]]'];
4525 try {
4526 values[index] = x;
4527 } catch (result) {
4528 promiseCapability['[[Reject]]'].call(undefined, result);
4529 return promiseCapability['[[Promise]]'];
4530 }
4531 remainingElementsCount.value -= 1;
4532 if (remainingElementsCount.value === 0)
4533 return promiseCapability['[[Resolve]]'].call(undefined, values);
4534 return undefined;
4535 };
4536 return F;
4537 }
4538
4539 // 25.4.4.2 Promise.prototype
4540
4541 Promise.prototype = {};
4542
4543 // 25.4.4.3 Promise.race ( iterable )
4544
4545 define(Promise, 'race', function race(iterable) {
4546 var c = strict(this);
4547 var promiseCapability = NewPromiseCapability(c);
4548 try {
4549 var iterator = GetIterator(iterable);
4550 } catch (value) {
4551 promiseCapability['[[Reject]]'].call(undefined, value);
4552 return promiseCapability['[[Promise]]'];
4553 }
4554 while (true) {
4555 try {
4556 var next = IteratorStep(iterator);
4557 } catch (value) {
4558 promiseCapability['[[Reject]]'].call(undefined, value);
4559 return promiseCapability['[[Promise]]'];
4560 }
4561 if (!next) return promiseCapability['[[Promise]]'];
4562 try {
4563 var nextValue = IteratorValue(next);
4564 } catch (value) {
4565 promiseCapability['[[Reject]]'].call(undefined, value);
4566 return promiseCapability['[[Promise]]'];
4567 }
4568 try {
4569 var nextPromise = c.resolve(nextValue);
4570 } catch (value) {
4571 promiseCapability['[[Reject]]'].call(undefined, value);
4572 return promiseCapability['[[Promise]]'];
4573 }
4574 try {
4575 nextPromise.then(promiseCapability['[[Resolve]]'], promiseCapability['[[Reject]]']);
4576 } catch (value) {
4577 promiseCapability['[[Reject]]'].call(undefined, value);
4578 return promiseCapability['[[Promise]]'];
4579 }
4580 }
4581 });
4582
4583 // 25.4.4.4 Promise.reject ( r )
4584
4585 define(Promise, 'reject', function reject(r) {
4586 var c = strict(this);
4587 var promiseCapability = NewPromiseCapability(c);
4588 var rejectResult = promiseCapability['[[Reject]]'].call(undefined, r);
4589 return promiseCapability['[[Promise]]'];
4590 });
4591
4592 // 25.4.4.5 Promise.resolve ( x )
4593
4594 define(Promise, 'resolve', function resolve(x) {
4595 var c = strict(this);
4596 if (IsPromise(x)) {
4597 var constructor = x['[[PromiseConstructor]]'];
4598 if (SameValue(constructor, c)) return x;
4599 }
4600 var promiseCapability = NewPromiseCapability(c);
4601 var resolveResult = promiseCapability['[[Resolve]]'].call(undefined, x);
4602 return promiseCapability['[[Promise]]'];
4603 });
4604
4605 // 25.4.4.6 Promise [ @@create ] ( )
4606 // 25.4.4.6.1 AllocatePromise ( constructor )
4607 // 25.4.5 Properties of the Promise Prototype Object
4608 // 25.4.5.1 Promise.prototype.catch ( onRejected )
4609
4610 define(Promise.prototype, 'catch', function catch_(onRejected) {
4611 var promise = this;
4612 return promise.then(undefined, onRejected);
4613 });
4614
4615 // 25.4.5.2 Promise.prototype.constructor
4616
4617 Promise.prototype.constructor = Promise;
4618
4619 // 25.4.5.3 Promise.prototype.then ( onFulfilled , onRejected )
4620
4621 define(Promise.prototype, 'then', function then(onFulfilled, onRejected) {
4622 var promise = this;
4623 if (!IsPromise(promise)) throw TypeError();
4624 if (!IsCallable(onFulfilled)) onFulfilled = 'Identity';
4625 if (!IsCallable(onRejected)) onRejected = 'Thrower';
4626 var c = promise.constructor;
4627 var promiseCapability = NewPromiseCapability(c);
4628 var fulfillReaction = { '[[Capabilities]]': promiseCapability,
4629 '[[Handler]]': onFulfilled };
4630 var rejectReaction = { '[[Capabilities]]': promiseCapability,
4631 '[[Handler]]': onRejected };
4632 if (promise['[[PromiseState]]'] === 'pending') {
4633 promise['[[PromiseFulfillReactions]]'].push(fulfillReaction);
4634 promise['[[PromiseRejectReactions]]'].push(rejectReaction);
4635 } else if (promise['[[PromiseState]]'] === 'fulfilled') {
4636 var value = promise['[[PromiseResult]]'];
4637 EnqueueJob('PromiseJobs', PromiseReactionJob, [fulfillReaction, value]);
4638 } else if (promise['[[PromiseState]]'] === 'rejected') {
4639 var reason = promise['[[PromiseResult]]'];
4640 EnqueueJob('PromiseJobs', PromiseReactionJob, [rejectReaction, reason]);
4641 }
4642 return promiseCapability['[[Promise]]'];
4643 });
4644
4645 // 25.4.6 Properties of Promise Instances
4646
4647 if (!('Promise' in global) || OVERRIDE_NATIVE_FOR_TESTING)
4648 global.Promise = Promise;
4649
4650 // Patch early Promise.cast vs. Promise.resolve implementations
4651 if ('cast' in global.Promise) global.Promise.resolve = global.Promise.cast;
4652 }());
4653
4654 // 25.4.5.1 Promise.prototype [ @@toStringTag ]
4655 define(Promise.prototype, $$toStringTag, 'Promise');
4656
4657 // ---------------------------------------
4658 // 26 Reflection
4659 // ---------------------------------------
4660
4661 (function() {
4662 // 26.1 The Reflect Object
4663 if (!('Reflect' in global) || OVERRIDE_NATIVE_FOR_TESTING)
4664 global.Reflect = {};
4665
4666 // 26.1.1 Reflect.apply ( target, thisArgument, argumentsList )
4667 define(
4668 Reflect, 'apply',
4669 function apply(target, thisArgument, argumentsList) {
4670 if (!IsCallable(target)) throw TypeError();
4671 return Function.prototype.apply.call(target, thisArgument, argumentsList);
4672 });
4673
4674 // 26.1.2 Reflect.construct ( target, argumentsList [, newTarget] )
4675 define(
4676 Reflect, 'construct',
4677 function construct(target, argumentsList) {
4678 return __cons(target, argumentsList);
4679 });
4680
4681 // 26.1.3 Reflect.defineProperty ( target, propertyKey, attributes )
4682 define(
4683 Reflect, 'defineProperty',
4684 function defineProperty(target, propertyKey, attributes) {
4685 try {
4686 Object.defineProperty(target, propertyKey, attributes);
4687 return true;
4688 } catch (_) {
4689 return false;
4690 }
4691 });
4692
4693 // 26.1.4 Reflect.deleteProperty ( target, propertyKey )
4694 define(
4695 Reflect, 'deleteProperty',
4696 function deleteProperty(target,name) {
4697 try {
4698 delete target[name];
4699 return !HasOwnProperty(target, name);
4700 } catch (_) {
4701 return false;
4702 }
4703 });
4704
4705 // 26.1.5 Reflect.enumerate ( target )
4706 define(
4707 Reflect, 'enumerate',
4708 function enumerate(target) {
4709 target = ToObject(target);
4710 var iterator = Enumerate(target);
4711 return iterator;
4712 });
4713
4714 // 26.1.6 Reflect.get ( target, propertyKey [ , receiver ])
4715 define(
4716 Reflect, 'get',
4717 function get(target, name, receiver) {
4718 target = ToObject(target);
4719 name = String(name);
4720 receiver = (receiver === undefined) ? target : ToObject(receiver);
4721 var desc = getPropertyDescriptor(target, name);
4722 if (desc && 'get' in desc)
4723 return Function.prototype.call.call(desc['get'], receiver);
4724 return target[name];
4725 });
4726
4727 // 26.1.7 Reflect.getOwnPropertyDescriptor ( target, propertyKey )
4728 define(
4729 Reflect, 'getOwnPropertyDescriptor',
4730 Object.getOwnPropertyDescriptor);
4731
4732 // 26.1.8 Reflect.getPrototypeOf ( target )
4733 define(
4734 Reflect, 'getPrototypeOf',
4735 Object.getPrototypeOf);
4736
4737 // 26.1.9 Reflect.has ( target, propertyKey )
4738 define(
4739 Reflect, 'has',
4740 function has(target,name) {
4741 return String(name) in ToObject(target);
4742 });
4743
4744 // 26.1.10 Reflect.isExtensible (target)
4745 define(
4746 Reflect, 'isExtensible',
4747 Object.isExtensible);
4748
4749 // 26.1.11 Reflect.ownKeys ( target )
4750 define(
4751 Reflect, 'ownKeys',
4752 function ownKeys(target) {
4753 var obj = ToObject(target);
4754 return Object.getOwnPropertyNames(obj);
4755 });
4756
4757 // 26.1.12 Reflect.preventExtensions ( target )
4758 define(
4759 Reflect, 'preventExtensions',
4760 function preventExtensions(target) {
4761 try { Object.preventExtensions(target); return true; } catch (_) { return false; }
4762 });
4763
4764 // 26.1.13 Reflect.set ( target, propertyKey, V [ , receiver ] )
4765 define(
4766 Reflect, 'set',
4767 function set(target, name, value, receiver) {
4768 target = ToObject(target);
4769 name = String(name);
4770 receiver = (receiver === undefined) ? target : ToObject(receiver);
4771 var desc = getPropertyDescriptor(target, name);
4772 try {
4773 if (desc && 'set' in desc)
4774 Function.prototype.call.call(desc['set'], receiver, value);
4775 else
4776 target[name] = value;
4777 return true;
4778 } catch (_) {
4779 return false;
4780 }
4781 });
4782
4783 // 26.1.14 Reflect.setPrototypeOf ( target, proto )
4784 define(
4785 Reflect, 'setPrototypeOf',
4786 function setPrototypeOf(target, proto) {
4787 try {
4788 target.__proto__ = proto;
4789 return Reflect.getPrototypeOf(target) === proto;
4790 } catch(_) {
4791 return false;
4792 }
4793 });
4794
4795 }());
4796
4797 // ---------------------------------------
4798 // 26.2 Proxy Objects
4799 // ---------------------------------------
4800
4801 // Not polyfillable.
4802
4803}(self));
4804
4805// This helper is defined outside the main scope so that the use of
4806// 'eval' does not taint the scope for minifiers.
4807function __cons(t, a) {
4808 return eval('new t(' + a.map(function(_, i) { return 'a[' + i + ']'; }).join(',') + ')');
4809}
6e0f24b1
IC
4810</script>
4811 <script>(function (root) {
4812 "use strict";
4813
4814/***** unorm.js *****/
4815
4816/*
4817 * UnicodeNormalizer 1.0.0
4818 * Copyright (c) 2008 Matsuza
4819 * Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses.
4820 * $Date: 2008-06-05 16:44:17 +0200 (Thu, 05 Jun 2008) $
4821 * $Rev: 13309 $
4822 */
4823
4824 var DEFAULT_FEATURE = [null, 0, {}];
4825 var CACHE_THRESHOLD = 10;
4826 var SBase = 0xAC00, LBase = 0x1100, VBase = 0x1161, TBase = 0x11A7, LCount = 19, VCount = 21, TCount = 28;
4827 var NCount = VCount * TCount; // 588
4828 var SCount = LCount * NCount; // 11172
4829
4830 var UChar = function(cp, feature){
4831 this.codepoint = cp;
4832 this.feature = feature;
4833 };
4834
4835 // Strategies
4836 var cache = {};
4837 var cacheCounter = [];
4838 for (var i = 0; i <= 0xFF; ++i){
4839 cacheCounter[i] = 0;
4840 }
4841
4842 function fromCache(next, cp, needFeature){
4843 var ret = cache[cp];
4844 if(!ret){
4845 ret = next(cp, needFeature);
4846 if(!!ret.feature && ++cacheCounter[(cp >> 8) & 0xFF] > CACHE_THRESHOLD){
4847 cache[cp] = ret;
4848 }
4849 }
4850 return ret;
4851 }
4852
4853 function fromData(next, cp, needFeature){
4854 var hash = cp & 0xFF00;
4855 var dunit = UChar.udata[hash] || {};
4856 var f = dunit[cp];
4857 return f ? new UChar(cp, f) : new UChar(cp, DEFAULT_FEATURE);
4858 }
4859 function fromCpOnly(next, cp, needFeature){
4860 return !!needFeature ? next(cp, needFeature) : new UChar(cp, null);
4861 }
4862 function fromRuleBasedJamo(next, cp, needFeature){
4863 var j;
4864 if(cp < LBase || (LBase + LCount <= cp && cp < SBase) || (SBase + SCount < cp)){
4865 return next(cp, needFeature);
4866 }
4867 if(LBase <= cp && cp < LBase + LCount){
4868 var c = {};
4869 var base = (cp - LBase) * VCount;
4870 for (j = 0; j < VCount; ++j){
4871 c[VBase + j] = SBase + TCount * (j + base);
4872 }
4873 return new UChar(cp, [,,c]);
4874 }
4875
4876 var SIndex = cp - SBase;
4877 var TIndex = SIndex % TCount;
4878 var feature = [];
4879 if(TIndex !== 0){
4880 feature[0] = [SBase + SIndex - TIndex, TBase + TIndex];
4881 } else {
4882 feature[0] = [LBase + Math.floor(SIndex / NCount), VBase + Math.floor((SIndex % NCount) / TCount)];
4883 feature[2] = {};
4884 for (j = 1; j < TCount; ++j){
4885 feature[2][TBase + j] = cp + j;
4886 }
4887 }
4888 return new UChar(cp, feature);
4889 }
4890 function fromCpFilter(next, cp, needFeature){
4891 return cp < 60 || 13311 < cp && cp < 42607 ? new UChar(cp, DEFAULT_FEATURE) : next(cp, needFeature);
4892 }
4893
4894 var strategies = [fromCpFilter, fromCache, fromCpOnly, fromRuleBasedJamo, fromData];
4895
4896 UChar.fromCharCode = strategies.reduceRight(function (next, strategy) {
4897 return function (cp, needFeature) {
4898 return strategy(next, cp, needFeature);
4899 };
4900 }, null);
4901
4902 UChar.isHighSurrogate = function(cp){
4903 return cp >= 0xD800 && cp <= 0xDBFF;
4904 };
4905 UChar.isLowSurrogate = function(cp){
4906 return cp >= 0xDC00 && cp <= 0xDFFF;
4907 };
4908
4909 UChar.prototype.prepFeature = function(){
4910 if(!this.feature){
4911 this.feature = UChar.fromCharCode(this.codepoint, true).feature;
4912 }
4913 };
4914
4915 UChar.prototype.toString = function(){
4916 if(this.codepoint < 0x10000){
4917 return String.fromCharCode(this.codepoint);
4918 } else {
4919 var x = this.codepoint - 0x10000;
4920 return String.fromCharCode(Math.floor(x / 0x400) + 0xD800, x % 0x400 + 0xDC00);
4921 }
4922 };
4923
4924 UChar.prototype.getDecomp = function(){
4925 this.prepFeature();
4926 return this.feature[0] || null;
4927 };
4928
4929 UChar.prototype.isCompatibility = function(){
4930 this.prepFeature();
4931 return !!this.feature[1] && (this.feature[1] & (1 << 8));
4932 };
4933 UChar.prototype.isExclude = function(){
4934 this.prepFeature();
4935 return !!this.feature[1] && (this.feature[1] & (1 << 9));
4936 };
4937 UChar.prototype.getCanonicalClass = function(){
4938 this.prepFeature();
4939 return !!this.feature[1] ? (this.feature[1] & 0xff) : 0;
4940 };
4941 UChar.prototype.getComposite = function(following){
4942 this.prepFeature();
4943 if(!this.feature[2]){
4944 return null;
4945 }
4946 var cp = this.feature[2][following.codepoint];
4947 return cp ? UChar.fromCharCode(cp) : null;
4948 };
4949
4950 var UCharIterator = function(str){
4951 this.str = str;
4952 this.cursor = 0;
4953 };
4954 UCharIterator.prototype.next = function(){
4955 if(!!this.str && this.cursor < this.str.length){
4956 var cp = this.str.charCodeAt(this.cursor++);
4957 var d;
4958 if(UChar.isHighSurrogate(cp) && this.cursor < this.str.length && UChar.isLowSurrogate((d = this.str.charCodeAt(this.cursor)))){
4959 cp = (cp - 0xD800) * 0x400 + (d -0xDC00) + 0x10000;
4960 ++this.cursor;
4961 }
4962 return UChar.fromCharCode(cp);
4963 } else {
4964 this.str = null;
4965 return null;
4966 }
4967 };
4968
4969 var RecursDecompIterator = function(it, cano){
4970 this.it = it;
4971 this.canonical = cano;
4972 this.resBuf = [];
4973 };
4974
4975 RecursDecompIterator.prototype.next = function(){
4976 function recursiveDecomp(cano, uchar){
4977 var decomp = uchar.getDecomp();
4978 if(!!decomp && !(cano && uchar.isCompatibility())){
4979 var ret = [];
4980 for(var i = 0; i < decomp.length; ++i){
4981 var a = recursiveDecomp(cano, UChar.fromCharCode(decomp[i]));
4982 ret = ret.concat(a);
4983 }
4984 return ret;
4985 } else {
4986 return [uchar];
4987 }
4988 }
4989 if(this.resBuf.length === 0){
4990 var uchar = this.it.next();
4991 if(!uchar){
4992 return null;
4993 }
4994 this.resBuf = recursiveDecomp(this.canonical, uchar);
4995 }
4996 return this.resBuf.shift();
4997 };
4998
4999 var DecompIterator = function(it){
5000 this.it = it;
5001 this.resBuf = [];
5002 };
5003
5004 DecompIterator.prototype.next = function(){
5005 var cc;
5006 if(this.resBuf.length === 0){
5007 do{
5008 var uchar = this.it.next();
5009 if(!uchar){
5010 break;
5011 }
5012 cc = uchar.getCanonicalClass();
5013 var inspt = this.resBuf.length;
5014 if(cc !== 0){
5015 for(; inspt > 0; --inspt){
5016 var uchar2 = this.resBuf[inspt - 1];
5017 var cc2 = uchar2.getCanonicalClass();
5018 if(cc2 <= cc){
5019 break;
5020 }
5021 }
5022 }
5023 this.resBuf.splice(inspt, 0, uchar);
5024 } while(cc !== 0);
5025 }
5026 return this.resBuf.shift();
5027 };
5028
5029 var CompIterator = function(it){
5030 this.it = it;
5031 this.procBuf = [];
5032 this.resBuf = [];
5033 this.lastClass = null;
5034 };
5035
5036 CompIterator.prototype.next = function(){
5037 while(this.resBuf.length === 0){
5038 var uchar = this.it.next();
5039 if(!uchar){
5040 this.resBuf = this.procBuf;
5041 this.procBuf = [];
5042 break;
5043 }
5044 if(this.procBuf.length === 0){
5045 this.lastClass = uchar.getCanonicalClass();
5046 this.procBuf.push(uchar);
5047 } else {
5048 var starter = this.procBuf[0];
5049 var composite = starter.getComposite(uchar);
5050 var cc = uchar.getCanonicalClass();
5051 if(!!composite && (this.lastClass < cc || this.lastClass === 0)){
5052 this.procBuf[0] = composite;
5053 } else {
5054 if(cc === 0){
5055 this.resBuf = this.procBuf;
5056 this.procBuf = [];
5057 }
5058 this.lastClass = cc;
5059 this.procBuf.push(uchar);
5060 }
5061 }
5062 }
5063 return this.resBuf.shift();
5064 };
5065
5066 var createIterator = function(mode, str){
5067 switch(mode){
5068 case "NFD":
5069 return new DecompIterator(new RecursDecompIterator(new UCharIterator(str), true));
5070 case "NFKD":
5071 return new DecompIterator(new RecursDecompIterator(new UCharIterator(str), false));
5072 case "NFC":
5073 return new CompIterator(new DecompIterator(new RecursDecompIterator(new UCharIterator(str), true)));
5074 case "NFKC":
5075 return new CompIterator(new DecompIterator(new RecursDecompIterator(new UCharIterator(str), false)));
5076 }
5077 throw mode + " is invalid";
5078 };
5079 var normalize = function(mode, str){
5080 var it = createIterator(mode, str);
5081 var ret = "";
5082 var uchar;
5083 while(!!(uchar = it.next())){
5084 ret += uchar.toString();
5085 }
5086 return ret;
5087 };
5088
5089 /* API functions */
5090 function nfd(str){
5091 return normalize("NFD", str);
5092 }
5093
5094 function nfkd(str){
5095 return normalize("NFKD", str);
5096 }
5097
5098 function nfc(str){
5099 return normalize("NFC", str);
5100 }
5101
5102 function nfkc(str){
5103 return normalize("NFKC", str);
5104 }
5105
5106/* Unicode data */
5107UChar.udata={
51080:{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]]},
5109256:{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]},
5110512:{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]},
5111768:{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]},
51121024:{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]]},
51131280:{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]},
51141536:{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]},
51151792:{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]},
51162048:{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]},
51172304:{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]},
51182560:{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]},
51192816:{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]},
51203072:{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]},
51213328:{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]]},
51223584:{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]},
51233840:{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]},
51244096:{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]},
51254352:{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]},
51264608:{70197:[,9],70198:[,7],70377:[,7],70378:[,9]},
51274864:{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]},
51285120:{70841:[,,{70832:70844,70842:70843,70845:70846}],70843:[[70841,70842]],70844:[[70841,70832]],70846:[[70841,70845]],70850:[,9],70851:[,7]},
51295376:{71096:[,,{71087:71098}],71097:[,,{71087:71099}],71098:[[71096,71087]],71099:[[71097,71087]],71103:[,9],71104:[,7]},
51305632:{71231:[,9],71350:[,9],71351:[,7]},
51315888:{5908:[,9],5940:[,9],6098:[,9],6109:[,230]},
51326144:{6313:[,228]},
51336400:{6457:[,222],6458:[,230],6459:[,220]},
51346656:{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]},
51356912:{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]},
51367168:{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]},
51377424:{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]},
51387680:{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]]},
51397936:{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}]},
51408192:{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]},
51418448:{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}]},
51428704:{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]]},
51438960:{9001:[[12296]],9002:[[12297]]},
51449216:{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]},
514510752:{10764:[[8747,8747,8747,8747],256],10868:[[58,58,61],256],10869:[[61,61],256],10870:[[61,61,61],256],10972:[[10973,824],512]},
514611264:{11388:[[106],256],11389:[[86],256],11503:[,230],11504:[,230],11505:[,230]},
514711520:{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]},
514811776:{11935:[[27597],256],12019:[[40863],256]},
514912032:{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]},
515012288:{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]},
515112544:{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]},
515212800:{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]},
515313056:{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]},
515427136:{92912:[,1],92913:[,1],92914:[,1],92915:[,1],92916:[,1]},
515527392:{92976:[,230],92977:[,230],92978:[,230],92979:[,230],92980:[,230],92981:[,230],92982:[,230]},
515642496:{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]},
515742752:{42864:[[42863],256],43000:[[294],256],43001:[[339],256]},
515843008:{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]},
515943264:{43307:[,220],43308:[,220],43309:[,220],43347:[,9],43443:[,7],43456:[,9]},
516043520:{43696:[,230],43698:[,230],43699:[,230],43700:[,220],43703:[,230],43704:[,230],43710:[,230],43711:[,230],43713:[,230],43766:[,9]},
516143776:{43868:[[42791],256],43869:[[43831],256],43870:[[619],256],43871:[[43858],256],44013:[,9]},
516248128:{113822:[,1]},
516353504:{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]},
516453760:{119362:[,230],119363:[,230],119364:[,230]},
516554272:{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]},
516654528:{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]},
516754784:{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]},
516855040:{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]},
516959392:{125136:[,220],125137:[,220],125138:[,220],125139:[,220],125140:[,220],125141:[,220],125142:[,220]},
517060928:{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]},
517161696:{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]},
517261952:{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]},
517363488:{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]]},
517463744:{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]]},
517564000:{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]]},
517664256:{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]},
517764512:{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]},
517864768:{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]},
517965024:{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]},
518065280:{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]}
5181
5182};
5183
5184 /***** Module to export */
5185 var unorm = {
5186 nfc: nfc,
5187 nfd: nfd,
5188 nfkc: nfkc,
5189 nfkd: nfkd
5190 };
5191
5192 /*globals module:true,define:true*/
5193
5194 // CommonJS
5195 if (typeof module === "object") {
5196 module.exports = unorm;
5197
5198 // AMD
5199 } else if (typeof define === "function" && define.amd) {
5200 define("unorm", function () {
5201 return unorm;
5202 });
5203
5204 // Global
5205 } else {
5206 root.unorm = unorm;
5207 }
5208
5209 /***** Export as shim for String::normalize method *****/
5210 /*
5211 http://wiki.ecmascript.org/doku.php?id=harmony:specification_drafts#november_8_2013_draft_rev_21
5212
5213 21.1.3.12 String.prototype.normalize(form="NFC")
5214 When the normalize method is called with one argument form, the following steps are taken:
5215
5216 1. Let O be CheckObjectCoercible(this value).
5217 2. Let S be ToString(O).
5218 3. ReturnIfAbrupt(S).
5219 4. If form is not provided or undefined let form be "NFC".
5220 5. Let f be ToString(form).
5221 6. ReturnIfAbrupt(f).
5222 7. If f is not one of "NFC", "NFD", "NFKC", or "NFKD", then throw a RangeError Exception.
5223 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.
5224 9. Return ns.
5225
5226 The length property of the normalize method is 0.
5227
5228 *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.
5229 */
5230 unorm.shimApplied = false;
5231
5232 if (!String.prototype.normalize) {
5233 String.prototype.normalize = function(form) {
5234 var str = "" + this;
5235 form = form === undefined ? "NFC" : form;
5236
5237 if (form === "NFC") {
5238 return unorm.nfc(str);
5239 } else if (form === "NFD") {
5240 return unorm.nfd(str);
5241 } else if (form === "NFKC") {
5242 return unorm.nfkc(str);
5243 } else if (form === "NFKD") {
5244 return unorm.nfkd(str);
5245 } else {
5246 throw new RangeError("Invalid normalization form: " + form);
5247 }
5248 };
5249
5250 unorm.shimApplied = true;
5251 }
5252}(this));
8b095871
IC
5253</script>
5254 <script>/*! jQuery v2.1.1 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */
5255!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)
5256},_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))
5257},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});
5258</script>
5259 <script>/*!
5260 * Bootstrap v3.2.0 (http://getbootstrap.com)
5261 * Copyright 2011-2014 Twitter, Inc.
5262 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
5263 */
5264if("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>
5265 <script>(function() {
5266 'use strict';
5267
5268 /**
5269 * Extend an Object with another Object's properties.
5270 *
5271 * The source objects are specified as additional arguments.
5272 *
5273 * @param dst Object the object to extend.
5274 *
5275 * @return Object the final object.
5276 */
5277 var _extend = function(dst) {
5278 var sources = Array.prototype.slice.call(arguments, 1);
5279 for (var i=0; i<sources.length; ++i) {
5280 var src = sources[i];
5281 for (var p in src) {
5282 if (src.hasOwnProperty(p)) dst[p] = src[p];
5283 }
5284 }
5285 return dst;
5286 };
5287
5288
5289 /**
5290 * Defer execution of given function.
5291 * @param {Function} func
5292 */
5293 var _defer = function(func) {
5294 if (typeof setImmediate === 'function') {
5295 return setImmediate(func);
5296 } else {
5297 return setTimeout(func, 0);
5298 }
5299 };
5300
5301 /**
5302 * Based on the algorithm at http://en.wikipedia.org/wiki/Levenshtein_distance.
5303 */
5304 var Levenshtein = {
5305 /**
5306 * Calculate levenshtein distance of the two strings.
5307 *
5308 * @param str1 String the first string.
5309 * @param str2 String the second string.
5310 * @return Integer the levenshtein distance (0 and above).
5311 */
5312 get: function(str1, str2) {
5313 // base cases
5314 if (str1 === str2) return 0;
5315 if (str1.length === 0) return str2.length;
5316 if (str2.length === 0) return str1.length;
5317
5318 // two rows
5319 var prevRow = new Array(str2.length + 1),
5320 curCol, nextCol, i, j, tmp;
5321
5322 // initialise previous row
5323 for (i=0; i<prevRow.length; ++i) {
5324 prevRow[i] = i;
5325 }
5326
5327 // calculate current row distance from previous row
5328 for (i=0; i<str1.length; ++i) {
5329 nextCol = i + 1;
5330
5331 for (j=0; j<str2.length; ++j) {
5332 curCol = nextCol;
5333
5334 // substution
5335 nextCol = prevRow[j] + ( (str1.charAt(i) === str2.charAt(j)) ? 0 : 1 );
5336 // insertion
5337 tmp = curCol + 1;
5338 if (nextCol > tmp) {
5339 nextCol = tmp;
5340 }
5341 // deletion
5342 tmp = prevRow[j + 1] + 1;
5343 if (nextCol > tmp) {
5344 nextCol = tmp;
5345 }
5346
5347 // copy current col value into previous (in preparation for next iteration)
5348 prevRow[j] = curCol;
5349 }
5350
5351 // copy last col value into previous (in preparation for next iteration)
5352 prevRow[j] = nextCol;
5353 }
5354
5355 return nextCol;
5356 },
5357
5358 /**
5359 * Asynchronously calculate levenshtein distance of the two strings.
5360 *
5361 * @param str1 String the first string.
5362 * @param str2 String the second string.
5363 * @param cb Function callback function with signature: function(Error err, int distance)
5364 * @param [options] Object additional options.
5365 * @param [options.progress] Function progress callback with signature: function(percentComplete)
5366 */
5367 getAsync: function(str1, str2, cb, options) {
5368 options = _extend({}, {
5369 progress: null
5370 }, options);
5371
5372 // base cases
5373 if (str1 === str2) return cb(null, 0);
5374 if (str1.length === 0) return cb(null, str2.length);
5375 if (str2.length === 0) return cb(null, str1.length);
5376
5377 // two rows
5378 var prevRow = new Array(str2.length + 1),
5379 curCol, nextCol,
5380 i, j, tmp,
5381 startTime, currentTime;
5382
5383 // initialise previous row
5384 for (i=0; i<prevRow.length; ++i) {
5385 prevRow[i] = i;
5386 }
5387
5388 nextCol = 1;
5389 i = 0;
5390 j = -1;
5391
5392 var __calculate = function() {
5393 // reset timer
5394 startTime = new Date().valueOf();
5395 currentTime = startTime;
5396
5397 // keep going until one second has elapsed
5398 while (currentTime - startTime < 1000) {
5399 // reached end of current row?
5400 if (str2.length <= (++j)) {
5401 // copy current into previous (in preparation for next iteration)
5402 prevRow[j] = nextCol;
5403
5404 // if already done all chars
5405 if (str1.length <= (++i)) {
5406 return cb(null, nextCol);
5407 }
5408 // else if we have more left to do
5409 else {
5410 nextCol = i + 1;
5411 j = 0;
5412 }
5413 }
5414
5415 // calculation
5416 curCol = nextCol;
5417
5418 // substution
5419 nextCol = prevRow[j] + ( (str1.charAt(i) === str2.charAt(j)) ? 0 : 1 );
5420 // insertion
5421 tmp = curCol + 1;
5422 if (nextCol > tmp) {
5423 nextCol = tmp;
5424 }
5425 // deletion
5426 tmp = prevRow[j + 1] + 1;
5427 if (nextCol > tmp) {
5428 nextCol = tmp;
5429 }
5430
5431 // copy current into previous (in preparation for next iteration)
5432 prevRow[j] = curCol;
5433
5434 // get current time
5435 currentTime = new Date().valueOf();
5436 }
5437
5438 // send a progress update?
5439 if (null !== options.progress) {
5440 try {
5441 options.progress.call(null, (i * 100.0/ str1.length));
5442 } catch (err) {
5443 return cb('Progress callback: ' + err.toString());
5444 }
5445 }
5446
5447 // next iteration
5448 _defer(__calculate);
5449 };
5450
5451 __calculate();
5452 }
5453
5454 };
5455
5456 // amd
5457 if (typeof define !== "undefined" && define !== null && define.amd) {
5458 define(function() {
5459 return Levenshtein;
5460 });
5461 }
5462 // commonjs
5463 else if (typeof module !== "undefined" && module !== null && typeof exports !== "undefined" && module.exports === exports) {
5464 module.exports = Levenshtein;
5465 }
5466 // web worker
5467 else if (typeof self !== "undefined" && typeof self.postMessage === 'function' && typeof self.importScripts === 'function') {
5468 self.Levenshtein = Levenshtein;
5469 }
5470 // browser main thread
5471 else if (typeof window !== "undefined" && window !== null) {
5472 window.Levenshtein = Levenshtein;
5473 }
5474}());
5475
5476</script>
5477 <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},
5478write: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;
5479for(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-
54807,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]=
54810<=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},
5482setupTimingPattern: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=
5483j.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-
5484b-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,
5485c),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=
54860,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&&
5487(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,
548878,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)-
5489j.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:"+
5490a);}},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:"+
5491a);}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+
54922)&&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),
5493LOG_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>
5494this.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],
5495[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,
5496116],[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,
549743,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,
54983,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,
549955,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,
550045,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*
5501(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,
5502correctLevel: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),
5503j=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",
5504d+"px").css("background-color",a.isDark(e,i)?h.foreground:h.background).appendTo(f)}}a=c;$(a).appendTo(this)})}})($);
5505</script>
5506 <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){
5507// (public) Constructor
5508function BigInteger(a, b, c) {
5509 if (!(this instanceof BigInteger))
5510 return new BigInteger(a, b, c)
5511
5512 if (a != null) {
5513 if ("number" == typeof a) this.fromNumber(a, b, c)
5514 else if (b == null && "string" != typeof a) this.fromString(a, 256)
5515 else this.fromString(a, b)
5516 }
5517}
5518
5519var proto = BigInteger.prototype
5520
5521// duck-typed isBigInteger
5522proto.__bigi = require('../package.json').version
5523BigInteger.isBigInteger = function (obj, check_ver) {
5524 return obj && obj.__bigi && (!check_ver || obj.__bigi === proto.__bigi)
5525}
5526
5527// Bits per digit
5528var dbits
5529
5530// am: Compute w_j += (x*this_i), propagate carries,
5531// c is initial carry, returns final carry.
5532// c < 3*dvalue, x < 2*dvalue, this_i < dvalue
5533// We need to select the fastest one that works in this environment.
5534
5535// am1: use a single mult and divide to get the high bits,
5536// max digit bits should be 26 because
5537// max internal value = 2*dvalue^2-2*dvalue (< 2^53)
5538function am1(i, x, w, j, c, n) {
5539 while (--n >= 0) {
5540 var v = x * this[i++] + w[j] + c
5541 c = Math.floor(v / 0x4000000)
5542 w[j++] = v & 0x3ffffff
5543 }
5544 return c
5545}
5546// am2 avoids a big mult-and-extract completely.
5547// Max digit bits should be <= 30 because we do bitwise ops
5548// on values up to 2*hdvalue^2-hdvalue-1 (< 2^31)
5549function am2(i, x, w, j, c, n) {
5550 var xl = x & 0x7fff,
5551 xh = x >> 15
5552 while (--n >= 0) {
5553 var l = this[i] & 0x7fff
5554 var h = this[i++] >> 15
5555 var m = xh * l + h * xl
5556 l = xl * l + ((m & 0x7fff) << 15) + w[j] + (c & 0x3fffffff)
5557 c = (l >>> 30) + (m >>> 15) + xh * h + (c >>> 30)
5558 w[j++] = l & 0x3fffffff
5559 }
5560 return c
5561}
5562// Alternately, set max digit bits to 28 since some
5563// browsers slow down when dealing with 32-bit numbers.
5564function am3(i, x, w, j, c, n) {
5565 var xl = x & 0x3fff,
5566 xh = x >> 14
5567 while (--n >= 0) {
5568 var l = this[i] & 0x3fff
5569 var h = this[i++] >> 14
5570 var m = xh * l + h * xl
5571 l = xl * l + ((m & 0x3fff) << 14) + w[j] + c
5572 c = (l >> 28) + (m >> 14) + xh * h
5573 w[j++] = l & 0xfffffff
5574 }
5575 return c
5576}
5577
5578// wtf?
5579BigInteger.prototype.am = am1
5580dbits = 26
5581
5582BigInteger.prototype.DB = dbits
5583BigInteger.prototype.DM = ((1 << dbits) - 1)
5584var DV = BigInteger.prototype.DV = (1 << dbits)
5585
5586var BI_FP = 52
5587BigInteger.prototype.FV = Math.pow(2, BI_FP)
5588BigInteger.prototype.F1 = BI_FP - dbits
5589BigInteger.prototype.F2 = 2 * dbits - BI_FP
5590
5591// Digit conversions
5592var BI_RM = "0123456789abcdefghijklmnopqrstuvwxyz"
5593var BI_RC = new Array()
5594var rr, vv
5595rr = "0".charCodeAt(0)
5596for (vv = 0; vv <= 9; ++vv) BI_RC[rr++] = vv
5597rr = "a".charCodeAt(0)
5598for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv
5599rr = "A".charCodeAt(0)
5600for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv
5601
5602function int2char(n) {
5603 return BI_RM.charAt(n)
5604}
5605
5606function intAt(s, i) {
5607 var c = BI_RC[s.charCodeAt(i)]
5608 return (c == null) ? -1 : c
5609}
5610
5611// (protected) copy this to r
5612function bnpCopyTo(r) {
5613 for (var i = this.t - 1; i >= 0; --i) r[i] = this[i]
5614 r.t = this.t
5615 r.s = this.s
5616}
5617
5618// (protected) set from integer value x, -DV <= x < DV
5619function bnpFromInt(x) {
5620 this.t = 1
5621 this.s = (x < 0) ? -1 : 0
5622 if (x > 0) this[0] = x
5623 else if (x < -1) this[0] = x + DV
5624 else this.t = 0
5625}
5626
5627// return bigint initialized to value
5628function nbv(i) {
5629 var r = new BigInteger()
5630 r.fromInt(i)
5631 return r
5632}
5633
5634// (protected) set from string and radix
5635function bnpFromString(s, b) {
5636 var self = this
5637
5638 var k
5639 if (b == 16) k = 4
5640 else if (b == 8) k = 3
5641 else if (b == 256) k = 8; // byte array
5642 else if (b == 2) k = 1
5643 else if (b == 32) k = 5
5644 else if (b == 4) k = 2
5645 else {
5646 self.fromRadix(s, b)
5647 return
5648 }
5649 self.t = 0
5650 self.s = 0
5651 var i = s.length,
5652 mi = false,
5653 sh = 0
5654 while (--i >= 0) {
5655 var x = (k == 8) ? s[i] & 0xff : intAt(s, i)
5656 if (x < 0) {
5657 if (s.charAt(i) == "-") mi = true
5658 continue
5659 }
5660 mi = false
5661 if (sh == 0)
5662 self[self.t++] = x
5663 else if (sh + k > self.DB) {
5664 self[self.t - 1] |= (x & ((1 << (self.DB - sh)) - 1)) << sh
5665 self[self.t++] = (x >> (self.DB - sh))
5666 } else
5667 self[self.t - 1] |= x << sh
5668 sh += k
5669 if (sh >= self.DB) sh -= self.DB
5670 }
5671 if (k == 8 && (s[0] & 0x80) != 0) {
5672 self.s = -1
5673 if (sh > 0) self[self.t - 1] |= ((1 << (self.DB - sh)) - 1) << sh
5674 }
5675 self.clamp()
5676 if (mi) BigInteger.ZERO.subTo(self, self)
5677}
5678
5679// (protected) clamp off excess high words
5680function bnpClamp() {
5681 var c = this.s & this.DM
5682 while (this.t > 0 && this[this.t - 1] == c)--this.t
5683}
5684
5685// (public) return string representation in given radix
5686function bnToString(b) {
5687 var self = this
5688 if (self.s < 0) return "-" + self.negate()
5689 .toString(b)
5690 var k
5691 if (b == 16) k = 4
5692 else if (b == 8) k = 3
5693 else if (b == 2) k = 1
5694 else if (b == 32) k = 5
5695 else if (b == 4) k = 2
5696 else return self.toRadix(b)
5697 var km = (1 << k) - 1,
5698 d, m = false,
5699 r = "",
5700 i = self.t
5701 var p = self.DB - (i * self.DB) % k
5702 if (i-- > 0) {
5703 if (p < self.DB && (d = self[i] >> p) > 0) {
5704 m = true
5705 r = int2char(d)
5706 }
5707 while (i >= 0) {
5708 if (p < k) {
5709 d = (self[i] & ((1 << p) - 1)) << (k - p)
5710 d |= self[--i] >> (p += self.DB - k)
5711 } else {
5712 d = (self[i] >> (p -= k)) & km
5713 if (p <= 0) {
5714 p += self.DB
5715 --i
5716 }
5717 }
5718 if (d > 0) m = true
5719 if (m) r += int2char(d)
5720 }
5721 }
5722 return m ? r : "0"
5723}
5724
5725// (public) -this
5726function bnNegate() {
5727 var r = new BigInteger()
5728 BigInteger.ZERO.subTo(this, r)
5729 return r
5730}
5731
5732// (public) |this|
5733function bnAbs() {
5734 return (this.s < 0) ? this.negate() : this
5735}
5736
5737// (public) return + if this > a, - if this < a, 0 if equal
5738function bnCompareTo(a) {
5739 var r = this.s - a.s
ab78acc6
IC
5740 if (r != 0) return r
5741 var i = this.t
5742 r = i - a.t
5743 if (r != 0) return (this.s < 0) ? -r : r
5744 while (--i >= 0)
5745 if ((r = this[i] - a[i]) != 0) return r
5746 return 0
5747}
3af2954a 5748
8b095871
IC
5749// returns bit length of the integer x
5750function nbits(x) {
5751 var r = 1,
5752 t
5753 if ((t = x >>> 16) != 0) {
5754 x = t
5755 r += 16
5756 }
5757 if ((t = x >> 8) != 0) {
5758 x = t
5759 r += 8
5760 }
5761 if ((t = x >> 4) != 0) {
5762 x = t
5763 r += 4
5764 }
5765 if ((t = x >> 2) != 0) {
5766 x = t
5767 r += 2
5768 }
5769 if ((t = x >> 1) != 0) {
5770 x = t
5771 r += 1
5772 }
5773 return r
5774}
5775
5776// (public) return the number of bits in "this"
5777function bnBitLength() {
5778 if (this.t <= 0) return 0
5779 return this.DB * (this.t - 1) + nbits(this[this.t - 1] ^ (this.s & this.DM))
5780}
5781
5782// (public) return the number of bytes in "this"
5783function bnByteLength() {
5784 return this.bitLength() >> 3
5785}
5786
5787// (protected) r = this << n*DB
5788function bnpDLShiftTo(n, r) {
5789 var i
5790 for (i = this.t - 1; i >= 0; --i) r[i + n] = this[i]
5791 for (i = n - 1; i >= 0; --i) r[i] = 0
5792 r.t = this.t + n
5793 r.s = this.s
5794}
5795
5796// (protected) r = this >> n*DB
5797function bnpDRShiftTo(n, r) {
5798 for (var i = n; i < this.t; ++i) r[i - n] = this[i]
5799 r.t = Math.max(this.t - n, 0)
5800 r.s = this.s
5801}
5802
5803// (protected) r = this << n
5804function bnpLShiftTo(n, r) {
5805 var self = this
5806 var bs = n % self.DB
5807 var cbs = self.DB - bs
5808 var bm = (1 << cbs) - 1
5809 var ds = Math.floor(n / self.DB),
5810 c = (self.s << bs) & self.DM,
5811 i
5812 for (i = self.t - 1; i >= 0; --i) {
5813 r[i + ds + 1] = (self[i] >> cbs) | c
5814 c = (self[i] & bm) << bs
5815 }
5816 for (i = ds - 1; i >= 0; --i) r[i] = 0
5817 r[ds] = c
5818 r.t = self.t + ds + 1
5819 r.s = self.s
5820 r.clamp()
5821}
5822
5823// (protected) r = this >> n
5824function bnpRShiftTo(n, r) {
5825 var self = this
5826 r.s = self.s
5827 var ds = Math.floor(n / self.DB)
5828 if (ds >= self.t) {
5829 r.t = 0
5830 return
5831 }
5832 var bs = n % self.DB
5833 var cbs = self.DB - bs
5834 var bm = (1 << bs) - 1
5835 r[0] = self[ds] >> bs
5836 for (var i = ds + 1; i < self.t; ++i) {
5837 r[i - ds - 1] |= (self[i] & bm) << cbs
5838 r[i - ds] = self[i] >> bs
5839 }
5840 if (bs > 0) r[self.t - ds - 1] |= (self.s & bm) << cbs
5841 r.t = self.t - ds
5842 r.clamp()
5843}
5844
5845// (protected) r = this - a
5846function bnpSubTo(a, r) {
5847 var self = this
5848 var i = 0,
5849 c = 0,
5850 m = Math.min(a.t, self.t)
5851 while (i < m) {
5852 c += self[i] - a[i]
5853 r[i++] = c & self.DM
5854 c >>= self.DB
5855 }
5856 if (a.t < self.t) {
5857 c -= a.s
5858 while (i < self.t) {
5859 c += self[i]
5860 r[i++] = c & self.DM
5861 c >>= self.DB
5862 }
5863 c += self.s
5864 } else {
5865 c += self.s
5866 while (i < a.t) {
5867 c -= a[i]
5868 r[i++] = c & self.DM
5869 c >>= self.DB
5870 }
5871 c -= a.s
5872 }
5873 r.s = (c < 0) ? -1 : 0
5874 if (c < -1) r[i++] = self.DV + c
5875 else if (c > 0) r[i++] = c
5876 r.t = i
5877 r.clamp()
5878}
5879
5880// (protected) r = this * a, r != this,a (HAC 14.12)
5881// "this" should be the larger one if appropriate.
5882function bnpMultiplyTo(a, r) {
5883 var x = this.abs(),
5884 y = a.abs()
5885 var i = x.t
5886 r.t = i + y.t
5887 while (--i >= 0) r[i] = 0
5888 for (i = 0; i < y.t; ++i) r[i + x.t] = x.am(0, y[i], r, i, 0, x.t)
5889 r.s = 0
5890 r.clamp()
5891 if (this.s != a.s) BigInteger.ZERO.subTo(r, r)
5892}
5893
5894// (protected) r = this^2, r != this (HAC 14.16)
5895function bnpSquareTo(r) {
5896 var x = this.abs()
5897 var i = r.t = 2 * x.t
5898 while (--i >= 0) r[i] = 0
5899 for (i = 0; i < x.t - 1; ++i) {
5900 var c = x.am(i, x[i], r, 2 * i, 0, 1)
5901 if ((r[i + x.t] += x.am(i + 1, 2 * x[i], r, 2 * i + 1, c, x.t - i - 1)) >= x.DV) {
5902 r[i + x.t] -= x.DV
5903 r[i + x.t + 1] = 1
5904 }
5905 }
5906 if (r.t > 0) r[r.t - 1] += x.am(i, x[i], r, 2 * i, 0, 1)
5907 r.s = 0
5908 r.clamp()
5909}
5910
5911// (protected) divide this by m, quotient and remainder to q, r (HAC 14.20)
5912// r != q, this != m. q or r may be null.
5913function bnpDivRemTo(m, q, r) {
5914 var self = this
5915 var pm = m.abs()
5916 if (pm.t <= 0) return
5917 var pt = self.abs()
5918 if (pt.t < pm.t) {
5919 if (q != null) q.fromInt(0)
5920 if (r != null) self.copyTo(r)
5921 return
5922 }
5923 if (r == null) r = new BigInteger()
5924 var y = new BigInteger(),
5925 ts = self.s,
5926 ms = m.s
5927 var nsh = self.DB - nbits(pm[pm.t - 1]); // normalize modulus
5928 if (nsh > 0) {
5929 pm.lShiftTo(nsh, y)
5930 pt.lShiftTo(nsh, r)
5931 } else {
5932 pm.copyTo(y)
5933 pt.copyTo(r)
5934 }
5935 var ys = y.t
5936 var y0 = y[ys - 1]
5937 if (y0 == 0) return
5938 var yt = y0 * (1 << self.F1) + ((ys > 1) ? y[ys - 2] >> self.F2 : 0)
5939 var d1 = self.FV / yt,
5940 d2 = (1 << self.F1) / yt,
5941 e = 1 << self.F2
5942 var i = r.t,
5943 j = i - ys,
5944 t = (q == null) ? new BigInteger() : q
5945 y.dlShiftTo(j, t)
5946 if (r.compareTo(t) >= 0) {
5947 r[r.t++] = 1
5948 r.subTo(t, r)
5949 }
5950 BigInteger.ONE.dlShiftTo(ys, t)
5951 t.subTo(y, y); // "negative" y so we can replace sub with am later
5952 while (y.t < ys) y[y.t++] = 0
5953 while (--j >= 0) {
5954 // Estimate quotient digit
5955 var qd = (r[--i] == y0) ? self.DM : Math.floor(r[i] * d1 + (r[i - 1] + e) * d2)
5956 if ((r[i] += y.am(0, qd, r, j, 0, ys)) < qd) { // Try it out
5957 y.dlShiftTo(j, t)
5958 r.subTo(t, r)
5959 while (r[i] < --qd) r.subTo(t, r)
5960 }
5961 }
5962 if (q != null) {
5963 r.drShiftTo(ys, q)
5964 if (ts != ms) BigInteger.ZERO.subTo(q, q)
5965 }
5966 r.t = ys
5967 r.clamp()
5968 if (nsh > 0) r.rShiftTo(nsh, r); // Denormalize remainder
5969 if (ts < 0) BigInteger.ZERO.subTo(r, r)
5970}
5971
5972// (public) this mod a
5973function bnMod(a) {
5974 var r = new BigInteger()
5975 this.abs()
5976 .divRemTo(a, null, r)
5977 if (this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) a.subTo(r, r)
5978 return r
5979}
5980
5981// Modular reduction using "classic" algorithm
5982function Classic(m) {
5983 this.m = m
5984}
5985
5986function cConvert(x) {
5987 if (x.s < 0 || x.compareTo(this.m) >= 0) return x.mod(this.m)
5988 else return x
5989}
5990
5991function cRevert(x) {
5992 return x
5993}
5994
5995function cReduce(x) {
5996 x.divRemTo(this.m, null, x)
5997}
5998
5999function cMulTo(x, y, r) {
6000 x.multiplyTo(y, r)
6001 this.reduce(r)
6002}
6003
6004function cSqrTo(x, r) {
6005 x.squareTo(r)
6006 this.reduce(r)
6007}
6008
6009Classic.prototype.convert = cConvert
6010Classic.prototype.revert = cRevert
6011Classic.prototype.reduce = cReduce
6012Classic.prototype.mulTo = cMulTo
6013Classic.prototype.sqrTo = cSqrTo
6014
6015// (protected) return "-1/this % 2^DB"; useful for Mont. reduction
6016// justification:
6017// xy == 1 (mod m)
6018// xy = 1+km
6019// xy(2-xy) = (1+km)(1-km)
6020// x[y(2-xy)] = 1-k^2m^2
6021// x[y(2-xy)] == 1 (mod m^2)
6022// if y is 1/x mod m, then y(2-xy) is 1/x mod m^2
6023// should reduce x and y(2-xy) by m^2 at each step to keep size bounded.
6024// JS multiply "overflows" differently from C/C++, so care is needed here.
6025function bnpInvDigit() {
6026 if (this.t < 1) return 0
6027 var x = this[0]
6028 if ((x & 1) == 0) return 0
6029 var y = x & 3; // y == 1/x mod 2^2
6030 y = (y * (2 - (x & 0xf) * y)) & 0xf; // y == 1/x mod 2^4
6031 y = (y * (2 - (x & 0xff) * y)) & 0xff; // y == 1/x mod 2^8
6032 y = (y * (2 - (((x & 0xffff) * y) & 0xffff))) & 0xffff; // y == 1/x mod 2^16
6033 // last step - calculate inverse mod DV directly
6034 // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints
6035 y = (y * (2 - x * y % this.DV)) % this.DV; // y == 1/x mod 2^dbits
6036 // we really want the negative inverse, and -DV < y < DV
6037 return (y > 0) ? this.DV - y : -y
6038}
6039
6040// Montgomery reduction
6041function Montgomery(m) {
6042 this.m = m
6043 this.mp = m.invDigit()
6044 this.mpl = this.mp & 0x7fff
6045 this.mph = this.mp >> 15
6046 this.um = (1 << (m.DB - 15)) - 1
6047 this.mt2 = 2 * m.t
6048}
6049
6050// xR mod m
6051function montConvert(x) {
6052 var r = new BigInteger()
6053 x.abs()
6054 .dlShiftTo(this.m.t, r)
6055 r.divRemTo(this.m, null, r)
6056 if (x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) this.m.subTo(r, r)
6057 return r
6058}
6059
6060// x/R mod m
6061function montRevert(x) {
6062 var r = new BigInteger()
6063 x.copyTo(r)
6064 this.reduce(r)
6065 return r
6066}
6067
6068// x = x/R mod m (HAC 14.32)
6069function montReduce(x) {
6070 while (x.t <= this.mt2) // pad x so am has enough room later
6071 x[x.t++] = 0
6072 for (var i = 0; i < this.m.t; ++i) {
6073 // faster way of calculating u0 = x[i]*mp mod DV
6074 var j = x[i] & 0x7fff
6075 var u0 = (j * this.mpl + (((j * this.mph + (x[i] >> 15) * this.mpl) & this.um) << 15)) & x.DM
6076 // use am to combine the multiply-shift-add into one call
6077 j = i + this.m.t
6078 x[j] += this.m.am(0, u0, x, i, 0, this.m.t)
6079 // propagate carry
6080 while (x[j] >= x.DV) {
6081 x[j] -= x.DV
6082 x[++j]++
6083 }
6084 }
6085 x.clamp()
6086 x.drShiftTo(this.m.t, x)
6087 if (x.compareTo(this.m) >= 0) x.subTo(this.m, x)
6088}
6089
6090// r = "x^2/R mod m"; x != r
6091function montSqrTo(x, r) {
6092 x.squareTo(r)
6093 this.reduce(r)
6094}
6095
6096// r = "xy/R mod m"; x,y != r
6097function montMulTo(x, y, r) {
6098 x.multiplyTo(y, r)
6099 this.reduce(r)
6100}
6101
6102Montgomery.prototype.convert = montConvert
6103Montgomery.prototype.revert = montRevert
6104Montgomery.prototype.reduce = montReduce
6105Montgomery.prototype.mulTo = montMulTo
6106Montgomery.prototype.sqrTo = montSqrTo
6107
6108// (protected) true iff this is even
6109function bnpIsEven() {
6110 return ((this.t > 0) ? (this[0] & 1) : this.s) == 0
6111}
6112
6113// (protected) this^e, e < 2^32, doing sqr and mul with "r" (HAC 14.79)
6114function bnpExp(e, z) {
6115 if (e > 0xffffffff || e < 1) return BigInteger.ONE
6116 var r = new BigInteger(),
6117 r2 = new BigInteger(),
6118 g = z.convert(this),
6119 i = nbits(e) - 1
6120 g.copyTo(r)
6121 while (--i >= 0) {
6122 z.sqrTo(r, r2)
6123 if ((e & (1 << i)) > 0) z.mulTo(r2, g, r)
6124 else {
6125 var t = r
6126 r = r2
6127 r2 = t
6128 }
6129 }
6130 return z.revert(r)
6131}
6132
6133// (public) this^e % m, 0 <= e < 2^32
6134function bnModPowInt(e, m) {
6135 var z
6136 if (e < 256 || m.isEven()) z = new Classic(m)
6137 else z = new Montgomery(m)
6138 return this.exp(e, z)
6139}
6140
6141// protected
6142proto.copyTo = bnpCopyTo
6143proto.fromInt = bnpFromInt
6144proto.fromString = bnpFromString
6145proto.clamp = bnpClamp
6146proto.dlShiftTo = bnpDLShiftTo
6147proto.drShiftTo = bnpDRShiftTo
6148proto.lShiftTo = bnpLShiftTo
6149proto.rShiftTo = bnpRShiftTo
6150proto.subTo = bnpSubTo
6151proto.multiplyTo = bnpMultiplyTo
6152proto.squareTo = bnpSquareTo
6153proto.divRemTo = bnpDivRemTo
6154proto.invDigit = bnpInvDigit
6155proto.isEven = bnpIsEven
6156proto.exp = bnpExp
6157
6158// public
6159proto.toString = bnToString
6160proto.negate = bnNegate
6161proto.abs = bnAbs
6162proto.compareTo = bnCompareTo
6163proto.bitLength = bnBitLength
6164proto.byteLength = bnByteLength
6165proto.mod = bnMod
6166proto.modPowInt = bnModPowInt
6167
6168// (public)
6169function bnClone() {
6170 var r = new BigInteger()
6171 this.copyTo(r)
6172 return r
6173}
6174
6175// (public) return value as integer
6176function bnIntValue() {
6177 if (this.s < 0) {
6178 if (this.t == 1) return this[0] - this.DV
6179 else if (this.t == 0) return -1
6180 } else if (this.t == 1) return this[0]
6181 else if (this.t == 0) return 0
6182 // assumes 16 < DB < 32
6183 return ((this[1] & ((1 << (32 - this.DB)) - 1)) << this.DB) | this[0]
6184}
6185
6186// (public) return value as byte
6187function bnByteValue() {
6188 return (this.t == 0) ? this.s : (this[0] << 24) >> 24
6189}
6190
6191// (public) return value as short (assumes DB>=16)
6192function bnShortValue() {
6193 return (this.t == 0) ? this.s : (this[0] << 16) >> 16
6194}
6195
6196// (protected) return x s.t. r^x < DV
6197function bnpChunkSize(r) {
6198 return Math.floor(Math.LN2 * this.DB / Math.log(r))
6199}
6200
6201// (public) 0 if this == 0, 1 if this > 0
6202function bnSigNum() {
6203 if (this.s < 0) return -1
6204 else if (this.t <= 0 || (this.t == 1 && this[0] <= 0)) return 0
6205 else return 1
6206}
6207
6208// (protected) convert to radix string
6209function bnpToRadix(b) {
6210 if (b == null) b = 10
6211 if (this.signum() == 0 || b < 2 || b > 36) return "0"
6212 var cs = this.chunkSize(b)
6213 var a = Math.pow(b, cs)
6214 var d = nbv(a),
6215 y = new BigInteger(),
6216 z = new BigInteger(),
6217 r = ""
6218 this.divRemTo(d, y, z)
6219 while (y.signum() > 0) {
6220 r = (a + z.intValue())
6221 .toString(b)
6222 .substr(1) + r
6223 y.divRemTo(d, y, z)
6224 }
6225 return z.intValue()
6226 .toString(b) + r
6227}
6228
6229// (protected) convert from radix string
6230function bnpFromRadix(s, b) {
6231 var self = this
6232 self.fromInt(0)
6233 if (b == null) b = 10
6234 var cs = self.chunkSize(b)
6235 var d = Math.pow(b, cs),
6236 mi = false,
6237 j = 0,
6238 w = 0
6239 for (var i = 0; i < s.length; ++i) {
6240 var x = intAt(s, i)
6241 if (x < 0) {
6242 if (s.charAt(i) == "-" && self.signum() == 0) mi = true
6243 continue
6244 }
6245 w = b * w + x
6246 if (++j >= cs) {
6247 self.dMultiply(d)
6248 self.dAddOffset(w, 0)
6249 j = 0
6250 w = 0
6251 }
6252 }
6253 if (j > 0) {
6254 self.dMultiply(Math.pow(b, j))
6255 self.dAddOffset(w, 0)
6256 }
6257 if (mi) BigInteger.ZERO.subTo(self, self)
6258}
6259
6260// (protected) alternate constructor
6261function bnpFromNumber(a, b, c) {
6262 var self = this
6263 if ("number" == typeof b) {
6264 // new BigInteger(int,int,RNG)
6265 if (a < 2) self.fromInt(1)
6266 else {
6267 self.fromNumber(a, c)
6268 if (!self.testBit(a - 1)) // force MSB set
6269 self.bitwiseTo(BigInteger.ONE.shiftLeft(a - 1), op_or, self)
6270 if (self.isEven()) self.dAddOffset(1, 0); // force odd
6271 while (!self.isProbablePrime(b)) {
6272 self.dAddOffset(2, 0)
6273 if (self.bitLength() > a) self.subTo(BigInteger.ONE.shiftLeft(a - 1), self)
6274 }
6275 }
6276 } else {
6277 // new BigInteger(int,RNG)
6278 var x = new Array(),
6279 t = a & 7
6280 x.length = (a >> 3) + 1
6281 b.nextBytes(x)
6282 if (t > 0) x[0] &= ((1 << t) - 1)
6283 else x[0] = 0
6284 self.fromString(x, 256)
6285 }
6286}
6287
6288// (public) convert to bigendian byte array
6289function bnToByteArray() {
6290 var self = this
6291 var i = self.t,
6292 r = new Array()
6293 r[0] = self.s
6294 var p = self.DB - (i * self.DB) % 8,
6295 d, k = 0
6296 if (i-- > 0) {
6297 if (p < self.DB && (d = self[i] >> p) != (self.s & self.DM) >> p)
6298 r[k++] = d | (self.s << (self.DB - p))
6299 while (i >= 0) {
6300 if (p < 8) {
6301 d = (self[i] & ((1 << p) - 1)) << (8 - p)
6302 d |= self[--i] >> (p += self.DB - 8)
6303 } else {
6304 d = (self[i] >> (p -= 8)) & 0xff
6305 if (p <= 0) {
6306 p += self.DB
6307 --i
6308 }
6309 }
6310 if ((d & 0x80) != 0) d |= -256
6311 if (k === 0 && (self.s & 0x80) != (d & 0x80))++k
6312 if (k > 0 || d != self.s) r[k++] = d
6313 }
6314 }
6315 return r
6316}
6317
6318function bnEquals(a) {
6319 return (this.compareTo(a) == 0)
6320}
6321
6322function bnMin(a) {
6323 return (this.compareTo(a) < 0) ? this : a
6324}
6325
6326function bnMax(a) {
6327 return (this.compareTo(a) > 0) ? this : a
6328}
6329
6330// (protected) r = this op a (bitwise)
6331function bnpBitwiseTo(a, op, r) {
6332 var self = this
6333 var i, f, m = Math.min(a.t, self.t)
6334 for (i = 0; i < m; ++i) r[i] = op(self[i], a[i])
6335 if (a.t < self.t) {
6336 f = a.s & self.DM
6337 for (i = m; i < self.t; ++i) r[i] = op(self[i], f)
6338 r.t = self.t
6339 } else {
6340 f = self.s & self.DM
6341 for (i = m; i < a.t; ++i) r[i] = op(f, a[i])
6342 r.t = a.t
6343 }
6344 r.s = op(self.s, a.s)
6345 r.clamp()
6346}
6347
6348// (public) this & a
6349function op_and(x, y) {
6350 return x & y
6351}
6352
6353function bnAnd(a) {
6354 var r = new BigInteger()
6355 this.bitwiseTo(a, op_and, r)
6356 return r
6357}
6358
6359// (public) this | a
6360function op_or(x, y) {
6361 return x | y
6362}
6363
6364function bnOr(a) {
6365 var r = new BigInteger()
6366 this.bitwiseTo(a, op_or, r)
6367 return r
6368}
6369
6370// (public) this ^ a
6371function op_xor(x, y) {
6372 return x ^ y
6373}
6374
6375function bnXor(a) {
6376 var r = new BigInteger()
6377 this.bitwiseTo(a, op_xor, r)
6378 return r
6379}
6380
6381// (public) this & ~a
6382function op_andnot(x, y) {
6383 return x & ~y
6384}
6385
6386function bnAndNot(a) {
6387 var r = new BigInteger()
6388 this.bitwiseTo(a, op_andnot, r)
6389 return r
6390}
6391
6392// (public) ~this
6393function bnNot() {
6394 var r = new BigInteger()
6395 for (var i = 0; i < this.t; ++i) r[i] = this.DM & ~this[i]
6396 r.t = this.t
6397 r.s = ~this.s
6398 return r
6399}
6400
6401// (public) this << n
6402function bnShiftLeft(n) {
6403 var r = new BigInteger()
6404 if (n < 0) this.rShiftTo(-n, r)
6405 else this.lShiftTo(n, r)
6406 return r
6407}
6408
6409// (public) this >> n
6410function bnShiftRight(n) {
6411 var r = new BigInteger()
6412 if (n < 0) this.lShiftTo(-n, r)
6413 else this.rShiftTo(n, r)
6414 return r
6415}
6416
6417// return index of lowest 1-bit in x, x < 2^31
6418function lbit(x) {
6419 if (x == 0) return -1
6420 var r = 0
6421 if ((x & 0xffff) == 0) {
6422 x >>= 16
6423 r += 16
6424 }
6425 if ((x & 0xff) == 0) {
6426 x >>= 8
6427 r += 8
6428 }
6429 if ((x & 0xf) == 0) {
6430 x >>= 4
6431 r += 4
6432 }
6433 if ((x & 3) == 0) {
6434 x >>= 2
6435 r += 2
6436 }
6437 if ((x & 1) == 0)++r
6438 return r
6439}
6440
6441// (public) returns index of lowest 1-bit (or -1 if none)
6442function bnGetLowestSetBit() {
6443 for (var i = 0; i < this.t; ++i)
6444 if (this[i] != 0) return i * this.DB + lbit(this[i])
6445 if (this.s < 0) return this.t * this.DB
6446 return -1
6447}
6448
6449// return number of 1 bits in x
6450function cbit(x) {
6451 var r = 0
6452 while (x != 0) {
6453 x &= x - 1
6454 ++r
6455 }
6456 return r
6457}
6458
6459// (public) return number of set bits
6460function bnBitCount() {
6461 var r = 0,
6462 x = this.s & this.DM
6463 for (var i = 0; i < this.t; ++i) r += cbit(this[i] ^ x)
6464 return r
6465}
6466
6467// (public) true iff nth bit is set
6468function bnTestBit(n) {
6469 var j = Math.floor(n / this.DB)
6470 if (j >= this.t) return (this.s != 0)
6471 return ((this[j] & (1 << (n % this.DB))) != 0)
6472}
6473
6474// (protected) this op (1<<n)
6475function bnpChangeBit(n, op) {
6476 var r = BigInteger.ONE.shiftLeft(n)
6477 this.bitwiseTo(r, op, r)
6478 return r
6479}
6480
6481// (public) this | (1<<n)
6482function bnSetBit(n) {
6483 return this.changeBit(n, op_or)
6484}
6485
6486// (public) this & ~(1<<n)
6487function bnClearBit(n) {
6488 return this.changeBit(n, op_andnot)
6489}
6490
6491// (public) this ^ (1<<n)
6492function bnFlipBit(n) {
6493 return this.changeBit(n, op_xor)
6494}
6495
6496// (protected) r = this + a
6497function bnpAddTo(a, r) {
6498 var self = this
6499
6500 var i = 0,
6501 c = 0,
6502 m = Math.min(a.t, self.t)
6503 while (i < m) {
6504 c += self[i] + a[i]
6505 r[i++] = c & self.DM
6506 c >>= self.DB
6507 }
6508 if (a.t < self.t) {
6509 c += a.s
6510 while (i < self.t) {
6511 c += self[i]
6512 r[i++] = c & self.DM
6513 c >>= self.DB
6514 }
6515 c += self.s
6516 } else {
6517 c += self.s
6518 while (i < a.t) {
6519 c += a[i]
6520 r[i++] = c & self.DM
6521 c >>= self.DB
6522 }
6523 c += a.s
6524 }
6525 r.s = (c < 0) ? -1 : 0
6526 if (c > 0) r[i++] = c
6527 else if (c < -1) r[i++] = self.DV + c
6528 r.t = i
6529 r.clamp()
6530}
6531
6532// (public) this + a
6533function bnAdd(a) {
6534 var r = new BigInteger()
6535 this.addTo(a, r)
6536 return r
6537}
6538
6539// (public) this - a
6540function bnSubtract(a) {
6541 var r = new BigInteger()
6542 this.subTo(a, r)
6543 return r
6544}
6545
6546// (public) this * a
6547function bnMultiply(a) {
6548 var r = new BigInteger()
6549 this.multiplyTo(a, r)
6550 return r
6551}
6552
6553// (public) this^2
6554function bnSquare() {
6555 var r = new BigInteger()
6556 this.squareTo(r)
6557 return r
6558}
6559
6560// (public) this / a
6561function bnDivide(a) {
6562 var r = new BigInteger()
6563 this.divRemTo(a, r, null)
6564 return r
6565}
6566
6567// (public) this % a
6568function bnRemainder(a) {
6569 var r = new BigInteger()
6570 this.divRemTo(a, null, r)
6571 return r
6572}
6573
6574// (public) [this/a,this%a]
6575function bnDivideAndRemainder(a) {
6576 var q = new BigInteger(),
6577 r = new BigInteger()
6578 this.divRemTo(a, q, r)
6579 return new Array(q, r)
6580}
6581
6582// (protected) this *= n, this >= 0, 1 < n < DV
6583function bnpDMultiply(n) {
6584 this[this.t] = this.am(0, n - 1, this, 0, 0, this.t)
6585 ++this.t
6586 this.clamp()
6587}
6588
6589// (protected) this += n << w words, this >= 0
6590function bnpDAddOffset(n, w) {
6591 if (n == 0) return
6592 while (this.t <= w) this[this.t++] = 0
6593 this[w] += n
6594 while (this[w] >= this.DV) {
6595 this[w] -= this.DV
6596 if (++w >= this.t) this[this.t++] = 0
6597 ++this[w]
6598 }
6599}
6600
6601// A "null" reducer
6602function NullExp() {}
6603
6604function nNop(x) {
6605 return x
6606}
6607
6608function nMulTo(x, y, r) {
6609 x.multiplyTo(y, r)
6610}
6611
6612function nSqrTo(x, r) {
6613 x.squareTo(r)
6614}
6615
6616NullExp.prototype.convert = nNop
6617NullExp.prototype.revert = nNop
6618NullExp.prototype.mulTo = nMulTo
6619NullExp.prototype.sqrTo = nSqrTo
6620
6621// (public) this^e
6622function bnPow(e) {
6623 return this.exp(e, new NullExp())
6624}
6625
6626// (protected) r = lower n words of "this * a", a.t <= n
6627// "this" should be the larger one if appropriate.
6628function bnpMultiplyLowerTo(a, n, r) {
6629 var i = Math.min(this.t + a.t, n)
6630 r.s = 0; // assumes a,this >= 0
6631 r.t = i
6632 while (i > 0) r[--i] = 0
6633 var j
6634 for (j = r.t - this.t; i < j; ++i) r[i + this.t] = this.am(0, a[i], r, i, 0, this.t)
6635 for (j = Math.min(a.t, n); i < j; ++i) this.am(0, a[i], r, i, 0, n - i)
6636 r.clamp()
6637}
6638
6639// (protected) r = "this * a" without lower n words, n > 0
6640// "this" should be the larger one if appropriate.
6641function bnpMultiplyUpperTo(a, n, r) {
6642 --n
6643 var i = r.t = this.t + a.t - n
6644 r.s = 0; // assumes a,this >= 0
6645 while (--i >= 0) r[i] = 0
6646 for (i = Math.max(n - this.t, 0); i < a.t; ++i)
6647 r[this.t + i - n] = this.am(n - i, a[i], r, 0, 0, this.t + i - n)
6648 r.clamp()
6649 r.drShiftTo(1, r)
6650}
6651
6652// Barrett modular reduction
6653function Barrett(m) {
6654 // setup Barrett
6655 this.r2 = new BigInteger()
6656 this.q3 = new BigInteger()
6657 BigInteger.ONE.dlShiftTo(2 * m.t, this.r2)
6658 this.mu = this.r2.divide(m)
6659 this.m = m
6660}
6661
6662function barrettConvert(x) {
6663 if (x.s < 0 || x.t > 2 * this.m.t) return x.mod(this.m)
6664 else if (x.compareTo(this.m) < 0) return x
6665 else {
6666 var r = new BigInteger()
6667 x.copyTo(r)
6668 this.reduce(r)
6669 return r
6670 }
6671}
6672
6673function barrettRevert(x) {
6674 return x
6675}
6676
6677// x = x mod m (HAC 14.42)
6678function barrettReduce(x) {
6679 var self = this
6680 x.drShiftTo(self.m.t - 1, self.r2)
6681 if (x.t > self.m.t + 1) {
6682 x.t = self.m.t + 1
6683 x.clamp()
6684 }
6685 self.mu.multiplyUpperTo(self.r2, self.m.t + 1, self.q3)
6686 self.m.multiplyLowerTo(self.q3, self.m.t + 1, self.r2)
6687 while (x.compareTo(self.r2) < 0) x.dAddOffset(1, self.m.t + 1)
6688 x.subTo(self.r2, x)
6689 while (x.compareTo(self.m) >= 0) x.subTo(self.m, x)
6690}
6691
6692// r = x^2 mod m; x != r
6693function barrettSqrTo(x, r) {
6694 x.squareTo(r)
6695 this.reduce(r)
6696}
6697
6698// r = x*y mod m; x,y != r
6699function barrettMulTo(x, y, r) {
6700 x.multiplyTo(y, r)
6701 this.reduce(r)
6702}
6703
6704Barrett.prototype.convert = barrettConvert
6705Barrett.prototype.revert = barrettRevert
6706Barrett.prototype.reduce = barrettReduce
6707Barrett.prototype.mulTo = barrettMulTo
6708Barrett.prototype.sqrTo = barrettSqrTo
6709
6710// (public) this^e % m (HAC 14.85)
6711function bnModPow(e, m) {
6712 var i = e.bitLength(),
6713 k, r = nbv(1),
6714 z
6715 if (i <= 0) return r
6716 else if (i < 18) k = 1
6717 else if (i < 48) k = 3
6718 else if (i < 144) k = 4
6719 else if (i < 768) k = 5
6720 else k = 6
6721 if (i < 8)
6722 z = new Classic(m)
6723 else if (m.isEven())
6724 z = new Barrett(m)
6725 else
6726 z = new Montgomery(m)
6727
6728 // precomputation
6729 var g = new Array(),
6730 n = 3,
6731 k1 = k - 1,
6732 km = (1 << k) - 1
6733 g[1] = z.convert(this)
6734 if (k > 1) {
6735 var g2 = new BigInteger()
6736 z.sqrTo(g[1], g2)
6737 while (n <= km) {
6738 g[n] = new BigInteger()
6739 z.mulTo(g2, g[n - 2], g[n])
6740 n += 2
6741 }
6742 }
6743
6744 var j = e.t - 1,
6745 w, is1 = true,
6746 r2 = new BigInteger(),
6747 t
6748 i = nbits(e[j]) - 1
6749 while (j >= 0) {
6750 if (i >= k1) w = (e[j] >> (i - k1)) & km
6751 else {
6752 w = (e[j] & ((1 << (i + 1)) - 1)) << (k1 - i)
6753 if (j > 0) w |= e[j - 1] >> (this.DB + i - k1)
6754 }
6755
6756 n = k
6757 while ((w & 1) == 0) {
6758 w >>= 1
6759 --n
6760 }
6761 if ((i -= n) < 0) {
6762 i += this.DB
6763 --j
6764 }
6765 if (is1) { // ret == 1, don't bother squaring or multiplying it
6766 g[w].copyTo(r)
6767 is1 = false
6768 } else {
6769 while (n > 1) {
6770 z.sqrTo(r, r2)
6771 z.sqrTo(r2, r)
6772 n -= 2
6773 }
6774 if (n > 0) z.sqrTo(r, r2)
6775 else {
6776 t = r
6777 r = r2
6778 r2 = t
6779 }
6780 z.mulTo(r2, g[w], r)
6781 }
6782
6783 while (j >= 0 && (e[j] & (1 << i)) == 0) {
6784 z.sqrTo(r, r2)
6785 t = r
6786 r = r2
6787 r2 = t
6788 if (--i < 0) {
6789 i = this.DB - 1
6790 --j
6791 }
6792 }
6793 }
6794 return z.revert(r)
6795}
6796
6797// (public) gcd(this,a) (HAC 14.54)
6798function bnGCD(a) {
6799 var x = (this.s < 0) ? this.negate() : this.clone()
6800 var y = (a.s < 0) ? a.negate() : a.clone()
6801 if (x.compareTo(y) < 0) {
6802 var t = x
6803 x = y
6804 y = t
6805 }
6806 var i = x.getLowestSetBit(),
6807 g = y.getLowestSetBit()
6808 if (g < 0) return x
6809 if (i < g) g = i
6810 if (g > 0) {
6811 x.rShiftTo(g, x)
6812 y.rShiftTo(g, y)
6813 }
6814 while (x.signum() > 0) {
6815 if ((i = x.getLowestSetBit()) > 0) x.rShiftTo(i, x)
6816 if ((i = y.getLowestSetBit()) > 0) y.rShiftTo(i, y)
6817 if (x.compareTo(y) >= 0) {
6818 x.subTo(y, x)
6819 x.rShiftTo(1, x)
6820 } else {
6821 y.subTo(x, y)
6822 y.rShiftTo(1, y)
6823 }
6824 }
6825 if (g > 0) y.lShiftTo(g, y)
6826 return y
6827}
6828
6829// (protected) this % n, n < 2^26
6830function bnpModInt(n) {
6831 if (n <= 0) return 0
6832 var d = this.DV % n,
6833 r = (this.s < 0) ? n - 1 : 0
6834 if (this.t > 0)
6835 if (d == 0) r = this[0] % n
6836 else
6837 for (var i = this.t - 1; i >= 0; --i) r = (d * r + this[i]) % n
6838 return r
6839}
6840
6841// (public) 1/this % m (HAC 14.61)
6842function bnModInverse(m) {
6843 var ac = m.isEven()
6844 if ((this.isEven() && ac) || m.signum() == 0) return BigInteger.ZERO
6845 var u = m.clone(),
6846 v = this.clone()
6847 var a = nbv(1),
6848 b = nbv(0),
6849 c = nbv(0),
6850 d = nbv(1)
6851 while (u.signum() != 0) {
6852 while (u.isEven()) {
6853 u.rShiftTo(1, u)
6854 if (ac) {
6855 if (!a.isEven() || !b.isEven()) {
6856 a.addTo(this, a)
6857 b.subTo(m, b)
6858 }
6859 a.rShiftTo(1, a)
6860 } else if (!b.isEven()) b.subTo(m, b)
6861 b.rShiftTo(1, b)
6862 }
6863 while (v.isEven()) {
6864 v.rShiftTo(1, v)
6865 if (ac) {
6866 if (!c.isEven() || !d.isEven()) {
6867 c.addTo(this, c)
6868 d.subTo(m, d)
6869 }
6870 c.rShiftTo(1, c)
6871 } else if (!d.isEven()) d.subTo(m, d)
6872 d.rShiftTo(1, d)
6873 }
6874 if (u.compareTo(v) >= 0) {
6875 u.subTo(v, u)
6876 if (ac) a.subTo(c, a)
6877 b.subTo(d, b)
6878 } else {
6879 v.subTo(u, v)
6880 if (ac) c.subTo(a, c)
6881 d.subTo(b, d)
6882 }
6883 }
6884 if (v.compareTo(BigInteger.ONE) != 0) return BigInteger.ZERO
6885 if (d.compareTo(m) >= 0) return d.subtract(m)
6886 if (d.signum() < 0) d.addTo(m, d)
6887 else return d
6888 if (d.signum() < 0) return d.add(m)
6889 else return d
6890}
6891
6892var lowprimes = [
6893 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71,
6894 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151,
6895 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233,
6896 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317,
6897 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419,
6898 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503,
6899 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607,
6900 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701,
6901 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811,
6902 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911,
6903 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997
6904]
6905
6906var lplim = (1 << 26) / lowprimes[lowprimes.length - 1]
6907
6908// (public) test primality with certainty >= 1-.5^t
6909function bnIsProbablePrime(t) {
6910 var i, x = this.abs()
6911 if (x.t == 1 && x[0] <= lowprimes[lowprimes.length - 1]) {
6912 for (i = 0; i < lowprimes.length; ++i)
6913 if (x[0] == lowprimes[i]) return true
6914 return false
6915 }
6916 if (x.isEven()) return false
6917 i = 1
6918 while (i < lowprimes.length) {
6919 var m = lowprimes[i],
6920 j = i + 1
6921 while (j < lowprimes.length && m < lplim) m *= lowprimes[j++]
6922 m = x.modInt(m)
6923 while (i < j) if (m % lowprimes[i++] == 0) return false
6924 }
6925 return x.millerRabin(t)
6926}
6927
6928// (protected) true if probably prime (HAC 4.24, Miller-Rabin)
6929function bnpMillerRabin(t) {
6930 var n1 = this.subtract(BigInteger.ONE)
6931 var k = n1.getLowestSetBit()
6932 if (k <= 0) return false
6933 var r = n1.shiftRight(k)
6934 t = (t + 1) >> 1
6935 if (t > lowprimes.length) t = lowprimes.length
6936 var a = new BigInteger(null)
6937 var j, bases = []
6938 for (var i = 0; i < t; ++i) {
6939 for (;;) {
6940 j = lowprimes[Math.floor(Math.random() * lowprimes.length)]
6941 if (bases.indexOf(j) == -1) break
6942 }
6943 bases.push(j)
6944 a.fromInt(j)
6945 var y = a.modPow(r, this)
6946 if (y.compareTo(BigInteger.ONE) != 0 && y.compareTo(n1) != 0) {
6947 var j = 1
6948 while (j++ < k && y.compareTo(n1) != 0) {
6949 y = y.modPowInt(2, this)
6950 if (y.compareTo(BigInteger.ONE) == 0) return false
6951 }
6952 if (y.compareTo(n1) != 0) return false
6953 }
6954 }
6955 return true
6956}
6957
6958// protected
6959proto.chunkSize = bnpChunkSize
6960proto.toRadix = bnpToRadix
6961proto.fromRadix = bnpFromRadix
6962proto.fromNumber = bnpFromNumber
6963proto.bitwiseTo = bnpBitwiseTo
6964proto.changeBit = bnpChangeBit
6965proto.addTo = bnpAddTo
6966proto.dMultiply = bnpDMultiply
6967proto.dAddOffset = bnpDAddOffset
6968proto.multiplyLowerTo = bnpMultiplyLowerTo
6969proto.multiplyUpperTo = bnpMultiplyUpperTo
6970proto.modInt = bnpModInt
6971proto.millerRabin = bnpMillerRabin
6972
6973// public
6974proto.clone = bnClone
6975proto.intValue = bnIntValue
6976proto.byteValue = bnByteValue
6977proto.shortValue = bnShortValue
6978proto.signum = bnSigNum
6979proto.toByteArray = bnToByteArray
6980proto.equals = bnEquals
6981proto.min = bnMin
6982proto.max = bnMax
6983proto.and = bnAnd
6984proto.or = bnOr
6985proto.xor = bnXor
6986proto.andNot = bnAndNot
6987proto.not = bnNot
6988proto.shiftLeft = bnShiftLeft
6989proto.shiftRight = bnShiftRight
6990proto.getLowestSetBit = bnGetLowestSetBit
6991proto.bitCount = bnBitCount
6992proto.testBit = bnTestBit
6993proto.setBit = bnSetBit
6994proto.clearBit = bnClearBit
6995proto.flipBit = bnFlipBit
6996proto.add = bnAdd
6997proto.subtract = bnSubtract
6998proto.multiply = bnMultiply
6999proto.divide = bnDivide
7000proto.remainder = bnRemainder
7001proto.divideAndRemainder = bnDivideAndRemainder
7002proto.modPow = bnModPow
7003proto.modInverse = bnModInverse
7004proto.pow = bnPow
7005proto.gcd = bnGCD
7006proto.isProbablePrime = bnIsProbablePrime
7007
7008// JSBN-specific extension
7009proto.square = bnSquare
7010
7011// constants
7012BigInteger.ZERO = nbv(0)
7013BigInteger.ONE = nbv(1)
7014BigInteger.valueOf = nbv
7015
7016module.exports = BigInteger
7017
7018},{"../package.json":4}],2:[function(require,module,exports){
7019(function (Buffer){
7020// FIXME: Kind of a weird way to throw exceptions, consider removing
7021var assert = require('assert')
7022var BigInteger = require('./bigi')
7023
7024/**
7025 * Turns a byte array into a big integer.
7026 *
7027 * This function will interpret a byte array as a big integer in big
7028 * endian notation.
7029 */
7030BigInteger.fromByteArrayUnsigned = function(byteArray) {
7031 // BigInteger expects a DER integer conformant byte array
7032 if (byteArray[0] & 0x80) {
7033 return new BigInteger([0].concat(byteArray))
7034 }
7035
7036 return new BigInteger(byteArray)
7037}
7038
7039/**
7040 * Returns a byte array representation of the big integer.
7041 *
7042 * This returns the absolute of the contained value in big endian
7043 * form. A value of zero results in an empty array.
7044 */
7045BigInteger.prototype.toByteArrayUnsigned = function() {
7046 var byteArray = this.toByteArray()
7047 return byteArray[0] === 0 ? byteArray.slice(1) : byteArray
7048}
7049
7050BigInteger.fromDERInteger = function(byteArray) {
7051 return new BigInteger(byteArray)
7052}
7053
7054/*
7055 * Converts BigInteger to a DER integer representation.
7056 *
7057 * The format for this value uses the most significant bit as a sign
7058 * bit. If the most significant bit is already set and the integer is
7059 * positive, a 0x00 is prepended.
7060 *
7061 * Examples:
7062 *
7063 * 0 => 0x00
7064 * 1 => 0x01
7065 * -1 => 0xff
7066 * 127 => 0x7f
7067 * -127 => 0x81
7068 * 128 => 0x0080
7069 * -128 => 0x80
7070 * 255 => 0x00ff
7071 * -255 => 0xff01
7072 * 16300 => 0x3fac
7073 * -16300 => 0xc054
7074 * 62300 => 0x00f35c
7075 * -62300 => 0xff0ca4
7076*/
7077BigInteger.prototype.toDERInteger = BigInteger.prototype.toByteArray
7078
7079BigInteger.fromBuffer = function(buffer) {
7080 // BigInteger expects a DER integer conformant byte array
7081 if (buffer[0] & 0x80) {
7082 var byteArray = Array.prototype.slice.call(buffer)
7083
7084 return new BigInteger([0].concat(byteArray))
7085 }
7086
7087 return new BigInteger(buffer)
7088}
7089
7090BigInteger.fromHex = function(hex) {
7091 if (hex === '') return BigInteger.ZERO
7092
7093 assert.equal(hex, hex.match(/^[A-Fa-f0-9]+/), 'Invalid hex string')
7094 assert.equal(hex.length % 2, 0, 'Incomplete hex')
7095 return new BigInteger(hex, 16)
7096}
7097
7098BigInteger.prototype.toBuffer = function(size) {
7099 var byteArray = this.toByteArrayUnsigned()
7100 var zeros = []
7101
7102 var padding = size - byteArray.length
7103 while (zeros.length < padding) zeros.push(0)
7104
7105 return new Buffer(zeros.concat(byteArray))
7106}
7107
7108BigInteger.prototype.toHex = function(size) {
7109 return this.toBuffer(size).toString('hex')
7110}
7111
7112}).call(this,require("buffer").Buffer)
7113},{"./bigi":1,"assert":5,"buffer":7}],3:[function(require,module,exports){
7114var BigInteger = require('./bigi')
7115
7116//addons
7117require('./convert')
7118
7119module.exports = BigInteger
7120},{"./bigi":1,"./convert":2}],4:[function(require,module,exports){
7121module.exports={
7122 "name": "bigi",
7123 "version": "1.4.0",
7124 "description": "Big integers.",
7125 "keywords": [
7126 "cryptography",
7127 "math",
7128 "bitcoin",
7129 "arbitrary",
7130 "precision",
7131 "arithmetic",
7132 "big",
7133 "integer",
7134 "int",
7135 "number",
7136 "biginteger",
7137 "bigint",
7138 "bignumber",
7139 "decimal",
7140 "float"
7141 ],
7142 "devDependencies": {
7143 "mocha": "^1.20.1",
7144 "jshint": "^2.5.1",
7145 "coveralls": "^2.10.0",
7146 "istanbul": "^0.2.11"
7147 },
7148 "repository": {
7149 "url": "https://github.com/cryptocoinjs/bigi",
7150 "type": "git"
7151 },
7152 "main": "./lib/index.js",
7153 "scripts": {
7154 "test": "_mocha -- test/*.js",
7155 "jshint": "jshint --config jshint.json lib/*.js ; true",
7156 "unit": "mocha",
7157 "coverage": "istanbul cover ./node_modules/.bin/_mocha -- --reporter list test/*.js",
7158 "coveralls": "npm run-script coverage && node ./node_modules/.bin/coveralls < coverage/lcov.info"
7159 },
7160 "dependencies": {},
7161 "testling": {
7162 "files": "test/*.js",
7163 "harness": "mocha",
7164 "browsers": [
7165 "ie/9..latest",
7166 "firefox/latest",
7167 "chrome/latest",
7168 "safari/6.0..latest",
7169 "iphone/6.0..latest",
7170 "android-browser/4.2..latest"
7171 ]
7172 },
7173 "bugs": {
7174 "url": "https://github.com/cryptocoinjs/bigi/issues"
7175 },
7176 "homepage": "https://github.com/cryptocoinjs/bigi",
7177 "_id": "bigi@1.4.0",
7178 "dist": {
7179 "shasum": "90ac1aeac0a531216463bdb58f42c1e05c8407ac",
7180 "tarball": "http://registry.npmjs.org/bigi/-/bigi-1.4.0.tgz"
7181 },
7182 "_from": "bigi@^1.4.0",
7183 "_npmVersion": "1.4.3",
7184 "_npmUser": {
7185 "name": "jp",
7186 "email": "jprichardson@gmail.com"
7187 },
7188 "maintainers": [
7189 {
7190 "name": "jp",
7191 "email": "jprichardson@gmail.com"
7192 },
7193 {
7194 "name": "midnightlightning",
7195 "email": "boydb@midnightdesign.ws"
7196 },
7197 {
7198 "name": "sidazhang",
7199 "email": "sidazhang89@gmail.com"
7200 },
7201 {
7202 "name": "nadav",
7203 "email": "npm@shesek.info"
7204 }
7205 ],
7206 "directories": {},
7207 "_shasum": "90ac1aeac0a531216463bdb58f42c1e05c8407ac",
7208 "_resolved": "https://registry.npmjs.org/bigi/-/bigi-1.4.0.tgz"
7209}
7210
7211},{}],5:[function(require,module,exports){
7212// http://wiki.commonjs.org/wiki/Unit_Testing/1.0
7213//
7214// THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!
7215//
7216// Originally from narwhal.js (http://narwhaljs.org)
7217// Copyright (c) 2009 Thomas Robinson <280north.com>
7218//
7219// Permission is hereby granted, free of charge, to any person obtaining a copy
7220// of this software and associated documentation files (the 'Software'), to
7221// deal in the Software without restriction, including without limitation the
7222// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
7223// sell copies of the Software, and to permit persons to whom the Software is
7224// furnished to do so, subject to the following conditions:
7225//
7226// The above copyright notice and this permission notice shall be included in
7227// all copies or substantial portions of the Software.
7228//
7229// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
7230// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
7231// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
7232// AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
7233// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
7234// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
7235
7236// when used in node, this will actually load the util module we depend on
7237// versus loading the builtin util module as happens otherwise
7238// this is a bug in node module loading as far as I am concerned
7239var util = require('util/');
7240
7241var pSlice = Array.prototype.slice;
7242var hasOwn = Object.prototype.hasOwnProperty;
7243
7244// 1. The assert module provides functions that throw
7245// AssertionError's when particular conditions are not met. The
7246// assert module must conform to the following interface.
7247
7248var assert = module.exports = ok;
7249
7250// 2. The AssertionError is defined in assert.
7251// new assert.AssertionError({ message: message,
7252// actual: actual,
7253// expected: expected })
7254
7255assert.AssertionError = function AssertionError(options) {
7256 this.name = 'AssertionError';
7257 this.actual = options.actual;
7258 this.expected = options.expected;
7259 this.operator = options.operator;
7260 if (options.message) {
7261 this.message = options.message;
7262 this.generatedMessage = false;
7263 } else {
7264 this.message = getMessage(this);
7265 this.generatedMessage = true;
7266 }
7267 var stackStartFunction = options.stackStartFunction || fail;
7268
7269 if (Error.captureStackTrace) {
7270 Error.captureStackTrace(this, stackStartFunction);
7271 }
7272 else {
7273 // non v8 browsers so we can have a stacktrace
7274 var err = new Error();
7275 if (err.stack) {
7276 var out = err.stack;
7277
7278 // try to strip useless frames
7279 var fn_name = stackStartFunction.name;
7280 var idx = out.indexOf('\n' + fn_name);
7281 if (idx >= 0) {
7282 // once we have located the function frame
7283 // we need to strip out everything before it (and its line)
7284 var next_line = out.indexOf('\n', idx + 1);
7285 out = out.substring(next_line + 1);
7286 }
7287
7288 this.stack = out;
7289 }
7290 }
7291};
7292
7293// assert.AssertionError instanceof Error
7294util.inherits(assert.AssertionError, Error);
7295
7296function replacer(key, value) {
7297 if (util.isUndefined(value)) {
7298 return '' + value;
7299 }
7300 if (util.isNumber(value) && !isFinite(value)) {
7301 return value.toString();
7302 }
7303 if (util.isFunction(value) || util.isRegExp(value)) {
7304 return value.toString();
7305 }
7306 return value;
7307}
7308
7309function truncate(s, n) {
7310 if (util.isString(s)) {
7311 return s.length < n ? s : s.slice(0, n);
7312 } else {
7313 return s;
7314 }
7315}
7316
7317function getMessage(self) {
7318 return truncate(JSON.stringify(self.actual, replacer), 128) + ' ' +
7319 self.operator + ' ' +
7320 truncate(JSON.stringify(self.expected, replacer), 128);
7321}
7322
7323// At present only the three keys mentioned above are used and
7324// understood by the spec. Implementations or sub modules can pass
7325// other keys to the AssertionError's constructor - they will be
7326// ignored.
7327
7328// 3. All of the following functions must throw an AssertionError
7329// when a corresponding condition is not met, with a message that
7330// may be undefined if not provided. All assertion methods provide
7331// both the actual and expected values to the assertion error for
7332// display purposes.
7333
7334function fail(actual, expected, message, operator, stackStartFunction) {
7335 throw new assert.AssertionError({
7336 message: message,
7337 actual: actual,
7338 expected: expected,
7339 operator: operator,
7340 stackStartFunction: stackStartFunction
7341 });
7342}
7343
7344// EXTENSION! allows for well behaved errors defined elsewhere.
7345assert.fail = fail;
7346
7347// 4. Pure assertion tests whether a value is truthy, as determined
7348// by !!guard.
7349// assert.ok(guard, message_opt);
7350// This statement is equivalent to assert.equal(true, !!guard,
7351// message_opt);. To test strictly for the value true, use
7352// assert.strictEqual(true, guard, message_opt);.
7353
7354function ok(value, message) {
7355 if (!value) fail(value, true, message, '==', assert.ok);
7356}
7357assert.ok = ok;
7358
7359// 5. The equality assertion tests shallow, coercive equality with
7360// ==.
7361// assert.equal(actual, expected, message_opt);
7362
7363assert.equal = function equal(actual, expected, message) {
7364 if (actual != expected) fail(actual, expected, message, '==', assert.equal);
7365};
7366
7367// 6. The non-equality assertion tests for whether two objects are not equal
7368// with != assert.notEqual(actual, expected, message_opt);
7369
7370assert.notEqual = function notEqual(actual, expected, message) {
7371 if (actual == expected) {
7372 fail(actual, expected, message, '!=', assert.notEqual);
7373 }
7374};
7375
7376// 7. The equivalence assertion tests a deep equality relation.
7377// assert.deepEqual(actual, expected, message_opt);
7378
7379assert.deepEqual = function deepEqual(actual, expected, message) {
7380 if (!_deepEqual(actual, expected)) {
7381 fail(actual, expected, message, 'deepEqual', assert.deepEqual);
7382 }
7383};
7384
7385function _deepEqual(actual, expected) {
7386 // 7.1. All identical values are equivalent, as determined by ===.
7387 if (actual === expected) {
7388 return true;
7389
7390 } else if (util.isBuffer(actual) && util.isBuffer(expected)) {
7391 if (actual.length != expected.length) return false;
7392
7393 for (var i = 0; i < actual.length; i++) {
7394 if (actual[i] !== expected[i]) return false;
7395 }
7396
7397 return true;
7398
7399 // 7.2. If the expected value is a Date object, the actual value is
7400 // equivalent if it is also a Date object that refers to the same time.
7401 } else if (util.isDate(actual) && util.isDate(expected)) {
7402 return actual.getTime() === expected.getTime();
7403
7404 // 7.3 If the expected value is a RegExp object, the actual value is
7405 // equivalent if it is also a RegExp object with the same source and
7406 // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).
7407 } else if (util.isRegExp(actual) && util.isRegExp(expected)) {
7408 return actual.source === expected.source &&
7409 actual.global === expected.global &&
7410 actual.multiline === expected.multiline &&
7411 actual.lastIndex === expected.lastIndex &&
7412 actual.ignoreCase === expected.ignoreCase;
7413
7414 // 7.4. Other pairs that do not both pass typeof value == 'object',
7415 // equivalence is determined by ==.
7416 } else if (!util.isObject(actual) && !util.isObject(expected)) {
7417 return actual == expected;
7418
7419 // 7.5 For all other Object pairs, including Array objects, equivalence is
7420 // determined by having the same number of owned properties (as verified
7421 // with Object.prototype.hasOwnProperty.call), the same set of keys
7422 // (although not necessarily the same order), equivalent values for every
7423 // corresponding key, and an identical 'prototype' property. Note: this
7424 // accounts for both named and indexed properties on Arrays.
7425 } else {
7426 return objEquiv(actual, expected);
7427 }
7428}
7429
7430function isArguments(object) {
7431 return Object.prototype.toString.call(object) == '[object Arguments]';
7432}
7433
7434function objEquiv(a, b) {
7435 if (util.isNullOrUndefined(a) || util.isNullOrUndefined(b))
7436 return false;
7437 // an identical 'prototype' property.
7438 if (a.prototype !== b.prototype) return false;
7439 // if one is a primitive, the other must be same
7440 if (util.isPrimitive(a) || util.isPrimitive(b)) {
7441 return a === b;
7442 }
7443 var aIsArgs = isArguments(a),
7444 bIsArgs = isArguments(b);
7445 if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))
7446 return false;
7447 if (aIsArgs) {
7448 a = pSlice.call(a);
7449 b = pSlice.call(b);
7450 return _deepEqual(a, b);
7451 }
7452 var ka = objectKeys(a),
7453 kb = objectKeys(b),
7454 key, i;
7455 // having the same number of owned properties (keys incorporates
7456 // hasOwnProperty)
7457 if (ka.length != kb.length)
7458 return false;
7459 //the same set of keys (although not necessarily the same order),
7460 ka.sort();
7461 kb.sort();
7462 //~~~cheap key test
7463 for (i = ka.length - 1; i >= 0; i--) {
7464 if (ka[i] != kb[i])
7465 return false;
7466 }
7467 //equivalent values for every corresponding key, and
7468 //~~~possibly expensive deep test
7469 for (i = ka.length - 1; i >= 0; i--) {
7470 key = ka[i];
7471 if (!_deepEqual(a[key], b[key])) return false;
7472 }
7473 return true;
7474}
7475
7476// 8. The non-equivalence assertion tests for any deep inequality.
7477// assert.notDeepEqual(actual, expected, message_opt);
7478
7479assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
7480 if (_deepEqual(actual, expected)) {
7481 fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
7482 }
7483};
7484
7485// 9. The strict equality assertion tests strict equality, as determined by ===.
7486// assert.strictEqual(actual, expected, message_opt);
7487
7488assert.strictEqual = function strictEqual(actual, expected, message) {
7489 if (actual !== expected) {
7490 fail(actual, expected, message, '===', assert.strictEqual);
7491 }
7492};
7493
7494// 10. The strict non-equality assertion tests for strict inequality, as
7495// determined by !==. assert.notStrictEqual(actual, expected, message_opt);
7496
7497assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
7498 if (actual === expected) {
7499 fail(actual, expected, message, '!==', assert.notStrictEqual);
7500 }
7501};
7502
7503function expectedException(actual, expected) {
7504 if (!actual || !expected) {
7505 return false;
7506 }
7507
7508 if (Object.prototype.toString.call(expected) == '[object RegExp]') {
7509 return expected.test(actual);
7510 } else if (actual instanceof expected) {
7511 return true;
7512 } else if (expected.call({}, actual) === true) {
7513 return true;
7514 }
7515
7516 return false;
7517}
7518
7519function _throws(shouldThrow, block, expected, message) {
7520 var actual;
7521
7522 if (util.isString(expected)) {
7523 message = expected;
7524 expected = null;
7525 }
7526
7527 try {
7528 block();
7529 } catch (e) {
7530 actual = e;
7531 }
7532
7533 message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
7534 (message ? ' ' + message : '.');
7535
7536 if (shouldThrow && !actual) {
7537 fail(actual, expected, 'Missing expected exception' + message);
7538 }
7539
7540 if (!shouldThrow && expectedException(actual, expected)) {
7541 fail(actual, expected, 'Got unwanted exception' + message);
7542 }
7543
7544 if ((shouldThrow && actual && expected &&
7545 !expectedException(actual, expected)) || (!shouldThrow && actual)) {
7546 throw actual;
7547 }
7548}
7549
7550// 11. Expected to throw an error:
7551// assert.throws(block, Error_opt, message_opt);
7552
7553assert.throws = function(block, /*optional*/error, /*optional*/message) {
7554 _throws.apply(this, [true].concat(pSlice.call(arguments)));
7555};
7556
7557// EXTENSION! This is annoying to write outside this module.
7558assert.doesNotThrow = function(block, /*optional*/message) {
7559 _throws.apply(this, [false].concat(pSlice.call(arguments)));
7560};
7561
7562assert.ifError = function(err) { if (err) {throw err;}};
7563
7564var objectKeys = Object.keys || function (obj) {
7565 var keys = [];
7566 for (var key in obj) {
7567 if (hasOwn.call(obj, key)) keys.push(key);
7568 }
7569 return keys;
7570};
7571
7572},{"util/":29}],6:[function(require,module,exports){
7573
7574},{}],7:[function(require,module,exports){
7575/*!
7576 * The buffer module from node.js, for the browser.
7577 *
7578 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
7579 * @license MIT
7580 */
7581
7582var base64 = require('base64-js')
7583var ieee754 = require('ieee754')
7584var isArray = require('is-array')
7585
7586exports.Buffer = Buffer
7587exports.SlowBuffer = SlowBuffer
7588exports.INSPECT_MAX_BYTES = 50
7589Buffer.poolSize = 8192 // not used by this implementation
7590
7591var rootParent = {}
7592
7593/**
7594 * If `Buffer.TYPED_ARRAY_SUPPORT`:
7595 * === true Use Uint8Array implementation (fastest)
7596 * === false Use Object implementation (most compatible, even IE6)
7597 *
7598 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
7599 * Opera 11.6+, iOS 4.2+.
7600 *
7601 * Due to various browser bugs, sometimes the Object implementation will be used even
7602 * when the browser supports typed arrays.
7603 *
7604 * Note:
7605 *
7606 * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,
7607 * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.
7608 *
7609 * - Safari 5-7 lacks support for changing the `Object.prototype.constructor` property
7610 * on objects.
7611 *
7612 * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.
7613 *
7614 * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of
7615 * incorrect length in some situations.
7616
7617 * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they
7618 * get the Object implementation, which is slower but behaves correctly.
7619 */
7620Buffer.TYPED_ARRAY_SUPPORT = (function () {
7621 function Bar () {}
7622 try {
7623 var arr = new Uint8Array(1)
7624 arr.foo = function () { return 42 }
7625 arr.constructor = Bar
7626 return arr.foo() === 42 && // typed array instances can be augmented
7627 arr.constructor === Bar && // constructor can be set
7628 typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`
7629 arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`
7630 } catch (e) {
7631 return false
7632 }
7633})()
7634
7635function kMaxLength () {
7636 return Buffer.TYPED_ARRAY_SUPPORT
7637 ? 0x7fffffff
7638 : 0x3fffffff
7639}
7640
7641/**
7642 * Class: Buffer
7643 * =============
7644 *
7645 * The Buffer constructor returns instances of `Uint8Array` that are augmented
7646 * with function properties for all the node `Buffer` API functions. We use
7647 * `Uint8Array` so that square bracket notation works as expected -- it returns
7648 * a single octet.
7649 *
7650 * By augmenting the instances, we can avoid modifying the `Uint8Array`
7651 * prototype.
7652 */
7653function Buffer (arg) {
7654 if (!(this instanceof Buffer)) {
7655 // Avoid going through an ArgumentsAdaptorTrampoline in the common case.
7656 if (arguments.length > 1) return new Buffer(arg, arguments[1])
7657 return new Buffer(arg)
7658 }
7659
7660 this.length = 0
7661 this.parent = undefined
7662
7663 // Common case.
7664 if (typeof arg === 'number') {
7665 return fromNumber(this, arg)
7666 }
7667
7668 // Slightly less common case.
7669 if (typeof arg === 'string') {
7670 return fromString(this, arg, arguments.length > 1 ? arguments[1] : 'utf8')
7671 }
7672
7673 // Unusual.
7674 return fromObject(this, arg)
7675}
7676
7677function fromNumber (that, length) {
7678 that = allocate(that, length < 0 ? 0 : checked(length) | 0)
7679 if (!Buffer.TYPED_ARRAY_SUPPORT) {
7680 for (var i = 0; i < length; i++) {
7681 that[i] = 0
7682 }
7683 }
7684 return that
7685}
7686
7687function fromString (that, string, encoding) {
7688 if (typeof encoding !== 'string' || encoding === '') encoding = 'utf8'
7689
7690 // Assumption: byteLength() return value is always < kMaxLength.
7691 var length = byteLength(string, encoding) | 0
7692 that = allocate(that, length)
7693
7694 that.write(string, encoding)
7695 return that
7696}
7697
7698function fromObject (that, object) {
7699 if (Buffer.isBuffer(object)) return fromBuffer(that, object)
7700
7701 if (isArray(object)) return fromArray(that, object)
7702
7703 if (object == null) {
7704 throw new TypeError('must start with number, buffer, array or string')
7705 }
7706
7707 if (typeof ArrayBuffer !== 'undefined') {
7708 if (object.buffer instanceof ArrayBuffer) {
7709 return fromTypedArray(that, object)
7710 }
7711 if (object instanceof ArrayBuffer) {
7712 return fromArrayBuffer(that, object)
7713 }
7714 }
7715
7716 if (object.length) return fromArrayLike(that, object)
7717
7718 return fromJsonObject(that, object)
7719}
7720
7721function fromBuffer (that, buffer) {
7722 var length = checked(buffer.length) | 0
7723 that = allocate(that, length)
7724 buffer.copy(that, 0, 0, length)
7725 return that
7726}
7727
7728function fromArray (that, array) {
7729 var length = checked(array.length) | 0
7730 that = allocate(that, length)
7731 for (var i = 0; i < length; i += 1) {
7732 that[i] = array[i] & 255
7733 }
7734 return that
7735}
7736
7737// Duplicate of fromArray() to keep fromArray() monomorphic.
7738function fromTypedArray (that, array) {
7739 var length = checked(array.length) | 0
7740 that = allocate(that, length)
7741 // Truncating the elements is probably not what people expect from typed
7742 // arrays with BYTES_PER_ELEMENT > 1 but it's compatible with the behavior
7743 // of the old Buffer constructor.
7744 for (var i = 0; i < length; i += 1) {
7745 that[i] = array[i] & 255
7746 }
7747 return that
7748}
7749
7750function fromArrayBuffer (that, array) {
7751 if (Buffer.TYPED_ARRAY_SUPPORT) {
7752 // Return an augmented `Uint8Array` instance, for best performance
7753 array.byteLength
7754 that = Buffer._augment(new Uint8Array(array))
7755 } else {
7756 // Fallback: Return an object instance of the Buffer class
7757 that = fromTypedArray(that, new Uint8Array(array))
7758 }
7759 return that
7760}
7761
7762function fromArrayLike (that, array) {
7763 var length = checked(array.length) | 0
7764 that = allocate(that, length)
7765 for (var i = 0; i < length; i += 1) {
7766 that[i] = array[i] & 255
7767 }
7768 return that
7769}
7770
7771// Deserialize { type: 'Buffer', data: [1,2,3,...] } into a Buffer object.
7772// Returns a zero-length buffer for inputs that don't conform to the spec.
7773function fromJsonObject (that, object) {
7774 var array
7775 var length = 0
7776
7777 if (object.type === 'Buffer' && isArray(object.data)) {
7778 array = object.data
7779 length = checked(array.length) | 0
7780 }
7781 that = allocate(that, length)
7782
7783 for (var i = 0; i < length; i += 1) {
7784 that[i] = array[i] & 255
7785 }
7786 return that
7787}
7788
7789function allocate (that, length) {
7790 if (Buffer.TYPED_ARRAY_SUPPORT) {
7791 // Return an augmented `Uint8Array` instance, for best performance
7792 that = Buffer._augment(new Uint8Array(length))
7793 } else {
7794 // Fallback: Return an object instance of the Buffer class
7795 that.length = length
7796 that._isBuffer = true
7797 }
7798
7799 var fromPool = length !== 0 && length <= Buffer.poolSize >>> 1
7800 if (fromPool) that.parent = rootParent
7801
7802 return that
7803}
7804
7805function checked (length) {
7806 // Note: cannot use `length < kMaxLength` here because that fails when
7807 // length is NaN (which is otherwise coerced to zero.)
7808 if (length >= kMaxLength()) {
7809 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
7810 'size: 0x' + kMaxLength().toString(16) + ' bytes')
7811 }
7812 return length | 0
7813}
7814
7815function SlowBuffer (subject, encoding) {
7816 if (!(this instanceof SlowBuffer)) return new SlowBuffer(subject, encoding)
7817
7818 var buf = new Buffer(subject, encoding)
7819 delete buf.parent
7820 return buf
7821}
7822
7823Buffer.isBuffer = function isBuffer (b) {
7824 return !!(b != null && b._isBuffer)
7825}
7826
7827Buffer.compare = function compare (a, b) {
7828 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
7829 throw new TypeError('Arguments must be Buffers')
7830 }
7831
7832 if (a === b) return 0
7833
7834 var x = a.length
7835 var y = b.length
7836
7837 var i = 0
7838 var len = Math.min(x, y)
7839 while (i < len) {
7840 if (a[i] !== b[i]) break
7841
7842 ++i
7843 }
7844
7845 if (i !== len) {
7846 x = a[i]
7847 y = b[i]
7848 }
7849
7850 if (x < y) return -1
7851 if (y < x) return 1
7852 return 0
7853}
7854
7855Buffer.isEncoding = function isEncoding (encoding) {
7856 switch (String(encoding).toLowerCase()) {
7857 case 'hex':
7858 case 'utf8':
7859 case 'utf-8':
7860 case 'ascii':
7861 case 'binary':
7862 case 'base64':
7863 case 'raw':
7864 case 'ucs2':
7865 case 'ucs-2':
7866 case 'utf16le':
7867 case 'utf-16le':
7868 return true
7869 default:
7870 return false
7871 }
7872}
7873
7874Buffer.concat = function concat (list, length) {
7875 if (!isArray(list)) throw new TypeError('list argument must be an Array of Buffers.')
7876
7877 if (list.length === 0) {
7878 return new Buffer(0)
7879 }
7880
7881 var i
7882 if (length === undefined) {
7883 length = 0
7884 for (i = 0; i < list.length; i++) {
7885 length += list[i].length
7886 }
7887 }
7888
7889 var buf = new Buffer(length)
7890 var pos = 0
7891 for (i = 0; i < list.length; i++) {
7892 var item = list[i]
7893 item.copy(buf, pos)
7894 pos += item.length
7895 }
7896 return buf
7897}
7898
7899function byteLength (string, encoding) {
7900 if (typeof string !== 'string') string = '' + string
7901
7902 var len = string.length
7903 if (len === 0) return 0
7904
7905 // Use a for loop to avoid recursion
7906 var loweredCase = false
7907 for (;;) {
7908 switch (encoding) {
7909 case 'ascii':
7910 case 'binary':
7911 // Deprecated
7912 case 'raw':
7913 case 'raws':
7914 return len
7915 case 'utf8':
7916 case 'utf-8':
7917 return utf8ToBytes(string).length
7918 case 'ucs2':
7919 case 'ucs-2':
7920 case 'utf16le':
7921 case 'utf-16le':
7922 return len * 2
7923 case 'hex':
7924 return len >>> 1
7925 case 'base64':
7926 return base64ToBytes(string).length
7927 default:
7928 if (loweredCase) return utf8ToBytes(string).length // assume utf8
7929 encoding = ('' + encoding).toLowerCase()
7930 loweredCase = true
7931 }
7932 }
7933}
7934Buffer.byteLength = byteLength
7935
7936// pre-set for values that may exist in the future
7937Buffer.prototype.length = undefined
7938Buffer.prototype.parent = undefined
7939
7940function slowToString (encoding, start, end) {
7941 var loweredCase = false
7942
7943 start = start | 0
7944 end = end === undefined || end === Infinity ? this.length : end | 0
7945
7946 if (!encoding) encoding = 'utf8'
7947 if (start < 0) start = 0
7948 if (end > this.length) end = this.length
7949 if (end <= start) return ''
7950
7951 while (true) {
7952 switch (encoding) {
7953 case 'hex':
7954 return hexSlice(this, start, end)
7955
7956 case 'utf8':
7957 case 'utf-8':
7958 return utf8Slice(this, start, end)
7959
7960 case 'ascii':
7961 return asciiSlice(this, start, end)
7962
7963 case 'binary':
7964 return binarySlice(this, start, end)
7965
7966 case 'base64':
7967 return base64Slice(this, start, end)
7968
7969 case 'ucs2':
7970 case 'ucs-2':
7971 case 'utf16le':
7972 case 'utf-16le':
7973 return utf16leSlice(this, start, end)
7974
7975 default:
7976 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
7977 encoding = (encoding + '').toLowerCase()
7978 loweredCase = true
7979 }
7980 }
7981}
7982
7983Buffer.prototype.toString = function toString () {
7984 var length = this.length | 0
7985 if (length === 0) return ''
7986 if (arguments.length === 0) return utf8Slice(this, 0, length)
7987 return slowToString.apply(this, arguments)
7988}
7989
7990Buffer.prototype.equals = function equals (b) {
7991 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
7992 if (this === b) return true
7993 return Buffer.compare(this, b) === 0
7994}
7995
7996Buffer.prototype.inspect = function inspect () {
7997 var str = ''
7998 var max = exports.INSPECT_MAX_BYTES
7999 if (this.length > 0) {
8000 str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
8001 if (this.length > max) str += ' ... '
8002 }
8003 return '<Buffer ' + str + '>'
8004}
8005
8006Buffer.prototype.compare = function compare (b) {
8007 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
8008 if (this === b) return 0
8009 return Buffer.compare(this, b)
8010}
8011
8012Buffer.prototype.indexOf = function indexOf (val, byteOffset) {
8013 if (byteOffset > 0x7fffffff) byteOffset = 0x7fffffff
8014 else if (byteOffset < -0x80000000) byteOffset = -0x80000000
8015 byteOffset >>= 0
8016
8017 if (this.length === 0) return -1
8018 if (byteOffset >= this.length) return -1
8019
8020 // Negative offsets start from the end of the buffer
8021 if (byteOffset < 0) byteOffset = Math.max(this.length + byteOffset, 0)
8022
8023 if (typeof val === 'string') {
8024 if (val.length === 0) return -1 // special case: looking for empty string always fails
8025 return String.prototype.indexOf.call(this, val, byteOffset)
8026 }
8027 if (Buffer.isBuffer(val)) {
8028 return arrayIndexOf(this, val, byteOffset)
8029 }
8030 if (typeof val === 'number') {
8031 if (Buffer.TYPED_ARRAY_SUPPORT && Uint8Array.prototype.indexOf === 'function') {
8032 return Uint8Array.prototype.indexOf.call(this, val, byteOffset)
8033 }
8034 return arrayIndexOf(this, [ val ], byteOffset)
8035 }
8036
8037 function arrayIndexOf (arr, val, byteOffset) {
8038 var foundIndex = -1
8039 for (var i = 0; byteOffset + i < arr.length; i++) {
8040 if (arr[byteOffset + i] === val[foundIndex === -1 ? 0 : i - foundIndex]) {
8041 if (foundIndex === -1) foundIndex = i
8042 if (i - foundIndex + 1 === val.length) return byteOffset + foundIndex
8043 } else {
8044 foundIndex = -1
8045 }
8046 }
8047 return -1
8048 }
8049
8050 throw new TypeError('val must be string, number or Buffer')
8051}
8052
8053// `get` is deprecated
8054Buffer.prototype.get = function get (offset) {
8055 console.log('.get() is deprecated. Access using array indexes instead.')
8056 return this.readUInt8(offset)
8057}
8058
8059// `set` is deprecated
8060Buffer.prototype.set = function set (v, offset) {
8061 console.log('.set() is deprecated. Access using array indexes instead.')
8062 return this.writeUInt8(v, offset)
8063}
8064
8065function hexWrite (buf, string, offset, length) {
8066 offset = Number(offset) || 0
8067 var remaining = buf.length - offset
8068 if (!length) {
8069 length = remaining
8070 } else {
8071 length = Number(length)
8072 if (length > remaining) {
8073 length = remaining
8074 }
8075 }
8076
8077 // must be an even number of digits
8078 var strLen = string.length
8079 if (strLen % 2 !== 0) throw new Error('Invalid hex string')
8080
8081 if (length > strLen / 2) {
8082 length = strLen / 2
8083 }
8084 for (var i = 0; i < length; i++) {
8085 var parsed = parseInt(string.substr(i * 2, 2), 16)
8086 if (isNaN(parsed)) throw new Error('Invalid hex string')
8087 buf[offset + i] = parsed
8088 }
8089 return i
8090}
8091
8092function utf8Write (buf, string, offset, length) {
8093 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
8094}
8095
8096function asciiWrite (buf, string, offset, length) {
8097 return blitBuffer(asciiToBytes(string), buf, offset, length)
8098}
8099
8100function binaryWrite (buf, string, offset, length) {
8101 return asciiWrite(buf, string, offset, length)
8102}
8103
8104function base64Write (buf, string, offset, length) {
8105 return blitBuffer(base64ToBytes(string), buf, offset, length)
8106}
8107
8108function ucs2Write (buf, string, offset, length) {
8109 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
8110}
8111
8112Buffer.prototype.write = function write (string, offset, length, encoding) {
8113 // Buffer#write(string)
8114 if (offset === undefined) {
8115 encoding = 'utf8'
8116 length = this.length
8117 offset = 0
8118 // Buffer#write(string, encoding)
8119 } else if (length === undefined && typeof offset === 'string') {
8120 encoding = offset
8121 length = this.length
8122 offset = 0
8123 // Buffer#write(string, offset[, length][, encoding])
8124 } else if (isFinite(offset)) {
8125 offset = offset | 0
8126 if (isFinite(length)) {
8127 length = length | 0
8128 if (encoding === undefined) encoding = 'utf8'
8129 } else {
8130 encoding = length
8131 length = undefined
8132 }
8133 // legacy write(string, encoding, offset, length) - remove in v0.13
8134 } else {
8135 var swap = encoding
8136 encoding = offset
8137 offset = length | 0
8138 length = swap
8139 }
8140
8141 var remaining = this.length - offset
8142 if (length === undefined || length > remaining) length = remaining
8143
8144 if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
8145 throw new RangeError('attempt to write outside buffer bounds')
8146 }
8147
8148 if (!encoding) encoding = 'utf8'
8149
8150 var loweredCase = false
8151 for (;;) {
8152 switch (encoding) {
8153 case 'hex':
8154 return hexWrite(this, string, offset, length)
8155
8156 case 'utf8':
8157 case 'utf-8':
8158 return utf8Write(this, string, offset, length)
8159
8160 case 'ascii':
8161 return asciiWrite(this, string, offset, length)
8162
8163 case 'binary':
8164 return binaryWrite(this, string, offset, length)
8165
8166 case 'base64':
8167 // Warning: maxLength not taken into account in base64Write
8168 return base64Write(this, string, offset, length)
8169
8170 case 'ucs2':
8171 case 'ucs-2':
8172 case 'utf16le':
8173 case 'utf-16le':
8174 return ucs2Write(this, string, offset, length)
8175
8176 default:
8177 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
8178 encoding = ('' + encoding).toLowerCase()
8179 loweredCase = true
8180 }
8181 }
8182}
8183
8184Buffer.prototype.toJSON = function toJSON () {
8185 return {
8186 type: 'Buffer',
8187 data: Array.prototype.slice.call(this._arr || this, 0)
8188 }
8189}
8190
8191function base64Slice (buf, start, end) {
8192 if (start === 0 && end === buf.length) {
8193 return base64.fromByteArray(buf)
8194 } else {
8195 return base64.fromByteArray(buf.slice(start, end))
8196 }
8197}
8198
8199function utf8Slice (buf, start, end) {
8200 end = Math.min(buf.length, end)
8201 var firstByte
8202 var secondByte
8203 var thirdByte
8204 var fourthByte
8205 var bytesPerSequence
8206 var tempCodePoint
8207 var codePoint
8208 var res = []
8209 var i = start
8210
8211 for (; i < end; i += bytesPerSequence) {
8212 firstByte = buf[i]
8213 codePoint = 0xFFFD
8214
8215 if (firstByte > 0xEF) {
8216 bytesPerSequence = 4
8217 } else if (firstByte > 0xDF) {
8218 bytesPerSequence = 3
8219 } else if (firstByte > 0xBF) {
8220 bytesPerSequence = 2
8221 } else {
8222 bytesPerSequence = 1
8223 }
8224
8225 if (i + bytesPerSequence <= end) {
8226 switch (bytesPerSequence) {
8227 case 1:
8228 if (firstByte < 0x80) {
8229 codePoint = firstByte
8230 }
8231 break
8232 case 2:
8233 secondByte = buf[i + 1]
8234 if ((secondByte & 0xC0) === 0x80) {
8235 tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
8236 if (tempCodePoint > 0x7F) {
8237 codePoint = tempCodePoint
8238 }
8239 }
8240 break
8241 case 3:
8242 secondByte = buf[i + 1]
8243 thirdByte = buf[i + 2]
8244 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
8245 tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
8246 if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
8247 codePoint = tempCodePoint
8248 }
8249 }
8250 break
8251 case 4:
8252 secondByte = buf[i + 1]
8253 thirdByte = buf[i + 2]
8254 fourthByte = buf[i + 3]
8255 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
8256 tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
8257 if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
8258 codePoint = tempCodePoint
8259 }
8260 }
8261 }
8262 }
8263
8264 if (codePoint === 0xFFFD) {
8265 // we generated an invalid codePoint so make sure to only advance by 1 byte
8266 bytesPerSequence = 1
8267 } else if (codePoint > 0xFFFF) {
8268 // encode to utf16 (surrogate pair dance)
8269 codePoint -= 0x10000
8270 res.push(codePoint >>> 10 & 0x3FF | 0xD800)
8271 codePoint = 0xDC00 | codePoint & 0x3FF
8272 }
8273
8274 res.push(codePoint)
8275 }
8276
8277 return String.fromCharCode.apply(String, res)
8278}
8279
8280function asciiSlice (buf, start, end) {
8281 var ret = ''
8282 end = Math.min(buf.length, end)
8283
8284 for (var i = start; i < end; i++) {
8285 ret += String.fromCharCode(buf[i] & 0x7F)
8286 }
8287 return ret
8288}
8289
8290function binarySlice (buf, start, end) {
8291 var ret = ''
8292 end = Math.min(buf.length, end)
8293
8294 for (var i = start; i < end; i++) {
8295 ret += String.fromCharCode(buf[i])
8296 }
8297 return ret
8298}
8299
8300function hexSlice (buf, start, end) {
8301 var len = buf.length
8302
8303 if (!start || start < 0) start = 0
8304 if (!end || end < 0 || end > len) end = len
8305
8306 var out = ''
8307 for (var i = start; i < end; i++) {
8308 out += toHex(buf[i])
8309 }
8310 return out
8311}
8312
8313function utf16leSlice (buf, start, end) {
8314 var bytes = buf.slice(start, end)
8315 var res = ''
8316 for (var i = 0; i < bytes.length; i += 2) {
8317 res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)
8318 }
8319 return res
8320}
8321
8322Buffer.prototype.slice = function slice (start, end) {
8323 var len = this.length
8324 start = ~~start
8325 end = end === undefined ? len : ~~end
8326
8327 if (start < 0) {
8328 start += len
8329 if (start < 0) start = 0
8330 } else if (start > len) {
8331 start = len
8332 }
8333
8334 if (end < 0) {
8335 end += len
8336 if (end < 0) end = 0
8337 } else if (end > len) {
8338 end = len
8339 }
8340
8341 if (end < start) end = start
8342
8343 var newBuf
8344 if (Buffer.TYPED_ARRAY_SUPPORT) {
8345 newBuf = Buffer._augment(this.subarray(start, end))
8346 } else {
8347 var sliceLen = end - start
8348 newBuf = new Buffer(sliceLen, undefined)
8349 for (var i = 0; i < sliceLen; i++) {
8350 newBuf[i] = this[i + start]
8351 }
8352 }
8353
8354 if (newBuf.length) newBuf.parent = this.parent || this
8355
8356 return newBuf
8357}
8358
8359/*
8360 * Need to make sure that buffer isn't trying to write out of bounds.
8361 */
8362function checkOffset (offset, ext, length) {
8363 if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
8364 if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
8365}
8366
8367Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
8368 offset = offset | 0
8369 byteLength = byteLength | 0
8370 if (!noAssert) checkOffset(offset, byteLength, this.length)
8371
8372 var val = this[offset]
8373 var mul = 1
8374 var i = 0
8375 while (++i < byteLength && (mul *= 0x100)) {
8376 val += this[offset + i] * mul
8377 }
8378
8379 return val
8380}
8381
8382Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
8383 offset = offset | 0
8384 byteLength = byteLength | 0
8385 if (!noAssert) {
8386 checkOffset(offset, byteLength, this.length)
8387 }
8388
8389 var val = this[offset + --byteLength]
8390 var mul = 1
8391 while (byteLength > 0 && (mul *= 0x100)) {
8392 val += this[offset + --byteLength] * mul
8393 }
8394
8395 return val
8396}
8397
8398Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
8399 if (!noAssert) checkOffset(offset, 1, this.length)
8400 return this[offset]
8401}
8402
8403Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
8404 if (!noAssert) checkOffset(offset, 2, this.length)
8405 return this[offset] | (this[offset + 1] << 8)
8406}
8407
8408Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
8409 if (!noAssert) checkOffset(offset, 2, this.length)
8410 return (this[offset] << 8) | this[offset + 1]
8411}
8412
8413Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
8414 if (!noAssert) checkOffset(offset, 4, this.length)
8415
8416 return ((this[offset]) |
8417 (this[offset + 1] << 8) |
8418 (this[offset + 2] << 16)) +
8419 (this[offset + 3] * 0x1000000)
8420}
8421
8422Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
8423 if (!noAssert) checkOffset(offset, 4, this.length)
8424
8425 return (this[offset] * 0x1000000) +
8426 ((this[offset + 1] << 16) |
8427 (this[offset + 2] << 8) |
8428 this[offset + 3])
8429}
8430
8431Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
8432 offset = offset | 0
8433 byteLength = byteLength | 0
8434 if (!noAssert) checkOffset(offset, byteLength, this.length)
8435
8436 var val = this[offset]
8437 var mul = 1
8438 var i = 0
8439 while (++i < byteLength && (mul *= 0x100)) {
8440 val += this[offset + i] * mul
8441 }
8442 mul *= 0x80
8443
8444 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
8445
8446 return val
8447}
8448
8449Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
8450 offset = offset | 0
8451 byteLength = byteLength | 0
8452 if (!noAssert) checkOffset(offset, byteLength, this.length)
8453
8454 var i = byteLength
8455 var mul = 1
8456 var val = this[offset + --i]
8457 while (i > 0 && (mul *= 0x100)) {
8458 val += this[offset + --i] * mul
8459 }
8460 mul *= 0x80
8461
8462 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
8463
8464 return val
8465}
8466
8467Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
8468 if (!noAssert) checkOffset(offset, 1, this.length)
8469 if (!(this[offset] & 0x80)) return (this[offset])
8470 return ((0xff - this[offset] + 1) * -1)
8471}
8472
8473Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
8474 if (!noAssert) checkOffset(offset, 2, this.length)
8475 var val = this[offset] | (this[offset + 1] << 8)
8476 return (val & 0x8000) ? val | 0xFFFF0000 : val
8477}
8478
8479Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
8480 if (!noAssert) checkOffset(offset, 2, this.length)
8481 var val = this[offset + 1] | (this[offset] << 8)
8482 return (val & 0x8000) ? val | 0xFFFF0000 : val
8483}
8484
8485Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
8486 if (!noAssert) checkOffset(offset, 4, this.length)
8487
8488 return (this[offset]) |
8489 (this[offset + 1] << 8) |
8490 (this[offset + 2] << 16) |
8491 (this[offset + 3] << 24)
8492}
8493
8494Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
8495 if (!noAssert) checkOffset(offset, 4, this.length)
8496
8497 return (this[offset] << 24) |
8498 (this[offset + 1] << 16) |
8499 (this[offset + 2] << 8) |
8500 (this[offset + 3])
8501}
8502
8503Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
8504 if (!noAssert) checkOffset(offset, 4, this.length)
8505 return ieee754.read(this, offset, true, 23, 4)
8506}
8507
8508Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
8509 if (!noAssert) checkOffset(offset, 4, this.length)
8510 return ieee754.read(this, offset, false, 23, 4)
8511}
8512
8513Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
8514 if (!noAssert) checkOffset(offset, 8, this.length)
8515 return ieee754.read(this, offset, true, 52, 8)
8516}
8517
8518Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
8519 if (!noAssert) checkOffset(offset, 8, this.length)
8520 return ieee754.read(this, offset, false, 52, 8)
8521}
8522
8523function checkInt (buf, value, offset, ext, max, min) {
8524 if (!Buffer.isBuffer(buf)) throw new TypeError('buffer must be a Buffer instance')
8525 if (value > max || value < min) throw new RangeError('value is out of bounds')
8526 if (offset + ext > buf.length) throw new RangeError('index out of range')
8527}
8528
8529Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
8530 value = +value
8531 offset = offset | 0
8532 byteLength = byteLength | 0
8533 if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0)
8534
8535 var mul = 1
8536 var i = 0
8537 this[offset] = value & 0xFF
8538 while (++i < byteLength && (mul *= 0x100)) {
8539 this[offset + i] = (value / mul) & 0xFF
8540 }
8541
8542 return offset + byteLength
8543}
8544
8545Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
8546 value = +value
8547 offset = offset | 0
8548 byteLength = byteLength | 0
8549 if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0)
8550
8551 var i = byteLength - 1
8552 var mul = 1
8553 this[offset + i] = value & 0xFF
8554 while (--i >= 0 && (mul *= 0x100)) {
8555 this[offset + i] = (value / mul) & 0xFF
8556 }
8557
8558 return offset + byteLength
8559}
8560
8561Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
8562 value = +value
8563 offset = offset | 0
8564 if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
8565 if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
8566 this[offset] = value
8567 return offset + 1
8568}
8569
8570function objectWriteUInt16 (buf, value, offset, littleEndian) {
8571 if (value < 0) value = 0xffff + value + 1
8572 for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; i++) {
8573 buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>
8574 (littleEndian ? i : 1 - i) * 8
8575 }
8576}
8577
8578Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
8579 value = +value
8580 offset = offset | 0
8581 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
8582 if (Buffer.TYPED_ARRAY_SUPPORT) {
8583 this[offset] = value
8584 this[offset + 1] = (value >>> 8)
8585 } else {
8586 objectWriteUInt16(this, value, offset, true)
8587 }
8588 return offset + 2
8589}
8590
8591Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
8592 value = +value
8593 offset = offset | 0
8594 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
8595 if (Buffer.TYPED_ARRAY_SUPPORT) {
8596 this[offset] = (value >>> 8)
8597 this[offset + 1] = value
8598 } else {
8599 objectWriteUInt16(this, value, offset, false)
8600 }
8601 return offset + 2
8602}
8603
8604function objectWriteUInt32 (buf, value, offset, littleEndian) {
8605 if (value < 0) value = 0xffffffff + value + 1
8606 for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; i++) {
8607 buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff
8608 }
8609}
8610
8611Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
8612 value = +value
8613 offset = offset | 0
8614 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
8615 if (Buffer.TYPED_ARRAY_SUPPORT) {
8616 this[offset + 3] = (value >>> 24)
8617 this[offset + 2] = (value >>> 16)
8618 this[offset + 1] = (value >>> 8)
8619 this[offset] = value
8620 } else {
8621 objectWriteUInt32(this, value, offset, true)
8622 }
8623 return offset + 4
8624}
8625
8626Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
8627 value = +value
8628 offset = offset | 0
8629 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
8630 if (Buffer.TYPED_ARRAY_SUPPORT) {
8631 this[offset] = (value >>> 24)
8632 this[offset + 1] = (value >>> 16)
8633 this[offset + 2] = (value >>> 8)
8634 this[offset + 3] = value
8635 } else {
8636 objectWriteUInt32(this, value, offset, false)
8637 }
8638 return offset + 4
8639}
8640
8641Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
8642 value = +value
8643 offset = offset | 0
8644 if (!noAssert) {
8645 var limit = Math.pow(2, 8 * byteLength - 1)
8646
8647 checkInt(this, value, offset, byteLength, limit - 1, -limit)
8648 }
8649
8650 var i = 0
8651 var mul = 1
8652 var sub = value < 0 ? 1 : 0
8653 this[offset] = value & 0xFF
8654 while (++i < byteLength && (mul *= 0x100)) {
8655 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
8656 }
8657
8658 return offset + byteLength
8659}
8660
8661Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
8662 value = +value
8663 offset = offset | 0
8664 if (!noAssert) {
8665 var limit = Math.pow(2, 8 * byteLength - 1)
8666
8667 checkInt(this, value, offset, byteLength, limit - 1, -limit)
8668 }
8669
8670 var i = byteLength - 1
8671 var mul = 1
8672 var sub = value < 0 ? 1 : 0
8673 this[offset + i] = value & 0xFF
8674 while (--i >= 0 && (mul *= 0x100)) {
8675 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
8676 }
8677
8678 return offset + byteLength
8679}
8680
8681Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
8682 value = +value
8683 offset = offset | 0
8684 if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
8685 if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
8686 if (value < 0) value = 0xff + value + 1
8687 this[offset] = value
8688 return offset + 1
8689}
8690
8691Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
8692 value = +value
8693 offset = offset | 0
8694 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
8695 if (Buffer.TYPED_ARRAY_SUPPORT) {
8696 this[offset] = value
8697 this[offset + 1] = (value >>> 8)
8698 } else {
8699 objectWriteUInt16(this, value, offset, true)
8700 }
8701 return offset + 2
8702}
8703
8704Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
8705 value = +value
8706 offset = offset | 0
8707 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
8708 if (Buffer.TYPED_ARRAY_SUPPORT) {
8709 this[offset] = (value >>> 8)
8710 this[offset + 1] = value
8711 } else {
8712 objectWriteUInt16(this, value, offset, false)
8713 }
8714 return offset + 2
8715}
8716
8717Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
8718 value = +value
8719 offset = offset | 0
8720 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
8721 if (Buffer.TYPED_ARRAY_SUPPORT) {
8722 this[offset] = value
8723 this[offset + 1] = (value >>> 8)
8724 this[offset + 2] = (value >>> 16)
8725 this[offset + 3] = (value >>> 24)
8726 } else {
8727 objectWriteUInt32(this, value, offset, true)
8728 }
8729 return offset + 4
8730}
8731
8732Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
8733 value = +value
8734 offset = offset | 0
8735 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
8736 if (value < 0) value = 0xffffffff + value + 1
8737 if (Buffer.TYPED_ARRAY_SUPPORT) {
8738 this[offset] = (value >>> 24)
8739 this[offset + 1] = (value >>> 16)
8740 this[offset + 2] = (value >>> 8)
8741 this[offset + 3] = value
8742 } else {
8743 objectWriteUInt32(this, value, offset, false)
8744 }
8745 return offset + 4
8746}
8747
8748function checkIEEE754 (buf, value, offset, ext, max, min) {
8749 if (value > max || value < min) throw new RangeError('value is out of bounds')
8750 if (offset + ext > buf.length) throw new RangeError('index out of range')
8751 if (offset < 0) throw new RangeError('index out of range')
8752}
8753
8754function writeFloat (buf, value, offset, littleEndian, noAssert) {
8755 if (!noAssert) {
8756 checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
8757 }
8758 ieee754.write(buf, value, offset, littleEndian, 23, 4)
8759 return offset + 4
8760}
8761
8762Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
8763 return writeFloat(this, value, offset, true, noAssert)
8764}
8765
8766Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
8767 return writeFloat(this, value, offset, false, noAssert)
8768}
8769
8770function writeDouble (buf, value, offset, littleEndian, noAssert) {
8771 if (!noAssert) {
8772 checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
8773 }
8774 ieee754.write(buf, value, offset, littleEndian, 52, 8)
8775 return offset + 8
8776}
8777
8778Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
8779 return writeDouble(this, value, offset, true, noAssert)
8780}
8781
8782Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
8783 return writeDouble(this, value, offset, false, noAssert)
8784}
8785
8786// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
8787Buffer.prototype.copy = function copy (target, targetStart, start, end) {
8788 if (!start) start = 0
8789 if (!end && end !== 0) end = this.length
8790 if (targetStart >= target.length) targetStart = target.length
8791 if (!targetStart) targetStart = 0
8792 if (end > 0 && end < start) end = start
8793
8794 // Copy 0 bytes; we're done
8795 if (end === start) return 0
8796 if (target.length === 0 || this.length === 0) return 0
8797
8798 // Fatal error conditions
8799 if (targetStart < 0) {
8800 throw new RangeError('targetStart out of bounds')
8801 }
8802 if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
8803 if (end < 0) throw new RangeError('sourceEnd out of bounds')
8804
8805 // Are we oob?
8806 if (end > this.length) end = this.length
8807 if (target.length - targetStart < end - start) {
8808 end = target.length - targetStart + start
8809 }
8810
8811 var len = end - start
8812 var i
8813
8814 if (this === target && start < targetStart && targetStart < end) {
8815 // descending copy from end
8816 for (i = len - 1; i >= 0; i--) {
8817 target[i + targetStart] = this[i + start]
8818 }
8819 } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {
8820 // ascending copy from start
8821 for (i = 0; i < len; i++) {
8822 target[i + targetStart] = this[i + start]
8823 }
8824 } else {
8825 target._set(this.subarray(start, start + len), targetStart)
8826 }
8827
8828 return len
8829}
8830
8831// fill(value, start=0, end=buffer.length)
8832Buffer.prototype.fill = function fill (value, start, end) {
8833 if (!value) value = 0
8834 if (!start) start = 0
8835 if (!end) end = this.length
8836
8837 if (end < start) throw new RangeError('end < start')
8838
8839 // Fill 0 bytes; we're done
8840 if (end === start) return
8841 if (this.length === 0) return
8842
8843 if (start < 0 || start >= this.length) throw new RangeError('start out of bounds')
8844 if (end < 0 || end > this.length) throw new RangeError('end out of bounds')
8845
8846 var i
8847 if (typeof value === 'number') {
8848 for (i = start; i < end; i++) {
8849 this[i] = value
8850 }
8851 } else {
8852 var bytes = utf8ToBytes(value.toString())
8853 var len = bytes.length
8854 for (i = start; i < end; i++) {
8855 this[i] = bytes[i % len]
8856 }
8857 }
8858
8859 return this
8860}
8861
8862/**
8863 * Creates a new `ArrayBuffer` with the *copied* memory of the buffer instance.
8864 * Added in Node 0.12. Only available in browsers that support ArrayBuffer.
8865 */
8866Buffer.prototype.toArrayBuffer = function toArrayBuffer () {
8867 if (typeof Uint8Array !== 'undefined') {
8868 if (Buffer.TYPED_ARRAY_SUPPORT) {
8869 return (new Buffer(this)).buffer
8870 } else {
8871 var buf = new Uint8Array(this.length)
8872 for (var i = 0, len = buf.length; i < len; i += 1) {
8873 buf[i] = this[i]
8874 }
8875 return buf.buffer
8876 }
8877 } else {
8878 throw new TypeError('Buffer.toArrayBuffer not supported in this browser')
8879 }
8880}
8881
8882// HELPER FUNCTIONS
8883// ================
8884
8885var BP = Buffer.prototype
8886
8887/**
8888 * Augment a Uint8Array *instance* (not the Uint8Array class!) with Buffer methods
8889 */
8890Buffer._augment = function _augment (arr) {
8891 arr.constructor = Buffer
8892 arr._isBuffer = true
8893
8894 // save reference to original Uint8Array set method before overwriting
8895 arr._set = arr.set
8896
8897 // deprecated
8898 arr.get = BP.get
8899 arr.set = BP.set
8900
8901 arr.write = BP.write
8902 arr.toString = BP.toString
8903 arr.toLocaleString = BP.toString
8904 arr.toJSON = BP.toJSON
8905 arr.equals = BP.equals
8906 arr.compare = BP.compare
8907 arr.indexOf = BP.indexOf
8908 arr.copy = BP.copy
8909 arr.slice = BP.slice
8910 arr.readUIntLE = BP.readUIntLE
8911 arr.readUIntBE = BP.readUIntBE
8912 arr.readUInt8 = BP.readUInt8
8913 arr.readUInt16LE = BP.readUInt16LE
8914 arr.readUInt16BE = BP.readUInt16BE
8915 arr.readUInt32LE = BP.readUInt32LE
8916 arr.readUInt32BE = BP.readUInt32BE
8917 arr.readIntLE = BP.readIntLE
8918 arr.readIntBE = BP.readIntBE
8919 arr.readInt8 = BP.readInt8
8920 arr.readInt16LE = BP.readInt16LE
8921 arr.readInt16BE = BP.readInt16BE
8922 arr.readInt32LE = BP.readInt32LE
8923 arr.readInt32BE = BP.readInt32BE
8924 arr.readFloatLE = BP.readFloatLE
8925 arr.readFloatBE = BP.readFloatBE
8926 arr.readDoubleLE = BP.readDoubleLE
8927 arr.readDoubleBE = BP.readDoubleBE
8928 arr.writeUInt8 = BP.writeUInt8
8929 arr.writeUIntLE = BP.writeUIntLE
8930 arr.writeUIntBE = BP.writeUIntBE
8931 arr.writeUInt16LE = BP.writeUInt16LE
8932 arr.writeUInt16BE = BP.writeUInt16BE
8933 arr.writeUInt32LE = BP.writeUInt32LE
8934 arr.writeUInt32BE = BP.writeUInt32BE
8935 arr.writeIntLE = BP.writeIntLE
8936 arr.writeIntBE = BP.writeIntBE
8937 arr.writeInt8 = BP.writeInt8
8938 arr.writeInt16LE = BP.writeInt16LE
8939 arr.writeInt16BE = BP.writeInt16BE
8940 arr.writeInt32LE = BP.writeInt32LE
8941 arr.writeInt32BE = BP.writeInt32BE
8942 arr.writeFloatLE = BP.writeFloatLE
8943 arr.writeFloatBE = BP.writeFloatBE
8944 arr.writeDoubleLE = BP.writeDoubleLE
8945 arr.writeDoubleBE = BP.writeDoubleBE
8946 arr.fill = BP.fill
8947 arr.inspect = BP.inspect
8948 arr.toArrayBuffer = BP.toArrayBuffer
8949
8950 return arr
8951}
8952
8953var INVALID_BASE64_RE = /[^+\/0-9A-Za-z-_]/g
8954
8955function base64clean (str) {
8956 // Node strips out invalid characters like \n and \t from the string, base64-js does not
8957 str = stringtrim(str).replace(INVALID_BASE64_RE, '')
8958 // Node converts strings with length < 2 to ''
8959 if (str.length < 2) return ''
8960 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
8961 while (str.length % 4 !== 0) {
8962 str = str + '='
8963 }
8964 return str
8965}
8966
8967function stringtrim (str) {
8968 if (str.trim) return str.trim()
8969 return str.replace(/^\s+|\s+$/g, '')
8970}
8971
8972function toHex (n) {
8973 if (n < 16) return '0' + n.toString(16)
8974 return n.toString(16)
8975}
8976
8977function utf8ToBytes (string, units) {
8978 units = units || Infinity
8979 var codePoint
8980 var length = string.length
8981 var leadSurrogate = null
8982 var bytes = []
8983
8984 for (var i = 0; i < length; i++) {
8985 codePoint = string.charCodeAt(i)
8986
8987 // is surrogate component
8988 if (codePoint > 0xD7FF && codePoint < 0xE000) {
8989 // last char was a lead
8990 if (!leadSurrogate) {
8991 // no lead yet
8992 if (codePoint > 0xDBFF) {
8993 // unexpected trail
8994 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
8995 continue
8996
8997 } else if (i + 1 === length) {
8998 // unpaired lead
8999 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
9000 continue
9001 }
9002
9003 // valid lead
9004 leadSurrogate = codePoint
9005
9006 continue
9007 }
9008
9009 // 2 leads in a row
9010 if (codePoint < 0xDC00) {
9011 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
9012 leadSurrogate = codePoint
9013 continue
9014 }
9015
9016 // valid surrogate pair
9017 codePoint = leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00 | 0x10000
9018
9019 } else if (leadSurrogate) {
9020 // valid bmp char, but last char was a lead
9021 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
9022 }
9023
9024 leadSurrogate = null
9025
9026 // encode utf8
9027 if (codePoint < 0x80) {
9028 if ((units -= 1) < 0) break
9029 bytes.push(codePoint)
9030 } else if (codePoint < 0x800) {
9031 if ((units -= 2) < 0) break
9032 bytes.push(
9033 codePoint >> 0x6 | 0xC0,
9034 codePoint & 0x3F | 0x80
9035 )
9036 } else if (codePoint < 0x10000) {
9037 if ((units -= 3) < 0) break
9038 bytes.push(
9039 codePoint >> 0xC | 0xE0,
9040 codePoint >> 0x6 & 0x3F | 0x80,
9041 codePoint & 0x3F | 0x80
9042 )
9043 } else if (codePoint < 0x110000) {
9044 if ((units -= 4) < 0) break
9045 bytes.push(
9046 codePoint >> 0x12 | 0xF0,
9047 codePoint >> 0xC & 0x3F | 0x80,
9048 codePoint >> 0x6 & 0x3F | 0x80,
9049 codePoint & 0x3F | 0x80
9050 )
9051 } else {
9052 throw new Error('Invalid code point')
9053 }
9054 }
9055
9056 return bytes
9057}
9058
9059function asciiToBytes (str) {
9060 var byteArray = []
9061 for (var i = 0; i < str.length; i++) {
9062 // Node's code seems to be doing this and not & 0x7F..
9063 byteArray.push(str.charCodeAt(i) & 0xFF)
9064 }
9065 return byteArray
9066}
9067
9068function utf16leToBytes (str, units) {
9069 var c, hi, lo
9070 var byteArray = []
9071 for (var i = 0; i < str.length; i++) {
9072 if ((units -= 2) < 0) break
9073
9074 c = str.charCodeAt(i)
9075 hi = c >> 8
9076 lo = c % 256
9077 byteArray.push(lo)
9078 byteArray.push(hi)
9079 }
9080
9081 return byteArray
9082}
9083
9084function base64ToBytes (str) {
9085 return base64.toByteArray(base64clean(str))
9086}
9087
9088function blitBuffer (src, dst, offset, length) {
9089 for (var i = 0; i < length; i++) {
9090 if ((i + offset >= dst.length) || (i >= src.length)) break
9091 dst[i + offset] = src[i]
9092 }
9093 return i
9094}
9095
9096},{"base64-js":8,"ieee754":9,"is-array":10}],8:[function(require,module,exports){
9097var lookup = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
9098
9099;(function (exports) {
9100 'use strict';
9101
9102 var Arr = (typeof Uint8Array !== 'undefined')
9103 ? Uint8Array
9104 : Array
9105
9106 var PLUS = '+'.charCodeAt(0)
9107 var SLASH = '/'.charCodeAt(0)
9108 var NUMBER = '0'.charCodeAt(0)
9109 var LOWER = 'a'.charCodeAt(0)
9110 var UPPER = 'A'.charCodeAt(0)
9111 var PLUS_URL_SAFE = '-'.charCodeAt(0)
9112 var SLASH_URL_SAFE = '_'.charCodeAt(0)
9113
9114 function decode (elt) {
9115 var code = elt.charCodeAt(0)
9116 if (code === PLUS ||
9117 code === PLUS_URL_SAFE)
9118 return 62 // '+'
9119 if (code === SLASH ||
9120 code === SLASH_URL_SAFE)
9121 return 63 // '/'
9122 if (code < NUMBER)
9123 return -1 //no match
9124 if (code < NUMBER + 10)
9125 return code - NUMBER + 26 + 26
9126 if (code < UPPER + 26)
9127 return code - UPPER
9128 if (code < LOWER + 26)
9129 return code - LOWER + 26
9130 }
9131
9132 function b64ToByteArray (b64) {
9133 var i, j, l, tmp, placeHolders, arr
9134
9135 if (b64.length % 4 > 0) {
9136 throw new Error('Invalid string. Length must be a multiple of 4')
9137 }
9138
9139 // the number of equal signs (place holders)
9140 // if there are two placeholders, than the two characters before it
9141 // represent one byte
9142 // if there is only one, then the three characters before it represent 2 bytes
9143 // this is just a cheap hack to not do indexOf twice
9144 var len = b64.length
9145 placeHolders = '=' === b64.charAt(len - 2) ? 2 : '=' === b64.charAt(len - 1) ? 1 : 0
9146
9147 // base64 is 4/3 + up to two characters of the original data
9148 arr = new Arr(b64.length * 3 / 4 - placeHolders)
9149
9150 // if there are placeholders, only get up to the last complete 4 chars
9151 l = placeHolders > 0 ? b64.length - 4 : b64.length
9152
9153 var L = 0
9154
9155 function push (v) {
9156 arr[L++] = v
9157 }
9158
9159 for (i = 0, j = 0; i < l; i += 4, j += 3) {
9160 tmp = (decode(b64.charAt(i)) << 18) | (decode(b64.charAt(i + 1)) << 12) | (decode(b64.charAt(i + 2)) << 6) | decode(b64.charAt(i + 3))
9161 push((tmp & 0xFF0000) >> 16)
9162 push((tmp & 0xFF00) >> 8)
9163 push(tmp & 0xFF)
9164 }
9165
9166 if (placeHolders === 2) {
9167 tmp = (decode(b64.charAt(i)) << 2) | (decode(b64.charAt(i + 1)) >> 4)
9168 push(tmp & 0xFF)
9169 } else if (placeHolders === 1) {
9170 tmp = (decode(b64.charAt(i)) << 10) | (decode(b64.charAt(i + 1)) << 4) | (decode(b64.charAt(i + 2)) >> 2)
9171 push((tmp >> 8) & 0xFF)
9172 push(tmp & 0xFF)
9173 }
9174
9175 return arr
9176 }
9177
9178 function uint8ToBase64 (uint8) {
9179 var i,
9180 extraBytes = uint8.length % 3, // if we have 1 byte left, pad 2 bytes
9181 output = "",
9182 temp, length
9183
9184 function encode (num) {
9185 return lookup.charAt(num)
9186 }
9187
9188 function tripletToBase64 (num) {
9189 return encode(num >> 18 & 0x3F) + encode(num >> 12 & 0x3F) + encode(num >> 6 & 0x3F) + encode(num & 0x3F)
9190 }
9191
9192 // go through the array every three bytes, we'll deal with trailing stuff later
9193 for (i = 0, length = uint8.length - extraBytes; i < length; i += 3) {
9194 temp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
9195 output += tripletToBase64(temp)
9196 }
9197
9198 // pad the end with zeros, but make sure to not forget the extra bytes
9199 switch (extraBytes) {
9200 case 1:
9201 temp = uint8[uint8.length - 1]
9202 output += encode(temp >> 2)
9203 output += encode((temp << 4) & 0x3F)
9204 output += '=='
9205 break
9206 case 2:
9207 temp = (uint8[uint8.length - 2] << 8) + (uint8[uint8.length - 1])
9208 output += encode(temp >> 10)
9209 output += encode((temp >> 4) & 0x3F)
9210 output += encode((temp << 2) & 0x3F)
9211 output += '='
9212 break
9213 }
9214
9215 return output
9216 }
9217
9218 exports.toByteArray = b64ToByteArray
9219 exports.fromByteArray = uint8ToBase64
9220}(typeof exports === 'undefined' ? (this.base64js = {}) : exports))
9221
9222},{}],9:[function(require,module,exports){
9223exports.read = function (buffer, offset, isLE, mLen, nBytes) {
9224 var e, m
9225 var eLen = nBytes * 8 - mLen - 1
9226 var eMax = (1 << eLen) - 1
9227 var eBias = eMax >> 1
9228 var nBits = -7
9229 var i = isLE ? (nBytes - 1) : 0
9230 var d = isLE ? -1 : 1
9231 var s = buffer[offset + i]
9232
9233 i += d
9234
9235 e = s & ((1 << (-nBits)) - 1)
9236 s >>= (-nBits)
9237 nBits += eLen
9238 for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
9239
9240 m = e & ((1 << (-nBits)) - 1)
9241 e >>= (-nBits)
9242 nBits += mLen
9243 for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
9244
9245 if (e === 0) {
9246 e = 1 - eBias
9247 } else if (e === eMax) {
9248 return m ? NaN : ((s ? -1 : 1) * Infinity)
9249 } else {
9250 m = m + Math.pow(2, mLen)
9251 e = e - eBias
9252 }
9253 return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
9254}
9255
9256exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
9257 var e, m, c
9258 var eLen = nBytes * 8 - mLen - 1
9259 var eMax = (1 << eLen) - 1
9260 var eBias = eMax >> 1
9261 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
9262 var i = isLE ? 0 : (nBytes - 1)
9263 var d = isLE ? 1 : -1
9264 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
9265
9266 value = Math.abs(value)
9267
9268 if (isNaN(value) || value === Infinity) {
9269 m = isNaN(value) ? 1 : 0
9270 e = eMax
9271 } else {
9272 e = Math.floor(Math.log(value) / Math.LN2)
9273 if (value * (c = Math.pow(2, -e)) < 1) {
9274 e--
9275 c *= 2
9276 }
9277 if (e + eBias >= 1) {
9278 value += rt / c
9279 } else {
9280 value += rt * Math.pow(2, 1 - eBias)
9281 }
9282 if (value * c >= 2) {
9283 e++
9284 c /= 2
9285 }
9286
9287 if (e + eBias >= eMax) {
9288 m = 0
9289 e = eMax
9290 } else if (e + eBias >= 1) {
9291 m = (value * c - 1) * Math.pow(2, mLen)
9292 e = e + eBias
9293 } else {
9294 m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
9295 e = 0
9296 }
9297 }
9298
9299 for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
9300
9301 e = (e << mLen) | m
9302 eLen += mLen
9303 for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
9304
9305 buffer[offset + i - d] |= s * 128
9306}
9307
9308},{}],10:[function(require,module,exports){
9309
9310/**
9311 * isArray
9312 */
9313
9314var isArray = Array.isArray;
9315
9316/**
9317 * toString
9318 */
9319
9320var str = Object.prototype.toString;
9321
9322/**
9323 * Whether or not the given `val`
9324 * is an array.
9325 *
9326 * example:
9327 *
9328 * isArray([]);
9329 * // > true
9330 * isArray(arguments);
9331 * // > false
9332 * isArray('');
9333 * // > false
9334 *
9335 * @param {mixed} val
9336 * @return {bool}
9337 */
9338
9339module.exports = isArray || function (val) {
9340 return !! val && '[object Array]' == str.call(val);
9341};
9342
9343},{}],11:[function(require,module,exports){
9344// Copyright Joyent, Inc. and other Node contributors.
9345//
9346// Permission is hereby granted, free of charge, to any person obtaining a
9347// copy of this software and associated documentation files (the
9348// "Software"), to deal in the Software without restriction, including
9349// without limitation the rights to use, copy, modify, merge, publish,
9350// distribute, sublicense, and/or sell copies of the Software, and to permit
9351// persons to whom the Software is furnished to do so, subject to the
9352// following conditions:
9353//
9354// The above copyright notice and this permission notice shall be included
9355// in all copies or substantial portions of the Software.
9356//
9357// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
9358// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
9359// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
9360// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
9361// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
9362// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
9363// USE OR OTHER DEALINGS IN THE SOFTWARE.
9364
9365function EventEmitter() {
9366 this._events = this._events || {};
9367 this._maxListeners = this._maxListeners || undefined;
9368}
9369module.exports = EventEmitter;
9370
9371// Backwards-compat with node 0.10.x
9372EventEmitter.EventEmitter = EventEmitter;
9373
9374EventEmitter.prototype._events = undefined;
9375EventEmitter.prototype._maxListeners = undefined;
9376
9377// By default EventEmitters will print a warning if more than 10 listeners are
9378// added to it. This is a useful default which helps finding memory leaks.
9379EventEmitter.defaultMaxListeners = 10;
9380
9381// Obviously not all Emitters should be limited to 10. This function allows
9382// that to be increased. Set to zero for unlimited.
9383EventEmitter.prototype.setMaxListeners = function(n) {
9384 if (!isNumber(n) || n < 0 || isNaN(n))
9385 throw TypeError('n must be a positive number');
9386 this._maxListeners = n;
9387 return this;
9388};
9389
9390EventEmitter.prototype.emit = function(type) {
9391 var er, handler, len, args, i, listeners;
9392
9393 if (!this._events)
9394 this._events = {};
9395
9396 // If there is no 'error' event listener then throw.
9397 if (type === 'error') {
9398 if (!this._events.error ||
9399 (isObject(this._events.error) && !this._events.error.length)) {
9400 er = arguments[1];
9401 if (er instanceof Error) {
9402 throw er; // Unhandled 'error' event
9403 }
9404 throw TypeError('Uncaught, unspecified "error" event.');
9405 }
9406 }
9407
9408 handler = this._events[type];
9409
9410 if (isUndefined(handler))
9411 return false;
9412
9413 if (isFunction(handler)) {
9414 switch (arguments.length) {
9415 // fast cases
9416 case 1:
9417 handler.call(this);
9418 break;
9419 case 2:
9420 handler.call(this, arguments[1]);
9421 break;
9422 case 3:
9423 handler.call(this, arguments[1], arguments[2]);
9424 break;
9425 // slower
9426 default:
9427 len = arguments.length;
9428 args = new Array(len - 1);
9429 for (i = 1; i < len; i++)
9430 args[i - 1] = arguments[i];
9431 handler.apply(this, args);
9432 }
9433 } else if (isObject(handler)) {
9434 len = arguments.length;
9435 args = new Array(len - 1);
9436 for (i = 1; i < len; i++)
9437 args[i - 1] = arguments[i];
9438
9439 listeners = handler.slice();
9440 len = listeners.length;
9441 for (i = 0; i < len; i++)
9442 listeners[i].apply(this, args);
9443 }
9444
9445 return true;
9446};
9447
9448EventEmitter.prototype.addListener = function(type, listener) {
9449 var m;
9450
9451 if (!isFunction(listener))
9452 throw TypeError('listener must be a function');
9453
9454 if (!this._events)
9455 this._events = {};
9456
9457 // To avoid recursion in the case that type === "newListener"! Before
9458 // adding it to the listeners, first emit "newListener".
9459 if (this._events.newListener)
9460 this.emit('newListener', type,
9461 isFunction(listener.listener) ?
9462 listener.listener : listener);
9463
9464 if (!this._events[type])
9465 // Optimize the case of one listener. Don't need the extra array object.
9466 this._events[type] = listener;
9467 else if (isObject(this._events[type]))
9468 // If we've already got an array, just append.
9469 this._events[type].push(listener);
9470 else
9471 // Adding the second element, need to change to array.
9472 this._events[type] = [this._events[type], listener];
9473
9474 // Check for listener leak
9475 if (isObject(this._events[type]) && !this._events[type].warned) {
9476 var m;
9477 if (!isUndefined(this._maxListeners)) {
9478 m = this._maxListeners;
9479 } else {
9480 m = EventEmitter.defaultMaxListeners;
9481 }
9482
9483 if (m && m > 0 && this._events[type].length > m) {
9484 this._events[type].warned = true;
9485 console.error('(node) warning: possible EventEmitter memory ' +
9486 'leak detected. %d listeners added. ' +
9487 'Use emitter.setMaxListeners() to increase limit.',
9488 this._events[type].length);
9489 if (typeof console.trace === 'function') {
9490 // not supported in IE 10
9491 console.trace();
9492 }
9493 }
9494 }
9495
9496 return this;
9497};
9498
9499EventEmitter.prototype.on = EventEmitter.prototype.addListener;
9500
9501EventEmitter.prototype.once = function(type, listener) {
9502 if (!isFunction(listener))
9503 throw TypeError('listener must be a function');
9504
9505 var fired = false;
9506
9507 function g() {
9508 this.removeListener(type, g);
9509
9510 if (!fired) {
9511 fired = true;
9512 listener.apply(this, arguments);
9513 }
9514 }
9515
9516 g.listener = listener;
9517 this.on(type, g);
9518
9519 return this;
9520};
9521
9522// emits a 'removeListener' event iff the listener was removed
9523EventEmitter.prototype.removeListener = function(type, listener) {
9524 var list, position, length, i;
9525
9526 if (!isFunction(listener))
9527 throw TypeError('listener must be a function');
9528
9529 if (!this._events || !this._events[type])
9530 return this;
9531
9532 list = this._events[type];
9533 length = list.length;
9534 position = -1;
9535
9536 if (list === listener ||
9537 (isFunction(list.listener) && list.listener === listener)) {
9538 delete this._events[type];
9539 if (this._events.removeListener)
9540 this.emit('removeListener', type, listener);
9541
9542 } else if (isObject(list)) {
9543 for (i = length; i-- > 0;) {
9544 if (list[i] === listener ||
9545 (list[i].listener && list[i].listener === listener)) {
9546 position = i;
9547 break;
9548 }
9549 }
9550
9551 if (position < 0)
9552 return this;
9553
9554 if (list.length === 1) {
9555 list.length = 0;
9556 delete this._events[type];
9557 } else {
9558 list.splice(position, 1);
9559 }
9560
9561 if (this._events.removeListener)
9562 this.emit('removeListener', type, listener);
9563 }
9564
9565 return this;
9566};
9567
9568EventEmitter.prototype.removeAllListeners = function(type) {
9569 var key, listeners;
9570
9571 if (!this._events)
9572 return this;
9573
9574 // not listening for removeListener, no need to emit
9575 if (!this._events.removeListener) {
9576 if (arguments.length === 0)
9577 this._events = {};
9578 else if (this._events[type])
9579 delete this._events[type];
9580 return this;
9581 }
9582
9583 // emit removeListener for all listeners on all events
9584 if (arguments.length === 0) {
9585 for (key in this._events) {
9586 if (key === 'removeListener') continue;
9587 this.removeAllListeners(key);
9588 }
9589 this.removeAllListeners('removeListener');
9590 this._events = {};
9591 return this;
9592 }
9593
9594 listeners = this._events[type];
9595
9596 if (isFunction(listeners)) {
9597 this.removeListener(type, listeners);
9598 } else {
9599 // LIFO order
9600 while (listeners.length)
9601 this.removeListener(type, listeners[listeners.length - 1]);
9602 }
9603 delete this._events[type];
9604
9605 return this;
9606};
9607
9608EventEmitter.prototype.listeners = function(type) {
9609 var ret;
9610 if (!this._events || !this._events[type])
9611 ret = [];
9612 else if (isFunction(this._events[type]))
9613 ret = [this._events[type]];
9614 else
9615 ret = this._events[type].slice();
9616 return ret;
9617};
9618
9619EventEmitter.listenerCount = function(emitter, type) {
9620 var ret;
9621 if (!emitter._events || !emitter._events[type])
9622 ret = 0;
9623 else if (isFunction(emitter._events[type]))
9624 ret = 1;
9625 else
9626 ret = emitter._events[type].length;
9627 return ret;
9628};
9629
9630function isFunction(arg) {
9631 return typeof arg === 'function';
9632}
9633
9634function isNumber(arg) {
9635 return typeof arg === 'number';
9636}
9637
9638function isObject(arg) {
9639 return typeof arg === 'object' && arg !== null;
9640}
9641
9642function isUndefined(arg) {
9643 return arg === void 0;
9644}
9645
9646},{}],12:[function(require,module,exports){
9647if (typeof Object.create === 'function') {
9648 // implementation from standard node.js 'util' module
9649 module.exports = function inherits(ctor, superCtor) {
9650 ctor.super_ = superCtor
9651 ctor.prototype = Object.create(superCtor.prototype, {
9652 constructor: {
9653 value: ctor,
9654 enumerable: false,
9655 writable: true,
9656 configurable: true
9657 }
9658 });
9659 };
9660} else {
9661 // old school shim for old browsers
9662 module.exports = function inherits(ctor, superCtor) {
9663 ctor.super_ = superCtor
9664 var TempCtor = function () {}
9665 TempCtor.prototype = superCtor.prototype
9666 ctor.prototype = new TempCtor()
9667 ctor.prototype.constructor = ctor
9668 }
9669}
9670
9671},{}],13:[function(require,module,exports){
9672module.exports = Array.isArray || function (arr) {
9673 return Object.prototype.toString.call(arr) == '[object Array]';
9674};
9675
9676},{}],14:[function(require,module,exports){
9677// shim for using process in browser
9678
9679var process = module.exports = {};
9680var queue = [];
9681var draining = false;
9682var currentQueue;
9683var queueIndex = -1;
9684
9685function cleanUpNextTick() {
9686 draining = false;
9687 if (currentQueue.length) {
9688 queue = currentQueue.concat(queue);
9689 } else {
9690 queueIndex = -1;
9691 }
9692 if (queue.length) {
9693 drainQueue();
9694 }
9695}
9696
9697function drainQueue() {
9698 if (draining) {
9699 return;
9700 }
9701 var timeout = setTimeout(cleanUpNextTick);
9702 draining = true;
9703
9704 var len = queue.length;
9705 while(len) {
9706 currentQueue = queue;
9707 queue = [];
9708 while (++queueIndex < len) {
9709 currentQueue[queueIndex].run();
9710 }
9711 queueIndex = -1;
9712 len = queue.length;
9713 }
9714 currentQueue = null;
9715 draining = false;
9716 clearTimeout(timeout);
9717}
9718
9719process.nextTick = function (fun) {
9720 var args = new Array(arguments.length - 1);
9721 if (arguments.length > 1) {
9722 for (var i = 1; i < arguments.length; i++) {
9723 args[i - 1] = arguments[i];
9724 }
9725 }
9726 queue.push(new Item(fun, args));
9727 if (queue.length === 1 && !draining) {
9728 setTimeout(drainQueue, 0);
9729 }
9730};
9731
9732// v8 likes predictible objects
9733function Item(fun, array) {
9734 this.fun = fun;
9735 this.array = array;
9736}
9737Item.prototype.run = function () {
9738 this.fun.apply(null, this.array);
9739};
9740process.title = 'browser';
9741process.browser = true;
9742process.env = {};
9743process.argv = [];
9744process.version = ''; // empty string to avoid regexp issues
9745process.versions = {};
9746
9747function noop() {}
9748
9749process.on = noop;
9750process.addListener = noop;
9751process.once = noop;
9752process.off = noop;
9753process.removeListener = noop;
9754process.removeAllListeners = noop;
9755process.emit = noop;
9756
9757process.binding = function (name) {
9758 throw new Error('process.binding is not supported');
9759};
9760
9761// TODO(shtylman)
9762process.cwd = function () { return '/' };
9763process.chdir = function (dir) {
9764 throw new Error('process.chdir is not supported');
9765};
9766process.umask = function() { return 0; };
9767
9768},{}],15:[function(require,module,exports){
9769module.exports = require("./lib/_stream_duplex.js")
9770
9771},{"./lib/_stream_duplex.js":16}],16:[function(require,module,exports){
9772(function (process){
9773// Copyright Joyent, Inc. and other Node contributors.
9774//
9775// Permission is hereby granted, free of charge, to any person obtaining a
9776// copy of this software and associated documentation files (the
9777// "Software"), to deal in the Software without restriction, including
9778// without limitation the rights to use, copy, modify, merge, publish,
9779// distribute, sublicense, and/or sell copies of the Software, and to permit
9780// persons to whom the Software is furnished to do so, subject to the
9781// following conditions:
9782//
9783// The above copyright notice and this permission notice shall be included
9784// in all copies or substantial portions of the Software.
9785//
9786// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
9787// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
9788// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
9789// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
9790// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
9791// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
9792// USE OR OTHER DEALINGS IN THE SOFTWARE.
9793
9794// a duplex stream is just a stream that is both readable and writable.
9795// Since JS doesn't have multiple prototypal inheritance, this class
9796// prototypally inherits from Readable, and then parasitically from
9797// Writable.
9798
9799module.exports = Duplex;
9800
9801/*<replacement>*/
9802var objectKeys = Object.keys || function (obj) {
9803 var keys = [];
9804 for (var key in obj) keys.push(key);
9805 return keys;
9806}
9807/*</replacement>*/
9808
9809
9810/*<replacement>*/
9811var util = require('core-util-is');
9812util.inherits = require('inherits');
9813/*</replacement>*/
9814
9815var Readable = require('./_stream_readable');
9816var Writable = require('./_stream_writable');
9817
9818util.inherits(Duplex, Readable);
9819
9820forEach(objectKeys(Writable.prototype), function(method) {
9821 if (!Duplex.prototype[method])
9822 Duplex.prototype[method] = Writable.prototype[method];
9823});
9824
9825function Duplex(options) {
9826 if (!(this instanceof Duplex))
9827 return new Duplex(options);
9828
9829 Readable.call(this, options);
9830 Writable.call(this, options);
9831
9832 if (options && options.readable === false)
9833 this.readable = false;
9834
9835 if (options && options.writable === false)
9836 this.writable = false;
9837
9838 this.allowHalfOpen = true;
9839 if (options && options.allowHalfOpen === false)
9840 this.allowHalfOpen = false;
9841
9842 this.once('end', onend);
9843}
9844
9845// the no-half-open enforcer
9846function onend() {
9847 // if we allow half-open state, or if the writable side ended,
9848 // then we're ok.
9849 if (this.allowHalfOpen || this._writableState.ended)
9850 return;
9851
9852 // no more data can be written.
9853 // But allow more writes to happen in this tick.
9854 process.nextTick(this.end.bind(this));
9855}
9856
9857function forEach (xs, f) {
9858 for (var i = 0, l = xs.length; i < l; i++) {
9859 f(xs[i], i);
9860 }
9861}
9862
9863}).call(this,require('_process'))
9864},{"./_stream_readable":18,"./_stream_writable":20,"_process":14,"core-util-is":21,"inherits":12}],17:[function(require,module,exports){
9865// Copyright Joyent, Inc. and other Node contributors.
9866//
9867// Permission is hereby granted, free of charge, to any person obtaining a
9868// copy of this software and associated documentation files (the
9869// "Software"), to deal in the Software without restriction, including
9870// without limitation the rights to use, copy, modify, merge, publish,
9871// distribute, sublicense, and/or sell copies of the Software, and to permit
9872// persons to whom the Software is furnished to do so, subject to the
9873// following conditions:
9874//
9875// The above copyright notice and this permission notice shall be included
9876// in all copies or substantial portions of the Software.
9877//
9878// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
9879// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
9880// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
9881// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
9882// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
9883// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
9884// USE OR OTHER DEALINGS IN THE SOFTWARE.
9885
9886// a passthrough stream.
9887// basically just the most minimal sort of Transform stream.
9888// Every written chunk gets output as-is.
9889
9890module.exports = PassThrough;
9891
9892var Transform = require('./_stream_transform');
9893
9894/*<replacement>*/
9895var util = require('core-util-is');
9896util.inherits = require('inherits');
9897/*</replacement>*/
9898
9899util.inherits(PassThrough, Transform);
9900
9901function PassThrough(options) {
9902 if (!(this instanceof PassThrough))
9903 return new PassThrough(options);
9904
9905 Transform.call(this, options);
9906}
9907
9908PassThrough.prototype._transform = function(chunk, encoding, cb) {
9909 cb(null, chunk);
9910};
9911
9912},{"./_stream_transform":19,"core-util-is":21,"inherits":12}],18:[function(require,module,exports){
9913(function (process){
9914// Copyright Joyent, Inc. and other Node contributors.
9915//
9916// Permission is hereby granted, free of charge, to any person obtaining a
9917// copy of this software and associated documentation files (the
9918// "Software"), to deal in the Software without restriction, including
9919// without limitation the rights to use, copy, modify, merge, publish,
9920// distribute, sublicense, and/or sell copies of the Software, and to permit
9921// persons to whom the Software is furnished to do so, subject to the
9922// following conditions:
9923//
9924// The above copyright notice and this permission notice shall be included
9925// in all copies or substantial portions of the Software.
9926//
9927// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
9928// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
9929// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
9930// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
9931// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
9932// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
9933// USE OR OTHER DEALINGS IN THE SOFTWARE.
9934
9935module.exports = Readable;
9936
9937/*<replacement>*/
9938var isArray = require('isarray');
9939/*</replacement>*/
9940
9941
9942/*<replacement>*/
9943var Buffer = require('buffer').Buffer;
9944/*</replacement>*/
9945
9946Readable.ReadableState = ReadableState;
9947
9948var EE = require('events').EventEmitter;
9949
9950/*<replacement>*/
9951if (!EE.listenerCount) EE.listenerCount = function(emitter, type) {
9952 return emitter.listeners(type).length;
9953};
9954/*</replacement>*/
9955
9956var Stream = require('stream');
9957
9958/*<replacement>*/
9959var util = require('core-util-is');
9960util.inherits = require('inherits');
9961/*</replacement>*/
9962
9963var StringDecoder;
9964
9965
9966/*<replacement>*/
9967var debug = require('util');
9968if (debug && debug.debuglog) {
9969 debug = debug.debuglog('stream');
9970} else {
9971 debug = function () {};
9972}
9973/*</replacement>*/
9974
9975
9976util.inherits(Readable, Stream);
9977
9978function ReadableState(options, stream) {
9979 var Duplex = require('./_stream_duplex');
9980
9981 options = options || {};
9982
9983 // the point at which it stops calling _read() to fill the buffer
9984 // Note: 0 is a valid value, means "don't call _read preemptively ever"
9985 var hwm = options.highWaterMark;
9986 var defaultHwm = options.objectMode ? 16 : 16 * 1024;
9987 this.highWaterMark = (hwm || hwm === 0) ? hwm : defaultHwm;
9988
9989 // cast to ints.
9990 this.highWaterMark = ~~this.highWaterMark;
9991
9992 this.buffer = [];
9993 this.length = 0;
9994 this.pipes = null;
9995 this.pipesCount = 0;
9996 this.flowing = null;
9997 this.ended = false;
9998 this.endEmitted = false;
9999 this.reading = false;
10000
10001 // a flag to be able to tell if the onwrite cb is called immediately,
10002 // or on a later tick. We set this to true at first, because any
10003 // actions that shouldn't happen until "later" should generally also
10004 // not happen before the first write call.
10005 this.sync = true;
10006
10007 // whenever we return null, then we set a flag to say
10008 // that we're awaiting a 'readable' event emission.
10009 this.needReadable = false;
10010 this.emittedReadable = false;
10011 this.readableListening = false;
10012
10013
10014 // object stream flag. Used to make read(n) ignore n and to
10015 // make all the buffer merging and length checks go away
10016 this.objectMode = !!options.objectMode;
10017
10018 if (stream instanceof Duplex)
10019 this.objectMode = this.objectMode || !!options.readableObjectMode;
10020
10021 // Crypto is kind of old and crusty. Historically, its default string
10022 // encoding is 'binary' so we have to make this configurable.
10023 // Everything else in the universe uses 'utf8', though.
10024 this.defaultEncoding = options.defaultEncoding || 'utf8';
10025
10026 // when piping, we only care about 'readable' events that happen
10027 // after read()ing all the bytes and not getting any pushback.
10028 this.ranOut = false;
10029
10030 // the number of writers that are awaiting a drain event in .pipe()s
10031 this.awaitDrain = 0;
10032
10033 // if true, a maybeReadMore has been scheduled
10034 this.readingMore = false;
10035
10036 this.decoder = null;
10037 this.encoding = null;
10038 if (options.encoding) {
10039 if (!StringDecoder)
10040 StringDecoder = require('string_decoder/').StringDecoder;
10041 this.decoder = new StringDecoder(options.encoding);
10042 this.encoding = options.encoding;
10043 }
10044}
10045
10046function Readable(options) {
10047 var Duplex = require('./_stream_duplex');
10048
10049 if (!(this instanceof Readable))
10050 return new Readable(options);
10051
10052 this._readableState = new ReadableState(options, this);
10053
10054 // legacy
10055 this.readable = true;
10056
10057 Stream.call(this);
10058}
10059
10060// Manually shove something into the read() buffer.
10061// This returns true if the highWaterMark has not been hit yet,
10062// similar to how Writable.write() returns true if you should
10063// write() some more.
10064Readable.prototype.push = function(chunk, encoding) {
10065 var state = this._readableState;
10066
10067 if (util.isString(chunk) && !state.objectMode) {
10068 encoding = encoding || state.defaultEncoding;
10069 if (encoding !== state.encoding) {
10070 chunk = new Buffer(chunk, encoding);
10071 encoding = '';
10072 }
10073 }
10074
10075 return readableAddChunk(this, state, chunk, encoding, false);
10076};
10077
10078// Unshift should *always* be something directly out of read()
10079Readable.prototype.unshift = function(chunk) {
10080 var state = this._readableState;
10081 return readableAddChunk(this, state, chunk, '', true);
10082};
10083
10084function readableAddChunk(stream, state, chunk, encoding, addToFront) {
10085 var er = chunkInvalid(state, chunk);
10086 if (er) {
10087 stream.emit('error', er);
10088 } else if (util.isNullOrUndefined(chunk)) {
10089 state.reading = false;
10090 if (!state.ended)
10091 onEofChunk(stream, state);
10092 } else if (state.objectMode || chunk && chunk.length > 0) {
10093 if (state.ended && !addToFront) {
10094 var e = new Error('stream.push() after EOF');
10095 stream.emit('error', e);
10096 } else if (state.endEmitted && addToFront) {
10097 var e = new Error('stream.unshift() after end event');
10098 stream.emit('error', e);
10099 } else {
10100 if (state.decoder && !addToFront && !encoding)
10101 chunk = state.decoder.write(chunk);
10102
10103 if (!addToFront)
10104 state.reading = false;
10105
10106 // if we want the data now, just emit it.
10107 if (state.flowing && state.length === 0 && !state.sync) {
10108 stream.emit('data', chunk);
10109 stream.read(0);
10110 } else {
10111 // update the buffer info.
10112 state.length += state.objectMode ? 1 : chunk.length;
10113 if (addToFront)
10114 state.buffer.unshift(chunk);
10115 else
10116 state.buffer.push(chunk);
10117
10118 if (state.needReadable)
10119 emitReadable(stream);
10120 }
10121
10122 maybeReadMore(stream, state);
10123 }
10124 } else if (!addToFront) {
10125 state.reading = false;
10126 }
10127
10128 return needMoreData(state);
10129}
10130
10131
10132
10133// if it's past the high water mark, we can push in some more.
10134// Also, if we have no data yet, we can stand some
10135// more bytes. This is to work around cases where hwm=0,
10136// such as the repl. Also, if the push() triggered a
10137// readable event, and the user called read(largeNumber) such that
10138// needReadable was set, then we ought to push more, so that another
10139// 'readable' event will be triggered.
10140function needMoreData(state) {
10141 return !state.ended &&
10142 (state.needReadable ||
10143 state.length < state.highWaterMark ||
10144 state.length === 0);
10145}
10146
10147// backwards compatibility.
10148Readable.prototype.setEncoding = function(enc) {
10149 if (!StringDecoder)
10150 StringDecoder = require('string_decoder/').StringDecoder;
10151 this._readableState.decoder = new StringDecoder(enc);
10152 this._readableState.encoding = enc;
10153 return this;
10154};
10155
10156// Don't raise the hwm > 128MB
10157var MAX_HWM = 0x800000;
10158function roundUpToNextPowerOf2(n) {
10159 if (n >= MAX_HWM) {
10160 n = MAX_HWM;
10161 } else {
10162 // Get the next highest power of 2
10163 n--;
10164 for (var p = 1; p < 32; p <<= 1) n |= n >> p;
10165 n++;
10166 }
10167 return n;
10168}
10169
10170function howMuchToRead(n, state) {
10171 if (state.length === 0 && state.ended)
10172 return 0;
10173
10174 if (state.objectMode)
10175 return n === 0 ? 0 : 1;
10176
10177 if (isNaN(n) || util.isNull(n)) {
10178 // only flow one buffer at a time
10179 if (state.flowing && state.buffer.length)
10180 return state.buffer[0].length;
10181 else
10182 return state.length;
10183 }
10184
10185 if (n <= 0)
10186 return 0;
10187
10188 // If we're asking for more than the target buffer level,
10189 // then raise the water mark. Bump up to the next highest
10190 // power of 2, to prevent increasing it excessively in tiny
10191 // amounts.
10192 if (n > state.highWaterMark)
10193 state.highWaterMark = roundUpToNextPowerOf2(n);
10194
10195 // don't have that much. return null, unless we've ended.
10196 if (n > state.length) {
10197 if (!state.ended) {
10198 state.needReadable = true;
10199 return 0;
10200 } else
10201 return state.length;
10202 }
10203
10204 return n;
10205}
10206
10207// you can override either this method, or the async _read(n) below.
10208Readable.prototype.read = function(n) {
10209 debug('read', n);
10210 var state = this._readableState;
10211 var nOrig = n;
10212
10213 if (!util.isNumber(n) || n > 0)
10214 state.emittedReadable = false;
10215
10216 // if we're doing read(0) to trigger a readable event, but we
10217 // already have a bunch of data in the buffer, then just trigger
10218 // the 'readable' event and move on.
10219 if (n === 0 &&
10220 state.needReadable &&
10221 (state.length >= state.highWaterMark || state.ended)) {
10222 debug('read: emitReadable', state.length, state.ended);
10223 if (state.length === 0 && state.ended)
10224 endReadable(this);
10225 else
10226 emitReadable(this);
10227 return null;
10228 }
10229
10230 n = howMuchToRead(n, state);
10231
10232 // if we've ended, and we're now clear, then finish it up.
10233 if (n === 0 && state.ended) {
10234 if (state.length === 0)
10235 endReadable(this);
10236 return null;
10237 }
10238
10239 // All the actual chunk generation logic needs to be
10240 // *below* the call to _read. The reason is that in certain
10241 // synthetic stream cases, such as passthrough streams, _read
10242 // may be a completely synchronous operation which may change
10243 // the state of the read buffer, providing enough data when
10244 // before there was *not* enough.
10245 //
10246 // So, the steps are:
10247 // 1. Figure out what the state of things will be after we do
10248 // a read from the buffer.
10249 //
10250 // 2. If that resulting state will trigger a _read, then call _read.
10251 // Note that this may be asynchronous, or synchronous. Yes, it is
10252 // deeply ugly to write APIs this way, but that still doesn't mean
10253 // that the Readable class should behave improperly, as streams are
10254 // designed to be sync/async agnostic.
10255 // Take note if the _read call is sync or async (ie, if the read call
10256 // has returned yet), so that we know whether or not it's safe to emit
10257 // 'readable' etc.
10258 //
10259 // 3. Actually pull the requested chunks out of the buffer and return.
10260
10261 // if we need a readable event, then we need to do some reading.
10262 var doRead = state.needReadable;
10263 debug('need readable', doRead);
10264
10265 // if we currently have less than the highWaterMark, then also read some
10266 if (state.length === 0 || state.length - n < state.highWaterMark) {
10267 doRead = true;
10268 debug('length less than watermark', doRead);
10269 }
10270
10271 // however, if we've ended, then there's no point, and if we're already
10272 // reading, then it's unnecessary.
10273 if (state.ended || state.reading) {
10274 doRead = false;
10275 debug('reading or ended', doRead);
10276 }
10277
10278 if (doRead) {
10279 debug('do read');
10280 state.reading = true;
10281 state.sync = true;
10282 // if the length is currently zero, then we *need* a readable event.
10283 if (state.length === 0)
10284 state.needReadable = true;
10285 // call internal read method
10286 this._read(state.highWaterMark);
10287 state.sync = false;
10288 }
10289
10290 // If _read pushed data synchronously, then `reading` will be false,
10291 // and we need to re-evaluate how much data we can return to the user.
10292 if (doRead && !state.reading)
10293 n = howMuchToRead(nOrig, state);
10294
10295 var ret;
10296 if (n > 0)
10297 ret = fromList(n, state);
10298 else
10299 ret = null;
10300
10301 if (util.isNull(ret)) {
10302 state.needReadable = true;
10303 n = 0;
10304 }
10305
10306 state.length -= n;
10307
10308 // If we have nothing in the buffer, then we want to know
10309 // as soon as we *do* get something into the buffer.
10310 if (state.length === 0 && !state.ended)
10311 state.needReadable = true;
10312
10313 // If we tried to read() past the EOF, then emit end on the next tick.
10314 if (nOrig !== n && state.ended && state.length === 0)
10315 endReadable(this);
10316
10317 if (!util.isNull(ret))
10318 this.emit('data', ret);
10319
10320 return ret;
10321};
10322
10323function chunkInvalid(state, chunk) {
10324 var er = null;
10325 if (!util.isBuffer(chunk) &&
10326 !util.isString(chunk) &&
10327 !util.isNullOrUndefined(chunk) &&
10328 !state.objectMode) {
10329 er = new TypeError('Invalid non-string/buffer chunk');
10330 }
10331 return er;
10332}
10333
10334
10335function onEofChunk(stream, state) {
10336 if (state.decoder && !state.ended) {
10337 var chunk = state.decoder.end();
10338 if (chunk && chunk.length) {
10339 state.buffer.push(chunk);
10340 state.length += state.objectMode ? 1 : chunk.length;
10341 }
10342 }
10343 state.ended = true;
10344
10345 // emit 'readable' now to make sure it gets picked up.
10346 emitReadable(stream);
10347}
10348
10349// Don't emit readable right away in sync mode, because this can trigger
10350// another read() call => stack overflow. This way, it might trigger
10351// a nextTick recursion warning, but that's not so bad.
10352function emitReadable(stream) {
10353 var state = stream._readableState;
10354 state.needReadable = false;
10355 if (!state.emittedReadable) {
10356 debug('emitReadable', state.flowing);
10357 state.emittedReadable = true;
10358 if (state.sync)
10359 process.nextTick(function() {
10360 emitReadable_(stream);
10361 });
10362 else
10363 emitReadable_(stream);
10364 }
10365}
10366
10367function emitReadable_(stream) {
10368 debug('emit readable');
10369 stream.emit('readable');
10370 flow(stream);
10371}
10372
10373
10374// at this point, the user has presumably seen the 'readable' event,
10375// and called read() to consume some data. that may have triggered
10376// in turn another _read(n) call, in which case reading = true if
10377// it's in progress.
10378// However, if we're not ended, or reading, and the length < hwm,
10379// then go ahead and try to read some more preemptively.
10380function maybeReadMore(stream, state) {
10381 if (!state.readingMore) {
10382 state.readingMore = true;
10383 process.nextTick(function() {
10384 maybeReadMore_(stream, state);
10385 });
10386 }
10387}
10388
10389function maybeReadMore_(stream, state) {
10390 var len = state.length;
10391 while (!state.reading && !state.flowing && !state.ended &&
10392 state.length < state.highWaterMark) {
10393 debug('maybeReadMore read 0');
10394 stream.read(0);
10395 if (len === state.length)
10396 // didn't get any data, stop spinning.
10397 break;
10398 else
10399 len = state.length;
10400 }
10401 state.readingMore = false;
10402}
10403
10404// abstract method. to be overridden in specific implementation classes.
10405// call cb(er, data) where data is <= n in length.
10406// for virtual (non-string, non-buffer) streams, "length" is somewhat
10407// arbitrary, and perhaps not very meaningful.
10408Readable.prototype._read = function(n) {
10409 this.emit('error', new Error('not implemented'));
10410};
10411
10412Readable.prototype.pipe = function(dest, pipeOpts) {
10413 var src = this;
10414 var state = this._readableState;
10415
10416 switch (state.pipesCount) {
10417 case 0:
10418 state.pipes = dest;
10419 break;
10420 case 1:
10421 state.pipes = [state.pipes, dest];
10422 break;
10423 default:
10424 state.pipes.push(dest);
10425 break;
10426 }
10427 state.pipesCount += 1;
10428 debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
10429
10430 var doEnd = (!pipeOpts || pipeOpts.end !== false) &&
10431 dest !== process.stdout &&
10432 dest !== process.stderr;
10433
10434 var endFn = doEnd ? onend : cleanup;
10435 if (state.endEmitted)
10436 process.nextTick(endFn);
10437 else
10438 src.once('end', endFn);
10439
10440 dest.on('unpipe', onunpipe);
10441 function onunpipe(readable) {
10442 debug('onunpipe');
10443 if (readable === src) {
10444 cleanup();
10445 }
10446 }
10447
10448 function onend() {
10449 debug('onend');
10450 dest.end();
10451 }
10452
10453 // when the dest drains, it reduces the awaitDrain counter
10454 // on the source. This would be more elegant with a .once()
10455 // handler in flow(), but adding and removing repeatedly is
10456 // too slow.
10457 var ondrain = pipeOnDrain(src);
10458 dest.on('drain', ondrain);
10459
10460 function cleanup() {
10461 debug('cleanup');
10462 // cleanup event handlers once the pipe is broken
10463 dest.removeListener('close', onclose);
10464 dest.removeListener('finish', onfinish);
10465 dest.removeListener('drain', ondrain);
10466 dest.removeListener('error', onerror);
10467 dest.removeListener('unpipe', onunpipe);
10468 src.removeListener('end', onend);
10469 src.removeListener('end', cleanup);
10470 src.removeListener('data', ondata);
10471
10472 // if the reader is waiting for a drain event from this
10473 // specific writer, then it would cause it to never start
10474 // flowing again.
10475 // So, if this is awaiting a drain, then we just call it now.
10476 // If we don't know, then assume that we are waiting for one.
10477 if (state.awaitDrain &&
10478 (!dest._writableState || dest._writableState.needDrain))
10479 ondrain();
10480 }
10481
10482 src.on('data', ondata);
10483 function ondata(chunk) {
10484 debug('ondata');
10485 var ret = dest.write(chunk);
10486 if (false === ret) {
10487 debug('false write response, pause',
10488 src._readableState.awaitDrain);
10489 src._readableState.awaitDrain++;
10490 src.pause();
10491 }
10492 }
10493
10494 // if the dest has an error, then stop piping into it.
10495 // however, don't suppress the throwing behavior for this.
10496 function onerror(er) {
10497 debug('onerror', er);
10498 unpipe();
10499 dest.removeListener('error', onerror);
10500 if (EE.listenerCount(dest, 'error') === 0)
10501 dest.emit('error', er);
10502 }
10503 // This is a brutally ugly hack to make sure that our error handler
10504 // is attached before any userland ones. NEVER DO THIS.
10505 if (!dest._events || !dest._events.error)
10506 dest.on('error', onerror);
10507 else if (isArray(dest._events.error))
10508 dest._events.error.unshift(onerror);
10509 else
10510 dest._events.error = [onerror, dest._events.error];
10511
10512
10513
10514 // Both close and finish should trigger unpipe, but only once.
10515 function onclose() {
10516 dest.removeListener('finish', onfinish);
10517 unpipe();
10518 }
10519 dest.once('close', onclose);
10520 function onfinish() {
10521 debug('onfinish');
10522 dest.removeListener('close', onclose);
10523 unpipe();
10524 }
10525 dest.once('finish', onfinish);
10526
10527 function unpipe() {
10528 debug('unpipe');
10529 src.unpipe(dest);
10530 }
10531
10532 // tell the dest that it's being piped to
10533 dest.emit('pipe', src);
10534
10535 // start the flow if it hasn't been started already.
10536 if (!state.flowing) {
10537 debug('pipe resume');
10538 src.resume();
10539 }
10540
10541 return dest;
10542};
10543
10544function pipeOnDrain(src) {
10545 return function() {
10546 var state = src._readableState;
10547 debug('pipeOnDrain', state.awaitDrain);
10548 if (state.awaitDrain)
10549 state.awaitDrain--;
10550 if (state.awaitDrain === 0 && EE.listenerCount(src, 'data')) {
10551 state.flowing = true;
10552 flow(src);
10553 }
10554 };
10555}
10556
10557
10558Readable.prototype.unpipe = function(dest) {
10559 var state = this._readableState;
10560
10561 // if we're not piping anywhere, then do nothing.
10562 if (state.pipesCount === 0)
10563 return this;
10564
10565 // just one destination. most common case.
10566 if (state.pipesCount === 1) {
10567 // passed in one, but it's not the right one.
10568 if (dest && dest !== state.pipes)
10569 return this;
10570
10571 if (!dest)
10572 dest = state.pipes;
10573
10574 // got a match.
10575 state.pipes = null;
10576 state.pipesCount = 0;
10577 state.flowing = false;
10578 if (dest)
10579 dest.emit('unpipe', this);
10580 return this;
10581 }
10582
10583 // slow case. multiple pipe destinations.
10584
10585 if (!dest) {
10586 // remove all.
10587 var dests = state.pipes;
10588 var len = state.pipesCount;
10589 state.pipes = null;
10590 state.pipesCount = 0;
10591 state.flowing = false;
10592
10593 for (var i = 0; i < len; i++)
10594 dests[i].emit('unpipe', this);
10595 return this;
10596 }
10597
10598 // try to find the right one.
10599 var i = indexOf(state.pipes, dest);
10600 if (i === -1)
10601 return this;
10602
10603 state.pipes.splice(i, 1);
10604 state.pipesCount -= 1;
10605 if (state.pipesCount === 1)
10606 state.pipes = state.pipes[0];
10607
10608 dest.emit('unpipe', this);
10609
10610 return this;
10611};
10612
10613// set up data events if they are asked for
10614// Ensure readable listeners eventually get something
10615Readable.prototype.on = function(ev, fn) {
10616 var res = Stream.prototype.on.call(this, ev, fn);
10617
10618 // If listening to data, and it has not explicitly been paused,
10619 // then call resume to start the flow of data on the next tick.
10620 if (ev === 'data' && false !== this._readableState.flowing) {
10621 this.resume();
10622 }
10623
10624 if (ev === 'readable' && this.readable) {
10625 var state = this._readableState;
10626 if (!state.readableListening) {
10627 state.readableListening = true;
10628 state.emittedReadable = false;
10629 state.needReadable = true;
10630 if (!state.reading) {
10631 var self = this;
10632 process.nextTick(function() {
10633 debug('readable nexttick read 0');
10634 self.read(0);
10635 });
10636 } else if (state.length) {
10637 emitReadable(this, state);
10638 }
10639 }
10640 }
10641
10642 return res;
10643};
10644Readable.prototype.addListener = Readable.prototype.on;
10645
10646// pause() and resume() are remnants of the legacy readable stream API
10647// If the user uses them, then switch into old mode.
10648Readable.prototype.resume = function() {
10649 var state = this._readableState;
10650 if (!state.flowing) {
10651 debug('resume');
10652 state.flowing = true;
10653 if (!state.reading) {
10654 debug('resume read 0');
10655 this.read(0);
10656 }
10657 resume(this, state);
10658 }
10659 return this;
10660};
10661
10662function resume(stream, state) {
10663 if (!state.resumeScheduled) {
10664 state.resumeScheduled = true;
10665 process.nextTick(function() {
10666 resume_(stream, state);
10667 });
10668 }
10669}
10670
10671function resume_(stream, state) {
10672 state.resumeScheduled = false;
10673 stream.emit('resume');
10674 flow(stream);
10675 if (state.flowing && !state.reading)
10676 stream.read(0);
10677}
10678
10679Readable.prototype.pause = function() {
10680 debug('call pause flowing=%j', this._readableState.flowing);
10681 if (false !== this._readableState.flowing) {
10682 debug('pause');
10683 this._readableState.flowing = false;
10684 this.emit('pause');
10685 }
10686 return this;
10687};
10688
10689function flow(stream) {
10690 var state = stream._readableState;
10691 debug('flow', state.flowing);
10692 if (state.flowing) {
10693 do {
10694 var chunk = stream.read();
10695 } while (null !== chunk && state.flowing);
10696 }
10697}
10698
10699// wrap an old-style stream as the async data source.
10700// This is *not* part of the readable stream interface.
10701// It is an ugly unfortunate mess of history.
10702Readable.prototype.wrap = function(stream) {
10703 var state = this._readableState;
10704 var paused = false;
10705
10706 var self = this;
10707 stream.on('end', function() {
10708 debug('wrapped end');
10709 if (state.decoder && !state.ended) {
10710 var chunk = state.decoder.end();
10711 if (chunk && chunk.length)
10712 self.push(chunk);
10713 }
10714
10715 self.push(null);
10716 });
10717
10718 stream.on('data', function(chunk) {
10719 debug('wrapped data');
10720 if (state.decoder)
10721 chunk = state.decoder.write(chunk);
10722 if (!chunk || !state.objectMode && !chunk.length)
10723 return;
10724
10725 var ret = self.push(chunk);
10726 if (!ret) {
10727 paused = true;
10728 stream.pause();
10729 }
10730 });
10731
10732 // proxy all the other methods.
10733 // important when wrapping filters and duplexes.
10734 for (var i in stream) {
10735 if (util.isFunction(stream[i]) && util.isUndefined(this[i])) {
10736 this[i] = function(method) { return function() {
10737 return stream[method].apply(stream, arguments);
10738 }}(i);
10739 }
10740 }
10741
10742 // proxy certain important events.
10743 var events = ['error', 'close', 'destroy', 'pause', 'resume'];
10744 forEach(events, function(ev) {
10745 stream.on(ev, self.emit.bind(self, ev));
10746 });
10747
10748 // when we try to consume some more bytes, simply unpause the
10749 // underlying stream.
10750 self._read = function(n) {
10751 debug('wrapped _read', n);
10752 if (paused) {
10753 paused = false;
10754 stream.resume();
10755 }
10756 };
10757
10758 return self;
10759};
10760
10761
10762
10763// exposed for testing purposes only.
10764Readable._fromList = fromList;
10765
10766// Pluck off n bytes from an array of buffers.
10767// Length is the combined lengths of all the buffers in the list.
10768function fromList(n, state) {
10769 var list = state.buffer;
10770 var length = state.length;
10771 var stringMode = !!state.decoder;
10772 var objectMode = !!state.objectMode;
10773 var ret;
10774
10775 // nothing in the list, definitely empty.
10776 if (list.length === 0)
10777 return null;
10778
10779 if (length === 0)
10780 ret = null;
10781 else if (objectMode)
10782 ret = list.shift();
10783 else if (!n || n >= length) {
10784 // read it all, truncate the array.
10785 if (stringMode)
10786 ret = list.join('');
10787 else
10788 ret = Buffer.concat(list, length);
10789 list.length = 0;
10790 } else {
10791 // read just some of it.
10792 if (n < list[0].length) {
10793 // just take a part of the first list item.
10794 // slice is the same for buffers and strings.
10795 var buf = list[0];
10796 ret = buf.slice(0, n);
10797 list[0] = buf.slice(n);
10798 } else if (n === list[0].length) {
10799 // first list is a perfect match
10800 ret = list.shift();
10801 } else {
10802 // complex case.
10803 // we have enough to cover it, but it spans past the first buffer.
10804 if (stringMode)
10805 ret = '';
10806 else
10807 ret = new Buffer(n);
10808
10809 var c = 0;
10810 for (var i = 0, l = list.length; i < l && c < n; i++) {
10811 var buf = list[0];
10812 var cpy = Math.min(n - c, buf.length);
10813
10814 if (stringMode)
10815 ret += buf.slice(0, cpy);
10816 else
10817 buf.copy(ret, c, 0, cpy);
10818
10819 if (cpy < buf.length)
10820 list[0] = buf.slice(cpy);
10821 else
10822 list.shift();
10823
10824 c += cpy;
10825 }
10826 }
10827 }
10828
10829 return ret;
10830}
10831
10832function endReadable(stream) {
10833 var state = stream._readableState;
10834
10835 // If we get here before consuming all the bytes, then that is a
10836 // bug in node. Should never happen.
10837 if (state.length > 0)
10838 throw new Error('endReadable called on non-empty stream');
10839
10840 if (!state.endEmitted) {
10841 state.ended = true;
10842 process.nextTick(function() {
10843 // Check that we didn't get one last unshift.
10844 if (!state.endEmitted && state.length === 0) {
10845 state.endEmitted = true;
10846 stream.readable = false;
10847 stream.emit('end');
10848 }
10849 });
10850 }
10851}
10852
10853function forEach (xs, f) {
10854 for (var i = 0, l = xs.length; i < l; i++) {
10855 f(xs[i], i);
10856 }
10857}
10858
10859function indexOf (xs, x) {
10860 for (var i = 0, l = xs.length; i < l; i++) {
10861 if (xs[i] === x) return i;
10862 }
10863 return -1;
10864}
10865
10866}).call(this,require('_process'))
10867},{"./_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){
10868// Copyright Joyent, Inc. and other Node contributors.
10869//
10870// Permission is hereby granted, free of charge, to any person obtaining a
10871// copy of this software and associated documentation files (the
10872// "Software"), to deal in the Software without restriction, including
10873// without limitation the rights to use, copy, modify, merge, publish,
10874// distribute, sublicense, and/or sell copies of the Software, and to permit
10875// persons to whom the Software is furnished to do so, subject to the
10876// following conditions:
10877//
10878// The above copyright notice and this permission notice shall be included
10879// in all copies or substantial portions of the Software.
10880//
10881// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
10882// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
10883// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
10884// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
10885// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
10886// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
10887// USE OR OTHER DEALINGS IN THE SOFTWARE.
10888
10889
10890// a transform stream is a readable/writable stream where you do
10891// something with the data. Sometimes it's called a "filter",
10892// but that's not a great name for it, since that implies a thing where
10893// some bits pass through, and others are simply ignored. (That would
10894// be a valid example of a transform, of course.)
10895//
10896// While the output is causally related to the input, it's not a
10897// necessarily symmetric or synchronous transformation. For example,
10898// a zlib stream might take multiple plain-text writes(), and then
10899// emit a single compressed chunk some time in the future.
10900//
10901// Here's how this works:
10902//
10903// The Transform stream has all the aspects of the readable and writable
10904// stream classes. When you write(chunk), that calls _write(chunk,cb)
10905// internally, and returns false if there's a lot of pending writes
10906// buffered up. When you call read(), that calls _read(n) until
10907// there's enough pending readable data buffered up.
10908//
10909// In a transform stream, the written data is placed in a buffer. When
10910// _read(n) is called, it transforms the queued up data, calling the
10911// buffered _write cb's as it consumes chunks. If consuming a single
10912// written chunk would result in multiple output chunks, then the first
10913// outputted bit calls the readcb, and subsequent chunks just go into
10914// the read buffer, and will cause it to emit 'readable' if necessary.
10915//
10916// This way, back-pressure is actually determined by the reading side,
10917// since _read has to be called to start processing a new chunk. However,
10918// a pathological inflate type of transform can cause excessive buffering
10919// here. For example, imagine a stream where every byte of input is
10920// interpreted as an integer from 0-255, and then results in that many
10921// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in
10922// 1kb of data being output. In this case, you could write a very small
10923// amount of input, and end up with a very large amount of output. In
10924// such a pathological inflating mechanism, there'd be no way to tell
10925// the system to stop doing the transform. A single 4MB write could
10926// cause the system to run out of memory.
10927//
10928// However, even in such a pathological case, only a single written chunk
10929// would be consumed, and then the rest would wait (un-transformed) until
10930// the results of the previous transformed chunk were consumed.
10931
10932module.exports = Transform;
10933
10934var Duplex = require('./_stream_duplex');
10935
10936/*<replacement>*/
10937var util = require('core-util-is');
10938util.inherits = require('inherits');
10939/*</replacement>*/
10940
10941util.inherits(Transform, Duplex);
10942
10943
10944function TransformState(options, stream) {
10945 this.afterTransform = function(er, data) {
10946 return afterTransform(stream, er, data);
10947 };
10948
10949 this.needTransform = false;
10950 this.transforming = false;
10951 this.writecb = null;
10952 this.writechunk = null;
10953}
10954
10955function afterTransform(stream, er, data) {
10956 var ts = stream._transformState;
10957 ts.transforming = false;
10958
10959 var cb = ts.writecb;
10960
10961 if (!cb)
10962 return stream.emit('error', new Error('no writecb in Transform class'));
10963
10964 ts.writechunk = null;
10965 ts.writecb = null;
10966
10967 if (!util.isNullOrUndefined(data))
10968 stream.push(data);
10969
10970 if (cb)
10971 cb(er);
10972
10973 var rs = stream._readableState;
10974 rs.reading = false;
10975 if (rs.needReadable || rs.length < rs.highWaterMark) {
10976 stream._read(rs.highWaterMark);
10977 }
10978}
10979
10980
10981function Transform(options) {
10982 if (!(this instanceof Transform))
10983 return new Transform(options);
10984
10985 Duplex.call(this, options);
10986
10987 this._transformState = new TransformState(options, this);
10988
10989 // when the writable side finishes, then flush out anything remaining.
10990 var stream = this;
10991
10992 // start out asking for a readable event once data is transformed.
10993 this._readableState.needReadable = true;
10994
10995 // we have implemented the _read method, and done the other things
10996 // that Readable wants before the first _read call, so unset the
10997 // sync guard flag.
10998 this._readableState.sync = false;
10999
11000 this.once('prefinish', function() {
11001 if (util.isFunction(this._flush))
11002 this._flush(function(er) {
11003 done(stream, er);
11004 });
11005 else
11006 done(stream);
11007 });
11008}
11009
11010Transform.prototype.push = function(chunk, encoding) {
11011 this._transformState.needTransform = false;
11012 return Duplex.prototype.push.call(this, chunk, encoding);
11013};
11014
11015// This is the part where you do stuff!
11016// override this function in implementation classes.
11017// 'chunk' is an input chunk.
11018//
11019// Call `push(newChunk)` to pass along transformed output
11020// to the readable side. You may call 'push' zero or more times.
11021//
11022// Call `cb(err)` when you are done with this chunk. If you pass
11023// an error, then that'll put the hurt on the whole operation. If you
11024// never call cb(), then you'll never get another chunk.
11025Transform.prototype._transform = function(chunk, encoding, cb) {
11026 throw new Error('not implemented');
11027};
11028
11029Transform.prototype._write = function(chunk, encoding, cb) {
11030 var ts = this._transformState;
11031 ts.writecb = cb;
11032 ts.writechunk = chunk;
11033 ts.writeencoding = encoding;
11034 if (!ts.transforming) {
11035 var rs = this._readableState;
11036 if (ts.needTransform ||
11037 rs.needReadable ||
11038 rs.length < rs.highWaterMark)
11039 this._read(rs.highWaterMark);
11040 }
11041};
11042
11043// Doesn't matter what the args are here.
11044// _transform does all the work.
11045// That we got here means that the readable side wants more data.
11046Transform.prototype._read = function(n) {
11047 var ts = this._transformState;
11048
11049 if (!util.isNull(ts.writechunk) && ts.writecb && !ts.transforming) {
11050 ts.transforming = true;
11051 this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
11052 } else {
11053 // mark that we need a transform, so that any data that comes in
11054 // will get processed, now that we've asked for it.
11055 ts.needTransform = true;
11056 }
11057};
11058
11059
11060function done(stream, er) {
11061 if (er)
11062 return stream.emit('error', er);
11063
11064 // if there's nothing in the write buffer, then that means
11065 // that nothing more will ever be provided
11066 var ws = stream._writableState;
11067 var ts = stream._transformState;
11068
11069 if (ws.length)
11070 throw new Error('calling transform done when ws.length != 0');
11071
11072 if (ts.transforming)
11073 throw new Error('calling transform done when still transforming');
11074
11075 return stream.push(null);
11076}
11077
11078},{"./_stream_duplex":16,"core-util-is":21,"inherits":12}],20:[function(require,module,exports){
11079(function (process){
11080// Copyright Joyent, Inc. and other Node contributors.
11081//
11082// Permission is hereby granted, free of charge, to any person obtaining a
11083// copy of this software and associated documentation files (the
11084// "Software"), to deal in the Software without restriction, including
11085// without limitation the rights to use, copy, modify, merge, publish,
11086// distribute, sublicense, and/or sell copies of the Software, and to permit
11087// persons to whom the Software is furnished to do so, subject to the
11088// following conditions:
11089//
11090// The above copyright notice and this permission notice shall be included
11091// in all copies or substantial portions of the Software.
11092//
11093// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
11094// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
11095// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
11096// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
11097// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
11098// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
11099// USE OR OTHER DEALINGS IN THE SOFTWARE.
11100
11101// A bit simpler than readable streams.
11102// Implement an async ._write(chunk, cb), and it'll handle all
11103// the drain event emission and buffering.
11104
11105module.exports = Writable;
11106
11107/*<replacement>*/
11108var Buffer = require('buffer').Buffer;
11109/*</replacement>*/
11110
11111Writable.WritableState = WritableState;
11112
11113
11114/*<replacement>*/
11115var util = require('core-util-is');
11116util.inherits = require('inherits');
11117/*</replacement>*/
11118
11119var Stream = require('stream');
11120
11121util.inherits(Writable, Stream);
11122
11123function WriteReq(chunk, encoding, cb) {
11124 this.chunk = chunk;
11125 this.encoding = encoding;
11126 this.callback = cb;
11127}
11128
11129function WritableState(options, stream) {
11130 var Duplex = require('./_stream_duplex');
11131
11132 options = options || {};
11133
11134 // the point at which write() starts returning false
11135 // Note: 0 is a valid value, means that we always return false if
11136 // the entire buffer is not flushed immediately on write()
11137 var hwm = options.highWaterMark;
11138 var defaultHwm = options.objectMode ? 16 : 16 * 1024;
11139 this.highWaterMark = (hwm || hwm === 0) ? hwm : defaultHwm;
11140
11141 // object stream flag to indicate whether or not this stream
11142 // contains buffers or objects.
11143 this.objectMode = !!options.objectMode;
11144
11145 if (stream instanceof Duplex)
11146 this.objectMode = this.objectMode || !!options.writableObjectMode;
11147
11148 // cast to ints.
11149 this.highWaterMark = ~~this.highWaterMark;
11150
11151 this.needDrain = false;
11152 // at the start of calling end()
11153 this.ending = false;
11154 // when end() has been called, and returned
11155 this.ended = false;
11156 // when 'finish' is emitted
11157 this.finished = false;
11158
11159 // should we decode strings into buffers before passing to _write?
11160 // this is here so that some node-core streams can optimize string
11161 // handling at a lower level.
11162 var noDecode = options.decodeStrings === false;
11163 this.decodeStrings = !noDecode;
11164
11165 // Crypto is kind of old and crusty. Historically, its default string
11166 // encoding is 'binary' so we have to make this configurable.
11167 // Everything else in the universe uses 'utf8', though.
11168 this.defaultEncoding = options.defaultEncoding || 'utf8';
11169
11170 // not an actual buffer we keep track of, but a measurement
11171 // of how much we're waiting to get pushed to some underlying
11172 // socket or file.
11173 this.length = 0;
11174
11175 // a flag to see when we're in the middle of a write.
11176 this.writing = false;
11177
11178 // when true all writes will be buffered until .uncork() call
11179 this.corked = 0;
11180
11181 // a flag to be able to tell if the onwrite cb is called immediately,
11182 // or on a later tick. We set this to true at first, because any
11183 // actions that shouldn't happen until "later" should generally also
11184 // not happen before the first write call.
11185 this.sync = true;
11186
11187 // a flag to know if we're processing previously buffered items, which
11188 // may call the _write() callback in the same tick, so that we don't
11189 // end up in an overlapped onwrite situation.
11190 this.bufferProcessing = false;
11191
11192 // the callback that's passed to _write(chunk,cb)
11193 this.onwrite = function(er) {
11194 onwrite(stream, er);
11195 };
11196
11197 // the callback that the user supplies to write(chunk,encoding,cb)
11198 this.writecb = null;
11199
11200 // the amount that is being written when _write is called.
11201 this.writelen = 0;
11202
11203 this.buffer = [];
11204
11205 // number of pending user-supplied write callbacks
11206 // this must be 0 before 'finish' can be emitted
11207 this.pendingcb = 0;
11208
11209 // emit prefinish if the only thing we're waiting for is _write cbs
11210 // This is relevant for synchronous Transform streams
11211 this.prefinished = false;
11212
11213 // True if the error was already emitted and should not be thrown again
11214 this.errorEmitted = false;
11215}
11216
11217function Writable(options) {
11218 var Duplex = require('./_stream_duplex');
11219
11220 // Writable ctor is applied to Duplexes, though they're not
11221 // instanceof Writable, they're instanceof Readable.
11222 if (!(this instanceof Writable) && !(this instanceof Duplex))
11223 return new Writable(options);
11224
11225 this._writableState = new WritableState(options, this);
11226
11227 // legacy.
11228 this.writable = true;
11229
11230 Stream.call(this);
11231}
11232
11233// Otherwise people can pipe Writable streams, which is just wrong.
11234Writable.prototype.pipe = function() {
11235 this.emit('error', new Error('Cannot pipe. Not readable.'));
11236};
11237
11238
11239function writeAfterEnd(stream, state, cb) {
11240 var er = new Error('write after end');
11241 // TODO: defer error events consistently everywhere, not just the cb
11242 stream.emit('error', er);
11243 process.nextTick(function() {
11244 cb(er);
11245 });
11246}
11247
11248// If we get something that is not a buffer, string, null, or undefined,
11249// and we're not in objectMode, then that's an error.
11250// Otherwise stream chunks are all considered to be of length=1, and the
11251// watermarks determine how many objects to keep in the buffer, rather than
11252// how many bytes or characters.
11253function validChunk(stream, state, chunk, cb) {
11254 var valid = true;
11255 if (!util.isBuffer(chunk) &&
11256 !util.isString(chunk) &&
11257 !util.isNullOrUndefined(chunk) &&
11258 !state.objectMode) {
11259 var er = new TypeError('Invalid non-string/buffer chunk');
11260 stream.emit('error', er);
11261 process.nextTick(function() {
11262 cb(er);
11263 });
11264 valid = false;
11265 }
11266 return valid;
11267}
11268
11269Writable.prototype.write = function(chunk, encoding, cb) {
11270 var state = this._writableState;
11271 var ret = false;
11272
11273 if (util.isFunction(encoding)) {
11274 cb = encoding;
11275 encoding = null;
11276 }
11277
11278 if (util.isBuffer(chunk))
11279 encoding = 'buffer';
11280 else if (!encoding)
11281 encoding = state.defaultEncoding;
11282
11283 if (!util.isFunction(cb))
11284 cb = function() {};
11285
11286 if (state.ended)
11287 writeAfterEnd(this, state, cb);
11288 else if (validChunk(this, state, chunk, cb)) {
11289 state.pendingcb++;
11290 ret = writeOrBuffer(this, state, chunk, encoding, cb);
11291 }
11292
11293 return ret;
11294};
11295
11296Writable.prototype.cork = function() {
11297 var state = this._writableState;
11298
11299 state.corked++;
11300};
11301
11302Writable.prototype.uncork = function() {
11303 var state = this._writableState;
11304
11305 if (state.corked) {
11306 state.corked--;
11307
11308 if (!state.writing &&
11309 !state.corked &&
11310 !state.finished &&
11311 !state.bufferProcessing &&
11312 state.buffer.length)
11313 clearBuffer(this, state);
11314 }
11315};
11316
11317function decodeChunk(state, chunk, encoding) {
11318 if (!state.objectMode &&
11319 state.decodeStrings !== false &&
11320 util.isString(chunk)) {
11321 chunk = new Buffer(chunk, encoding);
11322 }
11323 return chunk;
11324}
11325
11326// if we're already writing something, then just put this
11327// in the queue, and wait our turn. Otherwise, call _write
11328// If we return false, then we need a drain event, so set that flag.
11329function writeOrBuffer(stream, state, chunk, encoding, cb) {
11330 chunk = decodeChunk(state, chunk, encoding);
11331 if (util.isBuffer(chunk))
11332 encoding = 'buffer';
11333 var len = state.objectMode ? 1 : chunk.length;
11334
11335 state.length += len;
11336
11337 var ret = state.length < state.highWaterMark;
11338 // we must ensure that previous needDrain will not be reset to false.
11339 if (!ret)
11340 state.needDrain = true;
11341
11342 if (state.writing || state.corked)
11343 state.buffer.push(new WriteReq(chunk, encoding, cb));
11344 else
11345 doWrite(stream, state, false, len, chunk, encoding, cb);
11346
11347 return ret;
11348}
11349
11350function doWrite(stream, state, writev, len, chunk, encoding, cb) {
11351 state.writelen = len;
11352 state.writecb = cb;
11353 state.writing = true;
11354 state.sync = true;
11355 if (writev)
11356 stream._writev(chunk, state.onwrite);
11357 else
11358 stream._write(chunk, encoding, state.onwrite);
11359 state.sync = false;
11360}
11361
11362function onwriteError(stream, state, sync, er, cb) {
11363 if (sync)
11364 process.nextTick(function() {
11365 state.pendingcb--;
11366 cb(er);
11367 });
11368 else {
11369 state.pendingcb--;
11370 cb(er);
11371 }
11372
11373 stream._writableState.errorEmitted = true;
11374 stream.emit('error', er);
11375}
11376
11377function onwriteStateUpdate(state) {
11378 state.writing = false;
11379 state.writecb = null;
11380 state.length -= state.writelen;
11381 state.writelen = 0;
11382}
11383
11384function onwrite(stream, er) {
11385 var state = stream._writableState;
11386 var sync = state.sync;
11387 var cb = state.writecb;
11388
11389 onwriteStateUpdate(state);
11390
11391 if (er)
11392 onwriteError(stream, state, sync, er, cb);
11393 else {
11394 // Check if we're actually ready to finish, but don't emit yet
11395 var finished = needFinish(stream, state);
11396
11397 if (!finished &&
11398 !state.corked &&
11399 !state.bufferProcessing &&
11400 state.buffer.length) {
11401 clearBuffer(stream, state);
11402 }
11403
11404 if (sync) {
11405 process.nextTick(function() {
11406 afterWrite(stream, state, finished, cb);
11407 });
11408 } else {
11409 afterWrite(stream, state, finished, cb);
11410 }
11411 }
11412}
11413
11414function afterWrite(stream, state, finished, cb) {
11415 if (!finished)
11416 onwriteDrain(stream, state);
11417 state.pendingcb--;
11418 cb();
11419 finishMaybe(stream, state);
11420}
11421
11422// Must force callback to be called on nextTick, so that we don't
11423// emit 'drain' before the write() consumer gets the 'false' return
11424// value, and has a chance to attach a 'drain' listener.
11425function onwriteDrain(stream, state) {
11426 if (state.length === 0 && state.needDrain) {
11427 state.needDrain = false;
11428 stream.emit('drain');
11429 }
11430}
11431
11432
11433// if there's something in the buffer waiting, then process it
11434function clearBuffer(stream, state) {
11435 state.bufferProcessing = true;
11436
11437 if (stream._writev && state.buffer.length > 1) {
11438 // Fast case, write everything using _writev()
11439 var cbs = [];
11440 for (var c = 0; c < state.buffer.length; c++)
11441 cbs.push(state.buffer[c].callback);
11442
11443 // count the one we are adding, as well.
11444 // TODO(isaacs) clean this up
11445 state.pendingcb++;
11446 doWrite(stream, state, true, state.length, state.buffer, '', function(err) {
11447 for (var i = 0; i < cbs.length; i++) {
11448 state.pendingcb--;
11449 cbs[i](err);
11450 }
11451 });
11452
11453 // Clear buffer
11454 state.buffer = [];
11455 } else {
11456 // Slow case, write chunks one-by-one
11457 for (var c = 0; c < state.buffer.length; c++) {
11458 var entry = state.buffer[c];
11459 var chunk = entry.chunk;
11460 var encoding = entry.encoding;
11461 var cb = entry.callback;
11462 var len = state.objectMode ? 1 : chunk.length;
11463
11464 doWrite(stream, state, false, len, chunk, encoding, cb);
11465
11466 // if we didn't call the onwrite immediately, then
11467 // it means that we need to wait until it does.
11468 // also, that means that the chunk and cb are currently
11469 // being processed, so move the buffer counter past them.
11470 if (state.writing) {
11471 c++;
11472 break;
11473 }
11474 }
11475
11476 if (c < state.buffer.length)
11477 state.buffer = state.buffer.slice(c);
11478 else
11479 state.buffer.length = 0;
11480 }
11481
11482 state.bufferProcessing = false;
11483}
11484
11485Writable.prototype._write = function(chunk, encoding, cb) {
11486 cb(new Error('not implemented'));
11487
11488};
11489
11490Writable.prototype._writev = null;
11491
11492Writable.prototype.end = function(chunk, encoding, cb) {
11493 var state = this._writableState;
11494
11495 if (util.isFunction(chunk)) {
11496 cb = chunk;
11497 chunk = null;
11498 encoding = null;
11499 } else if (util.isFunction(encoding)) {
11500 cb = encoding;
11501 encoding = null;
11502 }
11503
11504 if (!util.isNullOrUndefined(chunk))
11505 this.write(chunk, encoding);
11506
11507 // .end() fully uncorks
11508 if (state.corked) {
11509 state.corked = 1;
11510 this.uncork();
11511 }
11512
11513 // ignore unnecessary end() calls.
11514 if (!state.ending && !state.finished)
11515 endWritable(this, state, cb);
11516};
11517
11518
11519function needFinish(stream, state) {
11520 return (state.ending &&
11521 state.length === 0 &&
11522 !state.finished &&
11523 !state.writing);
11524}
11525
11526function prefinish(stream, state) {
11527 if (!state.prefinished) {
11528 state.prefinished = true;
11529 stream.emit('prefinish');
11530 }
11531}
11532
11533function finishMaybe(stream, state) {
11534 var need = needFinish(stream, state);
11535 if (need) {
11536 if (state.pendingcb === 0) {
11537 prefinish(stream, state);
11538 state.finished = true;
11539 stream.emit('finish');
11540 } else
11541 prefinish(stream, state);
11542 }
11543 return need;
11544}
11545
11546function endWritable(stream, state, cb) {
11547 state.ending = true;
11548 finishMaybe(stream, state);
11549 if (cb) {
11550 if (state.finished)
11551 process.nextTick(cb);
11552 else
11553 stream.once('finish', cb);
11554 }
11555 state.ended = true;
11556}
11557
11558}).call(this,require('_process'))
11559},{"./_stream_duplex":16,"_process":14,"buffer":7,"core-util-is":21,"inherits":12,"stream":26}],21:[function(require,module,exports){
11560(function (Buffer){
11561// Copyright Joyent, Inc. and other Node contributors.
11562//
11563// Permission is hereby granted, free of charge, to any person obtaining a
11564// copy of this software and associated documentation files (the
11565// "Software"), to deal in the Software without restriction, including
11566// without limitation the rights to use, copy, modify, merge, publish,
11567// distribute, sublicense, and/or sell copies of the Software, and to permit
11568// persons to whom the Software is furnished to do so, subject to the
11569// following conditions:
11570//
11571// The above copyright notice and this permission notice shall be included
11572// in all copies or substantial portions of the Software.
11573//
11574// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
11575// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
11576// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
11577// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
11578// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
11579// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
11580// USE OR OTHER DEALINGS IN THE SOFTWARE.
11581
11582// NOTE: These type checking functions intentionally don't use `instanceof`
11583// because it is fragile and can be easily faked with `Object.create()`.
11584function isArray(ar) {
11585 return Array.isArray(ar);
11586}
11587exports.isArray = isArray;
11588
11589function isBoolean(arg) {
11590 return typeof arg === 'boolean';
11591}
11592exports.isBoolean = isBoolean;
11593
11594function isNull(arg) {
11595 return arg === null;
11596}
11597exports.isNull = isNull;
11598
11599function isNullOrUndefined(arg) {
11600 return arg == null;
11601}
11602exports.isNullOrUndefined = isNullOrUndefined;
11603
11604function isNumber(arg) {
11605 return typeof arg === 'number';
11606}
11607exports.isNumber = isNumber;
11608
11609function isString(arg) {
11610 return typeof arg === 'string';
11611}
11612exports.isString = isString;
11613
11614function isSymbol(arg) {
11615 return typeof arg === 'symbol';
11616}
11617exports.isSymbol = isSymbol;
11618
11619function isUndefined(arg) {
11620 return arg === void 0;
11621}
11622exports.isUndefined = isUndefined;
11623
11624function isRegExp(re) {
11625 return isObject(re) && objectToString(re) === '[object RegExp]';
11626}
11627exports.isRegExp = isRegExp;
11628
11629function isObject(arg) {
11630 return typeof arg === 'object' && arg !== null;
11631}
11632exports.isObject = isObject;
11633
11634function isDate(d) {
11635 return isObject(d) && objectToString(d) === '[object Date]';
11636}
11637exports.isDate = isDate;
11638
11639function isError(e) {
11640 return isObject(e) &&
11641 (objectToString(e) === '[object Error]' || e instanceof Error);
11642}
11643exports.isError = isError;
11644
11645function isFunction(arg) {
11646 return typeof arg === 'function';
11647}
11648exports.isFunction = isFunction;
11649
11650function isPrimitive(arg) {
11651 return arg === null ||
11652 typeof arg === 'boolean' ||
11653 typeof arg === 'number' ||
11654 typeof arg === 'string' ||
11655 typeof arg === 'symbol' || // ES6 symbol
11656 typeof arg === 'undefined';
11657}
11658exports.isPrimitive = isPrimitive;
11659
11660function isBuffer(arg) {
11661 return Buffer.isBuffer(arg);
11662}
11663exports.isBuffer = isBuffer;
11664
11665function objectToString(o) {
11666 return Object.prototype.toString.call(o);
11667}
11668}).call(this,require("buffer").Buffer)
11669},{"buffer":7}],22:[function(require,module,exports){
11670module.exports = require("./lib/_stream_passthrough.js")
11671
11672},{"./lib/_stream_passthrough.js":17}],23:[function(require,module,exports){
11673exports = module.exports = require('./lib/_stream_readable.js');
11674exports.Stream = require('stream');
11675exports.Readable = exports;
11676exports.Writable = require('./lib/_stream_writable.js');
11677exports.Duplex = require('./lib/_stream_duplex.js');
11678exports.Transform = require('./lib/_stream_transform.js');
11679exports.PassThrough = require('./lib/_stream_passthrough.js');
11680
11681},{"./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){
11682module.exports = require("./lib/_stream_transform.js")
11683
11684},{"./lib/_stream_transform.js":19}],25:[function(require,module,exports){
11685module.exports = require("./lib/_stream_writable.js")
11686
11687},{"./lib/_stream_writable.js":20}],26:[function(require,module,exports){
11688// Copyright Joyent, Inc. and other Node contributors.
11689//
11690// Permission is hereby granted, free of charge, to any person obtaining a
11691// copy of this software and associated documentation files (the
11692// "Software"), to deal in the Software without restriction, including
11693// without limitation the rights to use, copy, modify, merge, publish,
11694// distribute, sublicense, and/or sell copies of the Software, and to permit
11695// persons to whom the Software is furnished to do so, subject to the
11696// following conditions:
11697//
11698// The above copyright notice and this permission notice shall be included
11699// in all copies or substantial portions of the Software.
11700//
11701// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
11702// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
11703// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
11704// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
11705// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
11706// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
11707// USE OR OTHER DEALINGS IN THE SOFTWARE.
11708
11709module.exports = Stream;
11710
11711var EE = require('events').EventEmitter;
11712var inherits = require('inherits');
11713
11714inherits(Stream, EE);
11715Stream.Readable = require('readable-stream/readable.js');
11716Stream.Writable = require('readable-stream/writable.js');
11717Stream.Duplex = require('readable-stream/duplex.js');
11718Stream.Transform = require('readable-stream/transform.js');
11719Stream.PassThrough = require('readable-stream/passthrough.js');
11720
11721// Backwards-compat with node 0.4.x
11722Stream.Stream = Stream;
11723
11724
11725
11726// old-style streams. Note that the pipe method (the only relevant
11727// part of this class) is overridden in the Readable class.
11728
11729function Stream() {
11730 EE.call(this);
11731}
11732
11733Stream.prototype.pipe = function(dest, options) {
11734 var source = this;
11735
11736 function ondata(chunk) {
11737 if (dest.writable) {
11738 if (false === dest.write(chunk) && source.pause) {
11739 source.pause();
11740 }
11741 }
11742 }
11743
11744 source.on('data', ondata);
11745
11746 function ondrain() {
11747 if (source.readable && source.resume) {
11748 source.resume();
11749 }
11750 }
11751
11752 dest.on('drain', ondrain);
11753
11754 // If the 'end' option is not supplied, dest.end() will be called when
11755 // source gets the 'end' or 'close' events. Only dest.end() once.
11756 if (!dest._isStdio && (!options || options.end !== false)) {
11757 source.on('end', onend);
11758 source.on('close', onclose);
11759 }
11760
11761 var didOnEnd = false;
11762 function onend() {
11763 if (didOnEnd) return;
11764 didOnEnd = true;
11765
11766 dest.end();
11767 }
11768
11769
11770 function onclose() {
11771 if (didOnEnd) return;
11772 didOnEnd = true;
11773
11774 if (typeof dest.destroy === 'function') dest.destroy();
11775 }
11776
11777 // don't leave dangling pipes when there are errors.
11778 function onerror(er) {
11779 cleanup();
11780 if (EE.listenerCount(this, 'error') === 0) {
11781 throw er; // Unhandled stream error in pipe.
11782 }
11783 }
11784
11785 source.on('error', onerror);
11786 dest.on('error', onerror);
11787
11788 // remove all the event listeners that were added.
11789 function cleanup() {
11790 source.removeListener('data', ondata);
11791 dest.removeListener('drain', ondrain);
11792
11793 source.removeListener('end', onend);
11794 source.removeListener('close', onclose);
11795
11796 source.removeListener('error', onerror);
11797 dest.removeListener('error', onerror);
11798
11799 source.removeListener('end', cleanup);
11800 source.removeListener('close', cleanup);
11801
11802 dest.removeListener('close', cleanup);
11803 }
11804
11805 source.on('end', cleanup);
11806 source.on('close', cleanup);
11807
11808 dest.on('close', cleanup);
11809
11810 dest.emit('pipe', source);
11811
11812 // Allow for unix-like usage: A.pipe(B).pipe(C)
11813 return dest;
11814};
11815
11816},{"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){
11817// Copyright Joyent, Inc. and other Node contributors.
11818//
11819// Permission is hereby granted, free of charge, to any person obtaining a
11820// copy of this software and associated documentation files (the
11821// "Software"), to deal in the Software without restriction, including
11822// without limitation the rights to use, copy, modify, merge, publish,
11823// distribute, sublicense, and/or sell copies of the Software, and to permit
11824// persons to whom the Software is furnished to do so, subject to the
11825// following conditions:
11826//
11827// The above copyright notice and this permission notice shall be included
11828// in all copies or substantial portions of the Software.
11829//
11830// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
11831// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
11832// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
11833// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
11834// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
11835// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
11836// USE OR OTHER DEALINGS IN THE SOFTWARE.
11837
11838var Buffer = require('buffer').Buffer;
11839
11840var isBufferEncoding = Buffer.isEncoding
11841 || function(encoding) {
11842 switch (encoding && encoding.toLowerCase()) {
11843 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;
11844 default: return false;
11845 }
11846 }
11847
11848
11849function assertEncoding(encoding) {
11850 if (encoding && !isBufferEncoding(encoding)) {
11851 throw new Error('Unknown encoding: ' + encoding);
11852 }
11853}
11854
11855// StringDecoder provides an interface for efficiently splitting a series of
11856// buffers into a series of JS strings without breaking apart multi-byte
11857// characters. CESU-8 is handled as part of the UTF-8 encoding.
11858//
11859// @TODO Handling all encodings inside a single object makes it very difficult
11860// to reason about this code, so it should be split up in the future.
11861// @TODO There should be a utf8-strict encoding that rejects invalid UTF-8 code
11862// points as used by CESU-8.
11863var StringDecoder = exports.StringDecoder = function(encoding) {
11864 this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, '');
11865 assertEncoding(encoding);
11866 switch (this.encoding) {
11867 case 'utf8':
11868 // CESU-8 represents each of Surrogate Pair by 3-bytes
11869 this.surrogateSize = 3;
11870 break;
11871 case 'ucs2':
11872 case 'utf16le':
11873 // UTF-16 represents each of Surrogate Pair by 2-bytes
11874 this.surrogateSize = 2;
11875 this.detectIncompleteChar = utf16DetectIncompleteChar;
11876 break;
11877 case 'base64':
11878 // Base-64 stores 3 bytes in 4 chars, and pads the remainder.
11879 this.surrogateSize = 3;
11880 this.detectIncompleteChar = base64DetectIncompleteChar;
11881 break;
11882 default:
11883 this.write = passThroughWrite;
11884 return;
11885 }
11886
11887 // Enough space to store all bytes of a single character. UTF-8 needs 4
11888 // bytes, but CESU-8 may require up to 6 (3 bytes per surrogate).
11889 this.charBuffer = new Buffer(6);
11890 // Number of bytes received for the current incomplete multi-byte character.
11891 this.charReceived = 0;
11892 // Number of bytes expected for the current incomplete multi-byte character.
11893 this.charLength = 0;
11894};
11895
11896
11897// write decodes the given buffer and returns it as JS string that is
11898// guaranteed to not contain any partial multi-byte characters. Any partial
11899// character found at the end of the buffer is buffered up, and will be
11900// returned when calling write again with the remaining bytes.
11901//
11902// Note: Converting a Buffer containing an orphan surrogate to a String
11903// currently works, but converting a String to a Buffer (via `new Buffer`, or
11904// Buffer#write) will replace incomplete surrogates with the unicode
11905// replacement character. See https://codereview.chromium.org/121173009/ .
11906StringDecoder.prototype.write = function(buffer) {
11907 var charStr = '';
11908 // if our last write ended with an incomplete multibyte character
11909 while (this.charLength) {
11910 // determine how many remaining bytes this buffer has to offer for this char
11911 var available = (buffer.length >= this.charLength - this.charReceived) ?
11912 this.charLength - this.charReceived :
11913 buffer.length;
11914
11915 // add the new bytes to the char buffer
11916 buffer.copy(this.charBuffer, this.charReceived, 0, available);
11917 this.charReceived += available;
11918
11919 if (this.charReceived < this.charLength) {
11920 // still not enough chars in this buffer? wait for more ...
11921 return '';
11922 }
11923
11924 // remove bytes belonging to the current character from the buffer
11925 buffer = buffer.slice(available, buffer.length);
11926
11927 // get the character that was split
11928 charStr = this.charBuffer.slice(0, this.charLength).toString(this.encoding);
11929
11930 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
11931 var charCode = charStr.charCodeAt(charStr.length - 1);
11932 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
11933 this.charLength += this.surrogateSize;
11934 charStr = '';
11935 continue;
11936 }
11937 this.charReceived = this.charLength = 0;
11938
11939 // if there are no more bytes in this buffer, just emit our char
11940 if (buffer.length === 0) {
11941 return charStr;
11942 }
11943 break;
11944 }
11945
11946 // determine and set charLength / charReceived
11947 this.detectIncompleteChar(buffer);
11948
11949 var end = buffer.length;
11950 if (this.charLength) {
11951 // buffer the incomplete character bytes we got
11952 buffer.copy(this.charBuffer, 0, buffer.length - this.charReceived, end);
11953 end -= this.charReceived;
11954 }
11955
11956 charStr += buffer.toString(this.encoding, 0, end);
11957
11958 var end = charStr.length - 1;
11959 var charCode = charStr.charCodeAt(end);
11960 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
11961 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
11962 var size = this.surrogateSize;
11963 this.charLength += size;
11964 this.charReceived += size;
11965 this.charBuffer.copy(this.charBuffer, size, 0, size);
11966 buffer.copy(this.charBuffer, 0, 0, size);
11967 return charStr.substring(0, end);
11968 }
11969
11970 // or just emit the charStr
11971 return charStr;
11972};
11973
11974// detectIncompleteChar determines if there is an incomplete UTF-8 character at
11975// the end of the given buffer. If so, it sets this.charLength to the byte
11976// length that character, and sets this.charReceived to the number of bytes
11977// that are available for this character.
11978StringDecoder.prototype.detectIncompleteChar = function(buffer) {
11979 // determine how many bytes we have to check at the end of this buffer
11980 var i = (buffer.length >= 3) ? 3 : buffer.length;
11981
11982 // Figure out if one of the last i bytes of our buffer announces an
11983 // incomplete char.
11984 for (; i > 0; i--) {
11985 var c = buffer[buffer.length - i];
11986
11987 // See http://en.wikipedia.org/wiki/UTF-8#Description
11988
11989 // 110XXXXX
11990 if (i == 1 && c >> 5 == 0x06) {
11991 this.charLength = 2;
11992 break;
11993 }
11994
11995 // 1110XXXX
11996 if (i <= 2 && c >> 4 == 0x0E) {
11997 this.charLength = 3;
11998 break;
11999 }
12000
12001 // 11110XXX
12002 if (i <= 3 && c >> 3 == 0x1E) {
12003 this.charLength = 4;
12004 break;
12005 }
12006 }
12007 this.charReceived = i;
12008};
12009
12010StringDecoder.prototype.end = function(buffer) {
12011 var res = '';
12012 if (buffer && buffer.length)
12013 res = this.write(buffer);
12014
12015 if (this.charReceived) {
12016 var cr = this.charReceived;
12017 var buf = this.charBuffer;
12018 var enc = this.encoding;
12019 res += buf.slice(0, cr).toString(enc);
12020 }
12021
12022 return res;
12023};
12024
12025function passThroughWrite(buffer) {
12026 return buffer.toString(this.encoding);
12027}
12028
12029function utf16DetectIncompleteChar(buffer) {
12030 this.charReceived = buffer.length % 2;
12031 this.charLength = this.charReceived ? 2 : 0;
12032}
12033
12034function base64DetectIncompleteChar(buffer) {
12035 this.charReceived = buffer.length % 3;
12036 this.charLength = this.charReceived ? 3 : 0;
12037}
12038
12039},{"buffer":7}],28:[function(require,module,exports){
12040module.exports = function isBuffer(arg) {
12041 return arg && typeof arg === 'object'
12042 && typeof arg.copy === 'function'
12043 && typeof arg.fill === 'function'
12044 && typeof arg.readUInt8 === 'function';
12045}
12046},{}],29:[function(require,module,exports){
12047(function (process,global){
12048// Copyright Joyent, Inc. and other Node contributors.
12049//
12050// Permission is hereby granted, free of charge, to any person obtaining a
12051// copy of this software and associated documentation files (the
12052// "Software"), to deal in the Software without restriction, including
12053// without limitation the rights to use, copy, modify, merge, publish,
12054// distribute, sublicense, and/or sell copies of the Software, and to permit
12055// persons to whom the Software is furnished to do so, subject to the
12056// following conditions:
12057//
12058// The above copyright notice and this permission notice shall be included
12059// in all copies or substantial portions of the Software.
12060//
12061// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
12062// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
12063// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
12064// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
12065// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
12066// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
12067// USE OR OTHER DEALINGS IN THE SOFTWARE.
12068
12069var formatRegExp = /%[sdj%]/g;
12070exports.format = function(f) {
12071 if (!isString(f)) {
12072 var objects = [];
12073 for (var i = 0; i < arguments.length; i++) {
12074 objects.push(inspect(arguments[i]));
12075 }
12076 return objects.join(' ');
12077 }
12078
12079 var i = 1;
12080 var args = arguments;
12081 var len = args.length;
12082 var str = String(f).replace(formatRegExp, function(x) {
12083 if (x === '%%') return '%';
12084 if (i >= len) return x;
12085 switch (x) {
12086 case '%s': return String(args[i++]);
12087 case '%d': return Number(args[i++]);
12088 case '%j':
12089 try {
12090 return JSON.stringify(args[i++]);
12091 } catch (_) {
12092 return '[Circular]';
12093 }
12094 default:
12095 return x;
12096 }
12097 });
12098 for (var x = args[i]; i < len; x = args[++i]) {
12099 if (isNull(x) || !isObject(x)) {
12100 str += ' ' + x;
12101 } else {
12102 str += ' ' + inspect(x);
12103 }
12104 }
12105 return str;
12106};
12107
12108
12109// Mark that a method should not be used.
12110// Returns a modified function which warns once by default.
12111// If --no-deprecation is set, then it is a no-op.
12112exports.deprecate = function(fn, msg) {
12113 // Allow for deprecating things in the process of starting up.
12114 if (isUndefined(global.process)) {
12115 return function() {
12116 return exports.deprecate(fn, msg).apply(this, arguments);
12117 };
12118 }
12119
12120 if (process.noDeprecation === true) {
12121 return fn;
12122 }
12123
12124 var warned = false;
12125 function deprecated() {
12126 if (!warned) {
12127 if (process.throwDeprecation) {
12128 throw new Error(msg);
12129 } else if (process.traceDeprecation) {
12130 console.trace(msg);
12131 } else {
12132 console.error(msg);
12133 }
12134 warned = true;
12135 }
12136 return fn.apply(this, arguments);
12137 }
12138
12139 return deprecated;
12140};
12141
12142
12143var debugs = {};
12144var debugEnviron;
12145exports.debuglog = function(set) {
12146 if (isUndefined(debugEnviron))
12147 debugEnviron = process.env.NODE_DEBUG || '';
12148 set = set.toUpperCase();
12149 if (!debugs[set]) {
12150 if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
12151 var pid = process.pid;
12152 debugs[set] = function() {
12153 var msg = exports.format.apply(exports, arguments);
12154 console.error('%s %d: %s', set, pid, msg);
12155 };
12156 } else {
12157 debugs[set] = function() {};
12158 }
12159 }
12160 return debugs[set];
12161};
12162
12163
12164/**
12165 * Echos the value of a value. Trys to print the value out
12166 * in the best way possible given the different types.
12167 *
12168 * @param {Object} obj The object to print out.
12169 * @param {Object} opts Optional options object that alters the output.
12170 */
12171/* legacy: obj, showHidden, depth, colors*/
12172function inspect(obj, opts) {
12173 // default options
12174 var ctx = {
12175 seen: [],
12176 stylize: stylizeNoColor
12177 };
12178 // legacy...
12179 if (arguments.length >= 3) ctx.depth = arguments[2];
12180 if (arguments.length >= 4) ctx.colors = arguments[3];
12181 if (isBoolean(opts)) {
12182 // legacy...
12183 ctx.showHidden = opts;
12184 } else if (opts) {
12185 // got an "options" object
12186 exports._extend(ctx, opts);
12187 }
12188 // set default options
12189 if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
12190 if (isUndefined(ctx.depth)) ctx.depth = 2;
12191 if (isUndefined(ctx.colors)) ctx.colors = false;
12192 if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
12193 if (ctx.colors) ctx.stylize = stylizeWithColor;
12194 return formatValue(ctx, obj, ctx.depth);
12195}
12196exports.inspect = inspect;
12197
12198
12199// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
12200inspect.colors = {
12201 'bold' : [1, 22],
12202 'italic' : [3, 23],
12203 'underline' : [4, 24],
12204 'inverse' : [7, 27],
12205 'white' : [37, 39],
12206 'grey' : [90, 39],
12207 'black' : [30, 39],
12208 'blue' : [34, 39],
12209 'cyan' : [36, 39],
12210 'green' : [32, 39],
12211 'magenta' : [35, 39],
12212 'red' : [31, 39],
12213 'yellow' : [33, 39]
12214};
12215
12216// Don't use 'blue' not visible on cmd.exe
12217inspect.styles = {
12218 'special': 'cyan',
12219 'number': 'yellow',
12220 'boolean': 'yellow',
12221 'undefined': 'grey',
12222 'null': 'bold',
12223 'string': 'green',
12224 'date': 'magenta',
12225 // "name": intentionally not styling
12226 'regexp': 'red'
12227};
12228
12229
12230function stylizeWithColor(str, styleType) {
12231 var style = inspect.styles[styleType];
12232
12233 if (style) {
12234 return '\u001b[' + inspect.colors[style][0] + 'm' + str +
12235 '\u001b[' + inspect.colors[style][1] + 'm';
12236 } else {
12237 return str;
12238 }
12239}
12240
12241
12242function stylizeNoColor(str, styleType) {
12243 return str;
12244}
12245
12246
12247function arrayToHash(array) {
12248 var hash = {};
12249
12250 array.forEach(function(val, idx) {
12251 hash[val] = true;
12252 });
12253
12254 return hash;
12255}
12256
12257
12258function formatValue(ctx, value, recurseTimes) {
12259 // Provide a hook for user-specified inspect functions.
12260 // Check that value is an object with an inspect function on it
12261 if (ctx.customInspect &&
12262 value &&
12263 isFunction(value.inspect) &&
12264 // Filter out the util module, it's inspect function is special
12265 value.inspect !== exports.inspect &&
12266 // Also filter out any prototype objects using the circular check.
12267 !(value.constructor && value.constructor.prototype === value)) {
12268 var ret = value.inspect(recurseTimes, ctx);
12269 if (!isString(ret)) {
12270 ret = formatValue(ctx, ret, recurseTimes);
12271 }
12272 return ret;
12273 }
12274
12275 // Primitive types cannot have properties
12276 var primitive = formatPrimitive(ctx, value);
12277 if (primitive) {
12278 return primitive;
12279 }
12280
12281 // Look up the keys of the object.
12282 var keys = Object.keys(value);
12283 var visibleKeys = arrayToHash(keys);
12284
12285 if (ctx.showHidden) {
12286 keys = Object.getOwnPropertyNames(value);
12287 }
12288
12289 // IE doesn't make error fields non-enumerable
12290 // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx
12291 if (isError(value)
12292 && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {
12293 return formatError(value);
12294 }
12295
12296 // Some type of object without properties can be shortcutted.
12297 if (keys.length === 0) {
12298 if (isFunction(value)) {
12299 var name = value.name ? ': ' + value.name : '';
12300 return ctx.stylize('[Function' + name + ']', 'special');
12301 }
12302 if (isRegExp(value)) {
12303 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
12304 }
12305 if (isDate(value)) {
12306 return ctx.stylize(Date.prototype.toString.call(value), 'date');
12307 }
12308 if (isError(value)) {
12309 return formatError(value);
12310 }
12311 }
12312
12313 var base = '', array = false, braces = ['{', '}'];
12314
12315 // Make Array say that they are Array
12316 if (isArray(value)) {
12317 array = true;
12318 braces = ['[', ']'];
12319 }
12320
12321 // Make functions say that they are functions
12322 if (isFunction(value)) {
12323 var n = value.name ? ': ' + value.name : '';
12324 base = ' [Function' + n + ']';
12325 }
12326
12327 // Make RegExps say that they are RegExps
12328 if (isRegExp(value)) {
12329 base = ' ' + RegExp.prototype.toString.call(value);
12330 }
12331
12332 // Make dates with properties first say the date
12333 if (isDate(value)) {
12334 base = ' ' + Date.prototype.toUTCString.call(value);
12335 }
12336
12337 // Make error with message first say the error
12338 if (isError(value)) {
12339 base = ' ' + formatError(value);
12340 }
12341
12342 if (keys.length === 0 && (!array || value.length == 0)) {
12343 return braces[0] + base + braces[1];
12344 }
12345
12346 if (recurseTimes < 0) {
12347 if (isRegExp(value)) {
12348 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
12349 } else {
12350 return ctx.stylize('[Object]', 'special');
12351 }
12352 }
12353
12354 ctx.seen.push(value);
12355
12356 var output;
12357 if (array) {
12358 output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
12359 } else {
12360 output = keys.map(function(key) {
12361 return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
12362 });
12363 }
12364
12365 ctx.seen.pop();
12366
12367 return reduceToSingleString(output, base, braces);
12368}
12369
12370
12371function formatPrimitive(ctx, value) {
12372 if (isUndefined(value))
12373 return ctx.stylize('undefined', 'undefined');
12374 if (isString(value)) {
12375 var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
12376 .replace(/'/g, "\\'")
12377 .replace(/\\"/g, '"') + '\'';
12378 return ctx.stylize(simple, 'string');
12379 }
12380 if (isNumber(value))
12381 return ctx.stylize('' + value, 'number');
12382 if (isBoolean(value))
12383 return ctx.stylize('' + value, 'boolean');
12384 // For some reason typeof null is "object", so special case here.
12385 if (isNull(value))
12386 return ctx.stylize('null', 'null');
12387}
12388
12389
12390function formatError(value) {
12391 return '[' + Error.prototype.toString.call(value) + ']';
12392}
12393
12394
12395function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
12396 var output = [];
12397 for (var i = 0, l = value.length; i < l; ++i) {
12398 if (hasOwnProperty(value, String(i))) {
12399 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
12400 String(i), true));
12401 } else {
12402 output.push('');
12403 }
12404 }
12405 keys.forEach(function(key) {
12406 if (!key.match(/^\d+$/)) {
12407 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
12408 key, true));
12409 }
12410 });
12411 return output;
12412}
12413
12414
12415function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
12416 var name, str, desc;
12417 desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
12418 if (desc.get) {
12419 if (desc.set) {
12420 str = ctx.stylize('[Getter/Setter]', 'special');
12421 } else {
12422 str = ctx.stylize('[Getter]', 'special');
12423 }
12424 } else {
12425 if (desc.set) {
12426 str = ctx.stylize('[Setter]', 'special');
12427 }
12428 }
12429 if (!hasOwnProperty(visibleKeys, key)) {
12430 name = '[' + key + ']';
12431 }
12432 if (!str) {
12433 if (ctx.seen.indexOf(desc.value) < 0) {
12434 if (isNull(recurseTimes)) {
12435 str = formatValue(ctx, desc.value, null);
12436 } else {
12437 str = formatValue(ctx, desc.value, recurseTimes - 1);
12438 }
12439 if (str.indexOf('\n') > -1) {
12440 if (array) {
12441 str = str.split('\n').map(function(line) {
12442 return ' ' + line;
12443 }).join('\n').substr(2);
12444 } else {
12445 str = '\n' + str.split('\n').map(function(line) {
12446 return ' ' + line;
12447 }).join('\n');
12448 }
12449 }
12450 } else {
12451 str = ctx.stylize('[Circular]', 'special');
12452 }
12453 }
12454 if (isUndefined(name)) {
12455 if (array && key.match(/^\d+$/)) {
12456 return str;
12457 }
12458 name = JSON.stringify('' + key);
12459 if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
12460 name = name.substr(1, name.length - 2);
12461 name = ctx.stylize(name, 'name');
12462 } else {
12463 name = name.replace(/'/g, "\\'")
12464 .replace(/\\"/g, '"')
12465 .replace(/(^"|"$)/g, "'");
12466 name = ctx.stylize(name, 'string');
12467 }
12468 }
12469
12470 return name + ': ' + str;
12471}
12472
12473
12474function reduceToSingleString(output, base, braces) {
12475 var numLinesEst = 0;
12476 var length = output.reduce(function(prev, cur) {
12477 numLinesEst++;
12478 if (cur.indexOf('\n') >= 0) numLinesEst++;
12479 return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;
12480 }, 0);
12481
12482 if (length > 60) {
12483 return braces[0] +
12484 (base === '' ? '' : base + '\n ') +
12485 ' ' +
12486 output.join(',\n ') +
12487 ' ' +
12488 braces[1];
12489 }
12490
12491 return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
12492}
12493
12494
12495// NOTE: These type checking functions intentionally don't use `instanceof`
12496// because it is fragile and can be easily faked with `Object.create()`.
12497function isArray(ar) {
12498 return Array.isArray(ar);
12499}
12500exports.isArray = isArray;
12501
12502function isBoolean(arg) {
12503 return typeof arg === 'boolean';
12504}
12505exports.isBoolean = isBoolean;
12506
12507function isNull(arg) {
12508 return arg === null;
12509}
12510exports.isNull = isNull;
12511
12512function isNullOrUndefined(arg) {
12513 return arg == null;
12514}
12515exports.isNullOrUndefined = isNullOrUndefined;
12516
12517function isNumber(arg) {
12518 return typeof arg === 'number';
12519}
12520exports.isNumber = isNumber;
12521
12522function isString(arg) {
12523 return typeof arg === 'string';
12524}
12525exports.isString = isString;
12526
12527function isSymbol(arg) {
12528 return typeof arg === 'symbol';
12529}
12530exports.isSymbol = isSymbol;
12531
12532function isUndefined(arg) {
12533 return arg === void 0;
12534}
12535exports.isUndefined = isUndefined;
12536
12537function isRegExp(re) {
12538 return isObject(re) && objectToString(re) === '[object RegExp]';
12539}
12540exports.isRegExp = isRegExp;
12541
12542function isObject(arg) {
12543 return typeof arg === 'object' && arg !== null;
12544}
12545exports.isObject = isObject;
12546
12547function isDate(d) {
12548 return isObject(d) && objectToString(d) === '[object Date]';
12549}
12550exports.isDate = isDate;
12551
12552function isError(e) {
12553 return isObject(e) &&
12554 (objectToString(e) === '[object Error]' || e instanceof Error);
12555}
12556exports.isError = isError;
12557
12558function isFunction(arg) {
12559 return typeof arg === 'function';
12560}
12561exports.isFunction = isFunction;
12562
12563function isPrimitive(arg) {
12564 return arg === null ||
12565 typeof arg === 'boolean' ||
12566 typeof arg === 'number' ||
12567 typeof arg === 'string' ||
12568 typeof arg === 'symbol' || // ES6 symbol
12569 typeof arg === 'undefined';
12570}
12571exports.isPrimitive = isPrimitive;
12572
12573exports.isBuffer = require('./support/isBuffer');
12574
12575function objectToString(o) {
12576 return Object.prototype.toString.call(o);
12577}
12578
12579
12580function pad(n) {
12581 return n < 10 ? '0' + n.toString(10) : n.toString(10);
12582}
12583
12584
12585var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
12586 'Oct', 'Nov', 'Dec'];
12587
12588// 26 Feb 16:19:34
12589function timestamp() {
12590 var d = new Date();
12591 var time = [pad(d.getHours()),
12592 pad(d.getMinutes()),
12593 pad(d.getSeconds())].join(':');
12594 return [d.getDate(), months[d.getMonth()], time].join(' ');
12595}
12596
12597
12598// log is just a thin wrapper to console.log that prepends a timestamp
12599exports.log = function() {
12600 console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
12601};
12602
12603
12604/**
12605 * Inherit the prototype methods from one constructor into another.
12606 *
12607 * The Function.prototype.inherits from lang.js rewritten as a standalone
12608 * function (not on Function.prototype). NOTE: If this file is to be loaded
12609 * during bootstrapping this function needs to be rewritten using some native
12610 * functions as prototype setup using normal JavaScript does not work as
12611 * expected during bootstrapping (see mirror.js in r114903).
12612 *
12613 * @param {function} ctor Constructor function which needs to inherit the
12614 * prototype.
12615 * @param {function} superCtor Constructor function to inherit prototype from.
12616 */
12617exports.inherits = require('inherits');
12618
12619exports._extend = function(origin, add) {
12620 // Don't do anything if add isn't an object
12621 if (!add || !isObject(add)) return origin;
12622
12623 var keys = Object.keys(add);
12624 var i = keys.length;
12625 while (i--) {
12626 origin[keys[i]] = add[keys[i]];
12627 }
12628 return origin;
12629};
12630
12631function hasOwnProperty(obj, prop) {
12632 return Object.prototype.hasOwnProperty.call(obj, prop);
12633}
12634
12635}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
12636},{"./support/isBuffer":28,"_process":14,"inherits":12}],30:[function(require,module,exports){
12637// Base58 encoding/decoding
12638// Originally written by Mike Hearn for BitcoinJ
12639// Copyright (c) 2011 Google Inc
12640// Ported to JavaScript by Stefan Thomas
12641// Merged Buffer refactorings from base58-native by Stephen Pair
12642// Copyright (c) 2013 BitPay Inc
12643
12644var ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
12645var ALPHABET_MAP = {}
12646for(var i = 0; i < ALPHABET.length; i++) {
12647 ALPHABET_MAP[ALPHABET.charAt(i)] = i
12648}
12649var BASE = 58
12650
12651function encode(buffer) {
12652 if (buffer.length === 0) return ''
12653
12654 var i, j, digits = [0]
12655 for (i = 0; i < buffer.length; i++) {
12656 for (j = 0; j < digits.length; j++) digits[j] <<= 8
12657
12658 digits[0] += buffer[i]
12659
12660 var carry = 0
12661 for (j = 0; j < digits.length; ++j) {
12662 digits[j] += carry
12663
12664 carry = (digits[j] / BASE) | 0
12665 digits[j] %= BASE
12666 }
12667
12668 while (carry) {
12669 digits.push(carry % BASE)
12670
12671 carry = (carry / BASE) | 0
12672 }
12673 }
12674
12675 // deal with leading zeros
12676 for (i = 0; buffer[i] === 0 && i < buffer.length - 1; i++) digits.push(0)
12677
12678 // convert digits to a string
12679 var stringOutput = ""
12680 for (var i = digits.length - 1; i >= 0; i--) {
12681 stringOutput = stringOutput + ALPHABET[digits[i]]
12682 }
12683 return stringOutput
12684}
12685
12686function decode(string) {
12687 if (string.length === 0) return []
12688
12689 var i, j, bytes = [0]
12690 for (i = 0; i < string.length; i++) {
12691 var c = string[i]
12692 if (!(c in ALPHABET_MAP)) throw new Error('Non-base58 character')
12693
12694 for (j = 0; j < bytes.length; j++) bytes[j] *= BASE
12695 bytes[0] += ALPHABET_MAP[c]
12696
12697 var carry = 0
12698 for (j = 0; j < bytes.length; ++j) {
12699 bytes[j] += carry
12700
12701 carry = bytes[j] >> 8
12702 bytes[j] &= 0xff
12703 }
12704
12705 while (carry) {
12706 bytes.push(carry & 0xff)
12707
12708 carry >>= 8
12709 }
12710 }
12711
12712 // deal with leading zeros
12713 for (i = 0; string[i] === '1' && i < string.length - 1; i++) bytes.push(0)
12714
12715 return bytes.reverse()
12716}
12717
12718module.exports = {
12719 encode: encode,
12720 decode: decode
12721}
12722
12723},{}],31:[function(require,module,exports){
12724(function (Buffer){
12725'use strict'
12726
12727var base58 = require('bs58')
12728var createHash = require('create-hash')
12729
12730// SHA256(SHA256(buffer))
12731function sha256x2 (buffer) {
12732 buffer = createHash('sha256').update(buffer).digest()
12733 return createHash('sha256').update(buffer).digest()
12734}
12735
12736// Encode a buffer as a base58-check encoded string
12737function encode (payload) {
12738 var checksum = sha256x2(payload).slice(0, 4)
12739
12740 return base58.encode(Buffer.concat([
12741 payload,
12742 checksum
12743 ]))
12744}
12745
12746// Decode a base58-check encoded string to a buffer
12747function decode (string) {
12748 var buffer = new Buffer(base58.decode(string))
12749
12750 var payload = buffer.slice(0, -4)
12751 var checksum = buffer.slice(-4)
12752 var newChecksum = sha256x2(payload).slice(0, 4)
12753
12754 for (var i = 0; i < newChecksum.length; ++i) {
12755 if (newChecksum[i] === checksum[i]) continue
12756
12757 throw new Error('Invalid checksum')
12758 }
12759
12760 return payload
12761}
12762
12763module.exports = {
12764 encode: encode,
12765 decode: decode
12766}
12767
12768}).call(this,require("buffer").Buffer)
12769},{"bs58":30,"buffer":7,"create-hash":32}],32:[function(require,module,exports){
12770(function (Buffer){
12771'use strict';
12772var inherits = require('inherits')
12773var md5 = require('./md5')
12774var rmd160 = require('ripemd160')
12775var sha = require('sha.js')
12776
12777var Transform = require('stream').Transform
12778
12779function HashNoConstructor(hash) {
12780 Transform.call(this)
12781
12782 this._hash = hash
12783 this.buffers = []
12784}
12785
12786inherits(HashNoConstructor, Transform)
12787
12788HashNoConstructor.prototype._transform = function (data, _, next) {
12789 this.buffers.push(data)
12790
12791 next()
12792}
12793
12794HashNoConstructor.prototype._flush = function (next) {
12795 this.push(this.digest())
12796 next()
12797}
12798
12799HashNoConstructor.prototype.update = function (data, enc) {
12800 if (typeof data === 'string') {
12801 data = new Buffer(data, enc)
12802 }
12803
12804 this.buffers.push(data)
12805 return this
12806}
12807
12808HashNoConstructor.prototype.digest = function (enc) {
12809 var buf = Buffer.concat(this.buffers)
12810 var r = this._hash(buf)
12811 this.buffers = null
12812
12813 return enc ? r.toString(enc) : r
12814}
12815
12816function Hash(hash) {
12817 Transform.call(this)
12818
12819 this._hash = hash
12820}
12821
12822inherits(Hash, Transform)
12823
12824Hash.prototype._transform = function (data, enc, next) {
12825 if (enc) data = new Buffer(data, enc)
12826
12827 this._hash.update(data)
12828
12829 next()
12830}
12831
12832Hash.prototype._flush = function (next) {
12833 this.push(this._hash.digest())
12834 this._hash = null
12835
12836 next()
12837}
12838
12839Hash.prototype.update = function (data, enc) {
12840 if (typeof data === 'string') {
12841 data = new Buffer(data, enc)
12842 }
12843
12844 this._hash.update(data)
12845 return this
12846}
12847
12848Hash.prototype.digest = function (enc) {
12849 var outData = this._hash.digest()
12850
12851 return enc ? outData.toString(enc) : outData
12852}
12853
12854module.exports = function createHash (alg) {
12855 if ('md5' === alg) return new HashNoConstructor(md5)
12856 if ('rmd160' === alg) return new HashNoConstructor(rmd160)
12857
12858 return new Hash(sha(alg))
12859}
12860
12861}).call(this,require("buffer").Buffer)
12862},{"./md5":34,"buffer":7,"inherits":35,"ripemd160":36,"sha.js":38,"stream":26}],33:[function(require,module,exports){
12863(function (Buffer){
12864'use strict';
12865var intSize = 4;
12866var zeroBuffer = new Buffer(intSize); zeroBuffer.fill(0);
12867var chrsz = 8;
12868
12869function toArray(buf, bigEndian) {
12870 if ((buf.length % intSize) !== 0) {
12871 var len = buf.length + (intSize - (buf.length % intSize));
12872 buf = Buffer.concat([buf, zeroBuffer], len);
12873 }
12874
12875 var arr = [];
12876 var fn = bigEndian ? buf.readInt32BE : buf.readInt32LE;
12877 for (var i = 0; i < buf.length; i += intSize) {
12878 arr.push(fn.call(buf, i));
12879 }
12880 return arr;
12881}
12882
12883function toBuffer(arr, size, bigEndian) {
12884 var buf = new Buffer(size);
12885 var fn = bigEndian ? buf.writeInt32BE : buf.writeInt32LE;
12886 for (var i = 0; i < arr.length; i++) {
12887 fn.call(buf, arr[i], i * 4, true);
12888 }
12889 return buf;
12890}
12891
12892function hash(buf, fn, hashSize, bigEndian) {
12893 if (!Buffer.isBuffer(buf)) buf = new Buffer(buf);
12894 var arr = fn(toArray(buf, bigEndian), buf.length * chrsz);
12895 return toBuffer(arr, hashSize, bigEndian);
12896}
12897exports.hash = hash;
12898}).call(this,require("buffer").Buffer)
12899},{"buffer":7}],34:[function(require,module,exports){
12900'use strict';
12901/*
12902 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
12903 * Digest Algorithm, as defined in RFC 1321.
12904 * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
12905 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
12906 * Distributed under the BSD License
12907 * See http://pajhome.org.uk/crypt/md5 for more info.
12908 */
12909
12910var helpers = require('./helpers');
12911
12912/*
12913 * Calculate the MD5 of an array of little-endian words, and a bit length
12914 */
12915function core_md5(x, len)
12916{
12917 /* append padding */
12918 x[len >> 5] |= 0x80 << ((len) % 32);
12919 x[(((len + 64) >>> 9) << 4) + 14] = len;
12920
12921 var a = 1732584193;
12922 var b = -271733879;
12923 var c = -1732584194;
12924 var d = 271733878;
12925
12926 for(var i = 0; i < x.length; i += 16)
12927 {
12928 var olda = a;
12929 var oldb = b;
12930 var oldc = c;
12931 var oldd = d;
12932
12933 a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936);
12934 d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586);
12935 c = md5_ff(c, d, a, b, x[i+ 2], 17, 606105819);
12936 b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330);
12937 a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897);
12938 d = md5_ff(d, a, b, c, x[i+ 5], 12, 1200080426);
12939 c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341);
12940 b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983);
12941 a = md5_ff(a, b, c, d, x[i+ 8], 7 , 1770035416);
12942 d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417);
12943 c = md5_ff(c, d, a, b, x[i+10], 17, -42063);
12944 b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162);
12945 a = md5_ff(a, b, c, d, x[i+12], 7 , 1804603682);
12946 d = md5_ff(d, a, b, c, x[i+13], 12, -40341101);
12947 c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290);
12948 b = md5_ff(b, c, d, a, x[i+15], 22, 1236535329);
12949
12950 a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510);
12951 d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632);
12952 c = md5_gg(c, d, a, b, x[i+11], 14, 643717713);
12953 b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302);
12954 a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691);
12955 d = md5_gg(d, a, b, c, x[i+10], 9 , 38016083);
12956 c = md5_gg(c, d, a, b, x[i+15], 14, -660478335);
12957 b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848);
12958 a = md5_gg(a, b, c, d, x[i+ 9], 5 , 568446438);
12959 d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690);
12960 c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961);
12961 b = md5_gg(b, c, d, a, x[i+ 8], 20, 1163531501);
12962 a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467);
12963 d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784);
12964 c = md5_gg(c, d, a, b, x[i+ 7], 14, 1735328473);
12965 b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734);
12966
12967 a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558);
12968 d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463);
12969 c = md5_hh(c, d, a, b, x[i+11], 16, 1839030562);
12970 b = md5_hh(b, c, d, a, x[i+14], 23, -35309556);
12971 a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060);
12972 d = md5_hh(d, a, b, c, x[i+ 4], 11, 1272893353);
12973 c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632);
12974 b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640);
12975 a = md5_hh(a, b, c, d, x[i+13], 4 , 681279174);
12976 d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222);
12977 c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979);
12978 b = md5_hh(b, c, d, a, x[i+ 6], 23, 76029189);
12979 a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487);
12980 d = md5_hh(d, a, b, c, x[i+12], 11, -421815835);
12981 c = md5_hh(c, d, a, b, x[i+15], 16, 530742520);
12982 b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651);
12983
12984 a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844);
12985 d = md5_ii(d, a, b, c, x[i+ 7], 10, 1126891415);
12986 c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905);
12987 b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055);
12988 a = md5_ii(a, b, c, d, x[i+12], 6 , 1700485571);
12989 d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606);
12990 c = md5_ii(c, d, a, b, x[i+10], 15, -1051523);
12991 b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799);
12992 a = md5_ii(a, b, c, d, x[i+ 8], 6 , 1873313359);
12993 d = md5_ii(d, a, b, c, x[i+15], 10, -30611744);
12994 c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380);
12995 b = md5_ii(b, c, d, a, x[i+13], 21, 1309151649);
12996 a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070);
12997 d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379);
12998 c = md5_ii(c, d, a, b, x[i+ 2], 15, 718787259);
12999 b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551);
13000
13001 a = safe_add(a, olda);
13002 b = safe_add(b, oldb);
13003 c = safe_add(c, oldc);
13004 d = safe_add(d, oldd);
13005 }
13006 return Array(a, b, c, d);
13007
13008}
13009
13010/*
13011 * These functions implement the four basic operations the algorithm uses.
13012 */
13013function md5_cmn(q, a, b, x, s, t)
13014{
13015 return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b);
13016}
13017function md5_ff(a, b, c, d, x, s, t)
13018{
13019 return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
13020}
13021function md5_gg(a, b, c, d, x, s, t)
13022{
13023 return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
13024}
13025function md5_hh(a, b, c, d, x, s, t)
13026{
13027 return md5_cmn(b ^ c ^ d, a, b, x, s, t);
13028}
13029function md5_ii(a, b, c, d, x, s, t)
13030{
13031 return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
13032}
13033
13034/*
13035 * Add integers, wrapping at 2^32. This uses 16-bit operations internally
13036 * to work around bugs in some JS interpreters.
13037 */
13038function safe_add(x, y)
13039{
13040 var lsw = (x & 0xFFFF) + (y & 0xFFFF);
13041 var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
13042 return (msw << 16) | (lsw & 0xFFFF);
13043}
13044
13045/*
13046 * Bitwise rotate a 32-bit number to the left.
13047 */
13048function bit_rol(num, cnt)
13049{
13050 return (num << cnt) | (num >>> (32 - cnt));
13051}
13052
13053module.exports = function md5(buf) {
13054 return helpers.hash(buf, core_md5, 16);
13055};
13056},{"./helpers":33}],35:[function(require,module,exports){
13057arguments[4][12][0].apply(exports,arguments)
13058},{"dup":12}],36:[function(require,module,exports){
13059(function (Buffer){
13060/*
13061CryptoJS v3.1.2
13062code.google.com/p/crypto-js
13063(c) 2009-2013 by Jeff Mott. All rights reserved.
13064code.google.com/p/crypto-js/wiki/License
13065*/
13066/** @preserve
13067(c) 2012 by Cédric Mesnil. All rights reserved.
13068
13069Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
13070
13071 - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
13072 - 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.
13073
13074THIS 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.
13075*/
13076
13077// constants table
13078var zl = [
13079 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
13080 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
13081 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
13082 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
13083 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
13084]
13085
13086var zr = [
13087 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
13088 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
13089 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
13090 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
13091 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
13092]
13093
13094var sl = [
13095 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
13096 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
13097 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
13098 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
13099 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
13100]
13101
13102var sr = [
13103 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
13104 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
13105 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
13106 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
13107 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
13108]
13109
13110var hl = [0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]
13111var hr = [0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]
13112
13113function bytesToWords (bytes) {
13114 var words = []
13115 for (var i = 0, b = 0; i < bytes.length; i++, b += 8) {
13116 words[b >>> 5] |= bytes[i] << (24 - b % 32)
13117 }
13118 return words
13119}
13120
13121function wordsToBytes (words) {
13122 var bytes = []
13123 for (var b = 0; b < words.length * 32; b += 8) {
13124 bytes.push((words[b >>> 5] >>> (24 - b % 32)) & 0xFF)
13125 }
13126 return bytes
13127}
13128
13129function processBlock (H, M, offset) {
13130 // swap endian
13131 for (var i = 0; i < 16; i++) {
13132 var offset_i = offset + i
13133 var M_offset_i = M[offset_i]
13134
13135 // Swap
13136 M[offset_i] = (
13137 (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |
13138 (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)
13139 )
13140 }
13141
13142 // Working variables
13143 var al, bl, cl, dl, el
13144 var ar, br, cr, dr, er
13145
13146 ar = al = H[0]
13147 br = bl = H[1]
13148 cr = cl = H[2]
13149 dr = dl = H[3]
13150 er = el = H[4]
13151
13152 // computation
13153 var t
13154 for (i = 0; i < 80; i += 1) {
13155 t = (al + M[offset + zl[i]]) | 0
13156 if (i < 16) {
13157 t += f1(bl, cl, dl) + hl[0]
13158 } else if (i < 32) {
13159 t += f2(bl, cl, dl) + hl[1]
13160 } else if (i < 48) {
13161 t += f3(bl, cl, dl) + hl[2]
13162 } else if (i < 64) {
13163 t += f4(bl, cl, dl) + hl[3]
13164 } else {// if (i<80) {
13165 t += f5(bl, cl, dl) + hl[4]
13166 }
13167 t = t | 0
13168 t = rotl(t, sl[i])
13169 t = (t + el) | 0
13170 al = el
13171 el = dl
13172 dl = rotl(cl, 10)
13173 cl = bl
13174 bl = t
13175
13176 t = (ar + M[offset + zr[i]]) | 0
13177 if (i < 16) {
13178 t += f5(br, cr, dr) + hr[0]
13179 } else if (i < 32) {
13180 t += f4(br, cr, dr) + hr[1]
13181 } else if (i < 48) {
13182 t += f3(br, cr, dr) + hr[2]
13183 } else if (i < 64) {
13184 t += f2(br, cr, dr) + hr[3]
13185 } else {// if (i<80) {
13186 t += f1(br, cr, dr) + hr[4]
13187 }
13188
13189 t = t | 0
13190 t = rotl(t, sr[i])
13191 t = (t + er) | 0
13192 ar = er
13193 er = dr
13194 dr = rotl(cr, 10)
13195 cr = br
13196 br = t
13197 }
13198
13199 // intermediate hash value
13200 t = (H[1] + cl + dr) | 0
13201 H[1] = (H[2] + dl + er) | 0
13202 H[2] = (H[3] + el + ar) | 0
13203 H[3] = (H[4] + al + br) | 0
13204 H[4] = (H[0] + bl + cr) | 0
13205 H[0] = t
13206}
13207
13208function f1 (x, y, z) {
13209 return ((x) ^ (y) ^ (z))
13210}
13211
13212function f2 (x, y, z) {
13213 return (((x) & (y)) | ((~x) & (z)))
13214}
13215
13216function f3 (x, y, z) {
13217 return (((x) | (~(y))) ^ (z))
13218}
13219
13220function f4 (x, y, z) {
13221 return (((x) & (z)) | ((y) & (~(z))))
13222}
13223
13224function f5 (x, y, z) {
13225 return ((x) ^ ((y) | (~(z))))
13226}
13227
13228function rotl (x, n) {
13229 return (x << n) | (x >>> (32 - n))
13230}
13231
13232function ripemd160 (message) {
13233 var H = [0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]
13234
13235 if (typeof message === 'string') {
13236 message = new Buffer(message, 'utf8')
13237 }
13238
13239 var m = bytesToWords(message)
13240
13241 var nBitsLeft = message.length * 8
13242 var nBitsTotal = message.length * 8
13243
13244 // Add padding
13245 m[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32)
13246 m[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (
13247 (((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff) |
13248 (((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00)
13249 )
13250
13251 for (var i = 0; i < m.length; i += 16) {
13252 processBlock(H, m, i)
13253 }
13254
13255 // swap endian
13256 for (i = 0; i < 5; i++) {
13257 // shortcut
13258 var H_i = H[i]
13259
13260 // Swap
13261 H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |
13262 (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00)
13263 }
13264
13265 var digestbytes = wordsToBytes(H)
13266 return new Buffer(digestbytes)
13267}
13268
13269module.exports = ripemd160
13270
13271}).call(this,require("buffer").Buffer)
13272},{"buffer":7}],37:[function(require,module,exports){
13273(function (Buffer){
13274// prototype class for hash functions
13275function Hash (blockSize, finalSize) {
13276 this._block = new Buffer(blockSize)
13277 this._finalSize = finalSize
13278 this._blockSize = blockSize
13279 this._len = 0
13280 this._s = 0
13281}
13282
13283Hash.prototype.update = function (data, enc) {
13284 if (typeof data === 'string') {
13285 enc = enc || 'utf8'
13286 data = new Buffer(data, enc)
13287 }
13288
13289 var l = this._len += data.length
13290 var s = this._s || 0
13291 var f = 0
13292 var buffer = this._block
13293
13294 while (s < l) {
13295 var t = Math.min(data.length, f + this._blockSize - (s % this._blockSize))
13296 var ch = (t - f)
13297
13298 for (var i = 0; i < ch; i++) {
13299 buffer[(s % this._blockSize) + i] = data[i + f]
13300 }
13301
13302 s += ch
13303 f += ch
13304
13305 if ((s % this._blockSize) === 0) {
13306 this._update(buffer)
13307 }
13308 }
13309 this._s = s
13310
13311 return this
13312}
13313
13314Hash.prototype.digest = function (enc) {
13315 // Suppose the length of the message M, in bits, is l
13316 var l = this._len * 8
13317
13318 // Append the bit 1 to the end of the message
13319 this._block[this._len % this._blockSize] = 0x80
13320
13321 // and then k zero bits, where k is the smallest non-negative solution to the equation (l + 1 + k) === finalSize mod blockSize
13322 this._block.fill(0, this._len % this._blockSize + 1)
13323
13324 if (l % (this._blockSize * 8) >= this._finalSize * 8) {
13325 this._update(this._block)
13326 this._block.fill(0)
13327 }
13328
13329 // to this append the block which is equal to the number l written in binary
13330 // TODO: handle case where l is > Math.pow(2, 29)
13331 this._block.writeInt32BE(l, this._blockSize - 4)
13332
13333 var hash = this._update(this._block) || this._hash()
13334
13335 return enc ? hash.toString(enc) : hash
13336}
13337
13338Hash.prototype._update = function () {
13339 throw new Error('_update must be implemented by subclass')
13340}
13341
13342module.exports = Hash
13343
13344}).call(this,require("buffer").Buffer)
13345},{"buffer":7}],38:[function(require,module,exports){
13346var exports = module.exports = function SHA (algorithm) {
13347 algorithm = algorithm.toLowerCase()
13348
13349 var Algorithm = exports[algorithm]
13350 if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')
13351
13352 return new Algorithm()
13353}
13354
13355exports.sha = require('./sha')
13356exports.sha1 = require('./sha1')
13357exports.sha224 = require('./sha224')
13358exports.sha256 = require('./sha256')
13359exports.sha384 = require('./sha384')
13360exports.sha512 = require('./sha512')
13361
13362},{"./sha":39,"./sha1":40,"./sha224":41,"./sha256":42,"./sha384":43,"./sha512":44}],39:[function(require,module,exports){
13363(function (Buffer){
13364/*
13365 * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined
13366 * in FIPS PUB 180-1
13367 * This source code is derived from sha1.js of the same repository.
13368 * The difference between SHA-0 and SHA-1 is just a bitwise rotate left
13369 * operation was added.
13370 */
13371
13372var inherits = require('inherits')
13373var Hash = require('./hash')
13374
13375var W = new Array(80)
13376
13377function Sha () {
13378 this.init()
13379 this._w = W
13380
13381 Hash.call(this, 64, 56)
13382}
13383
13384inherits(Sha, Hash)
13385
13386Sha.prototype.init = function () {
13387 this._a = 0x67452301 | 0
13388 this._b = 0xefcdab89 | 0
13389 this._c = 0x98badcfe | 0
13390 this._d = 0x10325476 | 0
13391 this._e = 0xc3d2e1f0 | 0
13392
13393 return this
13394}
13395
13396/*
13397 * Bitwise rotate a 32-bit number to the left.
13398 */
13399function rol (num, cnt) {
13400 return (num << cnt) | (num >>> (32 - cnt))
13401}
13402
13403Sha.prototype._update = function (M) {
13404 var W = this._w
13405
13406 var a = this._a
13407 var b = this._b
13408 var c = this._c
13409 var d = this._d
13410 var e = this._e
13411
13412 var j = 0, k
13413
13414 /*
13415 * SHA-1 has a bitwise rotate left operation. But, SHA is not
13416 * function calcW() { return rol(W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16], 1) }
13417 */
13418 function calcW () { return W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16] }
13419 function loop (w, f) {
13420 W[j] = w
13421
13422 var t = rol(a, 5) + f + e + w + k
13423
13424 e = d
13425 d = c
13426 c = rol(b, 30)
13427 b = a
13428 a = t
13429 j++
13430 }
13431
13432 k = 1518500249
13433 while (j < 16) loop(M.readInt32BE(j * 4), (b & c) | ((~b) & d))
13434 while (j < 20) loop(calcW(), (b & c) | ((~b) & d))
13435 k = 1859775393
13436 while (j < 40) loop(calcW(), b ^ c ^ d)
13437 k = -1894007588
13438 while (j < 60) loop(calcW(), (b & c) | (b & d) | (c & d))
13439 k = -899497514
13440 while (j < 80) loop(calcW(), b ^ c ^ d)
13441
13442 this._a = (a + this._a) | 0
13443 this._b = (b + this._b) | 0
13444 this._c = (c + this._c) | 0
13445 this._d = (d + this._d) | 0
13446 this._e = (e + this._e) | 0
13447}
13448
13449Sha.prototype._hash = function () {
13450 var H = new Buffer(20)
13451
13452 H.writeInt32BE(this._a | 0, 0)
13453 H.writeInt32BE(this._b | 0, 4)
13454 H.writeInt32BE(this._c | 0, 8)
13455 H.writeInt32BE(this._d | 0, 12)
13456 H.writeInt32BE(this._e | 0, 16)
13457
13458 return H
13459}
13460
13461module.exports = Sha
13462
13463
13464}).call(this,require("buffer").Buffer)
13465},{"./hash":37,"buffer":7,"inherits":35}],40:[function(require,module,exports){
13466(function (Buffer){
13467/*
13468 * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
13469 * in FIPS PUB 180-1
13470 * Version 2.1a Copyright Paul Johnston 2000 - 2002.
13471 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
13472 * Distributed under the BSD License
13473 * See http://pajhome.org.uk/crypt/md5 for details.
13474 */
13475
13476var inherits = require('inherits')
13477var Hash = require('./hash')
13478
13479var W = new Array(80)
13480
13481function Sha1 () {
13482 this.init()
13483 this._w = W
13484
13485 Hash.call(this, 64, 56)
13486}
13487
13488inherits(Sha1, Hash)
13489
13490Sha1.prototype.init = function () {
13491 this._a = 0x67452301 | 0
13492 this._b = 0xefcdab89 | 0
13493 this._c = 0x98badcfe | 0
13494 this._d = 0x10325476 | 0
13495 this._e = 0xc3d2e1f0 | 0
13496
13497 return this
13498}
13499
13500/*
13501 * Bitwise rotate a 32-bit number to the left.
13502 */
13503function rol (num, cnt) {
13504 return (num << cnt) | (num >>> (32 - cnt))
13505}
13506
13507Sha1.prototype._update = function (M) {
13508 var W = this._w
13509
13510 var a = this._a
13511 var b = this._b
13512 var c = this._c
13513 var d = this._d
13514 var e = this._e
13515
13516 var j = 0, k
13517
13518 function calcW () { return rol(W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16], 1) }
13519 function loop (w, f) {
13520 W[j] = w
13521
13522 var t = rol(a, 5) + f + e + w + k
13523
13524 e = d
13525 d = c
13526 c = rol(b, 30)
13527 b = a
13528 a = t
13529 j++
13530 }
13531
13532 k = 1518500249
13533 while (j < 16) loop(M.readInt32BE(j * 4), (b & c) | ((~b) & d))
13534 while (j < 20) loop(calcW(), (b & c) | ((~b) & d))
13535 k = 1859775393
13536 while (j < 40) loop(calcW(), b ^ c ^ d)
13537 k = -1894007588
13538 while (j < 60) loop(calcW(), (b & c) | (b & d) | (c & d))
13539 k = -899497514
13540 while (j < 80) loop(calcW(), b ^ c ^ d)
13541
13542 this._a = (a + this._a) | 0
13543 this._b = (b + this._b) | 0
13544 this._c = (c + this._c) | 0
13545 this._d = (d + this._d) | 0
13546 this._e = (e + this._e) | 0
13547}
13548
13549Sha1.prototype._hash = function () {
13550 var H = new Buffer(20)
13551
13552 H.writeInt32BE(this._a | 0, 0)
13553 H.writeInt32BE(this._b | 0, 4)
13554 H.writeInt32BE(this._c | 0, 8)
13555 H.writeInt32BE(this._d | 0, 12)
13556 H.writeInt32BE(this._e | 0, 16)
13557
13558 return H
13559}
13560
13561module.exports = Sha1
13562
13563}).call(this,require("buffer").Buffer)
13564},{"./hash":37,"buffer":7,"inherits":35}],41:[function(require,module,exports){
13565(function (Buffer){
13566/**
13567 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
13568 * in FIPS 180-2
13569 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
13570 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
13571 *
13572 */
13573
13574var inherits = require('inherits')
13575var Sha256 = require('./sha256')
13576var Hash = require('./hash')
13577
13578var W = new Array(64)
13579
13580function Sha224 () {
13581 this.init()
13582
13583 this._w = W // new Array(64)
13584
13585 Hash.call(this, 64, 56)
13586}
13587
13588inherits(Sha224, Sha256)
13589
13590Sha224.prototype.init = function () {
13591 this._a = 0xc1059ed8 | 0
13592 this._b = 0x367cd507 | 0
13593 this._c = 0x3070dd17 | 0
13594 this._d = 0xf70e5939 | 0
13595 this._e = 0xffc00b31 | 0
13596 this._f = 0x68581511 | 0
13597 this._g = 0x64f98fa7 | 0
13598 this._h = 0xbefa4fa4 | 0
13599
13600 return this
13601}
13602
13603Sha224.prototype._hash = function () {
13604 var H = new Buffer(28)
13605
13606 H.writeInt32BE(this._a, 0)
13607 H.writeInt32BE(this._b, 4)
13608 H.writeInt32BE(this._c, 8)
13609 H.writeInt32BE(this._d, 12)
13610 H.writeInt32BE(this._e, 16)
13611 H.writeInt32BE(this._f, 20)
13612 H.writeInt32BE(this._g, 24)
13613
13614 return H
13615}
13616
13617module.exports = Sha224
13618
13619}).call(this,require("buffer").Buffer)
13620},{"./hash":37,"./sha256":42,"buffer":7,"inherits":35}],42:[function(require,module,exports){
13621(function (Buffer){
13622/**
13623 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
13624 * in FIPS 180-2
13625 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
13626 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
13627 *
13628 */
13629
13630var inherits = require('inherits')
13631var Hash = require('./hash')
13632
13633var K = [
13634 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,
13635 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,
13636 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,
13637 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,
13638 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,
13639 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,
13640 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,
13641 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,
13642 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,
13643 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,
13644 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,
13645 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,
13646 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,
13647 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,
13648 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,
13649 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2
13650]
13651
13652var W = new Array(64)
13653
13654function Sha256 () {
13655 this.init()
13656
13657 this._w = W // new Array(64)
13658
13659 Hash.call(this, 64, 56)
13660}
13661
13662inherits(Sha256, Hash)
13663
13664Sha256.prototype.init = function () {
13665 this._a = 0x6a09e667 | 0
13666 this._b = 0xbb67ae85 | 0
13667 this._c = 0x3c6ef372 | 0
13668 this._d = 0xa54ff53a | 0
13669 this._e = 0x510e527f | 0
13670 this._f = 0x9b05688c | 0
13671 this._g = 0x1f83d9ab | 0
13672 this._h = 0x5be0cd19 | 0
13673
13674 return this
13675}
13676
13677function S (X, n) {
13678 return (X >>> n) | (X << (32 - n))
13679}
13680
13681function R (X, n) {
13682 return (X >>> n)
13683}
13684
13685function Ch (x, y, z) {
13686 return ((x & y) ^ ((~x) & z))
13687}
13688
13689function Maj (x, y, z) {
13690 return ((x & y) ^ (x & z) ^ (y & z))
13691}
13692
13693function Sigma0256 (x) {
13694 return (S(x, 2) ^ S(x, 13) ^ S(x, 22))
13695}
13696
13697function Sigma1256 (x) {
13698 return (S(x, 6) ^ S(x, 11) ^ S(x, 25))
13699}
13700
13701function Gamma0256 (x) {
13702 return (S(x, 7) ^ S(x, 18) ^ R(x, 3))
13703}
13704
13705function Gamma1256 (x) {
13706 return (S(x, 17) ^ S(x, 19) ^ R(x, 10))
13707}
13708
13709Sha256.prototype._update = function (M) {
13710 var W = this._w
13711
13712 var a = this._a | 0
13713 var b = this._b | 0
13714 var c = this._c | 0
13715 var d = this._d | 0
13716 var e = this._e | 0
13717 var f = this._f | 0
13718 var g = this._g | 0
13719 var h = this._h | 0
13720
13721 var j = 0
13722
13723 function calcW () { return Gamma1256(W[j - 2]) + W[j - 7] + Gamma0256(W[j - 15]) + W[j - 16] }
13724 function loop (w) {
13725 W[j] = w
13726
13727 var T1 = h + Sigma1256(e) + Ch(e, f, g) + K[j] + w
13728 var T2 = Sigma0256(a) + Maj(a, b, c)
13729
13730 h = g
13731 g = f
13732 f = e
13733 e = d + T1
13734 d = c
13735 c = b
13736 b = a
13737 a = T1 + T2
13738
13739 j++
13740 }
13741
13742 while (j < 16) loop(M.readInt32BE(j * 4))
13743 while (j < 64) loop(calcW())
13744
13745 this._a = (a + this._a) | 0
13746 this._b = (b + this._b) | 0
13747 this._c = (c + this._c) | 0
13748 this._d = (d + this._d) | 0
13749 this._e = (e + this._e) | 0
13750 this._f = (f + this._f) | 0
13751 this._g = (g + this._g) | 0
13752 this._h = (h + this._h) | 0
13753}
13754
13755Sha256.prototype._hash = function () {
13756 var H = new Buffer(32)
13757
13758 H.writeInt32BE(this._a, 0)
13759 H.writeInt32BE(this._b, 4)
13760 H.writeInt32BE(this._c, 8)
13761 H.writeInt32BE(this._d, 12)
13762 H.writeInt32BE(this._e, 16)
13763 H.writeInt32BE(this._f, 20)
13764 H.writeInt32BE(this._g, 24)
13765 H.writeInt32BE(this._h, 28)
13766
13767 return H
13768}
13769
13770module.exports = Sha256
13771
13772}).call(this,require("buffer").Buffer)
13773},{"./hash":37,"buffer":7,"inherits":35}],43:[function(require,module,exports){
13774(function (Buffer){
13775var inherits = require('inherits')
13776var SHA512 = require('./sha512')
13777var Hash = require('./hash')
13778
13779var W = new Array(160)
13780
13781function Sha384 () {
13782 this.init()
13783 this._w = W
13784
13785 Hash.call(this, 128, 112)
13786}
13787
13788inherits(Sha384, SHA512)
13789
13790Sha384.prototype.init = function () {
13791 this._a = 0xcbbb9d5d | 0
13792 this._b = 0x629a292a | 0
13793 this._c = 0x9159015a | 0
13794 this._d = 0x152fecd8 | 0
13795 this._e = 0x67332667 | 0
13796 this._f = 0x8eb44a87 | 0
13797 this._g = 0xdb0c2e0d | 0
13798 this._h = 0x47b5481d | 0
13799
13800 this._al = 0xc1059ed8 | 0
13801 this._bl = 0x367cd507 | 0
13802 this._cl = 0x3070dd17 | 0
13803 this._dl = 0xf70e5939 | 0
13804 this._el = 0xffc00b31 | 0
13805 this._fl = 0x68581511 | 0
13806 this._gl = 0x64f98fa7 | 0
13807 this._hl = 0xbefa4fa4 | 0
13808
13809 return this
13810}
13811
13812Sha384.prototype._hash = function () {
13813 var H = new Buffer(48)
13814
13815 function writeInt64BE (h, l, offset) {
13816 H.writeInt32BE(h, offset)
13817 H.writeInt32BE(l, offset + 4)
13818 }
13819
13820 writeInt64BE(this._a, this._al, 0)
13821 writeInt64BE(this._b, this._bl, 8)
13822 writeInt64BE(this._c, this._cl, 16)
13823 writeInt64BE(this._d, this._dl, 24)
13824 writeInt64BE(this._e, this._el, 32)
13825 writeInt64BE(this._f, this._fl, 40)
13826
13827 return H
13828}
13829
13830module.exports = Sha384
13831
13832}).call(this,require("buffer").Buffer)
13833},{"./hash":37,"./sha512":44,"buffer":7,"inherits":35}],44:[function(require,module,exports){
13834(function (Buffer){
13835var inherits = require('inherits')
13836var Hash = require('./hash')
13837
13838var K = [
13839 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
13840 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
13841 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
13842 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
13843 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
13844 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
13845 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
13846 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
13847 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
13848 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
13849 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
13850 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
13851 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
13852 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
13853 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
13854 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
13855 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
13856 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
13857 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
13858 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
13859 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
13860 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
13861 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
13862 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
13863 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
13864 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
13865 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
13866 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
13867 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
13868 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
13869 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
13870 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
13871 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
13872 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
13873 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
13874 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
13875 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
13876 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
13877 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
13878 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
13879]
13880
13881var W = new Array(160)
13882
13883function Sha512 () {
13884 this.init()
13885 this._w = W
13886
13887 Hash.call(this, 128, 112)
13888}
13889
13890inherits(Sha512, Hash)
13891
13892Sha512.prototype.init = function () {
13893 this._a = 0x6a09e667 | 0
13894 this._b = 0xbb67ae85 | 0
13895 this._c = 0x3c6ef372 | 0
13896 this._d = 0xa54ff53a | 0
13897 this._e = 0x510e527f | 0
13898 this._f = 0x9b05688c | 0
13899 this._g = 0x1f83d9ab | 0
13900 this._h = 0x5be0cd19 | 0
13901
13902 this._al = 0xf3bcc908 | 0
13903 this._bl = 0x84caa73b | 0
13904 this._cl = 0xfe94f82b | 0
13905 this._dl = 0x5f1d36f1 | 0
13906 this._el = 0xade682d1 | 0
13907 this._fl = 0x2b3e6c1f | 0
13908 this._gl = 0xfb41bd6b | 0
13909 this._hl = 0x137e2179 | 0
13910
13911 return this
13912}
13913
13914function S (X, Xl, n) {
13915 return (X >>> n) | (Xl << (32 - n))
13916}
13917
13918function Ch (x, y, z) {
13919 return ((x & y) ^ ((~x) & z))
13920}
13921
13922function Maj (x, y, z) {
13923 return ((x & y) ^ (x & z) ^ (y & z))
13924}
13925
13926Sha512.prototype._update = function (M) {
13927 var W = this._w
13928
13929 var a = this._a | 0
13930 var b = this._b | 0
13931 var c = this._c | 0
13932 var d = this._d | 0
13933 var e = this._e | 0
13934 var f = this._f | 0
13935 var g = this._g | 0
13936 var h = this._h | 0
13937
13938 var al = this._al | 0
13939 var bl = this._bl | 0
13940 var cl = this._cl | 0
13941 var dl = this._dl | 0
13942 var el = this._el | 0
13943 var fl = this._fl | 0
13944 var gl = this._gl | 0
13945 var hl = this._hl | 0
13946
13947 var i = 0, j = 0
13948 var Wi, Wil
13949 function calcW () {
13950 var x = W[j - 15 * 2]
13951 var xl = W[j - 15 * 2 + 1]
13952 var gamma0 = S(x, xl, 1) ^ S(x, xl, 8) ^ (x >>> 7)
13953 var gamma0l = S(xl, x, 1) ^ S(xl, x, 8) ^ S(xl, x, 7)
13954
13955 x = W[j - 2 * 2]
13956 xl = W[j - 2 * 2 + 1]
13957 var gamma1 = S(x, xl, 19) ^ S(xl, x, 29) ^ (x >>> 6)
13958 var gamma1l = S(xl, x, 19) ^ S(x, xl, 29) ^ S(xl, x, 6)
13959
13960 // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]
13961 var Wi7 = W[j - 7 * 2]
13962 var Wi7l = W[j - 7 * 2 + 1]
13963
13964 var Wi16 = W[j - 16 * 2]
13965 var Wi16l = W[j - 16 * 2 + 1]
13966
13967 Wil = gamma0l + Wi7l
13968 Wi = gamma0 + Wi7 + ((Wil >>> 0) < (gamma0l >>> 0) ? 1 : 0)
13969 Wil = Wil + gamma1l
13970 Wi = Wi + gamma1 + ((Wil >>> 0) < (gamma1l >>> 0) ? 1 : 0)
13971 Wil = Wil + Wi16l
13972 Wi = Wi + Wi16 + ((Wil >>> 0) < (Wi16l >>> 0) ? 1 : 0)
13973 }
13974
13975 function loop () {
13976 W[j] = Wi
13977 W[j + 1] = Wil
13978
13979 var maj = Maj(a, b, c)
13980 var majl = Maj(al, bl, cl)
13981
13982 var sigma0h = S(a, al, 28) ^ S(al, a, 2) ^ S(al, a, 7)
13983 var sigma0l = S(al, a, 28) ^ S(a, al, 2) ^ S(a, al, 7)
13984 var sigma1h = S(e, el, 14) ^ S(e, el, 18) ^ S(el, e, 9)
13985 var sigma1l = S(el, e, 14) ^ S(el, e, 18) ^ S(e, el, 9)
13986
13987 // t1 = h + sigma1 + ch + K[i] + W[i]
13988 var Ki = K[j]
13989 var Kil = K[j + 1]
13990
13991 var ch = Ch(e, f, g)
13992 var chl = Ch(el, fl, gl)
13993
13994 var t1l = hl + sigma1l
13995 var t1 = h + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0)
13996 t1l = t1l + chl
13997 t1 = t1 + ch + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0)
13998 t1l = t1l + Kil
13999 t1 = t1 + Ki + ((t1l >>> 0) < (Kil >>> 0) ? 1 : 0)
14000 t1l = t1l + Wil
14001 t1 = t1 + Wi + ((t1l >>> 0) < (Wil >>> 0) ? 1 : 0)
14002
14003 // t2 = sigma0 + maj
14004 var t2l = sigma0l + majl
14005 var t2 = sigma0h + maj + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0)
14006
14007 h = g
14008 hl = gl
14009 g = f
14010 gl = fl
14011 f = e
14012 fl = el
14013 el = (dl + t1l) | 0
14014 e = (d + t1 + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0
14015 d = c
14016 dl = cl
14017 c = b
14018 cl = bl
14019 b = a
14020 bl = al
14021 al = (t1l + t2l) | 0
14022 a = (t1 + t2 + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0
14023
14024 i++
14025 j += 2
14026 }
14027
14028 while (i < 16) {
14029 Wi = M.readInt32BE(j * 4)
14030 Wil = M.readInt32BE(j * 4 + 4)
14031
14032 loop()
14033 }
14034
14035 while (i < 80) {
14036 calcW()
14037 loop()
14038 }
14039
14040 this._al = (this._al + al) | 0
14041 this._bl = (this._bl + bl) | 0
14042 this._cl = (this._cl + cl) | 0
14043 this._dl = (this._dl + dl) | 0
14044 this._el = (this._el + el) | 0
14045 this._fl = (this._fl + fl) | 0
14046 this._gl = (this._gl + gl) | 0
14047 this._hl = (this._hl + hl) | 0
14048
14049 this._a = (this._a + a + ((this._al >>> 0) < (al >>> 0) ? 1 : 0)) | 0
14050 this._b = (this._b + b + ((this._bl >>> 0) < (bl >>> 0) ? 1 : 0)) | 0
14051 this._c = (this._c + c + ((this._cl >>> 0) < (cl >>> 0) ? 1 : 0)) | 0
14052 this._d = (this._d + d + ((this._dl >>> 0) < (dl >>> 0) ? 1 : 0)) | 0
14053 this._e = (this._e + e + ((this._el >>> 0) < (el >>> 0) ? 1 : 0)) | 0
14054 this._f = (this._f + f + ((this._fl >>> 0) < (fl >>> 0) ? 1 : 0)) | 0
14055 this._g = (this._g + g + ((this._gl >>> 0) < (gl >>> 0) ? 1 : 0)) | 0
14056 this._h = (this._h + h + ((this._hl >>> 0) < (hl >>> 0) ? 1 : 0)) | 0
14057}
14058
14059Sha512.prototype._hash = function () {
14060 var H = new Buffer(64)
14061
14062 function writeInt64BE (h, l, offset) {
14063 H.writeInt32BE(h, offset)
14064 H.writeInt32BE(l, offset + 4)
14065 }
14066
14067 writeInt64BE(this._a, this._al, 0)
14068 writeInt64BE(this._b, this._bl, 8)
14069 writeInt64BE(this._c, this._cl, 16)
14070 writeInt64BE(this._d, this._dl, 24)
14071 writeInt64BE(this._e, this._el, 32)
14072 writeInt64BE(this._f, this._fl, 40)
14073 writeInt64BE(this._g, this._gl, 48)
14074 writeInt64BE(this._h, this._hl, 56)
14075
14076 return H
14077}
14078
14079module.exports = Sha512
14080
14081}).call(this,require("buffer").Buffer)
14082},{"./hash":37,"buffer":7,"inherits":35}],45:[function(require,module,exports){
14083(function (Buffer){
14084'use strict';
14085var createHash = require('create-hash/browser');
14086var inherits = require('inherits')
14087
14088var Transform = require('stream').Transform
14089
14090var ZEROS = new Buffer(128)
14091ZEROS.fill(0)
14092
14093function Hmac(alg, key) {
14094 Transform.call(this)
14095
14096 if (typeof key === 'string') {
14097 key = new Buffer(key)
14098 }
14099
14100 var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64
14101
14102 this._alg = alg
14103 this._key = key
14104
14105 if (key.length > blocksize) {
14106 key = createHash(alg).update(key).digest()
14107
14108 } else if (key.length < blocksize) {
14109 key = Buffer.concat([key, ZEROS], blocksize)
14110 }
14111
14112 var ipad = this._ipad = new Buffer(blocksize)
14113 var opad = this._opad = new Buffer(blocksize)
14114
14115 for (var i = 0; i < blocksize; i++) {
14116 ipad[i] = key[i] ^ 0x36
14117 opad[i] = key[i] ^ 0x5C
14118 }
14119
14120 this._hash = createHash(alg).update(ipad)
14121}
14122
14123inherits(Hmac, Transform)
14124
14125Hmac.prototype.update = function (data, enc) {
14126 this._hash.update(data, enc)
14127
14128 return this
14129}
14130
14131Hmac.prototype._transform = function (data, _, next) {
14132 this._hash.update(data)
14133
14134 next()
14135}
14136
14137Hmac.prototype._flush = function (next) {
14138 this.push(this.digest())
14139
14140 next()
14141}
14142
14143Hmac.prototype.digest = function (enc) {
14144 var h = this._hash.digest()
14145
14146 return createHash(this._alg).update(this._opad).update(h).digest(enc)
14147}
14148
14149module.exports = function createHmac(alg, key) {
14150 return new Hmac(alg, key)
14151}
14152
14153}).call(this,require("buffer").Buffer)
14154},{"buffer":7,"create-hash/browser":32,"inherits":46,"stream":26}],46:[function(require,module,exports){
14155arguments[4][12][0].apply(exports,arguments)
14156},{"dup":12}],47:[function(require,module,exports){
14157var assert = require('assert')
14158var BigInteger = require('bigi')
14159
14160var Point = require('./point')
14161
14162function Curve(p, a, b, Gx, Gy, n, h) {
14163 this.p = p
14164 this.a = a
14165 this.b = b
14166 this.G = Point.fromAffine(this, Gx, Gy)
14167 this.n = n
14168 this.h = h
14169
14170 this.infinity = new Point(this, null, null, BigInteger.ZERO)
14171
14172 // result caching
14173 this.pOverFour = p.add(BigInteger.ONE).shiftRight(2)
14174}
14175
14176Curve.prototype.pointFromX = function(isOdd, x) {
14177 var alpha = x.pow(3).add(this.a.multiply(x)).add(this.b).mod(this.p)
14178 var beta = alpha.modPow(this.pOverFour, this.p) // XXX: not compatible with all curves
14179
14180 var y = beta
14181 if (beta.isEven() ^ !isOdd) {
14182 y = this.p.subtract(y) // -y % p
14183 }
14184
14185 return Point.fromAffine(this, x, y)
14186}
14187
14188Curve.prototype.isInfinity = function(Q) {
14189 if (Q === this.infinity) return true
14190
14191 return Q.z.signum() === 0 && Q.y.signum() !== 0
14192}
14193
14194Curve.prototype.isOnCurve = function(Q) {
14195 if (this.isInfinity(Q)) return true
14196
14197 var x = Q.affineX
14198 var y = Q.affineY
14199 var a = this.a
14200 var b = this.b
14201 var p = this.p
14202
14203 // Check that xQ and yQ are integers in the interval [0, p - 1]
14204 if (x.signum() < 0 || x.compareTo(p) >= 0) return false
14205 if (y.signum() < 0 || y.compareTo(p) >= 0) return false
14206
14207 // and check that y^2 = x^3 + ax + b (mod p)
14208 var lhs = y.square().mod(p)
14209 var rhs = x.pow(3).add(a.multiply(x)).add(b).mod(p)
14210 return lhs.equals(rhs)
14211}
14212
14213/**
14214 * Validate an elliptic curve point.
14215 *
14216 * See SEC 1, section 3.2.2.1: Elliptic Curve Public Key Validation Primitive
14217 */
14218Curve.prototype.validate = function(Q) {
14219 // Check Q != O
14220 assert(!this.isInfinity(Q), 'Point is at infinity')
14221 assert(this.isOnCurve(Q), 'Point is not on the curve')
14222
14223 // Check nQ = O (where Q is a scalar multiple of G)
14224 var nQ = Q.multiply(this.n)
14225 assert(this.isInfinity(nQ), 'Point is not a scalar multiple of G')
14226
14227 return true
14228}
14229
14230module.exports = Curve
14231
14232},{"./point":51,"assert":5,"bigi":3}],48:[function(require,module,exports){
14233module.exports={
14234 "secp128r1": {
14235 "p": "fffffffdffffffffffffffffffffffff",
14236 "a": "fffffffdfffffffffffffffffffffffc",
14237 "b": "e87579c11079f43dd824993c2cee5ed3",
14238 "n": "fffffffe0000000075a30d1b9038a115",
14239 "h": "01",
14240 "Gx": "161ff7528b899b2d0c28607ca52c5b86",
14241 "Gy": "cf5ac8395bafeb13c02da292dded7a83"
14242 },
14243 "secp160k1": {
14244 "p": "fffffffffffffffffffffffffffffffeffffac73",
14245 "a": "00",
14246 "b": "07",
14247 "n": "0100000000000000000001b8fa16dfab9aca16b6b3",
14248 "h": "01",
14249 "Gx": "3b4c382ce37aa192a4019e763036f4f5dd4d7ebb",
14250 "Gy": "938cf935318fdced6bc28286531733c3f03c4fee"
14251 },
14252 "secp160r1": {
14253 "p": "ffffffffffffffffffffffffffffffff7fffffff",
14254 "a": "ffffffffffffffffffffffffffffffff7ffffffc",
14255 "b": "1c97befc54bd7a8b65acf89f81d4d4adc565fa45",
14256 "n": "0100000000000000000001f4c8f927aed3ca752257",
14257 "h": "01",
14258 "Gx": "4a96b5688ef573284664698968c38bb913cbfc82",
14259 "Gy": "23a628553168947d59dcc912042351377ac5fb32"
14260 },
14261 "secp192k1": {
14262 "p": "fffffffffffffffffffffffffffffffffffffffeffffee37",
14263 "a": "00",
14264 "b": "03",
14265 "n": "fffffffffffffffffffffffe26f2fc170f69466a74defd8d",
14266 "h": "01",
14267 "Gx": "db4ff10ec057e9ae26b07d0280b7f4341da5d1b1eae06c7d",
14268 "Gy": "9b2f2f6d9c5628a7844163d015be86344082aa88d95e2f9d"
14269 },
14270 "secp192r1": {
14271 "p": "fffffffffffffffffffffffffffffffeffffffffffffffff",
14272 "a": "fffffffffffffffffffffffffffffffefffffffffffffffc",
14273 "b": "64210519e59c80e70fa7e9ab72243049feb8deecc146b9b1",
14274 "n": "ffffffffffffffffffffffff99def836146bc9b1b4d22831",
14275 "h": "01",
14276 "Gx": "188da80eb03090f67cbf20eb43a18800f4ff0afd82ff1012",
14277 "Gy": "07192b95ffc8da78631011ed6b24cdd573f977a11e794811"
14278 },
14279 "secp256k1": {
14280 "p": "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f",
14281 "a": "00",
14282 "b": "07",
14283 "n": "fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141",
14284 "h": "01",
14285 "Gx": "79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
14286 "Gy": "483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8"
14287 },
14288 "secp256r1": {
14289 "p": "ffffffff00000001000000000000000000000000ffffffffffffffffffffffff",
14290 "a": "ffffffff00000001000000000000000000000000fffffffffffffffffffffffc",
14291 "b": "5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b",
14292 "n": "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551",
14293 "h": "01",
14294 "Gx": "6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
14295 "Gy": "4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5"
14296 }
14297}
14298
14299},{}],49:[function(require,module,exports){
14300var Point = require('./point')
14301var Curve = require('./curve')
14302
14303var getCurveByName = require('./names')
14304
14305module.exports = {
14306 Curve: Curve,
14307 Point: Point,
14308 getCurveByName: getCurveByName
14309}
14310
14311},{"./curve":47,"./names":50,"./point":51}],50:[function(require,module,exports){
14312var BigInteger = require('bigi')
14313
14314var curves = require('./curves')
14315var Curve = require('./curve')
14316
14317function getCurveByName(name) {
14318 var curve = curves[name]
14319 if (!curve) return null
14320
14321 var p = new BigInteger(curve.p, 16)
14322 var a = new BigInteger(curve.a, 16)
14323 var b = new BigInteger(curve.b, 16)
14324 var n = new BigInteger(curve.n, 16)
14325 var h = new BigInteger(curve.h, 16)
14326 var Gx = new BigInteger(curve.Gx, 16)
14327 var Gy = new BigInteger(curve.Gy, 16)
14328
14329 return new Curve(p, a, b, Gx, Gy, n, h)
14330}
14331
14332module.exports = getCurveByName
14333
14334},{"./curve":47,"./curves":48,"bigi":3}],51:[function(require,module,exports){
14335(function (Buffer){
14336var assert = require('assert')
14337var BigInteger = require('bigi')
14338
14339var THREE = BigInteger.valueOf(3)
14340
14341function Point(curve, x, y, z) {
14342 assert.notStrictEqual(z, undefined, 'Missing Z coordinate')
14343
14344 this.curve = curve
14345 this.x = x
14346 this.y = y
14347 this.z = z
14348 this._zInv = null
14349
14350 this.compressed = true
14351}
14352
14353Object.defineProperty(Point.prototype, 'zInv', {
14354 get: function() {
14355 if (this._zInv === null) {
14356 this._zInv = this.z.modInverse(this.curve.p)
14357 }
14358
14359 return this._zInv
14360 }
14361})
14362
14363Object.defineProperty(Point.prototype, 'affineX', {
14364 get: function() {
14365 return this.x.multiply(this.zInv).mod(this.curve.p)
14366 }
14367})
14368
14369Object.defineProperty(Point.prototype, 'affineY', {
14370 get: function() {
14371 return this.y.multiply(this.zInv).mod(this.curve.p)
14372 }
14373})
14374
14375Point.fromAffine = function(curve, x, y) {
14376 return new Point(curve, x, y, BigInteger.ONE)
14377}
14378
14379Point.prototype.equals = function(other) {
14380 if (other === this) return true
14381 if (this.curve.isInfinity(this)) return this.curve.isInfinity(other)
14382 if (this.curve.isInfinity(other)) return this.curve.isInfinity(this)
14383
14384 // u = Y2 * Z1 - Y1 * Z2
14385 var u = other.y.multiply(this.z).subtract(this.y.multiply(other.z)).mod(this.curve.p)
14386
14387 if (u.signum() !== 0) return false
14388
14389 // v = X2 * Z1 - X1 * Z2
14390 var v = other.x.multiply(this.z).subtract(this.x.multiply(other.z)).mod(this.curve.p)
14391
14392 return v.signum() === 0
14393}
14394
14395Point.prototype.negate = function() {
14396 var y = this.curve.p.subtract(this.y)
14397
14398 return new Point(this.curve, this.x, y, this.z)
14399}
14400
14401Point.prototype.add = function(b) {
14402 if (this.curve.isInfinity(this)) return b
14403 if (this.curve.isInfinity(b)) return this
14404
14405 var x1 = this.x
14406 var y1 = this.y
14407 var x2 = b.x
14408 var y2 = b.y
14409
14410 // u = Y2 * Z1 - Y1 * Z2
14411 var u = y2.multiply(this.z).subtract(y1.multiply(b.z)).mod(this.curve.p)
14412 // v = X2 * Z1 - X1 * Z2
14413 var v = x2.multiply(this.z).subtract(x1.multiply(b.z)).mod(this.curve.p)
14414
14415 if (v.signum() === 0) {
14416 if (u.signum() === 0) {
14417 return this.twice() // this == b, so double
14418 }
14419
14420 return this.curve.infinity // this = -b, so infinity
14421 }
14422
14423 var v2 = v.square()
14424 var v3 = v2.multiply(v)
14425 var x1v2 = x1.multiply(v2)
14426 var zu2 = u.square().multiply(this.z)
14427
14428 // x3 = v * (z2 * (z1 * u^2 - 2 * x1 * v^2) - v^3)
14429 var x3 = zu2.subtract(x1v2.shiftLeft(1)).multiply(b.z).subtract(v3).multiply(v).mod(this.curve.p)
14430 // y3 = z2 * (3 * x1 * u * v^2 - y1 * v^3 - z1 * u^3) + u * v^3
14431 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)
14432 // z3 = v^3 * z1 * z2
14433 var z3 = v3.multiply(this.z).multiply(b.z).mod(this.curve.p)
14434
14435 return new Point(this.curve, x3, y3, z3)
14436}
14437
14438Point.prototype.twice = function() {
14439 if (this.curve.isInfinity(this)) return this
14440 if (this.y.signum() === 0) return this.curve.infinity
14441
14442 var x1 = this.x
14443 var y1 = this.y
14444
14445 var y1z1 = y1.multiply(this.z)
14446 var y1sqz1 = y1z1.multiply(y1).mod(this.curve.p)
14447 var a = this.curve.a
14448
14449 // w = 3 * x1^2 + a * z1^2
14450 var w = x1.square().multiply(THREE)
14451
14452 if (a.signum() !== 0) {
14453 w = w.add(this.z.square().multiply(a))
14454 }
14455
14456 w = w.mod(this.curve.p)
14457 // x3 = 2 * y1 * z1 * (w^2 - 8 * x1 * y1^2 * z1)
14458 var x3 = w.square().subtract(x1.shiftLeft(3).multiply(y1sqz1)).shiftLeft(1).multiply(y1z1).mod(this.curve.p)
14459 // y3 = 4 * y1^2 * z1 * (3 * w * x1 - 2 * y1^2 * z1) - w^3
14460 var y3 = w.multiply(THREE).multiply(x1).subtract(y1sqz1.shiftLeft(1)).shiftLeft(2).multiply(y1sqz1).subtract(w.pow(3)).mod(this.curve.p)
14461 // z3 = 8 * (y1 * z1)^3
14462 var z3 = y1z1.pow(3).shiftLeft(3).mod(this.curve.p)
14463
14464 return new Point(this.curve, x3, y3, z3)
14465}
14466
14467// Simple NAF (Non-Adjacent Form) multiplication algorithm
14468// TODO: modularize the multiplication algorithm
14469Point.prototype.multiply = function(k) {
14470 if (this.curve.isInfinity(this)) return this
14471 if (k.signum() === 0) return this.curve.infinity
14472
14473 var e = k
14474 var h = e.multiply(THREE)
14475
14476 var neg = this.negate()
14477 var R = this
14478
14479 for (var i = h.bitLength() - 2; i > 0; --i) {
14480 R = R.twice()
14481
14482 var hBit = h.testBit(i)
14483 var eBit = e.testBit(i)
14484
14485 if (hBit != eBit) {
14486 R = R.add(hBit ? this : neg)
14487 }
14488 }
14489
14490 return R
14491}
14492
14493// Compute this*j + x*k (simultaneous multiplication)
14494Point.prototype.multiplyTwo = function(j, x, k) {
14495 var i
14496
14497 if (j.bitLength() > k.bitLength())
14498 i = j.bitLength() - 1
14499 else
14500 i = k.bitLength() - 1
14501
14502 var R = this.curve.infinity
14503 var both = this.add(x)
14504
14505 while (i >= 0) {
14506 R = R.twice()
14507
14508 var jBit = j.testBit(i)
14509 var kBit = k.testBit(i)
14510
14511 if (jBit) {
14512 if (kBit) {
14513 R = R.add(both)
14514
14515 } else {
14516 R = R.add(this)
14517 }
14518
14519 } else {
14520 if (kBit) {
14521 R = R.add(x)
14522 }
14523 }
14524 --i
14525 }
14526
14527 return R
14528}
14529
14530Point.prototype.getEncoded = function(compressed) {
14531 if (compressed == undefined) compressed = this.compressed
14532 if (this.curve.isInfinity(this)) return new Buffer('00', 'hex') // Infinity point encoded is simply '00'
14533
14534 var x = this.affineX
14535 var y = this.affineY
14536
14537 var buffer
14538
14539 // Determine size of q in bytes
14540 var byteLength = Math.floor((this.curve.p.bitLength() + 7) / 8)
14541
14542 // 0x02/0x03 | X
14543 if (compressed) {
14544 buffer = new Buffer(1 + byteLength)
14545 buffer.writeUInt8(y.isEven() ? 0x02 : 0x03, 0)
14546
14547 // 0x04 | X | Y
14548 } else {
14549 buffer = new Buffer(1 + byteLength + byteLength)
14550 buffer.writeUInt8(0x04, 0)
14551
14552 y.toBuffer(byteLength).copy(buffer, 1 + byteLength)
14553 }
14554
14555 x.toBuffer(byteLength).copy(buffer, 1)
14556
14557 return buffer
14558}
14559
14560Point.decodeFrom = function(curve, buffer) {
14561 var type = buffer.readUInt8(0)
14562 var compressed = (type !== 4)
14563
14564 var byteLength = Math.floor((curve.p.bitLength() + 7) / 8)
14565 var x = BigInteger.fromBuffer(buffer.slice(1, 1 + byteLength))
14566
14567 var Q
14568 if (compressed) {
14569 assert.equal(buffer.length, byteLength + 1, 'Invalid sequence length')
14570 assert(type === 0x02 || type === 0x03, 'Invalid sequence tag')
14571
14572 var isOdd = (type === 0x03)
14573 Q = curve.pointFromX(isOdd, x)
14574
14575 } else {
14576 assert.equal(buffer.length, 1 + byteLength + byteLength, 'Invalid sequence length')
14577
14578 var y = BigInteger.fromBuffer(buffer.slice(1 + byteLength))
14579 Q = Point.fromAffine(curve, x, y)
14580 }
14581
14582 Q.compressed = compressed
14583 return Q
14584}
14585
14586Point.prototype.toString = function () {
14587 if (this.curve.isInfinity(this)) return '(INFINITY)'
14588
14589 return '(' + this.affineX.toString() + ',' + this.affineY.toString() + ')'
14590}
14591
14592module.exports = Point
14593
14594}).call(this,require("buffer").Buffer)
14595},{"assert":5,"bigi":3,"buffer":7}],52:[function(require,module,exports){
14596(function (process,global,Buffer){
14597'use strict';
14598
14599var crypto = global.crypto || global.msCrypto
14600if(crypto && crypto.getRandomValues) {
14601 module.exports = randomBytes;
14602} else {
14603 module.exports = oldBrowser;
14604}
14605function randomBytes(size, cb) {
14606 var bytes = new Buffer(size); //in browserify, this is an extended Uint8Array
14607 /* This will not work in older browsers.
14608 * See https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues
14609 */
14610
14611 crypto.getRandomValues(bytes);
14612 if (typeof cb === 'function') {
14613 return process.nextTick(function () {
14614 cb(null, bytes);
14615 });
14616 }
14617 return bytes;
14618}
14619function oldBrowser() {
14620 throw new Error(
14621 'secure random number generation not supported by this browser\n'+
14622 'use chrome, FireFox or Internet Explorer 11'
14623 )
14624}
14625
14626}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer)
14627},{"_process":14,"buffer":7}],53:[function(require,module,exports){
14628(function (Buffer){
14629'use strict';
14630
14631function getFunctionName(fn) {
14632 return fn.name || fn.toString().match(/function (.*?)\s*\(/)[1];
14633}
14634
14635function getTypeTypeName(type) {
14636 if (nativeTypes.Function(type)) {
14637 type = type.toJSON ? type.toJSON() : getFunctionName(type);
14638 }
14639 if (nativeTypes.Object(type)) return JSON.stringify(type);
14640
14641 return type;
14642}
14643
14644function getValueTypeName(value) {
14645 if (nativeTypes.Null(value)) return '';
14646
14647 return getFunctionName(value.constructor);
14648}
14649
14650function tfErrorString(type, value) {
14651 var typeTypeName = getTypeTypeName(type);
14652 var valueTypeName = getValueTypeName(value);
14653
14654 return 'Expected ' + typeTypeName + ', got ' + (valueTypeName && valueTypeName + ' ') + JSON.stringify(value);
14655}
14656
14657function tfPropertyErrorString(type, name, value) {
14658 return tfErrorString('property \"' + name + '\" of type ' + getTypeTypeName(type), value);
14659}
14660
14661var nativeTypes = {
14662 Array: (function (_Array) {
14663 function Array(_x) {
14664 return _Array.apply(this, arguments);
14665 }
14666
14667 Array.toString = function () {
14668 return _Array.toString();
14669 };
14670
14671 return Array;
14672 })(function (value) {
14673 return value !== null && value !== undefined && value.constructor === Array;
14674 }),
14675 Boolean: function Boolean(value) {
14676 return typeof value === 'boolean';
14677 },
14678 Buffer: (function (_Buffer) {
14679 function Buffer(_x2) {
14680 return _Buffer.apply(this, arguments);
14681 }
14682
14683 Buffer.toString = function () {
14684 return _Buffer.toString();
14685 };
14686
14687 return Buffer;
14688 })(function (value) {
14689 return Buffer.isBuffer(value);
14690 }),
14691 Function: function Function(value) {
14692 return typeof value === 'function';
14693 },
14694 Null: function Null(value) {
14695 return value === undefined || value === null;
14696 },
14697 Number: function Number(value) {
14698 return typeof value === 'number';
14699 },
14700 Object: function Object(value) {
14701 return typeof value === 'object';
14702 },
14703 String: function String(value) {
14704 return typeof value === 'string';
14705 },
14706 '': function _() {
14707 return true;
14708 }
14709};
14710
14711function tJSON(type) {
14712 return type && type.toJSON ? type.toJSON() : type;
14713}
14714
14715function sJSON(type) {
14716 var json = tJSON(type);
14717 return nativeTypes.Object(json) ? JSON.stringify(json) : json;
14718}
14719
14720var otherTypes = {
14721 arrayOf: function arrayOf(type) {
14722 function arrayOf(value, strict) {
14723 try {
14724 return nativeTypes.Array(value) && value.every(function (x) {
14725 return typeforce(type, x, strict);
14726 });
14727 } catch (e) {
14728 return false;
14729 }
14730 }
14731 arrayOf.toJSON = function () {
14732 return [tJSON(type)];
14733 };
14734
14735 return arrayOf;
14736 },
14737
14738 maybe: function maybe(type) {
14739 function maybe(value, strict) {
14740 return nativeTypes.Null(value) || typeforce(type, value, strict);
14741 }
14742 maybe.toJSON = function () {
14743 return '?' + sJSON(type);
14744 };
14745
14746 return maybe;
14747 },
14748
14749 object: function object(type) {
14750 function object(value, strict) {
14751 typeforce(nativeTypes.Object, value, strict);
14752
14753 var propertyName, propertyType, propertyValue;
14754
14755 try {
14756 for (propertyName in type) {
14757 propertyType = type[propertyName];
14758 propertyValue = value[propertyName];
14759
14760 typeforce(propertyType, propertyValue, strict);
14761 }
14762 } catch (e) {
14763 throw new TypeError(tfPropertyErrorString(propertyType, propertyName, propertyValue));
14764 }
14765
14766 if (strict) {
14767 for (propertyName in value) {
14768 if (type[propertyName]) continue;
14769
14770 throw new TypeError('Unexpected property "' + propertyName + '"');
14771 }
14772 }
14773
14774 return true;
14775 }
14776 object.toJSON = function () {
14777 return type;
14778 };
14779
14780 return object;
14781 },
14782
14783 oneOf: function oneOf() {
14784 for (var _len = arguments.length, types = Array(_len), _key = 0; _key < _len; _key++) {
14785 types[_key] = arguments[_key];
14786 }
14787
14788 function oneOf(value, strict) {
14789 return types.some(function (type) {
14790 try {
14791 return typeforce(type, value, strict);
14792 } catch (e) {
14793 return false;
14794 }
14795 });
14796 }
14797 oneOf.toJSON = function () {
14798 return types.map(sJSON).join('|');
14799 };
14800
14801 return oneOf;
14802 },
14803
14804 quacksLike: function quacksLike(type) {
14805 function quacksLike(value, strict) {
14806 return type === getValueTypeName(value);
14807 }
14808 quacksLike.toJSON = function () {
14809 return type;
14810 };
14811
14812 return quacksLike;
14813 },
14814
14815 tuple: function tuple() {
14816 for (var _len2 = arguments.length, types = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
14817 types[_key2] = arguments[_key2];
14818 }
14819
14820 function tuple(value, strict) {
14821 return types.every(function (type, i) {
14822 return typeforce(type, value[i], strict);
14823 });
14824 }
14825 tuple.toJSON = function () {
14826 return '(' + types.map(sJSON).join(', ') + ')';
14827 };
14828
14829 return tuple;
14830 },
14831
14832 value: function value(expected) {
14833 function value(actual) {
14834 return actual === expected;
14835 }
14836 value.toJSON = function () {
14837 return expected;
14838 };
14839
14840 return value;
14841 }
14842};
14843
14844function compile(type) {
14845 if (nativeTypes.String(type)) {
14846 if (type[0] === '?') return otherTypes.maybe(compile(type.slice(1)));
14847
14848 return nativeTypes[type] || otherTypes.quacksLike(type);
14849 } else if (type && nativeTypes.Object(type)) {
14850 if (nativeTypes.Array(type)) return otherTypes.arrayOf(compile(type[0]));
14851
14852 var compiled = {};
14853
14854 for (var propertyName in type) {
14855 compiled[propertyName] = compile(type[propertyName]);
14856 }
14857
14858 return otherTypes.object(compiled);
14859 } else if (nativeTypes.Function(type)) {
14860 return type;
14861 }
14862
14863 return otherTypes.value(type);
14864}
14865
14866function typeforce(_x3, _x4, _x5) {
14867 var _again = true;
14868
14869 _function: while (_again) {
14870 var type = _x3,
14871 value = _x4,
14872 strict = _x5;
14873 _again = false;
14874
14875 if (nativeTypes.Function(type)) {
14876 if (type(value, strict)) return true;
14877
14878 throw new TypeError(tfErrorString(type, value));
14879 }
14880
14881 // JIT
14882 _x3 = compile(type);
14883 _x4 = value;
14884 _x5 = strict;
14885 _again = true;
14886 continue _function;
14887 }
14888}
14889
14890// assign all types to typeforce function
14891var typeName;
14892Object.keys(nativeTypes).forEach(function (typeName) {
14893 var nativeType = nativeTypes[typeName];
14894 nativeType.toJSON = function () {
14895 return typeName;
14896 };
14897
14898 typeforce[typeName] = nativeType;
14899});
14900
14901for (typeName in otherTypes) {
14902 typeforce[typeName] = otherTypes[typeName];
14903}
14904
14905module.exports = typeforce;
14906module.exports.compile = compile;
14907}).call(this,require("buffer").Buffer)
14908},{"buffer":7}],54:[function(require,module,exports){
14909(function (Buffer){
14910var assert = require('assert')
14911var base58check = require('bs58check')
14912var typeForce = require('typeforce')
14913var networks = require('./networks')
14914var scripts = require('./scripts')
14915
14916function findScriptTypeByVersion (version) {
14917 for (var networkName in networks) {
14918 var network = networks[networkName]
14919
14920 if (version === network.pubKeyHash) return 'pubkeyhash'
14921 if (version === network.scriptHash) return 'scripthash'
14922 }
14923}
14924
14925function Address (hash, version) {
14926 typeForce('Buffer', hash)
14927
14928 assert.strictEqual(hash.length, 20, 'Invalid hash length')
14929 assert.strictEqual(version & 0xff, version, 'Invalid version byte')
14930
14931 this.hash = hash
14932 this.version = version
14933}
14934
14935Address.fromBase58Check = function (string) {
14936 var payload = base58check.decode(string)
14937 var version = payload.readUInt8(0)
14938 var hash = payload.slice(1)
14939
14940 return new Address(hash, version)
14941}
14942
14943Address.fromOutputScript = function (script, network) {
14944 network = network || networks.bitcoin
14945
14946 if (scripts.isPubKeyHashOutput(script)) return new Address(script.chunks[2], network.pubKeyHash)
14947 if (scripts.isScriptHashOutput(script)) return new Address(script.chunks[1], network.scriptHash)
14948
14949 assert(false, script.toASM() + ' has no matching Address')
14950}
14951
14952Address.prototype.toBase58Check = function () {
14953 var payload = new Buffer(21)
14954 payload.writeUInt8(this.version, 0)
14955 this.hash.copy(payload, 1)
14956
14957 return base58check.encode(payload)
14958}
14959
14960Address.prototype.toOutputScript = function () {
14961 var scriptType = findScriptTypeByVersion(this.version)
14962
14963 if (scriptType === 'pubkeyhash') return scripts.pubKeyHashOutput(this.hash)
14964 if (scriptType === 'scripthash') return scripts.scriptHashOutput(this.hash)
14965
14966 assert(false, this.toString() + ' has no matching Script')
14967}
14968
14969Address.prototype.toString = Address.prototype.toBase58Check
14970
14971module.exports = Address
14972
14973}).call(this,require("buffer").Buffer)
14974},{"./networks":66,"./scripts":69,"assert":5,"bs58check":31,"buffer":7,"typeforce":53}],55:[function(require,module,exports){
14975var bs58check = require('bs58check')
14976
14977function decode () {
14978 console.warn('bs58check will be removed in 2.0.0. require("bs58check") instead.')
14979
14980 return bs58check.decode.apply(undefined, arguments)
14981}
14982
14983function encode () {
14984 console.warn('bs58check will be removed in 2.0.0. require("bs58check") instead.')
14985
14986 return bs58check.encode.apply(undefined, arguments)
14987}
14988
14989module.exports = {
14990 decode: decode,
14991 encode: encode
14992}
14993
14994},{"bs58check":31}],56:[function(require,module,exports){
14995(function (Buffer){
14996var assert = require('assert')
14997var bufferutils = require('./bufferutils')
14998var crypto = require('./crypto')
14999
15000var Transaction = require('./transaction')
15001
15002function Block () {
15003 this.version = 1
15004 this.prevHash = null
15005 this.merkleRoot = null
15006 this.timestamp = 0
15007 this.bits = 0
15008 this.nonce = 0
15009}
15010
15011Block.fromBuffer = function (buffer) {
15012 assert(buffer.length >= 80, 'Buffer too small (< 80 bytes)')
15013
15014 var offset = 0
15015 function readSlice (n) {
15016 offset += n
15017 return buffer.slice(offset - n, offset)
15018 }
15019
15020 function readUInt32 () {
15021 var i = buffer.readUInt32LE(offset)
15022 offset += 4
15023 return i
15024 }
15025
15026 var block = new Block()
15027 block.version = readUInt32()
15028 block.prevHash = readSlice(32)
15029 block.merkleRoot = readSlice(32)
15030 block.timestamp = readUInt32()
15031 block.bits = readUInt32()
15032 block.nonce = readUInt32()
15033
15034 if (buffer.length === 80) return block
15035
15036 function readVarInt () {
15037 var vi = bufferutils.readVarInt(buffer, offset)
15038 offset += vi.size
15039 return vi.number
15040 }
15041
15042 // FIXME: poor performance
15043 function readTransaction () {
15044 var tx = Transaction.fromBuffer(buffer.slice(offset), true)
15045
15046 offset += tx.toBuffer().length
15047 return tx
15048 }
15049
15050 var nTransactions = readVarInt()
15051 block.transactions = []
15052
15053 for (var i = 0; i < nTransactions; ++i) {
15054 var tx = readTransaction()
15055 block.transactions.push(tx)
15056 }
15057
15058 return block
15059}
15060
15061Block.fromHex = function (hex) {
15062 return Block.fromBuffer(new Buffer(hex, 'hex'))
15063}
15064
15065Block.prototype.getHash = function () {
15066 return crypto.hash256(this.toBuffer(true))
15067}
15068
15069Block.prototype.getId = function () {
15070 return bufferutils.reverse(this.getHash()).toString('hex')
15071}
15072
15073Block.prototype.getUTCDate = function () {
15074 var date = new Date(0) // epoch
15075 date.setUTCSeconds(this.timestamp)
15076
15077 return date
15078}
15079
15080Block.prototype.toBuffer = function (headersOnly) {
15081 var buffer = new Buffer(80)
15082
15083 var offset = 0
15084 function writeSlice (slice) {
15085 slice.copy(buffer, offset)
15086 offset += slice.length
15087 }
15088
15089 function writeUInt32 (i) {
15090 buffer.writeUInt32LE(i, offset)
15091 offset += 4
15092 }
15093
15094 writeUInt32(this.version)
15095 writeSlice(this.prevHash)
15096 writeSlice(this.merkleRoot)
15097 writeUInt32(this.timestamp)
15098 writeUInt32(this.bits)
15099 writeUInt32(this.nonce)
15100
15101 if (headersOnly || !this.transactions) return buffer
15102
15103 var txLenBuffer = bufferutils.varIntBuffer(this.transactions.length)
15104 var txBuffers = this.transactions.map(function (tx) {
15105 return tx.toBuffer()
15106 })
15107
15108 return Buffer.concat([buffer, txLenBuffer].concat(txBuffers))
15109}
15110
15111Block.prototype.toHex = function (headersOnly) {
15112 return this.toBuffer(headersOnly).toString('hex')
15113}
15114
15115module.exports = Block
15116
15117}).call(this,require("buffer").Buffer)
15118},{"./bufferutils":57,"./crypto":58,"./transaction":70,"assert":5,"buffer":7}],57:[function(require,module,exports){
15119(function (Buffer){
15120var assert = require('assert')
15121var opcodes = require('./opcodes')
15122
15123// https://github.com/feross/buffer/blob/master/index.js#L1127
15124function verifuint (value, max) {
15125 assert(typeof value === 'number', 'cannot write a non-number as a number')
15126 assert(value >= 0, 'specified a negative value for writing an unsigned value')
15127 assert(value <= max, 'value is larger than maximum value for type')
15128 assert(Math.floor(value) === value, 'value has a fractional component')
15129}
15130
15131function pushDataSize (i) {
15132 return i < opcodes.OP_PUSHDATA1 ? 1
15133 : i < 0xff ? 2
15134 : i < 0xffff ? 3
15135 : 5
15136}
15137
15138function readPushDataInt (buffer, offset) {
15139 var opcode = buffer.readUInt8(offset)
15140 var number, size
15141
15142 // ~6 bit
15143 if (opcode < opcodes.OP_PUSHDATA1) {
15144 number = opcode
15145 size = 1
15146
15147 // 8 bit
15148 } else if (opcode === opcodes.OP_PUSHDATA1) {
15149 if (offset + 2 > buffer.length) return null
15150 number = buffer.readUInt8(offset + 1)
15151 size = 2
15152
15153 // 16 bit
15154 } else if (opcode === opcodes.OP_PUSHDATA2) {
15155 if (offset + 3 > buffer.length) return null
15156 number = buffer.readUInt16LE(offset + 1)
15157 size = 3
15158
15159 // 32 bit
15160 } else {
15161 if (offset + 5 > buffer.length) return null
15162 assert.equal(opcode, opcodes.OP_PUSHDATA4, 'Unexpected opcode')
15163
15164 number = buffer.readUInt32LE(offset + 1)
15165 size = 5
15166 }
15167
15168 return {
15169 opcode: opcode,
15170 number: number,
15171 size: size
15172 }
15173}
15174
15175function readUInt64LE (buffer, offset) {
15176 var a = buffer.readUInt32LE(offset)
15177 var b = buffer.readUInt32LE(offset + 4)
15178 b *= 0x100000000
15179
15180 verifuint(b + a, 0x001fffffffffffff)
15181
15182 return b + a
15183}
15184
15185function readVarInt (buffer, offset) {
15186 var t = buffer.readUInt8(offset)
15187 var number, size
15188
15189 // 8 bit
15190 if (t < 253) {
15191 number = t
15192 size = 1
15193
15194 // 16 bit
15195 } else if (t < 254) {
15196 number = buffer.readUInt16LE(offset + 1)
15197 size = 3
15198
15199 // 32 bit
15200 } else if (t < 255) {
15201 number = buffer.readUInt32LE(offset + 1)
15202 size = 5
15203
15204 // 64 bit
15205 } else {
15206 number = readUInt64LE(buffer, offset + 1)
15207 size = 9
15208 }
15209
15210 return {
15211 number: number,
15212 size: size
15213 }
15214}
15215
15216function writePushDataInt (buffer, number, offset) {
15217 var size = pushDataSize(number)
15218
15219 // ~6 bit
15220 if (size === 1) {
15221 buffer.writeUInt8(number, offset)
15222
15223 // 8 bit
15224 } else if (size === 2) {
15225 buffer.writeUInt8(opcodes.OP_PUSHDATA1, offset)
15226 buffer.writeUInt8(number, offset + 1)
15227
15228 // 16 bit
15229 } else if (size === 3) {
15230 buffer.writeUInt8(opcodes.OP_PUSHDATA2, offset)
15231 buffer.writeUInt16LE(number, offset + 1)
15232
15233 // 32 bit
15234 } else {
15235 buffer.writeUInt8(opcodes.OP_PUSHDATA4, offset)
15236 buffer.writeUInt32LE(number, offset + 1)
15237 }
15238
15239 return size
15240}
15241
15242function writeUInt64LE (buffer, value, offset) {
15243 verifuint(value, 0x001fffffffffffff)
15244
15245 buffer.writeInt32LE(value & -1, offset)
15246 buffer.writeUInt32LE(Math.floor(value / 0x100000000), offset + 4)
15247}
15248
15249function varIntSize (i) {
15250 return i < 253 ? 1
15251 : i < 0x10000 ? 3
15252 : i < 0x100000000 ? 5
15253 : 9
15254}
15255
15256function writeVarInt (buffer, number, offset) {
15257 var size = varIntSize(number)
15258
15259 // 8 bit
15260 if (size === 1) {
15261 buffer.writeUInt8(number, offset)
15262
15263 // 16 bit
15264 } else if (size === 3) {
15265 buffer.writeUInt8(253, offset)
15266 buffer.writeUInt16LE(number, offset + 1)
15267
15268 // 32 bit
15269 } else if (size === 5) {
15270 buffer.writeUInt8(254, offset)
15271 buffer.writeUInt32LE(number, offset + 1)
15272
15273 // 64 bit
15274 } else {
15275 buffer.writeUInt8(255, offset)
15276 writeUInt64LE(buffer, number, offset + 1)
15277 }
15278
15279 return size
15280}
15281
15282function varIntBuffer (i) {
15283 var size = varIntSize(i)
15284 var buffer = new Buffer(size)
15285 writeVarInt(buffer, i, 0)
15286
15287 return buffer
15288}
15289
15290function reverse (buffer) {
15291 var buffer2 = new Buffer(buffer)
15292 Array.prototype.reverse.call(buffer2)
15293 return buffer2
15294}
15295
15296module.exports = {
15297 pushDataSize: pushDataSize,
15298 readPushDataInt: readPushDataInt,
15299 readUInt64LE: readUInt64LE,
15300 readVarInt: readVarInt,
15301 reverse: reverse,
15302 varIntBuffer: varIntBuffer,
15303 varIntSize: varIntSize,
15304 writePushDataInt: writePushDataInt,
15305 writeUInt64LE: writeUInt64LE,
15306 writeVarInt: writeVarInt
15307}
15308
15309}).call(this,require("buffer").Buffer)
15310},{"./opcodes":67,"assert":5,"buffer":7}],58:[function(require,module,exports){
15311var createHash = require('create-hash')
15312
15313function hash160 (buffer) {
15314 return ripemd160(sha256(buffer))
15315}
15316
15317function hash256 (buffer) {
15318 return sha256(sha256(buffer))
15319}
15320
15321function ripemd160 (buffer) {
15322 return createHash('rmd160').update(buffer).digest()
15323}
15324
15325function sha1 (buffer) {
15326 return createHash('sha1').update(buffer).digest()
15327}
15328
15329function sha256 (buffer) {
15330 return createHash('sha256').update(buffer).digest()
15331}
15332
15333// FIXME: Name not consistent with others
15334var createHmac = require('create-hmac')
15335
15336function HmacSHA256 (buffer, secret) {
15337 console.warn('Hmac* functions are deprecated for removal in 2.0.0, use node crypto instead')
15338 return createHmac('sha256', secret).update(buffer).digest()
15339}
15340
15341function HmacSHA512 (buffer, secret) {
15342 console.warn('Hmac* functions are deprecated for removal in 2.0.0, use node crypto instead')
15343 return createHmac('sha512', secret).update(buffer).digest()
15344}
15345
15346module.exports = {
15347 ripemd160: ripemd160,
15348 sha1: sha1,
15349 sha256: sha256,
15350 hash160: hash160,
15351 hash256: hash256,
15352 HmacSHA256: HmacSHA256,
15353 HmacSHA512: HmacSHA512
15354}
15355
15356},{"create-hash":32,"create-hmac":45}],59:[function(require,module,exports){
15357(function (Buffer){
15358var assert = require('assert')
15359var createHmac = require('create-hmac')
15360var typeForce = require('typeforce')
15361
15362var BigInteger = require('bigi')
15363var ECSignature = require('./ecsignature')
15364
15365var ZERO = new Buffer([0])
15366var ONE = new Buffer([1])
15367
15368// https://tools.ietf.org/html/rfc6979#section-3.2
15369function deterministicGenerateK (curve, hash, d, checkSig) {
15370 typeForce('Buffer', hash)
15371 typeForce('BigInteger', d)
15372
15373 // FIXME: remove/uncomment for 2.0.0
15374 // typeForce('Function', checkSig)
15375
15376 if (typeof checkSig !== 'function') {
15377 console.warn('deterministicGenerateK requires a checkSig callback in 2.0.0, see #337 for more information')
15378
15379 checkSig = function (k) {
15380 var G = curve.G
15381 var n = curve.n
15382 var e = BigInteger.fromBuffer(hash)
15383
15384 var Q = G.multiply(k)
15385
15386 if (curve.isInfinity(Q))
15387 return false
15388
15389 var r = Q.affineX.mod(n)
15390 if (r.signum() === 0)
15391 return false
15392
15393 var s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n)
15394 if (s.signum() === 0)
15395 return false
15396
15397 return true
15398 }
15399 }
15400
15401 // sanity check
15402 assert.equal(hash.length, 32, 'Hash must be 256 bit')
15403
15404 var x = d.toBuffer(32)
15405 var k = new Buffer(32)
15406 var v = new Buffer(32)
15407
15408 // Step A, ignored as hash already provided
15409 // Step B
15410 v.fill(1)
15411
15412 // Step C
15413 k.fill(0)
15414
15415 // Step D
15416 k = createHmac('sha256', k)
15417 .update(v)
15418 .update(ZERO)
15419 .update(x)
15420 .update(hash)
15421 .digest()
15422
15423 // Step E
15424 v = createHmac('sha256', k).update(v).digest()
15425
15426 // Step F
15427 k = createHmac('sha256', k)
15428 .update(v)
15429 .update(ONE)
15430 .update(x)
15431 .update(hash)
15432 .digest()
15433
15434 // Step G
15435 v = createHmac('sha256', k).update(v).digest()
15436
15437 // Step H1/H2a, ignored as tlen === qlen (256 bit)
15438 // Step H2b
15439 v = createHmac('sha256', k).update(v).digest()
15440
15441 var T = BigInteger.fromBuffer(v)
15442
15443 // Step H3, repeat until T is within the interval [1, n - 1] and is suitable for ECDSA
15444 while ((T.signum() <= 0) || (T.compareTo(curve.n) >= 0) || !checkSig(T)) {
15445 k = createHmac('sha256', k)
15446 .update(v)
15447 .update(ZERO)
15448 .digest()
15449
15450 v = createHmac('sha256', k).update(v).digest()
15451
15452 // Step H1/H2a, again, ignored as tlen === qlen (256 bit)
15453 // Step H2b again
15454 v = createHmac('sha256', k).update(v).digest()
15455 T = BigInteger.fromBuffer(v)
15456 }
15457
15458 return T
15459}
15460
15461function sign (curve, hash, d) {
15462 var r, s
15463
15464 var e = BigInteger.fromBuffer(hash)
15465 var n = curve.n
15466 var G = curve.G
15467
15468 deterministicGenerateK(curve, hash, d, function (k) {
15469 var Q = G.multiply(k)
15470
15471 if (curve.isInfinity(Q))
15472 return false
15473
15474 r = Q.affineX.mod(n)
15475 if (r.signum() === 0)
15476 return false
15477
15478 s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n)
15479 if (s.signum() === 0)
15480 return false
15481
15482 return true
15483 })
15484
15485 var N_OVER_TWO = n.shiftRight(1)
15486
15487 // enforce low S values, see bip62: 'low s values in signatures'
15488 if (s.compareTo(N_OVER_TWO) > 0) {
15489 s = n.subtract(s)
15490 }
15491
15492 return new ECSignature(r, s)
15493}
15494
15495function verifyRaw (curve, e, signature, Q) {
15496 var n = curve.n
15497 var G = curve.G
15498
15499 var r = signature.r
15500 var s = signature.s
15501
15502 // 1.4.1 Enforce r and s are both integers in the interval [1, n − 1]
15503 if (r.signum() <= 0 || r.compareTo(n) >= 0) return false
15504 if (s.signum() <= 0 || s.compareTo(n) >= 0) return false
15505
15506 // c = s^-1 mod n
15507 var c = s.modInverse(n)
15508
15509 // 1.4.4 Compute u1 = es^−1 mod n
15510 // u2 = rs^−1 mod n
15511 var u1 = e.multiply(c).mod(n)
15512 var u2 = r.multiply(c).mod(n)
15513
15514 // 1.4.5 Compute R = (xR, yR) = u1G + u2Q
15515 var R = G.multiplyTwo(u1, Q, u2)
15516 var v = R.affineX.mod(n)
15517
15518 // 1.4.5 (cont.) Enforce R is not at infinity
15519 if (curve.isInfinity(R)) return false
15520
15521 // 1.4.8 If v = r, output "valid", and if v != r, output "invalid"
15522 return v.equals(r)
15523}
15524
15525function verify (curve, hash, signature, Q) {
15526 // 1.4.2 H = Hash(M), already done by the user
15527 // 1.4.3 e = H
15528 var e = BigInteger.fromBuffer(hash)
15529
15530 return verifyRaw(curve, e, signature, Q)
15531}
15532
15533/**
15534 * Recover a public key from a signature.
15535 *
15536 * See SEC 1: Elliptic Curve Cryptography, section 4.1.6, "Public
15537 * Key Recovery Operation".
15538 *
15539 * http://www.secg.org/download/aid-780/sec1-v2.pdf
15540 */
15541function recoverPubKey (curve, e, signature, i) {
15542 assert.strictEqual(i & 3, i, 'Recovery param is more than two bits')
15543
15544 var n = curve.n
15545 var G = curve.G
15546
15547 var r = signature.r
15548 var s = signature.s
15549
15550 assert(r.signum() > 0 && r.compareTo(n) < 0, 'Invalid r value')
15551 assert(s.signum() > 0 && s.compareTo(n) < 0, 'Invalid s value')
15552
15553 // A set LSB signifies that the y-coordinate is odd
15554 var isYOdd = i & 1
15555
15556 // The more significant bit specifies whether we should use the
15557 // first or second candidate key.
15558 var isSecondKey = i >> 1
15559
15560 // 1.1 Let x = r + jn
15561 var x = isSecondKey ? r.add(n) : r
15562 var R = curve.pointFromX(isYOdd, x)
15563
15564 // 1.4 Check that nR is at infinity
15565 var nR = R.multiply(n)
15566 assert(curve.isInfinity(nR), 'nR is not a valid curve point')
15567
15568 // Compute -e from e
15569 var eNeg = e.negate().mod(n)
15570
15571 // 1.6.1 Compute Q = r^-1 (sR - eG)
15572 // Q = r^-1 (sR + -eG)
15573 var rInv = r.modInverse(n)
15574
15575 var Q = R.multiplyTwo(s, G, eNeg).multiply(rInv)
15576 curve.validate(Q)
15577
15578 return Q
15579}
15580
15581/**
15582 * Calculate pubkey extraction parameter.
15583 *
15584 * When extracting a pubkey from a signature, we have to
15585 * distinguish four different cases. Rather than putting this
15586 * burden on the verifier, Bitcoin includes a 2-bit value with the
15587 * signature.
15588 *
15589 * This function simply tries all four cases and returns the value
15590 * that resulted in a successful pubkey recovery.
15591 */
15592function calcPubKeyRecoveryParam (curve, e, signature, Q) {
15593 for (var i = 0; i < 4; i++) {
15594 var Qprime = recoverPubKey(curve, e, signature, i)
15595
15596 // 1.6.2 Verify Q
15597 if (Qprime.equals(Q)) {
15598 return i
15599 }
15600 }
15601
15602 throw new Error('Unable to find valid recovery factor')
15603}
15604
15605module.exports = {
15606 calcPubKeyRecoveryParam: calcPubKeyRecoveryParam,
15607 deterministicGenerateK: deterministicGenerateK,
15608 recoverPubKey: recoverPubKey,
15609 sign: sign,
15610 verify: verify,
15611 verifyRaw: verifyRaw
15612}
15613
15614}).call(this,require("buffer").Buffer)
15615},{"./ecsignature":62,"assert":5,"bigi":3,"buffer":7,"create-hmac":45,"typeforce":53}],60:[function(require,module,exports){
15616(function (Buffer){
15617var assert = require('assert')
15618var base58check = require('bs58check')
15619var ecdsa = require('./ecdsa')
15620var networks = require('./networks')
15621var randomBytes = require('randombytes')
15622var typeForce = require('typeforce')
15623
15624var BigInteger = require('bigi')
15625var ECPubKey = require('./ecpubkey')
15626
15627var ecurve = require('ecurve')
15628var secp256k1 = ecurve.getCurveByName('secp256k1')
15629
15630function ECKey (d, compressed) {
15631 assert(d.signum() > 0, 'Private key must be greater than 0')
15632 assert(d.compareTo(ECKey.curve.n) < 0, 'Private key must be less than the curve order')
15633
15634 var Q = ECKey.curve.G.multiply(d)
15635
15636 this.d = d
15637 this.pub = new ECPubKey(Q, compressed)
15638}
15639
15640// Constants
15641ECKey.curve = secp256k1
15642
15643// Static constructors
15644ECKey.fromWIF = function (string) {
15645 var payload = base58check.decode(string)
15646 var compressed = false
15647
15648 // Ignore the version byte
15649 payload = payload.slice(1)
15650
15651 if (payload.length === 33) {
15652 assert.strictEqual(payload[32], 0x01, 'Invalid compression flag')
15653
15654 // Truncate the compression flag
15655 payload = payload.slice(0, -1)
15656 compressed = true
15657 }
15658
15659 assert.equal(payload.length, 32, 'Invalid WIF payload length')
15660
15661 var d = BigInteger.fromBuffer(payload)
15662 return new ECKey(d, compressed)
15663}
15664
15665ECKey.makeRandom = function (compressed, rng) {
15666 rng = rng || randomBytes
15667
15668 var buffer = rng(32)
15669 typeForce('Buffer', buffer)
15670 assert.equal(buffer.length, 32, 'Expected 256-bit Buffer from RNG')
15671
15672 var d = BigInteger.fromBuffer(buffer)
15673 d = d.mod(ECKey.curve.n)
15674
15675 return new ECKey(d, compressed)
15676}
15677
15678// Export functions
15679ECKey.prototype.toWIF = function (network) {
15680 network = network || networks.bitcoin
15681
15682 var bufferLen = this.pub.compressed ? 34 : 33
15683 var buffer = new Buffer(bufferLen)
15684
15685 buffer.writeUInt8(network.wif, 0)
15686 this.d.toBuffer(32).copy(buffer, 1)
15687
15688 if (this.pub.compressed) {
15689 buffer.writeUInt8(0x01, 33)
15690 }
15691
15692 return base58check.encode(buffer)
15693}
15694
15695// Operations
15696ECKey.prototype.sign = function (hash) {
15697 return ecdsa.sign(ECKey.curve, hash, this.d)
15698}
15699
15700module.exports = ECKey
15701
15702}).call(this,require("buffer").Buffer)
15703},{"./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){
15704(function (Buffer){
15705var crypto = require('./crypto')
15706var ecdsa = require('./ecdsa')
15707var typeForce = require('typeforce')
15708var networks = require('./networks')
15709
15710var Address = require('./address')
15711
15712var ecurve = require('ecurve')
15713var secp256k1 = ecurve.getCurveByName('secp256k1')
15714
15715function ECPubKey (Q, compressed) {
15716 if (compressed === undefined) {
15717 compressed = true
15718 }
15719
15720 typeForce('Point', Q)
15721 typeForce('Boolean', compressed)
15722
15723 this.compressed = compressed
15724 this.Q = Q
15725}
15726
15727// Constants
15728ECPubKey.curve = secp256k1
15729
15730// Static constructors
15731ECPubKey.fromBuffer = function (buffer) {
15732 var Q = ecurve.Point.decodeFrom(ECPubKey.curve, buffer)
15733 return new ECPubKey(Q, Q.compressed)
15734}
15735
15736ECPubKey.fromHex = function (hex) {
15737 return ECPubKey.fromBuffer(new Buffer(hex, 'hex'))
15738}
15739
15740// Operations
15741ECPubKey.prototype.getAddress = function (network) {
15742 network = network || networks.bitcoin
15743
15744 return new Address(crypto.hash160(this.toBuffer()), network.pubKeyHash)
15745}
15746
15747ECPubKey.prototype.verify = function (hash, signature) {
15748 return ecdsa.verify(ECPubKey.curve, hash, signature, this.Q)
15749}
15750
15751// Export functions
15752ECPubKey.prototype.toBuffer = function () {
15753 return this.Q.getEncoded(this.compressed)
15754}
15755
15756ECPubKey.prototype.toHex = function () {
15757 return this.toBuffer().toString('hex')
15758}
15759
15760module.exports = ECPubKey
15761
15762}).call(this,require("buffer").Buffer)
15763},{"./address":54,"./crypto":58,"./ecdsa":59,"./networks":66,"buffer":7,"ecurve":49,"typeforce":53}],62:[function(require,module,exports){
15764(function (Buffer){
15765var assert = require('assert')
15766var typeForce = require('typeforce')
15767
15768var BigInteger = require('bigi')
15769
15770function ECSignature (r, s) {
15771 typeForce('BigInteger', r)
15772 typeForce('BigInteger', s)
15773
15774 this.r = r
15775 this.s = s
15776}
15777
15778ECSignature.parseCompact = function (buffer) {
15779 assert.equal(buffer.length, 65, 'Invalid signature length')
15780 var i = buffer.readUInt8(0) - 27
15781
15782 // At most 3 bits
15783 assert.equal(i, i & 7, 'Invalid signature parameter')
15784 var compressed = !!(i & 4)
15785
15786 // Recovery param only
15787 i = i & 3
15788
15789 var r = BigInteger.fromBuffer(buffer.slice(1, 33))
15790 var s = BigInteger.fromBuffer(buffer.slice(33))
15791
15792 return {
15793 compressed: compressed,
15794 i: i,
15795 signature: new ECSignature(r, s)
15796 }
15797}
15798
15799ECSignature.fromDER = function (buffer) {
15800 assert.equal(buffer.readUInt8(0), 0x30, 'Not a DER sequence')
15801 assert.equal(buffer.readUInt8(1), buffer.length - 2, 'Invalid sequence length')
15802 assert.equal(buffer.readUInt8(2), 0x02, 'Expected a DER integer')
15803
15804 var rLen = buffer.readUInt8(3)
15805 assert(rLen > 0, 'R length is zero')
15806
15807 var offset = 4 + rLen
15808 assert.equal(buffer.readUInt8(offset), 0x02, 'Expected a DER integer (2)')
15809
15810 var sLen = buffer.readUInt8(offset + 1)
15811 assert(sLen > 0, 'S length is zero')
15812
15813 var rB = buffer.slice(4, offset)
15814 var sB = buffer.slice(offset + 2)
15815 offset += 2 + sLen
15816
15817 if (rLen > 1 && rB.readUInt8(0) === 0x00) {
15818 assert(rB.readUInt8(1) & 0x80, 'R value excessively padded')
15819 }
15820
15821 if (sLen > 1 && sB.readUInt8(0) === 0x00) {
15822 assert(sB.readUInt8(1) & 0x80, 'S value excessively padded')
15823 }
15824
15825 assert.equal(offset, buffer.length, 'Invalid DER encoding')
15826 var r = BigInteger.fromDERInteger(rB)
15827 var s = BigInteger.fromDERInteger(sB)
15828
15829 assert(r.signum() >= 0, 'R value is negative')
15830 assert(s.signum() >= 0, 'S value is negative')
15831
15832 return new ECSignature(r, s)
15833}
15834
15835// BIP62: 1 byte hashType flag (only 0x01, 0x02, 0x03, 0x81, 0x82 and 0x83 are allowed)
15836ECSignature.parseScriptSignature = function (buffer) {
15837 var hashType = buffer.readUInt8(buffer.length - 1)
15838 var hashTypeMod = hashType & ~0x80
15839
15840 assert(hashTypeMod > 0x00 && hashTypeMod < 0x04, 'Invalid hashType ' + hashType)
15841
15842 return {
15843 signature: ECSignature.fromDER(buffer.slice(0, -1)),
15844 hashType: hashType
15845 }
15846}
15847
15848ECSignature.prototype.toCompact = function (i, compressed) {
15849 if (compressed) {
15850 i += 4
15851 }
15852
15853 i += 27
15854
15855 var buffer = new Buffer(65)
15856 buffer.writeUInt8(i, 0)
15857
15858 this.r.toBuffer(32).copy(buffer, 1)
15859 this.s.toBuffer(32).copy(buffer, 33)
15860
15861 return buffer
15862}
15863
15864ECSignature.prototype.toDER = function () {
15865 var rBa = this.r.toDERInteger()
15866 var sBa = this.s.toDERInteger()
15867
15868 var sequence = []
15869
15870 // INTEGER
15871 sequence.push(0x02, rBa.length)
15872 sequence = sequence.concat(rBa)
15873
15874 // INTEGER
15875 sequence.push(0x02, sBa.length)
15876 sequence = sequence.concat(sBa)
15877
15878 // SEQUENCE
15879 sequence.unshift(0x30, sequence.length)
15880
15881 return new Buffer(sequence)
15882}
15883
15884ECSignature.prototype.toScriptSignature = function (hashType) {
15885 var hashTypeMod = hashType & ~0x80
15886 assert(hashTypeMod > 0x00 && hashTypeMod < 0x04, 'Invalid hashType ' + hashType)
15887
15888 var hashTypeBuffer = new Buffer(1)
15889 hashTypeBuffer.writeUInt8(hashType, 0)
15890
15891 return Buffer.concat([this.toDER(), hashTypeBuffer])
15892}
15893
15894module.exports = ECSignature
15895
15896}).call(this,require("buffer").Buffer)
15897},{"assert":5,"bigi":3,"buffer":7,"typeforce":53}],63:[function(require,module,exports){
15898(function (Buffer){
15899var assert = require('assert')
15900var base58check = require('bs58check')
15901var bcrypto = require('./crypto')
15902var createHmac = require('create-hmac')
15903var typeForce = require('typeforce')
15904var networks = require('./networks')
15905
15906var BigInteger = require('bigi')
15907var ECKey = require('./eckey')
15908var ECPubKey = require('./ecpubkey')
15909
15910var ecurve = require('ecurve')
15911var curve = ecurve.getCurveByName('secp256k1')
15912
15913function findBIP32NetworkByVersion (version) {
15914 for (var name in networks) {
15915 var network = networks[name]
15916
15917 if (version === network.bip32.private || version === network.bip32.public) {
15918 return network
15919 }
15920 }
15921
15922 assert(false, 'Could not find network for ' + version.toString(16))
15923}
15924
15925function HDNode (K, chainCode, network) {
15926 network = network || networks.bitcoin
15927
15928 typeForce('Buffer', chainCode)
15929
15930 assert.equal(chainCode.length, 32, 'Expected chainCode length of 32, got ' + chainCode.length)
15931 assert(network.bip32, 'Unknown BIP32 constants for network')
15932
15933 this.chainCode = chainCode
15934 this.depth = 0
15935 this.index = 0
15936 this.parentFingerprint = 0x00000000
15937 this.network = network
15938
15939 if (K instanceof BigInteger) {
15940 this.privKey = new ECKey(K, true)
15941 this.pubKey = this.privKey.pub
15942 } else if (K instanceof ECKey) {
15943 assert(K.pub.compressed, 'ECKey must be compressed')
15944 this.privKey = K
15945 this.pubKey = K.pub
15946 } else if (K instanceof ECPubKey) {
15947 assert(K.compressed, 'ECPubKey must be compressed')
15948 this.pubKey = K
15949 } else {
15950 this.pubKey = new ECPubKey(K, true)
15951 }
15952}
15953
15954HDNode.MASTER_SECRET = new Buffer('Bitcoin seed')
15955HDNode.HIGHEST_BIT = 0x80000000
15956HDNode.LENGTH = 78
15957
15958HDNode.fromSeedBuffer = function (seed, network) {
15959 typeForce('Buffer', seed)
15960
15961 assert(seed.length >= 16, 'Seed should be at least 128 bits')
15962 assert(seed.length <= 64, 'Seed should be at most 512 bits')
15963
15964 var I = createHmac('sha512', HDNode.MASTER_SECRET).update(seed).digest()
15965 var IL = I.slice(0, 32)
15966 var IR = I.slice(32)
15967
15968 // In case IL is 0 or >= n, the master key is invalid
15969 // This is handled by `new ECKey` in the HDNode constructor
15970 var pIL = BigInteger.fromBuffer(IL)
15971
15972 return new HDNode(pIL, IR, network)
15973}
15974
15975HDNode.fromSeedHex = function (hex, network) {
15976 return HDNode.fromSeedBuffer(new Buffer(hex, 'hex'), network)
15977}
15978
15979HDNode.fromBase58 = function (string, network) {
15980 return HDNode.fromBuffer(base58check.decode(string), network, true)
15981}
15982
15983// FIXME: remove in 2.x.y
15984HDNode.fromBuffer = function (buffer, network, __ignoreDeprecation) {
15985 if (!__ignoreDeprecation) {
15986 console.warn('HDNode.fromBuffer() is deprecated for removal in 2.x.y, use fromBase58 instead')
15987 }
15988
15989 assert.strictEqual(buffer.length, HDNode.LENGTH, 'Invalid buffer length')
15990
15991 // 4 byte: version bytes
15992 var version = buffer.readUInt32BE(0)
15993
15994 if (network) {
15995 assert(version === network.bip32.private || version === network.bip32.public, "Network doesn't match")
15996
15997 // auto-detect
15998 } else {
15999 network = findBIP32NetworkByVersion(version)
16000 }
16001
16002 // 1 byte: depth: 0x00 for master nodes, 0x01 for level-1 descendants, ...
16003 var depth = buffer.readUInt8(4)
16004
16005 // 4 bytes: the fingerprint of the parent's key (0x00000000 if master key)
16006 var parentFingerprint = buffer.readUInt32BE(5)
16007 if (depth === 0) {
16008 assert.strictEqual(parentFingerprint, 0x00000000, 'Invalid parent fingerprint')
16009 }
16010
16011 // 4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
16012 // This is encoded in MSB order. (0x00000000 if master key)
16013 var index = buffer.readUInt32BE(9)
16014 assert(depth > 0 || index === 0, 'Invalid index')
16015
16016 // 32 bytes: the chain code
16017 var chainCode = buffer.slice(13, 45)
16018 var data, hd
16019
16020 // 33 bytes: private key data (0x00 + k)
16021 if (version === network.bip32.private) {
16022 assert.strictEqual(buffer.readUInt8(45), 0x00, 'Invalid private key')
16023 data = buffer.slice(46, 78)
16024 var d = BigInteger.fromBuffer(data)
16025 hd = new HDNode(d, chainCode, network)
16026
16027 // 33 bytes: public key data (0x02 + X or 0x03 + X)
16028 } else {
16029 data = buffer.slice(45, 78)
16030 var Q = ecurve.Point.decodeFrom(curve, data)
16031 assert.equal(Q.compressed, true, 'Invalid public key')
16032
16033 // Verify that the X coordinate in the public point corresponds to a point on the curve.
16034 // If not, the extended public key is invalid.
16035 curve.validate(Q)
16036
16037 hd = new HDNode(Q, chainCode, network)
16038 }
16039
16040 hd.depth = depth
16041 hd.index = index
16042 hd.parentFingerprint = parentFingerprint
16043
16044 return hd
16045}
16046
16047// FIXME: remove in 2.x.y
16048HDNode.fromHex = function (hex, network) {
16049 return HDNode.fromBuffer(new Buffer(hex, 'hex'), network)
16050}
16051
16052HDNode.prototype.getIdentifier = function () {
16053 return bcrypto.hash160(this.pubKey.toBuffer())
16054}
16055
16056HDNode.prototype.getFingerprint = function () {
16057 return this.getIdentifier().slice(0, 4)
16058}
16059
16060HDNode.prototype.getAddress = function () {
16061 return this.pubKey.getAddress(this.network)
16062}
16063
16064HDNode.prototype.neutered = function () {
16065 var neutered = new HDNode(this.pubKey.Q, this.chainCode, this.network)
16066 neutered.depth = this.depth
16067 neutered.index = this.index
16068 neutered.parentFingerprint = this.parentFingerprint
16069
16070 return neutered
16071}
16072
16073HDNode.prototype.toBase58 = function (isPrivate) {
16074 return base58check.encode(this.toBuffer(isPrivate, true))
16075}
16076
16077// FIXME: remove in 2.x.y
16078HDNode.prototype.toBuffer = function (isPrivate, __ignoreDeprecation) {
16079 if (isPrivate === undefined) {
16080 isPrivate = !!this.privKey
16081
16082 // FIXME: remove in 2.x.y
16083 } else {
16084 console.warn('isPrivate flag is deprecated, please use the .neutered() method instead')
16085 }
16086
16087 if (!__ignoreDeprecation) {
16088 console.warn('HDNode.toBuffer() is deprecated for removal in 2.x.y, use toBase58 instead')
16089 }
16090
16091 // Version
16092 var version = isPrivate ? this.network.bip32.private : this.network.bip32.public
16093 var buffer = new Buffer(HDNode.LENGTH)
16094
16095 // 4 bytes: version bytes
16096 buffer.writeUInt32BE(version, 0)
16097
16098 // Depth
16099 // 1 byte: depth: 0x00 for master nodes, 0x01 for level-1 descendants, ....
16100 buffer.writeUInt8(this.depth, 4)
16101
16102 // 4 bytes: the fingerprint of the parent's key (0x00000000 if master key)
16103 buffer.writeUInt32BE(this.parentFingerprint, 5)
16104
16105 // 4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
16106 // This is encoded in Big endian. (0x00000000 if master key)
16107 buffer.writeUInt32BE(this.index, 9)
16108
16109 // 32 bytes: the chain code
16110 this.chainCode.copy(buffer, 13)
16111
16112 // 33 bytes: the public key or private key data
16113 if (isPrivate) {
16114 // FIXME: remove in 2.x.y
16115 assert(this.privKey, 'Missing private key')
16116
16117 // 0x00 + k for private keys
16118 buffer.writeUInt8(0, 45)
16119 this.privKey.d.toBuffer(32).copy(buffer, 46)
16120 } else {
16121 // X9.62 encoding for public keys
16122 this.pubKey.toBuffer().copy(buffer, 45)
16123 }
16124
16125 return buffer
16126}
16127
16128// FIXME: remove in 2.x.y
16129HDNode.prototype.toHex = function (isPrivate) {
16130 return this.toBuffer(isPrivate).toString('hex')
16131}
16132
16133// https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#child-key-derivation-ckd-functions
16134HDNode.prototype.derive = function (index) {
16135 var isHardened = index >= HDNode.HIGHEST_BIT
16136 var indexBuffer = new Buffer(4)
16137 indexBuffer.writeUInt32BE(index, 0)
16138
16139 var data
16140
16141 // Hardened child
16142 if (isHardened) {
16143 assert(this.privKey, 'Could not derive hardened child key')
16144
16145 // data = 0x00 || ser256(kpar) || ser32(index)
16146 data = Buffer.concat([
16147 this.privKey.d.toBuffer(33),
16148 indexBuffer
16149 ])
16150
16151 // Normal child
16152 } else {
16153 // data = serP(point(kpar)) || ser32(index)
16154 // = serP(Kpar) || ser32(index)
16155 data = Buffer.concat([
16156 this.pubKey.toBuffer(),
16157 indexBuffer
16158 ])
16159 }
16160
16161 var I = createHmac('sha512', this.chainCode).update(data).digest()
16162 var IL = I.slice(0, 32)
16163 var IR = I.slice(32)
16164
16165 var pIL = BigInteger.fromBuffer(IL)
16166
16167 // In case parse256(IL) >= n, proceed with the next value for i
16168 if (pIL.compareTo(curve.n) >= 0) {
16169 return this.derive(index + 1)
16170 }
16171
16172 // Private parent key -> private child key
16173 var hd
16174 if (this.privKey) {
16175 // ki = parse256(IL) + kpar (mod n)
16176 var ki = pIL.add(this.privKey.d).mod(curve.n)
16177
16178 // In case ki == 0, proceed with the next value for i
16179 if (ki.signum() === 0) {
16180 return this.derive(index + 1)
16181 }
16182
16183 hd = new HDNode(ki, IR, this.network)
16184
16185 // Public parent key -> public child key
16186 } else {
16187 // Ki = point(parse256(IL)) + Kpar
16188 // = G*IL + Kpar
16189 var Ki = curve.G.multiply(pIL).add(this.pubKey.Q)
16190
16191 // In case Ki is the point at infinity, proceed with the next value for i
16192 if (curve.isInfinity(Ki)) {
16193 return this.derive(index + 1)
16194 }
16195
16196 hd = new HDNode(Ki, IR, this.network)
16197 }
16198
16199 hd.depth = this.depth + 1
16200 hd.index = index
16201 hd.parentFingerprint = this.getFingerprint().readUInt32BE(0)
16202
16203 return hd
16204}
16205
16206HDNode.prototype.deriveHardened = function (index) {
16207 // Only derives hardened private keys by default
16208 return this.derive(index + HDNode.HIGHEST_BIT)
16209}
16210
16211HDNode.prototype.toString = HDNode.prototype.toBase58
16212
16213module.exports = HDNode
16214
16215}).call(this,require("buffer").Buffer)
16216},{"./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){
16217module.exports = {
16218 Address: require('./address'),
16219 base58check: require('./base58check'),
16220 Block: require('./block'),
16221 bufferutils: require('./bufferutils'),
16222 crypto: require('./crypto'),
16223 ecdsa: require('./ecdsa'),
16224 ECKey: require('./eckey'),
16225 ECPubKey: require('./ecpubkey'),
16226 ECSignature: require('./ecsignature'),
16227 Message: require('./message'),
16228 opcodes: require('./opcodes'),
16229 HDNode: require('./hdnode'),
16230 Script: require('./script'),
16231 scripts: require('./scripts'),
16232 Transaction: require('./transaction'),
16233 TransactionBuilder: require('./transaction_builder'),
16234 networks: require('./networks'),
16235 Wallet: require('./wallet')
16236}
16237
16238},{"./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){
16239(function (Buffer){
16240var bufferutils = require('./bufferutils')
16241var crypto = require('./crypto')
16242var ecdsa = require('./ecdsa')
16243var networks = require('./networks')
16244
16245var BigInteger = require('bigi')
16246var ECPubKey = require('./ecpubkey')
16247var ECSignature = require('./ecsignature')
16248
16249var ecurve = require('ecurve')
16250var ecparams = ecurve.getCurveByName('secp256k1')
16251
16252function magicHash (message, network) {
16253 var magicPrefix = new Buffer(network.magicPrefix)
16254 var messageBuffer = new Buffer(message)
16255 var lengthBuffer = bufferutils.varIntBuffer(messageBuffer.length)
16256
16257 var buffer = Buffer.concat([magicPrefix, lengthBuffer, messageBuffer])
16258 return crypto.hash256(buffer)
16259}
16260
16261function sign (privKey, message, network) {
16262 network = network || networks.bitcoin
16263
16264 var hash = magicHash(message, network)
16265 var signature = privKey.sign(hash)
16266 var e = BigInteger.fromBuffer(hash)
16267 var i = ecdsa.calcPubKeyRecoveryParam(ecparams, e, signature, privKey.pub.Q)
16268
16269 return signature.toCompact(i, privKey.pub.compressed)
16270}
16271
16272// TODO: network could be implied from address
16273function verify (address, signature, message, network) {
16274 if (!Buffer.isBuffer(signature)) {
16275 signature = new Buffer(signature, 'base64')
16276 }
16277
16278 network = network || networks.bitcoin
16279
16280 var hash = magicHash(message, network)
16281 var parsed = ECSignature.parseCompact(signature)
16282 var e = BigInteger.fromBuffer(hash)
16283 var Q = ecdsa.recoverPubKey(ecparams, e, parsed.signature, parsed.i)
16284
16285 var pubKey = new ECPubKey(Q, parsed.compressed)
16286 return pubKey.getAddress(network).toString() === address.toString()
16287}
16288
16289module.exports = {
16290 magicHash: magicHash,
16291 sign: sign,
16292 verify: verify
16293}
16294
16295}).call(this,require("buffer").Buffer)
16296},{"./bufferutils":57,"./crypto":58,"./ecdsa":59,"./ecpubkey":61,"./ecsignature":62,"./networks":66,"bigi":3,"buffer":7,"ecurve":49}],66:[function(require,module,exports){
16297// https://en.bitcoin.it/wiki/List_of_address_prefixes
16298// Dogecoin BIP32 is a proposed standard: https://bitcointalk.org/index.php?topic=409731
16299
16300var networks = {
16301 bitcoin: {
16302 magicPrefix: '\x18Bitcoin Signed Message:\n',
16303 bip32: {
16304 public: 0x0488b21e,
16305 private: 0x0488ade4
16306 },
16307 pubKeyHash: 0x00,
16308 scriptHash: 0x05,
16309 wif: 0x80,
16310 dustThreshold: 546, // https://github.com/bitcoin/bitcoin/blob/v0.9.2/src/core.h#L151-L162
16311 feePerKb: 10000, // https://github.com/bitcoin/bitcoin/blob/v0.9.2/src/main.cpp#L53
16312 estimateFee: estimateFee('bitcoin')
16313 },
16314 testnet: {
16315 magicPrefix: '\x18Bitcoin Signed Message:\n',
16316 bip32: {
16317 public: 0x043587cf,
16318 private: 0x04358394
16319 },
16320 pubKeyHash: 0x6f,
16321 scriptHash: 0xc4,
16322 wif: 0xef,
16323 dustThreshold: 546,
16324 feePerKb: 10000,
16325 estimateFee: estimateFee('testnet')
16326 },
16327 litecoin: {
16328 magicPrefix: '\x19Litecoin Signed Message:\n',
16329 bip32: {
16330 public: 0x019da462,
16331 private: 0x019d9cfe
16332 },
16333 pubKeyHash: 0x30,
16334 scriptHash: 0x05,
16335 wif: 0xb0,
16336 dustThreshold: 0, // https://github.com/litecoin-project/litecoin/blob/v0.8.7.2/src/main.cpp#L360-L365
16337 dustSoftThreshold: 100000, // https://github.com/litecoin-project/litecoin/blob/v0.8.7.2/src/main.h#L53
16338 feePerKb: 100000, // https://github.com/litecoin-project/litecoin/blob/v0.8.7.2/src/main.cpp#L56
16339 estimateFee: estimateFee('litecoin')
16340 },
16341 dogecoin: {
16342 magicPrefix: '\x19Dogecoin Signed Message:\n',
16343 bip32: {
16344 public: 0x02facafd,
16345 private: 0x02fac398
16346 },
16347 pubKeyHash: 0x1e,
16348 scriptHash: 0x16,
16349 wif: 0x9e,
16350 dustThreshold: 0, // https://github.com/dogecoin/dogecoin/blob/v1.7.1/src/core.h#L155-L160
16351 dustSoftThreshold: 100000000, // https://github.com/dogecoin/dogecoin/blob/v1.7.1/src/main.h#L62
16352 feePerKb: 100000000, // https://github.com/dogecoin/dogecoin/blob/v1.7.1/src/main.cpp#L58
16353 estimateFee: estimateFee('dogecoin')
16354 },
16355 viacoin: {
16356 magicPrefix: '\x18Viacoin Signed Message:\n',
16357 bip32: {
16358 public: 0x0488b21e,
16359 private: 0x0488ade4
16360 },
16361 pubKeyHash: 0x47,
16362 scriptHash: 0x21,
16363 wif: 0xc7,
16364 dustThreshold: 560,
16365 dustSoftThreshold: 100000,
16366 feePerKb: 100000, //
16367 estimateFee: estimateFee('viacoin')
16368 },
16369 viacointestnet: {
16370 magicPrefix: '\x18Viacoin Signed Message:\n',
16371 bip32: {
16372 public: 0x043587cf,
16373 private: 0x04358394
16374 },
16375 pubKeyHash: 0x7f,
16376 scriptHash: 0xc4,
16377 wif: 0xff,
16378 dustThreshold: 560,
16379 dustSoftThreshold: 100000,
16380 feePerKb: 100000,
16381 estimateFee: estimateFee('viacointestnet')
16382 },
16383 gamerscoin: {
16384 magicPrefix: '\x19Gamerscoin Signed Message:\n',
16385 bip32: {
16386 public: 0x019da462,
16387 private: 0x019d9cfe
16388 },
16389 pubKeyHash: 0x26,
16390 scriptHash: 0x05,
16391 wif: 0xA6,
16392 dustThreshold: 0, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L358-L363
16393 dustSoftThreshold: 100000, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L51
16394 feePerKb: 100000, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L54
16395 estimateFee: estimateFee('gamerscoin')
16396 },
16397 jumbucks: {
16398 magicPrefix: '\x19Jumbucks Signed Message:\n',
16399 bip32: {
16400 public: 0x037a689a,
16401 private: 0x037a6460
16402 },
16403 pubKeyHash: 0x2b,
16404 scriptHash: 0x05,
16405 wif: 0xab,
16406 dustThreshold: 0,
16407 dustSoftThreshold: 10000,
16408 feePerKb: 10000,
16409 estimateFee: estimateFee('jumbucks')
16410 },
16411 zetacoin: {
16412 magicPrefix: '\x18Zetacoin Signed Message:\n',
16413 bip32: {
16414 public: 0x0488b21e,
16415 private: 0x0488ade4
16416 },
16417 pubKeyHash: 0x50,
16418 scriptHash: 0x09,
16419 wif: 0xe0,
16420 dustThreshold: 546, // https://github.com/zetacoin/zetacoin/blob/master/src/core.h#L159
16421 feePerKb: 10000, // https://github.com/zetacoin/zetacoin/blob/master/src/main.cpp#L54
16422 estimateFee: estimateFee('zetacoin')
16423 }
16424}
16425
16426function estimateFee (type) {
16427 return function (tx) {
16428 var network = networks[type]
16429 var baseFee = network.feePerKb
16430 var byteSize = tx.toBuffer().length
16431
16432 var fee = baseFee * Math.ceil(byteSize / 1000)
16433 if (network.dustSoftThreshold === undefined) return fee
16434
16435 tx.outs.forEach(function (e) {
16436 if (e.value < network.dustSoftThreshold) {
16437 fee += baseFee
16438 }
16439 })
16440
16441 return fee
16442 }
16443}
16444
16445module.exports = networks
16446
16447},{}],67:[function(require,module,exports){
16448module.exports = {
16449 // push value
16450 OP_FALSE: 0,
16451 OP_0: 0,
16452 OP_PUSHDATA1: 76,
16453 OP_PUSHDATA2: 77,
16454 OP_PUSHDATA4: 78,
16455 OP_1NEGATE: 79,
16456 OP_RESERVED: 80,
16457 OP_1: 81,
16458 OP_TRUE: 81,
16459 OP_2: 82,
16460 OP_3: 83,
16461 OP_4: 84,
16462 OP_5: 85,
16463 OP_6: 86,
16464 OP_7: 87,
16465 OP_8: 88,
16466 OP_9: 89,
16467 OP_10: 90,
16468 OP_11: 91,
16469 OP_12: 92,
16470 OP_13: 93,
16471 OP_14: 94,
16472 OP_15: 95,
16473 OP_16: 96,
16474
16475 // control
16476 OP_NOP: 97,
16477 OP_VER: 98,
16478 OP_IF: 99,
16479 OP_NOTIF: 100,
16480 OP_VERIF: 101,
16481 OP_VERNOTIF: 102,
16482 OP_ELSE: 103,
16483 OP_ENDIF: 104,
16484 OP_VERIFY: 105,
16485 OP_RETURN: 106,
16486
16487 // stack ops
16488 OP_TOALTSTACK: 107,
16489 OP_FROMALTSTACK: 108,
16490 OP_2DROP: 109,
16491 OP_2DUP: 110,
16492 OP_3DUP: 111,
16493 OP_2OVER: 112,
16494 OP_2ROT: 113,
16495 OP_2SWAP: 114,
16496 OP_IFDUP: 115,
16497 OP_DEPTH: 116,
16498 OP_DROP: 117,
16499 OP_DUP: 118,
16500 OP_NIP: 119,
16501 OP_OVER: 120,
16502 OP_PICK: 121,
16503 OP_ROLL: 122,
16504 OP_ROT: 123,
16505 OP_SWAP: 124,
16506 OP_TUCK: 125,
16507
16508 // splice ops
16509 OP_CAT: 126,
16510 OP_SUBSTR: 127,
16511 OP_LEFT: 128,
16512 OP_RIGHT: 129,
16513 OP_SIZE: 130,
16514
16515 // bit logic
16516 OP_INVERT: 131,
16517 OP_AND: 132,
16518 OP_OR: 133,
16519 OP_XOR: 134,
16520 OP_EQUAL: 135,
16521 OP_EQUALVERIFY: 136,
16522 OP_RESERVED1: 137,
16523 OP_RESERVED2: 138,
16524
16525 // numeric
16526 OP_1ADD: 139,
16527 OP_1SUB: 140,
16528 OP_2MUL: 141,
16529 OP_2DIV: 142,
16530 OP_NEGATE: 143,
16531 OP_ABS: 144,
16532 OP_NOT: 145,
16533 OP_0NOTEQUAL: 146,
16534
16535 OP_ADD: 147,
16536 OP_SUB: 148,
16537 OP_MUL: 149,
16538 OP_DIV: 150,
16539 OP_MOD: 151,
16540 OP_LSHIFT: 152,
16541 OP_RSHIFT: 153,
16542
16543 OP_BOOLAND: 154,
16544 OP_BOOLOR: 155,
16545 OP_NUMEQUAL: 156,
16546 OP_NUMEQUALVERIFY: 157,
16547 OP_NUMNOTEQUAL: 158,
16548 OP_LESSTHAN: 159,
16549 OP_GREATERTHAN: 160,
16550 OP_LESSTHANOREQUAL: 161,
16551 OP_GREATERTHANOREQUAL: 162,
16552 OP_MIN: 163,
16553 OP_MAX: 164,
16554
16555 OP_WITHIN: 165,
16556
16557 // crypto
16558 OP_RIPEMD160: 166,
16559 OP_SHA1: 167,
16560 OP_SHA256: 168,
16561 OP_HASH160: 169,
16562 OP_HASH256: 170,
16563 OP_CODESEPARATOR: 171,
16564 OP_CHECKSIG: 172,
16565 OP_CHECKSIGVERIFY: 173,
16566 OP_CHECKMULTISIG: 174,
16567 OP_CHECKMULTISIGVERIFY: 175,
16568
16569 // expansion
16570 OP_NOP1: 176,
16571 OP_NOP2: 177,
16572 OP_NOP3: 178,
16573 OP_NOP4: 179,
16574 OP_NOP5: 180,
16575 OP_NOP6: 181,
16576 OP_NOP7: 182,
16577 OP_NOP8: 183,
16578 OP_NOP9: 184,
16579 OP_NOP10: 185,
16580
16581 // template matching params
16582 OP_PUBKEYHASH: 253,
16583 OP_PUBKEY: 254,
16584 OP_INVALIDOPCODE: 255
16585}
16586
16587},{}],68:[function(require,module,exports){
16588(function (Buffer){
16589var assert = require('assert')
16590var bufferutils = require('./bufferutils')
16591var crypto = require('./crypto')
16592var typeForce = require('typeforce')
16593var opcodes = require('./opcodes')
16594
16595function Script (buffer, chunks) {
16596 typeForce('Buffer', buffer)
16597 typeForce('Array', chunks)
16598
16599 this.buffer = buffer
16600 this.chunks = chunks
16601}
16602
16603Script.fromASM = function (asm) {
16604 var strChunks = asm.split(' ')
16605 var chunks = strChunks.map(function (strChunk) {
16606 // opcode
16607 if (strChunk in opcodes) {
16608 return opcodes[strChunk]
16609
16610 // data chunk
16611 } else {
16612 return new Buffer(strChunk, 'hex')
16613 }
16614 })
16615
16616 return Script.fromChunks(chunks)
16617}
16618
16619Script.fromBuffer = function (buffer) {
16620 var chunks = []
16621 var i = 0
16622
16623 while (i < buffer.length) {
16624 var opcode = buffer.readUInt8(i)
16625
16626 // data chunk
16627 if ((opcode > opcodes.OP_0) && (opcode <= opcodes.OP_PUSHDATA4)) {
16628 var d = bufferutils.readPushDataInt(buffer, i)
16629
16630 // did reading a pushDataInt fail? return non-chunked script
16631 if (d === null) return new Script(buffer, [])
16632 i += d.size
16633
16634 // attempt to read too much data?
16635 if (i + d.number > buffer.length) return new Script(buffer, [])
16636
16637 var data = buffer.slice(i, i + d.number)
16638 i += d.number
16639
16640 chunks.push(data)
16641
16642 // opcode
16643 } else {
16644 chunks.push(opcode)
16645
16646 i += 1
16647 }
16648 }
16649
16650 return new Script(buffer, chunks)
16651}
16652
16653Script.fromChunks = function (chunks) {
16654 typeForce('Array', chunks)
16655
16656 var bufferSize = chunks.reduce(function (accum, chunk) {
16657 // data chunk
16658 if (Buffer.isBuffer(chunk)) {
16659 return accum + bufferutils.pushDataSize(chunk.length) + chunk.length
16660 }
16661
16662 // opcode
16663 return accum + 1
16664 }, 0.0)
16665
16666 var buffer = new Buffer(bufferSize)
16667 var offset = 0
16668
16669 chunks.forEach(function (chunk) {
16670 // data chunk
16671 if (Buffer.isBuffer(chunk)) {
16672 offset += bufferutils.writePushDataInt(buffer, chunk.length, offset)
16673
16674 chunk.copy(buffer, offset)
16675 offset += chunk.length
16676
16677 // opcode
16678 } else {
16679 buffer.writeUInt8(chunk, offset)
16680 offset += 1
16681 }
16682 })
16683
16684 assert.equal(offset, buffer.length, 'Could not decode chunks')
16685 return new Script(buffer, chunks)
16686}
16687
16688Script.fromHex = function (hex) {
16689 return Script.fromBuffer(new Buffer(hex, 'hex'))
16690}
16691
16692Script.EMPTY = Script.fromChunks([])
16693
16694Script.prototype.getHash = function () {
16695 return crypto.hash160(this.buffer)
16696}
16697
16698// FIXME: doesn't work for data chunks, maybe time to use buffertools.compare...
16699Script.prototype.without = function (needle) {
16700 return Script.fromChunks(this.chunks.filter(function (op) {
16701 return op !== needle
16702 }))
16703}
16704
16705var reverseOps = []
16706for (var op in opcodes) {
16707 var code = opcodes[op]
16708 reverseOps[code] = op
16709}
16710
16711Script.prototype.toASM = function () {
16712 return this.chunks.map(function (chunk) {
16713 // data chunk
16714 if (Buffer.isBuffer(chunk)) {
16715 return chunk.toString('hex')
16716
16717 // opcode
16718 } else {
16719 return reverseOps[chunk]
16720 }
16721 }).join(' ')
16722}
16723
16724Script.prototype.toBuffer = function () {
16725 return this.buffer
16726}
16727
16728Script.prototype.toHex = function () {
16729 return this.toBuffer().toString('hex')
16730}
16731
16732module.exports = Script
16733
16734}).call(this,require("buffer").Buffer)
16735},{"./bufferutils":57,"./crypto":58,"./opcodes":67,"assert":5,"buffer":7,"typeforce":53}],69:[function(require,module,exports){
16736(function (Buffer){
16737var assert = require('assert')
16738var ops = require('./opcodes')
16739var typeForce = require('typeforce')
16740
16741var ecurve = require('ecurve')
16742var curve = ecurve.getCurveByName('secp256k1')
16743
16744var ECSignature = require('./ecsignature')
16745var Script = require('./script')
16746
16747function isCanonicalPubKey (buffer) {
16748 if (!Buffer.isBuffer(buffer)) return false
16749
16750 try {
16751 ecurve.Point.decodeFrom(curve, buffer)
16752 } catch (e) {
16753 if (!(e.message.match(/Invalid sequence (length|tag)/)))
16754 throw e
16755
16756 return false
16757 }
16758
16759 return true
16760}
16761
16762function isCanonicalSignature (buffer) {
16763 if (!Buffer.isBuffer(buffer)) return false
16764
16765 try {
16766 ECSignature.parseScriptSignature(buffer)
16767 } catch (e) {
16768 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/))) {
16769 throw e
16770 }
16771
16772 return false
16773 }
16774
16775 return true
16776}
16777
16778function isPubKeyHashInput (script) {
16779 return script.chunks.length === 2 &&
16780 isCanonicalSignature(script.chunks[0]) &&
16781 isCanonicalPubKey(script.chunks[1])
16782}
16783
16784function isPubKeyHashOutput (script) {
16785 return script.chunks.length === 5 &&
16786 script.chunks[0] === ops.OP_DUP &&
16787 script.chunks[1] === ops.OP_HASH160 &&
16788 Buffer.isBuffer(script.chunks[2]) &&
16789 script.chunks[2].length === 20 &&
16790 script.chunks[3] === ops.OP_EQUALVERIFY &&
16791 script.chunks[4] === ops.OP_CHECKSIG
16792}
16793
16794function isPubKeyInput (script) {
16795 return script.chunks.length === 1 &&
16796 isCanonicalSignature(script.chunks[0])
16797}
16798
16799function isPubKeyOutput (script) {
16800 return script.chunks.length === 2 &&
16801 isCanonicalPubKey(script.chunks[0]) &&
16802 script.chunks[1] === ops.OP_CHECKSIG
16803}
16804
16805function isScriptHashInput (script, allowIncomplete) {
16806 if (script.chunks.length < 2) return false
16807
16808 var lastChunk = script.chunks[script.chunks.length - 1]
16809 if (!Buffer.isBuffer(lastChunk)) return false
16810
16811 var scriptSig = Script.fromChunks(script.chunks.slice(0, -1))
16812 var redeemScript = Script.fromBuffer(lastChunk)
16813
16814 // is redeemScript a valid script?
16815 if (redeemScript.chunks.length === 0) return false
16816
16817 return classifyInput(scriptSig, allowIncomplete) === classifyOutput(redeemScript)
16818}
16819
16820function isScriptHashOutput (script) {
16821 return script.chunks.length === 3 &&
16822 script.chunks[0] === ops.OP_HASH160 &&
16823 Buffer.isBuffer(script.chunks[1]) &&
16824 script.chunks[1].length === 20 &&
16825 script.chunks[2] === ops.OP_EQUAL
16826}
16827
16828// allowIncomplete is to account for combining signatures
16829// See https://github.com/bitcoin/bitcoin/blob/f425050546644a36b0b8e0eb2f6934a3e0f6f80f/src/script/sign.cpp#L195-L197
16830function isMultisigInput (script, allowIncomplete) {
16831 if (script.chunks.length < 2) return false
16832 if (script.chunks[0] !== ops.OP_0) return false
16833
16834 if (allowIncomplete) {
16835 return script.chunks.slice(1).every(function (chunk) {
16836 return chunk === ops.OP_0 || isCanonicalSignature(chunk)
16837 })
16838 }
16839
16840 return script.chunks.slice(1).every(isCanonicalSignature)
16841}
16842
16843function isMultisigOutput (script) {
16844 if (script.chunks.length < 4) return false
16845 if (script.chunks[script.chunks.length - 1] !== ops.OP_CHECKMULTISIG) return false
16846
16847 var mOp = script.chunks[0]
16848 if (mOp === ops.OP_0) return false
16849 if (mOp < ops.OP_1) return false
16850 if (mOp > ops.OP_16) return false
16851
16852 var nOp = script.chunks[script.chunks.length - 2]
16853 if (nOp === ops.OP_0) return false
16854 if (nOp < ops.OP_1) return false
16855 if (nOp > ops.OP_16) return false
16856
16857 var m = mOp - (ops.OP_1 - 1)
16858 var n = nOp - (ops.OP_1 - 1)
16859 if (n < m) return false
16860
16861 var pubKeys = script.chunks.slice(1, -2)
16862 if (n < pubKeys.length) return false
16863
16864 return pubKeys.every(isCanonicalPubKey)
16865}
16866
16867function isNullDataOutput (script) {
16868 return script.chunks[0] === ops.OP_RETURN
16869}
16870
16871function classifyOutput (script) {
16872 typeForce('Script', script)
16873
16874 if (isPubKeyHashOutput(script)) {
16875 return 'pubkeyhash'
16876 } else if (isScriptHashOutput(script)) {
16877 return 'scripthash'
16878 } else if (isMultisigOutput(script)) {
16879 return 'multisig'
16880 } else if (isPubKeyOutput(script)) {
16881 return 'pubkey'
16882 } else if (isNullDataOutput(script)) {
16883 return 'nulldata'
16884 }
16885
16886 return 'nonstandard'
16887}
16888
16889function classifyInput (script, allowIncomplete) {
16890 typeForce('Script', script)
16891
16892 if (isPubKeyHashInput(script)) {
16893 return 'pubkeyhash'
16894 } else if (isMultisigInput(script, allowIncomplete)) {
16895 return 'multisig'
16896 } else if (isScriptHashInput(script, allowIncomplete)) {
16897 return 'scripthash'
16898 } else if (isPubKeyInput(script)) {
16899 return 'pubkey'
16900 }
16901
16902 return 'nonstandard'
16903}
16904
16905// Standard Script Templates
16906// {pubKey} OP_CHECKSIG
16907function pubKeyOutput (pubKey) {
16908 return Script.fromChunks([
16909 pubKey.toBuffer(),
16910 ops.OP_CHECKSIG
16911 ])
16912}
16913
16914// OP_DUP OP_HASH160 {pubKeyHash} OP_EQUALVERIFY OP_CHECKSIG
16915function pubKeyHashOutput (hash) {
16916 typeForce('Buffer', hash)
16917
16918 return Script.fromChunks([
16919 ops.OP_DUP,
16920 ops.OP_HASH160,
16921 hash,
16922 ops.OP_EQUALVERIFY,
16923 ops.OP_CHECKSIG
16924 ])
16925}
16926
16927// OP_HASH160 {scriptHash} OP_EQUAL
16928function scriptHashOutput (hash) {
16929 typeForce('Buffer', hash)
16930
16931 return Script.fromChunks([
16932 ops.OP_HASH160,
16933 hash,
16934 ops.OP_EQUAL
16935 ])
16936}
16937
16938// m [pubKeys ...] n OP_CHECKMULTISIG
16939function multisigOutput (m, pubKeys) {
16940 typeForce(['ECPubKey'], pubKeys)
16941
16942 assert(pubKeys.length >= m, 'Not enough pubKeys provided')
16943
16944 var pubKeyBuffers = pubKeys.map(function (pubKey) {
16945 return pubKey.toBuffer()
16946 })
16947 var n = pubKeys.length
16948
16949 return Script.fromChunks([].concat(
16950 (ops.OP_1 - 1) + m,
16951 pubKeyBuffers,
16952 (ops.OP_1 - 1) + n,
16953 ops.OP_CHECKMULTISIG
16954 ))
16955}
16956
16957// {signature}
16958function pubKeyInput (signature) {
16959 typeForce('Buffer', signature)
16960
16961 return Script.fromChunks([signature])
16962}
16963
16964// {signature} {pubKey}
16965function pubKeyHashInput (signature, pubKey) {
16966 typeForce('Buffer', signature)
16967
16968 return Script.fromChunks([signature, pubKey.toBuffer()])
16969}
16970
16971// <scriptSig> {serialized scriptPubKey script}
16972function scriptHashInput (scriptSig, scriptPubKey) {
16973 return Script.fromChunks([].concat(
16974 scriptSig.chunks,
16975 scriptPubKey.toBuffer()
16976 ))
16977}
16978
16979// OP_0 [signatures ...]
16980function multisigInput (signatures, scriptPubKey) {
16981 if (scriptPubKey) {
16982 assert(isMultisigOutput(scriptPubKey))
16983
16984 var mOp = scriptPubKey.chunks[0]
16985 var nOp = scriptPubKey.chunks[scriptPubKey.chunks.length - 2]
16986 var m = mOp - (ops.OP_1 - 1)
16987 var n = nOp - (ops.OP_1 - 1)
16988
16989 assert(signatures.length >= m, 'Not enough signatures provided')
16990 assert(signatures.length <= n, 'Too many signatures provided')
16991 }
16992
16993 return Script.fromChunks([].concat(ops.OP_0, signatures))
16994}
16995
16996function nullDataOutput (data) {
16997 return Script.fromChunks([ops.OP_RETURN, data])
16998}
16999
17000module.exports = {
17001 isCanonicalPubKey: isCanonicalPubKey,
17002 isCanonicalSignature: isCanonicalSignature,
17003 isPubKeyHashInput: isPubKeyHashInput,
17004 isPubKeyHashOutput: isPubKeyHashOutput,
17005 isPubKeyInput: isPubKeyInput,
17006 isPubKeyOutput: isPubKeyOutput,
17007 isScriptHashInput: isScriptHashInput,
17008 isScriptHashOutput: isScriptHashOutput,
17009 isMultisigInput: isMultisigInput,
17010 isMultisigOutput: isMultisigOutput,
17011 isNullDataOutput: isNullDataOutput,
17012 classifyOutput: classifyOutput,
17013 classifyInput: classifyInput,
17014 pubKeyOutput: pubKeyOutput,
17015 pubKeyHashOutput: pubKeyHashOutput,
17016 scriptHashOutput: scriptHashOutput,
17017 multisigOutput: multisigOutput,
17018 pubKeyInput: pubKeyInput,
17019 pubKeyHashInput: pubKeyHashInput,
17020 scriptHashInput: scriptHashInput,
17021 multisigInput: multisigInput,
17022 dataOutput: function (data) {
17023 console.warn('dataOutput is deprecated, use nullDataOutput by 2.0.0')
17024 return nullDataOutput(data)
17025 },
17026 nullDataOutput: nullDataOutput
17027}
17028
17029}).call(this,require("buffer").Buffer)
17030},{"./ecsignature":62,"./opcodes":67,"./script":68,"assert":5,"buffer":7,"ecurve":49,"typeforce":53}],70:[function(require,module,exports){
17031(function (Buffer){
17032var assert = require('assert')
17033var bufferutils = require('./bufferutils')
17034var crypto = require('./crypto')
17035var typeForce = require('typeforce')
17036var opcodes = require('./opcodes')
17037var scripts = require('./scripts')
17038
17039var Address = require('./address')
17040var ECSignature = require('./ecsignature')
17041var Script = require('./script')
17042
17043function Transaction () {
17044 this.version = 1
17045 this.locktime = 0
17046 this.ins = []
17047 this.outs = []
17048}
17049
17050Transaction.DEFAULT_SEQUENCE = 0xffffffff
17051Transaction.SIGHASH_ALL = 0x01
17052Transaction.SIGHASH_NONE = 0x02
17053Transaction.SIGHASH_SINGLE = 0x03
17054Transaction.SIGHASH_ANYONECANPAY = 0x80
17055
17056Transaction.fromBuffer = function (buffer, __disableAssert) {
17057 var offset = 0
17058 function readSlice (n) {
17059 offset += n
17060 return buffer.slice(offset - n, offset)
17061 }
17062
17063 function readUInt32 () {
17064 var i = buffer.readUInt32LE(offset)
17065 offset += 4
17066 return i
17067 }
17068
17069 function readUInt64 () {
17070 var i = bufferutils.readUInt64LE(buffer, offset)
17071 offset += 8
17072 return i
17073 }
17074
17075 function readVarInt () {
17076 var vi = bufferutils.readVarInt(buffer, offset)
17077 offset += vi.size
17078 return vi.number
17079 }
17080
17081 function readScript () {
17082 return Script.fromBuffer(readSlice(readVarInt()))
17083 }
17084
17085 function readGenerationScript () {
17086 return new Script(readSlice(readVarInt()), [])
17087 }
17088
17089 var tx = new Transaction()
17090 tx.version = readUInt32()
17091
17092 var vinLen = readVarInt()
17093 for (var i = 0; i < vinLen; ++i) {
17094 var hash = readSlice(32)
17095
17096 if (Transaction.isCoinbaseHash(hash)) {
17097 tx.ins.push({
17098 hash: hash,
17099 index: readUInt32(),
17100 script: readGenerationScript(),
17101 sequence: readUInt32()
17102 })
17103 } else {
17104 tx.ins.push({
17105 hash: hash,
17106 index: readUInt32(),
17107 script: readScript(),
17108 sequence: readUInt32()
17109 })
17110 }
17111 }
17112
17113 var voutLen = readVarInt()
17114 for (i = 0; i < voutLen; ++i) {
17115 tx.outs.push({
17116 value: readUInt64(),
17117 script: readScript()
17118 })
17119 }
17120
17121 tx.locktime = readUInt32()
17122
17123 if (!__disableAssert) {
17124 assert.equal(offset, buffer.length, 'Transaction has unexpected data')
17125 }
17126
17127 return tx
17128}
17129
17130Transaction.fromHex = function (hex) {
17131 return Transaction.fromBuffer(new Buffer(hex, 'hex'))
17132}
17133
17134Transaction.isCoinbaseHash = function (buffer) {
17135 return Array.prototype.every.call(buffer, function (x) {
17136 return x === 0
17137 })
17138}
17139
17140/**
17141 * Create a new txIn.
17142 *
17143 * Can be called with any of:
17144 *
17145 * - A transaction and an index
17146 * - A transaction hash and an index
17147 *
17148 * Note that this method does not sign the created input.
17149 */
17150Transaction.prototype.addInput = function (hash, index, sequence, script) {
17151 if (sequence === undefined || sequence === null) {
17152 sequence = Transaction.DEFAULT_SEQUENCE
17153 }
17154
17155 script = script || Script.EMPTY
17156
17157 if (typeof hash === 'string') {
17158 // TxId hex is big-endian, we need little-endian
17159 hash = bufferutils.reverse(new Buffer(hash, 'hex'))
17160 } else if (hash instanceof Transaction) {
17161 hash = hash.getHash()
17162 }
17163
17164 typeForce('Buffer', hash)
17165 typeForce('Number', index)
17166 typeForce('Number', sequence)
17167 typeForce('Script', script)
17168
17169 assert.equal(hash.length, 32, 'Expected hash length of 32, got ' + hash.length)
17170
17171 // Add the input and return the input's index
17172 return (this.ins.push({
17173 hash: hash,
17174 index: index,
17175 script: script,
17176 sequence: sequence
17177 }) - 1)
17178}
17179
17180/**
17181 * Create a new txOut.
17182 *
17183 * Can be called with:
17184 *
17185 * - A base58 address string and a value
17186 * - An Address object and a value
17187 * - A scriptPubKey Script and a value
17188 */
17189Transaction.prototype.addOutput = function (scriptPubKey, value) {
17190 // Attempt to get a valid address if it's a base58 address string
17191 if (typeof scriptPubKey === 'string') {
17192 scriptPubKey = Address.fromBase58Check(scriptPubKey)
17193 }
17194
17195 // Attempt to get a valid script if it's an Address object
17196 if (scriptPubKey instanceof Address) {
17197 scriptPubKey = scriptPubKey.toOutputScript()
17198 }
17199
17200 typeForce('Script', scriptPubKey)
17201 typeForce('Number', value)
17202
17203 // Add the output and return the output's index
17204 return (this.outs.push({
17205 script: scriptPubKey,
17206 value: value
17207 }) - 1)
17208}
17209
17210Transaction.prototype.clone = function () {
17211 var newTx = new Transaction()
17212 newTx.version = this.version
17213 newTx.locktime = this.locktime
17214
17215 newTx.ins = this.ins.map(function (txIn) {
17216 return {
17217 hash: txIn.hash,
17218 index: txIn.index,
17219 script: txIn.script,
17220 sequence: txIn.sequence
17221 }
17222 })
17223
17224 newTx.outs = this.outs.map(function (txOut) {
17225 return {
17226 script: txOut.script,
17227 value: txOut.value
17228 }
17229 })
17230
17231 return newTx
17232}
17233
17234/**
17235 * Hash transaction for signing a specific input.
17236 *
17237 * Bitcoin uses a different hash for each signed transaction input. This
17238 * method copies the transaction, makes the necessary changes based on the
17239 * hashType, serializes and finally hashes the result. This hash can then be
17240 * used to sign the transaction input in question.
17241 */
17242Transaction.prototype.hashForSignature = function (inIndex, prevOutScript, hashType) {
17243 // FIXME: remove in 2.x.y
17244 if (arguments[0] instanceof Script) {
17245 console.warn('hashForSignature(prevOutScript, inIndex, ...) has been deprecated. Use hashForSignature(inIndex, prevOutScript, ...)')
17246
17247 // swap the arguments (must be stored in tmp, arguments is special)
17248 var tmp = arguments[0]
17249 inIndex = arguments[1]
17250 prevOutScript = tmp
17251 }
17252
17253 typeForce('Number', inIndex)
17254 typeForce('Script', prevOutScript)
17255 typeForce('Number', hashType)
17256
17257 assert(inIndex >= 0, 'Invalid vin index')
17258 assert(inIndex < this.ins.length, 'Invalid vin index')
17259
17260 var txTmp = this.clone()
17261 var hashScript = prevOutScript.without(opcodes.OP_CODESEPARATOR)
17262
17263 // Blank out other inputs' signatures
17264 txTmp.ins.forEach(function (txIn) {
17265 txIn.script = Script.EMPTY
17266 })
17267 txTmp.ins[inIndex].script = hashScript
17268
17269 var hashTypeModifier = hashType & 0x1f
17270
17271 if (hashTypeModifier === Transaction.SIGHASH_NONE) {
17272 assert(false, 'SIGHASH_NONE not yet supported')
17273 } else if (hashTypeModifier === Transaction.SIGHASH_SINGLE) {
17274 assert(false, 'SIGHASH_SINGLE not yet supported')
17275 }
17276
17277 if (hashType & Transaction.SIGHASH_ANYONECANPAY) {
17278 assert(false, 'SIGHASH_ANYONECANPAY not yet supported')
17279 }
17280
17281 var hashTypeBuffer = new Buffer(4)
17282 hashTypeBuffer.writeInt32LE(hashType, 0)
17283
17284 var buffer = Buffer.concat([txTmp.toBuffer(), hashTypeBuffer])
17285 return crypto.hash256(buffer)
17286}
17287
17288Transaction.prototype.getHash = function () {
17289 return crypto.hash256(this.toBuffer())
17290}
17291
17292Transaction.prototype.getId = function () {
17293 // TxHash is little-endian, we need big-endian
17294 return bufferutils.reverse(this.getHash()).toString('hex')
17295}
17296
17297Transaction.prototype.toBuffer = function () {
17298 function scriptSize (script) {
17299 var length = script.buffer.length
17300
17301 return bufferutils.varIntSize(length) + length
17302 }
17303
17304 var buffer = new Buffer(
17305 8 +
17306 bufferutils.varIntSize(this.ins.length) +
17307 bufferutils.varIntSize(this.outs.length) +
17308 this.ins.reduce(function (sum, input) { return sum + 40 + scriptSize(input.script) }, 0) +
17309 this.outs.reduce(function (sum, output) { return sum + 8 + scriptSize(output.script) }, 0)
17310 )
17311
17312 var offset = 0
17313 function writeSlice (slice) {
17314 slice.copy(buffer, offset)
17315 offset += slice.length
17316 }
17317
17318 function writeUInt32 (i) {
17319 buffer.writeUInt32LE(i, offset)
17320 offset += 4
17321 }
17322
17323 function writeUInt64 (i) {
17324 bufferutils.writeUInt64LE(buffer, i, offset)
17325 offset += 8
17326 }
17327
17328 function writeVarInt (i) {
17329 var n = bufferutils.writeVarInt(buffer, i, offset)
17330 offset += n
17331 }
17332
17333 writeUInt32(this.version)
17334 writeVarInt(this.ins.length)
17335
17336 this.ins.forEach(function (txIn) {
17337 writeSlice(txIn.hash)
17338 writeUInt32(txIn.index)
17339 writeVarInt(txIn.script.buffer.length)
17340 writeSlice(txIn.script.buffer)
17341 writeUInt32(txIn.sequence)
17342 })
17343
17344 writeVarInt(this.outs.length)
17345 this.outs.forEach(function (txOut) {
17346 writeUInt64(txOut.value)
17347 writeVarInt(txOut.script.buffer.length)
17348 writeSlice(txOut.script.buffer)
17349 })
17350
17351 writeUInt32(this.locktime)
17352
17353 return buffer
17354}
17355
17356Transaction.prototype.toHex = function () {
17357 return this.toBuffer().toString('hex')
17358}
17359
17360Transaction.prototype.setInputScript = function (index, script) {
17361 typeForce('Number', index)
17362 typeForce('Script', script)
17363
17364 this.ins[index].script = script
17365}
17366
17367// FIXME: remove in 2.x.y
17368Transaction.prototype.sign = function (index, privKey, hashType) {
17369 console.warn('Transaction.prototype.sign is deprecated. Use TransactionBuilder instead.')
17370
17371 var prevOutScript = privKey.pub.getAddress().toOutputScript()
17372 var signature = this.signInput(index, prevOutScript, privKey, hashType)
17373
17374 var scriptSig = scripts.pubKeyHashInput(signature, privKey.pub)
17375 this.setInputScript(index, scriptSig)
17376}
17377
17378// FIXME: remove in 2.x.y
17379Transaction.prototype.signInput = function (index, prevOutScript, privKey, hashType) {
17380 console.warn('Transaction.prototype.signInput is deprecated. Use TransactionBuilder instead.')
17381
17382 hashType = hashType || Transaction.SIGHASH_ALL
17383
17384 var hash = this.hashForSignature(index, prevOutScript, hashType)
17385 var signature = privKey.sign(hash)
17386
17387 return signature.toScriptSignature(hashType)
17388}
17389
17390// FIXME: remove in 2.x.y
17391Transaction.prototype.validateInput = function (index, prevOutScript, pubKey, buffer) {
17392 console.warn('Transaction.prototype.validateInput is deprecated. Use TransactionBuilder instead.')
17393
17394 var parsed = ECSignature.parseScriptSignature(buffer)
17395 var hash = this.hashForSignature(index, prevOutScript, parsed.hashType)
17396
17397 return pubKey.verify(hash, parsed.signature)
17398}
17399
17400module.exports = Transaction
17401
17402}).call(this,require("buffer").Buffer)
17403},{"./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){
17404(function (Buffer){
17405var assert = require('assert')
17406var ops = require('./opcodes')
17407var scripts = require('./scripts')
17408
17409var ECPubKey = require('./ecpubkey')
17410var ECSignature = require('./ecsignature')
17411var Script = require('./script')
17412var Transaction = require('./transaction')
17413
17414function extractInput (txIn) {
17415 var redeemScript
17416 var scriptSig = txIn.script
17417 var prevOutScript
17418 var prevOutType = scripts.classifyInput(scriptSig, true)
17419 var scriptType
17420
17421 // Re-classify if scriptHash
17422 if (prevOutType === 'scripthash') {
17423 redeemScript = Script.fromBuffer(scriptSig.chunks.slice(-1)[0])
17424 prevOutScript = scripts.scriptHashOutput(redeemScript.getHash())
17425
17426 scriptSig = Script.fromChunks(scriptSig.chunks.slice(0, -1))
17427 scriptType = scripts.classifyInput(scriptSig, true)
17428 } else {
17429 scriptType = prevOutType
17430 }
17431
17432 // Extract hashType, pubKeys and signatures
17433 var hashType, parsed, pubKeys, signatures
17434
17435 switch (scriptType) {
17436 case 'pubkeyhash': {
17437 parsed = ECSignature.parseScriptSignature(scriptSig.chunks[0])
17438 hashType = parsed.hashType
17439 pubKeys = [ECPubKey.fromBuffer(scriptSig.chunks[1])]
17440 signatures = [parsed.signature]
17441 prevOutScript = pubKeys[0].getAddress().toOutputScript()
17442
17443 break
17444 }
17445
17446 case 'pubkey': {
17447 parsed = ECSignature.parseScriptSignature(scriptSig.chunks[0])
17448 hashType = parsed.hashType
17449 signatures = [parsed.signature]
17450
17451 if (redeemScript) {
17452 pubKeys = [ECPubKey.fromBuffer(redeemScript.chunks[0])]
17453 }
17454
17455 break
17456 }
17457
17458 case 'multisig': {
17459 signatures = scriptSig.chunks.slice(1).map(function (chunk) {
17460 if (chunk === ops.OP_0) return chunk
17461
17462 var parsed = ECSignature.parseScriptSignature(chunk)
17463 hashType = parsed.hashType
17464
17465 return parsed.signature
17466 })
17467
17468 if (redeemScript) {
17469 pubKeys = redeemScript.chunks.slice(1, -2).map(ECPubKey.fromBuffer)
17470 }
17471
17472 break
17473 }
17474 }
17475
17476 return {
17477 hashType: hashType,
17478 prevOutScript: prevOutScript,
17479 prevOutType: prevOutType,
17480 pubKeys: pubKeys,
17481 redeemScript: redeemScript,
17482 scriptType: scriptType,
17483 signatures: signatures
17484 }
17485}
17486
17487function TransactionBuilder () {
17488 this.prevTxMap = {}
17489 this.prevOutScripts = {}
17490 this.prevOutTypes = {}
17491
17492 this.inputs = []
17493 this.tx = new Transaction()
17494}
17495
17496TransactionBuilder.fromTransaction = function (transaction) {
17497 var txb = new TransactionBuilder()
17498
17499 // Copy other transaction fields
17500 txb.tx.version = transaction.version
17501 txb.tx.locktime = transaction.locktime
17502
17503 // Extract/add inputs
17504 transaction.ins.forEach(function (txIn) {
17505 txb.addInput(txIn.hash, txIn.index, txIn.sequence)
17506 })
17507
17508 // Extract/add outputs
17509 transaction.outs.forEach(function (txOut) {
17510 txb.addOutput(txOut.script, txOut.value)
17511 })
17512
17513 // Extract/add signatures
17514 txb.inputs = transaction.ins.map(function (txIn) {
17515 // TODO: remove me after testcase added
17516 assert(!Transaction.isCoinbaseHash(txIn.hash), 'coinbase inputs not supported')
17517
17518 // Ignore empty scripts
17519 if (txIn.script.buffer.length === 0) return {}
17520
17521 return extractInput(txIn)
17522 })
17523
17524 return txb
17525}
17526
17527TransactionBuilder.prototype.addInput = function (prevTx, index, sequence, prevOutScript) {
17528 var prevOutHash
17529
17530 // txId
17531 if (typeof prevTx === 'string') {
17532 prevOutHash = new Buffer(prevTx, 'hex')
17533
17534 // TxId hex is big-endian, we want little-endian hash
17535 Array.prototype.reverse.call(prevOutHash)
17536
17537 // Transaction
17538 } else if (prevTx instanceof Transaction) {
17539 prevOutHash = prevTx.getHash()
17540 prevOutScript = prevTx.outs[index].script
17541
17542 // txHash
17543 } else {
17544 prevOutHash = prevTx
17545 }
17546
17547 var input = {}
17548 if (prevOutScript) {
17549 var prevOutType = scripts.classifyOutput(prevOutScript)
17550
17551 // if we can, extract pubKey information
17552 switch (prevOutType) {
17553 case 'multisig': {
17554 input.pubKeys = prevOutScript.chunks.slice(1, -2).map(ECPubKey.fromBuffer)
17555 break
17556 }
17557
17558 case 'pubkey': {
17559 input.pubKeys = prevOutScript.chunks.slice(0, 1).map(ECPubKey.fromBuffer)
17560 break
17561 }
17562 }
17563
17564 if (prevOutType !== 'scripthash') {
17565 input.scriptType = prevOutType
17566 }
17567
17568 input.prevOutScript = prevOutScript
17569 input.prevOutType = prevOutType
17570 }
17571
17572 assert(this.inputs.every(function (input2) {
17573 if (input2.hashType === undefined) return true
17574
17575 return input2.hashType & Transaction.SIGHASH_ANYONECANPAY
17576 }), 'No, this would invalidate signatures')
17577
17578 var prevOut = prevOutHash.toString('hex') + ':' + index
17579 assert(!(prevOut in this.prevTxMap), 'Transaction is already an input')
17580
17581 var vin = this.tx.addInput(prevOutHash, index, sequence)
17582 this.inputs[vin] = input
17583 this.prevTxMap[prevOut] = vin
17584
17585 return vin
17586}
17587
17588TransactionBuilder.prototype.addOutput = function (scriptPubKey, value) {
17589 assert(this.inputs.every(function (input) {
17590 if (input.hashType === undefined) return true
17591
17592 return (input.hashType & 0x1f) === Transaction.SIGHASH_SINGLE
17593 }), 'No, this would invalidate signatures')
17594
17595 return this.tx.addOutput(scriptPubKey, value)
17596}
17597
17598TransactionBuilder.prototype.build = function () {
17599 return this.__build(false)
17600}
17601TransactionBuilder.prototype.buildIncomplete = function () {
17602 return this.__build(true)
17603}
17604
17605var canSignTypes = {
17606 'pubkeyhash': true,
17607 'multisig': true,
17608 'pubkey': true
17609}
17610
17611TransactionBuilder.prototype.__build = function (allowIncomplete) {
17612 if (!allowIncomplete) {
17613 assert(this.tx.ins.length > 0, 'Transaction has no inputs')
17614 assert(this.tx.outs.length > 0, 'Transaction has no outputs')
17615 }
17616
17617 var tx = this.tx.clone()
17618
17619 // Create script signatures from signature meta-data
17620 this.inputs.forEach(function (input, index) {
17621 var scriptType = input.scriptType
17622 var scriptSig
17623
17624 if (!allowIncomplete) {
17625 assert(!!scriptType, 'Transaction is not complete')
17626 assert(scriptType in canSignTypes, scriptType + ' not supported')
17627 assert(input.signatures, 'Transaction is missing signatures')
17628 }
17629
17630 if (input.signatures) {
17631 switch (scriptType) {
17632 case 'pubkeyhash': {
17633 var pkhSignature = input.signatures[0].toScriptSignature(input.hashType)
17634 scriptSig = scripts.pubKeyHashInput(pkhSignature, input.pubKeys[0])
17635 break
17636 }
17637
17638 case 'multisig': {
17639 // Array.prototype.map is sparse-compatible
17640 var msSignatures = input.signatures.map(function (signature) {
17641 return signature && signature.toScriptSignature(input.hashType)
17642 })
17643
17644 // fill in blanks with OP_0
17645 if (allowIncomplete) {
17646 for (var i = 0; i < msSignatures.length; ++i) {
17647 if (msSignatures[i]) continue
17648
17649 msSignatures[i] = ops.OP_0
17650 }
17651 } else {
17652 // Array.prototype.filter returns non-sparse array
17653 msSignatures = msSignatures.filter(function (x) { return x })
17654 }
17655
17656 var redeemScript = allowIncomplete ? undefined : input.redeemScript
17657 scriptSig = scripts.multisigInput(msSignatures, redeemScript)
17658 break
17659 }
17660
17661 case 'pubkey': {
17662 var pkSignature = input.signatures[0].toScriptSignature(input.hashType)
17663 scriptSig = scripts.pubKeyInput(pkSignature)
17664 break
17665 }
17666 }
17667 }
17668
17669 // did we build a scriptSig?
17670 if (scriptSig) {
17671 // wrap as scriptHash if necessary
17672 if (input.prevOutType === 'scripthash') {
17673 scriptSig = scripts.scriptHashInput(scriptSig, input.redeemScript)
17674 }
17675
17676 tx.setInputScript(index, scriptSig)
17677 }
17678 })
17679
17680 return tx
17681}
17682
17683TransactionBuilder.prototype.sign = function (index, privKey, redeemScript, hashType) {
17684 assert(index in this.inputs, 'No input at index: ' + index)
17685 hashType = hashType || Transaction.SIGHASH_ALL
17686
17687 var input = this.inputs[index]
17688 var canSign = input.hashType &&
17689 input.prevOutScript &&
17690 input.prevOutType &&
17691 input.pubKeys &&
17692 input.scriptType &&
17693 input.signatures
17694
17695 // are we almost ready to sign?
17696 if (canSign) {
17697 // if redeemScript was provided, enforce consistency
17698 if (redeemScript) {
17699 assert.deepEqual(input.redeemScript, redeemScript, 'Inconsistent redeemScript')
17700 }
17701
17702 assert.equal(input.hashType, hashType, 'Inconsistent hashType')
17703
17704 // no? prepare
17705 } else {
17706 // must be pay-to-scriptHash?
17707 if (redeemScript) {
17708 // if we have a prevOutScript, enforce scriptHash equality to the redeemScript
17709 if (input.prevOutScript) {
17710 assert.equal(input.prevOutType, 'scripthash', 'PrevOutScript must be P2SH')
17711
17712 var scriptHash = input.prevOutScript.chunks[1]
17713 assert.deepEqual(scriptHash, redeemScript.getHash(), 'RedeemScript does not match ' + scriptHash.toString('hex'))
17714 }
17715
17716 var scriptType = scripts.classifyOutput(redeemScript)
17717 assert(scriptType in canSignTypes, 'RedeemScript not supported (' + scriptType + ')')
17718
17719 var pubKeys = []
17720 switch (scriptType) {
17721 case 'multisig': {
17722 pubKeys = redeemScript.chunks.slice(1, -2).map(ECPubKey.fromBuffer)
17723 break
17724 }
17725
17726 case 'pubkeyhash': {
17727 var pkh1 = redeemScript.chunks[2]
17728 var pkh2 = privKey.pub.getAddress().hash
17729
17730 assert.deepEqual(pkh1, pkh2, 'privateKey cannot sign for this input')
17731 pubKeys = [privKey.pub]
17732 break
17733 }
17734
17735 case 'pubkey': {
17736 pubKeys = redeemScript.chunks.slice(0, 1).map(ECPubKey.fromBuffer)
17737 break
17738 }
17739 }
17740
17741 if (!input.prevOutScript) {
17742 input.prevOutScript = scripts.scriptHashOutput(redeemScript.getHash())
17743 input.prevOutType = 'scripthash'
17744 }
17745
17746 input.pubKeys = pubKeys
17747 input.redeemScript = redeemScript
17748 input.scriptType = scriptType
17749
17750 // cannot be pay-to-scriptHash
17751 } else {
17752 assert.notEqual(input.prevOutType, 'scripthash', 'PrevOutScript is P2SH, missing redeemScript')
17753
17754 // can we otherwise sign this?
17755 if (input.scriptType) {
17756 assert(input.pubKeys, input.scriptType + ' not supported')
17757
17758 // we know nothin' Jon Snow, assume pubKeyHash
17759 } else {
17760 input.prevOutScript = privKey.pub.getAddress().toOutputScript()
17761 input.prevOutType = 'pubkeyhash'
17762 input.pubKeys = [privKey.pub]
17763 input.scriptType = input.prevOutType
17764 }
17765 }
17766
17767 input.hashType = hashType
17768 input.signatures = input.signatures || []
17769 }
17770
17771 var signatureScript = input.redeemScript || input.prevOutScript
17772 var signatureHash = this.tx.hashForSignature(index, signatureScript, hashType)
17773
17774 // enforce signature order matches public keys
17775 if (input.scriptType === 'multisig' && input.redeemScript && input.signatures.length !== input.pubKeys.length) {
17776 // maintain a local copy of unmatched signatures
17777 var unmatched = input.signatures.slice()
17778
17779 input.signatures = input.pubKeys.map(function (pubKey) {
17780 var match
17781
17782 // check for any matching signatures
17783 unmatched.some(function (signature, i) {
17784 if (!pubKey.verify(signatureHash, signature)) return false
17785 match = signature
17786
17787 // remove matched signature from unmatched
17788 unmatched.splice(i, 1)
17789
17790 return true
17791 })
17792
17793 return match || undefined
17794 })
17795 }
17796
17797 // enforce in order signing of public keys
17798 assert(input.pubKeys.some(function (pubKey, i) {
17799 if (!privKey.pub.Q.equals(pubKey.Q)) return false
17800
17801 assert(!input.signatures[i], 'Signature already exists')
17802 var signature = privKey.sign(signatureHash)
17803 input.signatures[i] = signature
17804
17805 return true
17806 }, this), 'privateKey cannot sign for this input')
17807}
17808
17809module.exports = TransactionBuilder
17810
17811}).call(this,require("buffer").Buffer)
17812},{"./ecpubkey":61,"./ecsignature":62,"./opcodes":67,"./script":68,"./scripts":69,"./transaction":70,"assert":5,"buffer":7}],72:[function(require,module,exports){
17813(function (Buffer){
17814var assert = require('assert')
17815var bufferutils = require('./bufferutils')
17816var typeForce = require('typeforce')
17817var networks = require('./networks')
17818var randomBytes = require('randombytes')
17819
17820var Address = require('./address')
17821var HDNode = require('./hdnode')
17822var TransactionBuilder = require('./transaction_builder')
17823var Script = require('./script')
17824
17825function Wallet (seed, network) {
17826 console.warn('Wallet is deprecated and will be removed in 2.0.0, see #296')
17827
17828 seed = seed || randomBytes(32)
17829 network = network || networks.bitcoin
17830
17831 // Stored in a closure to make accidental serialization less likely
17832 var masterKey = HDNode.fromSeedBuffer(seed, network)
17833
17834 // HD first-level child derivation method should be hardened
17835 // See https://bitcointalk.org/index.php?topic=405179.msg4415254#msg4415254
17836 var accountZero = masterKey.deriveHardened(0)
17837 var externalAccount = accountZero.derive(0)
17838 var internalAccount = accountZero.derive(1)
17839
17840 this.addresses = []
17841 this.changeAddresses = []
17842 this.network = network
17843 this.unspents = []
17844
17845 // FIXME: remove in 2.0.0
17846 this.unspentMap = {}
17847
17848 // FIXME: remove in 2.0.0
17849 var me = this
17850 this.newMasterKey = function (seed) {
17851 console.warn('newMasterKey is deprecated, please make a new Wallet instance instead')
17852
17853 seed = seed || randomBytes(32)
17854 masterKey = HDNode.fromSeedBuffer(seed, network)
17855
17856 accountZero = masterKey.deriveHardened(0)
17857 externalAccount = accountZero.derive(0)
17858 internalAccount = accountZero.derive(1)
17859
17860 me.addresses = []
17861 me.changeAddresses = []
17862
17863 me.unspents = []
17864 me.unspentMap = {}
17865 }
17866
17867 this.getMasterKey = function () {
17868 return masterKey
17869 }
17870 this.getAccountZero = function () {
17871 return accountZero
17872 }
17873 this.getExternalAccount = function () {
17874 return externalAccount
17875 }
17876 this.getInternalAccount = function () {
17877 return internalAccount
17878 }
17879}
17880
17881Wallet.prototype.createTransaction = function (to, value, options) {
17882 // FIXME: remove in 2.0.0
17883 if (typeof options !== 'object') {
17884 if (options !== undefined) {
17885 console.warn('Non options object parameters are deprecated, use options object instead')
17886
17887 options = {
17888 fixedFee: arguments[2],
17889 changeAddress: arguments[3]
17890 }
17891 }
ab78acc6 17892 }
8b095871
IC
17893
17894 options = options || {}
17895
17896 assert(value > this.network.dustThreshold, value + ' must be above dust threshold (' + this.network.dustThreshold + ' Satoshis)')
17897
17898 var changeAddress = options.changeAddress
17899 var fixedFee = options.fixedFee
17900 var minConf = options.minConf === undefined ? 0 : options.minConf // FIXME: change minConf:1 by default in 2.0.0
17901
17902 // filter by minConf, then pending and sort by descending value
17903 var unspents = this.unspents.filter(function (unspent) {
17904 return unspent.confirmations >= minConf
17905 }).filter(function (unspent) {
17906 return !unspent.pending
17907 }).sort(function (o1, o2) {
17908 return o2.value - o1.value
17909 })
17910
17911 var accum = 0
17912 var addresses = []
17913 var subTotal = value
17914
17915 var txb = new TransactionBuilder()
17916 txb.addOutput(to, value)
17917
17918 for (var i = 0; i < unspents.length; ++i) {
17919 var unspent = unspents[i]
17920 addresses.push(unspent.address)
17921
17922 txb.addInput(unspent.txHash, unspent.index)
17923
17924 var fee = fixedFee === undefined ? estimatePaddedFee(txb.buildIncomplete(), this.network) : fixedFee
17925
17926 accum += unspent.value
17927 subTotal = value + fee
17928
17929 if (accum >= subTotal) {
17930 var change = accum - subTotal
17931
17932 if (change > this.network.dustThreshold) {
17933 txb.addOutput(changeAddress || this.getChangeAddress(), change)
17934 }
17935
17936 break
17937 }
ab78acc6 17938 }
8b095871
IC
17939
17940 assert(accum >= subTotal, 'Not enough funds (incl. fee): ' + accum + ' < ' + subTotal)
17941
17942 return this.signWith(txb, addresses).build()
17943}
17944
17945// FIXME: remove in 2.0.0
17946Wallet.prototype.processPendingTx = function (tx) {
17947 this.__processTx(tx, true)
17948}
17949
17950// FIXME: remove in 2.0.0
17951Wallet.prototype.processConfirmedTx = function (tx) {
17952 this.__processTx(tx, false)
17953}
17954
17955// FIXME: remove in 2.0.0
17956Wallet.prototype.__processTx = function (tx, isPending) {
17957 console.warn('processTransaction is considered harmful, see issue #260 for more information')
17958
17959 var txId = tx.getId()
17960 var txHash = tx.getHash()
17961
17962 tx.outs.forEach(function (txOut, i) {
17963 var address
17964
17965 try {
17966 address = Address.fromOutputScript(txOut.script, this.network).toString()
17967 } catch (e) {
17968 if (!(e.message.match(/has no matching Address/)))
17969 throw e
17970 }
17971
17972 var myAddresses = this.addresses.concat(this.changeAddresses)
17973 if (myAddresses.indexOf(address) > -1) {
17974 var lookup = txId + ':' + i
17975 if (lookup in this.unspentMap) return
17976
17977 // its unique, add it
17978 var unspent = {
17979 address: address,
17980 confirmations: 0, // no way to determine this without more information
17981 index: i,
17982 txHash: txHash,
17983 txId: txId,
17984 value: txOut.value,
17985 pending: isPending
17986 }
17987
17988 this.unspentMap[lookup] = unspent
17989 this.unspents.push(unspent)
17990 }
17991 }, this)
17992
17993 tx.ins.forEach(function (txIn) {
17994 // copy and convert to big-endian hex
17995 var txInId = bufferutils.reverse(txIn.hash).toString('hex')
17996
17997 var lookup = txInId + ':' + txIn.index
17998 if (!(lookup in this.unspentMap)) return
17999
18000 var unspent = this.unspentMap[lookup]
18001
18002 if (isPending) {
18003 unspent.pending = true
18004 unspent.spent = true
18005 } else {
18006 delete this.unspentMap[lookup]
18007
18008 this.unspents = this.unspents.filter(function (unspent2) {
18009 return unspent !== unspent2
18010 })
18011 }
18012 }, this)
18013}
18014
18015Wallet.prototype.generateAddress = function () {
18016 var k = this.addresses.length
18017 var address = this.getExternalAccount().derive(k).getAddress()
18018
18019 this.addresses.push(address.toString())
18020
18021 return this.getReceiveAddress()
18022}
18023
18024Wallet.prototype.generateChangeAddress = function () {
18025 var k = this.changeAddresses.length
18026 var address = this.getInternalAccount().derive(k).getAddress()
18027
18028 this.changeAddresses.push(address.toString())
18029
18030 return this.getChangeAddress()
18031}
18032
18033Wallet.prototype.getAddress = function () {
18034 if (this.addresses.length === 0) {
18035 this.generateAddress()
ab78acc6 18036 }
8b095871
IC
18037
18038 return this.addresses[this.addresses.length - 1]
18039}
18040
18041Wallet.prototype.getBalance = function (minConf) {
18042 minConf = minConf || 0
18043
18044 return this.unspents.filter(function (unspent) {
18045 return unspent.confirmations >= minConf
18046
18047 // FIXME: remove spent filter in 2.0.0
18048 }).filter(function (unspent) {
18049 return !unspent.spent
18050 }).reduce(function (accum, unspent) {
18051 return accum + unspent.value
18052 }, 0)
18053}
18054
18055Wallet.prototype.getChangeAddress = function () {
18056 if (this.changeAddresses.length === 0) {
18057 this.generateChangeAddress()
3af2954a 18058 }
8b095871
IC
18059
18060 return this.changeAddresses[this.changeAddresses.length - 1]
18061}
18062
18063Wallet.prototype.getInternalPrivateKey = function (index) {
18064 return this.getInternalAccount().derive(index).privKey
18065}
18066
18067Wallet.prototype.getPrivateKey = function (index) {
18068 return this.getExternalAccount().derive(index).privKey
18069}
18070
18071Wallet.prototype.getPrivateKeyForAddress = function (address) {
18072 var index
18073
18074 if ((index = this.addresses.indexOf(address)) > -1) {
18075 return this.getPrivateKey(index)
ab78acc6 18076 }
8b095871
IC
18077
18078 if ((index = this.changeAddresses.indexOf(address)) > -1) {
18079 return this.getInternalPrivateKey(index)
18080 }
18081
18082 assert(false, 'Unknown address. Make sure the address is from the keychain and has been generated')
ab78acc6
IC
18083}
18084
8b095871
IC
18085Wallet.prototype.getUnspentOutputs = function (minConf) {
18086 minConf = minConf || 0
18087
18088 return this.unspents.filter(function (unspent) {
18089 return unspent.confirmations >= minConf
18090
18091 // FIXME: remove spent filter in 2.0.0
18092 }).filter(function (unspent) {
18093 return !unspent.spent
18094 }).map(function (unspent) {
18095 return {
18096 address: unspent.address,
18097 confirmations: unspent.confirmations,
18098 index: unspent.index,
18099 txId: unspent.txId,
18100 value: unspent.value,
18101
18102 // FIXME: remove in 2.0.0
18103 hash: unspent.txId,
18104 pending: unspent.pending
18105 }
18106 })
ab78acc6 18107}
3af2954a 18108
8b095871
IC
18109Wallet.prototype.setUnspentOutputs = function (unspents) {
18110 this.unspentMap = {}
18111 this.unspents = unspents.map(function (unspent) {
18112 // FIXME: remove unspent.hash in 2.0.0
18113 var txId = unspent.txId || unspent.hash
18114 var index = unspent.index
3af2954a 18115
8b095871
IC
18116 // FIXME: remove in 2.0.0
18117 if (unspent.hash !== undefined) {
18118 console.warn('unspent.hash is deprecated, use unspent.txId instead')
18119 }
3af2954a 18120
8b095871
IC
18121 // FIXME: remove in 2.0.0
18122 if (index === undefined) {
18123 console.warn('unspent.outputIndex is deprecated, use unspent.index instead')
18124 index = unspent.outputIndex
18125 }
3af2954a 18126
8b095871
IC
18127 typeForce('String', txId)
18128 typeForce('Number', index)
18129 typeForce('Number', unspent.value)
3af2954a 18130
8b095871
IC
18131 assert.equal(txId.length, 64, 'Expected valid txId, got ' + txId)
18132 assert.doesNotThrow(function () {
18133 Address.fromBase58Check(unspent.address)
18134 }, 'Expected Base58 Address, got ' + unspent.address)
18135 assert(isFinite(index), 'Expected finite index, got ' + index)
3af2954a 18136
8b095871
IC
18137 // FIXME: remove branch in 2.0.0
18138 if (unspent.confirmations !== undefined) {
18139 typeForce('Number', unspent.confirmations)
ab78acc6 18140 }
8b095871
IC
18141
18142 var txHash = bufferutils.reverse(new Buffer(txId, 'hex'))
18143
18144 unspent = {
18145 address: unspent.address,
18146 confirmations: unspent.confirmations || 0,
18147 index: index,
18148 txHash: txHash,
18149 txId: txId,
18150 value: unspent.value,
18151
18152 // FIXME: remove in 2.0.0
18153 pending: unspent.pending || false
ab78acc6 18154 }
3af2954a 18155
8b095871
IC
18156 // FIXME: remove in 2.0.0
18157 this.unspentMap[txId + ':' + index] = unspent
18158
18159 return unspent
18160 }, this)
ab78acc6 18161}
3af2954a 18162
8b095871
IC
18163Wallet.prototype.signWith = function (tx, addresses) {
18164 addresses.forEach(function (address, i) {
18165 var privKey = this.getPrivateKeyForAddress(address)
18166
18167 tx.sign(i, privKey)
18168 }, this)
18169
18170 return tx
ab78acc6 18171}
3af2954a 18172
8b095871
IC
18173function estimatePaddedFee (tx, network) {
18174 var tmpTx = tx.clone()
18175 tmpTx.addOutput(Script.EMPTY, network.dustSoftThreshold || 0)
18176
18177 return network.estimateFee(tmpTx)
ab78acc6 18178}
3af2954a 18179
8b095871
IC
18180// FIXME: 1.0.0 shims, remove in 2.0.0
18181Wallet.prototype.getReceiveAddress = Wallet.prototype.getAddress
18182Wallet.prototype.createTx = Wallet.prototype.createTransaction
18183
18184module.exports = Wallet
18185
18186}).call(this,require("buffer").Buffer)
18187},{"./address":54,"./bufferutils":57,"./hdnode":63,"./networks":66,"./script":68,"./transaction_builder":71,"assert":5,"buffer":7,"randombytes":52,"typeforce":53}]},{},[64])(64)
18188});</script>
18189 <script>bitcoin.networks.shadow = {
18190 magicPrefix: '\x19ShadowCash Signed Message:\n',
18191 bip32: {
18192 public: 0xEE80286A,
18193 private: 0xEE8031E8
18194 },
18195 pubKeyHash: 0x3f,
18196 scriptHash: 0x7d,
18197 wif: 0xbf,
18198 dustThreshold: 0,
18199 feePerKb: 1000,
18200 estimateFee: function() { return "unused in this app" },
18201};
18202
18203bitcoin.networks.shadowtn = {
18204 magicPrefix: '\x19ShadowCash Signed Message:\n',
18205 bip32: {
18206 public: 0x76C0FDFB,
18207 private: 0x76C1077A
18208 },
18209 pubKeyHash: 0x7f,
18210 scriptHash: 0xc4,
18211 wif: 0xff,
18212 dustThreshold: 0,
18213 feePerKb: 1000,
18214 estimateFee: function() { return "unused in this app" },
18215};
3af2954a 18216
8b095871
IC
18217bitcoin.networks.clam = {
18218 bip32: {
18219 public: 0xa8c26d64,
18220 private: 0xa8c17826
18221 },
18222 pubKeyHash: 0x89,
18223 wif: 0x85,
18224};
3af2954a 18225
8b095871
IC
18226bitcoin.networks.dash = {
18227 bip32: {
18228 public: 0x0488b21e,
18229 private: 0x0488ade4
18230 },
18231 pubKeyHash: 0x4c,
18232 scriptHash: 0x10,
18233 wif: 0xcc,
18234};
ab78acc6 18235
f88fab20 18236bitcoin.networks.game = {
18237 bip32: {
18238 public: 0x0488b21e,
18239 private: 0x0488ade4
18240 },
18241 pubKeyHash: 0x26,
18242 scriptHash: 0x05,
18243 wif: 0xa6,
18244};
18245
8b095871
IC
18246bitcoin.networks.namecoin = {
18247 bip32: {
18248 public: 0x0488b21e,
18249 private: 0x0488ade4
18250 },
18251 pubKeyHash: 0x34,
18252 //scriptHash: 0x10,
18253 wif: 0x80,
18254};
3af2954a 18255
8b095871
IC
18256bitcoin.networks.peercoin = {
18257 bip32: {
18258 public: 0x0488b21e,
18259 private: 0x0488ade4
18260 },
18261 pubKeyHash: 0x37,
18262 //scriptHash: 0x10,
18263 wif: 0xb7,
18264};
3af2954a 18265
8b095871
IC
18266</script>
18267 <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){
18268(function (global){
18269'use strict';
3af2954a 18270
8b095871
IC
18271// compare and isBuffer taken from https://github.com/feross/buffer/blob/680e9e5e488f22aac27599a57dc844a6315928dd/index.js
18272// original notice:
3af2954a 18273
8b095871
IC
18274/*!
18275 * The buffer module from node.js, for the browser.
18276 *
18277 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
18278 * @license MIT
18279 */
18280function compare(a, b) {
18281 if (a === b) {
18282 return 0;
18283 }
3af2954a 18284
8b095871
IC
18285 var x = a.length;
18286 var y = b.length;
3af2954a 18287
8b095871
IC
18288 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
18289 if (a[i] !== b[i]) {
18290 x = a[i];
18291 y = b[i];
18292 break;
18293 }
18294 }
3af2954a 18295
8b095871
IC
18296 if (x < y) {
18297 return -1;
18298 }
18299 if (y < x) {
18300 return 1;
18301 }
18302 return 0;
ab78acc6 18303}
8b095871
IC
18304function isBuffer(b) {
18305 if (global.Buffer && typeof global.Buffer.isBuffer === 'function') {
18306 return global.Buffer.isBuffer(b);
18307 }
18308 return !!(b != null && b._isBuffer);
ab78acc6 18309}
3af2954a 18310
8b095871
IC
18311// based on node assert, original notice:
18312
18313// http://wiki.commonjs.org/wiki/Unit_Testing/1.0
18314//
18315// THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!
18316//
18317// Originally from narwhal.js (http://narwhaljs.org)
18318// Copyright (c) 2009 Thomas Robinson <280north.com>
18319//
18320// Permission is hereby granted, free of charge, to any person obtaining a copy
18321// of this software and associated documentation files (the 'Software'), to
18322// deal in the Software without restriction, including without limitation the
18323// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
18324// sell copies of the Software, and to permit persons to whom the Software is
18325// furnished to do so, subject to the following conditions:
18326//
18327// The above copyright notice and this permission notice shall be included in
18328// all copies or substantial portions of the Software.
18329//
18330// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18331// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18332// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18333// AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
18334// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
18335// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
18336
18337var util = require('util/');
18338var hasOwn = Object.prototype.hasOwnProperty;
18339var pSlice = Array.prototype.slice;
18340var functionsHaveNames = (function () {
18341 return function foo() {}.name === 'foo';
18342}());
18343function pToString (obj) {
18344 return Object.prototype.toString.call(obj);
18345}
18346function isView(arrbuf) {
18347 if (isBuffer(arrbuf)) {
18348 return false;
ab78acc6 18349 }
8b095871
IC
18350 if (typeof global.ArrayBuffer !== 'function') {
18351 return false;
18352 }
18353 if (typeof ArrayBuffer.isView === 'function') {
18354 return ArrayBuffer.isView(arrbuf);
18355 }
18356 if (!arrbuf) {
18357 return false;
18358 }
18359 if (arrbuf instanceof DataView) {
18360 return true;
18361 }
18362 if (arrbuf.buffer && arrbuf.buffer instanceof ArrayBuffer) {
18363 return true;
18364 }
18365 return false;
ab78acc6 18366}
8b095871
IC
18367// 1. The assert module provides functions that throw
18368// AssertionError's when particular conditions are not met. The
18369// assert module must conform to the following interface.
3af2954a 18370
8b095871 18371var assert = module.exports = ok;
3af2954a 18372
8b095871
IC
18373// 2. The AssertionError is defined in assert.
18374// new assert.AssertionError({ message: message,
18375// actual: actual,
18376// expected: expected })
18377
18378var regex = /\s*function\s+([^\(\s]*)\s*/;
18379// based on https://github.com/ljharb/function.prototype.name/blob/adeeeec8bfcc6068b187d7d9fb3d5bb1d3a30899/implementation.js
18380function getName(func) {
18381 if (!util.isFunction(func)) {
18382 return;
18383 }
18384 if (functionsHaveNames) {
18385 return func.name;
18386 }
18387 var str = func.toString();
18388 var match = str.match(regex);
18389 return match && match[1];
ab78acc6 18390}
8b095871
IC
18391assert.AssertionError = function AssertionError(options) {
18392 this.name = 'AssertionError';
18393 this.actual = options.actual;
18394 this.expected = options.expected;
18395 this.operator = options.operator;
18396 if (options.message) {
18397 this.message = options.message;
18398 this.generatedMessage = false;
18399 } else {
18400 this.message = getMessage(this);
18401 this.generatedMessage = true;
18402 }
18403 var stackStartFunction = options.stackStartFunction || fail;
18404 if (Error.captureStackTrace) {
18405 Error.captureStackTrace(this, stackStartFunction);
18406 } else {
18407 // non v8 browsers so we can have a stacktrace
18408 var err = new Error();
18409 if (err.stack) {
18410 var out = err.stack;
18411
18412 // try to strip useless frames
18413 var fn_name = getName(stackStartFunction);
18414 var idx = out.indexOf('\n' + fn_name);
18415 if (idx >= 0) {
18416 // once we have located the function frame
18417 // we need to strip out everything before it (and its line)
18418 var next_line = out.indexOf('\n', idx + 1);
18419 out = out.substring(next_line + 1);
18420 }
3af2954a 18421
8b095871
IC
18422 this.stack = out;
18423 }
18424 }
18425};
3af2954a 18426
8b095871
IC
18427// assert.AssertionError instanceof Error
18428util.inherits(assert.AssertionError, Error);
3af2954a 18429
8b095871
IC
18430function truncate(s, n) {
18431 if (typeof s === 'string') {
18432 return s.length < n ? s : s.slice(0, n);
18433 } else {
18434 return s;
3af2954a 18435 }
ab78acc6 18436}
8b095871
IC
18437function inspect(something) {
18438 if (functionsHaveNames || !util.isFunction(something)) {
18439 return util.inspect(something);
18440 }
18441 var rawname = getName(something);
18442 var name = rawname ? ': ' + rawname : '';
18443 return '[Function' + name + ']';
18444}
18445function getMessage(self) {
18446 return truncate(inspect(self.actual), 128) + ' ' +
18447 self.operator + ' ' +
18448 truncate(inspect(self.expected), 128);
ab78acc6 18449}
3af2954a 18450
8b095871
IC
18451// At present only the three keys mentioned above are used and
18452// understood by the spec. Implementations or sub modules can pass
18453// other keys to the AssertionError's constructor - they will be
18454// ignored.
3af2954a 18455
8b095871
IC
18456// 3. All of the following functions must throw an AssertionError
18457// when a corresponding condition is not met, with a message that
18458// may be undefined if not provided. All assertion methods provide
18459// both the actual and expected values to the assertion error for
18460// display purposes.
3af2954a 18461
8b095871
IC
18462function fail(actual, expected, message, operator, stackStartFunction) {
18463 throw new assert.AssertionError({
18464 message: message,
18465 actual: actual,
18466 expected: expected,
18467 operator: operator,
18468 stackStartFunction: stackStartFunction
18469 });
ab78acc6 18470}
3af2954a 18471
8b095871
IC
18472// EXTENSION! allows for well behaved errors defined elsewhere.
18473assert.fail = fail;
3af2954a 18474
8b095871
IC
18475// 4. Pure assertion tests whether a value is truthy, as determined
18476// by !!guard.
18477// assert.ok(guard, message_opt);
18478// This statement is equivalent to assert.equal(true, !!guard,
18479// message_opt);. To test strictly for the value true, use
18480// assert.strictEqual(true, guard, message_opt);.
3af2954a 18481
8b095871
IC
18482function ok(value, message) {
18483 if (!value) fail(value, true, message, '==', assert.ok);
ab78acc6 18484}
8b095871 18485assert.ok = ok;
3af2954a 18486
8b095871
IC
18487// 5. The equality assertion tests shallow, coercive equality with
18488// ==.
18489// assert.equal(actual, expected, message_opt);
3af2954a 18490
8b095871
IC
18491assert.equal = function equal(actual, expected, message) {
18492 if (actual != expected) fail(actual, expected, message, '==', assert.equal);
18493};
3af2954a 18494
8b095871
IC
18495// 6. The non-equality assertion tests for whether two objects are not equal
18496// with != assert.notEqual(actual, expected, message_opt);
3af2954a 18497
8b095871
IC
18498assert.notEqual = function notEqual(actual, expected, message) {
18499 if (actual == expected) {
18500 fail(actual, expected, message, '!=', assert.notEqual);
ab78acc6 18501 }
8b095871
IC
18502};
18503
18504// 7. The equivalence assertion tests a deep equality relation.
18505// assert.deepEqual(actual, expected, message_opt);
18506
18507assert.deepEqual = function deepEqual(actual, expected, message) {
18508 if (!_deepEqual(actual, expected, false)) {
18509 fail(actual, expected, message, 'deepEqual', assert.deepEqual);
ab78acc6 18510 }
8b095871 18511};
3af2954a 18512
8b095871
IC
18513assert.deepStrictEqual = function deepStrictEqual(actual, expected, message) {
18514 if (!_deepEqual(actual, expected, true)) {
18515 fail(actual, expected, message, 'deepStrictEqual', assert.deepStrictEqual);
3af2954a 18516 }
8b095871
IC
18517};
18518
18519function _deepEqual(actual, expected, strict, memos) {
18520 // 7.1. All identical values are equivalent, as determined by ===.
18521 if (actual === expected) {
18522 return true;
18523 } else if (isBuffer(actual) && isBuffer(expected)) {
18524 return compare(actual, expected) === 0;
18525
18526 // 7.2. If the expected value is a Date object, the actual value is
18527 // equivalent if it is also a Date object that refers to the same time.
18528 } else if (util.isDate(actual) && util.isDate(expected)) {
18529 return actual.getTime() === expected.getTime();
18530
18531 // 7.3 If the expected value is a RegExp object, the actual value is
18532 // equivalent if it is also a RegExp object with the same source and
18533 // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).
18534 } else if (util.isRegExp(actual) && util.isRegExp(expected)) {
18535 return actual.source === expected.source &&
18536 actual.global === expected.global &&
18537 actual.multiline === expected.multiline &&
18538 actual.lastIndex === expected.lastIndex &&
18539 actual.ignoreCase === expected.ignoreCase;
18540
18541 // 7.4. Other pairs that do not both pass typeof value == 'object',
18542 // equivalence is determined by ==.
18543 } else if ((actual === null || typeof actual !== 'object') &&
18544 (expected === null || typeof expected !== 'object')) {
18545 return strict ? actual === expected : actual == expected;
18546
18547 // If both values are instances of typed arrays, wrap their underlying
18548 // ArrayBuffers in a Buffer each to increase performance
18549 // This optimization requires the arrays to have the same type as checked by
18550 // Object.prototype.toString (aka pToString). Never perform binary
18551 // comparisons for Float*Arrays, though, since e.g. +0 === -0 but their
18552 // bit patterns are not identical.
18553 } else if (isView(actual) && isView(expected) &&
18554 pToString(actual) === pToString(expected) &&
18555 !(actual instanceof Float32Array ||
18556 actual instanceof Float64Array)) {
18557 return compare(new Uint8Array(actual.buffer),
18558 new Uint8Array(expected.buffer)) === 0;
18559
18560 // 7.5 For all other Object pairs, including Array objects, equivalence is
18561 // determined by having the same number of owned properties (as verified
18562 // with Object.prototype.hasOwnProperty.call), the same set of keys
18563 // (although not necessarily the same order), equivalent values for every
18564 // corresponding key, and an identical 'prototype' property. Note: this
18565 // accounts for both named and indexed properties on Arrays.
18566 } else if (isBuffer(actual) !== isBuffer(expected)) {
18567 return false;
18568 } else {
18569 memos = memos || {actual: [], expected: []};
3af2954a 18570
8b095871
IC
18571 var actualIndex = memos.actual.indexOf(actual);
18572 if (actualIndex !== -1) {
18573 if (actualIndex === memos.expected.indexOf(expected)) {
18574 return true;
ab78acc6 18575 }
3af2954a 18576 }
8b095871
IC
18577
18578 memos.actual.push(actual);
18579 memos.expected.push(expected);
18580
18581 return objEquiv(actual, expected, strict, memos);
3af2954a 18582 }
ab78acc6 18583}
3af2954a 18584
8b095871
IC
18585function isArguments(object) {
18586 return Object.prototype.toString.call(object) == '[object Arguments]';
ab78acc6 18587}
3af2954a 18588
8b095871
IC
18589function objEquiv(a, b, strict, actualVisitedObjects) {
18590 if (a === null || a === undefined || b === null || b === undefined)
18591 return false;
18592 // if one is a primitive, the other must be same
18593 if (util.isPrimitive(a) || util.isPrimitive(b))
18594 return a === b;
18595 if (strict && Object.getPrototypeOf(a) !== Object.getPrototypeOf(b))
18596 return false;
18597 var aIsArgs = isArguments(a);
18598 var bIsArgs = isArguments(b);
18599 if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))
18600 return false;
18601 if (aIsArgs) {
18602 a = pSlice.call(a);
18603 b = pSlice.call(b);
18604 return _deepEqual(a, b, strict);
18605 }
18606 var ka = objectKeys(a);
18607 var kb = objectKeys(b);
18608 var key, i;
18609 // having the same number of owned properties (keys incorporates
18610 // hasOwnProperty)
18611 if (ka.length !== kb.length)
18612 return false;
18613 //the same set of keys (although not necessarily the same order),
18614 ka.sort();
18615 kb.sort();
18616 //~~~cheap key test
18617 for (i = ka.length - 1; i >= 0; i--) {
18618 if (ka[i] !== kb[i])
18619 return false;
18620 }
18621 //equivalent values for every corresponding key, and
18622 //~~~possibly expensive deep test
18623 for (i = ka.length - 1; i >= 0; i--) {
18624 key = ka[i];
18625 if (!_deepEqual(a[key], b[key], strict, actualVisitedObjects))
18626 return false;
18627 }
18628 return true;
ab78acc6 18629}
3af2954a 18630
8b095871
IC
18631// 8. The non-equivalence assertion tests for any deep inequality.
18632// assert.notDeepEqual(actual, expected, message_opt);
3af2954a 18633
8b095871
IC
18634assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
18635 if (_deepEqual(actual, expected, false)) {
18636 fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
3af2954a 18637 }
8b095871 18638};
3af2954a 18639
8b095871
IC
18640assert.notDeepStrictEqual = notDeepStrictEqual;
18641function notDeepStrictEqual(actual, expected, message) {
18642 if (_deepEqual(actual, expected, true)) {
18643 fail(actual, expected, message, 'notDeepStrictEqual', notDeepStrictEqual);
18644 }
ab78acc6 18645}
3af2954a 18646
3af2954a 18647
8b095871
IC
18648// 9. The strict equality assertion tests strict equality, as determined by ===.
18649// assert.strictEqual(actual, expected, message_opt);
3af2954a 18650
8b095871
IC
18651assert.strictEqual = function strictEqual(actual, expected, message) {
18652 if (actual !== expected) {
18653 fail(actual, expected, message, '===', assert.strictEqual);
18654 }
18655};
3af2954a 18656
8b095871
IC
18657// 10. The strict non-equality assertion tests for strict inequality, as
18658// determined by !==. assert.notStrictEqual(actual, expected, message_opt);
3af2954a 18659
8b095871
IC
18660assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
18661 if (actual === expected) {
18662 fail(actual, expected, message, '!==', assert.notStrictEqual);
18663 }
18664};
3af2954a 18665
8b095871
IC
18666function expectedException(actual, expected) {
18667 if (!actual || !expected) {
18668 return false;
18669 }
3af2954a 18670
8b095871
IC
18671 if (Object.prototype.toString.call(expected) == '[object RegExp]') {
18672 return expected.test(actual);
18673 }
3af2954a 18674
8b095871
IC
18675 try {
18676 if (actual instanceof expected) {
18677 return true;
18678 }
18679 } catch (e) {
18680 // Ignore. The instanceof check doesn't work for arrow functions.
18681 }
3af2954a 18682
8b095871
IC
18683 if (Error.isPrototypeOf(expected)) {
18684 return false;
18685 }
18686
18687 return expected.call({}, actual) === true;
ab78acc6 18688}
3af2954a 18689
8b095871
IC
18690function _tryBlock(block) {
18691 var error;
18692 try {
18693 block();
18694 } catch (e) {
18695 error = e;
18696 }
18697 return error;
ab78acc6 18698}
3af2954a 18699
8b095871
IC
18700function _throws(shouldThrow, block, expected, message) {
18701 var actual;
18702
18703 if (typeof block !== 'function') {
18704 throw new TypeError('"block" argument must be a function');
3af2954a 18705 }
8b095871
IC
18706
18707 if (typeof expected === 'string') {
18708 message = expected;
18709 expected = null;
ab78acc6 18710 }
8b095871
IC
18711
18712 actual = _tryBlock(block);
18713
18714 message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
18715 (message ? ' ' + message : '.');
18716
18717 if (shouldThrow && !actual) {
18718 fail(actual, expected, 'Missing expected exception' + message);
ab78acc6 18719 }
8b095871
IC
18720
18721 var userProvidedMessage = typeof message === 'string';
18722 var isUnwantedException = !shouldThrow && util.isError(actual);
18723 var isUnexpectedException = !shouldThrow && actual && !expected;
18724
18725 if ((isUnwantedException &&
18726 userProvidedMessage &&
18727 expectedException(actual, expected)) ||
18728 isUnexpectedException) {
18729 fail(actual, expected, 'Got unwanted exception' + message);
ab78acc6 18730 }
3af2954a 18731
8b095871
IC
18732 if ((shouldThrow && actual && expected &&
18733 !expectedException(actual, expected)) || (!shouldThrow && actual)) {
18734 throw actual;
18735 }
ab78acc6 18736}
3af2954a 18737
8b095871
IC
18738// 11. Expected to throw an error:
18739// assert.throws(block, Error_opt, message_opt);
18740
18741assert.throws = function(block, /*optional*/error, /*optional*/message) {
18742 _throws(true, block, error, message);
18743};
18744
18745// EXTENSION! This is annoying to write outside this module.
18746assert.doesNotThrow = function(block, /*optional*/error, /*optional*/message) {
18747 _throws(false, block, error, message);
18748};
18749
18750assert.ifError = function(err) { if (err) throw err; };
18751
18752var objectKeys = Object.keys || function (obj) {
18753 var keys = [];
18754 for (var key in obj) {
18755 if (hasOwn.call(obj, key)) keys.push(key);
3af2954a 18756 }
8b095871
IC
18757 return keys;
18758};
3af2954a 18759
8b095871
IC
18760}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
18761},{"util/":30}],2:[function(require,module,exports){
18762'use strict'
18763
18764exports.byteLength = byteLength
18765exports.toByteArray = toByteArray
18766exports.fromByteArray = fromByteArray
18767
18768var lookup = []
18769var revLookup = []
18770var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array
18771
18772var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
18773for (var i = 0, len = code.length; i < len; ++i) {
18774 lookup[i] = code[i]
18775 revLookup[code.charCodeAt(i)] = i
18776}
18777
18778revLookup['-'.charCodeAt(0)] = 62
18779revLookup['_'.charCodeAt(0)] = 63
18780
18781function placeHoldersCount (b64) {
18782 var len = b64.length
18783 if (len % 4 > 0) {
18784 throw new Error('Invalid string. Length must be a multiple of 4')
18785 }
18786
18787 // the number of equal signs (place holders)
18788 // if there are two placeholders, than the two characters before it
18789 // represent one byte
18790 // if there is only one, then the three characters before it represent 2 bytes
18791 // this is just a cheap hack to not do indexOf twice
18792 return b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0
ab78acc6
IC
18793}
18794
8b095871
IC
18795function byteLength (b64) {
18796 // base64 is 4/3 + up to two characters of the original data
18797 return b64.length * 3 / 4 - placeHoldersCount(b64)
ab78acc6 18798}
3af2954a 18799
8b095871
IC
18800function toByteArray (b64) {
18801 var i, j, l, tmp, placeHolders, arr
18802 var len = b64.length
18803 placeHolders = placeHoldersCount(b64)
18804
18805 arr = new Arr(len * 3 / 4 - placeHolders)
18806
18807 // if there are placeholders, only get up to the last complete 4 chars
18808 l = placeHolders > 0 ? len - 4 : len
18809
18810 var L = 0
18811
18812 for (i = 0, j = 0; i < l; i += 4, j += 3) {
18813 tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)]
18814 arr[L++] = (tmp >> 16) & 0xFF
18815 arr[L++] = (tmp >> 8) & 0xFF
18816 arr[L++] = tmp & 0xFF
18817 }
18818
18819 if (placeHolders === 2) {
18820 tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)
18821 arr[L++] = tmp & 0xFF
18822 } else if (placeHolders === 1) {
18823 tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2)
18824 arr[L++] = (tmp >> 8) & 0xFF
18825 arr[L++] = tmp & 0xFF
18826 }
18827
18828 return arr
ab78acc6 18829}
3af2954a 18830
8b095871
IC
18831function tripletToBase64 (num) {
18832 return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]
ab78acc6 18833}
3af2954a 18834
8b095871
IC
18835function encodeChunk (uint8, start, end) {
18836 var tmp
18837 var output = []
18838 for (var i = start; i < end; i += 3) {
18839 tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
18840 output.push(tripletToBase64(tmp))
18841 }
18842 return output.join('')
ab78acc6 18843}
3af2954a 18844
8b095871
IC
18845function fromByteArray (uint8) {
18846 var tmp
18847 var len = uint8.length
18848 var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes
18849 var output = ''
18850 var parts = []
18851 var maxChunkLength = 16383 // must be multiple of 3
18852
18853 // go through the array every three bytes, we'll deal with trailing stuff later
18854 for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {
18855 parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))
18856 }
18857
18858 // pad the end with zeros, but make sure to not forget the extra bytes
18859 if (extraBytes === 1) {
18860 tmp = uint8[len - 1]
18861 output += lookup[tmp >> 2]
18862 output += lookup[(tmp << 4) & 0x3F]
18863 output += '=='
18864 } else if (extraBytes === 2) {
18865 tmp = (uint8[len - 2] << 8) + (uint8[len - 1])
18866 output += lookup[tmp >> 10]
18867 output += lookup[(tmp >> 4) & 0x3F]
18868 output += lookup[(tmp << 2) & 0x3F]
18869 output += '='
18870 }
18871
18872 parts.push(output)
18873
18874 return parts.join('')
ab78acc6 18875}
3af2954a 18876
8b095871 18877},{}],3:[function(require,module,exports){
3af2954a 18878
8b095871
IC
18879},{}],4:[function(require,module,exports){
18880(function (global){
18881'use strict';
18882
18883var buffer = require('buffer');
18884var Buffer = buffer.Buffer;
18885var SlowBuffer = buffer.SlowBuffer;
18886var MAX_LEN = buffer.kMaxLength || 2147483647;
18887exports.alloc = function alloc(size, fill, encoding) {
18888 if (typeof Buffer.alloc === 'function') {
18889 return Buffer.alloc(size, fill, encoding);
ab78acc6 18890 }
8b095871
IC
18891 if (typeof encoding === 'number') {
18892 throw new TypeError('encoding must not be number');
18893 }
18894 if (typeof size !== 'number') {
18895 throw new TypeError('size must be a number');
18896 }
18897 if (size > MAX_LEN) {
18898 throw new RangeError('size is too large');
18899 }
18900 var enc = encoding;
18901 var _fill = fill;
18902 if (_fill === undefined) {
18903 enc = undefined;
18904 _fill = 0;
18905 }
18906 var buf = new Buffer(size);
18907 if (typeof _fill === 'string') {
18908 var fillBuf = new Buffer(_fill, enc);
18909 var flen = fillBuf.length;
18910 var i = -1;
18911 while (++i < size) {
18912 buf[i] = fillBuf[i % flen];
ab78acc6 18913 }
ab78acc6 18914 } else {
8b095871 18915 buf.fill(_fill);
ab78acc6 18916 }
8b095871 18917 return buf;
ab78acc6 18918}
8b095871
IC
18919exports.allocUnsafe = function allocUnsafe(size) {
18920 if (typeof Buffer.allocUnsafe === 'function') {
18921 return Buffer.allocUnsafe(size);
18922 }
18923 if (typeof size !== 'number') {
18924 throw new TypeError('size must be a number');
18925 }
18926 if (size > MAX_LEN) {
18927 throw new RangeError('size is too large');
18928 }
18929 return new Buffer(size);
ab78acc6 18930}
8b095871
IC
18931exports.from = function from(value, encodingOrOffset, length) {
18932 if (typeof Buffer.from === 'function' && (!global.Uint8Array || Uint8Array.from !== Buffer.from)) {
18933 return Buffer.from(value, encodingOrOffset, length);
18934 }
18935 if (typeof value === 'number') {
18936 throw new TypeError('"value" argument must not be a number');
18937 }
18938 if (typeof value === 'string') {
18939 return new Buffer(value, encodingOrOffset);
18940 }
18941 if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {
18942 var offset = encodingOrOffset;
18943 if (arguments.length === 1) {
18944 return new Buffer(value);
18945 }
18946 if (typeof offset === 'undefined') {
18947 offset = 0;
18948 }
18949 var len = length;
18950 if (typeof len === 'undefined') {
18951 len = value.byteLength - offset;
18952 }
18953 if (offset >= value.byteLength) {
18954 throw new RangeError('\'offset\' is out of bounds');
18955 }
18956 if (len > value.byteLength - offset) {
18957 throw new RangeError('\'length\' is out of bounds');
18958 }
18959 return new Buffer(value.slice(offset, offset + len));
18960 }
18961 if (Buffer.isBuffer(value)) {
18962 var out = new Buffer(value.length);
18963 value.copy(out, 0, 0, value.length);
18964 return out;
18965 }
18966 if (value) {
18967 if (Array.isArray(value) || (typeof ArrayBuffer !== 'undefined' && value.buffer instanceof ArrayBuffer) || 'length' in value) {
18968 return new Buffer(value);
18969 }
18970 if (value.type === 'Buffer' && Array.isArray(value.data)) {
18971 return new Buffer(value.data);
18972 }
18973 }
3af2954a 18974
8b095871 18975 throw new TypeError('First argument must be a string, Buffer, ' + 'ArrayBuffer, Array, or array-like object.');
ab78acc6 18976}
8b095871
IC
18977exports.allocUnsafeSlow = function allocUnsafeSlow(size) {
18978 if (typeof Buffer.allocUnsafeSlow === 'function') {
18979 return Buffer.allocUnsafeSlow(size);
18980 }
18981 if (typeof size !== 'number') {
18982 throw new TypeError('size must be a number');
18983 }
18984 if (size >= MAX_LEN) {
18985 throw new RangeError('size is too large');
18986 }
18987 return new SlowBuffer(size);
ab78acc6 18988}
3af2954a 18989
8b095871
IC
18990}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
18991},{"buffer":5}],5:[function(require,module,exports){
18992/*!
18993 * The buffer module from node.js, for the browser.
18994 *
18995 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
18996 * @license MIT
18997 */
18998/* eslint-disable no-proto */
3af2954a 18999
8b095871 19000'use strict'
3af2954a 19001
8b095871
IC
19002var base64 = require('base64-js')
19003var ieee754 = require('ieee754')
3af2954a 19004
8b095871
IC
19005exports.Buffer = Buffer
19006exports.SlowBuffer = SlowBuffer
19007exports.INSPECT_MAX_BYTES = 50
19008
19009var K_MAX_LENGTH = 0x7fffffff
19010exports.kMaxLength = K_MAX_LENGTH
19011
19012/**
19013 * If `Buffer.TYPED_ARRAY_SUPPORT`:
19014 * === true Use Uint8Array implementation (fastest)
19015 * === false Print warning and recommend using `buffer` v4.x which has an Object
19016 * implementation (most compatible, even IE6)
19017 *
19018 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
19019 * Opera 11.6+, iOS 4.2+.
19020 *
19021 * We report that the browser does not support typed arrays if the are not subclassable
19022 * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`
19023 * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support
19024 * for __proto__ and has a buggy typed array implementation.
19025 */
19026Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport()
19027
19028if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&
19029 typeof console.error === 'function') {
19030 console.error(
19031 'This browser lacks typed array (Uint8Array) support which is required by ' +
19032 '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'
19033 )
ab78acc6 19034}
3af2954a 19035
8b095871
IC
19036function typedArraySupport () {
19037 // Can typed array instances can be augmented?
19038 try {
19039 var arr = new Uint8Array(1)
19040 arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}
19041 return arr.foo() === 42
19042 } catch (e) {
19043 return false
19044 }
ab78acc6 19045}
3af2954a 19046
8b095871
IC
19047function createBuffer (length) {
19048 if (length > K_MAX_LENGTH) {
19049 throw new RangeError('Invalid typed array length')
3af2954a 19050 }
8b095871
IC
19051 // Return an augmented `Uint8Array` instance
19052 var buf = new Uint8Array(length)
19053 buf.__proto__ = Buffer.prototype
19054 return buf
ab78acc6 19055}
3af2954a 19056
8b095871
IC
19057/**
19058 * The Buffer constructor returns instances of `Uint8Array` that have their
19059 * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of
19060 * `Uint8Array`, so the returned instances will have all the node `Buffer` methods
19061 * and the `Uint8Array` methods. Square bracket notation works as expected -- it
19062 * returns a single octet.
19063 *
19064 * The `Uint8Array` prototype remains unmodified.
19065 */
3af2954a 19066
8b095871
IC
19067function Buffer (arg, encodingOrOffset, length) {
19068 // Common case.
19069 if (typeof arg === 'number') {
19070 if (typeof encodingOrOffset === 'string') {
19071 throw new Error(
19072 'If encoding is specified then the first argument must be a string'
19073 )
19074 }
19075 return allocUnsafe(arg)
19076 }
19077 return from(arg, encodingOrOffset, length)
ab78acc6 19078}
3af2954a 19079
8b095871
IC
19080// Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97
19081if (typeof Symbol !== 'undefined' && Symbol.species &&
19082 Buffer[Symbol.species] === Buffer) {
19083 Object.defineProperty(Buffer, Symbol.species, {
19084 value: null,
19085 configurable: true,
19086 enumerable: false,
19087 writable: false
19088 })
ab78acc6 19089}
3af2954a 19090
8b095871 19091Buffer.poolSize = 8192 // not used by this implementation
3af2954a 19092
8b095871
IC
19093function from (value, encodingOrOffset, length) {
19094 if (typeof value === 'number') {
19095 throw new TypeError('"value" argument must not be a number')
19096 }
3af2954a 19097
8b095871
IC
19098 if (value instanceof ArrayBuffer) {
19099 return fromArrayBuffer(value, encodingOrOffset, length)
19100 }
3af2954a 19101
8b095871
IC
19102 if (typeof value === 'string') {
19103 return fromString(value, encodingOrOffset)
19104 }
3af2954a 19105
8b095871 19106 return fromObject(value)
ab78acc6 19107}
3af2954a 19108
8b095871
IC
19109/**
19110 * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError
19111 * if value is a number.
19112 * Buffer.from(str[, encoding])
19113 * Buffer.from(array)
19114 * Buffer.from(buffer)
19115 * Buffer.from(arrayBuffer[, byteOffset[, length]])
19116 **/
19117Buffer.from = function (value, encodingOrOffset, length) {
19118 return from(value, encodingOrOffset, length)
ab78acc6 19119}
3af2954a 19120
8b095871
IC
19121// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:
19122// https://github.com/feross/buffer/pull/148
19123Buffer.prototype.__proto__ = Uint8Array.prototype
19124Buffer.__proto__ = Uint8Array
19125
19126function assertSize (size) {
19127 if (typeof size !== 'number') {
19128 throw new TypeError('"size" argument must be a number')
19129 } else if (size < 0) {
19130 throw new RangeError('"size" argument must not be negative')
19131 }
19132}
19133
19134function alloc (size, fill, encoding) {
19135 assertSize(size)
19136 if (size <= 0) {
19137 return createBuffer(size)
3af2954a 19138 }
8b095871
IC
19139 if (fill !== undefined) {
19140 // Only pay attention to encoding if it's a string. This
19141 // prevents accidentally sending in a number that would
19142 // be interpretted as a start offset.
19143 return typeof encoding === 'string'
19144 ? createBuffer(size).fill(fill, encoding)
19145 : createBuffer(size).fill(fill)
19146 }
19147 return createBuffer(size)
ab78acc6 19148}
3af2954a 19149
8b095871
IC
19150/**
19151 * Creates a new filled Buffer instance.
19152 * alloc(size[, fill[, encoding]])
19153 **/
19154Buffer.alloc = function (size, fill, encoding) {
19155 return alloc(size, fill, encoding)
ab78acc6 19156}
3af2954a 19157
8b095871
IC
19158function allocUnsafe (size) {
19159 assertSize(size)
19160 return createBuffer(size < 0 ? 0 : checked(size) | 0)
ab78acc6 19161}
3af2954a 19162
8b095871
IC
19163/**
19164 * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.
19165 * */
19166Buffer.allocUnsafe = function (size) {
19167 return allocUnsafe(size)
19168}
19169/**
19170 * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.
19171 */
19172Buffer.allocUnsafeSlow = function (size) {
19173 return allocUnsafe(size)
ab78acc6 19174}
3af2954a 19175
8b095871
IC
19176function fromString (string, encoding) {
19177 if (typeof encoding !== 'string' || encoding === '') {
19178 encoding = 'utf8'
19179 }
19180
19181 if (!Buffer.isEncoding(encoding)) {
19182 throw new TypeError('"encoding" must be a valid string encoding')
19183 }
19184
19185 var length = byteLength(string, encoding) | 0
19186 var buf = createBuffer(length)
19187
19188 var actual = buf.write(string, encoding)
19189
19190 if (actual !== length) {
19191 // Writing a hex string, for example, that contains invalid characters will
19192 // cause everything after the first invalid character to be ignored. (e.g.
19193 // 'abxxcd' will be treated as 'ab')
19194 buf = buf.slice(0, actual)
19195 }
19196
19197 return buf
ab78acc6 19198}
3af2954a 19199
8b095871
IC
19200function fromArrayLike (array) {
19201 var length = array.length < 0 ? 0 : checked(array.length) | 0
19202 var buf = createBuffer(length)
19203 for (var i = 0; i < length; i += 1) {
19204 buf[i] = array[i] & 255
19205 }
19206 return buf
19207}
3af2954a 19208
8b095871
IC
19209function fromArrayBuffer (array, byteOffset, length) {
19210 if (byteOffset < 0 || array.byteLength < byteOffset) {
19211 throw new RangeError('\'offset\' is out of bounds')
19212 }
3af2954a 19213
8b095871
IC
19214 if (array.byteLength < byteOffset + (length || 0)) {
19215 throw new RangeError('\'length\' is out of bounds')
ab78acc6
IC
19216 }
19217
8b095871
IC
19218 var buf
19219 if (byteOffset === undefined && length === undefined) {
19220 buf = new Uint8Array(array)
19221 } else if (length === undefined) {
19222 buf = new Uint8Array(array, byteOffset)
19223 } else {
19224 buf = new Uint8Array(array, byteOffset, length)
19225 }
3af2954a 19226
8b095871
IC
19227 // Return an augmented `Uint8Array` instance
19228 buf.__proto__ = Buffer.prototype
19229 return buf
19230}
19231
19232function fromObject (obj) {
19233 if (Buffer.isBuffer(obj)) {
19234 var len = checked(obj.length) | 0
19235 var buf = createBuffer(len)
19236
19237 if (buf.length === 0) {
19238 return buf
ab78acc6 19239 }
8b095871
IC
19240
19241 obj.copy(buf, 0, 0, len)
19242 return buf
19243 }
19244
19245 if (obj) {
19246 if (ArrayBuffer.isView(obj) || 'length' in obj) {
19247 if (typeof obj.length !== 'number' || isnan(obj.length)) {
19248 return createBuffer(0)
ab78acc6 19249 }
8b095871 19250 return fromArrayLike(obj)
ab78acc6 19251 }
3af2954a 19252
8b095871
IC
19253 if (obj.type === 'Buffer' && Array.isArray(obj.data)) {
19254 return fromArrayLike(obj.data)
3af2954a
IC
19255 }
19256 }
8b095871
IC
19257
19258 throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')
ab78acc6 19259}
3af2954a 19260
8b095871
IC
19261function checked (length) {
19262 // Note: cannot use `length < K_MAX_LENGTH` here because that fails when
19263 // length is NaN (which is otherwise coerced to zero.)
19264 if (length >= K_MAX_LENGTH) {
19265 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
19266 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')
ab78acc6 19267 }
8b095871
IC
19268 return length | 0
19269}
19270
19271function SlowBuffer (length) {
19272 if (+length != length) { // eslint-disable-line eqeqeq
19273 length = 0
3af2954a 19274 }
8b095871 19275 return Buffer.alloc(+length)
ab78acc6 19276}
3af2954a 19277
8b095871
IC
19278Buffer.isBuffer = function isBuffer (b) {
19279 return b != null && b._isBuffer === true
ab78acc6 19280}
3af2954a 19281
8b095871
IC
19282Buffer.compare = function compare (a, b) {
19283 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
19284 throw new TypeError('Arguments must be Buffers')
19285 }
19286
19287 if (a === b) return 0
19288
19289 var x = a.length
19290 var y = b.length
19291
19292 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
19293 if (a[i] !== b[i]) {
19294 x = a[i]
19295 y = b[i]
19296 break
ab78acc6
IC
19297 }
19298 }
8b095871
IC
19299
19300 if (x < y) return -1
19301 if (y < x) return 1
19302 return 0
19303}
19304
19305Buffer.isEncoding = function isEncoding (encoding) {
19306 switch (String(encoding).toLowerCase()) {
19307 case 'hex':
19308 case 'utf8':
19309 case 'utf-8':
19310 case 'ascii':
19311 case 'latin1':
19312 case 'binary':
19313 case 'base64':
19314 case 'ucs2':
19315 case 'ucs-2':
19316 case 'utf16le':
19317 case 'utf-16le':
19318 return true
19319 default:
19320 return false
19321 }
ab78acc6
IC
19322}
19323
8b095871
IC
19324Buffer.concat = function concat (list, length) {
19325 if (!Array.isArray(list)) {
19326 throw new TypeError('"list" argument must be an Array of Buffers')
19327 }
ab78acc6 19328
8b095871
IC
19329 if (list.length === 0) {
19330 return Buffer.alloc(0)
19331 }
ab78acc6 19332
8b095871
IC
19333 var i
19334 if (length === undefined) {
19335 length = 0
19336 for (i = 0; i < list.length; ++i) {
19337 length += list[i].length
19338 }
3af2954a 19339 }
8b095871
IC
19340
19341 var buffer = Buffer.allocUnsafe(length)
19342 var pos = 0
19343 for (i = 0; i < list.length; ++i) {
19344 var buf = list[i]
19345 if (!Buffer.isBuffer(buf)) {
19346 throw new TypeError('"list" argument must be an Array of Buffers')
19347 }
19348 buf.copy(buffer, pos)
19349 pos += buf.length
ab78acc6 19350 }
8b095871 19351 return buffer
ab78acc6
IC
19352}
19353
8b095871
IC
19354function byteLength (string, encoding) {
19355 if (Buffer.isBuffer(string)) {
19356 return string.length
19357 }
19358 if (ArrayBuffer.isView(string) || string instanceof ArrayBuffer) {
19359 return string.byteLength
19360 }
19361 if (typeof string !== 'string') {
19362 string = '' + string
19363 }
19364
19365 var len = string.length
19366 if (len === 0) return 0
19367
19368 // Use a for loop to avoid recursion
19369 var loweredCase = false
19370 for (;;) {
19371 switch (encoding) {
19372 case 'ascii':
19373 case 'latin1':
19374 case 'binary':
19375 return len
19376 case 'utf8':
19377 case 'utf-8':
19378 case undefined:
19379 return utf8ToBytes(string).length
19380 case 'ucs2':
19381 case 'ucs-2':
19382 case 'utf16le':
19383 case 'utf-16le':
19384 return len * 2
19385 case 'hex':
19386 return len >>> 1
19387 case 'base64':
19388 return base64ToBytes(string).length
19389 default:
19390 if (loweredCase) return utf8ToBytes(string).length // assume utf8
19391 encoding = ('' + encoding).toLowerCase()
19392 loweredCase = true
ab78acc6 19393 }
3af2954a 19394 }
ab78acc6 19395}
8b095871 19396Buffer.byteLength = byteLength
3af2954a 19397
8b095871
IC
19398function slowToString (encoding, start, end) {
19399 var loweredCase = false
3af2954a 19400
8b095871
IC
19401 // No need to verify that "this.length <= MAX_UINT32" since it's a read-only
19402 // property of a typed array.
3af2954a 19403
8b095871
IC
19404 // This behaves neither like String nor Uint8Array in that we set start/end
19405 // to their upper/lower bounds if the value passed is out of range.
19406 // undefined is handled specially as per ECMA-262 6th Edition,
19407 // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.
19408 if (start === undefined || start < 0) {
19409 start = 0
19410 }
19411 // Return early if start > this.length. Done here to prevent potential uint32
19412 // coercion fail below.
19413 if (start > this.length) {
19414 return ''
19415 }
3af2954a 19416
8b095871
IC
19417 if (end === undefined || end > this.length) {
19418 end = this.length
19419 }
3af2954a 19420
8b095871
IC
19421 if (end <= 0) {
19422 return ''
19423 }
3af2954a 19424
8b095871
IC
19425 // Force coersion to uint32. This will also coerce falsey/NaN values to 0.
19426 end >>>= 0
19427 start >>>= 0
3af2954a 19428
8b095871
IC
19429 if (end <= start) {
19430 return ''
3af2954a
IC
19431 }
19432
8b095871 19433 if (!encoding) encoding = 'utf8'
3af2954a 19434
8b095871
IC
19435 while (true) {
19436 switch (encoding) {
19437 case 'hex':
19438 return hexSlice(this, start, end)
19439
19440 case 'utf8':
19441 case 'utf-8':
19442 return utf8Slice(this, start, end)
19443
19444 case 'ascii':
19445 return asciiSlice(this, start, end)
19446
19447 case 'latin1':
19448 case 'binary':
19449 return latin1Slice(this, start, end)
19450
19451 case 'base64':
19452 return base64Slice(this, start, end)
19453
19454 case 'ucs2':
19455 case 'ucs-2':
19456 case 'utf16le':
19457 case 'utf-16le':
19458 return utf16leSlice(this, start, end)
19459
19460 default:
19461 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
19462 encoding = (encoding + '').toLowerCase()
19463 loweredCase = true
19464 }
19465 }
ab78acc6 19466}
3af2954a 19467
8b095871
IC
19468// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)
19469// to detect a Buffer instance. It's not possible to use `instanceof Buffer`
19470// reliably in a browserify context because there could be multiple different
19471// copies of the 'buffer' package in use. This method works even for Buffer
19472// instances that were created from another copy of the `buffer` package.
19473// See: https://github.com/feross/buffer/issues/154
19474Buffer.prototype._isBuffer = true
19475
19476function swap (b, n, m) {
19477 var i = b[n]
19478 b[n] = b[m]
19479 b[m] = i
ab78acc6 19480}
3af2954a 19481
8b095871
IC
19482Buffer.prototype.swap16 = function swap16 () {
19483 var len = this.length
19484 if (len % 2 !== 0) {
19485 throw new RangeError('Buffer size must be a multiple of 16-bits')
19486 }
19487 for (var i = 0; i < len; i += 2) {
19488 swap(this, i, i + 1)
19489 }
19490 return this
19491}
3af2954a 19492
8b095871
IC
19493Buffer.prototype.swap32 = function swap32 () {
19494 var len = this.length
19495 if (len % 4 !== 0) {
19496 throw new RangeError('Buffer size must be a multiple of 32-bits')
19497 }
19498 for (var i = 0; i < len; i += 4) {
19499 swap(this, i, i + 3)
19500 swap(this, i + 1, i + 2)
19501 }
19502 return this
19503}
3af2954a 19504
8b095871
IC
19505Buffer.prototype.swap64 = function swap64 () {
19506 var len = this.length
19507 if (len % 8 !== 0) {
19508 throw new RangeError('Buffer size must be a multiple of 64-bits')
3af2954a 19509 }
8b095871
IC
19510 for (var i = 0; i < len; i += 8) {
19511 swap(this, i, i + 7)
19512 swap(this, i + 1, i + 6)
19513 swap(this, i + 2, i + 5)
19514 swap(this, i + 3, i + 4)
19515 }
19516 return this
19517}
3af2954a 19518
8b095871
IC
19519Buffer.prototype.toString = function toString () {
19520 var length = this.length
19521 if (length === 0) return ''
19522 if (arguments.length === 0) return utf8Slice(this, 0, length)
19523 return slowToString.apply(this, arguments)
ab78acc6 19524}
3af2954a 19525
8b095871
IC
19526Buffer.prototype.equals = function equals (b) {
19527 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
19528 if (this === b) return true
19529 return Buffer.compare(this, b) === 0
19530}
3af2954a 19531
8b095871
IC
19532Buffer.prototype.inspect = function inspect () {
19533 var str = ''
19534 var max = exports.INSPECT_MAX_BYTES
19535 if (this.length > 0) {
19536 str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
19537 if (this.length > max) str += ' ... '
19538 }
19539 return '<Buffer ' + str + '>'
ab78acc6 19540}
3af2954a 19541
8b095871
IC
19542Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {
19543 if (!Buffer.isBuffer(target)) {
19544 throw new TypeError('Argument must be a Buffer')
19545 }
3af2954a 19546
8b095871
IC
19547 if (start === undefined) {
19548 start = 0
19549 }
19550 if (end === undefined) {
19551 end = target ? target.length : 0
19552 }
19553 if (thisStart === undefined) {
19554 thisStart = 0
19555 }
19556 if (thisEnd === undefined) {
19557 thisEnd = this.length
19558 }
3af2954a 19559
8b095871
IC
19560 if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {
19561 throw new RangeError('out of range index')
19562 }
3af2954a 19563
8b095871
IC
19564 if (thisStart >= thisEnd && start >= end) {
19565 return 0
19566 }
19567 if (thisStart >= thisEnd) {
19568 return -1
19569 }
19570 if (start >= end) {
19571 return 1
19572 }
3af2954a 19573
8b095871
IC
19574 start >>>= 0
19575 end >>>= 0
19576 thisStart >>>= 0
19577 thisEnd >>>= 0
3af2954a 19578
8b095871 19579 if (this === target) return 0
3af2954a 19580
8b095871
IC
19581 var x = thisEnd - thisStart
19582 var y = end - start
19583 var len = Math.min(x, y)
19584
19585 var thisCopy = this.slice(thisStart, thisEnd)
19586 var targetCopy = target.slice(start, end)
19587
19588 for (var i = 0; i < len; ++i) {
19589 if (thisCopy[i] !== targetCopy[i]) {
19590 x = thisCopy[i]
19591 y = targetCopy[i]
19592 break
3af2954a 19593 }
8b095871
IC
19594 }
19595
19596 if (x < y) return -1
19597 if (y < x) return 1
19598 return 0
ab78acc6 19599}
3af2954a 19600
8b095871
IC
19601// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,
19602// OR the last index of `val` in `buffer` at offset <= `byteOffset`.
ab78acc6 19603//
8b095871
IC
19604// Arguments:
19605// - buffer - a Buffer to search
19606// - val - a string, Buffer, or number
19607// - byteOffset - an index into `buffer`; will be clamped to an int32
19608// - encoding - an optional encoding, relevant is val is a string
19609// - dir - true for indexOf, false for lastIndexOf
19610function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {
19611 // Empty buffer means no match
19612 if (buffer.length === 0) return -1
19613
19614 // Normalize byteOffset
19615 if (typeof byteOffset === 'string') {
19616 encoding = byteOffset
19617 byteOffset = 0
19618 } else if (byteOffset > 0x7fffffff) {
19619 byteOffset = 0x7fffffff
19620 } else if (byteOffset < -0x80000000) {
19621 byteOffset = -0x80000000
19622 }
19623 byteOffset = +byteOffset // Coerce to Number.
19624 if (isNaN(byteOffset)) {
19625 // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer
19626 byteOffset = dir ? 0 : (buffer.length - 1)
19627 }
19628
19629 // Normalize byteOffset: negative offsets start from the end of the buffer
19630 if (byteOffset < 0) byteOffset = buffer.length + byteOffset
19631 if (byteOffset >= buffer.length) {
19632 if (dir) return -1
19633 else byteOffset = buffer.length - 1
19634 } else if (byteOffset < 0) {
19635 if (dir) byteOffset = 0
19636 else return -1
19637 }
19638
19639 // Normalize val
19640 if (typeof val === 'string') {
19641 val = Buffer.from(val, encoding)
19642 }
3af2954a 19643
8b095871
IC
19644 // Finally, search either indexOf (if dir is true) or lastIndexOf
19645 if (Buffer.isBuffer(val)) {
19646 // Special case: looking for empty string/buffer always fails
19647 if (val.length === 0) {
19648 return -1
19649 }
19650 return arrayIndexOf(buffer, val, byteOffset, encoding, dir)
19651 } else if (typeof val === 'number') {
19652 val = val & 0xFF // Search for a byte value [0-255]
19653 if (typeof Uint8Array.prototype.indexOf === 'function') {
19654 if (dir) {
19655 return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)
19656 } else {
19657 return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)
19658 }
19659 }
19660 return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)
19661 }
3af2954a 19662
8b095871
IC
19663 throw new TypeError('val must be string, number or Buffer')
19664}
3af2954a 19665
8b095871
IC
19666function arrayIndexOf (arr, val, byteOffset, encoding, dir) {
19667 var indexSize = 1
19668 var arrLength = arr.length
19669 var valLength = val.length
3af2954a 19670
8b095871
IC
19671 if (encoding !== undefined) {
19672 encoding = String(encoding).toLowerCase()
19673 if (encoding === 'ucs2' || encoding === 'ucs-2' ||
19674 encoding === 'utf16le' || encoding === 'utf-16le') {
19675 if (arr.length < 2 || val.length < 2) {
19676 return -1
19677 }
19678 indexSize = 2
19679 arrLength /= 2
19680 valLength /= 2
19681 byteOffset /= 2
19682 }
19683 }
3af2954a 19684
8b095871
IC
19685 function read (buf, i) {
19686 if (indexSize === 1) {
19687 return buf[i]
19688 } else {
19689 return buf.readUInt16BE(i * indexSize)
19690 }
19691 }
3af2954a 19692
8b095871
IC
19693 var i
19694 if (dir) {
19695 var foundIndex = -1
19696 for (i = byteOffset; i < arrLength; i++) {
19697 if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {
19698 if (foundIndex === -1) foundIndex = i
19699 if (i - foundIndex + 1 === valLength) return foundIndex * indexSize
19700 } else {
19701 if (foundIndex !== -1) i -= i - foundIndex
19702 foundIndex = -1
19703 }
19704 }
ab78acc6 19705 } else {
8b095871
IC
19706 if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength
19707 for (i = byteOffset; i >= 0; i--) {
19708 var found = true
19709 for (var j = 0; j < valLength; j++) {
19710 if (read(arr, i + j) !== read(val, j)) {
19711 found = false
19712 break
19713 }
19714 }
19715 if (found) return i
19716 }
ab78acc6 19717 }
3af2954a 19718
8b095871
IC
19719 return -1
19720}
3af2954a 19721
8b095871
IC
19722Buffer.prototype.includes = function includes (val, byteOffset, encoding) {
19723 return this.indexOf(val, byteOffset, encoding) !== -1
19724}
19725
19726Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {
19727 return bidirectionalIndexOf(this, val, byteOffset, encoding, true)
19728}
3af2954a 19729
8b095871
IC
19730Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {
19731 return bidirectionalIndexOf(this, val, byteOffset, encoding, false)
19732}
19733
19734function hexWrite (buf, string, offset, length) {
19735 offset = Number(offset) || 0
19736 var remaining = buf.length - offset
19737 if (!length) {
19738 length = remaining
19739 } else {
19740 length = Number(length)
19741 if (length > remaining) {
19742 length = remaining
3af2954a 19743 }
3af2954a
IC
19744 }
19745
8b095871
IC
19746 // must be an even number of digits
19747 var strLen = string.length
19748 if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')
3af2954a 19749
8b095871
IC
19750 if (length > strLen / 2) {
19751 length = strLen / 2
ab78acc6 19752 }
8b095871
IC
19753 for (var i = 0; i < length; ++i) {
19754 var parsed = parseInt(string.substr(i * 2, 2), 16)
19755 if (isNaN(parsed)) return i
19756 buf[offset + i] = parsed
ab78acc6 19757 }
8b095871 19758 return i
ab78acc6 19759}
3af2954a 19760
8b095871
IC
19761function utf8Write (buf, string, offset, length) {
19762 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
ab78acc6 19763}
3af2954a 19764
8b095871
IC
19765function asciiWrite (buf, string, offset, length) {
19766 return blitBuffer(asciiToBytes(string), buf, offset, length)
ab78acc6 19767}
3af2954a 19768
8b095871
IC
19769function latin1Write (buf, string, offset, length) {
19770 return asciiWrite(buf, string, offset, length)
ab78acc6 19771}
3af2954a 19772
8b095871
IC
19773function base64Write (buf, string, offset, length) {
19774 return blitBuffer(base64ToBytes(string), buf, offset, length)
ab78acc6 19775}
3af2954a 19776
8b095871
IC
19777function ucs2Write (buf, string, offset, length) {
19778 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
19779}
3af2954a 19780
8b095871
IC
19781Buffer.prototype.write = function write (string, offset, length, encoding) {
19782 // Buffer#write(string)
19783 if (offset === undefined) {
19784 encoding = 'utf8'
19785 length = this.length
19786 offset = 0
19787 // Buffer#write(string, encoding)
19788 } else if (length === undefined && typeof offset === 'string') {
19789 encoding = offset
19790 length = this.length
19791 offset = 0
19792 // Buffer#write(string, offset[, length][, encoding])
19793 } else if (isFinite(offset)) {
19794 offset = offset >>> 0
19795 if (isFinite(length)) {
19796 length = length >>> 0
19797 if (encoding === undefined) encoding = 'utf8'
19798 } else {
19799 encoding = length
19800 length = undefined
19801 }
19802 } else {
19803 throw new Error(
19804 'Buffer.write(string, encoding, offset[, length]) is no longer supported'
19805 )
3af2954a
IC
19806 }
19807
8b095871
IC
19808 var remaining = this.length - offset
19809 if (length === undefined || length > remaining) length = remaining
3af2954a 19810
8b095871
IC
19811 if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
19812 throw new RangeError('Attempt to write outside buffer bounds')
ab78acc6 19813 }
3af2954a 19814
8b095871 19815 if (!encoding) encoding = 'utf8'
3af2954a 19816
8b095871
IC
19817 var loweredCase = false
19818 for (;;) {
19819 switch (encoding) {
19820 case 'hex':
19821 return hexWrite(this, string, offset, length)
3af2954a 19822
8b095871
IC
19823 case 'utf8':
19824 case 'utf-8':
19825 return utf8Write(this, string, offset, length)
3af2954a 19826
8b095871
IC
19827 case 'ascii':
19828 return asciiWrite(this, string, offset, length)
3af2954a 19829
8b095871
IC
19830 case 'latin1':
19831 case 'binary':
19832 return latin1Write(this, string, offset, length)
3af2954a 19833
8b095871
IC
19834 case 'base64':
19835 // Warning: maxLength not taken into account in base64Write
19836 return base64Write(this, string, offset, length)
3af2954a 19837
8b095871
IC
19838 case 'ucs2':
19839 case 'ucs-2':
19840 case 'utf16le':
19841 case 'utf-16le':
19842 return ucs2Write(this, string, offset, length)
3af2954a 19843
8b095871
IC
19844 default:
19845 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
19846 encoding = ('' + encoding).toLowerCase()
19847 loweredCase = true
19848 }
3af2954a 19849 }
ab78acc6 19850}
3af2954a 19851
8b095871
IC
19852Buffer.prototype.toJSON = function toJSON () {
19853 return {
19854 type: 'Buffer',
19855 data: Array.prototype.slice.call(this._arr || this, 0)
3af2954a 19856 }
ab78acc6
IC
19857}
19858
8b095871
IC
19859function base64Slice (buf, start, end) {
19860 if (start === 0 && end === buf.length) {
19861 return base64.fromByteArray(buf)
19862 } else {
19863 return base64.fromByteArray(buf.slice(start, end))
3af2954a 19864 }
8b095871 19865}
3af2954a 19866
8b095871
IC
19867function utf8Slice (buf, start, end) {
19868 end = Math.min(buf.length, end)
19869 var res = []
3af2954a 19870
8b095871
IC
19871 var i = start
19872 while (i < end) {
19873 var firstByte = buf[i]
19874 var codePoint = null
19875 var bytesPerSequence = (firstByte > 0xEF) ? 4
19876 : (firstByte > 0xDF) ? 3
19877 : (firstByte > 0xBF) ? 2
19878 : 1
3af2954a 19879
8b095871
IC
19880 if (i + bytesPerSequence <= end) {
19881 var secondByte, thirdByte, fourthByte, tempCodePoint
3af2954a 19882
8b095871
IC
19883 switch (bytesPerSequence) {
19884 case 1:
19885 if (firstByte < 0x80) {
19886 codePoint = firstByte
19887 }
19888 break
19889 case 2:
19890 secondByte = buf[i + 1]
19891 if ((secondByte & 0xC0) === 0x80) {
19892 tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
19893 if (tempCodePoint > 0x7F) {
19894 codePoint = tempCodePoint
19895 }
19896 }
19897 break
19898 case 3:
19899 secondByte = buf[i + 1]
19900 thirdByte = buf[i + 2]
19901 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
19902 tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
19903 if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
19904 codePoint = tempCodePoint
19905 }
19906 }
19907 break
19908 case 4:
19909 secondByte = buf[i + 1]
19910 thirdByte = buf[i + 2]
19911 fourthByte = buf[i + 3]
19912 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
19913 tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
19914 if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
19915 codePoint = tempCodePoint
19916 }
19917 }
19918 }
19919 }
3af2954a 19920
8b095871
IC
19921 if (codePoint === null) {
19922 // we did not generate a valid codePoint so insert a
19923 // replacement char (U+FFFD) and advance only 1 byte
19924 codePoint = 0xFFFD
19925 bytesPerSequence = 1
19926 } else if (codePoint > 0xFFFF) {
19927 // encode to utf16 (surrogate pair dance)
19928 codePoint -= 0x10000
19929 res.push(codePoint >>> 10 & 0x3FF | 0xD800)
19930 codePoint = 0xDC00 | codePoint & 0x3FF
19931 }
19932
19933 res.push(codePoint)
19934 i += bytesPerSequence
3af2954a
IC
19935 }
19936
8b095871 19937 return decodeCodePointsArray(res)
ab78acc6 19938}
3af2954a 19939
8b095871
IC
19940// Based on http://stackoverflow.com/a/22747272/680742, the browser with
19941// the lowest limit is Chrome, with 0x10000 args.
19942// We go 1 magnitude less, for safety
19943var MAX_ARGUMENTS_LENGTH = 0x1000
3af2954a 19944
8b095871
IC
19945function decodeCodePointsArray (codePoints) {
19946 var len = codePoints.length
19947 if (len <= MAX_ARGUMENTS_LENGTH) {
19948 return String.fromCharCode.apply(String, codePoints) // avoid extra slice()
3af2954a
IC
19949 }
19950
8b095871
IC
19951 // Decode in chunks to avoid "call stack size exceeded".
19952 var res = ''
19953 var i = 0
19954 while (i < len) {
19955 res += String.fromCharCode.apply(
19956 String,
19957 codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)
19958 )
3af2954a 19959 }
8b095871
IC
19960 return res
19961}
3af2954a 19962
8b095871
IC
19963function asciiSlice (buf, start, end) {
19964 var ret = ''
19965 end = Math.min(buf.length, end)
3af2954a 19966
8b095871
IC
19967 for (var i = start; i < end; ++i) {
19968 ret += String.fromCharCode(buf[i] & 0x7F)
3af2954a 19969 }
8b095871
IC
19970 return ret
19971}
3af2954a 19972
8b095871
IC
19973function latin1Slice (buf, start, end) {
19974 var ret = ''
19975 end = Math.min(buf.length, end)
3af2954a 19976
8b095871
IC
19977 for (var i = start; i < end; ++i) {
19978 ret += String.fromCharCode(buf[i])
3af2954a 19979 }
8b095871 19980 return ret
ab78acc6 19981}
3af2954a 19982
8b095871
IC
19983function hexSlice (buf, start, end) {
19984 var len = buf.length
3af2954a 19985
8b095871
IC
19986 if (!start || start < 0) start = 0
19987 if (!end || end < 0 || end > len) end = len
3af2954a 19988
8b095871
IC
19989 var out = ''
19990 for (var i = start; i < end; ++i) {
19991 out += toHex(buf[i])
3af2954a 19992 }
8b095871
IC
19993 return out
19994}
3af2954a 19995
8b095871
IC
19996function utf16leSlice (buf, start, end) {
19997 var bytes = buf.slice(start, end)
19998 var res = ''
19999 for (var i = 0; i < bytes.length; i += 2) {
20000 res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))
20001 }
20002 return res
20003}
3af2954a 20004
8b095871
IC
20005Buffer.prototype.slice = function slice (start, end) {
20006 var len = this.length
20007 start = ~~start
20008 end = end === undefined ? len : ~~end
3af2954a 20009
8b095871
IC
20010 if (start < 0) {
20011 start += len
20012 if (start < 0) start = 0
20013 } else if (start > len) {
20014 start = len
20015 }
3af2954a 20016
8b095871
IC
20017 if (end < 0) {
20018 end += len
20019 if (end < 0) end = 0
20020 } else if (end > len) {
20021 end = len
20022 }
3af2954a 20023
8b095871 20024 if (end < start) end = start
3af2954a 20025
8b095871
IC
20026 var newBuf = this.subarray(start, end)
20027 // Return an augmented `Uint8Array` instance
20028 newBuf.__proto__ = Buffer.prototype
20029 return newBuf
20030}
3af2954a 20031
8b095871
IC
20032/*
20033 * Need to make sure that buffer isn't trying to write out of bounds.
ab78acc6 20034 */
8b095871
IC
20035function checkOffset (offset, ext, length) {
20036 if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
20037 if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
ab78acc6 20038}
3af2954a 20039
8b095871
IC
20040Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
20041 offset = offset >>> 0
20042 byteLength = byteLength >>> 0
20043 if (!noAssert) checkOffset(offset, byteLength, this.length)
20044
20045 var val = this[offset]
20046 var mul = 1
20047 var i = 0
20048 while (++i < byteLength && (mul *= 0x100)) {
20049 val += this[offset + i] * mul
3af2954a
IC
20050 }
20051
8b095871
IC
20052 return val
20053}
3af2954a 20054
8b095871
IC
20055Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
20056 offset = offset >>> 0
20057 byteLength = byteLength >>> 0
20058 if (!noAssert) {
20059 checkOffset(offset, byteLength, this.length)
ab78acc6 20060 }
3af2954a 20061
8b095871
IC
20062 var val = this[offset + --byteLength]
20063 var mul = 1
20064 while (byteLength > 0 && (mul *= 0x100)) {
20065 val += this[offset + --byteLength] * mul
ab78acc6 20066 }
3af2954a 20067
8b095871 20068 return val
ab78acc6 20069}
3af2954a 20070
8b095871
IC
20071Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
20072 offset = offset >>> 0
20073 if (!noAssert) checkOffset(offset, 1, this.length)
20074 return this[offset]
ab78acc6 20075}
3af2954a 20076
8b095871
IC
20077Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
20078 offset = offset >>> 0
20079 if (!noAssert) checkOffset(offset, 2, this.length)
20080 return this[offset] | (this[offset + 1] << 8)
20081}
3af2954a 20082
8b095871
IC
20083Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
20084 offset = offset >>> 0
20085 if (!noAssert) checkOffset(offset, 2, this.length)
20086 return (this[offset] << 8) | this[offset + 1]
20087}
3af2954a 20088
8b095871
IC
20089Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
20090 offset = offset >>> 0
20091 if (!noAssert) checkOffset(offset, 4, this.length)
20092
20093 return ((this[offset]) |
20094 (this[offset + 1] << 8) |
20095 (this[offset + 2] << 16)) +
20096 (this[offset + 3] * 0x1000000)
ab78acc6 20097}
3af2954a 20098
8b095871
IC
20099Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
20100 offset = offset >>> 0
20101 if (!noAssert) checkOffset(offset, 4, this.length)
3af2954a 20102
8b095871
IC
20103 return (this[offset] * 0x1000000) +
20104 ((this[offset + 1] << 16) |
20105 (this[offset + 2] << 8) |
20106 this[offset + 3])
20107}
3af2954a 20108
8b095871
IC
20109Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
20110 offset = offset >>> 0
20111 byteLength = byteLength >>> 0
20112 if (!noAssert) checkOffset(offset, byteLength, this.length)
3af2954a 20113
8b095871
IC
20114 var val = this[offset]
20115 var mul = 1
20116 var i = 0
20117 while (++i < byteLength && (mul *= 0x100)) {
20118 val += this[offset + i] * mul
3af2954a 20119 }
8b095871 20120 mul *= 0x80
3af2954a 20121
8b095871 20122 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
3af2954a 20123
8b095871 20124 return val
ab78acc6 20125}
3af2954a 20126
8b095871
IC
20127Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
20128 offset = offset >>> 0
20129 byteLength = byteLength >>> 0
20130 if (!noAssert) checkOffset(offset, byteLength, this.length)
3af2954a 20131
8b095871
IC
20132 var i = byteLength
20133 var mul = 1
20134 var val = this[offset + --i]
20135 while (i > 0 && (mul *= 0x100)) {
20136 val += this[offset + --i] * mul
3af2954a 20137 }
8b095871 20138 mul *= 0x80
3af2954a 20139
8b095871
IC
20140 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
20141
20142 return val
ab78acc6 20143}
3af2954a 20144
8b095871
IC
20145Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
20146 offset = offset >>> 0
20147 if (!noAssert) checkOffset(offset, 1, this.length)
20148 if (!(this[offset] & 0x80)) return (this[offset])
20149 return ((0xff - this[offset] + 1) * -1)
ab78acc6 20150}
3af2954a 20151
8b095871
IC
20152Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
20153 offset = offset >>> 0
20154 if (!noAssert) checkOffset(offset, 2, this.length)
20155 var val = this[offset] | (this[offset + 1] << 8)
20156 return (val & 0x8000) ? val | 0xFFFF0000 : val
ab78acc6 20157}
3af2954a 20158
8b095871
IC
20159Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
20160 offset = offset >>> 0
20161 if (!noAssert) checkOffset(offset, 2, this.length)
20162 var val = this[offset + 1] | (this[offset] << 8)
20163 return (val & 0x8000) ? val | 0xFFFF0000 : val
20164}
ab78acc6 20165
8b095871
IC
20166Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
20167 offset = offset >>> 0
20168 if (!noAssert) checkOffset(offset, 4, this.length)
3af2954a 20169
8b095871
IC
20170 return (this[offset]) |
20171 (this[offset + 1] << 8) |
20172 (this[offset + 2] << 16) |
20173 (this[offset + 3] << 24)
ab78acc6 20174}
3af2954a 20175
8b095871
IC
20176Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
20177 offset = offset >>> 0
20178 if (!noAssert) checkOffset(offset, 4, this.length)
3af2954a 20179
8b095871
IC
20180 return (this[offset] << 24) |
20181 (this[offset + 1] << 16) |
20182 (this[offset + 2] << 8) |
20183 (this[offset + 3])
20184}
3af2954a 20185
8b095871
IC
20186Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
20187 offset = offset >>> 0
20188 if (!noAssert) checkOffset(offset, 4, this.length)
20189 return ieee754.read(this, offset, true, 23, 4)
ab78acc6 20190}
3af2954a 20191
8b095871
IC
20192Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
20193 offset = offset >>> 0
20194 if (!noAssert) checkOffset(offset, 4, this.length)
20195 return ieee754.read(this, offset, false, 23, 4)
ab78acc6 20196}
3af2954a 20197
8b095871
IC
20198Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
20199 offset = offset >>> 0
20200 if (!noAssert) checkOffset(offset, 8, this.length)
20201 return ieee754.read(this, offset, true, 52, 8)
20202}
3af2954a 20203
8b095871
IC
20204Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
20205 offset = offset >>> 0
20206 if (!noAssert) checkOffset(offset, 8, this.length)
20207 return ieee754.read(this, offset, false, 52, 8)
ab78acc6 20208}
3af2954a 20209
8b095871
IC
20210function checkInt (buf, value, offset, ext, max, min) {
20211 if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance')
20212 if (value > max || value < min) throw new RangeError('"value" argument is out of bounds')
20213 if (offset + ext > buf.length) throw new RangeError('Index out of range')
ab78acc6 20214}
3af2954a 20215
8b095871
IC
20216Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
20217 value = +value
20218 offset = offset >>> 0
20219 byteLength = byteLength >>> 0
20220 if (!noAssert) {
20221 var maxBytes = Math.pow(2, 8 * byteLength) - 1
20222 checkInt(this, value, offset, byteLength, maxBytes, 0)
3af2954a
IC
20223 }
20224
8b095871 20225 var mul = 1
ab78acc6 20226 var i = 0
8b095871
IC
20227 this[offset] = value & 0xFF
20228 while (++i < byteLength && (mul *= 0x100)) {
20229 this[offset + i] = (value / mul) & 0xFF
20230 }
3af2954a 20231
8b095871
IC
20232 return offset + byteLength
20233}
20234
20235Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
20236 value = +value
20237 offset = offset >>> 0
20238 byteLength = byteLength >>> 0
20239 if (!noAssert) {
20240 var maxBytes = Math.pow(2, 8 * byteLength) - 1
20241 checkInt(this, value, offset, byteLength, maxBytes, 0)
ab78acc6 20242 }
3af2954a 20243
8b095871
IC
20244 var i = byteLength - 1
20245 var mul = 1
20246 this[offset + i] = value & 0xFF
20247 while (--i >= 0 && (mul *= 0x100)) {
20248 this[offset + i] = (value / mul) & 0xFF
ab78acc6 20249 }
3af2954a 20250
8b095871
IC
20251 return offset + byteLength
20252}
20253
20254Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
20255 value = +value
20256 offset = offset >>> 0
20257 if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
20258 this[offset] = (value & 0xff)
20259 return offset + 1
20260}
20261
20262Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
20263 value = +value
20264 offset = offset >>> 0
20265 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
20266 this[offset] = (value & 0xff)
20267 this[offset + 1] = (value >>> 8)
20268 return offset + 2
20269}
20270
20271Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
20272 value = +value
20273 offset = offset >>> 0
20274 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
20275 this[offset] = (value >>> 8)
20276 this[offset + 1] = (value & 0xff)
20277 return offset + 2
ab78acc6 20278}
3af2954a 20279
8b095871
IC
20280Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
20281 value = +value
20282 offset = offset >>> 0
20283 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
20284 this[offset + 3] = (value >>> 24)
20285 this[offset + 2] = (value >>> 16)
20286 this[offset + 1] = (value >>> 8)
20287 this[offset] = (value & 0xff)
20288 return offset + 4
ab78acc6 20289}
3af2954a 20290
8b095871
IC
20291Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
20292 value = +value
20293 offset = offset >>> 0
20294 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
20295 this[offset] = (value >>> 24)
20296 this[offset + 1] = (value >>> 16)
20297 this[offset + 2] = (value >>> 8)
20298 this[offset + 3] = (value & 0xff)
20299 return offset + 4
20300}
3af2954a 20301
8b095871
IC
20302Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
20303 value = +value
20304 offset = offset >>> 0
20305 if (!noAssert) {
20306 var limit = Math.pow(2, (8 * byteLength) - 1)
20307
20308 checkInt(this, value, offset, byteLength, limit - 1, -limit)
3af2954a
IC
20309 }
20310
8b095871
IC
20311 var i = 0
20312 var mul = 1
20313 var sub = 0
20314 this[offset] = value & 0xFF
20315 while (++i < byteLength && (mul *= 0x100)) {
20316 if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {
20317 sub = 1
ab78acc6 20318 }
8b095871 20319 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
3af2954a
IC
20320 }
20321
8b095871 20322 return offset + byteLength
ab78acc6 20323}
3af2954a 20324
8b095871
IC
20325Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
20326 value = +value
20327 offset = offset >>> 0
20328 if (!noAssert) {
20329 var limit = Math.pow(2, (8 * byteLength) - 1)
ab78acc6 20330
8b095871
IC
20331 checkInt(this, value, offset, byteLength, limit - 1, -limit)
20332 }
ab78acc6 20333
8b095871
IC
20334 var i = byteLength - 1
20335 var mul = 1
20336 var sub = 0
20337 this[offset + i] = value & 0xFF
20338 while (--i >= 0 && (mul *= 0x100)) {
20339 if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {
20340 sub = 1
3af2954a 20341 }
8b095871 20342 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
3af2954a 20343 }
3af2954a 20344
8b095871
IC
20345 return offset + byteLength
20346}
3af2954a 20347
8b095871
IC
20348Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
20349 value = +value
20350 offset = offset >>> 0
20351 if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
20352 if (value < 0) value = 0xff + value + 1
20353 this[offset] = (value & 0xff)
20354 return offset + 1
20355}
3af2954a 20356
8b095871
IC
20357Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
20358 value = +value
20359 offset = offset >>> 0
20360 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
20361 this[offset] = (value & 0xff)
20362 this[offset + 1] = (value >>> 8)
20363 return offset + 2
20364}
3af2954a 20365
8b095871
IC
20366Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
20367 value = +value
20368 offset = offset >>> 0
20369 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
20370 this[offset] = (value >>> 8)
20371 this[offset + 1] = (value & 0xff)
20372 return offset + 2
20373}
3af2954a 20374
8b095871
IC
20375Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
20376 value = +value
20377 offset = offset >>> 0
20378 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
20379 this[offset] = (value & 0xff)
20380 this[offset + 1] = (value >>> 8)
20381 this[offset + 2] = (value >>> 16)
20382 this[offset + 3] = (value >>> 24)
20383 return offset + 4
20384}
3af2954a 20385
8b095871
IC
20386Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
20387 value = +value
20388 offset = offset >>> 0
20389 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
20390 if (value < 0) value = 0xffffffff + value + 1
20391 this[offset] = (value >>> 24)
20392 this[offset + 1] = (value >>> 16)
20393 this[offset + 2] = (value >>> 8)
20394 this[offset + 3] = (value & 0xff)
20395 return offset + 4
20396}
3af2954a 20397
8b095871
IC
20398function checkIEEE754 (buf, value, offset, ext, max, min) {
20399 if (offset + ext > buf.length) throw new RangeError('Index out of range')
20400 if (offset < 0) throw new RangeError('Index out of range')
20401}
3af2954a 20402
8b095871
IC
20403function writeFloat (buf, value, offset, littleEndian, noAssert) {
20404 value = +value
20405 offset = offset >>> 0
20406 if (!noAssert) {
20407 checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
3af2954a 20408 }
8b095871
IC
20409 ieee754.write(buf, value, offset, littleEndian, 23, 4)
20410 return offset + 4
ab78acc6 20411}
3af2954a 20412
8b095871
IC
20413Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
20414 return writeFloat(this, value, offset, true, noAssert)
ab78acc6 20415}
3af2954a 20416
8b095871
IC
20417Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
20418 return writeFloat(this, value, offset, false, noAssert)
ab78acc6 20419}
3af2954a 20420
8b095871
IC
20421function writeDouble (buf, value, offset, littleEndian, noAssert) {
20422 value = +value
20423 offset = offset >>> 0
20424 if (!noAssert) {
20425 checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
3af2954a 20426 }
8b095871
IC
20427 ieee754.write(buf, value, offset, littleEndian, 52, 8)
20428 return offset + 8
ab78acc6 20429}
3af2954a 20430
8b095871
IC
20431Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
20432 return writeDouble(this, value, offset, true, noAssert)
ab78acc6 20433}
3af2954a 20434
8b095871
IC
20435Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
20436 return writeDouble(this, value, offset, false, noAssert)
20437}
3af2954a 20438
8b095871
IC
20439// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
20440Buffer.prototype.copy = function copy (target, targetStart, start, end) {
20441 if (!start) start = 0
20442 if (!end && end !== 0) end = this.length
20443 if (targetStart >= target.length) targetStart = target.length
20444 if (!targetStart) targetStart = 0
20445 if (end > 0 && end < start) end = start
3af2954a 20446
8b095871
IC
20447 // Copy 0 bytes; we're done
20448 if (end === start) return 0
20449 if (target.length === 0 || this.length === 0) return 0
3af2954a 20450
8b095871
IC
20451 // Fatal error conditions
20452 if (targetStart < 0) {
20453 throw new RangeError('targetStart out of bounds')
3af2954a 20454 }
8b095871
IC
20455 if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
20456 if (end < 0) throw new RangeError('sourceEnd out of bounds')
20457
20458 // Are we oob?
20459 if (end > this.length) end = this.length
20460 if (target.length - targetStart < end - start) {
20461 end = target.length - targetStart + start
3af2954a 20462 }
8b095871
IC
20463
20464 var len = end - start
20465 var i
20466
20467 if (this === target && start < targetStart && targetStart < end) {
20468 // descending copy from end
20469 for (i = len - 1; i >= 0; --i) {
20470 target[i + targetStart] = this[i + start]
3af2954a 20471 }
8b095871
IC
20472 } else if (len < 1000) {
20473 // ascending copy from start
20474 for (i = 0; i < len; ++i) {
20475 target[i + targetStart] = this[i + start]
20476 }
20477 } else {
20478 Uint8Array.prototype.set.call(
20479 target,
20480 this.subarray(start, start + len),
20481 targetStart
20482 )
3af2954a
IC
20483 }
20484
8b095871
IC
20485 return len
20486}
20487
20488// Usage:
20489// buffer.fill(number[, offset[, end]])
20490// buffer.fill(buffer[, offset[, end]])
20491// buffer.fill(string[, offset[, end]][, encoding])
20492Buffer.prototype.fill = function fill (val, start, end, encoding) {
20493 // Handle string cases:
20494 if (typeof val === 'string') {
20495 if (typeof start === 'string') {
20496 encoding = start
20497 start = 0
20498 end = this.length
20499 } else if (typeof end === 'string') {
20500 encoding = end
20501 end = this.length
20502 }
20503 if (val.length === 1) {
20504 var code = val.charCodeAt(0)
20505 if (code < 256) {
20506 val = code
3af2954a 20507 }
3af2954a 20508 }
8b095871
IC
20509 if (encoding !== undefined && typeof encoding !== 'string') {
20510 throw new TypeError('encoding must be a string')
20511 }
20512 if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {
20513 throw new TypeError('Unknown encoding: ' + encoding)
20514 }
20515 } else if (typeof val === 'number') {
20516 val = val & 255
ab78acc6 20517 }
3af2954a 20518
8b095871
IC
20519 // Invalid ranges are not set to a default, so can range check early.
20520 if (start < 0 || this.length < start || this.length < end) {
20521 throw new RangeError('Out of range index')
20522 }
3af2954a 20523
8b095871
IC
20524 if (end <= start) {
20525 return this
20526 }
3af2954a 20527
8b095871
IC
20528 start = start >>> 0
20529 end = end === undefined ? this.length : end >>> 0
3af2954a 20530
8b095871
IC
20531 if (!val) val = 0
20532
20533 var i
20534 if (typeof val === 'number') {
20535 for (i = start; i < end; ++i) {
20536 this[i] = val
20537 }
ab78acc6 20538 } else {
8b095871
IC
20539 var bytes = Buffer.isBuffer(val)
20540 ? val
20541 : new Buffer(val, encoding)
20542 var len = bytes.length
20543 for (i = 0; i < end - start; ++i) {
20544 this[i + start] = bytes[i % len]
ab78acc6
IC
20545 }
20546 }
3af2954a 20547
8b095871
IC
20548 return this
20549}
3af2954a 20550
8b095871
IC
20551// HELPER FUNCTIONS
20552// ================
20553
20554var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g
20555
20556function base64clean (str) {
20557 // Node strips out invalid characters like \n and \t from the string, base64-js does not
20558 str = stringtrim(str).replace(INVALID_BASE64_RE, '')
20559 // Node converts strings with length < 2 to ''
20560 if (str.length < 2) return ''
20561 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
20562 while (str.length % 4 !== 0) {
20563 str = str + '='
3af2954a 20564 }
8b095871 20565 return str
ab78acc6
IC
20566}
20567
8b095871
IC
20568function stringtrim (str) {
20569 if (str.trim) return str.trim()
20570 return str.replace(/^\s+|\s+$/g, '')
ab78acc6 20571}
3af2954a 20572
8b095871
IC
20573function toHex (n) {
20574 if (n < 16) return '0' + n.toString(16)
20575 return n.toString(16)
ab78acc6 20576}
3af2954a 20577
8b095871
IC
20578function utf8ToBytes (string, units) {
20579 units = units || Infinity
20580 var codePoint
20581 var length = string.length
20582 var leadSurrogate = null
20583 var bytes = []
3af2954a 20584
8b095871
IC
20585 for (var i = 0; i < length; ++i) {
20586 codePoint = string.charCodeAt(i)
3af2954a 20587
8b095871
IC
20588 // is surrogate component
20589 if (codePoint > 0xD7FF && codePoint < 0xE000) {
20590 // last char was a lead
20591 if (!leadSurrogate) {
20592 // no lead yet
20593 if (codePoint > 0xDBFF) {
20594 // unexpected trail
20595 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
20596 continue
20597 } else if (i + 1 === length) {
20598 // unpaired lead
20599 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
20600 continue
20601 }
3af2954a 20602
8b095871
IC
20603 // valid lead
20604 leadSurrogate = codePoint
20605
20606 continue
20607 }
20608
20609 // 2 leads in a row
20610 if (codePoint < 0xDC00) {
20611 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
20612 leadSurrogate = codePoint
20613 continue
20614 }
20615
20616 // valid surrogate pair
20617 codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000
20618 } else if (leadSurrogate) {
20619 // valid bmp char, but last char was a lead
20620 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
20621 }
20622
20623 leadSurrogate = null
20624
20625 // encode utf8
20626 if (codePoint < 0x80) {
20627 if ((units -= 1) < 0) break
20628 bytes.push(codePoint)
20629 } else if (codePoint < 0x800) {
20630 if ((units -= 2) < 0) break
20631 bytes.push(
20632 codePoint >> 0x6 | 0xC0,
20633 codePoint & 0x3F | 0x80
20634 )
20635 } else if (codePoint < 0x10000) {
20636 if ((units -= 3) < 0) break
20637 bytes.push(
20638 codePoint >> 0xC | 0xE0,
20639 codePoint >> 0x6 & 0x3F | 0x80,
20640 codePoint & 0x3F | 0x80
20641 )
20642 } else if (codePoint < 0x110000) {
20643 if ((units -= 4) < 0) break
20644 bytes.push(
20645 codePoint >> 0x12 | 0xF0,
20646 codePoint >> 0xC & 0x3F | 0x80,
20647 codePoint >> 0x6 & 0x3F | 0x80,
20648 codePoint & 0x3F | 0x80
20649 )
ab78acc6 20650 } else {
8b095871 20651 throw new Error('Invalid code point')
ab78acc6 20652 }
3af2954a
IC
20653 }
20654
8b095871
IC
20655 return bytes
20656}
3af2954a 20657
8b095871
IC
20658function asciiToBytes (str) {
20659 var byteArray = []
20660 for (var i = 0; i < str.length; ++i) {
20661 // Node's code seems to be doing this and not & 0x7F..
20662 byteArray.push(str.charCodeAt(i) & 0xFF)
ab78acc6 20663 }
8b095871
IC
20664 return byteArray
20665}
3af2954a 20666
8b095871
IC
20667function utf16leToBytes (str, units) {
20668 var c, hi, lo
20669 var byteArray = []
20670 for (var i = 0; i < str.length; ++i) {
20671 if ((units -= 2) < 0) break
3af2954a 20672
8b095871
IC
20673 c = str.charCodeAt(i)
20674 hi = c >> 8
20675 lo = c % 256
20676 byteArray.push(lo)
20677 byteArray.push(hi)
20678 }
ebd8d4e8 20679
8b095871
IC
20680 return byteArray
20681}
20682
20683function base64ToBytes (str) {
20684 return base64.toByteArray(base64clean(str))
20685}
20686
20687function blitBuffer (src, dst, offset, length) {
20688 for (var i = 0; i < length; ++i) {
20689 if ((i + offset >= dst.length) || (i >= src.length)) break
20690 dst[i + offset] = src[i]
20691 }
20692 return i
20693}
20694
20695function isnan (val) {
20696 return val !== val // eslint-disable-line no-self-compare
20697}
20698
20699},{"base64-js":2,"ieee754":8}],6:[function(require,module,exports){
20700(function (Buffer){
20701// Copyright Joyent, Inc. and other Node contributors.
20702//
20703// Permission is hereby granted, free of charge, to any person obtaining a
20704// copy of this software and associated documentation files (the
20705// "Software"), to deal in the Software without restriction, including
20706// without limitation the rights to use, copy, modify, merge, publish,
20707// distribute, sublicense, and/or sell copies of the Software, and to permit
20708// persons to whom the Software is furnished to do so, subject to the
20709// following conditions:
20710//
20711// The above copyright notice and this permission notice shall be included
20712// in all copies or substantial portions of the Software.
20713//
20714// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
20715// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
20716// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
20717// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
20718// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
20719// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
20720// USE OR OTHER DEALINGS IN THE SOFTWARE.
20721
20722// NOTE: These type checking functions intentionally don't use `instanceof`
20723// because it is fragile and can be easily faked with `Object.create()`.
ebd8d4e8 20724
8b095871
IC
20725function isArray(arg) {
20726 if (Array.isArray) {
20727 return Array.isArray(arg);
20728 }
20729 return objectToString(arg) === '[object Array]';
20730}
20731exports.isArray = isArray;
ebd8d4e8 20732
8b095871
IC
20733function isBoolean(arg) {
20734 return typeof arg === 'boolean';
20735}
20736exports.isBoolean = isBoolean;
ebd8d4e8 20737
8b095871
IC
20738function isNull(arg) {
20739 return arg === null;
20740}
20741exports.isNull = isNull;
ebd8d4e8 20742
8b095871
IC
20743function isNullOrUndefined(arg) {
20744 return arg == null;
20745}
20746exports.isNullOrUndefined = isNullOrUndefined;
ebd8d4e8 20747
8b095871
IC
20748function isNumber(arg) {
20749 return typeof arg === 'number';
ab78acc6 20750}
8b095871 20751exports.isNumber = isNumber;
212b1b46 20752
8b095871
IC
20753function isString(arg) {
20754 return typeof arg === 'string';
ab78acc6 20755}
8b095871 20756exports.isString = isString;
212b1b46 20757
8b095871
IC
20758function isSymbol(arg) {
20759 return typeof arg === 'symbol';
ab78acc6 20760}
8b095871 20761exports.isSymbol = isSymbol;
ab78acc6 20762
8b095871
IC
20763function isUndefined(arg) {
20764 return arg === void 0;
20765}
20766exports.isUndefined = isUndefined;
ab78acc6 20767
8b095871
IC
20768function isRegExp(re) {
20769 return objectToString(re) === '[object RegExp]';
20770}
20771exports.isRegExp = isRegExp;
ab78acc6 20772
8b095871
IC
20773function isObject(arg) {
20774 return typeof arg === 'object' && arg !== null;
20775}
20776exports.isObject = isObject;
212b1b46 20777
8b095871
IC
20778function isDate(d) {
20779 return objectToString(d) === '[object Date]';
20780}
20781exports.isDate = isDate;
212b1b46 20782
8b095871
IC
20783function isError(e) {
20784 return (objectToString(e) === '[object Error]' || e instanceof Error);
20785}
20786exports.isError = isError;
212b1b46 20787
8b095871
IC
20788function isFunction(arg) {
20789 return typeof arg === 'function';
20790}
20791exports.isFunction = isFunction;
212b1b46 20792
8b095871
IC
20793function isPrimitive(arg) {
20794 return arg === null ||
20795 typeof arg === 'boolean' ||
20796 typeof arg === 'number' ||
20797 typeof arg === 'string' ||
20798 typeof arg === 'symbol' || // ES6 symbol
20799 typeof arg === 'undefined';
ab78acc6 20800}
8b095871 20801exports.isPrimitive = isPrimitive;
212b1b46 20802
8b095871 20803exports.isBuffer = Buffer.isBuffer;
ab78acc6 20804
8b095871
IC
20805function objectToString(o) {
20806 return Object.prototype.toString.call(o);
ab78acc6 20807}
212b1b46 20808
8b095871
IC
20809}).call(this,{"isBuffer":require("../../is-buffer/index.js")})
20810},{"../../is-buffer/index.js":10}],7:[function(require,module,exports){
20811// Copyright Joyent, Inc. and other Node contributors.
20812//
20813// Permission is hereby granted, free of charge, to any person obtaining a
20814// copy of this software and associated documentation files (the
20815// "Software"), to deal in the Software without restriction, including
20816// without limitation the rights to use, copy, modify, merge, publish,
20817// distribute, sublicense, and/or sell copies of the Software, and to permit
20818// persons to whom the Software is furnished to do so, subject to the
20819// following conditions:
20820//
20821// The above copyright notice and this permission notice shall be included
20822// in all copies or substantial portions of the Software.
20823//
20824// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
20825// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
20826// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
20827// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
20828// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
20829// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
20830// USE OR OTHER DEALINGS IN THE SOFTWARE.
212b1b46 20831
8b095871
IC
20832function EventEmitter() {
20833 this._events = this._events || {};
20834 this._maxListeners = this._maxListeners || undefined;
ab78acc6 20835}
8b095871 20836module.exports = EventEmitter;
212b1b46 20837
8b095871
IC
20838// Backwards-compat with node 0.10.x
20839EventEmitter.EventEmitter = EventEmitter;
212b1b46 20840
8b095871
IC
20841EventEmitter.prototype._events = undefined;
20842EventEmitter.prototype._maxListeners = undefined;
212b1b46 20843
8b095871
IC
20844// By default EventEmitters will print a warning if more than 10 listeners are
20845// added to it. This is a useful default which helps finding memory leaks.
20846EventEmitter.defaultMaxListeners = 10;
212b1b46 20847
8b095871
IC
20848// Obviously not all Emitters should be limited to 10. This function allows
20849// that to be increased. Set to zero for unlimited.
20850EventEmitter.prototype.setMaxListeners = function(n) {
20851 if (!isNumber(n) || n < 0 || isNaN(n))
20852 throw TypeError('n must be a positive number');
20853 this._maxListeners = n;
20854 return this;
20855};
212b1b46 20856
8b095871
IC
20857EventEmitter.prototype.emit = function(type) {
20858 var er, handler, len, args, i, listeners;
212b1b46 20859
8b095871
IC
20860 if (!this._events)
20861 this._events = {};
212b1b46 20862
8b095871
IC
20863 // If there is no 'error' event listener then throw.
20864 if (type === 'error') {
20865 if (!this._events.error ||
20866 (isObject(this._events.error) && !this._events.error.length)) {
20867 er = arguments[1];
20868 if (er instanceof Error) {
20869 throw er; // Unhandled 'error' event
20870 } else {
20871 // At least give some kind of context to the user
20872 var err = new Error('Uncaught, unspecified "error" event. (' + er + ')');
20873 err.context = er;
20874 throw err;
20875 }
20876 }
ab78acc6 20877 }
212b1b46 20878
8b095871 20879 handler = this._events[type];
212b1b46 20880
8b095871
IC
20881 if (isUndefined(handler))
20882 return false;
20883
20884 if (isFunction(handler)) {
20885 switch (arguments.length) {
20886 // fast cases
20887 case 1:
20888 handler.call(this);
20889 break;
20890 case 2:
20891 handler.call(this, arguments[1]);
20892 break;
20893 case 3:
20894 handler.call(this, arguments[1], arguments[2]);
20895 break;
20896 // slower
20897 default:
20898 args = Array.prototype.slice.call(arguments, 1);
20899 handler.apply(this, args);
3af2954a 20900 }
8b095871
IC
20901 } else if (isObject(handler)) {
20902 args = Array.prototype.slice.call(arguments, 1);
20903 listeners = handler.slice();
20904 len = listeners.length;
20905 for (i = 0; i < len; i++)
20906 listeners[i].apply(this, args);
3af2954a 20907 }
212b1b46 20908
8b095871
IC
20909 return true;
20910};
ebd8d4e8 20911
8b095871
IC
20912EventEmitter.prototype.addListener = function(type, listener) {
20913 var m;
ebd8d4e8 20914
8b095871
IC
20915 if (!isFunction(listener))
20916 throw TypeError('listener must be a function');
ebd8d4e8 20917
8b095871
IC
20918 if (!this._events)
20919 this._events = {};
3af2954a 20920
8b095871
IC
20921 // To avoid recursion in the case that type === "newListener"! Before
20922 // adding it to the listeners, first emit "newListener".
20923 if (this._events.newListener)
20924 this.emit('newListener', type,
20925 isFunction(listener.listener) ?
20926 listener.listener : listener);
3af2954a 20927
8b095871
IC
20928 if (!this._events[type])
20929 // Optimize the case of one listener. Don't need the extra array object.
20930 this._events[type] = listener;
20931 else if (isObject(this._events[type]))
20932 // If we've already got an array, just append.
20933 this._events[type].push(listener);
20934 else
20935 // Adding the second element, need to change to array.
20936 this._events[type] = [this._events[type], listener];
3af2954a 20937
8b095871
IC
20938 // Check for listener leak
20939 if (isObject(this._events[type]) && !this._events[type].warned) {
20940 if (!isUndefined(this._maxListeners)) {
20941 m = this._maxListeners;
20942 } else {
20943 m = EventEmitter.defaultMaxListeners;
20944 }
3af2954a 20945
8b095871
IC
20946 if (m && m > 0 && this._events[type].length > m) {
20947 this._events[type].warned = true;
20948 console.error('(node) warning: possible EventEmitter memory ' +
20949 'leak detected. %d listeners added. ' +
20950 'Use emitter.setMaxListeners() to increase limit.',
20951 this._events[type].length);
20952 if (typeof console.trace === 'function') {
20953 // not supported in IE 10
20954 console.trace();
20955 }
20956 }
3af2954a
IC
20957 }
20958
8b095871
IC
20959 return this;
20960};
3af2954a 20961
8b095871 20962EventEmitter.prototype.on = EventEmitter.prototype.addListener;
3af2954a 20963
8b095871
IC
20964EventEmitter.prototype.once = function(type, listener) {
20965 if (!isFunction(listener))
20966 throw TypeError('listener must be a function');
3af2954a 20967
8b095871 20968 var fired = false;
ebd8d4e8 20969
8b095871
IC
20970 function g() {
20971 this.removeListener(type, g);
3af2954a 20972
8b095871
IC
20973 if (!fired) {
20974 fired = true;
20975 listener.apply(this, arguments);
20976 }
20977 }
3af2954a 20978
8b095871
IC
20979 g.listener = listener;
20980 this.on(type, g);
ebd8d4e8 20981
8b095871
IC
20982 return this;
20983};
ebd8d4e8 20984
8b095871
IC
20985// emits a 'removeListener' event iff the listener was removed
20986EventEmitter.prototype.removeListener = function(type, listener) {
20987 var list, position, length, i;
ebd8d4e8 20988
8b095871
IC
20989 if (!isFunction(listener))
20990 throw TypeError('listener must be a function');
ebd8d4e8 20991
8b095871
IC
20992 if (!this._events || !this._events[type])
20993 return this;
ab78acc6 20994
8b095871
IC
20995 list = this._events[type];
20996 length = list.length;
20997 position = -1;
ebd8d4e8 20998
8b095871
IC
20999 if (list === listener ||
21000 (isFunction(list.listener) && list.listener === listener)) {
21001 delete this._events[type];
21002 if (this._events.removeListener)
21003 this.emit('removeListener', type, listener);
ebd8d4e8 21004
8b095871
IC
21005 } else if (isObject(list)) {
21006 for (i = length; i-- > 0;) {
21007 if (list[i] === listener ||
21008 (list[i].listener && list[i].listener === listener)) {
21009 position = i;
21010 break;
21011 }
21012 }
21013
21014 if (position < 0)
21015 return this;
21016
21017 if (list.length === 1) {
21018 list.length = 0;
21019 delete this._events[type];
21020 } else {
21021 list.splice(position, 1);
21022 }
21023
21024 if (this._events.removeListener)
21025 this.emit('removeListener', type, listener);
ab78acc6 21026 }
ebd8d4e8 21027
8b095871
IC
21028 return this;
21029};
ebd8d4e8 21030
8b095871
IC
21031EventEmitter.prototype.removeAllListeners = function(type) {
21032 var key, listeners;
ebd8d4e8 21033
8b095871
IC
21034 if (!this._events)
21035 return this;
ab78acc6 21036
8b095871
IC
21037 // not listening for removeListener, no need to emit
21038 if (!this._events.removeListener) {
21039 if (arguments.length === 0)
21040 this._events = {};
21041 else if (this._events[type])
21042 delete this._events[type];
21043 return this;
21044 }
ab78acc6 21045
8b095871
IC
21046 // emit removeListener for all listeners on all events
21047 if (arguments.length === 0) {
21048 for (key in this._events) {
21049 if (key === 'removeListener') continue;
21050 this.removeAllListeners(key);
21051 }
21052 this.removeAllListeners('removeListener');
21053 this._events = {};
21054 return this;
21055 }
ebd8d4e8 21056
8b095871 21057 listeners = this._events[type];
ebd8d4e8 21058
8b095871
IC
21059 if (isFunction(listeners)) {
21060 this.removeListener(type, listeners);
21061 } else if (listeners) {
21062 // LIFO order
21063 while (listeners.length)
21064 this.removeListener(type, listeners[listeners.length - 1]);
21065 }
21066 delete this._events[type];
ebd8d4e8 21067
8b095871
IC
21068 return this;
21069};
ebd8d4e8 21070
8b095871
IC
21071EventEmitter.prototype.listeners = function(type) {
21072 var ret;
21073 if (!this._events || !this._events[type])
21074 ret = [];
21075 else if (isFunction(this._events[type]))
21076 ret = [this._events[type]];
21077 else
21078 ret = this._events[type].slice();
21079 return ret;
21080};
ebd8d4e8 21081
8b095871
IC
21082EventEmitter.prototype.listenerCount = function(type) {
21083 if (this._events) {
21084 var evlistener = this._events[type];
ebd8d4e8 21085
8b095871
IC
21086 if (isFunction(evlistener))
21087 return 1;
21088 else if (evlistener)
21089 return evlistener.length;
21090 }
21091 return 0;
21092};
21093
21094EventEmitter.listenerCount = function(emitter, type) {
21095 return emitter.listenerCount(type);
21096};
21097
21098function isFunction(arg) {
21099 return typeof arg === 'function';
ebd8d4e8
IC
21100}
21101
8b095871
IC
21102function isNumber(arg) {
21103 return typeof arg === 'number';
ebd8d4e8
IC
21104}
21105
8b095871
IC
21106function isObject(arg) {
21107 return typeof arg === 'object' && arg !== null;
ebd8d4e8
IC
21108}
21109
8b095871
IC
21110function isUndefined(arg) {
21111 return arg === void 0;
ebd8d4e8
IC
21112}
21113
8b095871
IC
21114},{}],8:[function(require,module,exports){
21115exports.read = function (buffer, offset, isLE, mLen, nBytes) {
21116 var e, m
21117 var eLen = nBytes * 8 - mLen - 1
21118 var eMax = (1 << eLen) - 1
21119 var eBias = eMax >> 1
21120 var nBits = -7
21121 var i = isLE ? (nBytes - 1) : 0
21122 var d = isLE ? -1 : 1
21123 var s = buffer[offset + i]
ebd8d4e8 21124
8b095871 21125 i += d
ebd8d4e8 21126
8b095871
IC
21127 e = s & ((1 << (-nBits)) - 1)
21128 s >>= (-nBits)
21129 nBits += eLen
21130 for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
ebd8d4e8 21131
8b095871
IC
21132 m = e & ((1 << (-nBits)) - 1)
21133 e >>= (-nBits)
21134 nBits += mLen
21135 for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
ebd8d4e8 21136
8b095871
IC
21137 if (e === 0) {
21138 e = 1 - eBias
21139 } else if (e === eMax) {
21140 return m ? NaN : ((s ? -1 : 1) * Infinity)
21141 } else {
21142 m = m + Math.pow(2, mLen)
21143 e = e - eBias
ab78acc6 21144 }
8b095871 21145 return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
ebd8d4e8
IC
21146}
21147
8b095871
IC
21148exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
21149 var e, m, c
21150 var eLen = nBytes * 8 - mLen - 1
21151 var eMax = (1 << eLen) - 1
21152 var eBias = eMax >> 1
21153 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
21154 var i = isLE ? 0 : (nBytes - 1)
21155 var d = isLE ? 1 : -1
21156 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
ebd8d4e8 21157
8b095871 21158 value = Math.abs(value)
ebd8d4e8 21159
8b095871
IC
21160 if (isNaN(value) || value === Infinity) {
21161 m = isNaN(value) ? 1 : 0
21162 e = eMax
ab78acc6 21163 } else {
8b095871
IC
21164 e = Math.floor(Math.log(value) / Math.LN2)
21165 if (value * (c = Math.pow(2, -e)) < 1) {
21166 e--
21167 c *= 2
21168 }
21169 if (e + eBias >= 1) {
21170 value += rt / c
21171 } else {
21172 value += rt * Math.pow(2, 1 - eBias)
21173 }
21174 if (value * c >= 2) {
21175 e++
21176 c /= 2
21177 }
ebd8d4e8 21178
8b095871
IC
21179 if (e + eBias >= eMax) {
21180 m = 0
21181 e = eMax
21182 } else if (e + eBias >= 1) {
21183 m = (value * c - 1) * Math.pow(2, mLen)
21184 e = e + eBias
21185 } else {
21186 m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
21187 e = 0
21188 }
ebd8d4e8 21189 }
ebd8d4e8 21190
8b095871 21191 for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
ebd8d4e8 21192
8b095871
IC
21193 e = (e << mLen) | m
21194 eLen += mLen
21195 for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
ebd8d4e8 21196
8b095871 21197 buffer[offset + i - d] |= s * 128
ab78acc6
IC
21198}
21199
8b095871
IC
21200},{}],9:[function(require,module,exports){
21201if (typeof Object.create === 'function') {
21202 // implementation from standard node.js 'util' module
21203 module.exports = function inherits(ctor, superCtor) {
21204 ctor.super_ = superCtor
21205 ctor.prototype = Object.create(superCtor.prototype, {
21206 constructor: {
21207 value: ctor,
21208 enumerable: false,
21209 writable: true,
21210 configurable: true
21211 }
21212 });
21213 };
21214} else {
21215 // old school shim for old browsers
21216 module.exports = function inherits(ctor, superCtor) {
21217 ctor.super_ = superCtor
21218 var TempCtor = function () {}
21219 TempCtor.prototype = superCtor.prototype
21220 ctor.prototype = new TempCtor()
21221 ctor.prototype.constructor = ctor
ebd8d4e8 21222 }
8b095871 21223}
ab78acc6 21224
8b095871
IC
21225},{}],10:[function(require,module,exports){
21226/*!
21227 * Determine if an object is a Buffer
21228 *
21229 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
21230 * @license MIT
21231 */
ebd8d4e8 21232
8b095871
IC
21233// The _isBuffer check is for Safari 5-7 support, because it's missing
21234// Object.prototype.constructor. Remove this eventually
21235module.exports = function (obj) {
21236 return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer)
ebd8d4e8
IC
21237}
21238
8b095871
IC
21239function isBuffer (obj) {
21240 return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)
21241}
ebd8d4e8 21242
8b095871
IC
21243// For Node v0.10 support. Remove this eventually.
21244function isSlowBuffer (obj) {
21245 return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0))
21246}
ebd8d4e8 21247
8b095871
IC
21248},{}],11:[function(require,module,exports){
21249var toString = {}.toString;
ab78acc6 21250
8b095871
IC
21251module.exports = Array.isArray || function (arr) {
21252 return toString.call(arr) == '[object Array]';
21253};
ebd8d4e8 21254
8b095871
IC
21255},{}],12:[function(require,module,exports){
21256(function (process){
21257'use strict';
ebd8d4e8 21258
8b095871
IC
21259if (!process.version ||
21260 process.version.indexOf('v0.') === 0 ||
21261 process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) {
21262 module.exports = nextTick;
21263} else {
21264 module.exports = process.nextTick;
21265}
21266
21267function nextTick(fn, arg1, arg2, arg3) {
21268 if (typeof fn !== 'function') {
21269 throw new TypeError('"callback" argument must be a function');
21270 }
21271 var len = arguments.length;
21272 var args, i;
21273 switch (len) {
21274 case 0:
21275 case 1:
21276 return process.nextTick(fn);
21277 case 2:
21278 return process.nextTick(function afterTickOne() {
21279 fn.call(null, arg1);
21280 });
21281 case 3:
21282 return process.nextTick(function afterTickTwo() {
21283 fn.call(null, arg1, arg2);
21284 });
21285 case 4:
21286 return process.nextTick(function afterTickThree() {
21287 fn.call(null, arg1, arg2, arg3);
21288 });
21289 default:
21290 args = new Array(len - 1);
21291 i = 0;
21292 while (i < args.length) {
21293 args[i++] = arguments[i];
21294 }
21295 return process.nextTick(function afterTick() {
21296 fn.apply(null, args);
21297 });
ab78acc6 21298 }
ebd8d4e8
IC
21299}
21300
8b095871
IC
21301}).call(this,require('_process'))
21302},{"_process":13}],13:[function(require,module,exports){
21303// shim for using process in browser
21304var process = module.exports = {};
ebd8d4e8 21305
8b095871
IC
21306// cached from whatever global is present so that test runners that stub it
21307// don't break things. But we need to wrap it in a try catch in case it is
21308// wrapped in strict mode code which doesn't define any globals. It's inside a
21309// function because try/catches deoptimize in certain engines.
ab78acc6 21310
8b095871
IC
21311var cachedSetTimeout;
21312var cachedClearTimeout;
ebd8d4e8 21313
8b095871
IC
21314function defaultSetTimout() {
21315 throw new Error('setTimeout has not been defined');
ab78acc6 21316}
8b095871
IC
21317function defaultClearTimeout () {
21318 throw new Error('clearTimeout has not been defined');
ab78acc6 21319}
8b095871
IC
21320(function () {
21321 try {
21322 if (typeof setTimeout === 'function') {
21323 cachedSetTimeout = setTimeout;
21324 } else {
21325 cachedSetTimeout = defaultSetTimout;
21326 }
21327 } catch (e) {
21328 cachedSetTimeout = defaultSetTimout;
21329 }
21330 try {
21331 if (typeof clearTimeout === 'function') {
21332 cachedClearTimeout = clearTimeout;
21333 } else {
21334 cachedClearTimeout = defaultClearTimeout;
21335 }
21336 } catch (e) {
21337 cachedClearTimeout = defaultClearTimeout;
21338 }
21339} ())
21340function runTimeout(fun) {
21341 if (cachedSetTimeout === setTimeout) {
21342 //normal enviroments in sane situations
21343 return setTimeout(fun, 0);
21344 }
21345 // if setTimeout wasn't available but was latter defined
21346 if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
21347 cachedSetTimeout = setTimeout;
21348 return setTimeout(fun, 0);
21349 }
21350 try {
21351 // when when somebody has screwed with setTimeout but no I.E. maddness
21352 return cachedSetTimeout(fun, 0);
21353 } catch(e){
21354 try {
21355 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
21356 return cachedSetTimeout.call(null, fun, 0);
21357 } catch(e){
21358 // 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
21359 return cachedSetTimeout.call(this, fun, 0);
21360 }
21361 }
21362
ebd8d4e8 21363
ab78acc6 21364}
8b095871
IC
21365function runClearTimeout(marker) {
21366 if (cachedClearTimeout === clearTimeout) {
21367 //normal enviroments in sane situations
21368 return clearTimeout(marker);
21369 }
21370 // if clearTimeout wasn't available but was latter defined
21371 if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
21372 cachedClearTimeout = clearTimeout;
21373 return clearTimeout(marker);
21374 }
21375 try {
21376 // when when somebody has screwed with setTimeout but no I.E. maddness
21377 return cachedClearTimeout(marker);
21378 } catch (e){
21379 try {
21380 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
21381 return cachedClearTimeout.call(null, marker);
21382 } catch (e){
21383 // 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.
21384 // Some versions of I.E. have different rules for clearTimeout vs setTimeout
21385 return cachedClearTimeout.call(this, marker);
21386 }
21387 }
21388
21389
ebd8d4e8 21390
ab78acc6 21391}
8b095871
IC
21392var queue = [];
21393var draining = false;
21394var currentQueue;
21395var queueIndex = -1;
ebd8d4e8 21396
8b095871
IC
21397function cleanUpNextTick() {
21398 if (!draining || !currentQueue) {
21399 return;
21400 }
21401 draining = false;
21402 if (currentQueue.length) {
21403 queue = currentQueue.concat(queue);
21404 } else {
21405 queueIndex = -1;
21406 }
21407 if (queue.length) {
21408 drainQueue();
21409 }
ebd8d4e8
IC
21410}
21411
8b095871
IC
21412function drainQueue() {
21413 if (draining) {
21414 return;
21415 }
21416 var timeout = runTimeout(cleanUpNextTick);
21417 draining = true;
21418
21419 var len = queue.length;
21420 while(len) {
21421 currentQueue = queue;
21422 queue = [];
21423 while (++queueIndex < len) {
21424 if (currentQueue) {
21425 currentQueue[queueIndex].run();
21426 }
21427 }
21428 queueIndex = -1;
21429 len = queue.length;
21430 }
21431 currentQueue = null;
21432 draining = false;
21433 runClearTimeout(timeout);
ebd8d4e8
IC
21434}
21435
8b095871
IC
21436process.nextTick = function (fun) {
21437 var args = new Array(arguments.length - 1);
21438 if (arguments.length > 1) {
21439 for (var i = 1; i < arguments.length; i++) {
21440 args[i - 1] = arguments[i];
21441 }
21442 }
21443 queue.push(new Item(fun, args));
21444 if (queue.length === 1 && !draining) {
21445 runTimeout(drainQueue);
21446 }
21447};
21448
21449// v8 likes predictible objects
21450function Item(fun, array) {
21451 this.fun = fun;
21452 this.array = array;
ab78acc6 21453}
8b095871
IC
21454Item.prototype.run = function () {
21455 this.fun.apply(null, this.array);
21456};
21457process.title = 'browser';
21458process.browser = true;
21459process.env = {};
21460process.argv = [];
21461process.version = ''; // empty string to avoid regexp issues
21462process.versions = {};
ebd8d4e8 21463
8b095871
IC
21464function noop() {}
21465
21466process.on = noop;
21467process.addListener = noop;
21468process.once = noop;
21469process.off = noop;
21470process.removeListener = noop;
21471process.removeAllListeners = noop;
21472process.emit = noop;
21473
21474process.binding = function (name) {
21475 throw new Error('process.binding is not supported');
21476};
21477
21478process.cwd = function () { return '/' };
21479process.chdir = function (dir) {
21480 throw new Error('process.chdir is not supported');
21481};
21482process.umask = function() { return 0; };
21483
21484},{}],14:[function(require,module,exports){
21485module.exports = require("./lib/_stream_duplex.js")
21486
21487},{"./lib/_stream_duplex.js":15}],15:[function(require,module,exports){
21488// a duplex stream is just a stream that is both readable and writable.
21489// Since JS doesn't have multiple prototypal inheritance, this class
21490// prototypally inherits from Readable, and then parasitically from
21491// Writable.
21492
21493'use strict';
21494
21495/*<replacement>*/
ab78acc6 21496
8b095871
IC
21497var objectKeys = Object.keys || function (obj) {
21498 var keys = [];
21499 for (var key in obj) {
21500 keys.push(key);
21501 }return keys;
21502};
21503/*</replacement>*/
ebd8d4e8 21504
8b095871 21505module.exports = Duplex;
ebd8d4e8 21506
8b095871
IC
21507/*<replacement>*/
21508var processNextTick = require('process-nextick-args');
21509/*</replacement>*/
ebd8d4e8 21510
8b095871
IC
21511/*<replacement>*/
21512var util = require('core-util-is');
21513util.inherits = require('inherits');
21514/*</replacement>*/
ebd8d4e8 21515
8b095871
IC
21516var Readable = require('./_stream_readable');
21517var Writable = require('./_stream_writable');
ebd8d4e8 21518
8b095871
IC
21519util.inherits(Duplex, Readable);
21520
21521var keys = objectKeys(Writable.prototype);
21522for (var v = 0; v < keys.length; v++) {
21523 var method = keys[v];
21524 if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];
ab78acc6 21525}
ebd8d4e8 21526
8b095871
IC
21527function Duplex(options) {
21528 if (!(this instanceof Duplex)) return new Duplex(options);
ebd8d4e8 21529
8b095871
IC
21530 Readable.call(this, options);
21531 Writable.call(this, options);
ebd8d4e8 21532
8b095871 21533 if (options && options.readable === false) this.readable = false;
ebd8d4e8 21534
8b095871 21535 if (options && options.writable === false) this.writable = false;
ebd8d4e8 21536
8b095871
IC
21537 this.allowHalfOpen = true;
21538 if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;
ebd8d4e8 21539
8b095871 21540 this.once('end', onend);
ebd8d4e8
IC
21541}
21542
8b095871
IC
21543// the no-half-open enforcer
21544function onend() {
21545 // if we allow half-open state, or if the writable side ended,
21546 // then we're ok.
21547 if (this.allowHalfOpen || this._writableState.ended) return;
21548
21549 // no more data can be written.
21550 // But allow more writes to happen in this tick.
21551 processNextTick(onEndNT, this);
ebd8d4e8
IC
21552}
21553
8b095871
IC
21554function onEndNT(self) {
21555 self.end();
21556}
ebd8d4e8 21557
8b095871
IC
21558function forEach(xs, f) {
21559 for (var i = 0, l = xs.length; i < l; i++) {
21560 f(xs[i], i);
21561 }
21562}
21563},{"./_stream_readable":17,"./_stream_writable":19,"core-util-is":6,"inherits":9,"process-nextick-args":12}],16:[function(require,module,exports){
21564// a passthrough stream.
21565// basically just the most minimal sort of Transform stream.
21566// Every written chunk gets output as-is.
ebd8d4e8 21567
8b095871 21568'use strict';
ebd8d4e8 21569
8b095871 21570module.exports = PassThrough;
ebd8d4e8 21571
8b095871 21572var Transform = require('./_stream_transform');
ebd8d4e8 21573
8b095871
IC
21574/*<replacement>*/
21575var util = require('core-util-is');
21576util.inherits = require('inherits');
21577/*</replacement>*/
ebd8d4e8 21578
8b095871 21579util.inherits(PassThrough, Transform);
ebd8d4e8 21580
8b095871
IC
21581function PassThrough(options) {
21582 if (!(this instanceof PassThrough)) return new PassThrough(options);
ebd8d4e8 21583
8b095871 21584 Transform.call(this, options);
ebd8d4e8
IC
21585}
21586
8b095871
IC
21587PassThrough.prototype._transform = function (chunk, encoding, cb) {
21588 cb(null, chunk);
21589};
21590},{"./_stream_transform":18,"core-util-is":6,"inherits":9}],17:[function(require,module,exports){
21591(function (process){
21592'use strict';
ebd8d4e8 21593
8b095871 21594module.exports = Readable;
ebd8d4e8 21595
8b095871
IC
21596/*<replacement>*/
21597var processNextTick = require('process-nextick-args');
21598/*</replacement>*/
ebd8d4e8 21599
8b095871
IC
21600/*<replacement>*/
21601var isArray = require('isarray');
21602/*</replacement>*/
ebd8d4e8 21603
8b095871
IC
21604/*<replacement>*/
21605var Duplex;
21606/*</replacement>*/
ebd8d4e8 21607
8b095871 21608Readable.ReadableState = ReadableState;
ebd8d4e8 21609
8b095871
IC
21610/*<replacement>*/
21611var EE = require('events').EventEmitter;
ebd8d4e8 21612
8b095871
IC
21613var EElistenerCount = function (emitter, type) {
21614 return emitter.listeners(type).length;
21615};
21616/*</replacement>*/
ebd8d4e8 21617
8b095871
IC
21618/*<replacement>*/
21619var Stream;
21620(function () {
21621 try {
21622 Stream = require('st' + 'ream');
21623 } catch (_) {} finally {
21624 if (!Stream) Stream = require('events').EventEmitter;
21625 }
21626})();
21627/*</replacement>*/
ebd8d4e8 21628
8b095871
IC
21629var Buffer = require('buffer').Buffer;
21630/*<replacement>*/
21631var bufferShim = require('buffer-shims');
21632/*</replacement>*/
ab78acc6 21633
8b095871
IC
21634/*<replacement>*/
21635var util = require('core-util-is');
21636util.inherits = require('inherits');
21637/*</replacement>*/
ab78acc6 21638
8b095871
IC
21639/*<replacement>*/
21640var debugUtil = require('util');
21641var debug = void 0;
21642if (debugUtil && debugUtil.debuglog) {
21643 debug = debugUtil.debuglog('stream');
21644} else {
21645 debug = function () {};
21646}
21647/*</replacement>*/
ab78acc6 21648
8b095871
IC
21649var BufferList = require('./internal/streams/BufferList');
21650var StringDecoder;
ab78acc6 21651
8b095871 21652util.inherits(Readable, Stream);
ab78acc6 21653
8b095871
IC
21654function prependListener(emitter, event, fn) {
21655 // Sadly this is not cacheable as some libraries bundle their own
21656 // event emitter implementation with them.
21657 if (typeof emitter.prependListener === 'function') {
21658 return emitter.prependListener(event, fn);
21659 } else {
21660 // This is a hack to make sure that our error handler is attached before any
21661 // userland ones. NEVER DO THIS. This is here only because this code needs
21662 // to continue to work with older versions of Node.js that do not include
21663 // the prependListener() method. The goal is to eventually remove this hack.
21664 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 21665 }
ebd8d4e8
IC
21666}
21667
8b095871
IC
21668function ReadableState(options, stream) {
21669 Duplex = Duplex || require('./_stream_duplex');
ebd8d4e8 21670
8b095871 21671 options = options || {};
ebd8d4e8 21672
8b095871
IC
21673 // object stream flag. Used to make read(n) ignore n and to
21674 // make all the buffer merging and length checks go away
21675 this.objectMode = !!options.objectMode;
ebd8d4e8 21676
8b095871 21677 if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.readableObjectMode;
ebd8d4e8 21678
8b095871
IC
21679 // the point at which it stops calling _read() to fill the buffer
21680 // Note: 0 is a valid value, means "don't call _read preemptively ever"
21681 var hwm = options.highWaterMark;
21682 var defaultHwm = this.objectMode ? 16 : 16 * 1024;
21683 this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;
ab78acc6 21684
8b095871
IC
21685 // cast to ints.
21686 this.highWaterMark = ~ ~this.highWaterMark;
ab78acc6 21687
8b095871
IC
21688 // A linked list is used to store data chunks instead of an array because the
21689 // linked list can remove elements from the beginning faster than
21690 // array.shift()
21691 this.buffer = new BufferList();
21692 this.length = 0;
21693 this.pipes = null;
21694 this.pipesCount = 0;
21695 this.flowing = null;
21696 this.ended = false;
21697 this.endEmitted = false;
21698 this.reading = false;
ab78acc6 21699
8b095871
IC
21700 // a flag to be able to tell if the onwrite cb is called immediately,
21701 // or on a later tick. We set this to true at first, because any
21702 // actions that shouldn't happen until "later" should generally also
21703 // not happen before the first write call.
21704 this.sync = true;
ebd8d4e8 21705
8b095871
IC
21706 // whenever we return null, then we set a flag to say
21707 // that we're awaiting a 'readable' event emission.
21708 this.needReadable = false;
21709 this.emittedReadable = false;
21710 this.readableListening = false;
21711 this.resumeScheduled = false;
ebd8d4e8 21712
8b095871
IC
21713 // Crypto is kind of old and crusty. Historically, its default string
21714 // encoding is 'binary' so we have to make this configurable.
21715 // Everything else in the universe uses 'utf8', though.
21716 this.defaultEncoding = options.defaultEncoding || 'utf8';
ebd8d4e8 21717
8b095871
IC
21718 // when piping, we only care about 'readable' events that happen
21719 // after read()ing all the bytes and not getting any pushback.
21720 this.ranOut = false;
ebd8d4e8 21721
8b095871
IC
21722 // the number of writers that are awaiting a drain event in .pipe()s
21723 this.awaitDrain = 0;
ebd8d4e8 21724
8b095871
IC
21725 // if true, a maybeReadMore has been scheduled
21726 this.readingMore = false;
ebd8d4e8 21727
8b095871
IC
21728 this.decoder = null;
21729 this.encoding = null;
21730 if (options.encoding) {
21731 if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
21732 this.decoder = new StringDecoder(options.encoding);
21733 this.encoding = options.encoding;
21734 }
21735}
ebd8d4e8 21736
8b095871
IC
21737function Readable(options) {
21738 Duplex = Duplex || require('./_stream_duplex');
ebd8d4e8 21739
8b095871 21740 if (!(this instanceof Readable)) return new Readable(options);
ebd8d4e8 21741
8b095871 21742 this._readableState = new ReadableState(options, this);
ebd8d4e8 21743
8b095871
IC
21744 // legacy
21745 this.readable = true;
ebd8d4e8 21746
8b095871 21747 if (options && typeof options.read === 'function') this._read = options.read;
ebd8d4e8 21748
8b095871
IC
21749 Stream.call(this);
21750}
ebd8d4e8 21751
8b095871
IC
21752// Manually shove something into the read() buffer.
21753// This returns true if the highWaterMark has not been hit yet,
21754// similar to how Writable.write() returns true if you should
21755// write() some more.
21756Readable.prototype.push = function (chunk, encoding) {
21757 var state = this._readableState;
ebd8d4e8 21758
8b095871
IC
21759 if (!state.objectMode && typeof chunk === 'string') {
21760 encoding = encoding || state.defaultEncoding;
21761 if (encoding !== state.encoding) {
21762 chunk = bufferShim.from(chunk, encoding);
21763 encoding = '';
21764 }
21765 }
ebd8d4e8 21766
8b095871
IC
21767 return readableAddChunk(this, state, chunk, encoding, false);
21768};
ebd8d4e8 21769
8b095871
IC
21770// Unshift should *always* be something directly out of read()
21771Readable.prototype.unshift = function (chunk) {
21772 var state = this._readableState;
21773 return readableAddChunk(this, state, chunk, '', true);
21774};
ebd8d4e8 21775
8b095871
IC
21776Readable.prototype.isPaused = function () {
21777 return this._readableState.flowing === false;
21778};
21779
21780function readableAddChunk(stream, state, chunk, encoding, addToFront) {
21781 var er = chunkInvalid(state, chunk);
21782 if (er) {
21783 stream.emit('error', er);
21784 } else if (chunk === null) {
21785 state.reading = false;
21786 onEofChunk(stream, state);
21787 } else if (state.objectMode || chunk && chunk.length > 0) {
21788 if (state.ended && !addToFront) {
21789 var e = new Error('stream.push() after EOF');
21790 stream.emit('error', e);
21791 } else if (state.endEmitted && addToFront) {
21792 var _e = new Error('stream.unshift() after end event');
21793 stream.emit('error', _e);
21794 } else {
21795 var skipAdd;
21796 if (state.decoder && !addToFront && !encoding) {
21797 chunk = state.decoder.write(chunk);
21798 skipAdd = !state.objectMode && chunk.length === 0;
21799 }
ebd8d4e8 21800
8b095871 21801 if (!addToFront) state.reading = false;
ebd8d4e8 21802
8b095871
IC
21803 // Don't add to the buffer if we've decoded to an empty string chunk and
21804 // we're not in object mode
21805 if (!skipAdd) {
21806 // if we want the data now, just emit it.
21807 if (state.flowing && state.length === 0 && !state.sync) {
21808 stream.emit('data', chunk);
21809 stream.read(0);
21810 } else {
21811 // update the buffer info.
21812 state.length += state.objectMode ? 1 : chunk.length;
21813 if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);
ebd8d4e8 21814
8b095871
IC
21815 if (state.needReadable) emitReadable(stream);
21816 }
21817 }
ab78acc6 21818
8b095871
IC
21819 maybeReadMore(stream, state);
21820 }
21821 } else if (!addToFront) {
21822 state.reading = false;
21823 }
ab78acc6 21824
8b095871
IC
21825 return needMoreData(state);
21826}
ab78acc6 21827
8b095871
IC
21828// if it's past the high water mark, we can push in some more.
21829// Also, if we have no data yet, we can stand some
21830// more bytes. This is to work around cases where hwm=0,
21831// such as the repl. Also, if the push() triggered a
21832// readable event, and the user called read(largeNumber) such that
21833// needReadable was set, then we ought to push more, so that another
21834// 'readable' event will be triggered.
21835function needMoreData(state) {
21836 return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);
21837}
ebd8d4e8 21838
8b095871
IC
21839// backwards compatibility.
21840Readable.prototype.setEncoding = function (enc) {
21841 if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
21842 this._readableState.decoder = new StringDecoder(enc);
21843 this._readableState.encoding = enc;
21844 return this;
21845};
21846
21847// Don't raise the hwm > 8MB
21848var MAX_HWM = 0x800000;
21849function computeNewHighWaterMark(n) {
21850 if (n >= MAX_HWM) {
21851 n = MAX_HWM;
ab78acc6 21852 } else {
8b095871
IC
21853 // Get the next highest power of 2 to prevent increasing hwm excessively in
21854 // tiny amounts
21855 n--;
21856 n |= n >>> 1;
21857 n |= n >>> 2;
21858 n |= n >>> 4;
21859 n |= n >>> 8;
21860 n |= n >>> 16;
21861 n++;
ebd8d4e8 21862 }
8b095871 21863 return n;
ebd8d4e8
IC
21864}
21865
8b095871
IC
21866// This function is designed to be inlinable, so please take care when making
21867// changes to the function body.
21868function howMuchToRead(n, state) {
21869 if (n <= 0 || state.length === 0 && state.ended) return 0;
21870 if (state.objectMode) return 1;
21871 if (n !== n) {
21872 // Only flow one buffer at a time
21873 if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;
21874 }
21875 // If we're asking for more than the current hwm, then raise the hwm.
21876 if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);
21877 if (n <= state.length) return n;
21878 // Don't have enough
21879 if (!state.ended) {
21880 state.needReadable = true;
21881 return 0;
21882 }
21883 return state.length;
21884}
ebd8d4e8 21885
8b095871
IC
21886// you can override either this method, or the async _read(n) below.
21887Readable.prototype.read = function (n) {
21888 debug('read', n);
21889 n = parseInt(n, 10);
21890 var state = this._readableState;
21891 var nOrig = n;
ebd8d4e8 21892
8b095871 21893 if (n !== 0) state.emittedReadable = false;
ab78acc6 21894
8b095871
IC
21895 // if we're doing read(0) to trigger a readable event, but we
21896 // already have a bunch of data in the buffer, then just trigger
21897 // the 'readable' event and move on.
21898 if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {
21899 debug('read: emitReadable', state.length, state.ended);
21900 if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);
21901 return null;
ebd8d4e8 21902 }
ebd8d4e8 21903
8b095871 21904 n = howMuchToRead(n, state);
ebd8d4e8 21905
8b095871
IC
21906 // if we've ended, and we're now clear, then finish it up.
21907 if (n === 0 && state.ended) {
21908 if (state.length === 0) endReadable(this);
21909 return null;
21910 }
ebd8d4e8 21911
8b095871
IC
21912 // All the actual chunk generation logic needs to be
21913 // *below* the call to _read. The reason is that in certain
21914 // synthetic stream cases, such as passthrough streams, _read
21915 // may be a completely synchronous operation which may change
21916 // the state of the read buffer, providing enough data when
21917 // before there was *not* enough.
21918 //
21919 // So, the steps are:
21920 // 1. Figure out what the state of things will be after we do
21921 // a read from the buffer.
21922 //
21923 // 2. If that resulting state will trigger a _read, then call _read.
21924 // Note that this may be asynchronous, or synchronous. Yes, it is
21925 // deeply ugly to write APIs this way, but that still doesn't mean
21926 // that the Readable class should behave improperly, as streams are
21927 // designed to be sync/async agnostic.
21928 // Take note if the _read call is sync or async (ie, if the read call
21929 // has returned yet), so that we know whether or not it's safe to emit
21930 // 'readable' etc.
21931 //
21932 // 3. Actually pull the requested chunks out of the buffer and return.
ebd8d4e8 21933
8b095871
IC
21934 // if we need a readable event, then we need to do some reading.
21935 var doRead = state.needReadable;
21936 debug('need readable', doRead);
ebd8d4e8 21937
8b095871
IC
21938 // if we currently have less than the highWaterMark, then also read some
21939 if (state.length === 0 || state.length - n < state.highWaterMark) {
21940 doRead = true;
21941 debug('length less than watermark', doRead);
21942 }
ebd8d4e8 21943
8b095871
IC
21944 // however, if we've ended, then there's no point, and if we're already
21945 // reading, then it's unnecessary.
21946 if (state.ended || state.reading) {
21947 doRead = false;
21948 debug('reading or ended', doRead);
21949 } else if (doRead) {
21950 debug('do read');
21951 state.reading = true;
21952 state.sync = true;
21953 // if the length is currently zero, then we *need* a readable event.
21954 if (state.length === 0) state.needReadable = true;
21955 // call internal read method
21956 this._read(state.highWaterMark);
21957 state.sync = false;
21958 // If _read pushed data synchronously, then `reading` will be false,
21959 // and we need to re-evaluate how much data we can return to the user.
21960 if (!state.reading) n = howMuchToRead(nOrig, state);
21961 }
ebd8d4e8 21962
8b095871
IC
21963 var ret;
21964 if (n > 0) ret = fromList(n, state);else ret = null;
ebd8d4e8 21965
8b095871
IC
21966 if (ret === null) {
21967 state.needReadable = true;
21968 n = 0;
21969 } else {
21970 state.length -= n;
21971 }
ebd8d4e8 21972
8b095871
IC
21973 if (state.length === 0) {
21974 // If we have nothing in the buffer, then we want to know
21975 // as soon as we *do* get something into the buffer.
21976 if (!state.ended) state.needReadable = true;
ebd8d4e8 21977
8b095871
IC
21978 // If we tried to read() past the EOF, then emit end on the next tick.
21979 if (nOrig !== n && state.ended) endReadable(this);
21980 }
21981
21982 if (ret !== null) this.emit('data', ret);
21983
21984 return ret;
ab78acc6
IC
21985};
21986
8b095871
IC
21987function chunkInvalid(state, chunk) {
21988 var er = null;
21989 if (!Buffer.isBuffer(chunk) && typeof chunk !== 'string' && chunk !== null && chunk !== undefined && !state.objectMode) {
21990 er = new TypeError('Invalid non-string/buffer chunk');
21991 }
21992 return er;
21993}
ab78acc6 21994
8b095871
IC
21995function onEofChunk(stream, state) {
21996 if (state.ended) return;
21997 if (state.decoder) {
21998 var chunk = state.decoder.end();
21999 if (chunk && chunk.length) {
22000 state.buffer.push(chunk);
22001 state.length += state.objectMode ? 1 : chunk.length;
22002 }
22003 }
22004 state.ended = true;
22005
22006 // emit 'readable' now to make sure it gets picked up.
22007 emitReadable(stream);
22008}
22009
22010// Don't emit readable right away in sync mode, because this can trigger
22011// another read() call => stack overflow. This way, it might trigger
22012// a nextTick recursion warning, but that's not so bad.
22013function emitReadable(stream) {
22014 var state = stream._readableState;
22015 state.needReadable = false;
22016 if (!state.emittedReadable) {
22017 debug('emitReadable', state.flowing);
22018 state.emittedReadable = true;
22019 if (state.sync) processNextTick(emitReadable_, stream);else emitReadable_(stream);
22020 }
ebd8d4e8
IC
22021}
22022
8b095871
IC
22023function emitReadable_(stream) {
22024 debug('emit readable');
22025 stream.emit('readable');
22026 flow(stream);
22027}
ebd8d4e8 22028
8b095871
IC
22029// at this point, the user has presumably seen the 'readable' event,
22030// and called read() to consume some data. that may have triggered
22031// in turn another _read(n) call, in which case reading = true if
22032// it's in progress.
22033// However, if we're not ended, or reading, and the length < hwm,
22034// then go ahead and try to read some more preemptively.
22035function maybeReadMore(stream, state) {
22036 if (!state.readingMore) {
22037 state.readingMore = true;
22038 processNextTick(maybeReadMore_, stream, state);
22039 }
22040}
ab78acc6 22041
8b095871
IC
22042function maybeReadMore_(stream, state) {
22043 var len = state.length;
22044 while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {
22045 debug('maybeReadMore read 0');
22046 stream.read(0);
22047 if (len === state.length)
22048 // didn't get any data, stop spinning.
22049 break;else len = state.length;
22050 }
22051 state.readingMore = false;
22052}
ab78acc6 22053
8b095871
IC
22054// abstract method. to be overridden in specific implementation classes.
22055// call cb(er, data) where data is <= n in length.
22056// for virtual (non-string, non-buffer) streams, "length" is somewhat
22057// arbitrary, and perhaps not very meaningful.
22058Readable.prototype._read = function (n) {
22059 this.emit('error', new Error('_read() is not implemented'));
ab78acc6
IC
22060};
22061
8b095871
IC
22062Readable.prototype.pipe = function (dest, pipeOpts) {
22063 var src = this;
22064 var state = this._readableState;
ab78acc6 22065
8b095871
IC
22066 switch (state.pipesCount) {
22067 case 0:
22068 state.pipes = dest;
22069 break;
22070 case 1:
22071 state.pipes = [state.pipes, dest];
22072 break;
22073 default:
22074 state.pipes.push(dest);
22075 break;
ab78acc6 22076 }
8b095871
IC
22077 state.pipesCount += 1;
22078 debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
ab78acc6 22079
8b095871 22080 var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;
ab78acc6 22081
8b095871
IC
22082 var endFn = doEnd ? onend : cleanup;
22083 if (state.endEmitted) processNextTick(endFn);else src.once('end', endFn);
ab78acc6 22084
8b095871
IC
22085 dest.on('unpipe', onunpipe);
22086 function onunpipe(readable) {
22087 debug('onunpipe');
22088 if (readable === src) {
22089 cleanup();
ab78acc6 22090 }
8b095871 22091 }
ebd8d4e8 22092
8b095871
IC
22093 function onend() {
22094 debug('onend');
22095 dest.end();
ebd8d4e8
IC
22096 }
22097
8b095871
IC
22098 // when the dest drains, it reduces the awaitDrain counter
22099 // on the source. This would be more elegant with a .once()
22100 // handler in flow(), but adding and removing repeatedly is
22101 // too slow.
22102 var ondrain = pipeOnDrain(src);
22103 dest.on('drain', ondrain);
ebd8d4e8 22104
8b095871
IC
22105 var cleanedUp = false;
22106 function cleanup() {
22107 debug('cleanup');
22108 // cleanup event handlers once the pipe is broken
22109 dest.removeListener('close', onclose);
22110 dest.removeListener('finish', onfinish);
22111 dest.removeListener('drain', ondrain);
22112 dest.removeListener('error', onerror);
22113 dest.removeListener('unpipe', onunpipe);
22114 src.removeListener('end', onend);
22115 src.removeListener('end', cleanup);
22116 src.removeListener('data', ondata);
ebd8d4e8 22117
8b095871 22118 cleanedUp = true;
ebd8d4e8 22119
8b095871
IC
22120 // if the reader is waiting for a drain event from this
22121 // specific writer, then it would cause it to never start
22122 // flowing again.
22123 // So, if this is awaiting a drain, then we just call it now.
22124 // If we don't know, then assume that we are waiting for one.
22125 if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();
22126 }
ebd8d4e8 22127
8b095871
IC
22128 // If the user pushes more data while we're writing to dest then we'll end up
22129 // in ondata again. However, we only want to increase awaitDrain once because
22130 // dest will only emit one 'drain' event for the multiple writes.
22131 // => Introduce a guard on increasing awaitDrain.
22132 var increasedAwaitDrain = false;
22133 src.on('data', ondata);
22134 function ondata(chunk) {
22135 debug('ondata');
22136 increasedAwaitDrain = false;
22137 var ret = dest.write(chunk);
22138 if (false === ret && !increasedAwaitDrain) {
22139 // If the user unpiped during `dest.write()`, it is possible
22140 // to get stuck in a permanently paused state if that write
22141 // also returned false.
22142 // => Check whether `dest` is still a piping destination.
22143 if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {
22144 debug('false write response, pause', src._readableState.awaitDrain);
22145 src._readableState.awaitDrain++;
22146 increasedAwaitDrain = true;
22147 }
22148 src.pause();
22149 }
22150 }
ebd8d4e8 22151
8b095871
IC
22152 // if the dest has an error, then stop piping into it.
22153 // however, don't suppress the throwing behavior for this.
22154 function onerror(er) {
22155 debug('onerror', er);
22156 unpipe();
22157 dest.removeListener('error', onerror);
22158 if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er);
22159 }
ab78acc6 22160
8b095871
IC
22161 // Make sure our error handler is attached before userland ones.
22162 prependListener(dest, 'error', onerror);
ab78acc6 22163
8b095871
IC
22164 // Both close and finish should trigger unpipe, but only once.
22165 function onclose() {
22166 dest.removeListener('finish', onfinish);
22167 unpipe();
22168 }
22169 dest.once('close', onclose);
22170 function onfinish() {
22171 debug('onfinish');
22172 dest.removeListener('close', onclose);
22173 unpipe();
ab78acc6 22174 }
8b095871 22175 dest.once('finish', onfinish);
ebd8d4e8 22176
8b095871
IC
22177 function unpipe() {
22178 debug('unpipe');
22179 src.unpipe(dest);
22180 }
22181
22182 // tell the dest that it's being piped to
22183 dest.emit('pipe', src);
22184
22185 // start the flow if it hasn't been started already.
22186 if (!state.flowing) {
22187 debug('pipe resume');
22188 src.resume();
22189 }
22190
22191 return dest;
ab78acc6 22192};
ebd8d4e8 22193
8b095871
IC
22194function pipeOnDrain(src) {
22195 return function () {
22196 var state = src._readableState;
22197 debug('pipeOnDrain', state.awaitDrain);
22198 if (state.awaitDrain) state.awaitDrain--;
22199 if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {
22200 state.flowing = true;
22201 flow(src);
22202 }
22203 };
22204}
ebd8d4e8 22205
8b095871
IC
22206Readable.prototype.unpipe = function (dest) {
22207 var state = this._readableState;
ebd8d4e8 22208
8b095871
IC
22209 // if we're not piping anywhere, then do nothing.
22210 if (state.pipesCount === 0) return this;
ebd8d4e8 22211
8b095871
IC
22212 // just one destination. most common case.
22213 if (state.pipesCount === 1) {
22214 // passed in one, but it's not the right one.
22215 if (dest && dest !== state.pipes) return this;
ebd8d4e8 22216
8b095871
IC
22217 if (!dest) dest = state.pipes;
22218
22219 // got a match.
22220 state.pipes = null;
22221 state.pipesCount = 0;
22222 state.flowing = false;
22223 if (dest) dest.emit('unpipe', this);
22224 return this;
ab78acc6 22225 }
ebd8d4e8 22226
8b095871 22227 // slow case. multiple pipe destinations.
ebd8d4e8 22228
8b095871
IC
22229 if (!dest) {
22230 // remove all.
22231 var dests = state.pipes;
22232 var len = state.pipesCount;
22233 state.pipes = null;
22234 state.pipesCount = 0;
22235 state.flowing = false;
ebd8d4e8 22236
8b095871
IC
22237 for (var i = 0; i < len; i++) {
22238 dests[i].emit('unpipe', this);
22239 }return this;
22240 }
ebd8d4e8 22241
8b095871
IC
22242 // try to find the right one.
22243 var index = indexOf(state.pipes, dest);
22244 if (index === -1) return this;
ebd8d4e8 22245
8b095871
IC
22246 state.pipes.splice(index, 1);
22247 state.pipesCount -= 1;
22248 if (state.pipesCount === 1) state.pipes = state.pipes[0];
ebd8d4e8 22249
8b095871 22250 dest.emit('unpipe', this);
ab78acc6 22251
8b095871
IC
22252 return this;
22253};
ab78acc6 22254
8b095871
IC
22255// set up data events if they are asked for
22256// Ensure readable listeners eventually get something
22257Readable.prototype.on = function (ev, fn) {
22258 var res = Stream.prototype.on.call(this, ev, fn);
22259
22260 if (ev === 'data') {
22261 // Start flowing on next tick if stream isn't explicitly paused
22262 if (this._readableState.flowing !== false) this.resume();
22263 } else if (ev === 'readable') {
22264 var state = this._readableState;
22265 if (!state.endEmitted && !state.readableListening) {
22266 state.readableListening = state.needReadable = true;
22267 state.emittedReadable = false;
22268 if (!state.reading) {
22269 processNextTick(nReadingNextTick, this);
22270 } else if (state.length) {
22271 emitReadable(this, state);
ebd8d4e8 22272 }
ab78acc6 22273 }
8b095871 22274 }
ebd8d4e8 22275
8b095871
IC
22276 return res;
22277};
22278Readable.prototype.addListener = Readable.prototype.on;
ab78acc6 22279
8b095871
IC
22280function nReadingNextTick(self) {
22281 debug('readable nexttick read 0');
22282 self.read(0);
22283}
ab78acc6 22284
8b095871
IC
22285// pause() and resume() are remnants of the legacy readable stream API
22286// If the user uses them, then switch into old mode.
22287Readable.prototype.resume = function () {
22288 var state = this._readableState;
22289 if (!state.flowing) {
22290 debug('resume');
22291 state.flowing = true;
22292 resume(this, state);
ebd8d4e8 22293 }
ab78acc6 22294 return this;
ebd8d4e8
IC
22295};
22296
8b095871
IC
22297function resume(stream, state) {
22298 if (!state.resumeScheduled) {
22299 state.resumeScheduled = true;
22300 processNextTick(resume_, stream, state);
ebd8d4e8 22301 }
8b095871 22302}
ab78acc6 22303
8b095871
IC
22304function resume_(stream, state) {
22305 if (!state.reading) {
22306 debug('resume read 0');
22307 stream.read(0);
ebd8d4e8 22308 }
ebd8d4e8 22309
8b095871
IC
22310 state.resumeScheduled = false;
22311 state.awaitDrain = 0;
22312 stream.emit('resume');
22313 flow(stream);
22314 if (state.flowing && !state.reading) stream.read(0);
22315}
ab78acc6 22316
8b095871
IC
22317Readable.prototype.pause = function () {
22318 debug('call pause flowing=%j', this._readableState.flowing);
22319 if (false !== this._readableState.flowing) {
22320 debug('pause');
22321 this._readableState.flowing = false;
22322 this.emit('pause');
ebd8d4e8 22323 }
ab78acc6
IC
22324 return this;
22325};
ebd8d4e8 22326
8b095871
IC
22327function flow(stream) {
22328 var state = stream._readableState;
22329 debug('flow', state.flowing);
22330 while (state.flowing && stream.read() !== null) {}
22331}
ebd8d4e8 22332
8b095871
IC
22333// wrap an old-style stream as the async data source.
22334// This is *not* part of the readable stream interface.
22335// It is an ugly unfortunate mess of history.
22336Readable.prototype.wrap = function (stream) {
22337 var state = this._readableState;
22338 var paused = false;
ebd8d4e8 22339
8b095871
IC
22340 var self = this;
22341 stream.on('end', function () {
22342 debug('wrapped end');
22343 if (state.decoder && !state.ended) {
22344 var chunk = state.decoder.end();
22345 if (chunk && chunk.length) self.push(chunk);
22346 }
ebd8d4e8 22347
8b095871
IC
22348 self.push(null);
22349 });
ebd8d4e8 22350
8b095871
IC
22351 stream.on('data', function (chunk) {
22352 debug('wrapped data');
22353 if (state.decoder) chunk = state.decoder.write(chunk);
ebd8d4e8 22354
8b095871
IC
22355 // don't skip over falsy values in objectMode
22356 if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;
ebd8d4e8 22357
8b095871
IC
22358 var ret = self.push(chunk);
22359 if (!ret) {
22360 paused = true;
22361 stream.pause();
22362 }
22363 });
22364
22365 // proxy all the other methods.
22366 // important when wrapping filters and duplexes.
22367 for (var i in stream) {
22368 if (this[i] === undefined && typeof stream[i] === 'function') {
22369 this[i] = function (method) {
22370 return function () {
22371 return stream[method].apply(stream, arguments);
22372 };
22373 }(i);
22374 }
ab78acc6 22375 }
ebd8d4e8 22376
8b095871
IC
22377 // proxy certain important events.
22378 var events = ['error', 'close', 'destroy', 'pause', 'resume'];
22379 forEach(events, function (ev) {
22380 stream.on(ev, self.emit.bind(self, ev));
22381 });
22382
22383 // when we try to consume some more bytes, simply unpause the
22384 // underlying stream.
22385 self._read = function (n) {
22386 debug('wrapped _read', n);
22387 if (paused) {
22388 paused = false;
22389 stream.resume();
22390 }
22391 };
22392
22393 return self;
ebd8d4e8
IC
22394};
22395
8b095871
IC
22396// exposed for testing purposes only.
22397Readable._fromList = fromList;
ebd8d4e8 22398
8b095871
IC
22399// Pluck off n bytes from an array of buffers.
22400// Length is the combined lengths of all the buffers in the list.
22401// This function is designed to be inlinable, so please take care when making
22402// changes to the function body.
22403function fromList(n, state) {
22404 // nothing buffered
22405 if (state.length === 0) return null;
ab78acc6 22406
8b095871
IC
22407 var ret;
22408 if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {
22409 // read it all, truncate the list
22410 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);
22411 state.buffer.clear();
22412 } else {
22413 // read part of list
22414 ret = fromListPartial(n, state.buffer, state.decoder);
22415 }
22416
22417 return ret;
22418}
22419
22420// Extracts only enough buffered data to satisfy the amount requested.
22421// This function is designed to be inlinable, so please take care when making
22422// changes to the function body.
22423function fromListPartial(n, list, hasStrings) {
22424 var ret;
22425 if (n < list.head.data.length) {
22426 // slice is the same for buffers and strings
22427 ret = list.head.data.slice(0, n);
22428 list.head.data = list.head.data.slice(n);
22429 } else if (n === list.head.data.length) {
22430 // first chunk is a perfect match
22431 ret = list.shift();
22432 } else {
22433 // result spans more than one buffer
22434 ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);
22435 }
22436 return ret;
ab78acc6 22437}
ebd8d4e8 22438
8b095871
IC
22439// Copies a specified amount of characters from the list of buffered data
22440// chunks.
22441// This function is designed to be inlinable, so please take care when making
22442// changes to the function body.
22443function copyFromBufferString(n, list) {
22444 var p = list.head;
22445 var c = 1;
22446 var ret = p.data;
22447 n -= ret.length;
22448 while (p = p.next) {
22449 var str = p.data;
22450 var nb = n > str.length ? str.length : n;
22451 if (nb === str.length) ret += str;else ret += str.slice(0, n);
22452 n -= nb;
22453 if (n === 0) {
22454 if (nb === str.length) {
22455 ++c;
22456 if (p.next) list.head = p.next;else list.head = list.tail = null;
22457 } else {
22458 list.head = p;
22459 p.data = str.slice(nb);
22460 }
22461 break;
ab78acc6 22462 }
8b095871
IC
22463 ++c;
22464 }
22465 list.length -= c;
22466 return ret;
ab78acc6
IC
22467}
22468
8b095871
IC
22469// Copies a specified amount of bytes from the list of buffered data chunks.
22470// This function is designed to be inlinable, so please take care when making
22471// changes to the function body.
22472function copyFromBuffer(n, list) {
22473 var ret = bufferShim.allocUnsafe(n);
22474 var p = list.head;
22475 var c = 1;
22476 p.data.copy(ret);
22477 n -= p.data.length;
22478 while (p = p.next) {
22479 var buf = p.data;
22480 var nb = n > buf.length ? buf.length : n;
22481 buf.copy(ret, ret.length - n, 0, nb);
22482 n -= nb;
22483 if (n === 0) {
22484 if (nb === buf.length) {
22485 ++c;
22486 if (p.next) list.head = p.next;else list.head = list.tail = null;
22487 } else {
22488 list.head = p;
22489 p.data = buf.slice(nb);
22490 }
22491 break;
ab78acc6 22492 }
8b095871
IC
22493 ++c;
22494 }
22495 list.length -= c;
22496 return ret;
ab78acc6 22497}
ebd8d4e8 22498
8b095871
IC
22499function endReadable(stream) {
22500 var state = stream._readableState;
ab78acc6 22501
8b095871
IC
22502 // If we get here before consuming all the bytes, then that is a
22503 // bug in node. Should never happen.
22504 if (state.length > 0) throw new Error('"endReadable()" called on non-empty stream');
ab78acc6 22505
8b095871
IC
22506 if (!state.endEmitted) {
22507 state.ended = true;
22508 processNextTick(endReadableNT, state, stream);
22509 }
22510}
ebd8d4e8 22511
8b095871
IC
22512function endReadableNT(state, stream) {
22513 // Check that we didn't get one last unshift.
22514 if (!state.endEmitted && state.length === 0) {
22515 state.endEmitted = true;
22516 stream.readable = false;
22517 stream.emit('end');
22518 }
22519}
ebd8d4e8 22520
8b095871
IC
22521function forEach(xs, f) {
22522 for (var i = 0, l = xs.length; i < l; i++) {
22523 f(xs[i], i);
22524 }
22525}
ebd8d4e8 22526
8b095871
IC
22527function indexOf(xs, x) {
22528 for (var i = 0, l = xs.length; i < l; i++) {
22529 if (xs[i] === x) return i;
22530 }
22531 return -1;
22532}
22533}).call(this,require('_process'))
22534},{"./_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){
22535// a transform stream is a readable/writable stream where you do
22536// something with the data. Sometimes it's called a "filter",
22537// but that's not a great name for it, since that implies a thing where
22538// some bits pass through, and others are simply ignored. (That would
22539// be a valid example of a transform, of course.)
ab78acc6 22540//
8b095871
IC
22541// While the output is causally related to the input, it's not a
22542// necessarily symmetric or synchronous transformation. For example,
22543// a zlib stream might take multiple plain-text writes(), and then
22544// emit a single compressed chunk some time in the future.
ab78acc6 22545//
8b095871 22546// Here's how this works:
ab78acc6 22547//
8b095871
IC
22548// The Transform stream has all the aspects of the readable and writable
22549// stream classes. When you write(chunk), that calls _write(chunk,cb)
22550// internally, and returns false if there's a lot of pending writes
22551// buffered up. When you call read(), that calls _read(n) until
22552// there's enough pending readable data buffered up.
22553//
22554// In a transform stream, the written data is placed in a buffer. When
22555// _read(n) is called, it transforms the queued up data, calling the
22556// buffered _write cb's as it consumes chunks. If consuming a single
22557// written chunk would result in multiple output chunks, then the first
22558// outputted bit calls the readcb, and subsequent chunks just go into
22559// the read buffer, and will cause it to emit 'readable' if necessary.
22560//
22561// This way, back-pressure is actually determined by the reading side,
22562// since _read has to be called to start processing a new chunk. However,
22563// a pathological inflate type of transform can cause excessive buffering
22564// here. For example, imagine a stream where every byte of input is
22565// interpreted as an integer from 0-255, and then results in that many
22566// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in
22567// 1kb of data being output. In this case, you could write a very small
22568// amount of input, and end up with a very large amount of output. In
22569// such a pathological inflating mechanism, there'd be no way to tell
22570// the system to stop doing the transform. A single 4MB write could
22571// cause the system to run out of memory.
22572//
22573// However, even in such a pathological case, only a single written chunk
22574// would be consumed, and then the rest would wait (un-transformed) until
22575// the results of the previous transformed chunk were consumed.
ebd8d4e8 22576
8b095871 22577'use strict';
ebd8d4e8 22578
8b095871 22579module.exports = Transform;
ebd8d4e8 22580
8b095871 22581var Duplex = require('./_stream_duplex');
ebd8d4e8 22582
ab78acc6
IC
22583/*<replacement>*/
22584var util = require('core-util-is');
22585util.inherits = require('inherits');
22586/*</replacement>*/
ebd8d4e8 22587
8b095871 22588util.inherits(Transform, Duplex);
ebd8d4e8 22589
8b095871
IC
22590function TransformState(stream) {
22591 this.afterTransform = function (er, data) {
22592 return afterTransform(stream, er, data);
22593 };
ebd8d4e8 22594
8b095871
IC
22595 this.needTransform = false;
22596 this.transforming = false;
22597 this.writecb = null;
22598 this.writechunk = null;
22599 this.writeencoding = null;
22600}
ebd8d4e8 22601
8b095871
IC
22602function afterTransform(stream, er, data) {
22603 var ts = stream._transformState;
22604 ts.transforming = false;
ebd8d4e8 22605
8b095871 22606 var cb = ts.writecb;
ebd8d4e8 22607
8b095871 22608 if (!cb) return stream.emit('error', new Error('no writecb in Transform class'));
ebd8d4e8 22609
8b095871
IC
22610 ts.writechunk = null;
22611 ts.writecb = null;
ebd8d4e8 22612
8b095871 22613 if (data !== null && data !== undefined) stream.push(data);
ebd8d4e8 22614
8b095871
IC
22615 cb(er);
22616
22617 var rs = stream._readableState;
22618 rs.reading = false;
22619 if (rs.needReadable || rs.length < rs.highWaterMark) {
22620 stream._read(rs.highWaterMark);
22621 }
ebd8d4e8
IC
22622}
22623
8b095871
IC
22624function Transform(options) {
22625 if (!(this instanceof Transform)) return new Transform(options);
ebd8d4e8 22626
8b095871 22627 Duplex.call(this, options);
ebd8d4e8 22628
8b095871
IC
22629 this._transformState = new TransformState(this);
22630
22631 var stream = this;
22632
22633 // start out asking for a readable event once data is transformed.
22634 this._readableState.needReadable = true;
22635
22636 // we have implemented the _read method, and done the other things
22637 // that Readable wants before the first _read call, so unset the
22638 // sync guard flag.
22639 this._readableState.sync = false;
22640
22641 if (options) {
22642 if (typeof options.transform === 'function') this._transform = options.transform;
22643
22644 if (typeof options.flush === 'function') this._flush = options.flush;
ebd8d4e8 22645 }
8b095871
IC
22646
22647 // When the writable side finishes, then flush out anything remaining.
22648 this.once('prefinish', function () {
22649 if (typeof this._flush === 'function') this._flush(function (er, data) {
22650 done(stream, er, data);
22651 });else done(stream);
22652 });
ab78acc6 22653}
ebd8d4e8 22654
8b095871
IC
22655Transform.prototype.push = function (chunk, encoding) {
22656 this._transformState.needTransform = false;
22657 return Duplex.prototype.push.call(this, chunk, encoding);
22658};
22659
22660// This is the part where you do stuff!
22661// override this function in implementation classes.
22662// 'chunk' is an input chunk.
ab78acc6 22663//
8b095871
IC
22664// Call `push(newChunk)` to pass along transformed output
22665// to the readable side. You may call 'push' zero or more times.
ab78acc6 22666//
8b095871
IC
22667// Call `cb(err)` when you are done with this chunk. If you pass
22668// an error, then that'll put the hurt on the whole operation. If you
22669// never call cb(), then you'll never get another chunk.
22670Transform.prototype._transform = function (chunk, encoding, cb) {
22671 throw new Error('_transform() is not implemented');
22672};
ebd8d4e8 22673
8b095871
IC
22674Transform.prototype._write = function (chunk, encoding, cb) {
22675 var ts = this._transformState;
22676 ts.writecb = cb;
22677 ts.writechunk = chunk;
22678 ts.writeencoding = encoding;
22679 if (!ts.transforming) {
22680 var rs = this._readableState;
22681 if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);
22682 }
22683};
ebd8d4e8 22684
8b095871
IC
22685// Doesn't matter what the args are here.
22686// _transform does all the work.
22687// That we got here means that the readable side wants more data.
22688Transform.prototype._read = function (n) {
22689 var ts = this._transformState;
ebd8d4e8 22690
8b095871
IC
22691 if (ts.writechunk !== null && ts.writecb && !ts.transforming) {
22692 ts.transforming = true;
22693 this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
22694 } else {
22695 // mark that we need a transform, so that any data that comes in
22696 // will get processed, now that we've asked for it.
22697 ts.needTransform = true;
22698 }
22699};
ebd8d4e8 22700
8b095871
IC
22701function done(stream, er, data) {
22702 if (er) return stream.emit('error', er);
ebd8d4e8 22703
8b095871 22704 if (data !== null && data !== undefined) stream.push(data);
ebd8d4e8 22705
8b095871
IC
22706 // if there's nothing in the write buffer, then that means
22707 // that nothing more will ever be provided
22708 var ws = stream._writableState;
22709 var ts = stream._transformState;
ebd8d4e8 22710
8b095871 22711 if (ws.length) throw new Error('Calling transform done when ws.length != 0');
ebd8d4e8 22712
8b095871 22713 if (ts.transforming) throw new Error('Calling transform done when still transforming');
ebd8d4e8 22714
8b095871
IC
22715 return stream.push(null);
22716}
22717},{"./_stream_duplex":15,"core-util-is":6,"inherits":9}],19:[function(require,module,exports){
ab78acc6 22718(function (process){
8b095871
IC
22719// A bit simpler than readable streams.
22720// Implement an async ._write(chunk, encoding, cb), and it'll handle all
22721// the drain event emission and buffering.
ebd8d4e8 22722
8b095871
IC
22723'use strict';
22724
22725module.exports = Writable;
ebd8d4e8 22726
ab78acc6 22727/*<replacement>*/
8b095871 22728var processNextTick = require('process-nextick-args');
ab78acc6
IC
22729/*</replacement>*/
22730
ab78acc6 22731/*<replacement>*/
8b095871 22732var asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : processNextTick;
ab78acc6
IC
22733/*</replacement>*/
22734
ab78acc6 22735/*<replacement>*/
8b095871 22736var Duplex;
ab78acc6
IC
22737/*</replacement>*/
22738
8b095871 22739Writable.WritableState = WritableState;
ab78acc6
IC
22740
22741/*<replacement>*/
22742var util = require('core-util-is');
22743util.inherits = require('inherits');
22744/*</replacement>*/
22745
8b095871
IC
22746/*<replacement>*/
22747var internalUtil = {
22748 deprecate: require('util-deprecate')
22749};
22750/*</replacement>*/
ab78acc6 22751
8b095871
IC
22752/*<replacement>*/
22753var Stream;
22754(function () {
22755 try {
22756 Stream = require('st' + 'ream');
22757 } catch (_) {} finally {
22758 if (!Stream) Stream = require('events').EventEmitter;
22759 }
22760})();
22761/*</replacement>*/
ab78acc6 22762
8b095871 22763var Buffer = require('buffer').Buffer;
ab78acc6 22764/*<replacement>*/
8b095871 22765var bufferShim = require('buffer-shims');
ab78acc6
IC
22766/*</replacement>*/
22767
8b095871
IC
22768util.inherits(Writable, Stream);
22769
22770function nop() {}
ab78acc6 22771
8b095871
IC
22772function WriteReq(chunk, encoding, cb) {
22773 this.chunk = chunk;
22774 this.encoding = encoding;
22775 this.callback = cb;
22776 this.next = null;
22777}
ab78acc6 22778
8b095871
IC
22779function WritableState(options, stream) {
22780 Duplex = Duplex || require('./_stream_duplex');
ab78acc6
IC
22781
22782 options = options || {};
22783
8b095871
IC
22784 // object stream flag to indicate whether or not this stream
22785 // contains buffers or objects.
22786 this.objectMode = !!options.objectMode;
22787
22788 if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.writableObjectMode;
22789
22790 // the point at which write() starts returning false
22791 // Note: 0 is a valid value, means that we always return false if
22792 // the entire buffer is not flushed immediately on write()
ab78acc6 22793 var hwm = options.highWaterMark;
8b095871
IC
22794 var defaultHwm = this.objectMode ? 16 : 16 * 1024;
22795 this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;
ab78acc6
IC
22796
22797 // cast to ints.
8b095871 22798 this.highWaterMark = ~ ~this.highWaterMark;
ab78acc6 22799
8b095871
IC
22800 // drain event flag.
22801 this.needDrain = false;
22802 // at the start of calling end()
22803 this.ending = false;
22804 // when end() has been called, and returned
ab78acc6 22805 this.ended = false;
8b095871
IC
22806 // when 'finish' is emitted
22807 this.finished = false;
22808
22809 // should we decode strings into buffers before passing to _write?
22810 // this is here so that some node-core streams can optimize string
22811 // handling at a lower level.
22812 var noDecode = options.decodeStrings === false;
22813 this.decodeStrings = !noDecode;
22814
22815 // Crypto is kind of old and crusty. Historically, its default string
22816 // encoding is 'binary' so we have to make this configurable.
22817 // Everything else in the universe uses 'utf8', though.
22818 this.defaultEncoding = options.defaultEncoding || 'utf8';
22819
22820 // not an actual buffer we keep track of, but a measurement
22821 // of how much we're waiting to get pushed to some underlying
22822 // socket or file.
22823 this.length = 0;
22824
22825 // a flag to see when we're in the middle of a write.
22826 this.writing = false;
22827
22828 // when true all writes will be buffered until .uncork() call
22829 this.corked = 0;
ebd8d4e8 22830
ab78acc6
IC
22831 // a flag to be able to tell if the onwrite cb is called immediately,
22832 // or on a later tick. We set this to true at first, because any
22833 // actions that shouldn't happen until "later" should generally also
22834 // not happen before the first write call.
22835 this.sync = true;
ebd8d4e8 22836
8b095871
IC
22837 // a flag to know if we're processing previously buffered items, which
22838 // may call the _write() callback in the same tick, so that we don't
22839 // end up in an overlapped onwrite situation.
22840 this.bufferProcessing = false;
22841
22842 // the callback that's passed to _write(chunk,cb)
22843 this.onwrite = function (er) {
22844 onwrite(stream, er);
22845 };
22846
22847 // the callback that the user supplies to write(chunk,encoding,cb)
22848 this.writecb = null;
22849
22850 // the amount that is being written when _write is called.
22851 this.writelen = 0;
22852
22853 this.bufferedRequest = null;
22854 this.lastBufferedRequest = null;
22855
22856 // number of pending user-supplied write callbacks
22857 // this must be 0 before 'finish' can be emitted
22858 this.pendingcb = 0;
22859
22860 // emit prefinish if the only thing we're waiting for is _write cbs
22861 // This is relevant for synchronous Transform streams
22862 this.prefinished = false;
22863
22864 // True if the error was already emitted and should not be thrown again
22865 this.errorEmitted = false;
22866
22867 // count buffered requests
22868 this.bufferedRequestCount = 0;
22869
22870 // allocate the first CorkedRequest, there is always
22871 // one allocated and free to use, and we maintain at most two
22872 this.corkedRequestsFree = new CorkedRequest(this);
22873}
22874
22875WritableState.prototype.getBuffer = function getBuffer() {
22876 var current = this.bufferedRequest;
22877 var out = [];
22878 while (current) {
22879 out.push(current);
22880 current = current.next;
22881 }
22882 return out;
22883};
22884
22885(function () {
22886 try {
22887 Object.defineProperty(WritableState.prototype, 'buffer', {
22888 get: internalUtil.deprecate(function () {
22889 return this.getBuffer();
22890 }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.')
22891 });
22892 } catch (_) {}
22893})();
22894
22895// Test _writableState for inheritance to account for Duplex streams,
22896// whose prototype chain only points to Readable.
22897var realHasInstance;
22898if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {
22899 realHasInstance = Function.prototype[Symbol.hasInstance];
22900 Object.defineProperty(Writable, Symbol.hasInstance, {
22901 value: function (object) {
22902 if (realHasInstance.call(this, object)) return true;
22903
22904 return object && object._writableState instanceof WritableState;
22905 }
22906 });
22907} else {
22908 realHasInstance = function (object) {
22909 return object instanceof this;
22910 };
22911}
22912
22913function Writable(options) {
22914 Duplex = Duplex || require('./_stream_duplex');
22915
22916 // Writable ctor is applied to Duplexes, too.
22917 // `realHasInstance` is necessary because using plain `instanceof`
22918 // would return false, as no `_writableState` property is attached.
22919
22920 // Trying to use the custom `instanceof` for Writable here will also break the
22921 // Node.js LazyTransform implementation, which has a non-trivial getter for
22922 // `_writableState` that would lead to infinite recursion.
22923 if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {
22924 return new Writable(options);
22925 }
22926
22927 this._writableState = new WritableState(options, this);
22928
22929 // legacy.
22930 this.writable = true;
22931
22932 if (options) {
22933 if (typeof options.write === 'function') this._write = options.write;
22934
22935 if (typeof options.writev === 'function') this._writev = options.writev;
22936 }
22937
22938 Stream.call(this);
22939}
22940
22941// Otherwise people can pipe Writable streams, which is just wrong.
22942Writable.prototype.pipe = function () {
22943 this.emit('error', new Error('Cannot pipe, not readable'));
22944};
22945
22946function writeAfterEnd(stream, cb) {
22947 var er = new Error('write after end');
22948 // TODO: defer error events consistently everywhere, not just the cb
22949 stream.emit('error', er);
22950 processNextTick(cb, er);
22951}
22952
22953// If we get something that is not a buffer, string, null, or undefined,
22954// and we're not in objectMode, then that's an error.
22955// Otherwise stream chunks are all considered to be of length=1, and the
22956// watermarks determine how many objects to keep in the buffer, rather than
22957// how many bytes or characters.
22958function validChunk(stream, state, chunk, cb) {
22959 var valid = true;
22960 var er = false;
22961 // Always throw error if a null is written
22962 // if we are not in object mode then throw
22963 // if it is not a buffer, string, or undefined.
22964 if (chunk === null) {
22965 er = new TypeError('May not write null values to stream');
22966 } else if (!Buffer.isBuffer(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {
22967 er = new TypeError('Invalid non-string/buffer chunk');
22968 }
22969 if (er) {
22970 stream.emit('error', er);
22971 processNextTick(cb, er);
22972 valid = false;
22973 }
22974 return valid;
22975}
ebd8d4e8 22976
8b095871
IC
22977Writable.prototype.write = function (chunk, encoding, cb) {
22978 var state = this._writableState;
22979 var ret = false;
ab78acc6 22980
8b095871
IC
22981 if (typeof encoding === 'function') {
22982 cb = encoding;
22983 encoding = null;
22984 }
ab78acc6 22985
8b095871 22986 if (Buffer.isBuffer(chunk)) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;
ab78acc6 22987
8b095871 22988 if (typeof cb !== 'function') cb = nop;
ab78acc6 22989
8b095871
IC
22990 if (state.ended) writeAfterEnd(this, cb);else if (validChunk(this, state, chunk, cb)) {
22991 state.pendingcb++;
22992 ret = writeOrBuffer(this, state, chunk, encoding, cb);
22993 }
ab78acc6 22994
8b095871
IC
22995 return ret;
22996};
ab78acc6 22997
8b095871
IC
22998Writable.prototype.cork = function () {
22999 var state = this._writableState;
ab78acc6 23000
8b095871
IC
23001 state.corked++;
23002};
ebd8d4e8 23003
8b095871
IC
23004Writable.prototype.uncork = function () {
23005 var state = this._writableState;
ab78acc6 23006
8b095871
IC
23007 if (state.corked) {
23008 state.corked--;
ab78acc6 23009
8b095871
IC
23010 if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);
23011 }
23012};
ab78acc6 23013
8b095871
IC
23014Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {
23015 // node::ParseEncoding() requires lower case.
23016 if (typeof encoding === 'string') encoding = encoding.toLowerCase();
23017 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);
23018 this._writableState.defaultEncoding = encoding;
23019 return this;
23020};
ab78acc6 23021
8b095871
IC
23022function decodeChunk(state, chunk, encoding) {
23023 if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {
23024 chunk = bufferShim.from(chunk, encoding);
23025 }
23026 return chunk;
ab78acc6
IC
23027}
23028
8b095871
IC
23029// if we're already writing something, then just put this
23030// in the queue, and wait our turn. Otherwise, call _write
23031// If we return false, then we need a drain event, so set that flag.
23032function writeOrBuffer(stream, state, chunk, encoding, cb) {
23033 chunk = decodeChunk(state, chunk, encoding);
ab78acc6 23034
8b095871
IC
23035 if (Buffer.isBuffer(chunk)) encoding = 'buffer';
23036 var len = state.objectMode ? 1 : chunk.length;
ebd8d4e8 23037
8b095871 23038 state.length += len;
ebd8d4e8 23039
8b095871
IC
23040 var ret = state.length < state.highWaterMark;
23041 // we must ensure that previous needDrain will not be reset to false.
23042 if (!ret) state.needDrain = true;
ebd8d4e8 23043
8b095871
IC
23044 if (state.writing || state.corked) {
23045 var last = state.lastBufferedRequest;
23046 state.lastBufferedRequest = new WriteReq(chunk, encoding, cb);
23047 if (last) {
23048 last.next = state.lastBufferedRequest;
ebd8d4e8 23049 } else {
8b095871
IC
23050 state.bufferedRequest = state.lastBufferedRequest;
23051 }
23052 state.bufferedRequestCount += 1;
23053 } else {
23054 doWrite(stream, state, false, len, chunk, encoding, cb);
23055 }
ab78acc6 23056
8b095871
IC
23057 return ret;
23058}
ab78acc6 23059
8b095871
IC
23060function doWrite(stream, state, writev, len, chunk, encoding, cb) {
23061 state.writelen = len;
23062 state.writecb = cb;
23063 state.writing = true;
23064 state.sync = true;
23065 if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);
23066 state.sync = false;
23067}
ab78acc6 23068
8b095871
IC
23069function onwriteError(stream, state, sync, er, cb) {
23070 --state.pendingcb;
23071 if (sync) processNextTick(cb, er);else cb(er);
ab78acc6 23072
8b095871
IC
23073 stream._writableState.errorEmitted = true;
23074 stream.emit('error', er);
23075}
ebd8d4e8 23076
8b095871
IC
23077function onwriteStateUpdate(state) {
23078 state.writing = false;
23079 state.writecb = null;
23080 state.length -= state.writelen;
23081 state.writelen = 0;
ab78acc6 23082}
ebd8d4e8 23083
8b095871
IC
23084function onwrite(stream, er) {
23085 var state = stream._writableState;
23086 var sync = state.sync;
23087 var cb = state.writecb;
ab78acc6 23088
8b095871 23089 onwriteStateUpdate(state);
ab78acc6 23090
8b095871
IC
23091 if (er) onwriteError(stream, state, sync, er, cb);else {
23092 // Check if we're actually ready to finish, but don't emit yet
23093 var finished = needFinish(state);
23094
23095 if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {
23096 clearBuffer(stream, state);
23097 }
23098
23099 if (sync) {
23100 /*<replacement>*/
23101 asyncWrite(afterWrite, stream, state, finished, cb);
23102 /*</replacement>*/
23103 } else {
23104 afterWrite(stream, state, finished, cb);
23105 }
23106 }
ab78acc6
IC
23107}
23108
8b095871
IC
23109function afterWrite(stream, state, finished, cb) {
23110 if (!finished) onwriteDrain(stream, state);
23111 state.pendingcb--;
23112 cb();
23113 finishMaybe(stream, state);
23114}
ab78acc6 23115
8b095871
IC
23116// Must force callback to be called on nextTick, so that we don't
23117// emit 'drain' before the write() consumer gets the 'false' return
23118// value, and has a chance to attach a 'drain' listener.
23119function onwriteDrain(stream, state) {
23120 if (state.length === 0 && state.needDrain) {
23121 state.needDrain = false;
23122 stream.emit('drain');
ebd8d4e8 23123 }
ebd8d4e8 23124}
ebd8d4e8 23125
8b095871
IC
23126// if there's something in the buffer waiting, then process it
23127function clearBuffer(stream, state) {
23128 state.bufferProcessing = true;
23129 var entry = state.bufferedRequest;
ebd8d4e8 23130
8b095871
IC
23131 if (stream._writev && entry && entry.next) {
23132 // Fast case, write everything using _writev()
23133 var l = state.bufferedRequestCount;
23134 var buffer = new Array(l);
23135 var holder = state.corkedRequestsFree;
23136 holder.entry = entry;
ebd8d4e8 23137
8b095871
IC
23138 var count = 0;
23139 while (entry) {
23140 buffer[count] = entry;
23141 entry = entry.next;
23142 count += 1;
23143 }
ebd8d4e8 23144
8b095871 23145 doWrite(stream, state, true, state.length, buffer, '', holder.finish);
ebd8d4e8 23146
8b095871
IC
23147 // doWrite is almost always async, defer these to save a bit of time
23148 // as the hot path ends with doWrite
23149 state.pendingcb++;
23150 state.lastBufferedRequest = null;
23151 if (holder.next) {
23152 state.corkedRequestsFree = holder.next;
23153 holder.next = null;
23154 } else {
23155 state.corkedRequestsFree = new CorkedRequest(state);
23156 }
23157 } else {
23158 // Slow case, write chunks one-by-one
23159 while (entry) {
23160 var chunk = entry.chunk;
23161 var encoding = entry.encoding;
23162 var cb = entry.callback;
23163 var len = state.objectMode ? 1 : chunk.length;
ebd8d4e8 23164
8b095871
IC
23165 doWrite(stream, state, false, len, chunk, encoding, cb);
23166 entry = entry.next;
23167 // if we didn't call the onwrite immediately, then
23168 // it means that we need to wait until it does.
23169 // also, that means that the chunk and cb are currently
23170 // being processed, so move the buffer counter past them.
23171 if (state.writing) {
23172 break;
23173 }
23174 }
23175
23176 if (entry === null) state.lastBufferedRequest = null;
ebd8d4e8 23177 }
ab78acc6 23178
8b095871
IC
23179 state.bufferedRequestCount = 0;
23180 state.bufferedRequest = entry;
23181 state.bufferProcessing = false;
ebd8d4e8
IC
23182}
23183
8b095871
IC
23184Writable.prototype._write = function (chunk, encoding, cb) {
23185 cb(new Error('_write() is not implemented'));
23186};
ebd8d4e8 23187
8b095871 23188Writable.prototype._writev = null;
ab78acc6 23189
8b095871
IC
23190Writable.prototype.end = function (chunk, encoding, cb) {
23191 var state = this._writableState;
23192
23193 if (typeof chunk === 'function') {
23194 cb = chunk;
23195 chunk = null;
23196 encoding = null;
23197 } else if (typeof encoding === 'function') {
23198 cb = encoding;
23199 encoding = null;
ab78acc6
IC
23200 }
23201
8b095871 23202 if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);
ab78acc6 23203
8b095871
IC
23204 // .end() fully uncorks
23205 if (state.corked) {
23206 state.corked = 1;
23207 this.uncork();
ab78acc6
IC
23208 }
23209
8b095871
IC
23210 // ignore unnecessary end() calls.
23211 if (!state.ending && !state.finished) endWritable(this, state, cb);
23212};
ab78acc6 23213
8b095871
IC
23214function needFinish(state) {
23215 return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;
23216}
ab78acc6 23217
8b095871
IC
23218function prefinish(stream, state) {
23219 if (!state.prefinished) {
23220 state.prefinished = true;
23221 stream.emit('prefinish');
ab78acc6 23222 }
8b095871 23223}
ab78acc6 23224
8b095871
IC
23225function finishMaybe(stream, state) {
23226 var need = needFinish(state);
23227 if (need) {
23228 if (state.pendingcb === 0) {
23229 prefinish(stream, state);
23230 state.finished = true;
23231 stream.emit('finish');
23232 } else {
23233 prefinish(stream, state);
23234 }
ab78acc6 23235 }
8b095871
IC
23236 return need;
23237}
ab78acc6 23238
8b095871
IC
23239function endWritable(stream, state, cb) {
23240 state.ending = true;
23241 finishMaybe(stream, state);
23242 if (cb) {
23243 if (state.finished) processNextTick(cb);else stream.once('finish', cb);
ab78acc6 23244 }
8b095871
IC
23245 state.ended = true;
23246 stream.writable = false;
23247}
ab78acc6 23248
8b095871
IC
23249// It seems a linked list but it is not
23250// there will be only 2 of these for each stream
23251function CorkedRequest(state) {
23252 var _this = this;
ab78acc6 23253
8b095871
IC
23254 this.next = null;
23255 this.entry = null;
ebd8d4e8 23256
8b095871
IC
23257 this.finish = function (err) {
23258 var entry = _this.entry;
23259 _this.entry = null;
23260 while (entry) {
23261 var cb = entry.callback;
23262 state.pendingcb--;
23263 cb(err);
23264 entry = entry.next;
23265 }
23266 if (state.corkedRequestsFree) {
23267 state.corkedRequestsFree.next = _this;
23268 } else {
23269 state.corkedRequestsFree = _this;
23270 }
23271 };
23272}
23273}).call(this,require('_process'))
23274},{"./_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){
23275'use strict';
ebd8d4e8 23276
8b095871
IC
23277var Buffer = require('buffer').Buffer;
23278/*<replacement>*/
23279var bufferShim = require('buffer-shims');
23280/*</replacement>*/
ebd8d4e8 23281
8b095871 23282module.exports = BufferList;
ebd8d4e8 23283
8b095871
IC
23284function BufferList() {
23285 this.head = null;
23286 this.tail = null;
23287 this.length = 0;
23288}
ab78acc6 23289
8b095871
IC
23290BufferList.prototype.push = function (v) {
23291 var entry = { data: v, next: null };
23292 if (this.length > 0) this.tail.next = entry;else this.head = entry;
23293 this.tail = entry;
23294 ++this.length;
23295};
23296
23297BufferList.prototype.unshift = function (v) {
23298 var entry = { data: v, next: this.head };
23299 if (this.length === 0) this.tail = entry;
23300 this.head = entry;
23301 ++this.length;
23302};
ab78acc6 23303
8b095871
IC
23304BufferList.prototype.shift = function () {
23305 if (this.length === 0) return;
23306 var ret = this.head.data;
23307 if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;
23308 --this.length;
ab78acc6
IC
23309 return ret;
23310};
23311
8b095871
IC
23312BufferList.prototype.clear = function () {
23313 this.head = this.tail = null;
23314 this.length = 0;
23315};
ebd8d4e8 23316
8b095871
IC
23317BufferList.prototype.join = function (s) {
23318 if (this.length === 0) return '';
23319 var p = this.head;
23320 var ret = '' + p.data;
23321 while (p = p.next) {
23322 ret += s + p.data;
23323 }return ret;
23324};
ebd8d4e8 23325
8b095871
IC
23326BufferList.prototype.concat = function (n) {
23327 if (this.length === 0) return bufferShim.alloc(0);
23328 if (this.length === 1) return this.head.data;
23329 var ret = bufferShim.allocUnsafe(n >>> 0);
23330 var p = this.head;
23331 var i = 0;
23332 while (p) {
23333 p.data.copy(ret, i);
23334 i += p.data.length;
23335 p = p.next;
ebd8d4e8 23336 }
8b095871
IC
23337 return ret;
23338};
23339},{"buffer":5,"buffer-shims":4}],21:[function(require,module,exports){
23340module.exports = require("./lib/_stream_passthrough.js")
ebd8d4e8 23341
8b095871
IC
23342},{"./lib/_stream_passthrough.js":16}],22:[function(require,module,exports){
23343(function (process){
23344var Stream = (function (){
23345 try {
23346 return require('st' + 'ream'); // hack to fix a circular dependency issue when used with browserify
23347 } catch(_){}
23348}());
23349exports = module.exports = require('./lib/_stream_readable.js');
23350exports.Stream = Stream || exports;
23351exports.Readable = exports;
23352exports.Writable = require('./lib/_stream_writable.js');
23353exports.Duplex = require('./lib/_stream_duplex.js');
23354exports.Transform = require('./lib/_stream_transform.js');
23355exports.PassThrough = require('./lib/_stream_passthrough.js');
ab78acc6 23356
8b095871
IC
23357if (!process.browser && process.env.READABLE_STREAM === 'disable' && Stream) {
23358 module.exports = Stream;
ab78acc6 23359}
ebd8d4e8 23360
8b095871
IC
23361}).call(this,require('_process'))
23362},{"./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){
23363module.exports = require("./lib/_stream_transform.js")
ebd8d4e8 23364
8b095871
IC
23365},{"./lib/_stream_transform.js":18}],24:[function(require,module,exports){
23366module.exports = require("./lib/_stream_writable.js")
ab78acc6 23367
8b095871
IC
23368},{"./lib/_stream_writable.js":19}],25:[function(require,module,exports){
23369// Copyright Joyent, Inc. and other Node contributors.
23370//
23371// Permission is hereby granted, free of charge, to any person obtaining a
23372// copy of this software and associated documentation files (the
23373// "Software"), to deal in the Software without restriction, including
23374// without limitation the rights to use, copy, modify, merge, publish,
23375// distribute, sublicense, and/or sell copies of the Software, and to permit
23376// persons to whom the Software is furnished to do so, subject to the
23377// following conditions:
23378//
23379// The above copyright notice and this permission notice shall be included
23380// in all copies or substantial portions of the Software.
23381//
23382// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
23383// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
23384// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
23385// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
23386// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
23387// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
23388// USE OR OTHER DEALINGS IN THE SOFTWARE.
23389
23390module.exports = Stream;
23391
23392var EE = require('events').EventEmitter;
23393var inherits = require('inherits');
23394
23395inherits(Stream, EE);
23396Stream.Readable = require('readable-stream/readable.js');
23397Stream.Writable = require('readable-stream/writable.js');
23398Stream.Duplex = require('readable-stream/duplex.js');
23399Stream.Transform = require('readable-stream/transform.js');
23400Stream.PassThrough = require('readable-stream/passthrough.js');
ebd8d4e8 23401
8b095871
IC
23402// Backwards-compat with node 0.4.x
23403Stream.Stream = Stream;
ebd8d4e8 23404
ab78acc6 23405
ab78acc6 23406
8b095871
IC
23407// old-style streams. Note that the pipe method (the only relevant
23408// part of this class) is overridden in the Readable class.
ebd8d4e8 23409
8b095871
IC
23410function Stream() {
23411 EE.call(this);
23412}
ebd8d4e8 23413
8b095871
IC
23414Stream.prototype.pipe = function(dest, options) {
23415 var source = this;
ab78acc6 23416
8b095871
IC
23417 function ondata(chunk) {
23418 if (dest.writable) {
23419 if (false === dest.write(chunk) && source.pause) {
23420 source.pause();
23421 }
ab78acc6
IC
23422 }
23423 }
23424
8b095871
IC
23425 source.on('data', ondata);
23426
23427 function ondrain() {
23428 if (source.readable && source.resume) {
23429 source.resume();
23430 }
ab78acc6
IC
23431 }
23432
ab78acc6
IC
23433 dest.on('drain', ondrain);
23434
8b095871
IC
23435 // If the 'end' option is not supplied, dest.end() will be called when
23436 // source gets the 'end' or 'close' events. Only dest.end() once.
23437 if (!dest._isStdio && (!options || options.end !== false)) {
23438 source.on('end', onend);
23439 source.on('close', onclose);
ab78acc6
IC
23440 }
23441
8b095871
IC
23442 var didOnEnd = false;
23443 function onend() {
23444 if (didOnEnd) return;
23445 didOnEnd = true;
ab78acc6 23446
8b095871 23447 dest.end();
ab78acc6 23448 }
ab78acc6
IC
23449
23450
ab78acc6 23451 function onclose() {
8b095871
IC
23452 if (didOnEnd) return;
23453 didOnEnd = true;
ebd8d4e8 23454
8b095871 23455 if (typeof dest.destroy === 'function') dest.destroy();
ebd8d4e8
IC
23456 }
23457
8b095871
IC
23458 // don't leave dangling pipes when there are errors.
23459 function onerror(er) {
23460 cleanup();
23461 if (EE.listenerCount(this, 'error') === 0) {
23462 throw er; // Unhandled stream error in pipe.
23463 }
ebd8d4e8
IC
23464 }
23465
8b095871
IC
23466 source.on('error', onerror);
23467 dest.on('error', onerror);
ab78acc6 23468
8b095871
IC
23469 // remove all the event listeners that were added.
23470 function cleanup() {
23471 source.removeListener('data', ondata);
23472 dest.removeListener('drain', ondrain);
ab78acc6 23473
8b095871
IC
23474 source.removeListener('end', onend);
23475 source.removeListener('close', onclose);
ab78acc6 23476
8b095871
IC
23477 source.removeListener('error', onerror);
23478 dest.removeListener('error', onerror);
ab78acc6 23479
8b095871
IC
23480 source.removeListener('end', cleanup);
23481 source.removeListener('close', cleanup);
ab78acc6 23482
8b095871
IC
23483 dest.removeListener('close', cleanup);
23484 }
ab78acc6 23485
8b095871
IC
23486 source.on('end', cleanup);
23487 source.on('close', cleanup);
ab78acc6 23488
8b095871 23489 dest.on('close', cleanup);
ebd8d4e8 23490
8b095871 23491 dest.emit('pipe', source);
ab78acc6 23492
8b095871
IC
23493 // Allow for unix-like usage: A.pipe(B).pipe(C)
23494 return dest;
23495};
ab78acc6 23496
8b095871
IC
23497},{"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){
23498// Copyright Joyent, Inc. and other Node contributors.
23499//
23500// Permission is hereby granted, free of charge, to any person obtaining a
23501// copy of this software and associated documentation files (the
23502// "Software"), to deal in the Software without restriction, including
23503// without limitation the rights to use, copy, modify, merge, publish,
23504// distribute, sublicense, and/or sell copies of the Software, and to permit
23505// persons to whom the Software is furnished to do so, subject to the
23506// following conditions:
23507//
23508// The above copyright notice and this permission notice shall be included
23509// in all copies or substantial portions of the Software.
23510//
23511// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
23512// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
23513// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
23514// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
23515// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
23516// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
23517// USE OR OTHER DEALINGS IN THE SOFTWARE.
23518
23519var Buffer = require('buffer').Buffer;
ebd8d4e8 23520
8b095871
IC
23521var isBufferEncoding = Buffer.isEncoding
23522 || function(encoding) {
23523 switch (encoding && encoding.toLowerCase()) {
23524 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;
23525 default: return false;
23526 }
23527 }
ab78acc6 23528
ab78acc6 23529
8b095871
IC
23530function assertEncoding(encoding) {
23531 if (encoding && !isBufferEncoding(encoding)) {
23532 throw new Error('Unknown encoding: ' + encoding);
23533 }
23534}
ebd8d4e8 23535
8b095871
IC
23536// StringDecoder provides an interface for efficiently splitting a series of
23537// buffers into a series of JS strings without breaking apart multi-byte
23538// characters. CESU-8 is handled as part of the UTF-8 encoding.
23539//
23540// @TODO Handling all encodings inside a single object makes it very difficult
23541// to reason about this code, so it should be split up in the future.
23542// @TODO There should be a utf8-strict encoding that rejects invalid UTF-8 code
23543// points as used by CESU-8.
23544var StringDecoder = exports.StringDecoder = function(encoding) {
23545 this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, '');
23546 assertEncoding(encoding);
23547 switch (this.encoding) {
23548 case 'utf8':
23549 // CESU-8 represents each of Surrogate Pair by 3-bytes
23550 this.surrogateSize = 3;
23551 break;
23552 case 'ucs2':
23553 case 'utf16le':
23554 // UTF-16 represents each of Surrogate Pair by 2-bytes
23555 this.surrogateSize = 2;
23556 this.detectIncompleteChar = utf16DetectIncompleteChar;
23557 break;
23558 case 'base64':
23559 // Base-64 stores 3 bytes in 4 chars, and pads the remainder.
23560 this.surrogateSize = 3;
23561 this.detectIncompleteChar = base64DetectIncompleteChar;
23562 break;
23563 default:
23564 this.write = passThroughWrite;
23565 return;
23566 }
23567
23568 // Enough space to store all bytes of a single character. UTF-8 needs 4
23569 // bytes, but CESU-8 may require up to 6 (3 bytes per surrogate).
23570 this.charBuffer = new Buffer(6);
23571 // Number of bytes received for the current incomplete multi-byte character.
23572 this.charReceived = 0;
23573 // Number of bytes expected for the current incomplete multi-byte character.
23574 this.charLength = 0;
ab78acc6
IC
23575};
23576
ab78acc6 23577
8b095871
IC
23578// write decodes the given buffer and returns it as JS string that is
23579// guaranteed to not contain any partial multi-byte characters. Any partial
23580// character found at the end of the buffer is buffered up, and will be
23581// returned when calling write again with the remaining bytes.
23582//
23583// Note: Converting a Buffer containing an orphan surrogate to a String
23584// currently works, but converting a String to a Buffer (via `new Buffer`, or
23585// Buffer#write) will replace incomplete surrogates with the unicode
23586// replacement character. See https://codereview.chromium.org/121173009/ .
23587StringDecoder.prototype.write = function(buffer) {
23588 var charStr = '';
23589 // if our last write ended with an incomplete multibyte character
23590 while (this.charLength) {
23591 // determine how many remaining bytes this buffer has to offer for this char
23592 var available = (buffer.length >= this.charLength - this.charReceived) ?
23593 this.charLength - this.charReceived :
23594 buffer.length;
ab78acc6 23595
8b095871
IC
23596 // add the new bytes to the char buffer
23597 buffer.copy(this.charBuffer, this.charReceived, 0, available);
23598 this.charReceived += available;
23599
23600 if (this.charReceived < this.charLength) {
23601 // still not enough chars in this buffer? wait for more ...
23602 return '';
ebd8d4e8 23603 }
ebd8d4e8 23604
8b095871
IC
23605 // remove bytes belonging to the current character from the buffer
23606 buffer = buffer.slice(available, buffer.length);
ab78acc6 23607
8b095871
IC
23608 // get the character that was split
23609 charStr = this.charBuffer.slice(0, this.charLength).toString(this.encoding);
23610
23611 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
23612 var charCode = charStr.charCodeAt(charStr.length - 1);
23613 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
23614 this.charLength += this.surrogateSize;
23615 charStr = '';
23616 continue;
ab78acc6 23617 }
8b095871 23618 this.charReceived = this.charLength = 0;
ebd8d4e8 23619
8b095871
IC
23620 // if there are no more bytes in this buffer, just emit our char
23621 if (buffer.length === 0) {
23622 return charStr;
23623 }
23624 break;
ebd8d4e8 23625 }
ebd8d4e8 23626
8b095871
IC
23627 // determine and set charLength / charReceived
23628 this.detectIncompleteChar(buffer);
ebd8d4e8 23629
8b095871
IC
23630 var end = buffer.length;
23631 if (this.charLength) {
23632 // buffer the incomplete character bytes we got
23633 buffer.copy(this.charBuffer, 0, buffer.length - this.charReceived, end);
23634 end -= this.charReceived;
ab78acc6 23635 }
ebd8d4e8 23636
8b095871
IC
23637 charStr += buffer.toString(this.encoding, 0, end);
23638
23639 var end = charStr.length - 1;
23640 var charCode = charStr.charCodeAt(end);
23641 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
23642 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
23643 var size = this.surrogateSize;
23644 this.charLength += size;
23645 this.charReceived += size;
23646 this.charBuffer.copy(this.charBuffer, size, 0, size);
23647 buffer.copy(this.charBuffer, 0, 0, size);
23648 return charStr.substring(0, end);
ab78acc6 23649 }
ebd8d4e8 23650
8b095871
IC
23651 // or just emit the charStr
23652 return charStr;
23653};
ebd8d4e8 23654
8b095871
IC
23655// detectIncompleteChar determines if there is an incomplete UTF-8 character at
23656// the end of the given buffer. If so, it sets this.charLength to the byte
23657// length that character, and sets this.charReceived to the number of bytes
23658// that are available for this character.
23659StringDecoder.prototype.detectIncompleteChar = function(buffer) {
23660 // determine how many bytes we have to check at the end of this buffer
23661 var i = (buffer.length >= 3) ? 3 : buffer.length;
ab78acc6 23662
8b095871
IC
23663 // Figure out if one of the last i bytes of our buffer announces an
23664 // incomplete char.
23665 for (; i > 0; i--) {
23666 var c = buffer[buffer.length - i];
ebd8d4e8 23667
8b095871 23668 // See http://en.wikipedia.org/wiki/UTF-8#Description
ebd8d4e8 23669
8b095871
IC
23670 // 110XXXXX
23671 if (i == 1 && c >> 5 == 0x06) {
23672 this.charLength = 2;
23673 break;
ebd8d4e8 23674 }
ab78acc6 23675
8b095871
IC
23676 // 1110XXXX
23677 if (i <= 2 && c >> 4 == 0x0E) {
23678 this.charLength = 3;
23679 break;
23680 }
23681
23682 // 11110XXX
23683 if (i <= 3 && c >> 3 == 0x1E) {
23684 this.charLength = 4;
23685 break;
ebd8d4e8
IC
23686 }
23687 }
8b095871
IC
23688 this.charReceived = i;
23689};
ab78acc6 23690
8b095871
IC
23691StringDecoder.prototype.end = function(buffer) {
23692 var res = '';
23693 if (buffer && buffer.length)
23694 res = this.write(buffer);
ab78acc6 23695
8b095871
IC
23696 if (this.charReceived) {
23697 var cr = this.charReceived;
23698 var buf = this.charBuffer;
23699 var enc = this.encoding;
23700 res += buf.slice(0, cr).toString(enc);
23701 }
ab78acc6 23702
8b095871 23703 return res;
ab78acc6
IC
23704};
23705
8b095871
IC
23706function passThroughWrite(buffer) {
23707 return buffer.toString(this.encoding);
23708}
ab78acc6 23709
8b095871
IC
23710function utf16DetectIncompleteChar(buffer) {
23711 this.charReceived = buffer.length % 2;
23712 this.charLength = this.charReceived ? 2 : 0;
23713}
ab78acc6 23714
8b095871
IC
23715function base64DetectIncompleteChar(buffer) {
23716 this.charReceived = buffer.length % 3;
23717 this.charLength = this.charReceived ? 3 : 0;
23718}
ab78acc6 23719
8b095871
IC
23720},{"buffer":5}],27:[function(require,module,exports){
23721(function (global){
ab78acc6 23722
8b095871
IC
23723/**
23724 * Module exports.
23725 */
ebd8d4e8 23726
8b095871 23727module.exports = deprecate;
ebd8d4e8 23728
8b095871
IC
23729/**
23730 * Mark that a method should not be used.
23731 * Returns a modified function which warns once by default.
23732 *
23733 * If `localStorage.noDeprecation = true` is set, then it is a no-op.
23734 *
23735 * If `localStorage.throwDeprecation = true` is set, then deprecated functions
23736 * will throw an Error when invoked.
23737 *
23738 * If `localStorage.traceDeprecation = true` is set, then deprecated functions
23739 * will invoke `console.trace()` instead of `console.error()`.
23740 *
23741 * @param {Function} fn - the function to deprecate
23742 * @param {String} msg - the string to print to the console when `fn` is invoked
23743 * @returns {Function} a new "deprecated" version of `fn`
23744 * @api public
23745 */
ebd8d4e8 23746
8b095871
IC
23747function deprecate (fn, msg) {
23748 if (config('noDeprecation')) {
23749 return fn;
23750 }
ebd8d4e8 23751
8b095871
IC
23752 var warned = false;
23753 function deprecated() {
23754 if (!warned) {
23755 if (config('throwDeprecation')) {
23756 throw new Error(msg);
23757 } else if (config('traceDeprecation')) {
23758 console.trace(msg);
23759 } else {
23760 console.warn(msg);
ab78acc6 23761 }
8b095871 23762 warned = true;
ab78acc6 23763 }
8b095871 23764 return fn.apply(this, arguments);
ebd8d4e8
IC
23765 }
23766
8b095871 23767 return deprecated;
ebd8d4e8
IC
23768}
23769
8b095871
IC
23770/**
23771 * Checks `localStorage` for boolean values for the given `name`.
23772 *
23773 * @param {String} name
23774 * @returns {Boolean}
23775 * @api private
23776 */
ebd8d4e8 23777
8b095871
IC
23778function config (name) {
23779 // accessing global.localStorage can trigger a DOMException in sandboxed iframes
23780 try {
23781 if (!global.localStorage) return false;
23782 } catch (_) {
23783 return false;
ab78acc6 23784 }
8b095871
IC
23785 var val = global.localStorage[name];
23786 if (null == val) return false;
23787 return String(val).toLowerCase() === 'true';
ebd8d4e8 23788}
ebd8d4e8 23789
8b095871
IC
23790}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
23791},{}],28:[function(require,module,exports){
23792arguments[4][9][0].apply(exports,arguments)
23793},{"dup":9}],29:[function(require,module,exports){
23794module.exports = function isBuffer(arg) {
23795 return arg && typeof arg === 'object'
23796 && typeof arg.copy === 'function'
23797 && typeof arg.fill === 'function'
23798 && typeof arg.readUInt8 === 'function';
ebd8d4e8 23799}
8b095871
IC
23800},{}],30:[function(require,module,exports){
23801(function (process,global){
ab78acc6
IC
23802// Copyright Joyent, Inc. and other Node contributors.
23803//
23804// Permission is hereby granted, free of charge, to any person obtaining a
23805// copy of this software and associated documentation files (the
23806// "Software"), to deal in the Software without restriction, including
23807// without limitation the rights to use, copy, modify, merge, publish,
23808// distribute, sublicense, and/or sell copies of the Software, and to permit
23809// persons to whom the Software is furnished to do so, subject to the
23810// following conditions:
23811//
23812// The above copyright notice and this permission notice shall be included
23813// in all copies or substantial portions of the Software.
23814//
23815// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
23816// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
23817// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
23818// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
23819// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
23820// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
23821// USE OR OTHER DEALINGS IN THE SOFTWARE.
ebd8d4e8 23822
8b095871
IC
23823var formatRegExp = /%[sdj%]/g;
23824exports.format = function(f) {
23825 if (!isString(f)) {
23826 var objects = [];
23827 for (var i = 0; i < arguments.length; i++) {
23828 objects.push(inspect(arguments[i]));
23829 }
23830 return objects.join(' ');
23831 }
ebd8d4e8 23832
8b095871
IC
23833 var i = 1;
23834 var args = arguments;
23835 var len = args.length;
23836 var str = String(f).replace(formatRegExp, function(x) {
23837 if (x === '%%') return '%';
23838 if (i >= len) return x;
23839 switch (x) {
23840 case '%s': return String(args[i++]);
23841 case '%d': return Number(args[i++]);
23842 case '%j':
23843 try {
23844 return JSON.stringify(args[i++]);
23845 } catch (_) {
23846 return '[Circular]';
23847 }
23848 default:
23849 return x;
23850 }
23851 });
23852 for (var x = args[i]; i < len; x = args[++i]) {
23853 if (isNull(x) || !isObject(x)) {
23854 str += ' ' + x;
23855 } else {
23856 str += ' ' + inspect(x);
23857 }
23858 }
23859 return str;
23860};
ebd8d4e8 23861
ebd8d4e8 23862
8b095871
IC
23863// Mark that a method should not be used.
23864// Returns a modified function which warns once by default.
23865// If --no-deprecation is set, then it is a no-op.
23866exports.deprecate = function(fn, msg) {
23867 // Allow for deprecating things in the process of starting up.
23868 if (isUndefined(global.process)) {
23869 return function() {
23870 return exports.deprecate(fn, msg).apply(this, arguments);
23871 };
23872 }
23873
23874 if (process.noDeprecation === true) {
23875 return fn;
23876 }
23877
23878 var warned = false;
23879 function deprecated() {
23880 if (!warned) {
23881 if (process.throwDeprecation) {
23882 throw new Error(msg);
23883 } else if (process.traceDeprecation) {
23884 console.trace(msg);
23885 } else {
23886 console.error(msg);
23887 }
23888 warned = true;
23889 }
23890 return fn.apply(this, arguments);
23891 }
23892
23893 return deprecated;
23894};
ebd8d4e8 23895
ab78acc6 23896
8b095871
IC
23897var debugs = {};
23898var debugEnviron;
23899exports.debuglog = function(set) {
23900 if (isUndefined(debugEnviron))
23901 debugEnviron = process.env.NODE_DEBUG || '';
23902 set = set.toUpperCase();
23903 if (!debugs[set]) {
23904 if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
23905 var pid = process.pid;
23906 debugs[set] = function() {
23907 var msg = exports.format.apply(exports, arguments);
23908 console.error('%s %d: %s', set, pid, msg);
23909 };
23910 } else {
23911 debugs[set] = function() {};
23912 }
23913 }
23914 return debugs[set];
23915};
ab78acc6
IC
23916
23917
8b095871
IC
23918/**
23919 * Echos the value of a value. Trys to print the value out
23920 * in the best way possible given the different types.
23921 *
23922 * @param {Object} obj The object to print out.
23923 * @param {Object} opts Optional options object that alters the output.
23924 */
23925/* legacy: obj, showHidden, depth, colors*/
23926function inspect(obj, opts) {
23927 // default options
23928 var ctx = {
23929 seen: [],
23930 stylize: stylizeNoColor
ab78acc6 23931 };
8b095871
IC
23932 // legacy...
23933 if (arguments.length >= 3) ctx.depth = arguments[2];
23934 if (arguments.length >= 4) ctx.colors = arguments[3];
23935 if (isBoolean(opts)) {
23936 // legacy...
23937 ctx.showHidden = opts;
23938 } else if (opts) {
23939 // got an "options" object
23940 exports._extend(ctx, opts);
23941 }
23942 // set default options
23943 if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
23944 if (isUndefined(ctx.depth)) ctx.depth = 2;
23945 if (isUndefined(ctx.colors)) ctx.colors = false;
23946 if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
23947 if (ctx.colors) ctx.stylize = stylizeWithColor;
23948 return formatValue(ctx, obj, ctx.depth);
ebd8d4e8 23949}
8b095871 23950exports.inspect = inspect;
ebd8d4e8 23951
ab78acc6 23952
8b095871
IC
23953// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
23954inspect.colors = {
23955 'bold' : [1, 22],
23956 'italic' : [3, 23],
23957 'underline' : [4, 24],
23958 'inverse' : [7, 27],
23959 'white' : [37, 39],
23960 'grey' : [90, 39],
23961 'black' : [30, 39],
23962 'blue' : [34, 39],
23963 'cyan' : [36, 39],
23964 'green' : [32, 39],
23965 'magenta' : [35, 39],
23966 'red' : [31, 39],
23967 'yellow' : [33, 39]
23968};
ab78acc6 23969
8b095871
IC
23970// Don't use 'blue' not visible on cmd.exe
23971inspect.styles = {
23972 'special': 'cyan',
23973 'number': 'yellow',
23974 'boolean': 'yellow',
23975 'undefined': 'grey',
23976 'null': 'bold',
23977 'string': 'green',
23978 'date': 'magenta',
23979 // "name": intentionally not styling
23980 'regexp': 'red'
23981};
ab78acc6 23982
ab78acc6 23983
8b095871
IC
23984function stylizeWithColor(str, styleType) {
23985 var style = inspect.styles[styleType];
ab78acc6 23986
8b095871
IC
23987 if (style) {
23988 return '\u001b[' + inspect.colors[style][0] + 'm' + str +
23989 '\u001b[' + inspect.colors[style][1] + 'm';
23990 } else {
23991 return str;
ab78acc6 23992 }
ebd8d4e8 23993}
ebd8d4e8 23994
ab78acc6 23995
8b095871
IC
23996function stylizeNoColor(str, styleType) {
23997 return str;
23998}
ab78acc6 23999
ab78acc6 24000
8b095871
IC
24001function arrayToHash(array) {
24002 var hash = {};
ab78acc6 24003
8b095871
IC
24004 array.forEach(function(val, idx) {
24005 hash[val] = true;
ab78acc6 24006 });
ebd8d4e8 24007
8b095871
IC
24008 return hash;
24009}
ab78acc6 24010
ab78acc6 24011
8b095871
IC
24012function formatValue(ctx, value, recurseTimes) {
24013 // Provide a hook for user-specified inspect functions.
24014 // Check that value is an object with an inspect function on it
24015 if (ctx.customInspect &&
24016 value &&
24017 isFunction(value.inspect) &&
24018 // Filter out the util module, it's inspect function is special
24019 value.inspect !== exports.inspect &&
24020 // Also filter out any prototype objects using the circular check.
24021 !(value.constructor && value.constructor.prototype === value)) {
24022 var ret = value.inspect(recurseTimes, ctx);
24023 if (!isString(ret)) {
24024 ret = formatValue(ctx, ret, recurseTimes);
24025 }
24026 return ret;
ab78acc6 24027 }
ebd8d4e8 24028
8b095871
IC
24029 // Primitive types cannot have properties
24030 var primitive = formatPrimitive(ctx, value);
24031 if (primitive) {
24032 return primitive;
ab78acc6 24033 }
ebd8d4e8 24034
8b095871
IC
24035 // Look up the keys of the object.
24036 var keys = Object.keys(value);
24037 var visibleKeys = arrayToHash(keys);
ebd8d4e8 24038
8b095871
IC
24039 if (ctx.showHidden) {
24040 keys = Object.getOwnPropertyNames(value);
24041 }
ebd8d4e8 24042
8b095871
IC
24043 // IE doesn't make error fields non-enumerable
24044 // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx
24045 if (isError(value)
24046 && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {
24047 return formatError(value);
24048 }
ebd8d4e8 24049
8b095871
IC
24050 // Some type of object without properties can be shortcutted.
24051 if (keys.length === 0) {
24052 if (isFunction(value)) {
24053 var name = value.name ? ': ' + value.name : '';
24054 return ctx.stylize('[Function' + name + ']', 'special');
24055 }
24056 if (isRegExp(value)) {
24057 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
24058 }
24059 if (isDate(value)) {
24060 return ctx.stylize(Date.prototype.toString.call(value), 'date');
24061 }
24062 if (isError(value)) {
24063 return formatError(value);
24064 }
24065 }
ab78acc6 24066
8b095871 24067 var base = '', array = false, braces = ['{', '}'];
ab78acc6 24068
8b095871
IC
24069 // Make Array say that they are Array
24070 if (isArray(value)) {
24071 array = true;
24072 braces = ['[', ']'];
24073 }
ebd8d4e8 24074
8b095871
IC
24075 // Make functions say that they are functions
24076 if (isFunction(value)) {
24077 var n = value.name ? ': ' + value.name : '';
24078 base = ' [Function' + n + ']';
24079 }
ebd8d4e8 24080
8b095871
IC
24081 // Make RegExps say that they are RegExps
24082 if (isRegExp(value)) {
24083 base = ' ' + RegExp.prototype.toString.call(value);
24084 }
ebd8d4e8 24085
8b095871
IC
24086 // Make dates with properties first say the date
24087 if (isDate(value)) {
24088 base = ' ' + Date.prototype.toUTCString.call(value);
24089 }
ebd8d4e8 24090
8b095871
IC
24091 // Make error with message first say the error
24092 if (isError(value)) {
24093 base = ' ' + formatError(value);
24094 }
ebd8d4e8 24095
8b095871
IC
24096 if (keys.length === 0 && (!array || value.length == 0)) {
24097 return braces[0] + base + braces[1];
24098 }
ebd8d4e8 24099
8b095871
IC
24100 if (recurseTimes < 0) {
24101 if (isRegExp(value)) {
24102 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
24103 } else {
24104 return ctx.stylize('[Object]', 'special');
24105 }
24106 }
ebd8d4e8 24107
8b095871 24108 ctx.seen.push(value);
ebd8d4e8 24109
8b095871
IC
24110 var output;
24111 if (array) {
24112 output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
24113 } else {
24114 output = keys.map(function(key) {
24115 return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
24116 });
24117 }
ebd8d4e8 24118
8b095871 24119 ctx.seen.pop();
ebd8d4e8 24120
8b095871 24121 return reduceToSingleString(output, base, braces);
ebd8d4e8
IC
24122}
24123
ebd8d4e8 24124
8b095871
IC
24125function formatPrimitive(ctx, value) {
24126 if (isUndefined(value))
24127 return ctx.stylize('undefined', 'undefined');
24128 if (isString(value)) {
24129 var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
24130 .replace(/'/g, "\\'")
24131 .replace(/\\"/g, '"') + '\'';
24132 return ctx.stylize(simple, 'string');
24133 }
24134 if (isNumber(value))
24135 return ctx.stylize('' + value, 'number');
24136 if (isBoolean(value))
24137 return ctx.stylize('' + value, 'boolean');
24138 // For some reason typeof null is "object", so special case here.
24139 if (isNull(value))
24140 return ctx.stylize('null', 'null');
24141}
ebd8d4e8 24142
ebd8d4e8 24143
8b095871
IC
24144function formatError(value) {
24145 return '[' + Error.prototype.toString.call(value) + ']';
24146}
ebd8d4e8 24147
ebd8d4e8 24148
8b095871
IC
24149function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
24150 var output = [];
24151 for (var i = 0, l = value.length; i < l; ++i) {
24152 if (hasOwnProperty(value, String(i))) {
24153 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
24154 String(i), true));
24155 } else {
24156 output.push('');
24157 }
24158 }
24159 keys.forEach(function(key) {
24160 if (!key.match(/^\d+$/)) {
24161 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
24162 key, true));
24163 }
24164 });
24165 return output;
24166}
ebd8d4e8 24167
ebd8d4e8 24168
8b095871
IC
24169function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
24170 var name, str, desc;
24171 desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
24172 if (desc.get) {
24173 if (desc.set) {
24174 str = ctx.stylize('[Getter/Setter]', 'special');
24175 } else {
24176 str = ctx.stylize('[Getter]', 'special');
24177 }
24178 } else {
24179 if (desc.set) {
24180 str = ctx.stylize('[Setter]', 'special');
24181 }
24182 }
24183 if (!hasOwnProperty(visibleKeys, key)) {
24184 name = '[' + key + ']';
24185 }
24186 if (!str) {
24187 if (ctx.seen.indexOf(desc.value) < 0) {
24188 if (isNull(recurseTimes)) {
24189 str = formatValue(ctx, desc.value, null);
24190 } else {
24191 str = formatValue(ctx, desc.value, recurseTimes - 1);
24192 }
24193 if (str.indexOf('\n') > -1) {
24194 if (array) {
24195 str = str.split('\n').map(function(line) {
24196 return ' ' + line;
24197 }).join('\n').substr(2);
24198 } else {
24199 str = '\n' + str.split('\n').map(function(line) {
24200 return ' ' + line;
24201 }).join('\n');
24202 }
24203 }
24204 } else {
24205 str = ctx.stylize('[Circular]', 'special');
24206 }
24207 }
24208 if (isUndefined(name)) {
24209 if (array && key.match(/^\d+$/)) {
24210 return str;
24211 }
24212 name = JSON.stringify('' + key);
24213 if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
24214 name = name.substr(1, name.length - 2);
24215 name = ctx.stylize(name, 'name');
24216 } else {
24217 name = name.replace(/'/g, "\\'")
24218 .replace(/\\"/g, '"')
24219 .replace(/(^"|"$)/g, "'");
24220 name = ctx.stylize(name, 'string');
24221 }
24222 }
ebd8d4e8 24223
8b095871
IC
24224 return name + ': ' + str;
24225}
ebd8d4e8 24226
ebd8d4e8 24227
8b095871
IC
24228function reduceToSingleString(output, base, braces) {
24229 var numLinesEst = 0;
24230 var length = output.reduce(function(prev, cur) {
24231 numLinesEst++;
24232 if (cur.indexOf('\n') >= 0) numLinesEst++;
24233 return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;
24234 }, 0);
ebd8d4e8 24235
8b095871
IC
24236 if (length > 60) {
24237 return braces[0] +
24238 (base === '' ? '' : base + '\n ') +
24239 ' ' +
24240 output.join(',\n ') +
24241 ' ' +
24242 braces[1];
24243 }
ebd8d4e8 24244
8b095871
IC
24245 return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
24246}
ebd8d4e8 24247
ebd8d4e8 24248
8b095871
IC
24249// NOTE: These type checking functions intentionally don't use `instanceof`
24250// because it is fragile and can be easily faked with `Object.create()`.
24251function isArray(ar) {
24252 return Array.isArray(ar);
24253}
24254exports.isArray = isArray;
ebd8d4e8 24255
8b095871
IC
24256function isBoolean(arg) {
24257 return typeof arg === 'boolean';
24258}
24259exports.isBoolean = isBoolean;
ebd8d4e8 24260
8b095871
IC
24261function isNull(arg) {
24262 return arg === null;
24263}
24264exports.isNull = isNull;
ebd8d4e8 24265
8b095871
IC
24266function isNullOrUndefined(arg) {
24267 return arg == null;
ebd8d4e8 24268}
8b095871 24269exports.isNullOrUndefined = isNullOrUndefined;
ebd8d4e8 24270
8b095871
IC
24271function isNumber(arg) {
24272 return typeof arg === 'number';
24273}
24274exports.isNumber = isNumber;
ebd8d4e8 24275
8b095871
IC
24276function isString(arg) {
24277 return typeof arg === 'string';
24278}
24279exports.isString = isString;
ebd8d4e8 24280
8b095871
IC
24281function isSymbol(arg) {
24282 return typeof arg === 'symbol';
24283}
24284exports.isSymbol = isSymbol;
ebd8d4e8 24285
8b095871
IC
24286function isUndefined(arg) {
24287 return arg === void 0;
24288}
24289exports.isUndefined = isUndefined;
ebd8d4e8 24290
8b095871
IC
24291function isRegExp(re) {
24292 return isObject(re) && objectToString(re) === '[object RegExp]';
ebd8d4e8 24293}
8b095871 24294exports.isRegExp = isRegExp;
ebd8d4e8 24295
8b095871
IC
24296function isObject(arg) {
24297 return typeof arg === 'object' && arg !== null;
24298}
24299exports.isObject = isObject;
ebd8d4e8 24300
8b095871
IC
24301function isDate(d) {
24302 return isObject(d) && objectToString(d) === '[object Date]';
24303}
24304exports.isDate = isDate;
ebd8d4e8 24305
8b095871
IC
24306function isError(e) {
24307 return isObject(e) &&
24308 (objectToString(e) === '[object Error]' || e instanceof Error);
ebd8d4e8 24309}
8b095871 24310exports.isError = isError;
ebd8d4e8 24311
8b095871
IC
24312function isFunction(arg) {
24313 return typeof arg === 'function';
ebd8d4e8 24314}
8b095871 24315exports.isFunction = isFunction;
ebd8d4e8 24316
8b095871
IC
24317function isPrimitive(arg) {
24318 return arg === null ||
24319 typeof arg === 'boolean' ||
24320 typeof arg === 'number' ||
24321 typeof arg === 'string' ||
24322 typeof arg === 'symbol' || // ES6 symbol
24323 typeof arg === 'undefined';
24324}
24325exports.isPrimitive = isPrimitive;
ebd8d4e8 24326
8b095871 24327exports.isBuffer = require('./support/isBuffer');
ebd8d4e8 24328
8b095871
IC
24329function objectToString(o) {
24330 return Object.prototype.toString.call(o);
24331}
ab78acc6 24332
ab78acc6 24333
8b095871
IC
24334function pad(n) {
24335 return n < 10 ? '0' + n.toString(10) : n.toString(10);
24336}
ebd8d4e8 24337
ab78acc6 24338
8b095871
IC
24339var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
24340 'Oct', 'Nov', 'Dec'];
ab78acc6 24341
8b095871
IC
24342// 26 Feb 16:19:34
24343function timestamp() {
24344 var d = new Date();
24345 var time = [pad(d.getHours()),
24346 pad(d.getMinutes()),
24347 pad(d.getSeconds())].join(':');
24348 return [d.getDate(), months[d.getMonth()], time].join(' ');
24349}
24350
24351
24352// log is just a thin wrapper to console.log that prepends a timestamp
24353exports.log = function() {
24354 console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
ab78acc6 24355};
ebd8d4e8 24356
ebd8d4e8 24357
8b095871
IC
24358/**
24359 * Inherit the prototype methods from one constructor into another.
24360 *
24361 * The Function.prototype.inherits from lang.js rewritten as a standalone
24362 * function (not on Function.prototype). NOTE: If this file is to be loaded
24363 * during bootstrapping this function needs to be rewritten using some native
24364 * functions as prototype setup using normal JavaScript does not work as
24365 * expected during bootstrapping (see mirror.js in r114903).
24366 *
24367 * @param {function} ctor Constructor function which needs to inherit the
24368 * prototype.
24369 * @param {function} superCtor Constructor function to inherit prototype from.
24370 */
24371exports.inherits = require('inherits');
ebd8d4e8 24372
8b095871
IC
24373exports._extend = function(origin, add) {
24374 // Don't do anything if add isn't an object
24375 if (!add || !isObject(add)) return origin;
24376
24377 var keys = Object.keys(add);
24378 var i = keys.length;
24379 while (i--) {
24380 origin[keys[i]] = add[keys[i]];
ebd8d4e8 24381 }
8b095871 24382 return origin;
ab78acc6 24383};
ebd8d4e8 24384
8b095871
IC
24385function hasOwnProperty(obj, prop) {
24386 return Object.prototype.hasOwnProperty.call(obj, prop);
ebd8d4e8
IC
24387}
24388
8b095871
IC
24389}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
24390},{"./support/isBuffer":29,"_process":13,"inherits":28}],31:[function(require,module,exports){
24391(function (Buffer){
24392const createKeccakHash = require('keccak')
24393const secp256k1 = require('secp256k1')
24394const assert = require('assert')
24395const rlp = require('rlp')
24396const BN = require('bn.js')
24397const createHash = require('create-hash')
24398Object.assign(exports, require('ethjs-util'))
ab78acc6 24399
8b095871
IC
24400/**
24401 * the max integer that this VM can handle (a ```BN```)
24402 * @var {BN} MAX_INTEGER
24403 */
24404exports.MAX_INTEGER = new BN('ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 16)
ab78acc6 24405
8b095871
IC
24406/**
24407 * 2^256 (a ```BN```)
24408 * @var {BN} TWO_POW256
24409 */
24410exports.TWO_POW256 = new BN('10000000000000000000000000000000000000000000000000000000000000000', 16)
ab78acc6 24411
8b095871
IC
24412/**
24413 * SHA3-256 hash of null (a ```String```)
24414 * @var {String} SHA3_NULL_S
24415 */
24416exports.SHA3_NULL_S = 'c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470'
ebd8d4e8 24417
8b095871
IC
24418/**
24419 * SHA3-256 hash of null (a ```Buffer```)
24420 * @var {Buffer} SHA3_NULL
24421 */
24422exports.SHA3_NULL = Buffer.from(exports.SHA3_NULL_S, 'hex')
ebd8d4e8 24423
8b095871
IC
24424/**
24425 * SHA3-256 of an RLP of an empty array (a ```String```)
24426 * @var {String} SHA3_RLP_ARRAY_S
24427 */
24428exports.SHA3_RLP_ARRAY_S = '1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347'
ebd8d4e8 24429
8b095871
IC
24430/**
24431 * SHA3-256 of an RLP of an empty array (a ```Buffer```)
24432 * @var {Buffer} SHA3_RLP_ARRAY
24433 */
24434exports.SHA3_RLP_ARRAY = Buffer.from(exports.SHA3_RLP_ARRAY_S, 'hex')
ebd8d4e8 24435
8b095871
IC
24436/**
24437 * SHA3-256 hash of the RLP of null (a ```String```)
24438 * @var {String} SHA3_RLP_S
24439 */
24440exports.SHA3_RLP_S = '56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421'
ebd8d4e8 24441
8b095871
IC
24442/**
24443 * SHA3-256 hash of the RLP of null (a ```Buffer```)
24444 * @var {Buffer} SHA3_RLP
24445 */
24446exports.SHA3_RLP = Buffer.from(exports.SHA3_RLP_S, 'hex')
ebd8d4e8 24447
8b095871
IC
24448/**
24449 * [`BN`](https://github.com/indutny/bn.js)
24450 * @var {Function}
24451 */
24452exports.BN = BN
ebd8d4e8 24453
8b095871
IC
24454/**
24455 * [`rlp`](https://github.com/ethereumjs/rlp)
24456 * @var {Function}
24457 */
24458exports.rlp = rlp
ebd8d4e8 24459
8b095871
IC
24460/**
24461 * [`secp256k1`](https://github.com/cryptocoinjs/secp256k1-node/)
24462 * @var {Object}
24463 */
24464exports.secp256k1 = secp256k1
ab78acc6 24465
8b095871
IC
24466/**
24467 * Returns a buffer filled with 0s
24468 * @method zeros
24469 * @param {Number} bytes the number of bytes the buffer should be
24470 * @return {Buffer}
24471 */
24472exports.zeros = function (bytes) {
24473 return Buffer.allocUnsafe(bytes).fill(0)
24474}
24475
24476/**
24477 * Left Pads an `Array` or `Buffer` with leading zeros till it has `length` bytes.
24478 * Or it truncates the beginning if it exceeds.
24479 * @method lsetLength
24480 * @param {Buffer|Array} msg the value to pad
24481 * @param {Number} length the number of bytes the output should be
24482 * @param {Boolean} [right=false] whether to start padding form the left or right
24483 * @return {Buffer|Array}
24484 */
24485exports.setLengthLeft = exports.setLength = function (msg, length, right) {
24486 var buf = exports.zeros(length)
24487 msg = exports.toBuffer(msg)
24488 if (right) {
24489 if (msg.length < length) {
24490 msg.copy(buf)
24491 return buf
24492 }
24493 return msg.slice(0, length)
24494 } else {
24495 if (msg.length < length) {
24496 msg.copy(buf, length - msg.length)
24497 return buf
ebd8d4e8 24498 }
8b095871 24499 return msg.slice(-length)
ebd8d4e8
IC
24500 }
24501}
24502
8b095871
IC
24503/**
24504 * Right Pads an `Array` or `Buffer` with leading zeros till it has `length` bytes.
24505 * Or it truncates the beginning if it exceeds.
24506 * @param {Buffer|Array} msg the value to pad
24507 * @param {Number} length the number of bytes the output should be
24508 * @return {Buffer|Array}
24509 */
24510exports.setLengthRight = function (msg, length) {
24511 return exports.setLength(msg, length, true)
ab78acc6
IC
24512}
24513
8b095871
IC
24514/**
24515 * Trims leading zeros from a `Buffer` or an `Array`
24516 * @param {Buffer|Array|String} a
24517 * @return {Buffer|Array|String}
24518 */
24519exports.unpad = exports.stripZeros = function (a) {
24520 a = exports.stripHexPrefix(a)
24521 var first = a[0]
24522 while (a.length > 0 && first.toString() === '0') {
24523 a = a.slice(1)
24524 first = a[0]
24525 }
24526 return a
24527}
24528/**
24529 * 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.
24530 * @param {*} v the value
24531 */
24532exports.toBuffer = function (v) {
24533 if (!Buffer.isBuffer(v)) {
24534 if (Array.isArray(v)) {
24535 v = Buffer.from(v)
24536 } else if (typeof v === 'string') {
24537 if (exports.isHexPrefixed(v)) {
24538 v = Buffer.from(exports.padToEven(exports.stripHexPrefix(v)), 'hex')
24539 } else {
24540 v = Buffer.from(v)
24541 }
24542 } else if (typeof v === 'number') {
24543 v = exports.intToBuffer(v)
24544 } else if (v === null || v === undefined) {
24545 v = Buffer.allocUnsafe(0)
24546 } else if (v.toArray) {
24547 // converts a BN to a Buffer
24548 v = Buffer.from(v.toArray())
24549 } else {
24550 throw new Error('invalid type')
24551 }
ebd8d4e8 24552 }
8b095871 24553 return v
ebd8d4e8
IC
24554}
24555
8b095871
IC
24556/**
24557 * Converts a `Buffer` to a `Number`
24558 * @param {Buffer} buf
24559 * @return {Number}
24560 * @throws If the input number exceeds 53 bits.
24561 */
24562exports.bufferToInt = function (buf) {
24563 return new BN(exports.toBuffer(buf)).toNumber()
24564}
ebd8d4e8 24565
8b095871
IC
24566/**
24567 * Converts a `Buffer` into a hex `String`
24568 * @param {Buffer} buf
24569 * @return {String}
24570 */
24571exports.bufferToHex = function (buf) {
24572 buf = exports.toBuffer(buf)
24573 return '0x' + buf.toString('hex')
24574}
ab78acc6 24575
8b095871
IC
24576/**
24577 * Interprets a `Buffer` as a signed integer and returns a `BN`. Assumes 256-bit numbers.
24578 * @param {Buffer} num
24579 * @return {BN}
24580 */
24581exports.fromSigned = function (num) {
24582 return new BN(num).fromTwos(256)
24583}
ab78acc6 24584
8b095871
IC
24585/**
24586 * Converts a `BN` to an unsigned integer and returns it as a `Buffer`. Assumes 256-bit numbers.
24587 * @param {BN} num
24588 * @return {Buffer}
24589 */
24590exports.toUnsigned = function (num) {
24591 return Buffer.from(num.toTwos(256).toArray())
24592}
ab78acc6 24593
8b095871
IC
24594/**
24595 * Creates SHA-3 hash of the input
24596 * @param {Buffer|Array|String|Number} a the input data
24597 * @param {Number} [bits=256] the SHA width
24598 * @return {Buffer}
24599 */
24600exports.sha3 = function (a, bits) {
24601 a = exports.toBuffer(a)
24602 if (!bits) bits = 256
ab78acc6 24603
8b095871
IC
24604 return createKeccakHash('keccak' + bits).update(a).digest()
24605}
ab78acc6 24606
8b095871
IC
24607/**
24608 * Creates SHA256 hash of the input
24609 * @param {Buffer|Array|String|Number} a the input data
24610 * @return {Buffer}
24611 */
24612exports.sha256 = function (a) {
24613 a = exports.toBuffer(a)
24614 return createHash('sha256').update(a).digest()
24615}
ab78acc6 24616
8b095871
IC
24617/**
24618 * Creates RIPEMD160 hash of the input
24619 * @param {Buffer|Array|String|Number} a the input data
24620 * @param {Boolean} padded whether it should be padded to 256 bits or not
24621 * @return {Buffer}
24622 */
24623exports.ripemd160 = function (a, padded) {
24624 a = exports.toBuffer(a)
24625 var hash = createHash('rmd160').update(a).digest()
24626 if (padded === true) {
24627 return exports.setLength(hash, 32)
24628 } else {
24629 return hash
ebd8d4e8 24630 }
8b095871 24631}
ebd8d4e8 24632
8b095871
IC
24633/**
24634 * Creates SHA-3 hash of the RLP encoded version of the input
24635 * @param {Buffer|Array|String|Number} a the input data
24636 * @return {Buffer}
24637 */
24638exports.rlphash = function (a) {
24639 return exports.sha3(rlp.encode(a))
ebd8d4e8
IC
24640}
24641
8b095871
IC
24642/**
24643 * Checks if the private key satisfies the rules of the curve secp256k1.
24644 * @param {Buffer} privateKey
24645 * @return {Boolean}
24646 */
24647exports.isValidPrivate = function (privateKey) {
24648 return secp256k1.privateKeyVerify(privateKey)
24649}
ebd8d4e8 24650
8b095871
IC
24651/**
24652 * Checks if the public key satisfies the rules of the curve secp256k1
24653 * and the requirements of Ethereum.
24654 * @param {Buffer} publicKey The two points of an uncompressed key, unless sanitize is enabled
24655 * @param {Boolean} [sanitize=false] Accept public keys in other formats
24656 * @return {Boolean}
24657 */
24658exports.isValidPublic = function (publicKey, sanitize) {
24659 if (publicKey.length === 64) {
24660 // Convert to SEC1 for secp256k1
24661 return secp256k1.publicKeyVerify(Buffer.concat([ Buffer.from([4]), publicKey ]))
24662 }
ebd8d4e8 24663
8b095871
IC
24664 if (!sanitize) {
24665 return false
24666 }
ebd8d4e8 24667
8b095871
IC
24668 return secp256k1.publicKeyVerify(publicKey)
24669}
ebd8d4e8 24670
8b095871
IC
24671/**
24672 * Returns the ethereum address of a given public key.
24673 * Accepts "Ethereum public keys" and SEC1 encoded keys.
24674 * @param {Buffer} pubKey The two points of an uncompressed key, unless sanitize is enabled
24675 * @param {Boolean} [sanitize=false] Accept public keys in other formats
24676 * @return {Buffer}
24677 */
24678exports.pubToAddress = exports.publicToAddress = function (pubKey, sanitize) {
24679 pubKey = exports.toBuffer(pubKey)
24680 if (sanitize && (pubKey.length !== 64)) {
24681 pubKey = secp256k1.publicKeyConvert(pubKey, false).slice(1)
ab78acc6 24682 }
8b095871
IC
24683 assert(pubKey.length === 64)
24684 // Only take the lower 160bits of the hash
24685 return exports.sha3(pubKey).slice(-20)
24686}
ebd8d4e8 24687
8b095871
IC
24688/**
24689 * Returns the ethereum public key of a given private key
24690 * @param {Buffer} privateKey A private key must be 256 bits wide
24691 * @return {Buffer}
24692 */
24693var privateToPublic = exports.privateToPublic = function (privateKey) {
24694 privateKey = exports.toBuffer(privateKey)
24695 // skip the type flag and use the X, Y points
24696 return secp256k1.publicKeyCreate(privateKey, false).slice(1)
24697}
ab78acc6 24698
8b095871
IC
24699/**
24700 * Converts a public key to the Ethereum format.
24701 * @param {Buffer} publicKey
24702 * @return {Buffer}
24703 */
24704exports.importPublic = function (publicKey) {
24705 publicKey = exports.toBuffer(publicKey)
24706 if (publicKey.length !== 64) {
24707 publicKey = secp256k1.publicKeyConvert(publicKey, false).slice(1)
ebd8d4e8 24708 }
8b095871
IC
24709 return publicKey
24710}
ab78acc6 24711
8b095871
IC
24712/**
24713 * ECDSA sign
24714 * @param {Buffer} msgHash
24715 * @param {Buffer} privateKey
24716 * @return {Object}
24717 */
24718exports.ecsign = function (msgHash, privateKey) {
24719 var sig = secp256k1.sign(msgHash, privateKey)
ab78acc6 24720
8b095871
IC
24721 var ret = {}
24722 ret.r = sig.signature.slice(0, 32)
24723 ret.s = sig.signature.slice(32, 64)
24724 ret.v = sig.recovery + 27
24725 return ret
ebd8d4e8
IC
24726}
24727
8b095871
IC
24728/**
24729 * Returns the keccak-256 hash of `message`, prefixed with the header used by the `eth_sign` RPC call.
24730 * The output of this function can be fed into `ecsign` to produce the same signature as the `eth_sign`
24731 * call for a given `message`, or fed to `ecrecover` along with a signature to recover the public key
24732 * used to produce the signature.
24733 * @param message
24734 * @returns {Buffer} hash
24735 */
24736exports.hashPersonalMessage = function (message) {
24737 var prefix = exports.toBuffer('\u0019Ethereum Signed Message:\n' + message.length.toString())
24738 return exports.sha3(Buffer.concat([prefix, message]))
ebd8d4e8
IC
24739}
24740
8b095871
IC
24741/**
24742 * ECDSA public key recovery from signature
24743 * @param {Buffer} msgHash
24744 * @param {Number} v
24745 * @param {Buffer} r
24746 * @param {Buffer} s
24747 * @return {Buffer} publicKey
24748 */
24749exports.ecrecover = function (msgHash, v, r, s) {
24750 var signature = Buffer.concat([exports.setLength(r, 32), exports.setLength(s, 32)], 64)
24751 var recovery = v - 27
24752 if (recovery !== 0 && recovery !== 1) {
24753 throw new Error('Invalid signature v value')
ab78acc6 24754 }
8b095871
IC
24755 var senderPubKey = secp256k1.recover(msgHash, signature, recovery)
24756 return secp256k1.publicKeyConvert(senderPubKey, false).slice(1)
ab78acc6 24757}
ebd8d4e8 24758
8b095871
IC
24759/**
24760 * Convert signature parameters into the format of `eth_sign` RPC method
24761 * @param {Number} v
24762 * @param {Buffer} r
24763 * @param {Buffer} s
24764 * @return {String} sig
24765 */
24766exports.toRpcSig = function (v, r, s) {
24767 // NOTE: with potential introduction of chainId this might need to be updated
24768 if (v !== 27 && v !== 28) {
24769 throw new Error('Invalid recovery id')
24770 }
24771
24772 // geth (and the RPC eth_sign method) uses the 65 byte format used by Bitcoin
24773 // FIXME: this might change in the future - https://github.com/ethereum/go-ethereum/issues/2053
24774 return exports.bufferToHex(Buffer.concat([
24775 exports.setLengthLeft(r, 32),
24776 exports.setLengthLeft(s, 32),
24777 exports.toBuffer(v - 27)
24778 ]))
ebd8d4e8
IC
24779}
24780
8b095871
IC
24781/**
24782 * Convert signature format of the `eth_sign` RPC method to signature parameters
24783 * NOTE: all because of a bug in geth: https://github.com/ethereum/go-ethereum/issues/2053
24784 * @param {String} sig
24785 * @return {Object}
24786 */
24787exports.fromRpcSig = function (sig) {
24788 sig = exports.toBuffer(sig)
ebd8d4e8 24789
8b095871
IC
24790 // NOTE: with potential introduction of chainId this might need to be updated
24791 if (sig.length !== 65) {
24792 throw new Error('Invalid signature length')
24793 }
24794
24795 var v = sig[64]
24796 // support both versions of `eth_sign` responses
24797 if (v < 27) {
24798 v += 27
24799 }
24800
24801 return {
24802 v: v,
24803 r: sig.slice(0, 32),
24804 s: sig.slice(32, 64)
24805 }
ebd8d4e8
IC
24806}
24807
8b095871
IC
24808/**
24809 * Returns the ethereum address of a given private key
24810 * @param {Buffer} privateKey A private key must be 256 bits wide
24811 * @return {Buffer}
24812 */
24813exports.privateToAddress = function (privateKey) {
24814 return exports.publicToAddress(privateToPublic(privateKey))
ab78acc6 24815}
ebd8d4e8 24816
8b095871
IC
24817/**
24818 * Checks if the address is a valid. Accepts checksummed addresses too
24819 * @param {String} address
24820 * @return {Boolean}
24821 */
24822exports.isValidAddress = function (address) {
24823 return /^0x[0-9a-fA-F]{40}$/i.test(address)
ab78acc6 24824}
ebd8d4e8 24825
8b095871
IC
24826/**
24827 * Returns a checksummed address
24828 * @param {String} address
24829 * @return {String}
24830 */
24831exports.toChecksumAddress = function (address) {
24832 address = exports.stripHexPrefix(address).toLowerCase()
24833 var hash = exports.sha3(address).toString('hex')
24834 var ret = '0x'
24835
24836 for (var i = 0; i < address.length; i++) {
24837 if (parseInt(hash[i], 16) >= 8) {
24838 ret += address[i].toUpperCase()
24839 } else {
24840 ret += address[i]
24841 }
24842 }
24843
24844 return ret
ebd8d4e8
IC
24845}
24846
8b095871
IC
24847/**
24848 * Checks if the address is a valid checksummed address
24849 * @param {Buffer} address
24850 * @return {Boolean}
24851 */
24852exports.isValidChecksumAddress = function (address) {
24853 return exports.isValidAddress(address) && (exports.toChecksumAddress(address) === address)
ab78acc6 24854}
ebd8d4e8 24855
8b095871
IC
24856/**
24857 * Generates an address of a newly created contract
24858 * @param {Buffer} from the address which is creating this new address
24859 * @param {Buffer} nonce the nonce of the from account
24860 * @return {Buffer}
24861 */
24862exports.generateAddress = function (from, nonce) {
24863 from = exports.toBuffer(from)
24864 nonce = new BN(nonce)
24865
24866 if (nonce.isZero()) {
24867 // in RLP we want to encode null in the case of zero nonce
24868 // read the RLP documentation for an answer if you dare
24869 nonce = null
24870 } else {
24871 nonce = Buffer.from(nonce.toArray())
24872 }
24873
24874 // Only take the lower 160bits of the hash
24875 return exports.rlphash([from, nonce]).slice(-20)
ab78acc6 24876}
ebd8d4e8 24877
8b095871
IC
24878/**
24879 * Returns true if the supplied address belongs to a precompiled account
24880 * @param {Buffer|String} address
24881 * @return {Boolean}
24882 */
24883exports.isPrecompiled = function (address) {
24884 var a = exports.unpad(address)
24885 return a.length === 1 && a[0] > 0 && a[0] < 5
ebd8d4e8
IC
24886}
24887
8b095871
IC
24888/**
24889 * Adds "0x" to a given `String` if it does not already start with "0x"
24890 * @param {String} str
24891 * @return {String}
24892 */
24893exports.addHexPrefix = function (str) {
24894 if (typeof str !== 'string') {
24895 return str
24896 }
24897
24898 return exports.isHexPrefixed(str) ? str : '0x' + str
ebd8d4e8
IC
24899}
24900
8b095871
IC
24901/**
24902 * Validate ECDSA signature
24903 * @method isValidSignature
24904 * @param {Buffer} v
24905 * @param {Buffer} r
24906 * @param {Buffer} s
24907 * @param {Boolean} [homestead=true]
24908 * @return {Boolean}
24909 */
24910
24911exports.isValidSignature = function (v, r, s, homestead) {
24912 const SECP256K1_N_DIV_2 = new BN('7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0', 16)
24913 const SECP256K1_N = new BN('fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141', 16)
24914
24915 if (r.length !== 32 || s.length !== 32) {
24916 return false
24917 }
24918
24919 if (v !== 27 && v !== 28) {
24920 return false
24921 }
24922
24923 r = new BN(r)
24924 s = new BN(s)
24925
24926 if (r.isZero() || r.gt(SECP256K1_N) || s.isZero() || s.gt(SECP256K1_N)) {
24927 return false
24928 }
24929
24930 if ((homestead === false) && (new BN(s).cmp(SECP256K1_N_DIV_2) === 1)) {
24931 return false
24932 }
24933
24934 return true
ebd8d4e8
IC
24935}
24936
8b095871
IC
24937/**
24938 * Converts a `Buffer` or `Array` to JSON
24939 * @param {Buffer|Array} ba
24940 * @return {Array|String|null}
24941 */
24942exports.baToJSON = function (ba) {
24943 if (Buffer.isBuffer(ba)) {
24944 return '0x' + ba.toString('hex')
24945 } else if (ba instanceof Array) {
24946 var array = []
24947 for (var i = 0; i < ba.length; i++) {
24948 array.push(exports.baToJSON(ba[i]))
24949 }
24950 return array
24951 }
ab78acc6 24952}
ebd8d4e8 24953
8b095871
IC
24954/**
24955 * Defines properties on a `Object`. It make the assumption that underlying data is binary.
24956 * @param {Object} self the `Object` to define properties on
24957 * @param {Array} fields an array fields to define. Fields can contain:
24958 * * `name` - the name of the properties
24959 * * `length` - the number of bytes the field can have
24960 * * `allowLess` - if the field can be less than the length
24961 * * `allowEmpty`
24962 * @param {*} data data to be validated against the definitions
24963 */
24964exports.defineProperties = function (self, fields, data) {
24965 self.raw = []
24966 self._fields = []
24967
24968 // attach the `toJSON`
24969 self.toJSON = function (label) {
24970 if (label) {
24971 var obj = {}
24972 self._fields.forEach(function (field) {
24973 obj[field] = '0x' + self[field].toString('hex')
24974 })
24975 return obj
24976 }
24977 return exports.baToJSON(this.raw)
24978 }
24979
24980 self.serialize = function serialize () {
24981 return rlp.encode(self.raw)
24982 }
24983
24984 fields.forEach(function (field, i) {
24985 self._fields.push(field.name)
24986 function getter () {
24987 return self.raw[i]
24988 }
24989 function setter (v) {
24990 v = exports.toBuffer(v)
24991
24992 if (v.toString('hex') === '00' && !field.allowZero) {
24993 v = Buffer.allocUnsafe(0)
24994 }
24995
24996 if (field.allowLess && field.length) {
24997 v = exports.stripZeros(v)
24998 assert(field.length >= v.length, 'The field ' + field.name + ' must not have more ' + field.length + ' bytes')
24999 } else if (!(field.allowZero && v.length === 0) && field.length) {
25000 assert(field.length === v.length, 'The field ' + field.name + ' must have byte length of ' + field.length)
25001 }
25002
25003 self.raw[i] = v
25004 }
25005
25006 Object.defineProperty(self, field.name, {
25007 enumerable: true,
25008 configurable: true,
25009 get: getter,
25010 set: setter
25011 })
25012
25013 if (field.default) {
25014 self[field.name] = field.default
25015 }
25016
25017 // attach alias
25018 if (field.alias) {
25019 Object.defineProperty(self, field.alias, {
25020 enumerable: false,
25021 configurable: true,
25022 set: setter,
25023 get: getter
25024 })
25025 }
25026 })
25027
25028 // if the constuctor is passed data
25029 if (data) {
25030 if (typeof data === 'string') {
25031 data = Buffer.from(exports.stripHexPrefix(data), 'hex')
25032 }
25033
25034 if (Buffer.isBuffer(data)) {
25035 data = rlp.decode(data)
25036 }
25037
25038 if (Array.isArray(data)) {
25039 if (data.length > self._fields.length) {
25040 throw (new Error('wrong number of fields in data'))
25041 }
25042
25043 // make sure all the items are buffers
25044 data.forEach(function (d, i) {
25045 self[self._fields[i]] = exports.toBuffer(d)
25046 })
25047 } else if (typeof data === 'object') {
25048 const keys = Object.keys(data)
25049 fields.forEach(function (field) {
25050 if (keys.indexOf(field.name) !== -1) self[field.name] = data[field.name]
25051 if (keys.indexOf(field.alias) !== -1) self[field.alias] = data[field.alias]
25052 })
25053 } else {
25054 throw new Error('invalid data')
25055 }
25056 }
ab78acc6 25057}
ebd8d4e8 25058
8b095871
IC
25059}).call(this,require("buffer").Buffer)
25060},{"assert":1,"bn.js":33,"buffer":5,"create-hash":36,"ethjs-util":56,"keccak":65,"rlp":72,"secp256k1":73}],32:[function(require,module,exports){
25061(function (Buffer){
25062// Reference https://github.com/bitcoin/bips/blob/master/bip-0066.mediawiki
25063// Format: 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S]
25064// NOTE: SIGHASH byte ignored AND restricted, truncate before use
25065
25066function check (buffer) {
25067 if (buffer.length < 8) return false
25068 if (buffer.length > 72) return false
25069 if (buffer[0] !== 0x30) return false
25070 if (buffer[1] !== buffer.length - 2) return false
25071 if (buffer[2] !== 0x02) return false
25072
25073 var lenR = buffer[3]
25074 if (lenR === 0) return false
25075 if (5 + lenR >= buffer.length) return false
25076 if (buffer[4 + lenR] !== 0x02) return false
25077
25078 var lenS = buffer[5 + lenR]
25079 if (lenS === 0) return false
25080 if ((6 + lenR + lenS) !== buffer.length) return false
25081
25082 if (buffer[4] & 0x80) return false
25083 if (lenR > 1 && (buffer[4] === 0x00) && !(buffer[5] & 0x80)) return false
25084
25085 if (buffer[lenR + 6] & 0x80) return false
25086 if (lenS > 1 && (buffer[lenR + 6] === 0x00) && !(buffer[lenR + 7] & 0x80)) return false
25087 return true
ab78acc6 25088}
ab78acc6 25089
8b095871
IC
25090function decode (buffer) {
25091 if (buffer.length < 8) throw new Error('DER sequence length is too short')
25092 if (buffer.length > 72) throw new Error('DER sequence length is too long')
25093 if (buffer[0] !== 0x30) throw new Error('Expected DER sequence')
25094 if (buffer[1] !== buffer.length - 2) throw new Error('DER sequence length is invalid')
25095 if (buffer[2] !== 0x02) throw new Error('Expected DER integer')
25096
25097 var lenR = buffer[3]
25098 if (lenR === 0) throw new Error('R length is zero')
25099 if (5 + lenR >= buffer.length) throw new Error('R length is too long')
25100 if (buffer[4 + lenR] !== 0x02) throw new Error('Expected DER integer (2)')
25101
25102 var lenS = buffer[5 + lenR]
25103 if (lenS === 0) throw new Error('S length is zero')
25104 if ((6 + lenR + lenS) !== buffer.length) throw new Error('S length is invalid')
25105
25106 if (buffer[4] & 0x80) throw new Error('R value is negative')
25107 if (lenR > 1 && (buffer[4] === 0x00) && !(buffer[5] & 0x80)) throw new Error('R value excessively padded')
25108
25109 if (buffer[lenR + 6] & 0x80) throw new Error('S value is negative')
25110 if (lenS > 1 && (buffer[lenR + 6] === 0x00) && !(buffer[lenR + 7] & 0x80)) throw new Error('S value excessively padded')
25111
25112 // non-BIP66 - extract R, S values
25113 return {
25114 r: buffer.slice(4, 4 + lenR),
25115 s: buffer.slice(6 + lenR)
25116 }
ebd8d4e8
IC
25117}
25118
8b095871
IC
25119/*
25120 * Expects r and s to be positive DER integers.
25121 *
25122 * The DER format uses the most significant bit as a sign bit (& 0x80).
25123 * If the significant bit is set AND the integer is positive, a 0x00 is prepended.
25124 *
25125 * Examples:
25126 *
25127 * 0 => 0x00
25128 * 1 => 0x01
25129 * -1 => 0xff
25130 * 127 => 0x7f
25131 * -127 => 0x81
25132 * 128 => 0x0080
25133 * -128 => 0x80
25134 * 255 => 0x00ff
25135 * -255 => 0xff01
25136 * 16300 => 0x3fac
25137 * -16300 => 0xc054
25138 * 62300 => 0x00f35c
25139 * -62300 => 0xff0ca4
25140*/
25141function encode (r, s) {
25142 var lenR = r.length
25143 var lenS = s.length
25144 if (lenR === 0) throw new Error('R length is zero')
25145 if (lenS === 0) throw new Error('S length is zero')
25146 if (lenR > 33) throw new Error('R length is too long')
25147 if (lenS > 33) throw new Error('S length is too long')
25148 if (r[0] & 0x80) throw new Error('R value is negative')
25149 if (s[0] & 0x80) throw new Error('S value is negative')
25150 if (lenR > 1 && (r[0] === 0x00) && !(r[1] & 0x80)) throw new Error('R value excessively padded')
25151 if (lenS > 1 && (s[0] === 0x00) && !(s[1] & 0x80)) throw new Error('S value excessively padded')
25152
25153 var signature = new Buffer(6 + lenR + lenS)
25154
25155 // 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S]
25156 signature[0] = 0x30
25157 signature[1] = signature.length - 2
25158 signature[2] = 0x02
25159 signature[3] = r.length
25160 r.copy(signature, 4)
25161 signature[4 + lenR] = 0x02
25162 signature[5 + lenR] = s.length
25163 s.copy(signature, 6 + lenR)
25164
25165 return signature
ebd8d4e8
IC
25166}
25167
8b095871
IC
25168module.exports = {
25169 check: check,
25170 decode: decode,
25171 encode: encode
ebd8d4e8 25172}
8b095871 25173
ab78acc6 25174}).call(this,require("buffer").Buffer)
8b095871
IC
25175},{"buffer":5}],33:[function(require,module,exports){
25176(function (module, exports) {
25177 'use strict';
ebd8d4e8 25178
8b095871
IC
25179 // Utils
25180 function assert (val, msg) {
25181 if (!val) throw new Error(msg || 'Assertion failed');
25182 }
ebd8d4e8 25183
8b095871
IC
25184 // Could use `inherits` module, but don't want to move from single file
25185 // architecture yet.
25186 function inherits (ctor, superCtor) {
25187 ctor.super_ = superCtor;
25188 var TempCtor = function () {};
25189 TempCtor.prototype = superCtor.prototype;
25190 ctor.prototype = new TempCtor();
25191 ctor.prototype.constructor = ctor;
25192 }
ebd8d4e8 25193
8b095871 25194 // BN
ab78acc6 25195
8b095871
IC
25196 function BN (number, base, endian) {
25197 if (BN.isBN(number)) {
25198 return number;
25199 }
ab78acc6 25200
8b095871
IC
25201 this.negative = 0;
25202 this.words = null;
25203 this.length = 0;
ab78acc6 25204
8b095871
IC
25205 // Reduction context
25206 this.red = null;
ab78acc6 25207
8b095871
IC
25208 if (number !== null) {
25209 if (base === 'le' || base === 'be') {
25210 endian = base;
25211 base = 10;
25212 }
ab78acc6 25213
8b095871
IC
25214 this._init(number || 0, base || 10, endian || 'be');
25215 }
25216 }
25217 if (typeof module === 'object') {
25218 module.exports = BN;
25219 } else {
25220 exports.BN = BN;
25221 }
ab78acc6 25222
8b095871
IC
25223 BN.BN = BN;
25224 BN.wordSize = 26;
ab78acc6 25225
8b095871
IC
25226 var Buffer;
25227 try {
25228 Buffer = require('buf' + 'fer').Buffer;
25229 } catch (e) {
25230 }
ab78acc6 25231
8b095871
IC
25232 BN.isBN = function isBN (num) {
25233 if (num instanceof BN) {
25234 return true;
25235 }
ab78acc6 25236
8b095871
IC
25237 return num !== null && typeof num === 'object' &&
25238 num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);
25239 };
ebd8d4e8 25240
8b095871
IC
25241 BN.max = function max (left, right) {
25242 if (left.cmp(right) > 0) return left;
25243 return right;
25244 };
ebd8d4e8 25245
8b095871
IC
25246 BN.min = function min (left, right) {
25247 if (left.cmp(right) < 0) return left;
25248 return right;
25249 };
25250
25251 BN.prototype._init = function init (number, base, endian) {
25252 if (typeof number === 'number') {
25253 return this._initNumber(number, base, endian);
ab78acc6 25254 }
ebd8d4e8 25255
8b095871
IC
25256 if (typeof number === 'object') {
25257 return this._initArray(number, base, endian);
25258 }
ebd8d4e8 25259
8b095871
IC
25260 if (base === 'hex') {
25261 base = 16;
25262 }
25263 assert(base === (base | 0) && base >= 2 && base <= 36);
25264
25265 number = number.toString().replace(/\s+/g, '');
25266 var start = 0;
25267 if (number[0] === '-') {
25268 start++;
25269 }
25270
25271 if (base === 16) {
25272 this._parseHex(number, start);
25273 } else {
25274 this._parseBase(number, base, start);
ab78acc6 25275 }
ebd8d4e8 25276
8b095871
IC
25277 if (number[0] === '-') {
25278 this.negative = 1;
25279 }
ebd8d4e8 25280
8b095871 25281 this.strip();
ebd8d4e8 25282
8b095871 25283 if (endian !== 'le') return;
ebd8d4e8 25284
8b095871
IC
25285 this._initArray(this.toArray(), base, endian);
25286 };
ebd8d4e8 25287
8b095871
IC
25288 BN.prototype._initNumber = function _initNumber (number, base, endian) {
25289 if (number < 0) {
25290 this.negative = 1;
25291 number = -number;
25292 }
25293 if (number < 0x4000000) {
25294 this.words = [ number & 0x3ffffff ];
25295 this.length = 1;
25296 } else if (number < 0x10000000000000) {
25297 this.words = [
25298 number & 0x3ffffff,
25299 (number / 0x4000000) & 0x3ffffff
25300 ];
25301 this.length = 2;
25302 } else {
25303 assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)
25304 this.words = [
25305 number & 0x3ffffff,
25306 (number / 0x4000000) & 0x3ffffff,
25307 1
25308 ];
25309 this.length = 3;
25310 }
ebd8d4e8 25311
8b095871 25312 if (endian !== 'le') return;
ebd8d4e8 25313
8b095871
IC
25314 // Reverse the bytes
25315 this._initArray(this.toArray(), base, endian);
25316 };
ebd8d4e8 25317
8b095871
IC
25318 BN.prototype._initArray = function _initArray (number, base, endian) {
25319 // Perhaps a Uint8Array
25320 assert(typeof number.length === 'number');
25321 if (number.length <= 0) {
25322 this.words = [ 0 ];
25323 this.length = 1;
25324 return this;
ab78acc6 25325 }
ebd8d4e8 25326
8b095871
IC
25327 this.length = Math.ceil(number.length / 3);
25328 this.words = new Array(this.length);
25329 for (var i = 0; i < this.length; i++) {
25330 this.words[i] = 0;
25331 }
ebd8d4e8 25332
8b095871
IC
25333 var j, w;
25334 var off = 0;
25335 if (endian === 'be') {
25336 for (i = number.length - 1, j = 0; i >= 0; i -= 3) {
25337 w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);
25338 this.words[j] |= (w << off) & 0x3ffffff;
25339 this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;
25340 off += 24;
25341 if (off >= 26) {
25342 off -= 26;
25343 j++;
25344 }
25345 }
25346 } else if (endian === 'le') {
25347 for (i = 0, j = 0; i < number.length; i += 3) {
25348 w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);
25349 this.words[j] |= (w << off) & 0x3ffffff;
25350 this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;
25351 off += 24;
25352 if (off >= 26) {
25353 off -= 26;
25354 j++;
25355 }
25356 }
25357 }
25358 return this.strip();
25359 };
ebd8d4e8 25360
8b095871
IC
25361 function parseHex (str, start, end) {
25362 var r = 0;
25363 var len = Math.min(str.length, end);
25364 for (var i = start; i < len; i++) {
25365 var c = str.charCodeAt(i) - 48;
ab78acc6 25366
8b095871 25367 r <<= 4;
ab78acc6 25368
8b095871
IC
25369 // 'a' - 'f'
25370 if (c >= 49 && c <= 54) {
25371 r |= c - 49 + 0xa;
ab78acc6 25372
8b095871
IC
25373 // 'A' - 'F'
25374 } else if (c >= 17 && c <= 22) {
25375 r |= c - 17 + 0xa;
ebd8d4e8 25376
8b095871
IC
25377 // '0' - '9'
25378 } else {
25379 r |= c & 0xf;
25380 }
25381 }
25382 return r;
25383 }
25384
25385 BN.prototype._parseHex = function _parseHex (number, start) {
25386 // Create possibly bigger array to ensure that it fits the number
25387 this.length = Math.ceil((number.length - start) / 6);
25388 this.words = new Array(this.length);
25389 for (var i = 0; i < this.length; i++) {
25390 this.words[i] = 0;
25391 }
25392
25393 var j, w;
25394 // Scan 24-bit chunks and add them to the number
25395 var off = 0;
25396 for (i = number.length - 6, j = 0; i >= start; i -= 6) {
25397 w = parseHex(number, i, i + 6);
25398 this.words[j] |= (w << off) & 0x3ffffff;
25399 // NOTE: `0x3fffff` is intentional here, 26bits max shift + 24bit hex limb
25400 this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;
25401 off += 24;
25402 if (off >= 26) {
25403 off -= 26;
25404 j++;
25405 }
25406 }
25407 if (i + 6 !== start) {
25408 w = parseHex(number, start, i + 6);
25409 this.words[j] |= (w << off) & 0x3ffffff;
25410 this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;
25411 }
25412 this.strip();
25413 };
ebd8d4e8 25414
8b095871
IC
25415 function parseBase (str, start, end, mul) {
25416 var r = 0;
25417 var len = Math.min(str.length, end);
25418 for (var i = start; i < len; i++) {
25419 var c = str.charCodeAt(i) - 48;
ebd8d4e8 25420
8b095871 25421 r *= mul;
ebd8d4e8 25422
8b095871
IC
25423 // 'a'
25424 if (c >= 49) {
25425 r += c - 49 + 0xa;
ebd8d4e8 25426
8b095871
IC
25427 // 'A'
25428 } else if (c >= 17) {
25429 r += c - 17 + 0xa;
ebd8d4e8 25430
8b095871
IC
25431 // '0' - '9'
25432 } else {
25433 r += c;
25434 }
25435 }
25436 return r;
25437 }
ebd8d4e8 25438
8b095871
IC
25439 BN.prototype._parseBase = function _parseBase (number, base, start) {
25440 // Initialize as zero
25441 this.words = [ 0 ];
25442 this.length = 1;
ebd8d4e8 25443
8b095871
IC
25444 // Find length of limb in base
25445 for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {
25446 limbLen++;
25447 }
25448 limbLen--;
25449 limbPow = (limbPow / base) | 0;
ebd8d4e8 25450
8b095871
IC
25451 var total = number.length - start;
25452 var mod = total % limbLen;
25453 var end = Math.min(total, total - mod) + start;
ebd8d4e8 25454
8b095871
IC
25455 var word = 0;
25456 for (var i = start; i < end; i += limbLen) {
25457 word = parseBase(number, i, i + limbLen, base);
ebd8d4e8 25458
8b095871
IC
25459 this.imuln(limbPow);
25460 if (this.words[0] + word < 0x4000000) {
25461 this.words[0] += word;
25462 } else {
25463 this._iaddn(word);
25464 }
25465 }
ebd8d4e8 25466
8b095871
IC
25467 if (mod !== 0) {
25468 var pow = 1;
25469 word = parseBase(number, i, number.length, base);
ebd8d4e8 25470
8b095871
IC
25471 for (i = 0; i < mod; i++) {
25472 pow *= base;
25473 }
ab78acc6 25474
8b095871
IC
25475 this.imuln(pow);
25476 if (this.words[0] + word < 0x4000000) {
25477 this.words[0] += word;
25478 } else {
25479 this._iaddn(word);
25480 }
25481 }
25482 };
ab78acc6 25483
8b095871
IC
25484 BN.prototype.copy = function copy (dest) {
25485 dest.words = new Array(this.length);
25486 for (var i = 0; i < this.length; i++) {
25487 dest.words[i] = this.words[i];
ab78acc6 25488 }
8b095871
IC
25489 dest.length = this.length;
25490 dest.negative = this.negative;
25491 dest.red = this.red;
25492 };
ab78acc6 25493
8b095871
IC
25494 BN.prototype.clone = function clone () {
25495 var r = new BN(null);
25496 this.copy(r);
25497 return r;
25498 };
ab78acc6 25499
8b095871
IC
25500 BN.prototype._expand = function _expand (size) {
25501 while (this.length < size) {
25502 this.words[this.length++] = 0;
25503 }
25504 return this;
25505 };
ab78acc6 25506
8b095871
IC
25507 // Remove leading `0` from `this`
25508 BN.prototype.strip = function strip () {
25509 while (this.length > 1 && this.words[this.length - 1] === 0) {
25510 this.length--;
ab78acc6 25511 }
8b095871
IC
25512 return this._normSign();
25513 };
ebd8d4e8 25514
8b095871
IC
25515 BN.prototype._normSign = function _normSign () {
25516 // -0 = 0
25517 if (this.length === 1 && this.words[0] === 0) {
25518 this.negative = 0;
ab78acc6 25519 }
8b095871
IC
25520 return this;
25521 };
ebd8d4e8 25522
8b095871
IC
25523 BN.prototype.inspect = function inspect () {
25524 return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';
25525 };
ebd8d4e8 25526
8b095871 25527 /*
ebd8d4e8 25528
8b095871
IC
25529 var zeros = [];
25530 var groupSizes = [];
25531 var groupBases = [];
ebd8d4e8 25532
8b095871
IC
25533 var s = '';
25534 var i = -1;
25535 while (++i < BN.wordSize) {
25536 zeros[i] = s;
25537 s += '0';
25538 }
25539 groupSizes[0] = 0;
25540 groupSizes[1] = 0;
25541 groupBases[0] = 0;
25542 groupBases[1] = 0;
25543 var base = 2 - 1;
25544 while (++base < 36 + 1) {
25545 var groupSize = 0;
25546 var groupBase = 1;
25547 while (groupBase < (1 << BN.wordSize) / base) {
25548 groupBase *= base;
25549 groupSize += 1;
25550 }
25551 groupSizes[base] = groupSize;
25552 groupBases[base] = groupBase;
ebd8d4e8
IC
25553 }
25554
8b095871 25555 */
ebd8d4e8 25556
8b095871
IC
25557 var zeros = [
25558 '',
25559 '0',
25560 '00',
25561 '000',
25562 '0000',
25563 '00000',
25564 '000000',
25565 '0000000',
25566 '00000000',
25567 '000000000',
25568 '0000000000',
25569 '00000000000',
25570 '000000000000',
25571 '0000000000000',
25572 '00000000000000',
25573 '000000000000000',
25574 '0000000000000000',
25575 '00000000000000000',
25576 '000000000000000000',
25577 '0000000000000000000',
25578 '00000000000000000000',
25579 '000000000000000000000',
25580 '0000000000000000000000',
25581 '00000000000000000000000',
25582 '000000000000000000000000',
25583 '0000000000000000000000000'
25584 ];
25585
25586 var groupSizes = [
25587 0, 0,
25588 25, 16, 12, 11, 10, 9, 8,
25589 8, 7, 7, 7, 7, 6, 6,
25590 6, 6, 6, 6, 6, 5, 5,
25591 5, 5, 5, 5, 5, 5, 5,
25592 5, 5, 5, 5, 5, 5, 5
25593 ];
25594
25595 var groupBases = [
25596 0, 0,
25597 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,
25598 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,
25599 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,
25600 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,
25601 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176
25602 ];
25603
25604 BN.prototype.toString = function toString (base, padding) {
25605 base = base || 10;
25606 padding = padding | 0 || 1;
25607
25608 var out;
25609 if (base === 16 || base === 'hex') {
25610 out = '';
25611 var off = 0;
25612 var carry = 0;
25613 for (var i = 0; i < this.length; i++) {
25614 var w = this.words[i];
25615 var word = (((w << off) | carry) & 0xffffff).toString(16);
25616 carry = (w >>> (24 - off)) & 0xffffff;
25617 if (carry !== 0 || i !== this.length - 1) {
25618 out = zeros[6 - word.length] + word + out;
25619 } else {
25620 out = word + out;
25621 }
25622 off += 2;
25623 if (off >= 26) {
25624 off -= 26;
25625 i--;
25626 }
25627 }
25628 if (carry !== 0) {
25629 out = carry.toString(16) + out;
25630 }
25631 while (out.length % padding !== 0) {
25632 out = '0' + out;
25633 }
25634 if (this.negative !== 0) {
25635 out = '-' + out;
25636 }
25637 return out;
25638 }
25639
25640 if (base === (base | 0) && base >= 2 && base <= 36) {
25641 // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));
25642 var groupSize = groupSizes[base];
25643 // var groupBase = Math.pow(base, groupSize);
25644 var groupBase = groupBases[base];
25645 out = '';
25646 var c = this.clone();
25647 c.negative = 0;
25648 while (!c.isZero()) {
25649 var r = c.modn(groupBase).toString(base);
25650 c = c.idivn(groupBase);
25651
25652 if (!c.isZero()) {
25653 out = zeros[groupSize - r.length] + r + out;
25654 } else {
25655 out = r + out;
25656 }
25657 }
25658 if (this.isZero()) {
25659 out = '0' + out;
25660 }
25661 while (out.length % padding !== 0) {
25662 out = '0' + out;
25663 }
25664 if (this.negative !== 0) {
25665 out = '-' + out;
25666 }
25667 return out;
25668 }
25669
25670 assert(false, 'Base should be between 2 and 36');
25671 };
25672
25673 BN.prototype.toNumber = function toNumber () {
25674 var ret = this.words[0];
25675 if (this.length === 2) {
25676 ret += this.words[1] * 0x4000000;
25677 } else if (this.length === 3 && this.words[2] === 0x01) {
25678 // NOTE: at this stage it is known that the top bit is set
25679 ret += 0x10000000000000 + (this.words[1] * 0x4000000);
25680 } else if (this.length > 2) {
25681 assert(false, 'Number can only safely store up to 53 bits');
25682 }
25683 return (this.negative !== 0) ? -ret : ret;
25684 };
25685
25686 BN.prototype.toJSON = function toJSON () {
25687 return this.toString(16);
25688 };
25689
25690 BN.prototype.toBuffer = function toBuffer (endian, length) {
25691 assert(typeof Buffer !== 'undefined');
25692 return this.toArrayLike(Buffer, endian, length);
25693 };
ebd8d4e8 25694
8b095871
IC
25695 BN.prototype.toArray = function toArray (endian, length) {
25696 return this.toArrayLike(Array, endian, length);
25697 };
ebd8d4e8 25698
8b095871
IC
25699 BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {
25700 var byteLength = this.byteLength();
25701 var reqLength = length || Math.max(1, byteLength);
25702 assert(byteLength <= reqLength, 'byte array longer than desired length');
25703 assert(reqLength > 0, 'Requested array length <= 0');
25704
25705 this.strip();
25706 var littleEndian = endian === 'le';
25707 var res = new ArrayType(reqLength);
25708
25709 var b, i;
25710 var q = this.clone();
25711 if (!littleEndian) {
25712 // Assume big-endian
25713 for (i = 0; i < reqLength - byteLength; i++) {
25714 res[i] = 0;
25715 }
ebd8d4e8 25716
8b095871
IC
25717 for (i = 0; !q.isZero(); i++) {
25718 b = q.andln(0xff);
25719 q.iushrn(8);
ebd8d4e8 25720
8b095871
IC
25721 res[reqLength - i - 1] = b;
25722 }
25723 } else {
25724 for (i = 0; !q.isZero(); i++) {
25725 b = q.andln(0xff);
25726 q.iushrn(8);
ebd8d4e8 25727
8b095871
IC
25728 res[i] = b;
25729 }
25730
25731 for (; i < reqLength; i++) {
25732 res[i] = 0;
25733 }
ab78acc6 25734 }
ebd8d4e8 25735
8b095871
IC
25736 return res;
25737 };
ebd8d4e8 25738
8b095871
IC
25739 if (Math.clz32) {
25740 BN.prototype._countBits = function _countBits (w) {
25741 return 32 - Math.clz32(w);
25742 };
25743 } else {
25744 BN.prototype._countBits = function _countBits (w) {
25745 var t = w;
25746 var r = 0;
25747 if (t >= 0x1000) {
25748 r += 13;
25749 t >>>= 13;
25750 }
25751 if (t >= 0x40) {
25752 r += 7;
25753 t >>>= 7;
25754 }
25755 if (t >= 0x8) {
25756 r += 4;
25757 t >>>= 4;
25758 }
25759 if (t >= 0x02) {
25760 r += 2;
25761 t >>>= 2;
25762 }
25763 return r + t;
25764 };
ebd8d4e8
IC
25765 }
25766
8b095871
IC
25767 BN.prototype._zeroBits = function _zeroBits (w) {
25768 // Short-cut
25769 if (w === 0) return 26;
ebd8d4e8 25770
8b095871
IC
25771 var t = w;
25772 var r = 0;
25773 if ((t & 0x1fff) === 0) {
25774 r += 13;
25775 t >>>= 13;
25776 }
25777 if ((t & 0x7f) === 0) {
25778 r += 7;
25779 t >>>= 7;
25780 }
25781 if ((t & 0xf) === 0) {
25782 r += 4;
25783 t >>>= 4;
25784 }
25785 if ((t & 0x3) === 0) {
25786 r += 2;
25787 t >>>= 2;
25788 }
25789 if ((t & 0x1) === 0) {
25790 r++;
25791 }
25792 return r;
25793 };
ebd8d4e8 25794
8b095871
IC
25795 // Return number of used bits in a BN
25796 BN.prototype.bitLength = function bitLength () {
25797 var w = this.words[this.length - 1];
25798 var hi = this._countBits(w);
25799 return (this.length - 1) * 26 + hi;
25800 };
ebd8d4e8 25801
8b095871
IC
25802 function toBitArray (num) {
25803 var w = new Array(num.bitLength());
ebd8d4e8 25804
8b095871
IC
25805 for (var bit = 0; bit < w.length; bit++) {
25806 var off = (bit / 26) | 0;
25807 var wbit = bit % 26;
ebd8d4e8 25808
8b095871 25809 w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;
ab78acc6 25810 }
8b095871
IC
25811
25812 return w;
ab78acc6 25813 }
ebd8d4e8 25814
8b095871
IC
25815 // Number of trailing zero bits
25816 BN.prototype.zeroBits = function zeroBits () {
25817 if (this.isZero()) return 0;
25818
25819 var r = 0;
25820 for (var i = 0; i < this.length; i++) {
25821 var b = this._zeroBits(this.words[i]);
25822 r += b;
25823 if (b !== 26) break;
ab78acc6 25824 }
8b095871
IC
25825 return r;
25826 };
25827
25828 BN.prototype.byteLength = function byteLength () {
25829 return Math.ceil(this.bitLength() / 8);
25830 };
25831
25832 BN.prototype.toTwos = function toTwos (width) {
25833 if (this.negative !== 0) {
25834 return this.abs().inotn(width).iaddn(1);
ab78acc6 25835 }
8b095871
IC
25836 return this.clone();
25837 };
ebd8d4e8 25838
8b095871
IC
25839 BN.prototype.fromTwos = function fromTwos (width) {
25840 if (this.testn(width - 1)) {
25841 return this.notn(width).iaddn(1).ineg();
25842 }
25843 return this.clone();
25844 };
ebd8d4e8 25845
8b095871
IC
25846 BN.prototype.isNeg = function isNeg () {
25847 return this.negative !== 0;
25848 };
ebd8d4e8 25849
8b095871
IC
25850 // Return negative clone of `this`
25851 BN.prototype.neg = function neg () {
25852 return this.clone().ineg();
25853 };
ebd8d4e8 25854
8b095871
IC
25855 BN.prototype.ineg = function ineg () {
25856 if (!this.isZero()) {
25857 this.negative ^= 1;
ab78acc6 25858 }
ebd8d4e8 25859
8b095871
IC
25860 return this;
25861 };
ebd8d4e8 25862
8b095871
IC
25863 // Or `num` with `this` in-place
25864 BN.prototype.iuor = function iuor (num) {
25865 while (this.length < num.length) {
25866 this.words[this.length++] = 0;
25867 }
ebd8d4e8 25868
8b095871
IC
25869 for (var i = 0; i < num.length; i++) {
25870 this.words[i] = this.words[i] | num.words[i];
ebd8d4e8 25871 }
ebd8d4e8 25872
8b095871
IC
25873 return this.strip();
25874 };
ebd8d4e8 25875
8b095871
IC
25876 BN.prototype.ior = function ior (num) {
25877 assert((this.negative | num.negative) === 0);
25878 return this.iuor(num);
ab78acc6 25879 };
ebd8d4e8 25880
8b095871
IC
25881 // Or `num` with `this`
25882 BN.prototype.or = function or (num) {
25883 if (this.length > num.length) return this.clone().ior(num);
25884 return num.clone().ior(this);
25885 };
ebd8d4e8 25886
8b095871
IC
25887 BN.prototype.uor = function uor (num) {
25888 if (this.length > num.length) return this.clone().iuor(num);
25889 return num.clone().iuor(this);
25890 };
ebd8d4e8 25891
8b095871
IC
25892 // And `num` with `this` in-place
25893 BN.prototype.iuand = function iuand (num) {
25894 // b = min-length(num, this)
25895 var b;
25896 if (this.length > num.length) {
25897 b = num;
25898 } else {
25899 b = this;
25900 }
25901
25902 for (var i = 0; i < b.length; i++) {
25903 this.words[i] = this.words[i] & num.words[i];
25904 }
ebd8d4e8 25905
8b095871 25906 this.length = b.length;
ebd8d4e8 25907
8b095871
IC
25908 return this.strip();
25909 };
ebd8d4e8 25910
8b095871
IC
25911 BN.prototype.iand = function iand (num) {
25912 assert((this.negative | num.negative) === 0);
25913 return this.iuand(num);
25914 };
ebd8d4e8 25915
8b095871
IC
25916 // And `num` with `this`
25917 BN.prototype.and = function and (num) {
25918 if (this.length > num.length) return this.clone().iand(num);
25919 return num.clone().iand(this);
25920 };
ebd8d4e8 25921
8b095871
IC
25922 BN.prototype.uand = function uand (num) {
25923 if (this.length > num.length) return this.clone().iuand(num);
25924 return num.clone().iuand(this);
25925 };
ebd8d4e8 25926
8b095871
IC
25927 // Xor `num` with `this` in-place
25928 BN.prototype.iuxor = function iuxor (num) {
25929 // a.length > b.length
25930 var a;
25931 var b;
25932 if (this.length > num.length) {
25933 a = this;
25934 b = num;
25935 } else {
25936 a = num;
25937 b = this;
25938 }
ebd8d4e8 25939
8b095871
IC
25940 for (var i = 0; i < b.length; i++) {
25941 this.words[i] = a.words[i] ^ b.words[i];
25942 }
ebd8d4e8 25943
8b095871
IC
25944 if (this !== a) {
25945 for (; i < a.length; i++) {
25946 this.words[i] = a.words[i];
25947 }
25948 }
ebd8d4e8 25949
8b095871 25950 this.length = a.length;
ebd8d4e8 25951
8b095871
IC
25952 return this.strip();
25953 };
ebd8d4e8 25954
8b095871
IC
25955 BN.prototype.ixor = function ixor (num) {
25956 assert((this.negative | num.negative) === 0);
25957 return this.iuxor(num);
25958 };
ebd8d4e8 25959
8b095871
IC
25960 // Xor `num` with `this`
25961 BN.prototype.xor = function xor (num) {
25962 if (this.length > num.length) return this.clone().ixor(num);
25963 return num.clone().ixor(this);
25964 };
ebd8d4e8 25965
8b095871
IC
25966 BN.prototype.uxor = function uxor (num) {
25967 if (this.length > num.length) return this.clone().iuxor(num);
25968 return num.clone().iuxor(this);
25969 };
ebd8d4e8 25970
8b095871
IC
25971 // Not ``this`` with ``width`` bitwidth
25972 BN.prototype.inotn = function inotn (width) {
25973 assert(typeof width === 'number' && width >= 0);
ebd8d4e8 25974
8b095871
IC
25975 var bytesNeeded = Math.ceil(width / 26) | 0;
25976 var bitsLeft = width % 26;
ebd8d4e8 25977
8b095871
IC
25978 // Extend the buffer with leading zeroes
25979 this._expand(bytesNeeded);
25980
25981 if (bitsLeft > 0) {
25982 bytesNeeded--;
ab78acc6 25983 }
8b095871
IC
25984
25985 // Handle complete words
25986 for (var i = 0; i < bytesNeeded; i++) {
25987 this.words[i] = ~this.words[i] & 0x3ffffff;
ab78acc6 25988 }
8b095871
IC
25989
25990 // Handle the residue
25991 if (bitsLeft > 0) {
25992 this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));
ab78acc6 25993 }
ebd8d4e8 25994
8b095871
IC
25995 // And remove leading zeroes
25996 return this.strip();
25997 };
ebd8d4e8 25998
8b095871
IC
25999 BN.prototype.notn = function notn (width) {
26000 return this.clone().inotn(width);
26001 };
ebd8d4e8 26002
8b095871
IC
26003 // Set `bit` of `this`
26004 BN.prototype.setn = function setn (bit, val) {
26005 assert(typeof bit === 'number' && bit >= 0);
ebd8d4e8 26006
8b095871
IC
26007 var off = (bit / 26) | 0;
26008 var wbit = bit % 26;
ebd8d4e8 26009
8b095871 26010 this._expand(off + 1);
ebd8d4e8 26011
8b095871
IC
26012 if (val) {
26013 this.words[off] = this.words[off] | (1 << wbit);
26014 } else {
26015 this.words[off] = this.words[off] & ~(1 << wbit);
26016 }
ebd8d4e8 26017
8b095871
IC
26018 return this.strip();
26019 };
ebd8d4e8 26020
8b095871
IC
26021 // Add `num` to `this` in-place
26022 BN.prototype.iadd = function iadd (num) {
26023 var r;
26024
26025 // negative + positive
26026 if (this.negative !== 0 && num.negative === 0) {
26027 this.negative = 0;
26028 r = this.isub(num);
26029 this.negative ^= 1;
26030 return this._normSign();
26031
26032 // positive + negative
26033 } else if (this.negative === 0 && num.negative !== 0) {
26034 num.negative = 0;
26035 r = this.isub(num);
26036 num.negative = 1;
26037 return r._normSign();
26038 }
26039
26040 // a.length > b.length
26041 var a, b;
26042 if (this.length > num.length) {
26043 a = this;
26044 b = num;
ab78acc6 26045 } else {
8b095871
IC
26046 a = num;
26047 b = this;
26048 }
26049
26050 var carry = 0;
26051 for (var i = 0; i < b.length; i++) {
26052 r = (a.words[i] | 0) + (b.words[i] | 0) + carry;
26053 this.words[i] = r & 0x3ffffff;
26054 carry = r >>> 26;
26055 }
26056 for (; carry !== 0 && i < a.length; i++) {
26057 r = (a.words[i] | 0) + carry;
26058 this.words[i] = r & 0x3ffffff;
26059 carry = r >>> 26;
26060 }
26061
26062 this.length = a.length;
26063 if (carry !== 0) {
26064 this.words[this.length] = carry;
26065 this.length++;
26066 // Copy the rest of the words
26067 } else if (a !== this) {
26068 for (; i < a.length; i++) {
26069 this.words[i] = a.words[i];
26070 }
ab78acc6 26071 }
ebd8d4e8 26072
8b095871
IC
26073 return this;
26074 };
ebd8d4e8 26075
8b095871
IC
26076 // Add `num` to `this`
26077 BN.prototype.add = function add (num) {
26078 var res;
26079 if (num.negative !== 0 && this.negative === 0) {
26080 num.negative = 0;
26081 res = this.sub(num);
26082 num.negative ^= 1;
26083 return res;
26084 } else if (num.negative === 0 && this.negative !== 0) {
26085 this.negative = 0;
26086 res = num.sub(this);
26087 this.negative = 1;
26088 return res;
26089 }
ebd8d4e8 26090
8b095871 26091 if (this.length > num.length) return this.clone().iadd(num);
ebd8d4e8 26092
8b095871
IC
26093 return num.clone().iadd(this);
26094 };
ebd8d4e8 26095
8b095871
IC
26096 // Subtract `num` from `this` in-place
26097 BN.prototype.isub = function isub (num) {
26098 // this - (-num) = this + num
26099 if (num.negative !== 0) {
26100 num.negative = 0;
26101 var r = this.iadd(num);
26102 num.negative = 1;
26103 return r._normSign();
26104
26105 // -this - num = -(this + num)
26106 } else if (this.negative !== 0) {
26107 this.negative = 0;
26108 this.iadd(num);
26109 this.negative = 1;
26110 return this._normSign();
26111 }
26112
26113 // At this point both numbers are positive
26114 var cmp = this.cmp(num);
26115
26116 // Optimization - zeroify
26117 if (cmp === 0) {
26118 this.negative = 0;
26119 this.length = 1;
26120 this.words[0] = 0;
26121 return this;
26122 }
ebd8d4e8 26123
8b095871
IC
26124 // a > b
26125 var a, b;
26126 if (cmp > 0) {
26127 a = this;
26128 b = num;
26129 } else {
26130 a = num;
26131 b = this;
26132 }
ebd8d4e8 26133
8b095871
IC
26134 var carry = 0;
26135 for (var i = 0; i < b.length; i++) {
26136 r = (a.words[i] | 0) - (b.words[i] | 0) + carry;
26137 carry = r >> 26;
26138 this.words[i] = r & 0x3ffffff;
26139 }
26140 for (; carry !== 0 && i < a.length; i++) {
26141 r = (a.words[i] | 0) + carry;
26142 carry = r >> 26;
26143 this.words[i] = r & 0x3ffffff;
26144 }
ebd8d4e8 26145
8b095871
IC
26146 // Copy rest of the words
26147 if (carry === 0 && i < a.length && a !== this) {
26148 for (; i < a.length; i++) {
26149 this.words[i] = a.words[i];
26150 }
26151 }
ebd8d4e8 26152
8b095871 26153 this.length = Math.max(this.length, i);
ebd8d4e8 26154
8b095871
IC
26155 if (a !== this) {
26156 this.negative = 1;
ab78acc6 26157 }
ebd8d4e8 26158
8b095871
IC
26159 return this.strip();
26160 };
ebd8d4e8 26161
8b095871
IC
26162 // Subtract `num` from `this`
26163 BN.prototype.sub = function sub (num) {
26164 return this.clone().isub(num);
26165 };
26166
26167 function smallMulTo (self, num, out) {
26168 out.negative = num.negative ^ self.negative;
26169 var len = (self.length + num.length) | 0;
26170 out.length = len;
26171 len = (len - 1) | 0;
26172
26173 // Peel one iteration (compiler can't do it, because of code complexity)
26174 var a = self.words[0] | 0;
26175 var b = num.words[0] | 0;
26176 var r = a * b;
26177
26178 var lo = r & 0x3ffffff;
26179 var carry = (r / 0x4000000) | 0;
26180 out.words[0] = lo;
26181
26182 for (var k = 1; k < len; k++) {
26183 // Sum all words with the same `i + j = k` and accumulate `ncarry`,
26184 // note that ncarry could be >= 0x3ffffff
26185 var ncarry = carry >>> 26;
26186 var rword = carry & 0x3ffffff;
26187 var maxJ = Math.min(k, num.length - 1);
26188 for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {
26189 var i = (k - j) | 0;
26190 a = self.words[i] | 0;
26191 b = num.words[j] | 0;
26192 r = a * b + rword;
26193 ncarry += (r / 0x4000000) | 0;
26194 rword = r & 0x3ffffff;
26195 }
26196 out.words[k] = rword | 0;
26197 carry = ncarry | 0;
26198 }
26199 if (carry !== 0) {
26200 out.words[k] = carry | 0;
ab78acc6 26201 } else {
8b095871
IC
26202 out.length--;
26203 }
26204
26205 return out.strip();
26206 }
26207
26208 // TODO(indutny): it may be reasonable to omit it for users who don't need
26209 // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit
26210 // multiplication (like elliptic secp256k1).
26211 var comb10MulTo = function comb10MulTo (self, num, out) {
26212 var a = self.words;
26213 var b = num.words;
26214 var o = out.words;
26215 var c = 0;
26216 var lo;
26217 var mid;
26218 var hi;
26219 var a0 = a[0] | 0;
26220 var al0 = a0 & 0x1fff;
26221 var ah0 = a0 >>> 13;
26222 var a1 = a[1] | 0;
26223 var al1 = a1 & 0x1fff;
26224 var ah1 = a1 >>> 13;
26225 var a2 = a[2] | 0;
26226 var al2 = a2 & 0x1fff;
26227 var ah2 = a2 >>> 13;
26228 var a3 = a[3] | 0;
26229 var al3 = a3 & 0x1fff;
26230 var ah3 = a3 >>> 13;
26231 var a4 = a[4] | 0;
26232 var al4 = a4 & 0x1fff;
26233 var ah4 = a4 >>> 13;
26234 var a5 = a[5] | 0;
26235 var al5 = a5 & 0x1fff;
26236 var ah5 = a5 >>> 13;
26237 var a6 = a[6] | 0;
26238 var al6 = a6 & 0x1fff;
26239 var ah6 = a6 >>> 13;
26240 var a7 = a[7] | 0;
26241 var al7 = a7 & 0x1fff;
26242 var ah7 = a7 >>> 13;
26243 var a8 = a[8] | 0;
26244 var al8 = a8 & 0x1fff;
26245 var ah8 = a8 >>> 13;
26246 var a9 = a[9] | 0;
26247 var al9 = a9 & 0x1fff;
26248 var ah9 = a9 >>> 13;
26249 var b0 = b[0] | 0;
26250 var bl0 = b0 & 0x1fff;
26251 var bh0 = b0 >>> 13;
26252 var b1 = b[1] | 0;
26253 var bl1 = b1 & 0x1fff;
26254 var bh1 = b1 >>> 13;
26255 var b2 = b[2] | 0;
26256 var bl2 = b2 & 0x1fff;
26257 var bh2 = b2 >>> 13;
26258 var b3 = b[3] | 0;
26259 var bl3 = b3 & 0x1fff;
26260 var bh3 = b3 >>> 13;
26261 var b4 = b[4] | 0;
26262 var bl4 = b4 & 0x1fff;
26263 var bh4 = b4 >>> 13;
26264 var b5 = b[5] | 0;
26265 var bl5 = b5 & 0x1fff;
26266 var bh5 = b5 >>> 13;
26267 var b6 = b[6] | 0;
26268 var bl6 = b6 & 0x1fff;
26269 var bh6 = b6 >>> 13;
26270 var b7 = b[7] | 0;
26271 var bl7 = b7 & 0x1fff;
26272 var bh7 = b7 >>> 13;
26273 var b8 = b[8] | 0;
26274 var bl8 = b8 & 0x1fff;
26275 var bh8 = b8 >>> 13;
26276 var b9 = b[9] | 0;
26277 var bl9 = b9 & 0x1fff;
26278 var bh9 = b9 >>> 13;
26279
26280 out.negative = self.negative ^ num.negative;
26281 out.length = 19;
26282 /* k = 0 */
26283 lo = Math.imul(al0, bl0);
26284 mid = Math.imul(al0, bh0);
26285 mid = (mid + Math.imul(ah0, bl0)) | 0;
26286 hi = Math.imul(ah0, bh0);
26287 var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
26288 c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;
26289 w0 &= 0x3ffffff;
26290 /* k = 1 */
26291 lo = Math.imul(al1, bl0);
26292 mid = Math.imul(al1, bh0);
26293 mid = (mid + Math.imul(ah1, bl0)) | 0;
26294 hi = Math.imul(ah1, bh0);
26295 lo = (lo + Math.imul(al0, bl1)) | 0;
26296 mid = (mid + Math.imul(al0, bh1)) | 0;
26297 mid = (mid + Math.imul(ah0, bl1)) | 0;
26298 hi = (hi + Math.imul(ah0, bh1)) | 0;
26299 var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
26300 c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;
26301 w1 &= 0x3ffffff;
26302 /* k = 2 */
26303 lo = Math.imul(al2, bl0);
26304 mid = Math.imul(al2, bh0);
26305 mid = (mid + Math.imul(ah2, bl0)) | 0;
26306 hi = Math.imul(ah2, bh0);
26307 lo = (lo + Math.imul(al1, bl1)) | 0;
26308 mid = (mid + Math.imul(al1, bh1)) | 0;
26309 mid = (mid + Math.imul(ah1, bl1)) | 0;
26310 hi = (hi + Math.imul(ah1, bh1)) | 0;
26311 lo = (lo + Math.imul(al0, bl2)) | 0;
26312 mid = (mid + Math.imul(al0, bh2)) | 0;
26313 mid = (mid + Math.imul(ah0, bl2)) | 0;
26314 hi = (hi + Math.imul(ah0, bh2)) | 0;
26315 var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
26316 c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;
26317 w2 &= 0x3ffffff;
26318 /* k = 3 */
26319 lo = Math.imul(al3, bl0);
26320 mid = Math.imul(al3, bh0);
26321 mid = (mid + Math.imul(ah3, bl0)) | 0;
26322 hi = Math.imul(ah3, bh0);
26323 lo = (lo + Math.imul(al2, bl1)) | 0;
26324 mid = (mid + Math.imul(al2, bh1)) | 0;
26325 mid = (mid + Math.imul(ah2, bl1)) | 0;
26326 hi = (hi + Math.imul(ah2, bh1)) | 0;
26327 lo = (lo + Math.imul(al1, bl2)) | 0;
26328 mid = (mid + Math.imul(al1, bh2)) | 0;
26329 mid = (mid + Math.imul(ah1, bl2)) | 0;
26330 hi = (hi + Math.imul(ah1, bh2)) | 0;
26331 lo = (lo + Math.imul(al0, bl3)) | 0;
26332 mid = (mid + Math.imul(al0, bh3)) | 0;
26333 mid = (mid + Math.imul(ah0, bl3)) | 0;
26334 hi = (hi + Math.imul(ah0, bh3)) | 0;
26335 var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
26336 c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;
26337 w3 &= 0x3ffffff;
26338 /* k = 4 */
26339 lo = Math.imul(al4, bl0);
26340 mid = Math.imul(al4, bh0);
26341 mid = (mid + Math.imul(ah4, bl0)) | 0;
26342 hi = Math.imul(ah4, bh0);
26343 lo = (lo + Math.imul(al3, bl1)) | 0;
26344 mid = (mid + Math.imul(al3, bh1)) | 0;
26345 mid = (mid + Math.imul(ah3, bl1)) | 0;
26346 hi = (hi + Math.imul(ah3, bh1)) | 0;
26347 lo = (lo + Math.imul(al2, bl2)) | 0;
26348 mid = (mid + Math.imul(al2, bh2)) | 0;
26349 mid = (mid + Math.imul(ah2, bl2)) | 0;
26350 hi = (hi + Math.imul(ah2, bh2)) | 0;
26351 lo = (lo + Math.imul(al1, bl3)) | 0;
26352 mid = (mid + Math.imul(al1, bh3)) | 0;
26353 mid = (mid + Math.imul(ah1, bl3)) | 0;
26354 hi = (hi + Math.imul(ah1, bh3)) | 0;
26355 lo = (lo + Math.imul(al0, bl4)) | 0;
26356 mid = (mid + Math.imul(al0, bh4)) | 0;
26357 mid = (mid + Math.imul(ah0, bl4)) | 0;
26358 hi = (hi + Math.imul(ah0, bh4)) | 0;
26359 var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
26360 c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;
26361 w4 &= 0x3ffffff;
26362 /* k = 5 */
26363 lo = Math.imul(al5, bl0);
26364 mid = Math.imul(al5, bh0);
26365 mid = (mid + Math.imul(ah5, bl0)) | 0;
26366 hi = Math.imul(ah5, bh0);
26367 lo = (lo + Math.imul(al4, bl1)) | 0;
26368 mid = (mid + Math.imul(al4, bh1)) | 0;
26369 mid = (mid + Math.imul(ah4, bl1)) | 0;
26370 hi = (hi + Math.imul(ah4, bh1)) | 0;
26371 lo = (lo + Math.imul(al3, bl2)) | 0;
26372 mid = (mid + Math.imul(al3, bh2)) | 0;
26373 mid = (mid + Math.imul(ah3, bl2)) | 0;
26374 hi = (hi + Math.imul(ah3, bh2)) | 0;
26375 lo = (lo + Math.imul(al2, bl3)) | 0;
26376 mid = (mid + Math.imul(al2, bh3)) | 0;
26377 mid = (mid + Math.imul(ah2, bl3)) | 0;
26378 hi = (hi + Math.imul(ah2, bh3)) | 0;
26379 lo = (lo + Math.imul(al1, bl4)) | 0;
26380 mid = (mid + Math.imul(al1, bh4)) | 0;
26381 mid = (mid + Math.imul(ah1, bl4)) | 0;
26382 hi = (hi + Math.imul(ah1, bh4)) | 0;
26383 lo = (lo + Math.imul(al0, bl5)) | 0;
26384 mid = (mid + Math.imul(al0, bh5)) | 0;
26385 mid = (mid + Math.imul(ah0, bl5)) | 0;
26386 hi = (hi + Math.imul(ah0, bh5)) | 0;
26387 var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
26388 c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;
26389 w5 &= 0x3ffffff;
26390 /* k = 6 */
26391 lo = Math.imul(al6, bl0);
26392 mid = Math.imul(al6, bh0);
26393 mid = (mid + Math.imul(ah6, bl0)) | 0;
26394 hi = Math.imul(ah6, bh0);
26395 lo = (lo + Math.imul(al5, bl1)) | 0;
26396 mid = (mid + Math.imul(al5, bh1)) | 0;
26397 mid = (mid + Math.imul(ah5, bl1)) | 0;
26398 hi = (hi + Math.imul(ah5, bh1)) | 0;
26399 lo = (lo + Math.imul(al4, bl2)) | 0;
26400 mid = (mid + Math.imul(al4, bh2)) | 0;
26401 mid = (mid + Math.imul(ah4, bl2)) | 0;
26402 hi = (hi + Math.imul(ah4, bh2)) | 0;
26403 lo = (lo + Math.imul(al3, bl3)) | 0;
26404 mid = (mid + Math.imul(al3, bh3)) | 0;
26405 mid = (mid + Math.imul(ah3, bl3)) | 0;
26406 hi = (hi + Math.imul(ah3, bh3)) | 0;
26407 lo = (lo + Math.imul(al2, bl4)) | 0;
26408 mid = (mid + Math.imul(al2, bh4)) | 0;
26409 mid = (mid + Math.imul(ah2, bl4)) | 0;
26410 hi = (hi + Math.imul(ah2, bh4)) | 0;
26411 lo = (lo + Math.imul(al1, bl5)) | 0;
26412 mid = (mid + Math.imul(al1, bh5)) | 0;
26413 mid = (mid + Math.imul(ah1, bl5)) | 0;
26414 hi = (hi + Math.imul(ah1, bh5)) | 0;
26415 lo = (lo + Math.imul(al0, bl6)) | 0;
26416 mid = (mid + Math.imul(al0, bh6)) | 0;
26417 mid = (mid + Math.imul(ah0, bl6)) | 0;
26418 hi = (hi + Math.imul(ah0, bh6)) | 0;
26419 var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
26420 c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;
26421 w6 &= 0x3ffffff;
26422 /* k = 7 */
26423 lo = Math.imul(al7, bl0);
26424 mid = Math.imul(al7, bh0);
26425 mid = (mid + Math.imul(ah7, bl0)) | 0;
26426 hi = Math.imul(ah7, bh0);
26427 lo = (lo + Math.imul(al6, bl1)) | 0;
26428 mid = (mid + Math.imul(al6, bh1)) | 0;
26429 mid = (mid + Math.imul(ah6, bl1)) | 0;
26430 hi = (hi + Math.imul(ah6, bh1)) | 0;
26431 lo = (lo + Math.imul(al5, bl2)) | 0;
26432 mid = (mid + Math.imul(al5, bh2)) | 0;
26433 mid = (mid + Math.imul(ah5, bl2)) | 0;
26434 hi = (hi + Math.imul(ah5, bh2)) | 0;
26435 lo = (lo + Math.imul(al4, bl3)) | 0;
26436 mid = (mid + Math.imul(al4, bh3)) | 0;
26437 mid = (mid + Math.imul(ah4, bl3)) | 0;
26438 hi = (hi + Math.imul(ah4, bh3)) | 0;
26439 lo = (lo + Math.imul(al3, bl4)) | 0;
26440 mid = (mid + Math.imul(al3, bh4)) | 0;
26441 mid = (mid + Math.imul(ah3, bl4)) | 0;
26442 hi = (hi + Math.imul(ah3, bh4)) | 0;
26443 lo = (lo + Math.imul(al2, bl5)) | 0;
26444 mid = (mid + Math.imul(al2, bh5)) | 0;
26445 mid = (mid + Math.imul(ah2, bl5)) | 0;
26446 hi = (hi + Math.imul(ah2, bh5)) | 0;
26447 lo = (lo + Math.imul(al1, bl6)) | 0;
26448 mid = (mid + Math.imul(al1, bh6)) | 0;
26449 mid = (mid + Math.imul(ah1, bl6)) | 0;
26450 hi = (hi + Math.imul(ah1, bh6)) | 0;
26451 lo = (lo + Math.imul(al0, bl7)) | 0;
26452 mid = (mid + Math.imul(al0, bh7)) | 0;
26453 mid = (mid + Math.imul(ah0, bl7)) | 0;
26454 hi = (hi + Math.imul(ah0, bh7)) | 0;
26455 var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
26456 c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;
26457 w7 &= 0x3ffffff;
26458 /* k = 8 */
26459 lo = Math.imul(al8, bl0);
26460 mid = Math.imul(al8, bh0);
26461 mid = (mid + Math.imul(ah8, bl0)) | 0;
26462 hi = Math.imul(ah8, bh0);
26463 lo = (lo + Math.imul(al7, bl1)) | 0;
26464 mid = (mid + Math.imul(al7, bh1)) | 0;
26465 mid = (mid + Math.imul(ah7, bl1)) | 0;
26466 hi = (hi + Math.imul(ah7, bh1)) | 0;
26467 lo = (lo + Math.imul(al6, bl2)) | 0;
26468 mid = (mid + Math.imul(al6, bh2)) | 0;
26469 mid = (mid + Math.imul(ah6, bl2)) | 0;
26470 hi = (hi + Math.imul(ah6, bh2)) | 0;
26471 lo = (lo + Math.imul(al5, bl3)) | 0;
26472 mid = (mid + Math.imul(al5, bh3)) | 0;
26473 mid = (mid + Math.imul(ah5, bl3)) | 0;
26474 hi = (hi + Math.imul(ah5, bh3)) | 0;
26475 lo = (lo + Math.imul(al4, bl4)) | 0;
26476 mid = (mid + Math.imul(al4, bh4)) | 0;
26477 mid = (mid + Math.imul(ah4, bl4)) | 0;
26478 hi = (hi + Math.imul(ah4, bh4)) | 0;
26479 lo = (lo + Math.imul(al3, bl5)) | 0;
26480 mid = (mid + Math.imul(al3, bh5)) | 0;
26481 mid = (mid + Math.imul(ah3, bl5)) | 0;
26482 hi = (hi + Math.imul(ah3, bh5)) | 0;
26483 lo = (lo + Math.imul(al2, bl6)) | 0;
26484 mid = (mid + Math.imul(al2, bh6)) | 0;
26485 mid = (mid + Math.imul(ah2, bl6)) | 0;
26486 hi = (hi + Math.imul(ah2, bh6)) | 0;
26487 lo = (lo + Math.imul(al1, bl7)) | 0;
26488 mid = (mid + Math.imul(al1, bh7)) | 0;
26489 mid = (mid + Math.imul(ah1, bl7)) | 0;
26490 hi = (hi + Math.imul(ah1, bh7)) | 0;
26491 lo = (lo + Math.imul(al0, bl8)) | 0;
26492 mid = (mid + Math.imul(al0, bh8)) | 0;
26493 mid = (mid + Math.imul(ah0, bl8)) | 0;
26494 hi = (hi + Math.imul(ah0, bh8)) | 0;
26495 var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
26496 c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;
26497 w8 &= 0x3ffffff;
26498 /* k = 9 */
26499 lo = Math.imul(al9, bl0);
26500 mid = Math.imul(al9, bh0);
26501 mid = (mid + Math.imul(ah9, bl0)) | 0;
26502 hi = Math.imul(ah9, bh0);
26503 lo = (lo + Math.imul(al8, bl1)) | 0;
26504 mid = (mid + Math.imul(al8, bh1)) | 0;
26505 mid = (mid + Math.imul(ah8, bl1)) | 0;
26506 hi = (hi + Math.imul(ah8, bh1)) | 0;
26507 lo = (lo + Math.imul(al7, bl2)) | 0;
26508 mid = (mid + Math.imul(al7, bh2)) | 0;
26509 mid = (mid + Math.imul(ah7, bl2)) | 0;
26510 hi = (hi + Math.imul(ah7, bh2)) | 0;
26511 lo = (lo + Math.imul(al6, bl3)) | 0;
26512 mid = (mid + Math.imul(al6, bh3)) | 0;
26513 mid = (mid + Math.imul(ah6, bl3)) | 0;
26514 hi = (hi + Math.imul(ah6, bh3)) | 0;
26515 lo = (lo + Math.imul(al5, bl4)) | 0;
26516 mid = (mid + Math.imul(al5, bh4)) | 0;
26517 mid = (mid + Math.imul(ah5, bl4)) | 0;
26518 hi = (hi + Math.imul(ah5, bh4)) | 0;
26519 lo = (lo + Math.imul(al4, bl5)) | 0;
26520 mid = (mid + Math.imul(al4, bh5)) | 0;
26521 mid = (mid + Math.imul(ah4, bl5)) | 0;
26522 hi = (hi + Math.imul(ah4, bh5)) | 0;
26523 lo = (lo + Math.imul(al3, bl6)) | 0;
26524 mid = (mid + Math.imul(al3, bh6)) | 0;
26525 mid = (mid + Math.imul(ah3, bl6)) | 0;
26526 hi = (hi + Math.imul(ah3, bh6)) | 0;
26527 lo = (lo + Math.imul(al2, bl7)) | 0;
26528 mid = (mid + Math.imul(al2, bh7)) | 0;
26529 mid = (mid + Math.imul(ah2, bl7)) | 0;
26530 hi = (hi + Math.imul(ah2, bh7)) | 0;
26531 lo = (lo + Math.imul(al1, bl8)) | 0;
26532 mid = (mid + Math.imul(al1, bh8)) | 0;
26533 mid = (mid + Math.imul(ah1, bl8)) | 0;
26534 hi = (hi + Math.imul(ah1, bh8)) | 0;
26535 lo = (lo + Math.imul(al0, bl9)) | 0;
26536 mid = (mid + Math.imul(al0, bh9)) | 0;
26537 mid = (mid + Math.imul(ah0, bl9)) | 0;
26538 hi = (hi + Math.imul(ah0, bh9)) | 0;
26539 var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
26540 c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;
26541 w9 &= 0x3ffffff;
26542 /* k = 10 */
26543 lo = Math.imul(al9, bl1);
26544 mid = Math.imul(al9, bh1);
26545 mid = (mid + Math.imul(ah9, bl1)) | 0;
26546 hi = Math.imul(ah9, bh1);
26547 lo = (lo + Math.imul(al8, bl2)) | 0;
26548 mid = (mid + Math.imul(al8, bh2)) | 0;
26549 mid = (mid + Math.imul(ah8, bl2)) | 0;
26550 hi = (hi + Math.imul(ah8, bh2)) | 0;
26551 lo = (lo + Math.imul(al7, bl3)) | 0;
26552 mid = (mid + Math.imul(al7, bh3)) | 0;
26553 mid = (mid + Math.imul(ah7, bl3)) | 0;
26554 hi = (hi + Math.imul(ah7, bh3)) | 0;
26555 lo = (lo + Math.imul(al6, bl4)) | 0;
26556 mid = (mid + Math.imul(al6, bh4)) | 0;
26557 mid = (mid + Math.imul(ah6, bl4)) | 0;
26558 hi = (hi + Math.imul(ah6, bh4)) | 0;
26559 lo = (lo + Math.imul(al5, bl5)) | 0;
26560 mid = (mid + Math.imul(al5, bh5)) | 0;
26561 mid = (mid + Math.imul(ah5, bl5)) | 0;
26562 hi = (hi + Math.imul(ah5, bh5)) | 0;
26563 lo = (lo + Math.imul(al4, bl6)) | 0;
26564 mid = (mid + Math.imul(al4, bh6)) | 0;
26565 mid = (mid + Math.imul(ah4, bl6)) | 0;
26566 hi = (hi + Math.imul(ah4, bh6)) | 0;
26567 lo = (lo + Math.imul(al3, bl7)) | 0;
26568 mid = (mid + Math.imul(al3, bh7)) | 0;
26569 mid = (mid + Math.imul(ah3, bl7)) | 0;
26570 hi = (hi + Math.imul(ah3, bh7)) | 0;
26571 lo = (lo + Math.imul(al2, bl8)) | 0;
26572 mid = (mid + Math.imul(al2, bh8)) | 0;
26573 mid = (mid + Math.imul(ah2, bl8)) | 0;
26574 hi = (hi + Math.imul(ah2, bh8)) | 0;
26575 lo = (lo + Math.imul(al1, bl9)) | 0;
26576 mid = (mid + Math.imul(al1, bh9)) | 0;
26577 mid = (mid + Math.imul(ah1, bl9)) | 0;
26578 hi = (hi + Math.imul(ah1, bh9)) | 0;
26579 var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
26580 c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;
26581 w10 &= 0x3ffffff;
26582 /* k = 11 */
26583 lo = Math.imul(al9, bl2);
26584 mid = Math.imul(al9, bh2);
26585 mid = (mid + Math.imul(ah9, bl2)) | 0;
26586 hi = Math.imul(ah9, bh2);
26587 lo = (lo + Math.imul(al8, bl3)) | 0;
26588 mid = (mid + Math.imul(al8, bh3)) | 0;
26589 mid = (mid + Math.imul(ah8, bl3)) | 0;
26590 hi = (hi + Math.imul(ah8, bh3)) | 0;
26591 lo = (lo + Math.imul(al7, bl4)) | 0;
26592 mid = (mid + Math.imul(al7, bh4)) | 0;
26593 mid = (mid + Math.imul(ah7, bl4)) | 0;
26594 hi = (hi + Math.imul(ah7, bh4)) | 0;
26595 lo = (lo + Math.imul(al6, bl5)) | 0;
26596 mid = (mid + Math.imul(al6, bh5)) | 0;
26597 mid = (mid + Math.imul(ah6, bl5)) | 0;
26598 hi = (hi + Math.imul(ah6, bh5)) | 0;
26599 lo = (lo + Math.imul(al5, bl6)) | 0;
26600 mid = (mid + Math.imul(al5, bh6)) | 0;
26601 mid = (mid + Math.imul(ah5, bl6)) | 0;
26602 hi = (hi + Math.imul(ah5, bh6)) | 0;
26603 lo = (lo + Math.imul(al4, bl7)) | 0;
26604 mid = (mid + Math.imul(al4, bh7)) | 0;
26605 mid = (mid + Math.imul(ah4, bl7)) | 0;
26606 hi = (hi + Math.imul(ah4, bh7)) | 0;
26607 lo = (lo + Math.imul(al3, bl8)) | 0;
26608 mid = (mid + Math.imul(al3, bh8)) | 0;
26609 mid = (mid + Math.imul(ah3, bl8)) | 0;
26610 hi = (hi + Math.imul(ah3, bh8)) | 0;
26611 lo = (lo + Math.imul(al2, bl9)) | 0;
26612 mid = (mid + Math.imul(al2, bh9)) | 0;
26613 mid = (mid + Math.imul(ah2, bl9)) | 0;
26614 hi = (hi + Math.imul(ah2, bh9)) | 0;
26615 var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
26616 c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;
26617 w11 &= 0x3ffffff;
26618 /* k = 12 */
26619 lo = Math.imul(al9, bl3);
26620 mid = Math.imul(al9, bh3);
26621 mid = (mid + Math.imul(ah9, bl3)) | 0;
26622 hi = Math.imul(ah9, bh3);
26623 lo = (lo + Math.imul(al8, bl4)) | 0;
26624 mid = (mid + Math.imul(al8, bh4)) | 0;
26625 mid = (mid + Math.imul(ah8, bl4)) | 0;
26626 hi = (hi + Math.imul(ah8, bh4)) | 0;
26627 lo = (lo + Math.imul(al7, bl5)) | 0;
26628 mid = (mid + Math.imul(al7, bh5)) | 0;
26629 mid = (mid + Math.imul(ah7, bl5)) | 0;
26630 hi = (hi + Math.imul(ah7, bh5)) | 0;
26631 lo = (lo + Math.imul(al6, bl6)) | 0;
26632 mid = (mid + Math.imul(al6, bh6)) | 0;
26633 mid = (mid + Math.imul(ah6, bl6)) | 0;
26634 hi = (hi + Math.imul(ah6, bh6)) | 0;
26635 lo = (lo + Math.imul(al5, bl7)) | 0;
26636 mid = (mid + Math.imul(al5, bh7)) | 0;
26637 mid = (mid + Math.imul(ah5, bl7)) | 0;
26638 hi = (hi + Math.imul(ah5, bh7)) | 0;
26639 lo = (lo + Math.imul(al4, bl8)) | 0;
26640 mid = (mid + Math.imul(al4, bh8)) | 0;
26641 mid = (mid + Math.imul(ah4, bl8)) | 0;
26642 hi = (hi + Math.imul(ah4, bh8)) | 0;
26643 lo = (lo + Math.imul(al3, bl9)) | 0;
26644 mid = (mid + Math.imul(al3, bh9)) | 0;
26645 mid = (mid + Math.imul(ah3, bl9)) | 0;
26646 hi = (hi + Math.imul(ah3, bh9)) | 0;
26647 var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
26648 c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;
26649 w12 &= 0x3ffffff;
26650 /* k = 13 */
26651 lo = Math.imul(al9, bl4);
26652 mid = Math.imul(al9, bh4);
26653 mid = (mid + Math.imul(ah9, bl4)) | 0;
26654 hi = Math.imul(ah9, bh4);
26655 lo = (lo + Math.imul(al8, bl5)) | 0;
26656 mid = (mid + Math.imul(al8, bh5)) | 0;
26657 mid = (mid + Math.imul(ah8, bl5)) | 0;
26658 hi = (hi + Math.imul(ah8, bh5)) | 0;
26659 lo = (lo + Math.imul(al7, bl6)) | 0;
26660 mid = (mid + Math.imul(al7, bh6)) | 0;
26661 mid = (mid + Math.imul(ah7, bl6)) | 0;
26662 hi = (hi + Math.imul(ah7, bh6)) | 0;
26663 lo = (lo + Math.imul(al6, bl7)) | 0;
26664 mid = (mid + Math.imul(al6, bh7)) | 0;
26665 mid = (mid + Math.imul(ah6, bl7)) | 0;
26666 hi = (hi + Math.imul(ah6, bh7)) | 0;
26667 lo = (lo + Math.imul(al5, bl8)) | 0;
26668 mid = (mid + Math.imul(al5, bh8)) | 0;
26669 mid = (mid + Math.imul(ah5, bl8)) | 0;
26670 hi = (hi + Math.imul(ah5, bh8)) | 0;
26671 lo = (lo + Math.imul(al4, bl9)) | 0;
26672 mid = (mid + Math.imul(al4, bh9)) | 0;
26673 mid = (mid + Math.imul(ah4, bl9)) | 0;
26674 hi = (hi + Math.imul(ah4, bh9)) | 0;
26675 var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
26676 c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;
26677 w13 &= 0x3ffffff;
26678 /* k = 14 */
26679 lo = Math.imul(al9, bl5);
26680 mid = Math.imul(al9, bh5);
26681 mid = (mid + Math.imul(ah9, bl5)) | 0;
26682 hi = Math.imul(ah9, bh5);
26683 lo = (lo + Math.imul(al8, bl6)) | 0;
26684 mid = (mid + Math.imul(al8, bh6)) | 0;
26685 mid = (mid + Math.imul(ah8, bl6)) | 0;
26686 hi = (hi + Math.imul(ah8, bh6)) | 0;
26687 lo = (lo + Math.imul(al7, bl7)) | 0;
26688 mid = (mid + Math.imul(al7, bh7)) | 0;
26689 mid = (mid + Math.imul(ah7, bl7)) | 0;
26690 hi = (hi + Math.imul(ah7, bh7)) | 0;
26691 lo = (lo + Math.imul(al6, bl8)) | 0;
26692 mid = (mid + Math.imul(al6, bh8)) | 0;
26693 mid = (mid + Math.imul(ah6, bl8)) | 0;
26694 hi = (hi + Math.imul(ah6, bh8)) | 0;
26695 lo = (lo + Math.imul(al5, bl9)) | 0;
26696 mid = (mid + Math.imul(al5, bh9)) | 0;
26697 mid = (mid + Math.imul(ah5, bl9)) | 0;
26698 hi = (hi + Math.imul(ah5, bh9)) | 0;
26699 var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
26700 c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;
26701 w14 &= 0x3ffffff;
26702 /* k = 15 */
26703 lo = Math.imul(al9, bl6);
26704 mid = Math.imul(al9, bh6);
26705 mid = (mid + Math.imul(ah9, bl6)) | 0;
26706 hi = Math.imul(ah9, bh6);
26707 lo = (lo + Math.imul(al8, bl7)) | 0;
26708 mid = (mid + Math.imul(al8, bh7)) | 0;
26709 mid = (mid + Math.imul(ah8, bl7)) | 0;
26710 hi = (hi + Math.imul(ah8, bh7)) | 0;
26711 lo = (lo + Math.imul(al7, bl8)) | 0;
26712 mid = (mid + Math.imul(al7, bh8)) | 0;
26713 mid = (mid + Math.imul(ah7, bl8)) | 0;
26714 hi = (hi + Math.imul(ah7, bh8)) | 0;
26715 lo = (lo + Math.imul(al6, bl9)) | 0;
26716 mid = (mid + Math.imul(al6, bh9)) | 0;
26717 mid = (mid + Math.imul(ah6, bl9)) | 0;
26718 hi = (hi + Math.imul(ah6, bh9)) | 0;
26719 var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
26720 c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;
26721 w15 &= 0x3ffffff;
26722 /* k = 16 */
26723 lo = Math.imul(al9, bl7);
26724 mid = Math.imul(al9, bh7);
26725 mid = (mid + Math.imul(ah9, bl7)) | 0;
26726 hi = Math.imul(ah9, bh7);
26727 lo = (lo + Math.imul(al8, bl8)) | 0;
26728 mid = (mid + Math.imul(al8, bh8)) | 0;
26729 mid = (mid + Math.imul(ah8, bl8)) | 0;
26730 hi = (hi + Math.imul(ah8, bh8)) | 0;
26731 lo = (lo + Math.imul(al7, bl9)) | 0;
26732 mid = (mid + Math.imul(al7, bh9)) | 0;
26733 mid = (mid + Math.imul(ah7, bl9)) | 0;
26734 hi = (hi + Math.imul(ah7, bh9)) | 0;
26735 var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
26736 c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;
26737 w16 &= 0x3ffffff;
26738 /* k = 17 */
26739 lo = Math.imul(al9, bl8);
26740 mid = Math.imul(al9, bh8);
26741 mid = (mid + Math.imul(ah9, bl8)) | 0;
26742 hi = Math.imul(ah9, bh8);
26743 lo = (lo + Math.imul(al8, bl9)) | 0;
26744 mid = (mid + Math.imul(al8, bh9)) | 0;
26745 mid = (mid + Math.imul(ah8, bl9)) | 0;
26746 hi = (hi + Math.imul(ah8, bh9)) | 0;
26747 var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
26748 c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;
26749 w17 &= 0x3ffffff;
26750 /* k = 18 */
26751 lo = Math.imul(al9, bl9);
26752 mid = Math.imul(al9, bh9);
26753 mid = (mid + Math.imul(ah9, bl9)) | 0;
26754 hi = Math.imul(ah9, bh9);
26755 var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
26756 c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;
26757 w18 &= 0x3ffffff;
26758 o[0] = w0;
26759 o[1] = w1;
26760 o[2] = w2;
26761 o[3] = w3;
26762 o[4] = w4;
26763 o[5] = w5;
26764 o[6] = w6;
26765 o[7] = w7;
26766 o[8] = w8;
26767 o[9] = w9;
26768 o[10] = w10;
26769 o[11] = w11;
26770 o[12] = w12;
26771 o[13] = w13;
26772 o[14] = w14;
26773 o[15] = w15;
26774 o[16] = w16;
26775 o[17] = w17;
26776 o[18] = w18;
26777 if (c !== 0) {
26778 o[19] = c;
26779 out.length++;
ab78acc6 26780 }
8b095871
IC
26781 return out;
26782 };
26783
26784 // Polyfill comb
26785 if (!Math.imul) {
26786 comb10MulTo = smallMulTo;
26787 }
26788
26789 function bigMulTo (self, num, out) {
26790 out.negative = num.negative ^ self.negative;
26791 out.length = self.length + num.length;
26792
26793 var carry = 0;
26794 var hncarry = 0;
26795 for (var k = 0; k < out.length - 1; k++) {
26796 // Sum all words with the same `i + j = k` and accumulate `ncarry`,
26797 // note that ncarry could be >= 0x3ffffff
26798 var ncarry = hncarry;
26799 hncarry = 0;
26800 var rword = carry & 0x3ffffff;
26801 var maxJ = Math.min(k, num.length - 1);
26802 for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {
26803 var i = k - j;
26804 var a = self.words[i] | 0;
26805 var b = num.words[j] | 0;
26806 var r = a * b;
26807
26808 var lo = r & 0x3ffffff;
26809 ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;
26810 lo = (lo + rword) | 0;
26811 rword = lo & 0x3ffffff;
26812 ncarry = (ncarry + (lo >>> 26)) | 0;
26813
26814 hncarry += ncarry >>> 26;
26815 ncarry &= 0x3ffffff;
26816 }
26817 out.words[k] = rword;
26818 carry = ncarry;
26819 ncarry = hncarry;
26820 }
26821 if (carry !== 0) {
26822 out.words[k] = carry;
26823 } else {
26824 out.length--;
ab78acc6 26825 }
8b095871
IC
26826
26827 return out.strip();
ab78acc6 26828 }
8b095871
IC
26829
26830 function jumboMulTo (self, num, out) {
26831 var fftm = new FFTM();
26832 return fftm.mulp(self, num, out);
ab78acc6 26833 }
8b095871
IC
26834
26835 BN.prototype.mulTo = function mulTo (num, out) {
26836 var res;
26837 var len = this.length + num.length;
26838 if (this.length === 10 && num.length === 10) {
26839 res = comb10MulTo(this, num, out);
26840 } else if (len < 63) {
26841 res = smallMulTo(this, num, out);
26842 } else if (len < 1024) {
26843 res = bigMulTo(this, num, out);
ab78acc6 26844 } else {
8b095871 26845 res = jumboMulTo(this, num, out);
ab78acc6 26846 }
8b095871
IC
26847
26848 return res;
26849 };
26850
26851 // Cooley-Tukey algorithm for FFT
26852 // slightly revisited to rely on looping instead of recursion
26853
26854 function FFTM (x, y) {
26855 this.x = x;
26856 this.y = y;
ab78acc6 26857 }
8b095871
IC
26858
26859 FFTM.prototype.makeRBT = function makeRBT (N) {
26860 var t = new Array(N);
26861 var l = BN.prototype._countBits(N) - 1;
26862 for (var i = 0; i < N; i++) {
26863 t[i] = this.revBin(i, l, N);
26864 }
26865
26866 return t;
26867 };
26868
26869 // Returns binary-reversed representation of `x`
26870 FFTM.prototype.revBin = function revBin (x, l, N) {
26871 if (x === 0 || x === N - 1) return x;
26872
26873 var rb = 0;
26874 for (var i = 0; i < l; i++) {
26875 rb |= (x & 1) << (l - i - 1);
26876 x >>= 1;
26877 }
26878
26879 return rb;
26880 };
26881
26882 // Performs "tweedling" phase, therefore 'emulating'
26883 // behaviour of the recursive algorithm
26884 FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {
26885 for (var i = 0; i < N; i++) {
26886 rtws[i] = rws[rbt[i]];
26887 itws[i] = iws[rbt[i]];
26888 }
26889 };
26890
26891 FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {
26892 this.permute(rbt, rws, iws, rtws, itws, N);
26893
26894 for (var s = 1; s < N; s <<= 1) {
26895 var l = s << 1;
26896
26897 var rtwdf = Math.cos(2 * Math.PI / l);
26898 var itwdf = Math.sin(2 * Math.PI / l);
26899
26900 for (var p = 0; p < N; p += l) {
26901 var rtwdf_ = rtwdf;
26902 var itwdf_ = itwdf;
26903
26904 for (var j = 0; j < s; j++) {
26905 var re = rtws[p + j];
26906 var ie = itws[p + j];
26907
26908 var ro = rtws[p + j + s];
26909 var io = itws[p + j + s];
26910
26911 var rx = rtwdf_ * ro - itwdf_ * io;
26912
26913 io = rtwdf_ * io + itwdf_ * ro;
26914 ro = rx;
26915
26916 rtws[p + j] = re + ro;
26917 itws[p + j] = ie + io;
26918
26919 rtws[p + j + s] = re - ro;
26920 itws[p + j + s] = ie - io;
26921
26922 /* jshint maxdepth : false */
26923 if (j !== l) {
26924 rx = rtwdf * rtwdf_ - itwdf * itwdf_;
26925
26926 itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;
26927 rtwdf_ = rx;
26928 }
26929 }
26930 }
ab78acc6 26931 }
8b095871
IC
26932 };
26933
26934 FFTM.prototype.guessLen13b = function guessLen13b (n, m) {
26935 var N = Math.max(m, n) | 1;
26936 var odd = N & 1;
26937 var i = 0;
26938 for (N = N / 2 | 0; N; N = N >>> 1) {
26939 i++;
ab78acc6 26940 }
ebd8d4e8 26941
8b095871
IC
26942 return 1 << i + 1 + odd;
26943 };
ebd8d4e8 26944
8b095871
IC
26945 FFTM.prototype.conjugate = function conjugate (rws, iws, N) {
26946 if (N <= 1) return;
ebd8d4e8 26947
8b095871
IC
26948 for (var i = 0; i < N / 2; i++) {
26949 var t = rws[i];
ebd8d4e8 26950
8b095871
IC
26951 rws[i] = rws[N - i - 1];
26952 rws[N - i - 1] = t;
ebd8d4e8 26953
8b095871 26954 t = iws[i];
ebd8d4e8 26955
8b095871
IC
26956 iws[i] = -iws[N - i - 1];
26957 iws[N - i - 1] = -t;
26958 }
26959 };
ebd8d4e8 26960
8b095871
IC
26961 FFTM.prototype.normalize13b = function normalize13b (ws, N) {
26962 var carry = 0;
26963 for (var i = 0; i < N / 2; i++) {
26964 var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +
26965 Math.round(ws[2 * i] / N) +
26966 carry;
ebd8d4e8 26967
8b095871 26968 ws[i] = w & 0x3ffffff;
ebd8d4e8 26969
8b095871
IC
26970 if (w < 0x4000000) {
26971 carry = 0;
26972 } else {
26973 carry = w / 0x4000000 | 0;
26974 }
26975 }
ebd8d4e8 26976
8b095871
IC
26977 return ws;
26978 };
ebd8d4e8 26979
8b095871
IC
26980 FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {
26981 var carry = 0;
26982 for (var i = 0; i < len; i++) {
26983 carry = carry + (ws[i] | 0);
ebd8d4e8 26984
8b095871
IC
26985 rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;
26986 rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;
26987 }
ebd8d4e8 26988
8b095871
IC
26989 // Pad with zeroes
26990 for (i = 2 * len; i < N; ++i) {
26991 rws[i] = 0;
26992 }
ebd8d4e8 26993
8b095871
IC
26994 assert(carry === 0);
26995 assert((carry & ~0x1fff) === 0);
26996 };
ebd8d4e8 26997
8b095871
IC
26998 FFTM.prototype.stub = function stub (N) {
26999 var ph = new Array(N);
27000 for (var i = 0; i < N; i++) {
27001 ph[i] = 0;
27002 }
ebd8d4e8 27003
8b095871
IC
27004 return ph;
27005 };
ebd8d4e8 27006
8b095871
IC
27007 FFTM.prototype.mulp = function mulp (x, y, out) {
27008 var N = 2 * this.guessLen13b(x.length, y.length);
ebd8d4e8 27009
8b095871 27010 var rbt = this.makeRBT(N);
ebd8d4e8 27011
8b095871 27012 var _ = this.stub(N);
ebd8d4e8 27013
8b095871
IC
27014 var rws = new Array(N);
27015 var rwst = new Array(N);
27016 var iwst = new Array(N);
ebd8d4e8 27017
8b095871
IC
27018 var nrws = new Array(N);
27019 var nrwst = new Array(N);
27020 var niwst = new Array(N);
ebd8d4e8 27021
8b095871
IC
27022 var rmws = out.words;
27023 rmws.length = N;
ebd8d4e8 27024
8b095871
IC
27025 this.convert13b(x.words, x.length, rws, N);
27026 this.convert13b(y.words, y.length, nrws, N);
ebd8d4e8 27027
8b095871
IC
27028 this.transform(rws, _, rwst, iwst, N, rbt);
27029 this.transform(nrws, _, nrwst, niwst, N, rbt);
ebd8d4e8 27030
8b095871
IC
27031 for (var i = 0; i < N; i++) {
27032 var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];
27033 iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];
27034 rwst[i] = rx;
27035 }
ebd8d4e8 27036
8b095871
IC
27037 this.conjugate(rwst, iwst, N);
27038 this.transform(rwst, iwst, rmws, _, N, rbt);
27039 this.conjugate(rmws, _, N);
27040 this.normalize13b(rmws, N);
ebd8d4e8 27041
8b095871
IC
27042 out.negative = x.negative ^ y.negative;
27043 out.length = x.length + y.length;
27044 return out.strip();
27045 };
ebd8d4e8 27046
8b095871
IC
27047 // Multiply `this` by `num`
27048 BN.prototype.mul = function mul (num) {
27049 var out = new BN(null);
27050 out.words = new Array(this.length + num.length);
27051 return this.mulTo(num, out);
27052 };
ab78acc6 27053
8b095871
IC
27054 // Multiply employing FFT
27055 BN.prototype.mulf = function mulf (num) {
27056 var out = new BN(null);
27057 out.words = new Array(this.length + num.length);
27058 return jumboMulTo(this, num, out);
27059 };
ebd8d4e8 27060
8b095871
IC
27061 // In-place Multiplication
27062 BN.prototype.imul = function imul (num) {
27063 return this.clone().mulTo(num, this);
27064 };
ab78acc6 27065
8b095871
IC
27066 BN.prototype.imuln = function imuln (num) {
27067 assert(typeof num === 'number');
27068 assert(num < 0x4000000);
ab78acc6 27069
8b095871
IC
27070 // Carry
27071 var carry = 0;
27072 for (var i = 0; i < this.length; i++) {
27073 var w = (this.words[i] | 0) * num;
27074 var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);
27075 carry >>= 26;
27076 carry += (w / 0x4000000) | 0;
27077 // NOTE: lo is 27bit maximum
27078 carry += lo >>> 26;
27079 this.words[i] = lo & 0x3ffffff;
27080 }
ab78acc6 27081
8b095871
IC
27082 if (carry !== 0) {
27083 this.words[i] = carry;
27084 this.length++;
27085 }
ab78acc6 27086
8b095871
IC
27087 return this;
27088 };
ab78acc6 27089
8b095871
IC
27090 BN.prototype.muln = function muln (num) {
27091 return this.clone().imuln(num);
27092 };
ebd8d4e8 27093
8b095871
IC
27094 // `this` * `this`
27095 BN.prototype.sqr = function sqr () {
27096 return this.mul(this);
27097 };
ebd8d4e8 27098
8b095871
IC
27099 // `this` * `this` in-place
27100 BN.prototype.isqr = function isqr () {
27101 return this.imul(this.clone());
27102 };
ab78acc6 27103
8b095871
IC
27104 // Math.pow(`this`, `num`)
27105 BN.prototype.pow = function pow (num) {
27106 var w = toBitArray(num);
27107 if (w.length === 0) return new BN(1);
ab78acc6 27108
8b095871
IC
27109 // Skip leading zeroes
27110 var res = this;
27111 for (var i = 0; i < w.length; i++, res = res.sqr()) {
27112 if (w[i] !== 0) break;
27113 }
ebd8d4e8 27114
8b095871
IC
27115 if (++i < w.length) {
27116 for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {
27117 if (w[i] === 0) continue;
ebd8d4e8 27118
8b095871
IC
27119 res = res.mul(q);
27120 }
ab78acc6
IC
27121 }
27122
8b095871
IC
27123 return res;
27124 };
ab78acc6 27125
8b095871
IC
27126 // Shift-left in-place
27127 BN.prototype.iushln = function iushln (bits) {
27128 assert(typeof bits === 'number' && bits >= 0);
27129 var r = bits % 26;
27130 var s = (bits - r) / 26;
27131 var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);
27132 var i;
27133
27134 if (r !== 0) {
27135 var carry = 0;
27136
27137 for (i = 0; i < this.length; i++) {
27138 var newCarry = this.words[i] & carryMask;
27139 var c = ((this.words[i] | 0) - newCarry) << r;
27140 this.words[i] = c | carry;
27141 carry = newCarry >>> (26 - r);
27142 }
27143
27144 if (carry) {
27145 this.words[i] = carry;
27146 this.length++;
27147 }
ab78acc6 27148 }
ebd8d4e8 27149
8b095871
IC
27150 if (s !== 0) {
27151 for (i = this.length - 1; i >= 0; i--) {
27152 this.words[i + s] = this.words[i];
27153 }
ebd8d4e8 27154
8b095871
IC
27155 for (i = 0; i < s; i++) {
27156 this.words[i] = 0;
27157 }
ebd8d4e8 27158
8b095871
IC
27159 this.length += s;
27160 }
ebd8d4e8 27161
8b095871
IC
27162 return this.strip();
27163 };
ebd8d4e8 27164
8b095871
IC
27165 BN.prototype.ishln = function ishln (bits) {
27166 // TODO(indutny): implement me
27167 assert(this.negative === 0);
27168 return this.iushln(bits);
27169 };
ebd8d4e8 27170
8b095871
IC
27171 // Shift-right in-place
27172 // NOTE: `hint` is a lowest bit before trailing zeroes
27173 // NOTE: if `extended` is present - it will be filled with destroyed bits
27174 BN.prototype.iushrn = function iushrn (bits, hint, extended) {
27175 assert(typeof bits === 'number' && bits >= 0);
27176 var h;
27177 if (hint) {
27178 h = (hint - (hint % 26)) / 26;
27179 } else {
27180 h = 0;
27181 }
ebd8d4e8 27182
8b095871
IC
27183 var r = bits % 26;
27184 var s = Math.min((bits - r) / 26, this.length);
27185 var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);
27186 var maskedWords = extended;
27187
27188 h -= s;
27189 h = Math.max(0, h);
27190
27191 // Extended mode, copy masked part
27192 if (maskedWords) {
27193 for (var i = 0; i < s; i++) {
27194 maskedWords.words[i] = this.words[i];
27195 }
27196 maskedWords.length = s;
ab78acc6 27197 }
ebd8d4e8 27198
8b095871
IC
27199 if (s === 0) {
27200 // No-op, we should not move anything at all
27201 } else if (this.length > s) {
27202 this.length -= s;
27203 for (i = 0; i < this.length; i++) {
27204 this.words[i] = this.words[i + s];
27205 }
27206 } else {
27207 this.words[0] = 0;
27208 this.length = 1;
27209 }
ab78acc6 27210
8b095871
IC
27211 var carry = 0;
27212 for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {
27213 var word = this.words[i] | 0;
27214 this.words[i] = (carry << (26 - r)) | (word >>> r);
27215 carry = word & mask;
ab78acc6 27216 }
ebd8d4e8 27217
8b095871
IC
27218 // Push carried bits as a mask
27219 if (maskedWords && carry !== 0) {
27220 maskedWords.words[maskedWords.length++] = carry;
27221 }
27222
27223 if (this.length === 0) {
27224 this.words[0] = 0;
27225 this.length = 1;
27226 }
27227
27228 return this.strip();
27229 };
27230
27231 BN.prototype.ishrn = function ishrn (bits, hint, extended) {
27232 // TODO(indutny): implement me
27233 assert(this.negative === 0);
27234 return this.iushrn(bits, hint, extended);
27235 };
27236
27237 // Shift-left
27238 BN.prototype.shln = function shln (bits) {
27239 return this.clone().ishln(bits);
27240 };
27241
27242 BN.prototype.ushln = function ushln (bits) {
27243 return this.clone().iushln(bits);
27244 };
27245
27246 // Shift-right
27247 BN.prototype.shrn = function shrn (bits) {
27248 return this.clone().ishrn(bits);
27249 };
ebd8d4e8 27250
8b095871
IC
27251 BN.prototype.ushrn = function ushrn (bits) {
27252 return this.clone().iushrn(bits);
27253 };
ebd8d4e8 27254
8b095871
IC
27255 // Test if n bit is set
27256 BN.prototype.testn = function testn (bit) {
27257 assert(typeof bit === 'number' && bit >= 0);
27258 var r = bit % 26;
27259 var s = (bit - r) / 26;
27260 var q = 1 << r;
ebd8d4e8 27261
8b095871
IC
27262 // Fast case: bit is much higher than all existing words
27263 if (this.length <= s) return false;
ab78acc6 27264
8b095871
IC
27265 // Check bit and return
27266 var w = this.words[s];
ab78acc6 27267
8b095871
IC
27268 return !!(w & q);
27269 };
ab78acc6 27270
8b095871
IC
27271 // Return only lowers bits of number (in-place)
27272 BN.prototype.imaskn = function imaskn (bits) {
27273 assert(typeof bits === 'number' && bits >= 0);
27274 var r = bits % 26;
27275 var s = (bits - r) / 26;
ab78acc6 27276
8b095871 27277 assert(this.negative === 0, 'imaskn works only with positive numbers');
ab78acc6 27278
8b095871
IC
27279 if (this.length <= s) {
27280 return this;
27281 }
ab78acc6 27282
8b095871
IC
27283 if (r !== 0) {
27284 s++;
27285 }
27286 this.length = Math.min(s, this.length);
ab78acc6 27287
8b095871
IC
27288 if (r !== 0) {
27289 var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);
27290 this.words[this.length - 1] &= mask;
27291 }
ab78acc6 27292
8b095871
IC
27293 return this.strip();
27294 };
ab78acc6 27295
8b095871
IC
27296 // Return only lowers bits of number
27297 BN.prototype.maskn = function maskn (bits) {
27298 return this.clone().imaskn(bits);
27299 };
ebd8d4e8 27300
8b095871
IC
27301 // Add plain number `num` to `this`
27302 BN.prototype.iaddn = function iaddn (num) {
27303 assert(typeof num === 'number');
27304 assert(num < 0x4000000);
27305 if (num < 0) return this.isubn(-num);
27306
27307 // Possible sign change
27308 if (this.negative !== 0) {
27309 if (this.length === 1 && (this.words[0] | 0) < num) {
27310 this.words[0] = num - (this.words[0] | 0);
27311 this.negative = 0;
27312 return this;
27313 }
ebd8d4e8 27314
8b095871
IC
27315 this.negative = 0;
27316 this.isubn(num);
27317 this.negative = 1;
27318 return this;
27319 }
ebd8d4e8 27320
8b095871
IC
27321 // Add without checks
27322 return this._iaddn(num);
27323 };
ebd8d4e8 27324
8b095871
IC
27325 BN.prototype._iaddn = function _iaddn (num) {
27326 this.words[0] += num;
ebd8d4e8 27327
8b095871
IC
27328 // Carry
27329 for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {
27330 this.words[i] -= 0x4000000;
27331 if (i === this.length - 1) {
27332 this.words[i + 1] = 1;
27333 } else {
27334 this.words[i + 1]++;
27335 }
27336 }
27337 this.length = Math.max(this.length, i + 1);
ebd8d4e8 27338
8b095871
IC
27339 return this;
27340 };
ebd8d4e8 27341
8b095871
IC
27342 // Subtract plain number `num` from `this`
27343 BN.prototype.isubn = function isubn (num) {
27344 assert(typeof num === 'number');
27345 assert(num < 0x4000000);
27346 if (num < 0) return this.iaddn(-num);
ebd8d4e8 27347
8b095871
IC
27348 if (this.negative !== 0) {
27349 this.negative = 0;
27350 this.iaddn(num);
27351 this.negative = 1;
27352 return this;
27353 }
ebd8d4e8 27354
8b095871 27355 this.words[0] -= num;
ab78acc6 27356
8b095871
IC
27357 if (this.length === 1 && this.words[0] < 0) {
27358 this.words[0] = -this.words[0];
27359 this.negative = 1;
27360 } else {
27361 // Carry
27362 for (var i = 0; i < this.length && this.words[i] < 0; i++) {
27363 this.words[i] += 0x4000000;
27364 this.words[i + 1] -= 1;
27365 }
27366 }
ebd8d4e8 27367
8b095871
IC
27368 return this.strip();
27369 };
ab78acc6 27370
8b095871
IC
27371 BN.prototype.addn = function addn (num) {
27372 return this.clone().iaddn(num);
27373 };
ab78acc6 27374
8b095871
IC
27375 BN.prototype.subn = function subn (num) {
27376 return this.clone().isubn(num);
27377 };
ab78acc6 27378
8b095871
IC
27379 BN.prototype.iabs = function iabs () {
27380 this.negative = 0;
ab78acc6 27381
8b095871
IC
27382 return this;
27383 };
ab78acc6 27384
8b095871
IC
27385 BN.prototype.abs = function abs () {
27386 return this.clone().iabs();
27387 };
ab78acc6 27388
8b095871
IC
27389 BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {
27390 var len = num.length + shift;
27391 var i;
ab78acc6 27392
8b095871 27393 this._expand(len);
ab78acc6 27394
8b095871
IC
27395 var w;
27396 var carry = 0;
27397 for (i = 0; i < num.length; i++) {
27398 w = (this.words[i + shift] | 0) + carry;
27399 var right = (num.words[i] | 0) * mul;
27400 w -= right & 0x3ffffff;
27401 carry = (w >> 26) - ((right / 0x4000000) | 0);
27402 this.words[i + shift] = w & 0x3ffffff;
27403 }
27404 for (; i < this.length - shift; i++) {
27405 w = (this.words[i + shift] | 0) + carry;
27406 carry = w >> 26;
27407 this.words[i + shift] = w & 0x3ffffff;
27408 }
ebd8d4e8 27409
8b095871 27410 if (carry === 0) return this.strip();
ab78acc6 27411
8b095871
IC
27412 // Subtraction overflow
27413 assert(carry === -1);
27414 carry = 0;
27415 for (i = 0; i < this.length; i++) {
27416 w = -(this.words[i] | 0) + carry;
27417 carry = w >> 26;
27418 this.words[i] = w & 0x3ffffff;
27419 }
27420 this.negative = 1;
ab78acc6 27421
8b095871
IC
27422 return this.strip();
27423 };
ab78acc6 27424
8b095871
IC
27425 BN.prototype._wordDiv = function _wordDiv (num, mode) {
27426 var shift = this.length - num.length;
ebd8d4e8 27427
8b095871
IC
27428 var a = this.clone();
27429 var b = num;
ab78acc6 27430
8b095871
IC
27431 // Normalize
27432 var bhi = b.words[b.length - 1] | 0;
27433 var bhiBits = this._countBits(bhi);
27434 shift = 26 - bhiBits;
27435 if (shift !== 0) {
27436 b = b.ushln(shift);
27437 a.iushln(shift);
27438 bhi = b.words[b.length - 1] | 0;
27439 }
ebd8d4e8 27440
8b095871
IC
27441 // Initialize quotient
27442 var m = a.length - b.length;
27443 var q;
ab78acc6 27444
8b095871
IC
27445 if (mode !== 'mod') {
27446 q = new BN(null);
27447 q.length = m + 1;
27448 q.words = new Array(q.length);
27449 for (var i = 0; i < q.length; i++) {
27450 q.words[i] = 0;
27451 }
27452 }
ebd8d4e8 27453
8b095871
IC
27454 var diff = a.clone()._ishlnsubmul(b, 1, m);
27455 if (diff.negative === 0) {
27456 a = diff;
27457 if (q) {
27458 q.words[m] = 1;
27459 }
27460 }
ebd8d4e8 27461
8b095871
IC
27462 for (var j = m - 1; j >= 0; j--) {
27463 var qj = (a.words[b.length + j] | 0) * 0x4000000 +
27464 (a.words[b.length + j - 1] | 0);
ebd8d4e8 27465
8b095871
IC
27466 // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max
27467 // (0x7ffffff)
27468 qj = Math.min((qj / bhi) | 0, 0x3ffffff);
ebd8d4e8 27469
8b095871
IC
27470 a._ishlnsubmul(b, qj, j);
27471 while (a.negative !== 0) {
27472 qj--;
27473 a.negative = 0;
27474 a._ishlnsubmul(b, 1, j);
27475 if (!a.isZero()) {
27476 a.negative ^= 1;
27477 }
27478 }
27479 if (q) {
27480 q.words[j] = qj;
27481 }
27482 }
27483 if (q) {
27484 q.strip();
27485 }
27486 a.strip();
ebd8d4e8 27487
8b095871
IC
27488 // Denormalize
27489 if (mode !== 'div' && shift !== 0) {
27490 a.iushrn(shift);
27491 }
ebd8d4e8 27492
8b095871
IC
27493 return {
27494 div: q || null,
27495 mod: a
27496 };
27497 };
ebd8d4e8 27498
8b095871
IC
27499 // NOTE: 1) `mode` can be set to `mod` to request mod only,
27500 // to `div` to request div only, or be absent to
27501 // request both div & mod
27502 // 2) `positive` is true if unsigned mod is requested
27503 BN.prototype.divmod = function divmod (num, mode, positive) {
27504 assert(!num.isZero());
27505
27506 if (this.isZero()) {
27507 return {
27508 div: new BN(0),
27509 mod: new BN(0)
27510 };
27511 }
ebd8d4e8 27512
8b095871
IC
27513 var div, mod, res;
27514 if (this.negative !== 0 && num.negative === 0) {
27515 res = this.neg().divmod(num, mode);
ebd8d4e8 27516
8b095871
IC
27517 if (mode !== 'mod') {
27518 div = res.div.neg();
27519 }
ebd8d4e8 27520
8b095871
IC
27521 if (mode !== 'div') {
27522 mod = res.mod.neg();
27523 if (positive && mod.negative !== 0) {
27524 mod.iadd(num);
27525 }
27526 }
ebd8d4e8 27527
8b095871
IC
27528 return {
27529 div: div,
27530 mod: mod
27531 };
27532 }
ebd8d4e8 27533
8b095871
IC
27534 if (this.negative === 0 && num.negative !== 0) {
27535 res = this.divmod(num.neg(), mode);
ebd8d4e8 27536
8b095871
IC
27537 if (mode !== 'mod') {
27538 div = res.div.neg();
27539 }
ebd8d4e8 27540
8b095871
IC
27541 return {
27542 div: div,
27543 mod: res.mod
27544 };
27545 }
ebd8d4e8 27546
8b095871
IC
27547 if ((this.negative & num.negative) !== 0) {
27548 res = this.neg().divmod(num.neg(), mode);
ebd8d4e8 27549
8b095871
IC
27550 if (mode !== 'div') {
27551 mod = res.mod.neg();
27552 if (positive && mod.negative !== 0) {
27553 mod.isub(num);
27554 }
27555 }
ebd8d4e8 27556
8b095871
IC
27557 return {
27558 div: res.div,
27559 mod: mod
27560 };
27561 }
ebd8d4e8 27562
8b095871 27563 // Both numbers are positive at this point
ebd8d4e8 27564
8b095871
IC
27565 // Strip both numbers to approximate shift value
27566 if (num.length > this.length || this.cmp(num) < 0) {
27567 return {
27568 div: new BN(0),
27569 mod: this
27570 };
27571 }
ebd8d4e8 27572
8b095871
IC
27573 // Very short reduction
27574 if (num.length === 1) {
27575 if (mode === 'div') {
27576 return {
27577 div: this.divn(num.words[0]),
27578 mod: null
27579 };
27580 }
ebd8d4e8 27581
8b095871
IC
27582 if (mode === 'mod') {
27583 return {
27584 div: null,
27585 mod: new BN(this.modn(num.words[0]))
27586 };
27587 }
ebd8d4e8 27588
8b095871
IC
27589 return {
27590 div: this.divn(num.words[0]),
27591 mod: new BN(this.modn(num.words[0]))
27592 };
27593 }
ebd8d4e8 27594
8b095871
IC
27595 return this._wordDiv(num, mode);
27596 };
ab78acc6 27597
8b095871
IC
27598 // Find `this` / `num`
27599 BN.prototype.div = function div (num) {
27600 return this.divmod(num, 'div', false).div;
27601 };
ab78acc6 27602
8b095871
IC
27603 // Find `this` % `num`
27604 BN.prototype.mod = function mod (num) {
27605 return this.divmod(num, 'mod', false).mod;
27606 };
ab78acc6 27607
8b095871
IC
27608 BN.prototype.umod = function umod (num) {
27609 return this.divmod(num, 'mod', true).mod;
27610 };
ebd8d4e8 27611
8b095871
IC
27612 // Find Round(`this` / `num`)
27613 BN.prototype.divRound = function divRound (num) {
27614 var dm = this.divmod(num);
ebd8d4e8 27615
8b095871
IC
27616 // Fast case - exact division
27617 if (dm.mod.isZero()) return dm.div;
ebd8d4e8 27618
8b095871 27619 var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;
ebd8d4e8 27620
8b095871
IC
27621 var half = num.ushrn(1);
27622 var r2 = num.andln(1);
27623 var cmp = mod.cmp(half);
ebd8d4e8 27624
8b095871
IC
27625 // Round down
27626 if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;
ebd8d4e8 27627
8b095871
IC
27628 // Round up
27629 return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);
27630 };
ab78acc6 27631
8b095871
IC
27632 BN.prototype.modn = function modn (num) {
27633 assert(num <= 0x3ffffff);
27634 var p = (1 << 26) % num;
ab78acc6 27635
8b095871
IC
27636 var acc = 0;
27637 for (var i = this.length - 1; i >= 0; i--) {
27638 acc = (p * acc + (this.words[i] | 0)) % num;
ab78acc6 27639 }
ab78acc6 27640
8b095871
IC
27641 return acc;
27642 };
27643
27644 // In-place division by number
27645 BN.prototype.idivn = function idivn (num) {
27646 assert(num <= 0x3ffffff);
27647
27648 var carry = 0;
27649 for (var i = this.length - 1; i >= 0; i--) {
27650 var w = (this.words[i] | 0) + carry * 0x4000000;
27651 this.words[i] = (w / num) | 0;
27652 carry = w % num;
ebd8d4e8 27653 }
ebd8d4e8 27654
8b095871
IC
27655 return this.strip();
27656 };
ab78acc6 27657
8b095871
IC
27658 BN.prototype.divn = function divn (num) {
27659 return this.clone().idivn(num);
27660 };
ebd8d4e8 27661
8b095871
IC
27662 BN.prototype.egcd = function egcd (p) {
27663 assert(p.negative === 0);
27664 assert(!p.isZero());
ebd8d4e8 27665
8b095871
IC
27666 var x = this;
27667 var y = p.clone();
27668
27669 if (x.negative !== 0) {
27670 x = x.umod(p);
27671 } else {
27672 x = x.clone();
27673 }
27674
27675 // A * x + B * y = x
27676 var A = new BN(1);
27677 var B = new BN(0);
27678
27679 // C * x + D * y = y
27680 var C = new BN(0);
27681 var D = new BN(1);
27682
27683 var g = 0;
27684
27685 while (x.isEven() && y.isEven()) {
27686 x.iushrn(1);
27687 y.iushrn(1);
27688 ++g;
27689 }
ebd8d4e8 27690
8b095871
IC
27691 var yp = y.clone();
27692 var xp = x.clone();
ebd8d4e8 27693
8b095871
IC
27694 while (!x.isZero()) {
27695 for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);
27696 if (i > 0) {
27697 x.iushrn(i);
27698 while (i-- > 0) {
27699 if (A.isOdd() || B.isOdd()) {
27700 A.iadd(yp);
27701 B.isub(xp);
27702 }
ebd8d4e8 27703
8b095871
IC
27704 A.iushrn(1);
27705 B.iushrn(1);
27706 }
27707 }
ebd8d4e8 27708
8b095871
IC
27709 for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);
27710 if (j > 0) {
27711 y.iushrn(j);
27712 while (j-- > 0) {
27713 if (C.isOdd() || D.isOdd()) {
27714 C.iadd(yp);
27715 D.isub(xp);
27716 }
ab78acc6 27717
8b095871
IC
27718 C.iushrn(1);
27719 D.iushrn(1);
27720 }
27721 }
ebd8d4e8 27722
8b095871
IC
27723 if (x.cmp(y) >= 0) {
27724 x.isub(y);
27725 A.isub(C);
27726 B.isub(D);
27727 } else {
27728 y.isub(x);
27729 C.isub(A);
27730 D.isub(B);
27731 }
27732 }
ebd8d4e8 27733
8b095871
IC
27734 return {
27735 a: C,
27736 b: D,
27737 gcd: y.iushln(g)
27738 };
27739 };
ebd8d4e8 27740
8b095871
IC
27741 // This is reduced incarnation of the binary EEA
27742 // above, designated to invert members of the
27743 // _prime_ fields F(p) at a maximal speed
27744 BN.prototype._invmp = function _invmp (p) {
27745 assert(p.negative === 0);
27746 assert(!p.isZero());
ebd8d4e8 27747
8b095871
IC
27748 var a = this;
27749 var b = p.clone();
ebd8d4e8 27750
8b095871
IC
27751 if (a.negative !== 0) {
27752 a = a.umod(p);
27753 } else {
27754 a = a.clone();
27755 }
ebd8d4e8 27756
8b095871
IC
27757 var x1 = new BN(1);
27758 var x2 = new BN(0);
ebd8d4e8 27759
8b095871 27760 var delta = b.clone();
ebd8d4e8 27761
8b095871
IC
27762 while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {
27763 for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);
27764 if (i > 0) {
27765 a.iushrn(i);
27766 while (i-- > 0) {
27767 if (x1.isOdd()) {
27768 x1.iadd(delta);
27769 }
ebd8d4e8 27770
8b095871
IC
27771 x1.iushrn(1);
27772 }
27773 }
ab78acc6 27774
8b095871
IC
27775 for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);
27776 if (j > 0) {
27777 b.iushrn(j);
27778 while (j-- > 0) {
27779 if (x2.isOdd()) {
27780 x2.iadd(delta);
27781 }
ebd8d4e8 27782
8b095871
IC
27783 x2.iushrn(1);
27784 }
27785 }
ebd8d4e8 27786
8b095871
IC
27787 if (a.cmp(b) >= 0) {
27788 a.isub(b);
27789 x1.isub(x2);
27790 } else {
27791 b.isub(a);
27792 x2.isub(x1);
27793 }
27794 }
ebd8d4e8 27795
8b095871
IC
27796 var res;
27797 if (a.cmpn(1) === 0) {
27798 res = x1;
27799 } else {
27800 res = x2;
27801 }
ebd8d4e8 27802
8b095871
IC
27803 if (res.cmpn(0) < 0) {
27804 res.iadd(p);
ab78acc6
IC
27805 }
27806
8b095871
IC
27807 return res;
27808 };
ebd8d4e8 27809
8b095871
IC
27810 BN.prototype.gcd = function gcd (num) {
27811 if (this.isZero()) return num.abs();
27812 if (num.isZero()) return this.abs();
27813
27814 var a = this.clone();
27815 var b = num.clone();
27816 a.negative = 0;
27817 b.negative = 0;
27818
27819 // Remove common factor of two
27820 for (var shift = 0; a.isEven() && b.isEven(); shift++) {
27821 a.iushrn(1);
27822 b.iushrn(1);
ab78acc6 27823 }
ab78acc6 27824
8b095871
IC
27825 do {
27826 while (a.isEven()) {
27827 a.iushrn(1);
27828 }
27829 while (b.isEven()) {
27830 b.iushrn(1);
27831 }
ebd8d4e8 27832
8b095871
IC
27833 var r = a.cmp(b);
27834 if (r < 0) {
27835 // Swap `a` and `b` to make `a` always bigger than `b`
27836 var t = a;
27837 a = b;
27838 b = t;
27839 } else if (r === 0 || b.cmpn(1) === 0) {
27840 break;
27841 }
ab78acc6 27842
8b095871
IC
27843 a.isub(b);
27844 } while (true);
ab78acc6 27845
8b095871
IC
27846 return b.iushln(shift);
27847 };
ab78acc6 27848
8b095871
IC
27849 // Invert number in the field F(num)
27850 BN.prototype.invm = function invm (num) {
27851 return this.egcd(num).a.umod(num);
27852 };
ebd8d4e8 27853
8b095871
IC
27854 BN.prototype.isEven = function isEven () {
27855 return (this.words[0] & 1) === 0;
27856 };
ab78acc6 27857
8b095871
IC
27858 BN.prototype.isOdd = function isOdd () {
27859 return (this.words[0] & 1) === 1;
27860 };
ebd8d4e8 27861
8b095871
IC
27862 // And first word and num
27863 BN.prototype.andln = function andln (num) {
27864 return this.words[0] & num;
27865 };
ebd8d4e8 27866
8b095871
IC
27867 // Increment at the bit position in-line
27868 BN.prototype.bincn = function bincn (bit) {
27869 assert(typeof bit === 'number');
27870 var r = bit % 26;
27871 var s = (bit - r) / 26;
27872 var q = 1 << r;
27873
27874 // Fast case: bit is much higher than all existing words
27875 if (this.length <= s) {
27876 this._expand(s + 1);
27877 this.words[s] |= q;
27878 return this;
27879 }
ebd8d4e8 27880
8b095871
IC
27881 // Add bit and propagate, if needed
27882 var carry = q;
27883 for (var i = s; carry !== 0 && i < this.length; i++) {
27884 var w = this.words[i] | 0;
27885 w += carry;
27886 carry = w >>> 26;
27887 w &= 0x3ffffff;
27888 this.words[i] = w;
27889 }
27890 if (carry !== 0) {
27891 this.words[i] = carry;
27892 this.length++;
27893 }
27894 return this;
27895 };
ebd8d4e8 27896
8b095871
IC
27897 BN.prototype.isZero = function isZero () {
27898 return this.length === 1 && this.words[0] === 0;
27899 };
ebd8d4e8 27900
8b095871
IC
27901 BN.prototype.cmpn = function cmpn (num) {
27902 var negative = num < 0;
ebd8d4e8 27903
8b095871
IC
27904 if (this.negative !== 0 && !negative) return -1;
27905 if (this.negative === 0 && negative) return 1;
ab78acc6 27906
8b095871 27907 this.strip();
ab78acc6 27908
8b095871
IC
27909 var res;
27910 if (this.length > 1) {
27911 res = 1;
27912 } else {
27913 if (negative) {
27914 num = -num;
27915 }
ebd8d4e8 27916
8b095871 27917 assert(num <= 0x3ffffff, 'Number is too big');
ebd8d4e8 27918
8b095871
IC
27919 var w = this.words[0] | 0;
27920 res = w === num ? 0 : w < num ? -1 : 1;
27921 }
27922 if (this.negative !== 0) return -res | 0;
27923 return res;
27924 };
ebd8d4e8 27925
8b095871
IC
27926 // Compare two numbers and return:
27927 // 1 - if `this` > `num`
27928 // 0 - if `this` == `num`
27929 // -1 - if `this` < `num`
27930 BN.prototype.cmp = function cmp (num) {
27931 if (this.negative !== 0 && num.negative === 0) return -1;
27932 if (this.negative === 0 && num.negative !== 0) return 1;
27933
27934 var res = this.ucmp(num);
27935 if (this.negative !== 0) return -res | 0;
27936 return res;
27937 };
ebd8d4e8 27938
8b095871
IC
27939 // Unsigned comparison
27940 BN.prototype.ucmp = function ucmp (num) {
27941 // At this point both numbers have the same sign
27942 if (this.length > num.length) return 1;
27943 if (this.length < num.length) return -1;
27944
27945 var res = 0;
27946 for (var i = this.length - 1; i >= 0; i--) {
27947 var a = this.words[i] | 0;
27948 var b = num.words[i] | 0;
27949
27950 if (a === b) continue;
27951 if (a < b) {
27952 res = -1;
27953 } else if (a > b) {
27954 res = 1;
27955 }
27956 break;
27957 }
27958 return res;
27959 };
ebd8d4e8 27960
8b095871
IC
27961 BN.prototype.gtn = function gtn (num) {
27962 return this.cmpn(num) === 1;
27963 };
ebd8d4e8 27964
8b095871
IC
27965 BN.prototype.gt = function gt (num) {
27966 return this.cmp(num) === 1;
27967 };
ebd8d4e8 27968
8b095871
IC
27969 BN.prototype.gten = function gten (num) {
27970 return this.cmpn(num) >= 0;
27971 };
ab78acc6 27972
8b095871
IC
27973 BN.prototype.gte = function gte (num) {
27974 return this.cmp(num) >= 0;
27975 };
ab78acc6 27976
8b095871
IC
27977 BN.prototype.ltn = function ltn (num) {
27978 return this.cmpn(num) === -1;
27979 };
ab78acc6 27980
8b095871
IC
27981 BN.prototype.lt = function lt (num) {
27982 return this.cmp(num) === -1;
27983 };
ebd8d4e8 27984
8b095871
IC
27985 BN.prototype.lten = function lten (num) {
27986 return this.cmpn(num) <= 0;
27987 };
ab78acc6 27988
8b095871
IC
27989 BN.prototype.lte = function lte (num) {
27990 return this.cmp(num) <= 0;
27991 };
ab78acc6 27992
8b095871
IC
27993 BN.prototype.eqn = function eqn (num) {
27994 return this.cmpn(num) === 0;
27995 };
ab78acc6 27996
8b095871
IC
27997 BN.prototype.eq = function eq (num) {
27998 return this.cmp(num) === 0;
27999 };
ebd8d4e8 28000
8b095871
IC
28001 //
28002 // A reduce context, could be using montgomery or something better, depending
28003 // on the `m` itself.
28004 //
28005 BN.red = function red (num) {
28006 return new Red(num);
28007 };
ab78acc6 28008
8b095871
IC
28009 BN.prototype.toRed = function toRed (ctx) {
28010 assert(!this.red, 'Already a number in reduction context');
28011 assert(this.negative === 0, 'red works only with positives');
28012 return ctx.convertTo(this)._forceRed(ctx);
28013 };
28014
28015 BN.prototype.fromRed = function fromRed () {
28016 assert(this.red, 'fromRed works only with numbers in reduction context');
28017 return this.red.convertFrom(this);
28018 };
28019
28020 BN.prototype._forceRed = function _forceRed (ctx) {
28021 this.red = ctx;
28022 return this;
28023 };
28024
28025 BN.prototype.forceRed = function forceRed (ctx) {
28026 assert(!this.red, 'Already a number in reduction context');
28027 return this._forceRed(ctx);
28028 };
28029
28030 BN.prototype.redAdd = function redAdd (num) {
28031 assert(this.red, 'redAdd works only with red numbers');
28032 return this.red.add(this, num);
28033 };
ebd8d4e8 28034
8b095871
IC
28035 BN.prototype.redIAdd = function redIAdd (num) {
28036 assert(this.red, 'redIAdd works only with red numbers');
28037 return this.red.iadd(this, num);
28038 };
ab78acc6 28039
8b095871
IC
28040 BN.prototype.redSub = function redSub (num) {
28041 assert(this.red, 'redSub works only with red numbers');
28042 return this.red.sub(this, num);
28043 };
ab78acc6 28044
8b095871
IC
28045 BN.prototype.redISub = function redISub (num) {
28046 assert(this.red, 'redISub works only with red numbers');
28047 return this.red.isub(this, num);
28048 };
ebd8d4e8 28049
8b095871
IC
28050 BN.prototype.redShl = function redShl (num) {
28051 assert(this.red, 'redShl works only with red numbers');
28052 return this.red.shl(this, num);
28053 };
ebd8d4e8 28054
8b095871
IC
28055 BN.prototype.redMul = function redMul (num) {
28056 assert(this.red, 'redMul works only with red numbers');
28057 this.red._verify2(this, num);
28058 return this.red.mul(this, num);
28059 };
ebd8d4e8 28060
8b095871
IC
28061 BN.prototype.redIMul = function redIMul (num) {
28062 assert(this.red, 'redMul works only with red numbers');
28063 this.red._verify2(this, num);
28064 return this.red.imul(this, num);
28065 };
ebd8d4e8 28066
8b095871
IC
28067 BN.prototype.redSqr = function redSqr () {
28068 assert(this.red, 'redSqr works only with red numbers');
28069 this.red._verify1(this);
28070 return this.red.sqr(this);
28071 };
ebd8d4e8 28072
8b095871
IC
28073 BN.prototype.redISqr = function redISqr () {
28074 assert(this.red, 'redISqr works only with red numbers');
28075 this.red._verify1(this);
28076 return this.red.isqr(this);
28077 };
ebd8d4e8 28078
8b095871
IC
28079 // Square root over p
28080 BN.prototype.redSqrt = function redSqrt () {
28081 assert(this.red, 'redSqrt works only with red numbers');
28082 this.red._verify1(this);
28083 return this.red.sqrt(this);
28084 };
ebd8d4e8 28085
8b095871
IC
28086 BN.prototype.redInvm = function redInvm () {
28087 assert(this.red, 'redInvm works only with red numbers');
28088 this.red._verify1(this);
28089 return this.red.invm(this);
28090 };
ebd8d4e8 28091
8b095871
IC
28092 // Return negative clone of `this` % `red modulo`
28093 BN.prototype.redNeg = function redNeg () {
28094 assert(this.red, 'redNeg works only with red numbers');
28095 this.red._verify1(this);
28096 return this.red.neg(this);
28097 };
ebd8d4e8 28098
8b095871
IC
28099 BN.prototype.redPow = function redPow (num) {
28100 assert(this.red && !num.red, 'redPow(normalNum)');
28101 this.red._verify1(this);
28102 return this.red.pow(this, num);
28103 };
ebd8d4e8 28104
8b095871
IC
28105 // Prime numbers with efficient reduction
28106 var primes = {
28107 k256: null,
28108 p224: null,
28109 p192: null,
28110 p25519: null
28111 };
ebd8d4e8 28112
8b095871
IC
28113 // Pseudo-Mersenne prime
28114 function MPrime (name, p) {
28115 // P = 2 ^ N - K
28116 this.name = name;
28117 this.p = new BN(p, 16);
28118 this.n = this.p.bitLength();
28119 this.k = new BN(1).iushln(this.n).isub(this.p);
ebd8d4e8 28120
8b095871
IC
28121 this.tmp = this._tmp();
28122 }
ebd8d4e8 28123
8b095871
IC
28124 MPrime.prototype._tmp = function _tmp () {
28125 var tmp = new BN(null);
28126 tmp.words = new Array(Math.ceil(this.n / 13));
28127 return tmp;
28128 };
ebd8d4e8 28129
8b095871
IC
28130 MPrime.prototype.ireduce = function ireduce (num) {
28131 // Assumes that `num` is less than `P^2`
28132 // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)
28133 var r = num;
28134 var rlen;
ebd8d4e8 28135
8b095871
IC
28136 do {
28137 this.split(r, this.tmp);
28138 r = this.imulK(r);
28139 r = r.iadd(this.tmp);
28140 rlen = r.bitLength();
28141 } while (rlen > this.n);
28142
28143 var cmp = rlen < this.n ? -1 : r.ucmp(this.p);
28144 if (cmp === 0) {
28145 r.words[0] = 0;
28146 r.length = 1;
28147 } else if (cmp > 0) {
28148 r.isub(this.p);
28149 } else {
28150 r.strip();
28151 }
ebd8d4e8 28152
8b095871
IC
28153 return r;
28154 };
ebd8d4e8 28155
8b095871
IC
28156 MPrime.prototype.split = function split (input, out) {
28157 input.iushrn(this.n, 0, out);
28158 };
ebd8d4e8 28159
8b095871
IC
28160 MPrime.prototype.imulK = function imulK (num) {
28161 return num.imul(this.k);
28162 };
ebd8d4e8 28163
8b095871
IC
28164 function K256 () {
28165 MPrime.call(
28166 this,
28167 'k256',
28168 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');
28169 }
28170 inherits(K256, MPrime);
ebd8d4e8 28171
8b095871
IC
28172 K256.prototype.split = function split (input, output) {
28173 // 256 = 9 * 26 + 22
28174 var mask = 0x3fffff;
ebd8d4e8 28175
8b095871
IC
28176 var outLen = Math.min(input.length, 9);
28177 for (var i = 0; i < outLen; i++) {
28178 output.words[i] = input.words[i];
28179 }
28180 output.length = outLen;
ebd8d4e8 28181
8b095871
IC
28182 if (input.length <= 9) {
28183 input.words[0] = 0;
28184 input.length = 1;
28185 return;
28186 }
ebd8d4e8 28187
8b095871
IC
28188 // Shift by 9 limbs
28189 var prev = input.words[9];
28190 output.words[output.length++] = prev & mask;
ebd8d4e8 28191
8b095871
IC
28192 for (i = 10; i < input.length; i++) {
28193 var next = input.words[i] | 0;
28194 input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);
28195 prev = next;
28196 }
28197 prev >>>= 22;
28198 input.words[i - 10] = prev;
28199 if (prev === 0 && input.length > 10) {
28200 input.length -= 10;
28201 } else {
28202 input.length -= 9;
28203 }
28204 };
ebd8d4e8 28205
8b095871
IC
28206 K256.prototype.imulK = function imulK (num) {
28207 // K = 0x1000003d1 = [ 0x40, 0x3d1 ]
28208 num.words[num.length] = 0;
28209 num.words[num.length + 1] = 0;
28210 num.length += 2;
28211
28212 // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390
28213 var lo = 0;
28214 for (var i = 0; i < num.length; i++) {
28215 var w = num.words[i] | 0;
28216 lo += w * 0x3d1;
28217 num.words[i] = lo & 0x3ffffff;
28218 lo = w * 0x40 + ((lo / 0x4000000) | 0);
28219 }
28220
28221 // Fast length reduction
28222 if (num.words[num.length - 1] === 0) {
28223 num.length--;
28224 if (num.words[num.length - 1] === 0) {
28225 num.length--;
28226 }
28227 }
28228 return num;
28229 };
ebd8d4e8 28230
8b095871
IC
28231 function P224 () {
28232 MPrime.call(
28233 this,
28234 'p224',
28235 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');
28236 }
28237 inherits(P224, MPrime);
ebd8d4e8 28238
8b095871
IC
28239 function P192 () {
28240 MPrime.call(
28241 this,
28242 'p192',
28243 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');
28244 }
28245 inherits(P192, MPrime);
ebd8d4e8 28246
8b095871
IC
28247 function P25519 () {
28248 // 2 ^ 255 - 19
28249 MPrime.call(
28250 this,
28251 '25519',
28252 '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');
28253 }
28254 inherits(P25519, MPrime);
ebd8d4e8 28255
8b095871
IC
28256 P25519.prototype.imulK = function imulK (num) {
28257 // K = 0x13
28258 var carry = 0;
28259 for (var i = 0; i < num.length; i++) {
28260 var hi = (num.words[i] | 0) * 0x13 + carry;
28261 var lo = hi & 0x3ffffff;
28262 hi >>>= 26;
ebd8d4e8 28263
8b095871
IC
28264 num.words[i] = lo;
28265 carry = hi;
28266 }
28267 if (carry !== 0) {
28268 num.words[num.length++] = carry;
28269 }
28270 return num;
28271 };
ebd8d4e8 28272
8b095871
IC
28273 // Exported mostly for testing purposes, use plain name instead
28274 BN._prime = function prime (name) {
28275 // Cached version of prime
28276 if (primes[name]) return primes[name];
28277
28278 var prime;
28279 if (name === 'k256') {
28280 prime = new K256();
28281 } else if (name === 'p224') {
28282 prime = new P224();
28283 } else if (name === 'p192') {
28284 prime = new P192();
28285 } else if (name === 'p25519') {
28286 prime = new P25519();
28287 } else {
28288 throw new Error('Unknown prime ' + name);
28289 }
28290 primes[name] = prime;
ab78acc6 28291
8b095871
IC
28292 return prime;
28293 };
ab78acc6 28294
8b095871
IC
28295 //
28296 // Base reduction engine
28297 //
28298 function Red (m) {
28299 if (typeof m === 'string') {
28300 var prime = BN._prime(m);
28301 this.m = prime.p;
28302 this.prime = prime;
28303 } else {
28304 assert(m.gtn(1), 'modulus must be greater than 1');
28305 this.m = m;
28306 this.prime = null;
28307 }
28308 }
ab78acc6 28309
8b095871
IC
28310 Red.prototype._verify1 = function _verify1 (a) {
28311 assert(a.negative === 0, 'red works only with positives');
28312 assert(a.red, 'red works only with red numbers');
28313 };
ab78acc6 28314
8b095871
IC
28315 Red.prototype._verify2 = function _verify2 (a, b) {
28316 assert((a.negative | b.negative) === 0, 'red works only with positives');
28317 assert(a.red && a.red === b.red,
28318 'red works only with red numbers');
28319 };
ebd8d4e8 28320
8b095871
IC
28321 Red.prototype.imod = function imod (a) {
28322 if (this.prime) return this.prime.ireduce(a)._forceRed(this);
28323 return a.umod(this.m)._forceRed(this);
28324 };
ebd8d4e8 28325
8b095871
IC
28326 Red.prototype.neg = function neg (a) {
28327 if (a.isZero()) {
28328 return a.clone();
28329 }
ebd8d4e8 28330
8b095871
IC
28331 return this.m.sub(a)._forceRed(this);
28332 };
ab78acc6 28333
8b095871
IC
28334 Red.prototype.add = function add (a, b) {
28335 this._verify2(a, b);
ab78acc6 28336
8b095871
IC
28337 var res = a.add(b);
28338 if (res.cmp(this.m) >= 0) {
28339 res.isub(this.m);
28340 }
28341 return res._forceRed(this);
28342 };
ab78acc6 28343
8b095871
IC
28344 Red.prototype.iadd = function iadd (a, b) {
28345 this._verify2(a, b);
ab78acc6 28346
8b095871
IC
28347 var res = a.iadd(b);
28348 if (res.cmp(this.m) >= 0) {
28349 res.isub(this.m);
28350 }
28351 return res;
28352 };
ab78acc6 28353
8b095871
IC
28354 Red.prototype.sub = function sub (a, b) {
28355 this._verify2(a, b);
ab78acc6 28356
8b095871
IC
28357 var res = a.sub(b);
28358 if (res.cmpn(0) < 0) {
28359 res.iadd(this.m);
28360 }
28361 return res._forceRed(this);
28362 };
ab78acc6 28363
8b095871
IC
28364 Red.prototype.isub = function isub (a, b) {
28365 this._verify2(a, b);
ebd8d4e8 28366
8b095871
IC
28367 var res = a.isub(b);
28368 if (res.cmpn(0) < 0) {
28369 res.iadd(this.m);
28370 }
28371 return res;
28372 };
ebd8d4e8 28373
8b095871
IC
28374 Red.prototype.shl = function shl (a, num) {
28375 this._verify1(a);
28376 return this.imod(a.ushln(num));
28377 };
ebd8d4e8 28378
8b095871
IC
28379 Red.prototype.imul = function imul (a, b) {
28380 this._verify2(a, b);
28381 return this.imod(a.imul(b));
28382 };
ebd8d4e8 28383
8b095871
IC
28384 Red.prototype.mul = function mul (a, b) {
28385 this._verify2(a, b);
28386 return this.imod(a.mul(b));
28387 };
ebd8d4e8 28388
8b095871
IC
28389 Red.prototype.isqr = function isqr (a) {
28390 return this.imul(a, a.clone());
28391 };
28392
28393 Red.prototype.sqr = function sqr (a) {
28394 return this.mul(a, a);
28395 };
ebd8d4e8 28396
8b095871
IC
28397 Red.prototype.sqrt = function sqrt (a) {
28398 if (a.isZero()) return a.clone();
ebd8d4e8 28399
8b095871
IC
28400 var mod3 = this.m.andln(3);
28401 assert(mod3 % 2 === 1);
ebd8d4e8 28402
8b095871
IC
28403 // Fast case
28404 if (mod3 === 3) {
28405 var pow = this.m.add(new BN(1)).iushrn(2);
28406 return this.pow(a, pow);
28407 }
ebd8d4e8 28408
8b095871
IC
28409 // Tonelli-Shanks algorithm (Totally unoptimized and slow)
28410 //
28411 // Find Q and S, that Q * 2 ^ S = (P - 1)
28412 var q = this.m.subn(1);
28413 var s = 0;
28414 while (!q.isZero() && q.andln(1) === 0) {
28415 s++;
28416 q.iushrn(1);
28417 }
28418 assert(!q.isZero());
ebd8d4e8 28419
8b095871
IC
28420 var one = new BN(1).toRed(this);
28421 var nOne = one.redNeg();
ebd8d4e8 28422
8b095871
IC
28423 // Find quadratic non-residue
28424 // NOTE: Max is such because of generalized Riemann hypothesis.
28425 var lpow = this.m.subn(1).iushrn(1);
28426 var z = this.m.bitLength();
28427 z = new BN(2 * z * z).toRed(this);
ebd8d4e8 28428
8b095871
IC
28429 while (this.pow(z, lpow).cmp(nOne) !== 0) {
28430 z.redIAdd(nOne);
28431 }
ebd8d4e8 28432
8b095871
IC
28433 var c = this.pow(z, q);
28434 var r = this.pow(a, q.addn(1).iushrn(1));
28435 var t = this.pow(a, q);
28436 var m = s;
28437 while (t.cmp(one) !== 0) {
28438 var tmp = t;
28439 for (var i = 0; tmp.cmp(one) !== 0; i++) {
28440 tmp = tmp.redSqr();
28441 }
28442 assert(i < m);
28443 var b = this.pow(c, new BN(1).iushln(m - i - 1));
ebd8d4e8 28444
8b095871
IC
28445 r = r.redMul(b);
28446 c = b.redSqr();
28447 t = t.redMul(c);
28448 m = i;
28449 }
ebd8d4e8 28450
8b095871
IC
28451 return r;
28452 };
ebd8d4e8 28453
8b095871
IC
28454 Red.prototype.invm = function invm (a) {
28455 var inv = a._invmp(this.m);
28456 if (inv.negative !== 0) {
28457 inv.negative = 0;
28458 return this.imod(inv).redNeg();
28459 } else {
28460 return this.imod(inv);
28461 }
28462 };
ebd8d4e8 28463
8b095871
IC
28464 Red.prototype.pow = function pow (a, num) {
28465 if (num.isZero()) return new BN(1);
28466 if (num.cmpn(1) === 0) return a.clone();
ebd8d4e8 28467
8b095871
IC
28468 var windowSize = 4;
28469 var wnd = new Array(1 << windowSize);
28470 wnd[0] = new BN(1).toRed(this);
28471 wnd[1] = a;
28472 for (var i = 2; i < wnd.length; i++) {
28473 wnd[i] = this.mul(wnd[i - 1], a);
28474 }
ebd8d4e8 28475
8b095871
IC
28476 var res = wnd[0];
28477 var current = 0;
28478 var currentLen = 0;
28479 var start = num.bitLength() % 26;
28480 if (start === 0) {
28481 start = 26;
28482 }
ebd8d4e8 28483
8b095871
IC
28484 for (i = num.length - 1; i >= 0; i--) {
28485 var word = num.words[i];
28486 for (var j = start - 1; j >= 0; j--) {
28487 var bit = (word >> j) & 1;
28488 if (res !== wnd[0]) {
28489 res = this.sqr(res);
28490 }
ebd8d4e8 28491
8b095871
IC
28492 if (bit === 0 && current === 0) {
28493 currentLen = 0;
28494 continue;
28495 }
ebd8d4e8 28496
8b095871
IC
28497 current <<= 1;
28498 current |= bit;
28499 currentLen++;
28500 if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;
ebd8d4e8 28501
8b095871
IC
28502 res = this.mul(res, wnd[current]);
28503 currentLen = 0;
28504 current = 0;
28505 }
28506 start = 26;
28507 }
ebd8d4e8 28508
8b095871
IC
28509 return res;
28510 };
ebd8d4e8 28511
8b095871
IC
28512 Red.prototype.convertTo = function convertTo (num) {
28513 var r = num.umod(this.m);
ebd8d4e8 28514
8b095871
IC
28515 return r === num ? r.clone() : r;
28516 };
ebd8d4e8 28517
8b095871
IC
28518 Red.prototype.convertFrom = function convertFrom (num) {
28519 var res = num.clone();
28520 res.red = null;
28521 return res;
28522 };
ebd8d4e8 28523
8b095871
IC
28524 //
28525 // Montgomery method engine
28526 //
ebd8d4e8 28527
8b095871
IC
28528 BN.mont = function mont (num) {
28529 return new Mont(num);
28530 };
ebd8d4e8 28531
8b095871
IC
28532 function Mont (m) {
28533 Red.call(this, m);
ebd8d4e8 28534
8b095871
IC
28535 this.shift = this.m.bitLength();
28536 if (this.shift % 26 !== 0) {
28537 this.shift += 26 - (this.shift % 26);
28538 }
ebd8d4e8 28539
8b095871
IC
28540 this.r = new BN(1).iushln(this.shift);
28541 this.r2 = this.imod(this.r.sqr());
28542 this.rinv = this.r._invmp(this.m);
28543
28544 this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);
28545 this.minv = this.minv.umod(this.r);
28546 this.minv = this.r.sub(this.minv);
ebd8d4e8 28547 }
8b095871 28548 inherits(Mont, Red);
ebd8d4e8 28549
8b095871
IC
28550 Mont.prototype.convertTo = function convertTo (num) {
28551 return this.imod(num.ushln(this.shift));
28552 };
ab78acc6 28553
8b095871
IC
28554 Mont.prototype.convertFrom = function convertFrom (num) {
28555 var r = this.imod(num.mul(this.rinv));
28556 r.red = null;
28557 return r;
28558 };
ebd8d4e8 28559
8b095871
IC
28560 Mont.prototype.imul = function imul (a, b) {
28561 if (a.isZero() || b.isZero()) {
28562 a.words[0] = 0;
28563 a.length = 1;
28564 return a;
28565 }
ebd8d4e8 28566
8b095871
IC
28567 var t = a.imul(b);
28568 var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
28569 var u = t.isub(c).iushrn(this.shift);
28570 var res = u;
ab78acc6 28571
8b095871
IC
28572 if (u.cmp(this.m) >= 0) {
28573 res = u.isub(this.m);
28574 } else if (u.cmpn(0) < 0) {
28575 res = u.iadd(this.m);
28576 }
ab78acc6 28577
8b095871
IC
28578 return res._forceRed(this);
28579 };
ab78acc6 28580
8b095871
IC
28581 Mont.prototype.mul = function mul (a, b) {
28582 if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);
ab78acc6 28583
8b095871
IC
28584 var t = a.mul(b);
28585 var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
28586 var u = t.isub(c).iushrn(this.shift);
28587 var res = u;
28588 if (u.cmp(this.m) >= 0) {
28589 res = u.isub(this.m);
28590 } else if (u.cmpn(0) < 0) {
28591 res = u.iadd(this.m);
28592 }
ab78acc6 28593
8b095871
IC
28594 return res._forceRed(this);
28595 };
ab78acc6 28596
8b095871
IC
28597 Mont.prototype.invm = function invm (a) {
28598 // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R
28599 var res = this.imod(a._invmp(this.m).mul(this.r2));
28600 return res._forceRed(this);
28601 };
28602})(typeof module === 'undefined' || module, this);
ab78acc6 28603
8b095871
IC
28604},{}],34:[function(require,module,exports){
28605var r;
ebd8d4e8 28606
8b095871
IC
28607module.exports = function rand(len) {
28608 if (!r)
28609 r = new Rand(null);
ebd8d4e8 28610
8b095871
IC
28611 return r.generate(len);
28612};
ab78acc6 28613
8b095871
IC
28614function Rand(rand) {
28615 this.rand = rand;
ab78acc6 28616}
8b095871 28617module.exports.Rand = Rand;
ab78acc6 28618
8b095871
IC
28619Rand.prototype.generate = function generate(len) {
28620 return this._rand(len);
28621};
ab78acc6 28622
8b095871
IC
28623if (typeof self === 'object') {
28624 if (self.crypto && self.crypto.getRandomValues) {
28625 // Modern browsers
28626 Rand.prototype._rand = function _rand(n) {
28627 var arr = new Uint8Array(n);
28628 self.crypto.getRandomValues(arr);
28629 return arr;
28630 };
28631 } else if (self.msCrypto && self.msCrypto.getRandomValues) {
28632 // IE
28633 Rand.prototype._rand = function _rand(n) {
28634 var arr = new Uint8Array(n);
28635 self.msCrypto.getRandomValues(arr);
28636 return arr;
28637 };
28638 } else {
28639 // Old junk
28640 Rand.prototype._rand = function() {
28641 throw new Error('Not implemented yet');
28642 };
28643 }
28644} else {
28645 // Node.js or Web worker with no crypto support
28646 try {
28647 var crypto = require('crypto');
ab78acc6 28648
8b095871
IC
28649 Rand.prototype._rand = function _rand(n) {
28650 return crypto.randomBytes(n);
28651 };
28652 } catch (e) {
28653 // Emulate crypto API using randy
28654 Rand.prototype._rand = function _rand(n) {
28655 var res = new Uint8Array(n);
28656 for (var i = 0; i < res.length; i++)
28657 res[i] = this.rand.getByte();
28658 return res;
28659 };
28660 }
28661}
28662
28663},{"crypto":3}],35:[function(require,module,exports){
28664(function (Buffer){
28665var Transform = require('stream').Transform
28666var inherits = require('inherits')
28667var StringDecoder = require('string_decoder').StringDecoder
28668module.exports = CipherBase
28669inherits(CipherBase, Transform)
28670function CipherBase (hashMode) {
28671 Transform.call(this)
28672 this.hashMode = typeof hashMode === 'string'
28673 if (this.hashMode) {
28674 this[hashMode] = this._finalOrDigest
28675 } else {
28676 this.final = this._finalOrDigest
28677 }
28678 this._decoder = null
28679 this._encoding = null
28680}
28681CipherBase.prototype.update = function (data, inputEnc, outputEnc) {
28682 if (typeof data === 'string') {
28683 data = new Buffer(data, inputEnc)
28684 }
28685 var outData = this._update(data)
28686 if (this.hashMode) {
28687 return this
28688 }
28689 if (outputEnc) {
28690 outData = this._toString(outData, outputEnc)
28691 }
28692 return outData
28693}
ab78acc6 28694
8b095871 28695CipherBase.prototype.setAutoPadding = function () {}
ab78acc6 28696
8b095871
IC
28697CipherBase.prototype.getAuthTag = function () {
28698 throw new Error('trying to get auth tag in unsupported state')
28699}
ab78acc6 28700
8b095871
IC
28701CipherBase.prototype.setAuthTag = function () {
28702 throw new Error('trying to set auth tag in unsupported state')
28703}
ab78acc6 28704
8b095871
IC
28705CipherBase.prototype.setAAD = function () {
28706 throw new Error('trying to set aad in unsupported state')
28707}
ab78acc6 28708
8b095871
IC
28709CipherBase.prototype._transform = function (data, _, next) {
28710 var err
28711 try {
28712 if (this.hashMode) {
28713 this._update(data)
28714 } else {
28715 this.push(this._update(data))
28716 }
28717 } catch (e) {
28718 err = e
28719 } finally {
28720 next(err)
28721 }
28722}
28723CipherBase.prototype._flush = function (done) {
28724 var err
28725 try {
28726 this.push(this._final())
28727 } catch (e) {
28728 err = e
28729 } finally {
28730 done(err)
28731 }
28732}
28733CipherBase.prototype._finalOrDigest = function (outputEnc) {
28734 var outData = this._final() || new Buffer('')
28735 if (outputEnc) {
28736 outData = this._toString(outData, outputEnc, true)
28737 }
28738 return outData
28739}
ebd8d4e8 28740
8b095871
IC
28741CipherBase.prototype._toString = function (value, enc, fin) {
28742 if (!this._decoder) {
28743 this._decoder = new StringDecoder(enc)
28744 this._encoding = enc
28745 }
28746 if (this._encoding !== enc) {
28747 throw new Error('can\'t switch encodings')
28748 }
28749 var out = this._decoder.write(value)
28750 if (fin) {
28751 out += this._decoder.end()
ab78acc6 28752 }
8b095871
IC
28753 return out
28754}
ab78acc6 28755
8b095871
IC
28756}).call(this,require("buffer").Buffer)
28757},{"buffer":5,"inherits":63,"stream":25,"string_decoder":26}],36:[function(require,module,exports){
28758(function (Buffer){
28759'use strict';
28760var inherits = require('inherits')
28761var md5 = require('./md5')
28762var rmd160 = require('ripemd160')
28763var sha = require('sha.js')
ebd8d4e8 28764
8b095871 28765var Base = require('cipher-base')
ebd8d4e8 28766
8b095871
IC
28767function HashNoConstructor(hash) {
28768 Base.call(this, 'digest')
ebd8d4e8 28769
8b095871
IC
28770 this._hash = hash
28771 this.buffers = []
28772}
ebd8d4e8 28773
8b095871 28774inherits(HashNoConstructor, Base)
ebd8d4e8 28775
8b095871
IC
28776HashNoConstructor.prototype._update = function (data) {
28777 this.buffers.push(data)
28778}
ebd8d4e8 28779
8b095871
IC
28780HashNoConstructor.prototype._final = function () {
28781 var buf = Buffer.concat(this.buffers)
28782 var r = this._hash(buf)
28783 this.buffers = null
ebd8d4e8 28784
8b095871
IC
28785 return r
28786}
ab78acc6 28787
8b095871
IC
28788function Hash(hash) {
28789 Base.call(this, 'digest')
ab78acc6 28790
8b095871
IC
28791 this._hash = hash
28792}
ab78acc6 28793
8b095871 28794inherits(Hash, Base)
ab78acc6 28795
8b095871
IC
28796Hash.prototype._update = function (data) {
28797 this._hash.update(data)
28798}
ab78acc6 28799
8b095871
IC
28800Hash.prototype._final = function () {
28801 return this._hash.digest()
28802}
ab78acc6 28803
8b095871
IC
28804module.exports = function createHash (alg) {
28805 alg = alg.toLowerCase()
28806 if ('md5' === alg) return new HashNoConstructor(md5)
28807 if ('rmd160' === alg || 'ripemd160' === alg) return new HashNoConstructor(rmd160)
28808
28809 return new Hash(sha(alg))
ab78acc6
IC
28810}
28811
8b095871
IC
28812}).call(this,require("buffer").Buffer)
28813},{"./md5":38,"buffer":5,"cipher-base":35,"inherits":63,"ripemd160":71,"sha.js":80}],37:[function(require,module,exports){
28814(function (Buffer){
28815'use strict';
28816var intSize = 4;
28817var zeroBuffer = new Buffer(intSize); zeroBuffer.fill(0);
28818var chrsz = 8;
ab78acc6 28819
8b095871
IC
28820function toArray(buf, bigEndian) {
28821 if ((buf.length % intSize) !== 0) {
28822 var len = buf.length + (intSize - (buf.length % intSize));
28823 buf = Buffer.concat([buf, zeroBuffer], len);
ab78acc6
IC
28824 }
28825
8b095871
IC
28826 var arr = [];
28827 var fn = bigEndian ? buf.readInt32BE : buf.readInt32LE;
28828 for (var i = 0; i < buf.length; i += intSize) {
28829 arr.push(fn.call(buf, i));
28830 }
28831 return arr;
ab78acc6
IC
28832}
28833
8b095871
IC
28834function toBuffer(arr, size, bigEndian) {
28835 var buf = new Buffer(size);
28836 var fn = bigEndian ? buf.writeInt32BE : buf.writeInt32LE;
28837 for (var i = 0; i < arr.length; i++) {
28838 fn.call(buf, arr[i], i * 4, true);
28839 }
28840 return buf;
28841}
ab78acc6 28842
8b095871
IC
28843function hash(buf, fn, hashSize, bigEndian) {
28844 if (!Buffer.isBuffer(buf)) buf = new Buffer(buf);
28845 var arr = fn(toArray(buf, bigEndian), buf.length * chrsz);
28846 return toBuffer(arr, hashSize, bigEndian);
28847}
28848exports.hash = hash;
ab78acc6 28849}).call(this,require("buffer").Buffer)
8b095871 28850},{"buffer":5}],38:[function(require,module,exports){
ab78acc6 28851'use strict';
8b095871
IC
28852/*
28853 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
28854 * Digest Algorithm, as defined in RFC 1321.
28855 * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
28856 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
28857 * Distributed under the BSD License
28858 * See http://pajhome.org.uk/crypt/md5 for more info.
28859 */
ebd8d4e8 28860
8b095871 28861var helpers = require('./helpers');
ebd8d4e8 28862
8b095871
IC
28863/*
28864 * Calculate the MD5 of an array of little-endian words, and a bit length
28865 */
28866function core_md5(x, len)
28867{
28868 /* append padding */
28869 x[len >> 5] |= 0x80 << ((len) % 32);
28870 x[(((len + 64) >>> 9) << 4) + 14] = len;
ebd8d4e8 28871
8b095871
IC
28872 var a = 1732584193;
28873 var b = -271733879;
28874 var c = -1732584194;
28875 var d = 271733878;
ebd8d4e8 28876
8b095871
IC
28877 for(var i = 0; i < x.length; i += 16)
28878 {
28879 var olda = a;
28880 var oldb = b;
28881 var oldc = c;
28882 var oldd = d;
ebd8d4e8 28883
8b095871
IC
28884 a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936);
28885 d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586);
28886 c = md5_ff(c, d, a, b, x[i+ 2], 17, 606105819);
28887 b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330);
28888 a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897);
28889 d = md5_ff(d, a, b, c, x[i+ 5], 12, 1200080426);
28890 c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341);
28891 b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983);
28892 a = md5_ff(a, b, c, d, x[i+ 8], 7 , 1770035416);
28893 d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417);
28894 c = md5_ff(c, d, a, b, x[i+10], 17, -42063);
28895 b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162);
28896 a = md5_ff(a, b, c, d, x[i+12], 7 , 1804603682);
28897 d = md5_ff(d, a, b, c, x[i+13], 12, -40341101);
28898 c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290);
28899 b = md5_ff(b, c, d, a, x[i+15], 22, 1236535329);
ebd8d4e8 28900
8b095871
IC
28901 a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510);
28902 d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632);
28903 c = md5_gg(c, d, a, b, x[i+11], 14, 643717713);
28904 b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302);
28905 a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691);
28906 d = md5_gg(d, a, b, c, x[i+10], 9 , 38016083);
28907 c = md5_gg(c, d, a, b, x[i+15], 14, -660478335);
28908 b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848);
28909 a = md5_gg(a, b, c, d, x[i+ 9], 5 , 568446438);
28910 d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690);
28911 c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961);
28912 b = md5_gg(b, c, d, a, x[i+ 8], 20, 1163531501);
28913 a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467);
28914 d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784);
28915 c = md5_gg(c, d, a, b, x[i+ 7], 14, 1735328473);
28916 b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734);
ebd8d4e8 28917
8b095871
IC
28918 a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558);
28919 d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463);
28920 c = md5_hh(c, d, a, b, x[i+11], 16, 1839030562);
28921 b = md5_hh(b, c, d, a, x[i+14], 23, -35309556);
28922 a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060);
28923 d = md5_hh(d, a, b, c, x[i+ 4], 11, 1272893353);
28924 c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632);
28925 b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640);
28926 a = md5_hh(a, b, c, d, x[i+13], 4 , 681279174);
28927 d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222);
28928 c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979);
28929 b = md5_hh(b, c, d, a, x[i+ 6], 23, 76029189);
28930 a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487);
28931 d = md5_hh(d, a, b, c, x[i+12], 11, -421815835);
28932 c = md5_hh(c, d, a, b, x[i+15], 16, 530742520);
28933 b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651);
ebd8d4e8 28934
8b095871
IC
28935 a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844);
28936 d = md5_ii(d, a, b, c, x[i+ 7], 10, 1126891415);
28937 c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905);
28938 b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055);
28939 a = md5_ii(a, b, c, d, x[i+12], 6 , 1700485571);
28940 d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606);
28941 c = md5_ii(c, d, a, b, x[i+10], 15, -1051523);
28942 b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799);
28943 a = md5_ii(a, b, c, d, x[i+ 8], 6 , 1873313359);
28944 d = md5_ii(d, a, b, c, x[i+15], 10, -30611744);
28945 c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380);
28946 b = md5_ii(b, c, d, a, x[i+13], 21, 1309151649);
28947 a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070);
28948 d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379);
28949 c = md5_ii(c, d, a, b, x[i+ 2], 15, 718787259);
28950 b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551);
ebd8d4e8 28951
8b095871
IC
28952 a = safe_add(a, olda);
28953 b = safe_add(b, oldb);
28954 c = safe_add(c, oldc);
28955 d = safe_add(d, oldd);
ab78acc6 28956 }
8b095871 28957 return Array(a, b, c, d);
ebd8d4e8 28958
ab78acc6 28959}
ebd8d4e8 28960
8b095871
IC
28961/*
28962 * These functions implement the four basic operations the algorithm uses.
28963 */
28964function md5_cmn(q, a, b, x, s, t)
28965{
28966 return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b);
ab78acc6 28967}
8b095871
IC
28968function md5_ff(a, b, c, d, x, s, t)
28969{
28970 return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
ab78acc6 28971}
8b095871
IC
28972function md5_gg(a, b, c, d, x, s, t)
28973{
28974 return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
ab78acc6 28975}
8b095871
IC
28976function md5_hh(a, b, c, d, x, s, t)
28977{
28978 return md5_cmn(b ^ c ^ d, a, b, x, s, t);
28979}
28980function md5_ii(a, b, c, d, x, s, t)
28981{
28982 return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
ab78acc6 28983}
ebd8d4e8 28984
8b095871
IC
28985/*
28986 * Add integers, wrapping at 2^32. This uses 16-bit operations internally
28987 * to work around bugs in some JS interpreters.
28988 */
28989function safe_add(x, y)
28990{
28991 var lsw = (x & 0xFFFF) + (y & 0xFFFF);
28992 var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
28993 return (msw << 16) | (lsw & 0xFFFF);
ab78acc6 28994}
ebd8d4e8 28995
8b095871
IC
28996/*
28997 * Bitwise rotate a 32-bit number to the left.
28998 */
28999function bit_rol(num, cnt)
29000{
29001 return (num << cnt) | (num >>> (32 - cnt));
29002}
ebd8d4e8 29003
8b095871
IC
29004module.exports = function md5(buf) {
29005 return helpers.hash(buf, core_md5, 16);
29006};
29007},{"./helpers":37}],39:[function(require,module,exports){
29008'use strict';
ebd8d4e8 29009
8b095871 29010var elliptic = exports;
ebd8d4e8 29011
8b095871
IC
29012elliptic.version = require('../package.json').version;
29013elliptic.utils = require('./elliptic/utils');
29014elliptic.rand = require('brorand');
29015elliptic.hmacDRBG = require('./elliptic/hmac-drbg');
29016elliptic.curve = require('./elliptic/curve');
29017elliptic.curves = require('./elliptic/curves');
ebd8d4e8 29018
8b095871
IC
29019// Protocols
29020elliptic.ec = require('./elliptic/ec');
29021elliptic.eddsa = require('./elliptic/eddsa');
ebd8d4e8 29022
8b095871
IC
29023},{"../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){
29024'use strict';
ebd8d4e8 29025
8b095871
IC
29026var BN = require('bn.js');
29027var elliptic = require('../../elliptic');
29028var utils = elliptic.utils;
29029var getNAF = utils.getNAF;
29030var getJSF = utils.getJSF;
29031var assert = utils.assert;
29032
29033function BaseCurve(type, conf) {
29034 this.type = type;
29035 this.p = new BN(conf.p, 16);
29036
29037 // Use Montgomery, when there is no fast reduction for the prime
29038 this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p);
29039
29040 // Useful for many curves
29041 this.zero = new BN(0).toRed(this.red);
29042 this.one = new BN(1).toRed(this.red);
29043 this.two = new BN(2).toRed(this.red);
29044
29045 // Curve configuration, optional
29046 this.n = conf.n && new BN(conf.n, 16);
29047 this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed);
29048
29049 // Temporary arrays
29050 this._wnafT1 = new Array(4);
29051 this._wnafT2 = new Array(4);
29052 this._wnafT3 = new Array(4);
29053 this._wnafT4 = new Array(4);
29054
29055 // Generalized Greg Maxwell's trick
29056 var adjustCount = this.n && this.p.div(this.n);
29057 if (!adjustCount || adjustCount.cmpn(100) > 0) {
29058 this.redN = null;
29059 } else {
29060 this._maxwellTrick = true;
29061 this.redN = this.n.toRed(this.red);
ebd8d4e8 29062 }
ebd8d4e8 29063}
8b095871 29064module.exports = BaseCurve;
ebd8d4e8 29065
8b095871
IC
29066BaseCurve.prototype.point = function point() {
29067 throw new Error('Not implemented');
29068};
ebd8d4e8 29069
8b095871
IC
29070BaseCurve.prototype.validate = function validate() {
29071 throw new Error('Not implemented');
29072};
ebd8d4e8 29073
8b095871
IC
29074BaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) {
29075 assert(p.precomputed);
29076 var doubles = p._getDoubles();
ebd8d4e8 29077
8b095871
IC
29078 var naf = getNAF(k, 1);
29079 var I = (1 << (doubles.step + 1)) - (doubles.step % 2 === 0 ? 2 : 1);
29080 I /= 3;
ebd8d4e8 29081
8b095871
IC
29082 // Translate into more windowed form
29083 var repr = [];
29084 for (var j = 0; j < naf.length; j += doubles.step) {
29085 var nafW = 0;
29086 for (var k = j + doubles.step - 1; k >= j; k--)
29087 nafW = (nafW << 1) + naf[k];
29088 repr.push(nafW);
29089 }
ebd8d4e8 29090
8b095871
IC
29091 var a = this.jpoint(null, null, null);
29092 var b = this.jpoint(null, null, null);
29093 for (var i = I; i > 0; i--) {
29094 for (var j = 0; j < repr.length; j++) {
29095 var nafW = repr[j];
29096 if (nafW === i)
29097 b = b.mixedAdd(doubles.points[j]);
29098 else if (nafW === -i)
29099 b = b.mixedAdd(doubles.points[j].neg());
29100 }
29101 a = a.add(b);
29102 }
29103 return a.toP();
29104};
ebd8d4e8 29105
8b095871
IC
29106BaseCurve.prototype._wnafMul = function _wnafMul(p, k) {
29107 var w = 4;
ebd8d4e8 29108
8b095871
IC
29109 // Precompute window
29110 var nafPoints = p._getNAFPoints(w);
29111 w = nafPoints.wnd;
29112 var wnd = nafPoints.points;
ebd8d4e8 29113
8b095871
IC
29114 // Get NAF form
29115 var naf = getNAF(k, w);
ebd8d4e8 29116
8b095871
IC
29117 // Add `this`*(N+1) for every w-NAF index
29118 var acc = this.jpoint(null, null, null);
29119 for (var i = naf.length - 1; i >= 0; i--) {
29120 // Count zeroes
29121 for (var k = 0; i >= 0 && naf[i] === 0; i--)
29122 k++;
29123 if (i >= 0)
29124 k++;
29125 acc = acc.dblp(k);
ebd8d4e8 29126
8b095871
IC
29127 if (i < 0)
29128 break;
29129 var z = naf[i];
29130 assert(z !== 0);
29131 if (p.type === 'affine') {
29132 // J +- P
29133 if (z > 0)
29134 acc = acc.mixedAdd(wnd[(z - 1) >> 1]);
29135 else
29136 acc = acc.mixedAdd(wnd[(-z - 1) >> 1].neg());
29137 } else {
29138 // J +- J
29139 if (z > 0)
29140 acc = acc.add(wnd[(z - 1) >> 1]);
29141 else
29142 acc = acc.add(wnd[(-z - 1) >> 1].neg());
29143 }
ebd8d4e8 29144 }
8b095871
IC
29145 return p.type === 'affine' ? acc.toP() : acc;
29146};
ebd8d4e8 29147
8b095871
IC
29148BaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW,
29149 points,
29150 coeffs,
29151 len,
29152 jacobianResult) {
29153 var wndWidth = this._wnafT1;
29154 var wnd = this._wnafT2;
29155 var naf = this._wnafT3;
29156
29157 // Fill all arrays
29158 var max = 0;
29159 for (var i = 0; i < len; i++) {
29160 var p = points[i];
29161 var nafPoints = p._getNAFPoints(defW);
29162 wndWidth[i] = nafPoints.wnd;
29163 wnd[i] = nafPoints.points;
29164 }
29165
29166 // Comb small window NAFs
29167 for (var i = len - 1; i >= 1; i -= 2) {
29168 var a = i - 1;
29169 var b = i;
29170 if (wndWidth[a] !== 1 || wndWidth[b] !== 1) {
29171 naf[a] = getNAF(coeffs[a], wndWidth[a]);
29172 naf[b] = getNAF(coeffs[b], wndWidth[b]);
29173 max = Math.max(naf[a].length, max);
29174 max = Math.max(naf[b].length, max);
29175 continue;
29176 }
ebd8d4e8 29177
8b095871
IC
29178 var comb = [
29179 points[a], /* 1 */
29180 null, /* 3 */
29181 null, /* 5 */
29182 points[b] /* 7 */
29183 ];
29184
29185 // Try to avoid Projective points, if possible
29186 if (points[a].y.cmp(points[b].y) === 0) {
29187 comb[1] = points[a].add(points[b]);
29188 comb[2] = points[a].toJ().mixedAdd(points[b].neg());
29189 } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) {
29190 comb[1] = points[a].toJ().mixedAdd(points[b]);
29191 comb[2] = points[a].add(points[b].neg());
29192 } else {
29193 comb[1] = points[a].toJ().mixedAdd(points[b]);
29194 comb[2] = points[a].toJ().mixedAdd(points[b].neg());
29195 }
ebd8d4e8 29196
8b095871
IC
29197 var index = [
29198 -3, /* -1 -1 */
29199 -1, /* -1 0 */
29200 -5, /* -1 1 */
29201 -7, /* 0 -1 */
29202 0, /* 0 0 */
29203 7, /* 0 1 */
29204 5, /* 1 -1 */
29205 1, /* 1 0 */
29206 3 /* 1 1 */
29207 ];
ebd8d4e8 29208
8b095871
IC
29209 var jsf = getJSF(coeffs[a], coeffs[b]);
29210 max = Math.max(jsf[0].length, max);
29211 naf[a] = new Array(max);
29212 naf[b] = new Array(max);
29213 for (var j = 0; j < max; j++) {
29214 var ja = jsf[0][j] | 0;
29215 var jb = jsf[1][j] | 0;
ebd8d4e8 29216
8b095871
IC
29217 naf[a][j] = index[(ja + 1) * 3 + (jb + 1)];
29218 naf[b][j] = 0;
29219 wnd[a] = comb;
29220 }
29221 }
ebd8d4e8 29222
8b095871
IC
29223 var acc = this.jpoint(null, null, null);
29224 var tmp = this._wnafT4;
29225 for (var i = max; i >= 0; i--) {
29226 var k = 0;
ebd8d4e8 29227
8b095871
IC
29228 while (i >= 0) {
29229 var zero = true;
29230 for (var j = 0; j < len; j++) {
29231 tmp[j] = naf[j][i] | 0;
29232 if (tmp[j] !== 0)
29233 zero = false;
29234 }
29235 if (!zero)
29236 break;
29237 k++;
29238 i--;
29239 }
29240 if (i >= 0)
29241 k++;
29242 acc = acc.dblp(k);
29243 if (i < 0)
29244 break;
ebd8d4e8 29245
8b095871
IC
29246 for (var j = 0; j < len; j++) {
29247 var z = tmp[j];
29248 var p;
29249 if (z === 0)
29250 continue;
29251 else if (z > 0)
29252 p = wnd[j][(z - 1) >> 1];
29253 else if (z < 0)
29254 p = wnd[j][(-z - 1) >> 1].neg();
29255
29256 if (p.type === 'affine')
29257 acc = acc.mixedAdd(p);
29258 else
29259 acc = acc.add(p);
29260 }
29261 }
29262 // Zeroify references
29263 for (var i = 0; i < len; i++)
29264 wnd[i] = null;
ebd8d4e8 29265
8b095871
IC
29266 if (jacobianResult)
29267 return acc;
29268 else
29269 return acc.toP();
29270};
ebd8d4e8 29271
8b095871
IC
29272function BasePoint(curve, type) {
29273 this.curve = curve;
29274 this.type = type;
29275 this.precomputed = null;
29276}
29277BaseCurve.BasePoint = BasePoint;
ebd8d4e8 29278
8b095871
IC
29279BasePoint.prototype.eq = function eq(/*other*/) {
29280 throw new Error('Not implemented');
29281};
ebd8d4e8 29282
8b095871
IC
29283BasePoint.prototype.validate = function validate() {
29284 return this.curve.validate(this);
29285};
ebd8d4e8 29286
8b095871
IC
29287BaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) {
29288 bytes = utils.toArray(bytes, enc);
ebd8d4e8 29289
8b095871 29290 var len = this.p.byteLength();
ebd8d4e8 29291
8b095871
IC
29292 // uncompressed, hybrid-odd, hybrid-even
29293 if ((bytes[0] === 0x04 || bytes[0] === 0x06 || bytes[0] === 0x07) &&
29294 bytes.length - 1 === 2 * len) {
29295 if (bytes[0] === 0x06)
29296 assert(bytes[bytes.length - 1] % 2 === 0);
29297 else if (bytes[0] === 0x07)
29298 assert(bytes[bytes.length - 1] % 2 === 1);
ebd8d4e8 29299
8b095871
IC
29300 var res = this.point(bytes.slice(1, 1 + len),
29301 bytes.slice(1 + len, 1 + 2 * len));
ebd8d4e8 29302
8b095871
IC
29303 return res;
29304 } else if ((bytes[0] === 0x02 || bytes[0] === 0x03) &&
29305 bytes.length - 1 === len) {
29306 return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 0x03);
ebd8d4e8 29307 }
8b095871
IC
29308 throw new Error('Unknown point format');
29309};
ebd8d4e8 29310
8b095871
IC
29311BasePoint.prototype.encodeCompressed = function encodeCompressed(enc) {
29312 return this.encode(enc, true);
29313};
29314
29315BasePoint.prototype._encode = function _encode(compact) {
29316 var len = this.curve.p.byteLength();
29317 var x = this.getX().toArray('be', len);
29318
29319 if (compact)
29320 return [ this.getY().isEven() ? 0x02 : 0x03 ].concat(x);
29321
29322 return [ 0x04 ].concat(x, this.getY().toArray('be', len)) ;
29323};
29324
29325BasePoint.prototype.encode = function encode(enc, compact) {
29326 return utils.encode(this._encode(compact), enc);
29327};
29328
29329BasePoint.prototype.precompute = function precompute(power) {
29330 if (this.precomputed)
29331 return this;
29332
29333 var precomputed = {
29334 doubles: null,
29335 naf: null,
29336 beta: null
29337 };
29338 precomputed.naf = this._getNAFPoints(8);
29339 precomputed.doubles = this._getDoubles(4, power);
29340 precomputed.beta = this._getBeta();
29341 this.precomputed = precomputed;
29342
29343 return this;
29344};
29345
29346BasePoint.prototype._hasDoubles = function _hasDoubles(k) {
29347 if (!this.precomputed)
29348 return false;
29349
29350 var doubles = this.precomputed.doubles;
29351 if (!doubles)
29352 return false;
29353
29354 return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step);
29355};
29356
29357BasePoint.prototype._getDoubles = function _getDoubles(step, power) {
29358 if (this.precomputed && this.precomputed.doubles)
29359 return this.precomputed.doubles;
29360
29361 var doubles = [ this ];
29362 var acc = this;
29363 for (var i = 0; i < power; i += step) {
29364 for (var j = 0; j < step; j++)
29365 acc = acc.dbl();
29366 doubles.push(acc);
ebd8d4e8 29367 }
8b095871
IC
29368 return {
29369 step: step,
29370 points: doubles
29371 };
29372};
ebd8d4e8 29373
8b095871
IC
29374BasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) {
29375 if (this.precomputed && this.precomputed.naf)
29376 return this.precomputed.naf;
ebd8d4e8 29377
8b095871
IC
29378 var res = [ this ];
29379 var max = (1 << wnd) - 1;
29380 var dbl = max === 1 ? null : this.dbl();
29381 for (var i = 1; i < max; i++)
29382 res[i] = res[i - 1].add(dbl);
29383 return {
29384 wnd: wnd,
29385 points: res
29386 };
29387};
ebd8d4e8 29388
8b095871
IC
29389BasePoint.prototype._getBeta = function _getBeta() {
29390 return null;
29391};
ebd8d4e8 29392
8b095871
IC
29393BasePoint.prototype.dblp = function dblp(k) {
29394 var r = this;
29395 for (var i = 0; i < k; i++)
29396 r = r.dbl();
29397 return r;
29398};
ebd8d4e8 29399
8b095871
IC
29400},{"../../elliptic":39,"bn.js":33}],41:[function(require,module,exports){
29401'use strict';
ebd8d4e8 29402
8b095871
IC
29403var curve = require('../curve');
29404var elliptic = require('../../elliptic');
29405var BN = require('bn.js');
29406var inherits = require('inherits');
29407var Base = curve.base;
ebd8d4e8 29408
8b095871 29409var assert = elliptic.utils.assert;
ebd8d4e8 29410
8b095871
IC
29411function EdwardsCurve(conf) {
29412 // NOTE: Important as we are creating point in Base.call()
29413 this.twisted = (conf.a | 0) !== 1;
29414 this.mOneA = this.twisted && (conf.a | 0) === -1;
29415 this.extended = this.mOneA;
29416
29417 Base.call(this, 'edwards', conf);
29418
29419 this.a = new BN(conf.a, 16).umod(this.red.m);
29420 this.a = this.a.toRed(this.red);
29421 this.c = new BN(conf.c, 16).toRed(this.red);
29422 this.c2 = this.c.redSqr();
29423 this.d = new BN(conf.d, 16).toRed(this.red);
29424 this.dd = this.d.redAdd(this.d);
29425
29426 assert(!this.twisted || this.c.fromRed().cmpn(1) === 0);
29427 this.oneC = (conf.c | 0) === 1;
ebd8d4e8 29428}
8b095871
IC
29429inherits(EdwardsCurve, Base);
29430module.exports = EdwardsCurve;
ebd8d4e8 29431
8b095871
IC
29432EdwardsCurve.prototype._mulA = function _mulA(num) {
29433 if (this.mOneA)
29434 return num.redNeg();
29435 else
29436 return this.a.redMul(num);
29437};
ebd8d4e8 29438
8b095871
IC
29439EdwardsCurve.prototype._mulC = function _mulC(num) {
29440 if (this.oneC)
29441 return num;
29442 else
29443 return this.c.redMul(num);
29444};
ebd8d4e8 29445
8b095871
IC
29446// Just for compatibility with Short curve
29447EdwardsCurve.prototype.jpoint = function jpoint(x, y, z, t) {
29448 return this.point(x, y, z, t);
29449};
ebd8d4e8 29450
8b095871
IC
29451EdwardsCurve.prototype.pointFromX = function pointFromX(x, odd) {
29452 x = new BN(x, 16);
29453 if (!x.red)
29454 x = x.toRed(this.red);
ebd8d4e8 29455
8b095871
IC
29456 var x2 = x.redSqr();
29457 var rhs = this.c2.redSub(this.a.redMul(x2));
29458 var lhs = this.one.redSub(this.c2.redMul(this.d).redMul(x2));
29459
29460 var y2 = rhs.redMul(lhs.redInvm());
29461 var y = y2.redSqrt();
29462 if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)
29463 throw new Error('invalid point');
29464
29465 var isOdd = y.fromRed().isOdd();
29466 if (odd && !isOdd || !odd && isOdd)
29467 y = y.redNeg();
29468
29469 return this.point(x, y);
29470};
29471
29472EdwardsCurve.prototype.pointFromY = function pointFromY(y, odd) {
29473 y = new BN(y, 16);
29474 if (!y.red)
29475 y = y.toRed(this.red);
29476
29477 // x^2 = (y^2 - 1) / (d y^2 + 1)
29478 var y2 = y.redSqr();
29479 var lhs = y2.redSub(this.one);
29480 var rhs = y2.redMul(this.d).redAdd(this.one);
29481 var x2 = lhs.redMul(rhs.redInvm());
29482
29483 if (x2.cmp(this.zero) === 0) {
29484 if (odd)
29485 throw new Error('invalid point');
29486 else
29487 return this.point(this.zero, y);
ebd8d4e8
IC
29488 }
29489
8b095871
IC
29490 var x = x2.redSqrt();
29491 if (x.redSqr().redSub(x2).cmp(this.zero) !== 0)
29492 throw new Error('invalid point');
ebd8d4e8 29493
8b095871
IC
29494 if (x.isOdd() !== odd)
29495 x = x.redNeg();
ebd8d4e8 29496
8b095871
IC
29497 return this.point(x, y);
29498};
ebd8d4e8 29499
8b095871
IC
29500EdwardsCurve.prototype.validate = function validate(point) {
29501 if (point.isInfinity())
29502 return true;
ebd8d4e8 29503
8b095871
IC
29504 // Curve: A * X^2 + Y^2 = C^2 * (1 + D * X^2 * Y^2)
29505 point.normalize();
ebd8d4e8 29506
8b095871
IC
29507 var x2 = point.x.redSqr();
29508 var y2 = point.y.redSqr();
29509 var lhs = x2.redMul(this.a).redAdd(y2);
29510 var rhs = this.c2.redMul(this.one.redAdd(this.d.redMul(x2).redMul(y2)));
ebd8d4e8 29511
8b095871
IC
29512 return lhs.cmp(rhs) === 0;
29513};
ebd8d4e8 29514
8b095871
IC
29515function Point(curve, x, y, z, t) {
29516 Base.BasePoint.call(this, curve, 'projective');
29517 if (x === null && y === null && z === null) {
29518 this.x = this.curve.zero;
29519 this.y = this.curve.one;
29520 this.z = this.curve.one;
29521 this.t = this.curve.zero;
29522 this.zOne = true;
29523 } else {
29524 this.x = new BN(x, 16);
29525 this.y = new BN(y, 16);
29526 this.z = z ? new BN(z, 16) : this.curve.one;
29527 this.t = t && new BN(t, 16);
29528 if (!this.x.red)
29529 this.x = this.x.toRed(this.curve.red);
29530 if (!this.y.red)
29531 this.y = this.y.toRed(this.curve.red);
29532 if (!this.z.red)
29533 this.z = this.z.toRed(this.curve.red);
29534 if (this.t && !this.t.red)
29535 this.t = this.t.toRed(this.curve.red);
29536 this.zOne = this.z === this.curve.one;
29537
29538 // Use extended coordinates
29539 if (this.curve.extended && !this.t) {
29540 this.t = this.x.redMul(this.y);
29541 if (!this.zOne)
29542 this.t = this.t.redMul(this.z.redInvm());
29543 }
29544 }
29545}
29546inherits(Point, Base.BasePoint);
29547
29548EdwardsCurve.prototype.pointFromJSON = function pointFromJSON(obj) {
29549 return Point.fromJSON(this, obj);
29550};
29551
29552EdwardsCurve.prototype.point = function point(x, y, z, t) {
29553 return new Point(this, x, y, z, t);
29554};
29555
29556Point.fromJSON = function fromJSON(curve, obj) {
29557 return new Point(curve, obj[0], obj[1], obj[2]);
29558};
29559
29560Point.prototype.inspect = function inspect() {
29561 if (this.isInfinity())
29562 return '<EC Point Infinity>';
29563 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
29564 ' y: ' + this.y.fromRed().toString(16, 2) +
29565 ' z: ' + this.z.fromRed().toString(16, 2) + '>';
29566};
29567
29568Point.prototype.isInfinity = function isInfinity() {
29569 // XXX This code assumes that zero is always zero in red
29570 return this.x.cmpn(0) === 0 &&
29571 this.y.cmp(this.z) === 0;
29572};
29573
29574Point.prototype._extDbl = function _extDbl() {
29575 // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html
29576 // #doubling-dbl-2008-hwcd
29577 // 4M + 4S
29578
29579 // A = X1^2
29580 var a = this.x.redSqr();
29581 // B = Y1^2
29582 var b = this.y.redSqr();
29583 // C = 2 * Z1^2
29584 var c = this.z.redSqr();
29585 c = c.redIAdd(c);
29586 // D = a * A
29587 var d = this.curve._mulA(a);
29588 // E = (X1 + Y1)^2 - A - B
29589 var e = this.x.redAdd(this.y).redSqr().redISub(a).redISub(b);
29590 // G = D + B
29591 var g = d.redAdd(b);
29592 // F = G - C
29593 var f = g.redSub(c);
29594 // H = D - B
29595 var h = d.redSub(b);
29596 // X3 = E * F
29597 var nx = e.redMul(f);
29598 // Y3 = G * H
29599 var ny = g.redMul(h);
29600 // T3 = E * H
29601 var nt = e.redMul(h);
29602 // Z3 = F * G
29603 var nz = f.redMul(g);
29604 return this.curve.point(nx, ny, nz, nt);
29605};
29606
29607Point.prototype._projDbl = function _projDbl() {
29608 // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html
29609 // #doubling-dbl-2008-bbjlp
29610 // #doubling-dbl-2007-bl
29611 // and others
29612 // Generally 3M + 4S or 2M + 4S
29613
29614 // B = (X1 + Y1)^2
29615 var b = this.x.redAdd(this.y).redSqr();
29616 // C = X1^2
29617 var c = this.x.redSqr();
29618 // D = Y1^2
29619 var d = this.y.redSqr();
29620
29621 var nx;
29622 var ny;
29623 var nz;
29624 if (this.curve.twisted) {
29625 // E = a * C
29626 var e = this.curve._mulA(c);
29627 // F = E + D
29628 var f = e.redAdd(d);
29629 if (this.zOne) {
29630 // X3 = (B - C - D) * (F - 2)
29631 nx = b.redSub(c).redSub(d).redMul(f.redSub(this.curve.two));
29632 // Y3 = F * (E - D)
29633 ny = f.redMul(e.redSub(d));
29634 // Z3 = F^2 - 2 * F
29635 nz = f.redSqr().redSub(f).redSub(f);
29636 } else {
29637 // H = Z1^2
29638 var h = this.z.redSqr();
29639 // J = F - 2 * H
29640 var j = f.redSub(h).redISub(h);
29641 // X3 = (B-C-D)*J
29642 nx = b.redSub(c).redISub(d).redMul(j);
29643 // Y3 = F * (E - D)
29644 ny = f.redMul(e.redSub(d));
29645 // Z3 = F * J
29646 nz = f.redMul(j);
29647 }
29648 } else {
29649 // E = C + D
29650 var e = c.redAdd(d);
29651 // H = (c * Z1)^2
29652 var h = this.curve._mulC(this.c.redMul(this.z)).redSqr();
29653 // J = E - 2 * H
29654 var j = e.redSub(h).redSub(h);
29655 // X3 = c * (B - E) * J
29656 nx = this.curve._mulC(b.redISub(e)).redMul(j);
29657 // Y3 = c * E * (C - D)
29658 ny = this.curve._mulC(e).redMul(c.redISub(d));
29659 // Z3 = E * J
29660 nz = e.redMul(j);
29661 }
29662 return this.curve.point(nx, ny, nz);
29663};
29664
29665Point.prototype.dbl = function dbl() {
29666 if (this.isInfinity())
29667 return this;
29668
29669 // Double in extended coordinates
29670 if (this.curve.extended)
29671 return this._extDbl();
29672 else
29673 return this._projDbl();
29674};
29675
29676Point.prototype._extAdd = function _extAdd(p) {
29677 // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html
29678 // #addition-add-2008-hwcd-3
29679 // 8M
29680
29681 // A = (Y1 - X1) * (Y2 - X2)
29682 var a = this.y.redSub(this.x).redMul(p.y.redSub(p.x));
29683 // B = (Y1 + X1) * (Y2 + X2)
29684 var b = this.y.redAdd(this.x).redMul(p.y.redAdd(p.x));
29685 // C = T1 * k * T2
29686 var c = this.t.redMul(this.curve.dd).redMul(p.t);
29687 // D = Z1 * 2 * Z2
29688 var d = this.z.redMul(p.z.redAdd(p.z));
29689 // E = B - A
29690 var e = b.redSub(a);
29691 // F = D - C
29692 var f = d.redSub(c);
29693 // G = D + C
29694 var g = d.redAdd(c);
29695 // H = B + A
29696 var h = b.redAdd(a);
29697 // X3 = E * F
29698 var nx = e.redMul(f);
29699 // Y3 = G * H
29700 var ny = g.redMul(h);
29701 // T3 = E * H
29702 var nt = e.redMul(h);
29703 // Z3 = F * G
29704 var nz = f.redMul(g);
29705 return this.curve.point(nx, ny, nz, nt);
29706};
29707
29708Point.prototype._projAdd = function _projAdd(p) {
29709 // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html
29710 // #addition-add-2008-bbjlp
29711 // #addition-add-2007-bl
29712 // 10M + 1S
29713
29714 // A = Z1 * Z2
29715 var a = this.z.redMul(p.z);
29716 // B = A^2
29717 var b = a.redSqr();
29718 // C = X1 * X2
29719 var c = this.x.redMul(p.x);
29720 // D = Y1 * Y2
29721 var d = this.y.redMul(p.y);
29722 // E = d * C * D
29723 var e = this.curve.d.redMul(c).redMul(d);
29724 // F = B - E
29725 var f = b.redSub(e);
29726 // G = B + E
29727 var g = b.redAdd(e);
29728 // X3 = A * F * ((X1 + Y1) * (X2 + Y2) - C - D)
29729 var tmp = this.x.redAdd(this.y).redMul(p.x.redAdd(p.y)).redISub(c).redISub(d);
29730 var nx = a.redMul(f).redMul(tmp);
29731 var ny;
29732 var nz;
29733 if (this.curve.twisted) {
29734 // Y3 = A * G * (D - a * C)
29735 ny = a.redMul(g).redMul(d.redSub(this.curve._mulA(c)));
29736 // Z3 = F * G
29737 nz = f.redMul(g);
29738 } else {
29739 // Y3 = A * G * (D - C)
29740 ny = a.redMul(g).redMul(d.redSub(c));
29741 // Z3 = c * F * G
29742 nz = this.curve._mulC(f).redMul(g);
ebd8d4e8 29743 }
8b095871
IC
29744 return this.curve.point(nx, ny, nz);
29745};
ebd8d4e8 29746
8b095871
IC
29747Point.prototype.add = function add(p) {
29748 if (this.isInfinity())
29749 return p;
29750 if (p.isInfinity())
29751 return this;
ebd8d4e8 29752
8b095871
IC
29753 if (this.curve.extended)
29754 return this._extAdd(p);
29755 else
29756 return this._projAdd(p);
29757};
ebd8d4e8 29758
8b095871
IC
29759Point.prototype.mul = function mul(k) {
29760 if (this._hasDoubles(k))
29761 return this.curve._fixedNafMul(this, k);
29762 else
29763 return this.curve._wnafMul(this, k);
29764};
ebd8d4e8 29765
8b095871
IC
29766Point.prototype.mulAdd = function mulAdd(k1, p, k2) {
29767 return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, false);
29768};
ebd8d4e8 29769
8b095871
IC
29770Point.prototype.jmulAdd = function jmulAdd(k1, p, k2) {
29771 return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, true);
29772};
ebd8d4e8 29773
8b095871
IC
29774Point.prototype.normalize = function normalize() {
29775 if (this.zOne)
29776 return this;
29777
29778 // Normalize coordinates
29779 var zi = this.z.redInvm();
29780 this.x = this.x.redMul(zi);
29781 this.y = this.y.redMul(zi);
29782 if (this.t)
29783 this.t = this.t.redMul(zi);
29784 this.z = this.curve.one;
29785 this.zOne = true;
29786 return this;
29787};
29788
29789Point.prototype.neg = function neg() {
29790 return this.curve.point(this.x.redNeg(),
29791 this.y,
29792 this.z,
29793 this.t && this.t.redNeg());
29794};
29795
29796Point.prototype.getX = function getX() {
29797 this.normalize();
29798 return this.x.fromRed();
29799};
29800
29801Point.prototype.getY = function getY() {
29802 this.normalize();
29803 return this.y.fromRed();
29804};
29805
29806Point.prototype.eq = function eq(other) {
29807 return this === other ||
29808 this.getX().cmp(other.getX()) === 0 &&
29809 this.getY().cmp(other.getY()) === 0;
29810};
29811
29812Point.prototype.eqXToP = function eqXToP(x) {
29813 var rx = x.toRed(this.curve.red).redMul(this.z);
29814 if (this.x.cmp(rx) === 0)
29815 return true;
ebd8d4e8 29816
8b095871
IC
29817 var xc = x.clone();
29818 var t = this.curve.redN.redMul(this.z);
29819 for (;;) {
29820 xc.iadd(this.curve.n);
29821 if (xc.cmp(this.curve.p) >= 0)
29822 return false;
ebd8d4e8 29823
8b095871
IC
29824 rx.redIAdd(t);
29825 if (this.x.cmp(rx) === 0)
29826 return true;
ebd8d4e8 29827 }
8b095871
IC
29828 return false;
29829};
ebd8d4e8 29830
8b095871
IC
29831// Compatibility with BaseCurve
29832Point.prototype.toP = Point.prototype.normalize;
29833Point.prototype.mixedAdd = Point.prototype.add;
ebd8d4e8 29834
8b095871
IC
29835},{"../../elliptic":39,"../curve":42,"bn.js":33,"inherits":63}],42:[function(require,module,exports){
29836'use strict';
ebd8d4e8 29837
8b095871 29838var curve = exports;
ebd8d4e8 29839
8b095871
IC
29840curve.base = require('./base');
29841curve.short = require('./short');
29842curve.mont = require('./mont');
29843curve.edwards = require('./edwards');
ebd8d4e8 29844
8b095871
IC
29845},{"./base":40,"./edwards":41,"./mont":43,"./short":44}],43:[function(require,module,exports){
29846'use strict';
ebd8d4e8 29847
8b095871
IC
29848var curve = require('../curve');
29849var BN = require('bn.js');
29850var inherits = require('inherits');
29851var Base = curve.base;
ebd8d4e8 29852
8b095871
IC
29853var elliptic = require('../../elliptic');
29854var utils = elliptic.utils;
ebd8d4e8 29855
8b095871
IC
29856function MontCurve(conf) {
29857 Base.call(this, 'mont', conf);
ebd8d4e8 29858
8b095871
IC
29859 this.a = new BN(conf.a, 16).toRed(this.red);
29860 this.b = new BN(conf.b, 16).toRed(this.red);
29861 this.i4 = new BN(4).toRed(this.red).redInvm();
29862 this.two = new BN(2).toRed(this.red);
29863 this.a24 = this.i4.redMul(this.a.redAdd(this.two));
ebd8d4e8 29864}
8b095871
IC
29865inherits(MontCurve, Base);
29866module.exports = MontCurve;
ebd8d4e8 29867
8b095871
IC
29868MontCurve.prototype.validate = function validate(point) {
29869 var x = point.normalize().x;
29870 var x2 = x.redSqr();
29871 var rhs = x2.redMul(x).redAdd(x2.redMul(this.a)).redAdd(x);
29872 var y = rhs.redSqrt();
ebd8d4e8 29873
8b095871
IC
29874 return y.redSqr().cmp(rhs) === 0;
29875};
ebd8d4e8 29876
8b095871
IC
29877function Point(curve, x, z) {
29878 Base.BasePoint.call(this, curve, 'projective');
29879 if (x === null && z === null) {
29880 this.x = this.curve.one;
29881 this.z = this.curve.zero;
29882 } else {
29883 this.x = new BN(x, 16);
29884 this.z = new BN(z, 16);
29885 if (!this.x.red)
29886 this.x = this.x.toRed(this.curve.red);
29887 if (!this.z.red)
29888 this.z = this.z.toRed(this.curve.red);
29889 }
29890}
29891inherits(Point, Base.BasePoint);
ebd8d4e8 29892
8b095871
IC
29893MontCurve.prototype.decodePoint = function decodePoint(bytes, enc) {
29894 return this.point(utils.toArray(bytes, enc), 1);
29895};
ebd8d4e8 29896
8b095871
IC
29897MontCurve.prototype.point = function point(x, z) {
29898 return new Point(this, x, z);
29899};
ebd8d4e8 29900
8b095871
IC
29901MontCurve.prototype.pointFromJSON = function pointFromJSON(obj) {
29902 return Point.fromJSON(this, obj);
29903};
ebd8d4e8 29904
8b095871
IC
29905Point.prototype.precompute = function precompute() {
29906 // No-op
29907};
ebd8d4e8 29908
8b095871
IC
29909Point.prototype._encode = function _encode() {
29910 return this.getX().toArray('be', this.curve.p.byteLength());
29911};
ebd8d4e8 29912
8b095871
IC
29913Point.fromJSON = function fromJSON(curve, obj) {
29914 return new Point(curve, obj[0], obj[1] || curve.one);
29915};
ebd8d4e8 29916
8b095871
IC
29917Point.prototype.inspect = function inspect() {
29918 if (this.isInfinity())
29919 return '<EC Point Infinity>';
29920 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
29921 ' z: ' + this.z.fromRed().toString(16, 2) + '>';
29922};
ebd8d4e8 29923
8b095871
IC
29924Point.prototype.isInfinity = function isInfinity() {
29925 // XXX This code assumes that zero is always zero in red
29926 return this.z.cmpn(0) === 0;
29927};
ebd8d4e8 29928
8b095871
IC
29929Point.prototype.dbl = function dbl() {
29930 // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#doubling-dbl-1987-m-3
29931 // 2M + 2S + 4A
29932
29933 // A = X1 + Z1
29934 var a = this.x.redAdd(this.z);
29935 // AA = A^2
29936 var aa = a.redSqr();
29937 // B = X1 - Z1
29938 var b = this.x.redSub(this.z);
29939 // BB = B^2
29940 var bb = b.redSqr();
29941 // C = AA - BB
29942 var c = aa.redSub(bb);
29943 // X3 = AA * BB
29944 var nx = aa.redMul(bb);
29945 // Z3 = C * (BB + A24 * C)
29946 var nz = c.redMul(bb.redAdd(this.curve.a24.redMul(c)));
29947 return this.curve.point(nx, nz);
29948};
ebd8d4e8 29949
8b095871
IC
29950Point.prototype.add = function add() {
29951 throw new Error('Not supported on Montgomery curve');
29952};
ebd8d4e8 29953
8b095871
IC
29954Point.prototype.diffAdd = function diffAdd(p, diff) {
29955 // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#diffadd-dadd-1987-m-3
29956 // 4M + 2S + 6A
29957
29958 // A = X2 + Z2
29959 var a = this.x.redAdd(this.z);
29960 // B = X2 - Z2
29961 var b = this.x.redSub(this.z);
29962 // C = X3 + Z3
29963 var c = p.x.redAdd(p.z);
29964 // D = X3 - Z3
29965 var d = p.x.redSub(p.z);
29966 // DA = D * A
29967 var da = d.redMul(a);
29968 // CB = C * B
29969 var cb = c.redMul(b);
29970 // X5 = Z1 * (DA + CB)^2
29971 var nx = diff.z.redMul(da.redAdd(cb).redSqr());
29972 // Z5 = X1 * (DA - CB)^2
29973 var nz = diff.x.redMul(da.redISub(cb).redSqr());
29974 return this.curve.point(nx, nz);
29975};
ebd8d4e8 29976
8b095871
IC
29977Point.prototype.mul = function mul(k) {
29978 var t = k.clone();
29979 var a = this; // (N / 2) * Q + Q
29980 var b = this.curve.point(null, null); // (N / 2) * Q
29981 var c = this; // Q
29982
29983 for (var bits = []; t.cmpn(0) !== 0; t.iushrn(1))
29984 bits.push(t.andln(1));
29985
29986 for (var i = bits.length - 1; i >= 0; i--) {
29987 if (bits[i] === 0) {
29988 // N * Q + Q = ((N / 2) * Q + Q)) + (N / 2) * Q
29989 a = a.diffAdd(b, c);
29990 // N * Q = 2 * ((N / 2) * Q + Q))
29991 b = b.dbl();
29992 } else {
29993 // N * Q = ((N / 2) * Q + Q) + ((N / 2) * Q)
29994 b = a.diffAdd(b, c);
29995 // N * Q + Q = 2 * ((N / 2) * Q + Q)
29996 a = a.dbl();
29997 }
ebd8d4e8 29998 }
8b095871
IC
29999 return b;
30000};
ebd8d4e8 30001
8b095871
IC
30002Point.prototype.mulAdd = function mulAdd() {
30003 throw new Error('Not supported on Montgomery curve');
30004};
ebd8d4e8 30005
8b095871
IC
30006Point.prototype.jumlAdd = function jumlAdd() {
30007 throw new Error('Not supported on Montgomery curve');
30008};
ebd8d4e8 30009
8b095871
IC
30010Point.prototype.eq = function eq(other) {
30011 return this.getX().cmp(other.getX()) === 0;
30012};
ebd8d4e8 30013
8b095871
IC
30014Point.prototype.normalize = function normalize() {
30015 this.x = this.x.redMul(this.z.redInvm());
30016 this.z = this.curve.one;
30017 return this;
30018};
ebd8d4e8 30019
8b095871
IC
30020Point.prototype.getX = function getX() {
30021 // Normalize coordinates
30022 this.normalize();
30023
30024 return this.x.fromRed();
30025};
30026
30027},{"../../elliptic":39,"../curve":42,"bn.js":33,"inherits":63}],44:[function(require,module,exports){
ab78acc6 30028'use strict';
ebd8d4e8 30029
8b095871
IC
30030var curve = require('../curve');
30031var elliptic = require('../../elliptic');
30032var BN = require('bn.js');
30033var inherits = require('inherits');
30034var Base = curve.base;
ab78acc6 30035
8b095871 30036var assert = elliptic.utils.assert;
ebd8d4e8 30037
8b095871
IC
30038function ShortCurve(conf) {
30039 Base.call(this, 'short', conf);
ebd8d4e8 30040
8b095871
IC
30041 this.a = new BN(conf.a, 16).toRed(this.red);
30042 this.b = new BN(conf.b, 16).toRed(this.red);
30043 this.tinv = this.two.redInvm();
ab78acc6 30044
8b095871
IC
30045 this.zeroA = this.a.fromRed().cmpn(0) === 0;
30046 this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0;
ab78acc6 30047
8b095871
IC
30048 // If the curve is endomorphic, precalculate beta and lambda
30049 this.endo = this._getEndomorphism(conf);
30050 this._endoWnafT1 = new Array(4);
30051 this._endoWnafT2 = new Array(4);
ebd8d4e8 30052}
8b095871
IC
30053inherits(ShortCurve, Base);
30054module.exports = ShortCurve;
ebd8d4e8 30055
8b095871
IC
30056ShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) {
30057 // No efficient endomorphism
30058 if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1)
30059 return;
ebd8d4e8 30060
8b095871
IC
30061 // Compute beta and lambda, that lambda * P = (beta * Px; Py)
30062 var beta;
30063 var lambda;
30064 if (conf.beta) {
30065 beta = new BN(conf.beta, 16).toRed(this.red);
30066 } else {
30067 var betas = this._getEndoRoots(this.p);
30068 // Choose the smallest beta
30069 beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1];
30070 beta = beta.toRed(this.red);
30071 }
30072 if (conf.lambda) {
30073 lambda = new BN(conf.lambda, 16);
30074 } else {
30075 // Choose the lambda that is matching selected beta
30076 var lambdas = this._getEndoRoots(this.n);
30077 if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) {
30078 lambda = lambdas[0];
30079 } else {
30080 lambda = lambdas[1];
30081 assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0);
30082 }
30083 }
ab78acc6 30084
8b095871
IC
30085 // Get basis vectors, used for balanced length-two representation
30086 var basis;
30087 if (conf.basis) {
30088 basis = conf.basis.map(function(vec) {
30089 return {
30090 a: new BN(vec.a, 16),
30091 b: new BN(vec.b, 16)
30092 };
30093 });
30094 } else {
30095 basis = this._getEndoBasis(lambda);
30096 }
ab78acc6 30097
8b095871
IC
30098 return {
30099 beta: beta,
30100 lambda: lambda,
30101 basis: basis
30102 };
30103};
ab78acc6 30104
8b095871
IC
30105ShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) {
30106 // Find roots of for x^2 + x + 1 in F
30107 // Root = (-1 +- Sqrt(-3)) / 2
30108 //
30109 var red = num === this.p ? this.red : BN.mont(num);
30110 var tinv = new BN(2).toRed(red).redInvm();
30111 var ntinv = tinv.redNeg();
ab78acc6 30112
8b095871 30113 var s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv);
ab78acc6 30114
8b095871
IC
30115 var l1 = ntinv.redAdd(s).fromRed();
30116 var l2 = ntinv.redSub(s).fromRed();
30117 return [ l1, l2 ];
30118};
ab78acc6 30119
8b095871
IC
30120ShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) {
30121 // aprxSqrt >= sqrt(this.n)
30122 var aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2));
30123
30124 // 3.74
30125 // Run EGCD, until r(L + 1) < aprxSqrt
30126 var u = lambda;
30127 var v = this.n.clone();
30128 var x1 = new BN(1);
30129 var y1 = new BN(0);
30130 var x2 = new BN(0);
30131 var y2 = new BN(1);
30132
30133 // NOTE: all vectors are roots of: a + b * lambda = 0 (mod n)
30134 var a0;
30135 var b0;
30136 // First vector
30137 var a1;
30138 var b1;
30139 // Second vector
30140 var a2;
30141 var b2;
30142
30143 var prevR;
30144 var i = 0;
30145 var r;
30146 var x;
30147 while (u.cmpn(0) !== 0) {
30148 var q = v.div(u);
30149 r = v.sub(q.mul(u));
30150 x = x2.sub(q.mul(x1));
30151 var y = y2.sub(q.mul(y1));
30152
30153 if (!a1 && r.cmp(aprxSqrt) < 0) {
30154 a0 = prevR.neg();
30155 b0 = x1;
30156 a1 = r.neg();
30157 b1 = x;
30158 } else if (a1 && ++i === 2) {
30159 break;
ab78acc6 30160 }
8b095871 30161 prevR = r;
ab78acc6 30162
8b095871
IC
30163 v = u;
30164 u = r;
30165 x2 = x1;
30166 x1 = x;
30167 y2 = y1;
30168 y1 = y;
ebd8d4e8 30169 }
8b095871
IC
30170 a2 = r.neg();
30171 b2 = x;
ab78acc6 30172
8b095871
IC
30173 var len1 = a1.sqr().add(b1.sqr());
30174 var len2 = a2.sqr().add(b2.sqr());
30175 if (len2.cmp(len1) >= 0) {
30176 a2 = a0;
30177 b2 = b0;
30178 }
ebd8d4e8 30179
8b095871
IC
30180 // Normalize signs
30181 if (a1.negative) {
30182 a1 = a1.neg();
30183 b1 = b1.neg();
30184 }
30185 if (a2.negative) {
30186 a2 = a2.neg();
30187 b2 = b2.neg();
30188 }
ebd8d4e8 30189
8b095871
IC
30190 return [
30191 { a: a1, b: b1 },
30192 { a: a2, b: b2 }
30193 ];
30194};
ab78acc6 30195
8b095871
IC
30196ShortCurve.prototype._endoSplit = function _endoSplit(k) {
30197 var basis = this.endo.basis;
30198 var v1 = basis[0];
30199 var v2 = basis[1];
ab78acc6 30200
8b095871
IC
30201 var c1 = v2.b.mul(k).divRound(this.n);
30202 var c2 = v1.b.neg().mul(k).divRound(this.n);
ab78acc6 30203
8b095871
IC
30204 var p1 = c1.mul(v1.a);
30205 var p2 = c2.mul(v2.a);
30206 var q1 = c1.mul(v1.b);
30207 var q2 = c2.mul(v2.b);
ab78acc6 30208
8b095871
IC
30209 // Calculate answer
30210 var k1 = k.sub(p1).sub(p2);
30211 var k2 = q1.add(q2).neg();
30212 return { k1: k1, k2: k2 };
30213};
ab78acc6 30214
8b095871
IC
30215ShortCurve.prototype.pointFromX = function pointFromX(x, odd) {
30216 x = new BN(x, 16);
30217 if (!x.red)
30218 x = x.toRed(this.red);
ab78acc6 30219
8b095871
IC
30220 var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b);
30221 var y = y2.redSqrt();
30222 if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)
30223 throw new Error('invalid point');
ab78acc6 30224
8b095871
IC
30225 // XXX Is there any way to tell if the number is odd without converting it
30226 // to non-red form?
30227 var isOdd = y.fromRed().isOdd();
30228 if (odd && !isOdd || !odd && isOdd)
30229 y = y.redNeg();
ab78acc6 30230
8b095871
IC
30231 return this.point(x, y);
30232};
ab78acc6 30233
8b095871
IC
30234ShortCurve.prototype.validate = function validate(point) {
30235 if (point.inf)
30236 return true;
ab78acc6 30237
8b095871
IC
30238 var x = point.x;
30239 var y = point.y;
ab78acc6 30240
8b095871
IC
30241 var ax = this.a.redMul(x);
30242 var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b);
30243 return y.redSqr().redISub(rhs).cmpn(0) === 0;
30244};
ab78acc6 30245
8b095871
IC
30246ShortCurve.prototype._endoWnafMulAdd =
30247 function _endoWnafMulAdd(points, coeffs, jacobianResult) {
30248 var npoints = this._endoWnafT1;
30249 var ncoeffs = this._endoWnafT2;
30250 for (var i = 0; i < points.length; i++) {
30251 var split = this._endoSplit(coeffs[i]);
30252 var p = points[i];
30253 var beta = p._getBeta();
ab78acc6 30254
8b095871
IC
30255 if (split.k1.negative) {
30256 split.k1.ineg();
30257 p = p.neg(true);
30258 }
30259 if (split.k2.negative) {
30260 split.k2.ineg();
30261 beta = beta.neg(true);
ab78acc6 30262 }
ab78acc6 30263
8b095871
IC
30264 npoints[i * 2] = p;
30265 npoints[i * 2 + 1] = beta;
30266 ncoeffs[i * 2] = split.k1;
30267 ncoeffs[i * 2 + 1] = split.k2;
30268 }
30269 var res = this._wnafMulAdd(1, npoints, ncoeffs, i * 2, jacobianResult);
ab78acc6 30270
8b095871
IC
30271 // Clean-up references to points and coefficients
30272 for (var j = 0; j < i * 2; j++) {
30273 npoints[j] = null;
30274 ncoeffs[j] = null;
30275 }
30276 return res;
30277};
30278
30279function Point(curve, x, y, isRed) {
30280 Base.BasePoint.call(this, curve, 'affine');
30281 if (x === null && y === null) {
30282 this.x = null;
30283 this.y = null;
30284 this.inf = true;
30285 } else {
30286 this.x = new BN(x, 16);
30287 this.y = new BN(y, 16);
30288 // Force redgomery representation when loading from JSON
30289 if (isRed) {
30290 this.x.forceRed(this.curve.red);
30291 this.y.forceRed(this.curve.red);
ab78acc6 30292 }
8b095871
IC
30293 if (!this.x.red)
30294 this.x = this.x.toRed(this.curve.red);
30295 if (!this.y.red)
30296 this.y = this.y.toRed(this.curve.red);
30297 this.inf = false;
30298 }
30299}
30300inherits(Point, Base.BasePoint);
ab78acc6 30301
8b095871
IC
30302ShortCurve.prototype.point = function point(x, y, isRed) {
30303 return new Point(this, x, y, isRed);
30304};
ab78acc6 30305
8b095871
IC
30306ShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) {
30307 return Point.fromJSON(this, obj, red);
30308};
ab78acc6 30309
8b095871
IC
30310Point.prototype._getBeta = function _getBeta() {
30311 if (!this.curve.endo)
30312 return;
ab78acc6 30313
8b095871
IC
30314 var pre = this.precomputed;
30315 if (pre && pre.beta)
30316 return pre.beta;
ab78acc6 30317
8b095871
IC
30318 var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y);
30319 if (pre) {
30320 var curve = this.curve;
30321 var endoMul = function(p) {
30322 return curve.point(p.x.redMul(curve.endo.beta), p.y);
30323 };
30324 pre.beta = beta;
30325 beta.precomputed = {
30326 beta: null,
30327 naf: pre.naf && {
30328 wnd: pre.naf.wnd,
30329 points: pre.naf.points.map(endoMul)
30330 },
30331 doubles: pre.doubles && {
30332 step: pre.doubles.step,
30333 points: pre.doubles.points.map(endoMul)
30334 }
ab78acc6 30335 };
ab78acc6 30336 }
8b095871 30337 return beta;
ab78acc6
IC
30338};
30339
8b095871
IC
30340Point.prototype.toJSON = function toJSON() {
30341 if (!this.precomputed)
30342 return [ this.x, this.y ];
ab78acc6 30343
8b095871
IC
30344 return [ this.x, this.y, this.precomputed && {
30345 doubles: this.precomputed.doubles && {
30346 step: this.precomputed.doubles.step,
30347 points: this.precomputed.doubles.points.slice(1)
30348 },
30349 naf: this.precomputed.naf && {
30350 wnd: this.precomputed.naf.wnd,
30351 points: this.precomputed.naf.points.slice(1)
30352 }
30353 } ];
30354};
ab78acc6 30355
8b095871
IC
30356Point.fromJSON = function fromJSON(curve, obj, red) {
30357 if (typeof obj === 'string')
30358 obj = JSON.parse(obj);
30359 var res = curve.point(obj[0], obj[1], red);
30360 if (!obj[2])
30361 return res;
ab78acc6 30362
8b095871
IC
30363 function obj2point(obj) {
30364 return curve.point(obj[0], obj[1], red);
30365 }
30366
30367 var pre = obj[2];
30368 res.precomputed = {
30369 beta: null,
30370 doubles: pre.doubles && {
30371 step: pre.doubles.step,
30372 points: [ res ].concat(pre.doubles.points.map(obj2point))
30373 },
30374 naf: pre.naf && {
30375 wnd: pre.naf.wnd,
30376 points: [ res ].concat(pre.naf.points.map(obj2point))
ab78acc6 30377 }
8b095871
IC
30378 };
30379 return res;
30380};
ab78acc6 30381
8b095871
IC
30382Point.prototype.inspect = function inspect() {
30383 if (this.isInfinity())
30384 return '<EC Point Infinity>';
30385 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
30386 ' y: ' + this.y.fromRed().toString(16, 2) + '>';
30387};
ab78acc6 30388
8b095871
IC
30389Point.prototype.isInfinity = function isInfinity() {
30390 return this.inf;
30391};
ebd8d4e8 30392
8b095871
IC
30393Point.prototype.add = function add(p) {
30394 // O + P = P
30395 if (this.inf)
30396 return p;
ab78acc6 30397
8b095871
IC
30398 // P + O = P
30399 if (p.inf)
30400 return this;
ab78acc6 30401
8b095871
IC
30402 // P + P = 2P
30403 if (this.eq(p))
30404 return this.dbl();
ab78acc6 30405
8b095871
IC
30406 // P + (-P) = O
30407 if (this.neg().eq(p))
30408 return this.curve.point(null, null);
ab78acc6 30409
8b095871
IC
30410 // P + Q = O
30411 if (this.x.cmp(p.x) === 0)
30412 return this.curve.point(null, null);
ebd8d4e8 30413
8b095871
IC
30414 var c = this.y.redSub(p.y);
30415 if (c.cmpn(0) !== 0)
30416 c = c.redMul(this.x.redSub(p.x).redInvm());
30417 var nx = c.redSqr().redISub(this.x).redISub(p.x);
30418 var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);
30419 return this.curve.point(nx, ny);
30420};
ab78acc6 30421
8b095871
IC
30422Point.prototype.dbl = function dbl() {
30423 if (this.inf)
30424 return this;
ebd8d4e8 30425
8b095871
IC
30426 // 2P = O
30427 var ys1 = this.y.redAdd(this.y);
30428 if (ys1.cmpn(0) === 0)
30429 return this.curve.point(null, null);
ebd8d4e8 30430
8b095871 30431 var a = this.curve.a;
ebd8d4e8 30432
8b095871
IC
30433 var x2 = this.x.redSqr();
30434 var dyinv = ys1.redInvm();
30435 var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv);
ebd8d4e8 30436
8b095871
IC
30437 var nx = c.redSqr().redISub(this.x.redAdd(this.x));
30438 var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);
30439 return this.curve.point(nx, ny);
30440};
ebd8d4e8 30441
8b095871
IC
30442Point.prototype.getX = function getX() {
30443 return this.x.fromRed();
30444};
ab78acc6 30445
8b095871
IC
30446Point.prototype.getY = function getY() {
30447 return this.y.fromRed();
30448};
ebd8d4e8 30449
8b095871
IC
30450Point.prototype.mul = function mul(k) {
30451 k = new BN(k, 16);
ebd8d4e8 30452
8b095871
IC
30453 if (this._hasDoubles(k))
30454 return this.curve._fixedNafMul(this, k);
30455 else if (this.curve.endo)
30456 return this.curve._endoWnafMulAdd([ this ], [ k ]);
30457 else
30458 return this.curve._wnafMul(this, k);
30459};
ebd8d4e8 30460
8b095871
IC
30461Point.prototype.mulAdd = function mulAdd(k1, p2, k2) {
30462 var points = [ this, p2 ];
30463 var coeffs = [ k1, k2 ];
30464 if (this.curve.endo)
30465 return this.curve._endoWnafMulAdd(points, coeffs);
30466 else
30467 return this.curve._wnafMulAdd(1, points, coeffs, 2);
30468};
ebd8d4e8 30469
8b095871
IC
30470Point.prototype.jmulAdd = function jmulAdd(k1, p2, k2) {
30471 var points = [ this, p2 ];
30472 var coeffs = [ k1, k2 ];
30473 if (this.curve.endo)
30474 return this.curve._endoWnafMulAdd(points, coeffs, true);
30475 else
30476 return this.curve._wnafMulAdd(1, points, coeffs, 2, true);
30477};
ebd8d4e8 30478
8b095871
IC
30479Point.prototype.eq = function eq(p) {
30480 return this === p ||
30481 this.inf === p.inf &&
30482 (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0);
30483};
ebd8d4e8 30484
8b095871
IC
30485Point.prototype.neg = function neg(_precompute) {
30486 if (this.inf)
30487 return this;
ebd8d4e8 30488
8b095871
IC
30489 var res = this.curve.point(this.x, this.y.redNeg());
30490 if (_precompute && this.precomputed) {
30491 var pre = this.precomputed;
30492 var negate = function(p) {
30493 return p.neg();
30494 };
30495 res.precomputed = {
30496 naf: pre.naf && {
30497 wnd: pre.naf.wnd,
30498 points: pre.naf.points.map(negate)
30499 },
30500 doubles: pre.doubles && {
30501 step: pre.doubles.step,
30502 points: pre.doubles.points.map(negate)
30503 }
30504 };
30505 }
30506 return res;
30507};
ebd8d4e8 30508
8b095871
IC
30509Point.prototype.toJ = function toJ() {
30510 if (this.inf)
30511 return this.curve.jpoint(null, null, null);
ebd8d4e8 30512
8b095871
IC
30513 var res = this.curve.jpoint(this.x, this.y, this.curve.one);
30514 return res;
30515};
ebd8d4e8 30516
8b095871
IC
30517function JPoint(curve, x, y, z) {
30518 Base.BasePoint.call(this, curve, 'jacobian');
30519 if (x === null && y === null && z === null) {
30520 this.x = this.curve.one;
30521 this.y = this.curve.one;
30522 this.z = new BN(0);
30523 } else {
30524 this.x = new BN(x, 16);
30525 this.y = new BN(y, 16);
30526 this.z = new BN(z, 16);
30527 }
30528 if (!this.x.red)
30529 this.x = this.x.toRed(this.curve.red);
30530 if (!this.y.red)
30531 this.y = this.y.toRed(this.curve.red);
30532 if (!this.z.red)
30533 this.z = this.z.toRed(this.curve.red);
ebd8d4e8 30534
8b095871 30535 this.zOne = this.z === this.curve.one;
ab78acc6 30536}
8b095871 30537inherits(JPoint, Base.BasePoint);
ab78acc6 30538
8b095871
IC
30539ShortCurve.prototype.jpoint = function jpoint(x, y, z) {
30540 return new JPoint(this, x, y, z);
30541};
ab78acc6 30542
8b095871
IC
30543JPoint.prototype.toP = function toP() {
30544 if (this.isInfinity())
30545 return this.curve.point(null, null);
ab78acc6 30546
8b095871
IC
30547 var zinv = this.z.redInvm();
30548 var zinv2 = zinv.redSqr();
30549 var ax = this.x.redMul(zinv2);
30550 var ay = this.y.redMul(zinv2).redMul(zinv);
ab78acc6 30551
8b095871
IC
30552 return this.curve.point(ax, ay);
30553};
ab78acc6 30554
8b095871
IC
30555JPoint.prototype.neg = function neg() {
30556 return this.curve.jpoint(this.x, this.y.redNeg(), this.z);
30557};
ab78acc6 30558
8b095871
IC
30559JPoint.prototype.add = function add(p) {
30560 // O + P = P
30561 if (this.isInfinity())
30562 return p;
ab78acc6 30563
8b095871
IC
30564 // P + O = P
30565 if (p.isInfinity())
30566 return this;
ab78acc6 30567
8b095871
IC
30568 // 12M + 4S + 7A
30569 var pz2 = p.z.redSqr();
30570 var z2 = this.z.redSqr();
30571 var u1 = this.x.redMul(pz2);
30572 var u2 = p.x.redMul(z2);
30573 var s1 = this.y.redMul(pz2.redMul(p.z));
30574 var s2 = p.y.redMul(z2.redMul(this.z));
30575
30576 var h = u1.redSub(u2);
30577 var r = s1.redSub(s2);
30578 if (h.cmpn(0) === 0) {
30579 if (r.cmpn(0) !== 0)
30580 return this.curve.jpoint(null, null, null);
30581 else
30582 return this.dbl();
30583 }
ab78acc6 30584
8b095871
IC
30585 var h2 = h.redSqr();
30586 var h3 = h2.redMul(h);
30587 var v = u1.redMul(h2);
ab78acc6 30588
8b095871
IC
30589 var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);
30590 var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));
30591 var nz = this.z.redMul(p.z).redMul(h);
ab78acc6 30592
8b095871
IC
30593 return this.curve.jpoint(nx, ny, nz);
30594};
ab78acc6 30595
8b095871
IC
30596JPoint.prototype.mixedAdd = function mixedAdd(p) {
30597 // O + P = P
30598 if (this.isInfinity())
30599 return p.toJ();
ab78acc6 30600
8b095871
IC
30601 // P + O = P
30602 if (p.isInfinity())
30603 return this;
ab78acc6 30604
8b095871
IC
30605 // 8M + 3S + 7A
30606 var z2 = this.z.redSqr();
30607 var u1 = this.x;
30608 var u2 = p.x.redMul(z2);
30609 var s1 = this.y;
30610 var s2 = p.y.redMul(z2).redMul(this.z);
30611
30612 var h = u1.redSub(u2);
30613 var r = s1.redSub(s2);
30614 if (h.cmpn(0) === 0) {
30615 if (r.cmpn(0) !== 0)
30616 return this.curve.jpoint(null, null, null);
30617 else
30618 return this.dbl();
ab78acc6
IC
30619 }
30620
8b095871
IC
30621 var h2 = h.redSqr();
30622 var h3 = h2.redMul(h);
30623 var v = u1.redMul(h2);
ab78acc6 30624
8b095871
IC
30625 var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);
30626 var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));
30627 var nz = this.z.redMul(h);
ab78acc6 30628
8b095871
IC
30629 return this.curve.jpoint(nx, ny, nz);
30630};
ab78acc6 30631
8b095871
IC
30632JPoint.prototype.dblp = function dblp(pow) {
30633 if (pow === 0)
30634 return this;
30635 if (this.isInfinity())
30636 return this;
30637 if (!pow)
30638 return this.dbl();
30639
30640 if (this.curve.zeroA || this.curve.threeA) {
30641 var r = this;
30642 for (var i = 0; i < pow; i++)
30643 r = r.dbl();
30644 return r;
30645 }
30646
30647 // 1M + 2S + 1A + N * (4S + 5M + 8A)
30648 // N = 1 => 6M + 6S + 9A
30649 var a = this.curve.a;
30650 var tinv = this.curve.tinv;
30651
30652 var jx = this.x;
30653 var jy = this.y;
30654 var jz = this.z;
30655 var jz4 = jz.redSqr().redSqr();
30656
30657 // Reuse results
30658 var jyd = jy.redAdd(jy);
30659 for (var i = 0; i < pow; i++) {
30660 var jx2 = jx.redSqr();
30661 var jyd2 = jyd.redSqr();
30662 var jyd4 = jyd2.redSqr();
30663 var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));
30664
30665 var t1 = jx.redMul(jyd2);
30666 var nx = c.redSqr().redISub(t1.redAdd(t1));
30667 var t2 = t1.redISub(nx);
30668 var dny = c.redMul(t2);
30669 dny = dny.redIAdd(dny).redISub(jyd4);
30670 var nz = jyd.redMul(jz);
30671 if (i + 1 < pow)
30672 jz4 = jz4.redMul(jyd4);
30673
30674 jx = nx;
30675 jz = nz;
30676 jyd = dny;
30677 }
30678
30679 return this.curve.jpoint(jx, jyd.redMul(tinv), jz);
30680};
ab78acc6 30681
8b095871
IC
30682JPoint.prototype.dbl = function dbl() {
30683 if (this.isInfinity())
30684 return this;
ab78acc6 30685
8b095871
IC
30686 if (this.curve.zeroA)
30687 return this._zeroDbl();
30688 else if (this.curve.threeA)
30689 return this._threeDbl();
30690 else
30691 return this._dbl();
30692};
ab78acc6 30693
8b095871
IC
30694JPoint.prototype._zeroDbl = function _zeroDbl() {
30695 var nx;
30696 var ny;
30697 var nz;
30698 // Z = 1
30699 if (this.zOne) {
30700 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html
30701 // #doubling-mdbl-2007-bl
30702 // 1M + 5S + 14A
30703
30704 // XX = X1^2
30705 var xx = this.x.redSqr();
30706 // YY = Y1^2
30707 var yy = this.y.redSqr();
30708 // YYYY = YY^2
30709 var yyyy = yy.redSqr();
30710 // S = 2 * ((X1 + YY)^2 - XX - YYYY)
30711 var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
30712 s = s.redIAdd(s);
30713 // M = 3 * XX + a; a = 0
30714 var m = xx.redAdd(xx).redIAdd(xx);
30715 // T = M ^ 2 - 2*S
30716 var t = m.redSqr().redISub(s).redISub(s);
30717
30718 // 8 * YYYY
30719 var yyyy8 = yyyy.redIAdd(yyyy);
30720 yyyy8 = yyyy8.redIAdd(yyyy8);
30721 yyyy8 = yyyy8.redIAdd(yyyy8);
30722
30723 // X3 = T
30724 nx = t;
30725 // Y3 = M * (S - T) - 8 * YYYY
30726 ny = m.redMul(s.redISub(t)).redISub(yyyy8);
30727 // Z3 = 2*Y1
30728 nz = this.y.redAdd(this.y);
30729 } else {
30730 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html
30731 // #doubling-dbl-2009-l
30732 // 2M + 5S + 13A
30733
30734 // A = X1^2
30735 var a = this.x.redSqr();
30736 // B = Y1^2
30737 var b = this.y.redSqr();
30738 // C = B^2
30739 var c = b.redSqr();
30740 // D = 2 * ((X1 + B)^2 - A - C)
30741 var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c);
30742 d = d.redIAdd(d);
30743 // E = 3 * A
30744 var e = a.redAdd(a).redIAdd(a);
30745 // F = E^2
30746 var f = e.redSqr();
30747
30748 // 8 * C
30749 var c8 = c.redIAdd(c);
30750 c8 = c8.redIAdd(c8);
30751 c8 = c8.redIAdd(c8);
30752
30753 // X3 = F - 2 * D
30754 nx = f.redISub(d).redISub(d);
30755 // Y3 = E * (D - X3) - 8 * C
30756 ny = e.redMul(d.redISub(nx)).redISub(c8);
30757 // Z3 = 2 * Y1 * Z1
30758 nz = this.y.redMul(this.z);
30759 nz = nz.redIAdd(nz);
30760 }
30761
30762 return this.curve.jpoint(nx, ny, nz);
30763};
ab78acc6 30764
8b095871
IC
30765JPoint.prototype._threeDbl = function _threeDbl() {
30766 var nx;
30767 var ny;
30768 var nz;
30769 // Z = 1
30770 if (this.zOne) {
30771 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html
30772 // #doubling-mdbl-2007-bl
30773 // 1M + 5S + 15A
30774
30775 // XX = X1^2
30776 var xx = this.x.redSqr();
30777 // YY = Y1^2
30778 var yy = this.y.redSqr();
30779 // YYYY = YY^2
30780 var yyyy = yy.redSqr();
30781 // S = 2 * ((X1 + YY)^2 - XX - YYYY)
30782 var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
30783 s = s.redIAdd(s);
30784 // M = 3 * XX + a
30785 var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a);
30786 // T = M^2 - 2 * S
30787 var t = m.redSqr().redISub(s).redISub(s);
30788 // X3 = T
30789 nx = t;
30790 // Y3 = M * (S - T) - 8 * YYYY
30791 var yyyy8 = yyyy.redIAdd(yyyy);
30792 yyyy8 = yyyy8.redIAdd(yyyy8);
30793 yyyy8 = yyyy8.redIAdd(yyyy8);
30794 ny = m.redMul(s.redISub(t)).redISub(yyyy8);
30795 // Z3 = 2 * Y1
30796 nz = this.y.redAdd(this.y);
30797 } else {
30798 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b
30799 // 3M + 5S
30800
30801 // delta = Z1^2
30802 var delta = this.z.redSqr();
30803 // gamma = Y1^2
30804 var gamma = this.y.redSqr();
30805 // beta = X1 * gamma
30806 var beta = this.x.redMul(gamma);
30807 // alpha = 3 * (X1 - delta) * (X1 + delta)
30808 var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta));
30809 alpha = alpha.redAdd(alpha).redIAdd(alpha);
30810 // X3 = alpha^2 - 8 * beta
30811 var beta4 = beta.redIAdd(beta);
30812 beta4 = beta4.redIAdd(beta4);
30813 var beta8 = beta4.redAdd(beta4);
30814 nx = alpha.redSqr().redISub(beta8);
30815 // Z3 = (Y1 + Z1)^2 - gamma - delta
30816 nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta);
30817 // Y3 = alpha * (4 * beta - X3) - 8 * gamma^2
30818 var ggamma8 = gamma.redSqr();
30819 ggamma8 = ggamma8.redIAdd(ggamma8);
30820 ggamma8 = ggamma8.redIAdd(ggamma8);
30821 ggamma8 = ggamma8.redIAdd(ggamma8);
30822 ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8);
30823 }
30824
30825 return this.curve.jpoint(nx, ny, nz);
30826};
ab78acc6 30827
8b095871
IC
30828JPoint.prototype._dbl = function _dbl() {
30829 var a = this.curve.a;
ab78acc6 30830
8b095871
IC
30831 // 4M + 6S + 10A
30832 var jx = this.x;
30833 var jy = this.y;
30834 var jz = this.z;
30835 var jz4 = jz.redSqr().redSqr();
ab78acc6 30836
8b095871
IC
30837 var jx2 = jx.redSqr();
30838 var jy2 = jy.redSqr();
ebd8d4e8 30839
8b095871 30840 var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));
ebd8d4e8 30841
8b095871
IC
30842 var jxd4 = jx.redAdd(jx);
30843 jxd4 = jxd4.redIAdd(jxd4);
30844 var t1 = jxd4.redMul(jy2);
30845 var nx = c.redSqr().redISub(t1.redAdd(t1));
30846 var t2 = t1.redISub(nx);
ebd8d4e8 30847
8b095871
IC
30848 var jyd8 = jy2.redSqr();
30849 jyd8 = jyd8.redIAdd(jyd8);
30850 jyd8 = jyd8.redIAdd(jyd8);
30851 jyd8 = jyd8.redIAdd(jyd8);
30852 var ny = c.redMul(t2).redISub(jyd8);
30853 var nz = jy.redAdd(jy).redMul(jz);
ebd8d4e8 30854
8b095871
IC
30855 return this.curve.jpoint(nx, ny, nz);
30856};
ebd8d4e8 30857
8b095871
IC
30858JPoint.prototype.trpl = function trpl() {
30859 if (!this.curve.zeroA)
30860 return this.dbl().add(this);
30861
30862 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl
30863 // 5M + 10S + ...
30864
30865 // XX = X1^2
30866 var xx = this.x.redSqr();
30867 // YY = Y1^2
30868 var yy = this.y.redSqr();
30869 // ZZ = Z1^2
30870 var zz = this.z.redSqr();
30871 // YYYY = YY^2
30872 var yyyy = yy.redSqr();
30873 // M = 3 * XX + a * ZZ2; a = 0
30874 var m = xx.redAdd(xx).redIAdd(xx);
30875 // MM = M^2
30876 var mm = m.redSqr();
30877 // E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM
30878 var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
30879 e = e.redIAdd(e);
30880 e = e.redAdd(e).redIAdd(e);
30881 e = e.redISub(mm);
30882 // EE = E^2
30883 var ee = e.redSqr();
30884 // T = 16*YYYY
30885 var t = yyyy.redIAdd(yyyy);
30886 t = t.redIAdd(t);
30887 t = t.redIAdd(t);
30888 t = t.redIAdd(t);
30889 // U = (M + E)^2 - MM - EE - T
30890 var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t);
30891 // X3 = 4 * (X1 * EE - 4 * YY * U)
30892 var yyu4 = yy.redMul(u);
30893 yyu4 = yyu4.redIAdd(yyu4);
30894 yyu4 = yyu4.redIAdd(yyu4);
30895 var nx = this.x.redMul(ee).redISub(yyu4);
30896 nx = nx.redIAdd(nx);
30897 nx = nx.redIAdd(nx);
30898 // Y3 = 8 * Y1 * (U * (T - U) - E * EE)
30899 var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee)));
30900 ny = ny.redIAdd(ny);
30901 ny = ny.redIAdd(ny);
30902 ny = ny.redIAdd(ny);
30903 // Z3 = (Z1 + E)^2 - ZZ - EE
30904 var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee);
30905
30906 return this.curve.jpoint(nx, ny, nz);
30907};
ebd8d4e8 30908
8b095871
IC
30909JPoint.prototype.mul = function mul(k, kbase) {
30910 k = new BN(k, kbase);
ebd8d4e8 30911
8b095871
IC
30912 return this.curve._wnafMul(this, k);
30913};
ebd8d4e8 30914
8b095871
IC
30915JPoint.prototype.eq = function eq(p) {
30916 if (p.type === 'affine')
30917 return this.eq(p.toJ());
ebd8d4e8 30918
8b095871
IC
30919 if (this === p)
30920 return true;
ebd8d4e8 30921
8b095871
IC
30922 // x1 * z2^2 == x2 * z1^2
30923 var z2 = this.z.redSqr();
30924 var pz2 = p.z.redSqr();
30925 if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0)
30926 return false;
ebd8d4e8 30927
8b095871
IC
30928 // y1 * z2^3 == y2 * z1^3
30929 var z3 = z2.redMul(this.z);
30930 var pz3 = pz2.redMul(p.z);
30931 return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0;
30932};
ab78acc6 30933
8b095871
IC
30934JPoint.prototype.eqXToP = function eqXToP(x) {
30935 var zs = this.z.redSqr();
30936 var rx = x.toRed(this.curve.red).redMul(zs);
30937 if (this.x.cmp(rx) === 0)
30938 return true;
ebd8d4e8 30939
8b095871
IC
30940 var xc = x.clone();
30941 var t = this.curve.redN.redMul(zs);
30942 for (;;) {
30943 xc.iadd(this.curve.n);
30944 if (xc.cmp(this.curve.p) >= 0)
30945 return false;
ebd8d4e8 30946
8b095871
IC
30947 rx.redIAdd(t);
30948 if (this.x.cmp(rx) === 0)
30949 return true;
30950 }
30951 return false;
30952};
ebd8d4e8 30953
8b095871
IC
30954JPoint.prototype.inspect = function inspect() {
30955 if (this.isInfinity())
30956 return '<EC JPoint Infinity>';
30957 return '<EC JPoint x: ' + this.x.toString(16, 2) +
30958 ' y: ' + this.y.toString(16, 2) +
30959 ' z: ' + this.z.toString(16, 2) + '>';
30960};
ebd8d4e8 30961
8b095871
IC
30962JPoint.prototype.isInfinity = function isInfinity() {
30963 // XXX This code assumes that zero is always zero in red
30964 return this.z.cmpn(0) === 0;
30965};
ebd8d4e8 30966
8b095871
IC
30967},{"../../elliptic":39,"../curve":42,"bn.js":33,"inherits":63}],45:[function(require,module,exports){
30968'use strict';
ebd8d4e8 30969
8b095871 30970var curves = exports;
ebd8d4e8 30971
8b095871
IC
30972var hash = require('hash.js');
30973var elliptic = require('../elliptic');
ebd8d4e8 30974
8b095871 30975var assert = elliptic.utils.assert;
ebd8d4e8 30976
8b095871
IC
30977function PresetCurve(options) {
30978 if (options.type === 'short')
30979 this.curve = new elliptic.curve.short(options);
30980 else if (options.type === 'edwards')
30981 this.curve = new elliptic.curve.edwards(options);
30982 else
30983 this.curve = new elliptic.curve.mont(options);
30984 this.g = this.curve.g;
30985 this.n = this.curve.n;
30986 this.hash = options.hash;
30987
30988 assert(this.g.validate(), 'Invalid curve');
30989 assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, G*N != O');
30990}
30991curves.PresetCurve = PresetCurve;
30992
30993function defineCurve(name, options) {
30994 Object.defineProperty(curves, name, {
30995 configurable: true,
30996 enumerable: true,
30997 get: function() {
30998 var curve = new PresetCurve(options);
30999 Object.defineProperty(curves, name, {
31000 configurable: true,
31001 enumerable: true,
31002 value: curve
31003 });
31004 return curve;
31005 }
31006 });
ebd8d4e8
IC
31007}
31008
8b095871
IC
31009defineCurve('p192', {
31010 type: 'short',
31011 prime: 'p192',
31012 p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff',
31013 a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc',
31014 b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1',
31015 n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831',
31016 hash: hash.sha256,
31017 gRed: false,
31018 g: [
31019 '188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012',
31020 '07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811'
31021 ]
31022});
ebd8d4e8 31023
8b095871
IC
31024defineCurve('p224', {
31025 type: 'short',
31026 prime: 'p224',
31027 p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001',
31028 a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe',
31029 b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4',
31030 n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d',
31031 hash: hash.sha256,
31032 gRed: false,
31033 g: [
31034 'b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21',
31035 'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34'
31036 ]
31037});
ebd8d4e8 31038
8b095871
IC
31039defineCurve('p256', {
31040 type: 'short',
31041 prime: null,
31042 p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff',
31043 a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc',
31044 b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b',
31045 n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551',
31046 hash: hash.sha256,
31047 gRed: false,
31048 g: [
31049 '6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296',
31050 '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5'
31051 ]
31052});
ebd8d4e8 31053
8b095871
IC
31054defineCurve('p384', {
31055 type: 'short',
31056 prime: null,
31057 p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
31058 'fffffffe ffffffff 00000000 00000000 ffffffff',
31059 a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
31060 'fffffffe ffffffff 00000000 00000000 fffffffc',
31061 b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' +
31062 '5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef',
31063 n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' +
31064 'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973',
31065 hash: hash.sha384,
31066 gRed: false,
31067 g: [
31068 'aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 ' +
31069 '5502f25d bf55296c 3a545e38 72760ab7',
31070 '3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 ' +
31071 '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f'
31072 ]
31073});
ebd8d4e8 31074
8b095871
IC
31075defineCurve('p521', {
31076 type: 'short',
31077 prime: null,
31078 p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
31079 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
31080 'ffffffff ffffffff ffffffff ffffffff ffffffff',
31081 a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
31082 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
31083 'ffffffff ffffffff ffffffff ffffffff fffffffc',
31084 b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' +
31085 '99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' +
31086 '3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00',
31087 n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
31088 'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' +
31089 'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409',
31090 hash: hash.sha512,
31091 gRed: false,
31092 g: [
31093 '000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 ' +
31094 '053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 ' +
31095 'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66',
31096 '00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 ' +
31097 '579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 ' +
31098 '3fad0761 353c7086 a272c240 88be9476 9fd16650'
31099 ]
31100});
ebd8d4e8 31101
8b095871
IC
31102defineCurve('curve25519', {
31103 type: 'mont',
31104 prime: 'p25519',
31105 p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',
31106 a: '76d06',
31107 b: '1',
31108 n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',
31109 hash: hash.sha256,
31110 gRed: false,
31111 g: [
31112 '9'
31113 ]
31114});
ebd8d4e8 31115
8b095871
IC
31116defineCurve('ed25519', {
31117 type: 'edwards',
31118 prime: 'p25519',
31119 p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',
31120 a: '-1',
31121 c: '1',
31122 // -121665 * (121666^(-1)) (mod P)
31123 d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3',
31124 n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',
31125 hash: hash.sha256,
31126 gRed: false,
31127 g: [
31128 '216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a',
31129
31130 // 4/5
31131 '6666666666666666666666666666666666666666666666666666666666666658'
31132 ]
31133});
ebd8d4e8 31134
8b095871
IC
31135var pre;
31136try {
31137 pre = require('./precomputed/secp256k1');
31138} catch (e) {
31139 pre = undefined;
31140}
31141
31142defineCurve('secp256k1', {
31143 type: 'short',
31144 prime: 'k256',
31145 p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f',
31146 a: '0',
31147 b: '7',
31148 n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141',
31149 h: '1',
31150 hash: hash.sha256,
31151
31152 // Precomputed endomorphism
31153 beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee',
31154 lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72',
31155 basis: [
31156 {
31157 a: '3086d221a7d46bcde86c90e49284eb15',
31158 b: '-e4437ed6010e88286f547fa90abfe4c3'
31159 },
31160 {
31161 a: '114ca50f7a8e2f3f657c1108d9d44cfd8',
31162 b: '3086d221a7d46bcde86c90e49284eb15'
31163 }
31164 ],
ebd8d4e8 31165
8b095871
IC
31166 gRed: false,
31167 g: [
31168 '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798',
31169 '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8',
31170 pre
31171 ]
31172});
ebd8d4e8 31173
8b095871
IC
31174},{"../elliptic":39,"./precomputed/secp256k1":53,"hash.js":57}],46:[function(require,module,exports){
31175'use strict';
ebd8d4e8 31176
8b095871
IC
31177var BN = require('bn.js');
31178var elliptic = require('../../elliptic');
31179var utils = elliptic.utils;
31180var assert = utils.assert;
ebd8d4e8 31181
8b095871
IC
31182var KeyPair = require('./key');
31183var Signature = require('./signature');
ebd8d4e8 31184
8b095871
IC
31185function EC(options) {
31186 if (!(this instanceof EC))
31187 return new EC(options);
ebd8d4e8 31188
8b095871
IC
31189 // Shortcut `elliptic.ec(curve-name)`
31190 if (typeof options === 'string') {
31191 assert(elliptic.curves.hasOwnProperty(options), 'Unknown curve ' + options);
31192
31193 options = elliptic.curves[options];
ebd8d4e8
IC
31194 }
31195
8b095871
IC
31196 // Shortcut for `elliptic.ec(elliptic.curves.curveName)`
31197 if (options instanceof elliptic.curves.PresetCurve)
31198 options = { curve: options };
ebd8d4e8 31199
8b095871
IC
31200 this.curve = options.curve.curve;
31201 this.n = this.curve.n;
31202 this.nh = this.n.ushrn(1);
31203 this.g = this.curve.g;
ebd8d4e8 31204
8b095871
IC
31205 // Point on curve
31206 this.g = options.curve.g;
31207 this.g.precompute(options.curve.n.bitLength() + 1);
ebd8d4e8 31208
8b095871
IC
31209 // Hash for function for DRBG
31210 this.hash = options.hash || options.curve.hash;
ebd8d4e8 31211}
8b095871 31212module.exports = EC;
ebd8d4e8 31213
8b095871
IC
31214EC.prototype.keyPair = function keyPair(options) {
31215 return new KeyPair(this, options);
31216};
31217
31218EC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) {
31219 return KeyPair.fromPrivate(this, priv, enc);
31220};
31221
31222EC.prototype.keyFromPublic = function keyFromPublic(pub, enc) {
31223 return KeyPair.fromPublic(this, pub, enc);
31224};
31225
31226EC.prototype.genKeyPair = function genKeyPair(options) {
31227 if (!options)
31228 options = {};
31229
31230 // Instantiate Hmac_DRBG
31231 var drbg = new elliptic.hmacDRBG({
31232 hash: this.hash,
31233 pers: options.pers,
31234 entropy: options.entropy || elliptic.rand(this.hash.hmacStrength),
31235 nonce: this.n.toArray()
31236 });
ebd8d4e8 31237
8b095871
IC
31238 var bytes = this.n.byteLength();
31239 var ns2 = this.n.sub(new BN(2));
31240 do {
31241 var priv = new BN(drbg.generate(bytes));
31242 if (priv.cmp(ns2) > 0)
31243 continue;
ebd8d4e8 31244
8b095871
IC
31245 priv.iaddn(1);
31246 return this.keyFromPrivate(priv);
31247 } while (true);
31248};
ebd8d4e8 31249
8b095871
IC
31250EC.prototype._truncateToN = function truncateToN(msg, truncOnly) {
31251 var delta = msg.byteLength() * 8 - this.n.bitLength();
31252 if (delta > 0)
31253 msg = msg.ushrn(delta);
31254 if (!truncOnly && msg.cmp(this.n) >= 0)
31255 return msg.sub(this.n);
31256 else
31257 return msg;
31258};
ebd8d4e8 31259
8b095871
IC
31260EC.prototype.sign = function sign(msg, key, enc, options) {
31261 if (typeof enc === 'object') {
31262 options = enc;
31263 enc = null;
ebd8d4e8 31264 }
8b095871
IC
31265 if (!options)
31266 options = {};
ebd8d4e8 31267
8b095871
IC
31268 key = this.keyFromPrivate(key, enc);
31269 msg = this._truncateToN(new BN(msg, 16));
ebd8d4e8 31270
8b095871
IC
31271 // Zero-extend key to provide enough entropy
31272 var bytes = this.n.byteLength();
31273 var bkey = key.getPrivate().toArray('be', bytes);
ab78acc6 31274
8b095871
IC
31275 // Zero-extend nonce to have the same byte size as N
31276 var nonce = msg.toArray('be', bytes);
ab78acc6 31277
8b095871
IC
31278 // Instantiate Hmac_DRBG
31279 var drbg = new elliptic.hmacDRBG({
31280 hash: this.hash,
31281 entropy: bkey,
31282 nonce: nonce,
31283 pers: options.pers,
31284 persEnc: options.persEnc
31285 });
ab78acc6 31286
8b095871
IC
31287 // Number of bytes to generate
31288 var ns1 = this.n.sub(new BN(1));
ebd8d4e8 31289
8b095871
IC
31290 for (var iter = 0; true; iter++) {
31291 var k = options.k ?
31292 options.k(iter) :
31293 new BN(drbg.generate(this.n.byteLength()));
31294 k = this._truncateToN(k, true);
31295 if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0)
31296 continue;
ebd8d4e8 31297
8b095871
IC
31298 var kp = this.g.mul(k);
31299 if (kp.isInfinity())
31300 continue;
ebd8d4e8 31301
8b095871
IC
31302 var kpX = kp.getX();
31303 var r = kpX.umod(this.n);
31304 if (r.cmpn(0) === 0)
31305 continue;
ebd8d4e8 31306
8b095871
IC
31307 var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg));
31308 s = s.umod(this.n);
31309 if (s.cmpn(0) === 0)
31310 continue;
ebd8d4e8 31311
8b095871
IC
31312 var recoveryParam = (kp.getY().isOdd() ? 1 : 0) |
31313 (kpX.cmp(r) !== 0 ? 2 : 0);
ebd8d4e8 31314
8b095871
IC
31315 // Use complement of `s`, if it is > `n / 2`
31316 if (options.canonical && s.cmp(this.nh) > 0) {
31317 s = this.n.sub(s);
31318 recoveryParam ^= 1;
31319 }
ebd8d4e8 31320
8b095871
IC
31321 return new Signature({ r: r, s: s, recoveryParam: recoveryParam });
31322 }
31323};
ebd8d4e8 31324
8b095871
IC
31325EC.prototype.verify = function verify(msg, signature, key, enc) {
31326 msg = this._truncateToN(new BN(msg, 16));
31327 key = this.keyFromPublic(key, enc);
31328 signature = new Signature(signature, 'hex');
ebd8d4e8 31329
8b095871
IC
31330 // Perform primitive values validation
31331 var r = signature.r;
31332 var s = signature.s;
31333 if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0)
31334 return false;
31335 if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0)
31336 return false;
ebd8d4e8 31337
8b095871
IC
31338 // Validate signature
31339 var sinv = s.invm(this.n);
31340 var u1 = sinv.mul(msg).umod(this.n);
31341 var u2 = sinv.mul(r).umod(this.n);
ebd8d4e8 31342
8b095871
IC
31343 if (!this.curve._maxwellTrick) {
31344 var p = this.g.mulAdd(u1, key.getPublic(), u2);
31345 if (p.isInfinity())
31346 return false;
ebd8d4e8 31347
8b095871
IC
31348 return p.getX().umod(this.n).cmp(r) === 0;
31349 }
ab78acc6 31350
8b095871
IC
31351 // NOTE: Greg Maxwell's trick, inspired by:
31352 // https://git.io/vad3K
ebd8d4e8 31353
8b095871
IC
31354 var p = this.g.jmulAdd(u1, key.getPublic(), u2);
31355 if (p.isInfinity())
31356 return false;
ab78acc6 31357
8b095871
IC
31358 // Compare `p.x` of Jacobian point with `r`,
31359 // this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the
31360 // inverse of `p.z^2`
31361 return p.eqXToP(r);
31362};
ab78acc6 31363
8b095871
IC
31364EC.prototype.recoverPubKey = function(msg, signature, j, enc) {
31365 assert((3 & j) === j, 'The recovery param is more than two bits');
31366 signature = new Signature(signature, enc);
ab78acc6 31367
8b095871
IC
31368 var n = this.n;
31369 var e = new BN(msg);
31370 var r = signature.r;
31371 var s = signature.s;
ab78acc6 31372
8b095871
IC
31373 // A set LSB signifies that the y-coordinate is odd
31374 var isYOdd = j & 1;
31375 var isSecondKey = j >> 1;
31376 if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey)
31377 throw new Error('Unable to find sencond key candinate');
31378
31379 // 1.1. Let x = r + jn.
31380 if (isSecondKey)
31381 r = this.curve.pointFromX(r.add(this.curve.n), isYOdd);
31382 else
31383 r = this.curve.pointFromX(r, isYOdd);
ab78acc6 31384
8b095871
IC
31385 var rInv = signature.r.invm(n);
31386 var s1 = n.sub(e).mul(rInv).umod(n);
31387 var s2 = s.mul(rInv).umod(n);
ab78acc6 31388
8b095871
IC
31389 // 1.6.1 Compute Q = r^-1 (sR - eG)
31390 // Q = r^-1 (sR + -eG)
31391 return this.g.mulAdd(s1, r, s2);
31392};
ab78acc6 31393
8b095871
IC
31394EC.prototype.getKeyRecoveryParam = function(e, signature, Q, enc) {
31395 signature = new Signature(signature, enc);
31396 if (signature.recoveryParam !== null)
31397 return signature.recoveryParam;
ab78acc6 31398
8b095871
IC
31399 for (var i = 0; i < 4; i++) {
31400 var Qprime;
31401 try {
31402 Qprime = this.recoverPubKey(e, signature, i);
31403 } catch (e) {
31404 continue;
ab78acc6 31405 }
ab78acc6 31406
8b095871
IC
31407 if (Qprime.eq(Q))
31408 return i;
31409 }
31410 throw new Error('Unable to find valid recovery factor');
31411};
ebd8d4e8 31412
8b095871
IC
31413},{"../../elliptic":39,"./key":47,"./signature":48,"bn.js":33}],47:[function(require,module,exports){
31414'use strict';
ebd8d4e8 31415
8b095871
IC
31416var BN = require('bn.js');
31417var elliptic = require('../../elliptic');
31418var utils = elliptic.utils;
31419var assert = utils.assert;
ebd8d4e8 31420
8b095871
IC
31421function KeyPair(ec, options) {
31422 this.ec = ec;
31423 this.priv = null;
31424 this.pub = null;
ebd8d4e8 31425
8b095871
IC
31426 // KeyPair(ec, { priv: ..., pub: ... })
31427 if (options.priv)
31428 this._importPrivate(options.priv, options.privEnc);
31429 if (options.pub)
31430 this._importPublic(options.pub, options.pubEnc);
31431}
31432module.exports = KeyPair;
ebd8d4e8 31433
8b095871
IC
31434KeyPair.fromPublic = function fromPublic(ec, pub, enc) {
31435 if (pub instanceof KeyPair)
31436 return pub;
ebd8d4e8 31437
8b095871
IC
31438 return new KeyPair(ec, {
31439 pub: pub,
31440 pubEnc: enc
31441 });
31442};
ebd8d4e8 31443
8b095871
IC
31444KeyPair.fromPrivate = function fromPrivate(ec, priv, enc) {
31445 if (priv instanceof KeyPair)
31446 return priv;
ebd8d4e8 31447
8b095871
IC
31448 return new KeyPair(ec, {
31449 priv: priv,
31450 privEnc: enc
31451 });
31452};
ebd8d4e8 31453
8b095871
IC
31454KeyPair.prototype.validate = function validate() {
31455 var pub = this.getPublic();
ebd8d4e8 31456
8b095871
IC
31457 if (pub.isInfinity())
31458 return { result: false, reason: 'Invalid public key' };
31459 if (!pub.validate())
31460 return { result: false, reason: 'Public key is not a point' };
31461 if (!pub.mul(this.ec.curve.n).isInfinity())
31462 return { result: false, reason: 'Public key * N != O' };
ab78acc6 31463
8b095871
IC
31464 return { result: true, reason: null };
31465};
ebd8d4e8 31466
8b095871
IC
31467KeyPair.prototype.getPublic = function getPublic(compact, enc) {
31468 // compact is optional argument
31469 if (typeof compact === 'string') {
31470 enc = compact;
31471 compact = null;
ebd8d4e8
IC
31472 }
31473
8b095871
IC
31474 if (!this.pub)
31475 this.pub = this.ec.g.mul(this.priv);
ebd8d4e8 31476
8b095871
IC
31477 if (!enc)
31478 return this.pub;
ebd8d4e8 31479
8b095871
IC
31480 return this.pub.encode(enc, compact);
31481};
ebd8d4e8 31482
8b095871
IC
31483KeyPair.prototype.getPrivate = function getPrivate(enc) {
31484 if (enc === 'hex')
31485 return this.priv.toString(16, 2);
31486 else
31487 return this.priv;
31488};
ab78acc6 31489
8b095871
IC
31490KeyPair.prototype._importPrivate = function _importPrivate(key, enc) {
31491 this.priv = new BN(key, enc || 16);
ab78acc6 31492
8b095871
IC
31493 // Ensure that the priv won't be bigger than n, otherwise we may fail
31494 // in fixed multiplication method
31495 this.priv = this.priv.umod(this.ec.curve.n);
31496};
ab78acc6 31497
8b095871
IC
31498KeyPair.prototype._importPublic = function _importPublic(key, enc) {
31499 if (key.x || key.y) {
31500 // Montgomery points only have an `x` coordinate.
31501 // Weierstrass/Edwards points on the other hand have both `x` and
31502 // `y` coordinates.
31503 if (this.ec.curve.type === 'mont') {
31504 assert(key.x, 'Need x coordinate');
31505 } else if (this.ec.curve.type === 'short' ||
31506 this.ec.curve.type === 'edwards') {
31507 assert(key.x && key.y, 'Need both x and y coordinate');
31508 }
31509 this.pub = this.ec.curve.point(key.x, key.y);
31510 return;
31511 }
31512 this.pub = this.ec.curve.decodePoint(key, enc);
31513};
ebd8d4e8 31514
8b095871
IC
31515// ECDH
31516KeyPair.prototype.derive = function derive(pub) {
31517 return pub.mul(this.priv).getX();
31518};
ebd8d4e8 31519
8b095871
IC
31520// ECDSA
31521KeyPair.prototype.sign = function sign(msg, enc, options) {
31522 return this.ec.sign(msg, this, enc, options);
31523};
ebd8d4e8 31524
8b095871
IC
31525KeyPair.prototype.verify = function verify(msg, signature) {
31526 return this.ec.verify(msg, signature, this);
31527};
ebd8d4e8 31528
8b095871
IC
31529KeyPair.prototype.inspect = function inspect() {
31530 return '<Key priv: ' + (this.priv && this.priv.toString(16, 2)) +
31531 ' pub: ' + (this.pub && this.pub.inspect()) + ' >';
31532};
ebd8d4e8 31533
8b095871
IC
31534},{"../../elliptic":39,"bn.js":33}],48:[function(require,module,exports){
31535'use strict';
ebd8d4e8 31536
8b095871 31537var BN = require('bn.js');
ebd8d4e8 31538
8b095871
IC
31539var elliptic = require('../../elliptic');
31540var utils = elliptic.utils;
31541var assert = utils.assert;
ebd8d4e8 31542
8b095871
IC
31543function Signature(options, enc) {
31544 if (options instanceof Signature)
31545 return options;
ebd8d4e8 31546
8b095871
IC
31547 if (this._importDER(options, enc))
31548 return;
ebd8d4e8 31549
8b095871
IC
31550 assert(options.r && options.s, 'Signature without r or s');
31551 this.r = new BN(options.r, 16);
31552 this.s = new BN(options.s, 16);
31553 if (options.recoveryParam === undefined)
31554 this.recoveryParam = null;
31555 else
31556 this.recoveryParam = options.recoveryParam;
31557}
31558module.exports = Signature;
31559
31560function Position() {
31561 this.place = 0;
31562}
31563
31564function getLength(buf, p) {
31565 var initial = buf[p.place++];
31566 if (!(initial & 0x80)) {
31567 return initial;
31568 }
31569 var octetLen = initial & 0xf;
31570 var val = 0;
31571 for (var i = 0, off = p.place; i < octetLen; i++, off++) {
31572 val <<= 8;
31573 val |= buf[off];
31574 }
31575 p.place = off;
31576 return val;
31577}
31578
31579function rmPadding(buf) {
31580 var i = 0;
31581 var len = buf.length - 1;
31582 while (!buf[i] && !(buf[i + 1] & 0x80) && i < len) {
31583 i++;
31584 }
31585 if (i === 0) {
31586 return buf;
31587 }
31588 return buf.slice(i);
31589}
ebd8d4e8 31590
8b095871
IC
31591Signature.prototype._importDER = function _importDER(data, enc) {
31592 data = utils.toArray(data, enc);
31593 var p = new Position();
31594 if (data[p.place++] !== 0x30) {
31595 return false;
31596 }
31597 var len = getLength(data, p);
31598 if ((len + p.place) !== data.length) {
31599 return false;
31600 }
31601 if (data[p.place++] !== 0x02) {
31602 return false;
31603 }
31604 var rlen = getLength(data, p);
31605 var r = data.slice(p.place, rlen + p.place);
31606 p.place += rlen;
31607 if (data[p.place++] !== 0x02) {
31608 return false;
31609 }
31610 var slen = getLength(data, p);
31611 if (data.length !== slen + p.place) {
31612 return false;
31613 }
31614 var s = data.slice(p.place, slen + p.place);
31615 if (r[0] === 0 && (r[1] & 0x80)) {
31616 r = r.slice(1);
31617 }
31618 if (s[0] === 0 && (s[1] & 0x80)) {
31619 s = s.slice(1);
31620 }
ab78acc6 31621
8b095871
IC
31622 this.r = new BN(r);
31623 this.s = new BN(s);
31624 this.recoveryParam = null;
ebd8d4e8 31625
8b095871
IC
31626 return true;
31627};
ab78acc6 31628
8b095871
IC
31629function constructLength(arr, len) {
31630 if (len < 0x80) {
31631 arr.push(len);
31632 return;
31633 }
31634 var octets = 1 + (Math.log(len) / Math.LN2 >>> 3);
31635 arr.push(octets | 0x80);
31636 while (--octets) {
31637 arr.push((len >>> (octets << 3)) & 0xff);
31638 }
31639 arr.push(len);
31640}
31641
31642Signature.prototype.toDER = function toDER(enc) {
31643 var r = this.r.toArray();
31644 var s = this.s.toArray();
31645
31646 // Pad values
31647 if (r[0] & 0x80)
31648 r = [ 0 ].concat(r);
31649 // Pad values
31650 if (s[0] & 0x80)
31651 s = [ 0 ].concat(s);
31652
31653 r = rmPadding(r);
31654 s = rmPadding(s);
31655
31656 while (!s[0] && !(s[1] & 0x80)) {
31657 s = s.slice(1);
31658 }
31659 var arr = [ 0x02 ];
31660 constructLength(arr, r.length);
31661 arr = arr.concat(r);
31662 arr.push(0x02);
31663 constructLength(arr, s.length);
31664 var backHalf = arr.concat(s);
31665 var res = [ 0x30 ];
31666 constructLength(res, backHalf.length);
31667 res = res.concat(backHalf);
31668 return utils.encode(res, enc);
31669};
ab78acc6 31670
8b095871
IC
31671},{"../../elliptic":39,"bn.js":33}],49:[function(require,module,exports){
31672'use strict';
ebd8d4e8 31673
8b095871
IC
31674var hash = require('hash.js');
31675var elliptic = require('../../elliptic');
31676var utils = elliptic.utils;
31677var assert = utils.assert;
31678var parseBytes = utils.parseBytes;
31679var KeyPair = require('./key');
31680var Signature = require('./signature');
ab78acc6 31681
8b095871
IC
31682function EDDSA(curve) {
31683 assert(curve === 'ed25519', 'only tested with ed25519 so far');
ebd8d4e8 31684
8b095871
IC
31685 if (!(this instanceof EDDSA))
31686 return new EDDSA(curve);
ab78acc6 31687
8b095871
IC
31688 var curve = elliptic.curves[curve].curve;
31689 this.curve = curve;
31690 this.g = curve.g;
31691 this.g.precompute(curve.n.bitLength() + 1);
ebd8d4e8 31692
8b095871
IC
31693 this.pointClass = curve.point().constructor;
31694 this.encodingLength = Math.ceil(curve.n.bitLength() / 8);
31695 this.hash = hash.sha512;
31696}
ebd8d4e8 31697
8b095871 31698module.exports = EDDSA;
ebd8d4e8 31699
8b095871
IC
31700/**
31701* @param {Array|String} message - message bytes
31702* @param {Array|String|KeyPair} secret - secret bytes or a keypair
31703* @returns {Signature} - signature
31704*/
31705EDDSA.prototype.sign = function sign(message, secret) {
31706 message = parseBytes(message);
31707 var key = this.keyFromSecret(secret);
31708 var r = this.hashInt(key.messagePrefix(), message);
31709 var R = this.g.mul(r);
31710 var Rencoded = this.encodePoint(R);
31711 var s_ = this.hashInt(Rencoded, key.pubBytes(), message)
31712 .mul(key.priv());
31713 var S = r.add(s_).umod(this.curve.n);
31714 return this.makeSignature({ R: R, S: S, Rencoded: Rencoded });
31715};
ebd8d4e8 31716
8b095871
IC
31717/**
31718* @param {Array} message - message bytes
31719* @param {Array|String|Signature} sig - sig bytes
31720* @param {Array|String|Point|KeyPair} pub - public key
31721* @returns {Boolean} - true if public key matches sig of message
31722*/
31723EDDSA.prototype.verify = function verify(message, sig, pub) {
31724 message = parseBytes(message);
31725 sig = this.makeSignature(sig);
31726 var key = this.keyFromPublic(pub);
31727 var h = this.hashInt(sig.Rencoded(), key.pubBytes(), message);
31728 var SG = this.g.mul(sig.S());
31729 var RplusAh = sig.R().add(key.pub().mul(h));
31730 return RplusAh.eq(SG);
31731};
ebd8d4e8 31732
8b095871
IC
31733EDDSA.prototype.hashInt = function hashInt() {
31734 var hash = this.hash();
31735 for (var i = 0; i < arguments.length; i++)
31736 hash.update(arguments[i]);
31737 return utils.intFromLE(hash.digest()).umod(this.curve.n);
31738};
ebd8d4e8 31739
8b095871
IC
31740EDDSA.prototype.keyFromPublic = function keyFromPublic(pub) {
31741 return KeyPair.fromPublic(this, pub);
31742};
ebd8d4e8 31743
8b095871
IC
31744EDDSA.prototype.keyFromSecret = function keyFromSecret(secret) {
31745 return KeyPair.fromSecret(this, secret);
31746};
31747
31748EDDSA.prototype.makeSignature = function makeSignature(sig) {
31749 if (sig instanceof Signature)
31750 return sig;
31751 return new Signature(this, sig);
31752};
ebd8d4e8
IC
31753
31754/**
8b095871
IC
31755* * https://tools.ietf.org/html/draft-josefsson-eddsa-ed25519-03#section-5.2
31756*
31757* EDDSA defines methods for encoding and decoding points and integers. These are
31758* helper convenience methods, that pass along to utility functions implied
31759* parameters.
31760*
31761*/
31762EDDSA.prototype.encodePoint = function encodePoint(point) {
31763 var enc = point.getY().toArray('le', this.encodingLength);
31764 enc[this.encodingLength - 1] |= point.getX().isOdd() ? 0x80 : 0;
31765 return enc;
31766};
ebd8d4e8 31767
8b095871
IC
31768EDDSA.prototype.decodePoint = function decodePoint(bytes) {
31769 bytes = utils.parseBytes(bytes);
ebd8d4e8 31770
8b095871
IC
31771 var lastIx = bytes.length - 1;
31772 var normed = bytes.slice(0, lastIx).concat(bytes[lastIx] & ~0x80);
31773 var xIsOdd = (bytes[lastIx] & 0x80) !== 0;
ebd8d4e8 31774
8b095871
IC
31775 var y = utils.intFromLE(normed);
31776 return this.curve.pointFromY(y, xIsOdd);
31777};
ebd8d4e8 31778
8b095871
IC
31779EDDSA.prototype.encodeInt = function encodeInt(num) {
31780 return num.toArray('le', this.encodingLength);
31781};
ebd8d4e8 31782
8b095871
IC
31783EDDSA.prototype.decodeInt = function decodeInt(bytes) {
31784 return utils.intFromLE(bytes);
31785};
ebd8d4e8 31786
8b095871
IC
31787EDDSA.prototype.isPoint = function isPoint(val) {
31788 return val instanceof this.pointClass;
31789};
ebd8d4e8 31790
8b095871
IC
31791},{"../../elliptic":39,"./key":50,"./signature":51,"hash.js":57}],50:[function(require,module,exports){
31792'use strict';
ebd8d4e8 31793
8b095871
IC
31794var elliptic = require('../../elliptic');
31795var utils = elliptic.utils;
31796var assert = utils.assert;
31797var parseBytes = utils.parseBytes;
31798var cachedProperty = utils.cachedProperty;
ebd8d4e8 31799
8b095871
IC
31800/**
31801* @param {EDDSA} eddsa - instance
31802* @param {Object} params - public/private key parameters
31803*
31804* @param {Array<Byte>} [params.secret] - secret seed bytes
31805* @param {Point} [params.pub] - public key point (aka `A` in eddsa terms)
31806* @param {Array<Byte>} [params.pub] - public key point encoded as bytes
31807*
31808*/
31809function KeyPair(eddsa, params) {
31810 this.eddsa = eddsa;
31811 this._secret = parseBytes(params.secret);
31812 if (eddsa.isPoint(params.pub))
31813 this._pub = params.pub;
31814 else
31815 this._pubBytes = parseBytes(params.pub);
ebd8d4e8
IC
31816}
31817
8b095871
IC
31818KeyPair.fromPublic = function fromPublic(eddsa, pub) {
31819 if (pub instanceof KeyPair)
31820 return pub;
31821 return new KeyPair(eddsa, { pub: pub });
31822};
ebd8d4e8 31823
8b095871
IC
31824KeyPair.fromSecret = function fromSecret(eddsa, secret) {
31825 if (secret instanceof KeyPair)
31826 return secret;
31827 return new KeyPair(eddsa, { secret: secret });
31828};
ebd8d4e8 31829
8b095871
IC
31830KeyPair.prototype.secret = function secret() {
31831 return this._secret;
31832};
ebd8d4e8 31833
8b095871
IC
31834cachedProperty(KeyPair, 'pubBytes', function pubBytes() {
31835 return this.eddsa.encodePoint(this.pub());
31836});
ebd8d4e8 31837
8b095871
IC
31838cachedProperty(KeyPair, 'pub', function pub() {
31839 if (this._pubBytes)
31840 return this.eddsa.decodePoint(this._pubBytes);
31841 return this.eddsa.g.mul(this.priv());
31842});
ebd8d4e8 31843
8b095871
IC
31844cachedProperty(KeyPair, 'privBytes', function privBytes() {
31845 var eddsa = this.eddsa;
31846 var hash = this.hash();
31847 var lastIx = eddsa.encodingLength - 1;
ebd8d4e8 31848
8b095871
IC
31849 var a = hash.slice(0, eddsa.encodingLength);
31850 a[0] &= 248;
31851 a[lastIx] &= 127;
31852 a[lastIx] |= 64;
ebd8d4e8 31853
8b095871
IC
31854 return a;
31855});
ebd8d4e8 31856
8b095871
IC
31857cachedProperty(KeyPair, 'priv', function priv() {
31858 return this.eddsa.decodeInt(this.privBytes());
31859});
ebd8d4e8 31860
8b095871
IC
31861cachedProperty(KeyPair, 'hash', function hash() {
31862 return this.eddsa.hash().update(this.secret()).digest();
31863});
ebd8d4e8 31864
8b095871
IC
31865cachedProperty(KeyPair, 'messagePrefix', function messagePrefix() {
31866 return this.hash().slice(this.eddsa.encodingLength);
31867});
ebd8d4e8 31868
8b095871
IC
31869KeyPair.prototype.sign = function sign(message) {
31870 assert(this._secret, 'KeyPair can only verify');
31871 return this.eddsa.sign(message, this);
31872};
ebd8d4e8 31873
8b095871
IC
31874KeyPair.prototype.verify = function verify(message, sig) {
31875 return this.eddsa.verify(message, sig, this);
31876};
ebd8d4e8 31877
8b095871
IC
31878KeyPair.prototype.getSecret = function getSecret(enc) {
31879 assert(this._secret, 'KeyPair is public only');
31880 return utils.encode(this.secret(), enc);
31881};
ebd8d4e8 31882
8b095871
IC
31883KeyPair.prototype.getPublic = function getPublic(enc) {
31884 return utils.encode(this.pubBytes(), enc);
31885};
ebd8d4e8 31886
8b095871 31887module.exports = KeyPair;
ebd8d4e8 31888
8b095871
IC
31889},{"../../elliptic":39}],51:[function(require,module,exports){
31890'use strict';
ebd8d4e8 31891
8b095871
IC
31892var BN = require('bn.js');
31893var elliptic = require('../../elliptic');
31894var utils = elliptic.utils;
31895var assert = utils.assert;
31896var cachedProperty = utils.cachedProperty;
31897var parseBytes = utils.parseBytes;
ebd8d4e8 31898
8b095871
IC
31899/**
31900* @param {EDDSA} eddsa - eddsa instance
31901* @param {Array<Bytes>|Object} sig -
31902* @param {Array<Bytes>|Point} [sig.R] - R point as Point or bytes
31903* @param {Array<Bytes>|bn} [sig.S] - S scalar as bn or bytes
31904* @param {Array<Bytes>} [sig.Rencoded] - R point encoded
31905* @param {Array<Bytes>} [sig.Sencoded] - S scalar encoded
31906*/
31907function Signature(eddsa, sig) {
31908 this.eddsa = eddsa;
ebd8d4e8 31909
8b095871
IC
31910 if (typeof sig !== 'object')
31911 sig = parseBytes(sig);
ebd8d4e8 31912
8b095871
IC
31913 if (Array.isArray(sig)) {
31914 sig = {
31915 R: sig.slice(0, eddsa.encodingLength),
31916 S: sig.slice(eddsa.encodingLength)
31917 };
ab78acc6 31918 }
ebd8d4e8 31919
8b095871 31920 assert(sig.R && sig.S, 'Signature without R or S');
ebd8d4e8 31921
8b095871
IC
31922 if (eddsa.isPoint(sig.R))
31923 this._R = sig.R;
31924 if (sig.S instanceof BN)
31925 this._S = sig.S;
31926
31927 this._Rencoded = Array.isArray(sig.R) ? sig.R : sig.Rencoded;
31928 this._Sencoded = Array.isArray(sig.S) ? sig.S : sig.Sencoded;
ebd8d4e8
IC
31929}
31930
8b095871
IC
31931cachedProperty(Signature, 'S', function S() {
31932 return this.eddsa.decodeInt(this.Sencoded());
31933});
ab78acc6 31934
8b095871
IC
31935cachedProperty(Signature, 'R', function R() {
31936 return this.eddsa.decodePoint(this.Rencoded());
31937});
ebd8d4e8 31938
8b095871
IC
31939cachedProperty(Signature, 'Rencoded', function Rencoded() {
31940 return this.eddsa.encodePoint(this.R());
31941});
ebd8d4e8 31942
8b095871
IC
31943cachedProperty(Signature, 'Sencoded', function Sencoded() {
31944 return this.eddsa.encodeInt(this.S());
31945});
ebd8d4e8 31946
8b095871
IC
31947Signature.prototype.toBytes = function toBytes() {
31948 return this.Rencoded().concat(this.Sencoded());
31949};
ebd8d4e8 31950
8b095871
IC
31951Signature.prototype.toHex = function toHex() {
31952 return utils.encode(this.toBytes(), 'hex').toUpperCase();
31953};
ebd8d4e8 31954
8b095871 31955module.exports = Signature;
ebd8d4e8 31956
8b095871
IC
31957},{"../../elliptic":39,"bn.js":33}],52:[function(require,module,exports){
31958'use strict';
ebd8d4e8 31959
8b095871
IC
31960var hash = require('hash.js');
31961var elliptic = require('../elliptic');
31962var utils = elliptic.utils;
31963var assert = utils.assert;
ebd8d4e8 31964
8b095871
IC
31965function HmacDRBG(options) {
31966 if (!(this instanceof HmacDRBG))
31967 return new HmacDRBG(options);
31968 this.hash = options.hash;
31969 this.predResist = !!options.predResist;
ab78acc6 31970
8b095871
IC
31971 this.outLen = this.hash.outSize;
31972 this.minEntropy = options.minEntropy || this.hash.hmacStrength;
ab78acc6 31973
8b095871
IC
31974 this.reseed = null;
31975 this.reseedInterval = null;
31976 this.K = null;
31977 this.V = null;
ebd8d4e8 31978
8b095871
IC
31979 var entropy = utils.toArray(options.entropy, options.entropyEnc);
31980 var nonce = utils.toArray(options.nonce, options.nonceEnc);
31981 var pers = utils.toArray(options.pers, options.persEnc);
31982 assert(entropy.length >= (this.minEntropy / 8),
31983 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');
31984 this._init(entropy, nonce, pers);
ebd8d4e8 31985}
8b095871 31986module.exports = HmacDRBG;
ebd8d4e8 31987
8b095871
IC
31988HmacDRBG.prototype._init = function init(entropy, nonce, pers) {
31989 var seed = entropy.concat(nonce).concat(pers);
ebd8d4e8 31990
8b095871
IC
31991 this.K = new Array(this.outLen / 8);
31992 this.V = new Array(this.outLen / 8);
31993 for (var i = 0; i < this.V.length; i++) {
31994 this.K[i] = 0x00;
31995 this.V[i] = 0x01;
31996 }
ebd8d4e8 31997
8b095871
IC
31998 this._update(seed);
31999 this.reseed = 1;
32000 this.reseedInterval = 0x1000000000000; // 2^48
32001};
ebd8d4e8 32002
8b095871
IC
32003HmacDRBG.prototype._hmac = function hmac() {
32004 return new hash.hmac(this.hash, this.K);
32005};
ebd8d4e8 32006
8b095871
IC
32007HmacDRBG.prototype._update = function update(seed) {
32008 var kmac = this._hmac()
32009 .update(this.V)
32010 .update([ 0x00 ]);
32011 if (seed)
32012 kmac = kmac.update(seed);
32013 this.K = kmac.digest();
32014 this.V = this._hmac().update(this.V).digest();
32015 if (!seed)
32016 return;
32017
32018 this.K = this._hmac()
32019 .update(this.V)
32020 .update([ 0x01 ])
32021 .update(seed)
32022 .digest();
32023 this.V = this._hmac().update(this.V).digest();
32024};
32025
32026HmacDRBG.prototype.reseed = function reseed(entropy, entropyEnc, add, addEnc) {
32027 // Optional entropy enc
32028 if (typeof entropyEnc !== 'string') {
32029 addEnc = add;
32030 add = entropyEnc;
32031 entropyEnc = null;
ebd8d4e8 32032 }
ebd8d4e8 32033
8b095871
IC
32034 entropy = utils.toBuffer(entropy, entropyEnc);
32035 add = utils.toBuffer(add, addEnc);
ebd8d4e8 32036
8b095871
IC
32037 assert(entropy.length >= (this.minEntropy / 8),
32038 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');
ebd8d4e8 32039
8b095871
IC
32040 this._update(entropy.concat(add || []));
32041 this.reseed = 1;
32042};
ebd8d4e8 32043
8b095871
IC
32044HmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) {
32045 if (this.reseed > this.reseedInterval)
32046 throw new Error('Reseed is required');
ebd8d4e8 32047
8b095871
IC
32048 // Optional encoding
32049 if (typeof enc !== 'string') {
32050 addEnc = add;
32051 add = enc;
32052 enc = null;
32053 }
ebd8d4e8 32054
8b095871
IC
32055 // Optional additional data
32056 if (add) {
32057 add = utils.toArray(add, addEnc);
32058 this._update(add);
ebd8d4e8
IC
32059 }
32060
8b095871
IC
32061 var temp = [];
32062 while (temp.length < len) {
32063 this.V = this._hmac().update(this.V).digest();
32064 temp = temp.concat(this.V);
ebd8d4e8
IC
32065 }
32066
8b095871
IC
32067 var res = temp.slice(0, len);
32068 this._update(add);
32069 this.reseed++;
32070 return utils.encode(res, enc);
32071};
ebd8d4e8 32072
8b095871
IC
32073},{"../elliptic":39,"hash.js":57}],53:[function(require,module,exports){
32074module.exports = {
32075 doubles: {
32076 step: 4,
32077 points: [
32078 [
32079 'e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a',
32080 'f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821'
32081 ],
32082 [
32083 '8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508',
32084 '11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf'
32085 ],
32086 [
32087 '175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739',
32088 'd3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695'
32089 ],
32090 [
32091 '363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640',
32092 '4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9'
32093 ],
32094 [
32095 '8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c',
32096 '4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36'
32097 ],
32098 [
32099 '723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda',
32100 '96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f'
32101 ],
32102 [
32103 'eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa',
32104 '5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999'
32105 ],
32106 [
32107 '100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0',
32108 'cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09'
32109 ],
32110 [
32111 'e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d',
32112 '9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d'
32113 ],
32114 [
32115 'feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d',
32116 'e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088'
32117 ],
32118 [
32119 'da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1',
32120 '9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d'
32121 ],
32122 [
32123 '53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0',
32124 '5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8'
32125 ],
32126 [
32127 '8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047',
32128 '10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a'
32129 ],
32130 [
32131 '385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862',
32132 '283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453'
32133 ],
32134 [
32135 '6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7',
32136 '7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160'
32137 ],
32138 [
32139 '3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd',
32140 '56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0'
32141 ],
32142 [
32143 '85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83',
32144 '7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6'
32145 ],
32146 [
32147 '948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a',
32148 '53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589'
32149 ],
32150 [
32151 '6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8',
32152 'bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17'
32153 ],
32154 [
32155 'e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d',
32156 '4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda'
32157 ],
32158 [
32159 'e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725',
32160 '7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd'
32161 ],
32162 [
32163 '213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754',
32164 '4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2'
32165 ],
32166 [
32167 '4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c',
32168 '17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6'
32169 ],
32170 [
32171 'fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6',
32172 '6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f'
32173 ],
32174 [
32175 '76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39',
32176 'c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01'
32177 ],
32178 [
32179 'c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891',
32180 '893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3'
32181 ],
32182 [
32183 'd895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b',
32184 'febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f'
32185 ],
32186 [
32187 'b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03',
32188 '2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7'
32189 ],
32190 [
32191 'e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d',
32192 'eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78'
32193 ],
32194 [
32195 'a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070',
32196 '7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1'
32197 ],
32198 [
32199 '90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4',
32200 'e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150'
32201 ],
32202 [
32203 '8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da',
32204 '662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82'
32205 ],
32206 [
32207 'e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11',
32208 '1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc'
32209 ],
32210 [
32211 '8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e',
32212 'efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b'
32213 ],
32214 [
32215 'e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41',
32216 '2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51'
32217 ],
32218 [
32219 'b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef',
32220 '67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45'
32221 ],
32222 [
32223 'd68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8',
32224 'db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120'
32225 ],
32226 [
32227 '324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d',
32228 '648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84'
32229 ],
32230 [
32231 '4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96',
32232 '35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d'
32233 ],
32234 [
32235 '9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd',
32236 'ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d'
32237 ],
32238 [
32239 '6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5',
32240 '9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8'
32241 ],
32242 [
32243 'a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266',
32244 '40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8'
32245 ],
32246 [
32247 '7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71',
32248 '34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac'
32249 ],
32250 [
32251 '928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac',
32252 'c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f'
32253 ],
32254 [
32255 '85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751',
32256 '1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962'
32257 ],
32258 [
32259 'ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e',
32260 '493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907'
32261 ],
32262 [
32263 '827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241',
32264 'c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec'
32265 ],
32266 [
32267 'eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3',
32268 'be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d'
32269 ],
32270 [
32271 'e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f',
32272 '4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414'
32273 ],
32274 [
32275 '1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19',
32276 'aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd'
32277 ],
32278 [
32279 '146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be',
32280 'b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0'
32281 ],
32282 [
32283 'fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9',
32284 '6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811'
32285 ],
32286 [
32287 'da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2',
32288 '8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1'
32289 ],
32290 [
32291 'a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13',
32292 '7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c'
32293 ],
32294 [
32295 '174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c',
32296 'ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73'
32297 ],
32298 [
32299 '959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba',
32300 '2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd'
32301 ],
32302 [
32303 'd2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151',
32304 'e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405'
32305 ],
32306 [
32307 '64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073',
32308 'd99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589'
32309 ],
32310 [
32311 '8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458',
32312 '38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e'
32313 ],
32314 [
32315 '13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b',
32316 '69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27'
32317 ],
32318 [
32319 'bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366',
32320 'd3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1'
32321 ],
32322 [
32323 '8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa',
32324 '40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482'
32325 ],
32326 [
32327 '8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0',
32328 '620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945'
32329 ],
32330 [
32331 'dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787',
32332 '7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573'
32333 ],
32334 [
32335 'f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e',
32336 'ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82'
32337 ]
32338 ]
32339 },
32340 naf: {
32341 wnd: 7,
32342 points: [
32343 [
32344 'f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9',
32345 '388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672'
32346 ],
32347 [
32348 '2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4',
32349 'd8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6'
32350 ],
32351 [
32352 '5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc',
32353 '6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da'
32354 ],
32355 [
32356 'acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe',
32357 'cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37'
32358 ],
32359 [
32360 '774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb',
32361 'd984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b'
32362 ],
32363 [
32364 'f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8',
32365 'ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81'
32366 ],
32367 [
32368 'd7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e',
32369 '581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58'
32370 ],
32371 [
32372 'defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34',
32373 '4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77'
32374 ],
32375 [
32376 '2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c',
32377 '85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a'
32378 ],
32379 [
32380 '352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5',
32381 '321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c'
32382 ],
32383 [
32384 '2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f',
32385 '2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67'
32386 ],
32387 [
32388 '9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714',
32389 '73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402'
32390 ],
32391 [
32392 'daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729',
32393 'a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55'
32394 ],
32395 [
32396 'c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db',
32397 '2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482'
32398 ],
32399 [
32400 '6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4',
32401 'e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82'
32402 ],
32403 [
32404 '1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5',
32405 'b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396'
32406 ],
32407 [
32408 '605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479',
32409 '2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49'
32410 ],
32411 [
32412 '62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d',
32413 '80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf'
32414 ],
32415 [
32416 '80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f',
32417 '1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a'
32418 ],
32419 [
32420 '7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb',
32421 'd0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7'
32422 ],
32423 [
32424 'd528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9',
32425 'eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933'
32426 ],
32427 [
32428 '49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963',
32429 '758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a'
32430 ],
32431 [
32432 '77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74',
32433 '958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6'
32434 ],
32435 [
32436 'f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530',
32437 'e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37'
32438 ],
32439 [
32440 '463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b',
32441 '5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e'
32442 ],
32443 [
32444 'f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247',
32445 'cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6'
32446 ],
32447 [
32448 'caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1',
32449 'cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476'
32450 ],
32451 [
32452 '2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120',
32453 '4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40'
32454 ],
32455 [
32456 '7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435',
32457 '91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61'
32458 ],
32459 [
32460 '754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18',
32461 '673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683'
32462 ],
32463 [
32464 'e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8',
32465 '59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5'
32466 ],
32467 [
32468 '186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb',
32469 '3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b'
32470 ],
32471 [
32472 'df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f',
32473 '55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417'
32474 ],
32475 [
32476 '5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143',
32477 'efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868'
32478 ],
32479 [
32480 '290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba',
32481 'e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a'
32482 ],
32483 [
32484 'af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45',
32485 'f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6'
32486 ],
32487 [
32488 '766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a',
32489 '744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996'
32490 ],
32491 [
32492 '59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e',
32493 'c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e'
32494 ],
32495 [
32496 'f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8',
32497 'e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d'
32498 ],
32499 [
32500 '7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c',
32501 '30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2'
32502 ],
32503 [
32504 '948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519',
32505 'e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e'
32506 ],
32507 [
32508 '7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab',
32509 '100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437'
32510 ],
32511 [
32512 '3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca',
32513 'ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311'
32514 ],
32515 [
32516 'd3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf',
32517 '8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4'
32518 ],
32519 [
32520 '1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610',
32521 '68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575'
32522 ],
32523 [
32524 '733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4',
32525 'f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d'
32526 ],
32527 [
32528 '15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c',
32529 'd56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d'
32530 ],
32531 [
32532 'a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940',
32533 'edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629'
32534 ],
32535 [
32536 'e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980',
32537 'a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06'
32538 ],
32539 [
32540 '311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3',
32541 '66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374'
32542 ],
32543 [
32544 '34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf',
32545 '9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee'
32546 ],
32547 [
32548 'f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63',
32549 '4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1'
32550 ],
32551 [
32552 'd7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448',
32553 'fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b'
32554 ],
32555 [
32556 '32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf',
32557 '5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661'
32558 ],
32559 [
32560 '7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5',
32561 '8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6'
32562 ],
32563 [
32564 'ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6',
32565 '8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e'
32566 ],
32567 [
32568 '16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5',
32569 '5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d'
32570 ],
32571 [
32572 'eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99',
32573 'f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc'
32574 ],
32575 [
32576 '78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51',
32577 'f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4'
32578 ],
32579 [
32580 '494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5',
32581 '42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c'
32582 ],
32583 [
32584 'a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5',
32585 '204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b'
32586 ],
32587 [
32588 'c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997',
32589 '4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913'
32590 ],
32591 [
32592 '841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881',
32593 '73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154'
32594 ],
32595 [
32596 '5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5',
32597 '39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865'
32598 ],
32599 [
32600 '36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66',
32601 'd2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc'
32602 ],
32603 [
32604 '336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726',
32605 'ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224'
32606 ],
32607 [
32608 '8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede',
32609 '6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e'
32610 ],
32611 [
32612 '1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94',
32613 '60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6'
32614 ],
32615 [
32616 '85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31',
32617 '3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511'
32618 ],
32619 [
32620 '29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51',
32621 'b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b'
32622 ],
32623 [
32624 'a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252',
32625 'ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2'
32626 ],
32627 [
32628 '4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5',
32629 'cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c'
32630 ],
32631 [
32632 'd24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b',
32633 '6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3'
32634 ],
32635 [
32636 'ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4',
32637 '322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d'
32638 ],
32639 [
32640 'af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f',
32641 '6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700'
32642 ],
32643 [
32644 'e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889',
32645 '2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4'
32646 ],
32647 [
32648 '591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246',
32649 'b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196'
32650 ],
32651 [
32652 '11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984',
32653 '998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4'
32654 ],
32655 [
32656 '3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a',
32657 'b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257'
32658 ],
32659 [
32660 'cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030',
32661 'bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13'
32662 ],
32663 [
32664 'c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197',
32665 '6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096'
32666 ],
32667 [
32668 'c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593',
32669 'c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38'
32670 ],
32671 [
32672 'a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef',
32673 '21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f'
32674 ],
32675 [
32676 '347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38',
32677 '60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448'
32678 ],
32679 [
32680 'da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a',
32681 '49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a'
32682 ],
32683 [
32684 'c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111',
32685 '5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4'
32686 ],
32687 [
32688 '4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502',
32689 '7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437'
32690 ],
32691 [
32692 '3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea',
32693 'be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7'
32694 ],
32695 [
32696 'cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26',
32697 '8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d'
32698 ],
32699 [
32700 'b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986',
32701 '39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a'
32702 ],
32703 [
32704 'd4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e',
32705 '62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54'
32706 ],
32707 [
32708 '48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4',
32709 '25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77'
32710 ],
32711 [
32712 'dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda',
32713 'ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517'
32714 ],
32715 [
32716 '6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859',
32717 'cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10'
32718 ],
32719 [
32720 'e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f',
32721 'f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125'
32722 ],
32723 [
32724 'eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c',
32725 '6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e'
32726 ],
32727 [
32728 '13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942',
32729 'fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1'
32730 ],
32731 [
32732 'ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a',
32733 '1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2'
32734 ],
32735 [
32736 'b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80',
32737 '5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423'
32738 ],
32739 [
32740 'ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d',
32741 '438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8'
32742 ],
32743 [
32744 '8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1',
32745 'cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758'
32746 ],
32747 [
32748 '52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63',
32749 'c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375'
32750 ],
32751 [
32752 'e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352',
32753 '6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d'
32754 ],
32755 [
32756 '7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193',
32757 'ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec'
32758 ],
32759 [
32760 '5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00',
32761 '9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0'
32762 ],
32763 [
32764 '32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58',
32765 'ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c'
32766 ],
32767 [
32768 'e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7',
32769 'd3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4'
32770 ],
32771 [
32772 '8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8',
32773 'c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f'
32774 ],
32775 [
32776 '4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e',
32777 '67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649'
32778 ],
32779 [
32780 '3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d',
32781 'cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826'
32782 ],
32783 [
32784 '674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b',
32785 '299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5'
32786 ],
32787 [
32788 'd32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f',
32789 'f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87'
32790 ],
32791 [
32792 '30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6',
32793 '462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b'
32794 ],
32795 [
32796 'be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297',
32797 '62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc'
32798 ],
32799 [
32800 '93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a',
32801 '7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c'
32802 ],
32803 [
32804 'b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c',
32805 'ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f'
32806 ],
32807 [
32808 'd5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52',
32809 '4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a'
32810 ],
32811 [
32812 'd3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb',
32813 'bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46'
32814 ],
32815 [
32816 '463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065',
32817 'bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f'
32818 ],
32819 [
32820 '7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917',
32821 '603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03'
32822 ],
32823 [
32824 '74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9',
32825 'cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08'
32826 ],
32827 [
32828 '30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3',
32829 '553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8'
32830 ],
32831 [
32832 '9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57',
32833 '712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373'
32834 ],
32835 [
32836 '176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66',
32837 'ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3'
32838 ],
32839 [
32840 '75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8',
32841 '9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8'
32842 ],
32843 [
32844 '809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721',
32845 '9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1'
32846 ],
32847 [
32848 '1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180',
32849 '4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9'
32850 ]
32851 ]
32852 }
32853};
ebd8d4e8 32854
8b095871
IC
32855},{}],54:[function(require,module,exports){
32856'use strict';
ebd8d4e8 32857
8b095871
IC
32858var utils = exports;
32859var BN = require('bn.js');
ebd8d4e8 32860
8b095871
IC
32861utils.assert = function assert(val, msg) {
32862 if (!val)
32863 throw new Error(msg || 'Assertion failed');
32864};
ebd8d4e8 32865
8b095871
IC
32866function toArray(msg, enc) {
32867 if (Array.isArray(msg))
32868 return msg.slice();
32869 if (!msg)
32870 return [];
32871 var res = [];
32872 if (typeof msg !== 'string') {
32873 for (var i = 0; i < msg.length; i++)
32874 res[i] = msg[i] | 0;
32875 return res;
32876 }
32877 if (!enc) {
32878 for (var i = 0; i < msg.length; i++) {
32879 var c = msg.charCodeAt(i);
32880 var hi = c >> 8;
32881 var lo = c & 0xff;
32882 if (hi)
32883 res.push(hi, lo);
32884 else
32885 res.push(lo);
32886 }
32887 } else if (enc === 'hex') {
32888 msg = msg.replace(/[^a-z0-9]+/ig, '');
32889 if (msg.length % 2 !== 0)
32890 msg = '0' + msg;
32891 for (var i = 0; i < msg.length; i += 2)
32892 res.push(parseInt(msg[i] + msg[i + 1], 16));
ebd8d4e8 32893 }
8b095871 32894 return res;
ebd8d4e8 32895}
8b095871 32896utils.toArray = toArray;
ebd8d4e8 32897
8b095871
IC
32898function zero2(word) {
32899 if (word.length === 1)
32900 return '0' + word;
32901 else
32902 return word;
32903}
32904utils.zero2 = zero2;
ab78acc6 32905
8b095871
IC
32906function toHex(msg) {
32907 var res = '';
32908 for (var i = 0; i < msg.length; i++)
32909 res += zero2(msg[i].toString(16));
32910 return res;
32911}
32912utils.toHex = toHex;
ebd8d4e8 32913
8b095871
IC
32914utils.encode = function encode(arr, enc) {
32915 if (enc === 'hex')
32916 return toHex(arr);
32917 else
32918 return arr;
32919};
ebd8d4e8 32920
8b095871
IC
32921// Represent num in a w-NAF form
32922function getNAF(num, w) {
32923 var naf = [];
32924 var ws = 1 << (w + 1);
32925 var k = num.clone();
32926 while (k.cmpn(1) >= 0) {
32927 var z;
32928 if (k.isOdd()) {
32929 var mod = k.andln(ws - 1);
32930 if (mod > (ws >> 1) - 1)
32931 z = (ws >> 1) - mod;
32932 else
32933 z = mod;
32934 k.isubn(z);
32935 } else {
32936 z = 0;
32937 }
32938 naf.push(z);
32939
32940 // Optimization, shift by word if possible
32941 var shift = (k.cmpn(0) !== 0 && k.andln(ws - 1) === 0) ? (w + 1) : 1;
32942 for (var i = 1; i < shift; i++)
32943 naf.push(0);
32944 k.iushrn(shift);
32945 }
32946
32947 return naf;
32948}
32949utils.getNAF = getNAF;
32950
32951// Represent k1, k2 in a Joint Sparse Form
32952function getJSF(k1, k2) {
32953 var jsf = [
32954 [],
32955 []
32956 ];
32957
32958 k1 = k1.clone();
32959 k2 = k2.clone();
32960 var d1 = 0;
32961 var d2 = 0;
32962 while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) {
32963
32964 // First phase
32965 var m14 = (k1.andln(3) + d1) & 3;
32966 var m24 = (k2.andln(3) + d2) & 3;
32967 if (m14 === 3)
32968 m14 = -1;
32969 if (m24 === 3)
32970 m24 = -1;
32971 var u1;
32972 if ((m14 & 1) === 0) {
32973 u1 = 0;
32974 } else {
32975 var m8 = (k1.andln(7) + d1) & 7;
32976 if ((m8 === 3 || m8 === 5) && m24 === 2)
32977 u1 = -m14;
32978 else
32979 u1 = m14;
32980 }
32981 jsf[0].push(u1);
ebd8d4e8 32982
8b095871
IC
32983 var u2;
32984 if ((m24 & 1) === 0) {
32985 u2 = 0;
32986 } else {
32987 var m8 = (k2.andln(7) + d2) & 7;
32988 if ((m8 === 3 || m8 === 5) && m14 === 2)
32989 u2 = -m24;
32990 else
32991 u2 = m24;
32992 }
32993 jsf[1].push(u2);
ebd8d4e8 32994
8b095871
IC
32995 // Second phase
32996 if (2 * d1 === u1 + 1)
32997 d1 = 1 - d1;
32998 if (2 * d2 === u2 + 1)
32999 d2 = 1 - d2;
33000 k1.iushrn(1);
33001 k2.iushrn(1);
33002 }
ebd8d4e8 33003
8b095871
IC
33004 return jsf;
33005}
33006utils.getJSF = getJSF;
ab78acc6 33007
8b095871
IC
33008function cachedProperty(obj, name, computer) {
33009 var key = '_' + name;
33010 obj.prototype[name] = function cachedProperty() {
33011 return this[key] !== undefined ? this[key] :
33012 this[key] = computer.call(this);
33013 };
33014}
33015utils.cachedProperty = cachedProperty;
ebd8d4e8 33016
8b095871
IC
33017function parseBytes(bytes) {
33018 return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') :
33019 bytes;
33020}
33021utils.parseBytes = parseBytes;
ebd8d4e8 33022
8b095871
IC
33023function intFromLE(bytes) {
33024 return new BN(bytes, 'hex', 'le');
33025}
33026utils.intFromLE = intFromLE;
ebd8d4e8 33027
8b095871
IC
33028
33029},{"bn.js":33}],55:[function(require,module,exports){
33030module.exports={
33031 "_args": [
33032 [
33033 {
33034 "raw": "elliptic@^6.2.3",
33035 "scope": null,
33036 "escapedName": "elliptic",
33037 "name": "elliptic",
33038 "rawSpec": "^6.2.3",
33039 "spec": ">=6.2.3 <7.0.0",
33040 "type": "range"
33041 },
33042 "/home/user/ethereum/ethereumjs-util/node_modules/secp256k1"
33043 ]
33044 ],
33045 "_from": "elliptic@>=6.2.3 <7.0.0",
33046 "_id": "elliptic@6.3.3",
33047 "_inCache": true,
33048 "_location": "/elliptic",
33049 "_nodeVersion": "7.0.0",
33050 "_npmOperationalInternal": {
33051 "host": "packages-18-east.internal.npmjs.com",
33052 "tmp": "tmp/elliptic-6.3.3.tgz_1486422837740_0.10658654430881143"
33053 },
33054 "_npmUser": {
33055 "name": "indutny",
33056 "email": "fedor@indutny.com"
33057 },
33058 "_npmVersion": "3.10.8",
33059 "_phantomChildren": {},
33060 "_requested": {
33061 "raw": "elliptic@^6.2.3",
33062 "scope": null,
33063 "escapedName": "elliptic",
33064 "name": "elliptic",
33065 "rawSpec": "^6.2.3",
33066 "spec": ">=6.2.3 <7.0.0",
33067 "type": "range"
33068 },
33069 "_requiredBy": [
33070 "/browserify-sign",
33071 "/create-ecdh",
33072 "/secp256k1"
33073 ],
33074 "_resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.3.3.tgz",
33075 "_shasum": "5482d9646d54bcb89fd7d994fc9e2e9568876e3f",
33076 "_shrinkwrap": null,
33077 "_spec": "elliptic@^6.2.3",
33078 "_where": "/home/user/ethereum/ethereumjs-util/node_modules/secp256k1",
33079 "author": {
33080 "name": "Fedor Indutny",
33081 "email": "fedor@indutny.com"
33082 },
33083 "bugs": {
33084 "url": "https://github.com/indutny/elliptic/issues"
33085 },
33086 "dependencies": {
33087 "bn.js": "^4.4.0",
33088 "brorand": "^1.0.1",
33089 "hash.js": "^1.0.0",
33090 "inherits": "^2.0.1"
33091 },
33092 "description": "EC cryptography",
33093 "devDependencies": {
33094 "brfs": "^1.4.3",
33095 "coveralls": "^2.11.3",
33096 "grunt": "^0.4.5",
33097 "grunt-browserify": "^5.0.0",
33098 "grunt-cli": "^1.2.0",
33099 "grunt-contrib-connect": "^1.0.0",
33100 "grunt-contrib-copy": "^1.0.0",
33101 "grunt-contrib-uglify": "^1.0.1",
33102 "grunt-mocha-istanbul": "^3.0.1",
33103 "grunt-saucelabs": "^8.6.2",
33104 "istanbul": "^0.4.2",
33105 "jscs": "^2.9.0",
33106 "jshint": "^2.6.0",
33107 "mocha": "^2.1.0"
33108 },
33109 "directories": {},
33110 "dist": {
33111 "shasum": "5482d9646d54bcb89fd7d994fc9e2e9568876e3f",
33112 "tarball": "https://registry.npmjs.org/elliptic/-/elliptic-6.3.3.tgz"
33113 },
33114 "files": [
33115 "lib"
33116 ],
33117 "gitHead": "63aee8d697e9b7fac37ece24222029117a890a7e",
33118 "homepage": "https://github.com/indutny/elliptic",
33119 "keywords": [
33120 "EC",
33121 "Elliptic",
33122 "curve",
33123 "Cryptography"
33124 ],
33125 "license": "MIT",
33126 "main": "lib/elliptic.js",
33127 "maintainers": [
33128 {
33129 "name": "indutny",
33130 "email": "fedor@indutny.com"
33131 }
33132 ],
33133 "name": "elliptic",
33134 "optionalDependencies": {},
33135 "readme": "ERROR: No README data found!",
33136 "repository": {
33137 "type": "git",
33138 "url": "git+ssh://git@github.com/indutny/elliptic.git"
33139 },
33140 "scripts": {
33141 "jscs": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js",
33142 "jshint": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js",
33143 "lint": "npm run jscs && npm run jshint",
33144 "test": "npm run lint && npm run unit",
33145 "unit": "istanbul test _mocha --reporter=spec test/index.js",
33146 "version": "grunt dist && git add dist/"
33147 },
33148 "version": "6.3.3"
ebd8d4e8
IC
33149}
33150
8b095871
IC
33151},{}],56:[function(require,module,exports){
33152(function (Buffer){
33153'use strict';
ab78acc6 33154
8b095871
IC
33155var isHexPrefixed = require('is-hex-prefixed');
33156var stripHexPrefix = require('strip-hex-prefix');
ebd8d4e8 33157
8b095871
IC
33158/**
33159 * Pads a `String` to have an even length
33160 * @param {String} value
33161 * @return {String} output
33162 */
33163function padToEven(value) {
33164 var a = value; // eslint-disable-line
33165
33166 if (typeof a !== 'string') {
33167 throw new Error('[ethjs-util] while padding to even, value must be string, is currently ' + typeof a + ', while padToEven.');
33168 }
33169
33170 if (a.length % 2) {
33171 a = '0' + a;
33172 }
33173
33174 return a;
ebd8d4e8
IC
33175}
33176
8b095871
IC
33177/**
33178 * Converts a `Number` into a hex `String`
33179 * @param {Number} i
33180 * @return {String}
33181 */
33182function intToHex(i) {
33183 var hex = i.toString(16); // eslint-disable-line
ebd8d4e8 33184
8b095871
IC
33185 return '0x' + padToEven(hex);
33186}
ab78acc6 33187
8b095871
IC
33188/**
33189 * Converts an `Number` to a `Buffer`
33190 * @param {Number} i
33191 * @return {Buffer}
33192 */
33193function intToBuffer(i) {
33194 var hex = intToHex(i);
ab78acc6 33195
8b095871
IC
33196 return new Buffer(hex.slice(2), 'hex');
33197}
ebd8d4e8 33198
8b095871
IC
33199/**
33200 * Get the binary size of a string
33201 * @param {String} str
33202 * @return {Number}
33203 */
33204function getBinarySize(str) {
33205 if (typeof str !== 'string') {
33206 throw new Error('[ethjs-util] while getting binary size, method getBinarySize requires input \'str\' to be type String, got \'' + typeof str + '\'.');
33207 }
ebd8d4e8 33208
8b095871
IC
33209 return Buffer.byteLength(str, 'utf8');
33210}
33211
33212/**
33213 * Returns TRUE if the first specified array contains all elements
33214 * from the second one. FALSE otherwise.
33215 *
33216 * @param {array} superset
33217 * @param {array} subset
33218 *
33219 * @returns {boolean}
33220 */
33221function arrayContainsArray(superset, subset, some) {
33222 if (Array.isArray(superset) !== true) {
33223 throw new Error('[ethjs-util] method arrayContainsArray requires input \'superset\' to be an array got type \'' + typeof superset + '\'');
33224 }
33225 if (Array.isArray(subset) !== true) {
33226 throw new Error('[ethjs-util] method arrayContainsArray requires input \'subset\' to be an array got type \'' + typeof subset + '\'');
ebd8d4e8
IC
33227 }
33228
8b095871
IC
33229 return subset[Boolean(some) && 'some' || 'every'](function (value) {
33230 return superset.indexOf(value) >= 0;
33231 });
ebd8d4e8
IC
33232}
33233
8b095871
IC
33234/**
33235 * Should be called to get utf8 from it's hex representation
33236 *
33237 * @method toUtf8
33238 * @param {String} string in hex
33239 * @returns {String} ascii string representation of hex value
33240 */
33241function toUtf8(hex) {
33242 var bufferValue = new Buffer(padToEven(stripHexPrefix(hex).replace(/^0+|0+$/g, '')), 'hex');
ebd8d4e8 33243
8b095871
IC
33244 return bufferValue.toString('utf8');
33245}
ab78acc6 33246
8b095871
IC
33247/**
33248 * Should be called to get ascii from it's hex representation
33249 *
33250 * @method toAscii
33251 * @param {String} string in hex
33252 * @returns {String} ascii string representation of hex value
33253 */
33254function toAscii(hex) {
33255 var str = ''; // eslint-disable-line
33256 var i = 0,
33257 l = hex.length; // eslint-disable-line
ebd8d4e8 33258
8b095871
IC
33259 if (hex.substring(0, 2) === '0x') {
33260 i = 2;
33261 }
ebd8d4e8 33262
8b095871
IC
33263 for (; i < l; i += 2) {
33264 var code = parseInt(hex.substr(i, 2), 16);
33265 str += String.fromCharCode(code);
ebd8d4e8 33266 }
8b095871
IC
33267
33268 return str;
ebd8d4e8
IC
33269}
33270
8b095871
IC
33271/**
33272 * Should be called to get hex representation (prefixed by 0x) of utf8 string
33273 *
33274 * @method fromUtf8
33275 * @param {String} string
33276 * @param {Number} optional padding
33277 * @returns {String} hex representation of input string
33278 */
33279function fromUtf8(stringValue) {
33280 var str = new Buffer(stringValue, 'utf8');
ebd8d4e8 33281
8b095871
IC
33282 return '0x' + padToEven(str.toString('hex')).replace(/^0+|0+$/g, '');
33283}
ab78acc6 33284
8b095871
IC
33285/**
33286 * Should be called to get hex representation (prefixed by 0x) of ascii string
33287 *
33288 * @method fromAscii
33289 * @param {String} string
33290 * @param {Number} optional padding
33291 * @returns {String} hex representation of input string
33292 */
33293function fromAscii(stringValue) {
33294 var hex = ''; // eslint-disable-line
33295 for (var i = 0; i < stringValue.length; i++) {
33296 // eslint-disable-line
33297 var code = stringValue.charCodeAt(i);
33298 var n = code.toString(16);
33299 hex += n.length < 2 ? '0' + n : n;
33300 }
ab78acc6 33301
8b095871
IC
33302 return '0x' + hex;
33303}
ebd8d4e8 33304
8b095871
IC
33305/**
33306 * getKeys([{a: 1, b: 2}, {a: 3, b: 4}], 'a') => [1, 3]
33307 *
33308 * @method getKeys get specific key from inner object array of objects
33309 * @param {String} params
33310 * @param {String} key
33311 * @param {Boolean} allowEmpty
33312 * @returns {Array} output just a simple array of output keys
33313 */
33314function getKeys(params, key, allowEmpty) {
33315 if (!Array.isArray(params)) {
33316 throw new Error('[ethjs-util] method getKeys expecting type Array as \'params\' input, got \'' + typeof params + '\'');
33317 }
33318 if (typeof key !== 'string') {
33319 throw new Error('[ethjs-util] method getKeys expecting type String for input \'key\' got \'' + typeof key + '\'.');
33320 }
ebd8d4e8 33321
8b095871 33322 var result = []; // eslint-disable-line
ebd8d4e8 33323
8b095871
IC
33324 for (var i = 0; i < params.length; i++) {
33325 // eslint-disable-line
33326 var value = params[i][key]; // eslint-disable-line
33327 if (allowEmpty && !value) {
33328 value = '';
33329 } else if (typeof value !== 'string') {
33330 throw new Error('invalid abi');
33331 }
33332 result.push(value);
33333 }
ebd8d4e8 33334
8b095871 33335 return result;
ebd8d4e8
IC
33336}
33337
8b095871
IC
33338/**
33339 * Is the string a hex string.
33340 *
33341 * @method check if string is hex string of specific length
33342 * @param {String} value
33343 * @param {Number} length
33344 * @returns {Boolean} output the string is a hex string
33345 */
33346function isHexString(value, length) {
33347 if (typeof value !== 'string' || !value.match(/^0x[0-9A-Fa-f]*$/)) {
33348 return false;
ab78acc6
IC
33349 }
33350
8b095871
IC
33351 if (length && value.length !== 2 + 2 * length) {
33352 return false;
33353 }
ebd8d4e8 33354
8b095871
IC
33355 return true;
33356}
ab78acc6 33357
8b095871
IC
33358module.exports = {
33359 arrayContainsArray: arrayContainsArray,
33360 intToBuffer: intToBuffer,
33361 getBinarySize: getBinarySize,
33362 isHexPrefixed: isHexPrefixed,
33363 stripHexPrefix: stripHexPrefix,
33364 padToEven: padToEven,
33365 intToHex: intToHex,
33366 fromAscii: fromAscii,
33367 fromUtf8: fromUtf8,
33368 toAscii: toAscii,
33369 toUtf8: toUtf8,
33370 getKeys: getKeys,
33371 isHexString: isHexString
33372};
33373}).call(this,require("buffer").Buffer)
33374},{"buffer":5,"is-hex-prefixed":64,"strip-hex-prefix":87}],57:[function(require,module,exports){
33375var hash = exports;
33376
33377hash.utils = require('./hash/utils');
33378hash.common = require('./hash/common');
33379hash.sha = require('./hash/sha');
33380hash.ripemd = require('./hash/ripemd');
33381hash.hmac = require('./hash/hmac');
33382
33383// Proxy hash functions to the main object
33384hash.sha1 = hash.sha.sha1;
33385hash.sha256 = hash.sha.sha256;
33386hash.sha224 = hash.sha.sha224;
33387hash.sha384 = hash.sha.sha384;
33388hash.sha512 = hash.sha.sha512;
33389hash.ripemd160 = hash.ripemd.ripemd160;
33390
33391},{"./hash/common":58,"./hash/hmac":59,"./hash/ripemd":60,"./hash/sha":61,"./hash/utils":62}],58:[function(require,module,exports){
33392var hash = require('../hash');
33393var utils = hash.utils;
33394var assert = utils.assert;
33395
33396function BlockHash() {
33397 this.pending = null;
33398 this.pendingTotal = 0;
33399 this.blockSize = this.constructor.blockSize;
33400 this.outSize = this.constructor.outSize;
33401 this.hmacStrength = this.constructor.hmacStrength;
33402 this.padLength = this.constructor.padLength / 8;
33403 this.endian = 'big';
33404
33405 this._delta8 = this.blockSize / 8;
33406 this._delta32 = this.blockSize / 32;
33407}
33408exports.BlockHash = BlockHash;
33409
33410BlockHash.prototype.update = function update(msg, enc) {
33411 // Convert message to array, pad it, and join into 32bit blocks
33412 msg = utils.toArray(msg, enc);
33413 if (!this.pending)
33414 this.pending = msg;
33415 else
33416 this.pending = this.pending.concat(msg);
33417 this.pendingTotal += msg.length;
ab78acc6 33418
8b095871
IC
33419 // Enough data, try updating
33420 if (this.pending.length >= this._delta8) {
33421 msg = this.pending;
ebd8d4e8 33422
8b095871
IC
33423 // Process pending data in blocks
33424 var r = msg.length % this._delta8;
33425 this.pending = msg.slice(msg.length - r, msg.length);
33426 if (this.pending.length === 0)
33427 this.pending = null;
ebd8d4e8 33428
8b095871
IC
33429 msg = utils.join32(msg, 0, msg.length - r, this.endian);
33430 for (var i = 0; i < msg.length; i += this._delta32)
33431 this._update(msg, i, i + this._delta32);
ebd8d4e8
IC
33432 }
33433
8b095871
IC
33434 return this;
33435};
ebd8d4e8 33436
8b095871
IC
33437BlockHash.prototype.digest = function digest(enc) {
33438 this.update(this._pad());
33439 assert(this.pending === null);
ebd8d4e8 33440
8b095871
IC
33441 return this._digest(enc);
33442};
ebd8d4e8 33443
8b095871
IC
33444BlockHash.prototype._pad = function pad() {
33445 var len = this.pendingTotal;
33446 var bytes = this._delta8;
33447 var k = bytes - ((len + this.padLength) % bytes);
33448 var res = new Array(k + this.padLength);
33449 res[0] = 0x80;
33450 for (var i = 1; i < k; i++)
33451 res[i] = 0;
33452
33453 // Append length
33454 len <<= 3;
33455 if (this.endian === 'big') {
33456 for (var t = 8; t < this.padLength; t++)
33457 res[i++] = 0;
33458
33459 res[i++] = 0;
33460 res[i++] = 0;
33461 res[i++] = 0;
33462 res[i++] = 0;
33463 res[i++] = (len >>> 24) & 0xff;
33464 res[i++] = (len >>> 16) & 0xff;
33465 res[i++] = (len >>> 8) & 0xff;
33466 res[i++] = len & 0xff;
ebd8d4e8 33467 } else {
8b095871
IC
33468 res[i++] = len & 0xff;
33469 res[i++] = (len >>> 8) & 0xff;
33470 res[i++] = (len >>> 16) & 0xff;
33471 res[i++] = (len >>> 24) & 0xff;
33472 res[i++] = 0;
33473 res[i++] = 0;
33474 res[i++] = 0;
33475 res[i++] = 0;
ebd8d4e8 33476
8b095871
IC
33477 for (var t = 8; t < this.padLength; t++)
33478 res[i++] = 0;
ebd8d4e8
IC
33479 }
33480
8b095871
IC
33481 return res;
33482};
ebd8d4e8 33483
8b095871
IC
33484},{"../hash":57}],59:[function(require,module,exports){
33485var hmac = exports;
ebd8d4e8 33486
8b095871
IC
33487var hash = require('../hash');
33488var utils = hash.utils;
33489var assert = utils.assert;
ebd8d4e8 33490
8b095871
IC
33491function Hmac(hash, key, enc) {
33492 if (!(this instanceof Hmac))
33493 return new Hmac(hash, key, enc);
33494 this.Hash = hash;
33495 this.blockSize = hash.blockSize / 8;
33496 this.outSize = hash.outSize / 8;
33497 this.inner = null;
33498 this.outer = null;
ebd8d4e8 33499
8b095871 33500 this._init(utils.toArray(key, enc));
ebd8d4e8 33501}
8b095871 33502module.exports = Hmac;
ebd8d4e8 33503
8b095871
IC
33504Hmac.prototype._init = function init(key) {
33505 // Shorten key, if needed
33506 if (key.length > this.blockSize)
33507 key = new this.Hash().update(key).digest();
33508 assert(key.length <= this.blockSize);
ebd8d4e8 33509
8b095871
IC
33510 // Add padding to key
33511 for (var i = key.length; i < this.blockSize; i++)
33512 key.push(0);
ab78acc6 33513
8b095871
IC
33514 for (var i = 0; i < key.length; i++)
33515 key[i] ^= 0x36;
33516 this.inner = new this.Hash().update(key);
ab78acc6 33517
8b095871
IC
33518 // 0x36 ^ 0x5c = 0x6a
33519 for (var i = 0; i < key.length; i++)
33520 key[i] ^= 0x6a;
33521 this.outer = new this.Hash().update(key);
33522};
ebd8d4e8 33523
8b095871
IC
33524Hmac.prototype.update = function update(msg, enc) {
33525 this.inner.update(msg, enc);
33526 return this;
33527};
ab78acc6 33528
8b095871
IC
33529Hmac.prototype.digest = function digest(enc) {
33530 this.outer.update(this.inner.digest());
33531 return this.outer.digest(enc);
33532};
ab78acc6 33533
8b095871
IC
33534},{"../hash":57}],60:[function(require,module,exports){
33535var hash = require('../hash');
33536var utils = hash.utils;
33537
33538var rotl32 = utils.rotl32;
33539var sum32 = utils.sum32;
33540var sum32_3 = utils.sum32_3;
33541var sum32_4 = utils.sum32_4;
33542var BlockHash = hash.common.BlockHash;
33543
33544function RIPEMD160() {
33545 if (!(this instanceof RIPEMD160))
33546 return new RIPEMD160();
33547
33548 BlockHash.call(this);
33549
33550 this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];
33551 this.endian = 'little';
33552}
33553utils.inherits(RIPEMD160, BlockHash);
33554exports.ripemd160 = RIPEMD160;
33555
33556RIPEMD160.blockSize = 512;
33557RIPEMD160.outSize = 160;
33558RIPEMD160.hmacStrength = 192;
33559RIPEMD160.padLength = 64;
33560
33561RIPEMD160.prototype._update = function update(msg, start) {
33562 var A = this.h[0];
33563 var B = this.h[1];
33564 var C = this.h[2];
33565 var D = this.h[3];
33566 var E = this.h[4];
33567 var Ah = A;
33568 var Bh = B;
33569 var Ch = C;
33570 var Dh = D;
33571 var Eh = E;
33572 for (var j = 0; j < 80; j++) {
33573 var T = sum32(
33574 rotl32(
33575 sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),
33576 s[j]),
33577 E);
33578 A = E;
33579 E = D;
33580 D = rotl32(C, 10);
33581 C = B;
33582 B = T;
33583 T = sum32(
33584 rotl32(
33585 sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),
33586 sh[j]),
33587 Eh);
33588 Ah = Eh;
33589 Eh = Dh;
33590 Dh = rotl32(Ch, 10);
33591 Ch = Bh;
33592 Bh = T;
33593 }
33594 T = sum32_3(this.h[1], C, Dh);
33595 this.h[1] = sum32_3(this.h[2], D, Eh);
33596 this.h[2] = sum32_3(this.h[3], E, Ah);
33597 this.h[3] = sum32_3(this.h[4], A, Bh);
33598 this.h[4] = sum32_3(this.h[0], B, Ch);
33599 this.h[0] = T;
33600};
ebd8d4e8 33601
8b095871
IC
33602RIPEMD160.prototype._digest = function digest(enc) {
33603 if (enc === 'hex')
33604 return utils.toHex32(this.h, 'little');
33605 else
33606 return utils.split32(this.h, 'little');
33607};
ebd8d4e8 33608
8b095871
IC
33609function f(j, x, y, z) {
33610 if (j <= 15)
33611 return x ^ y ^ z;
33612 else if (j <= 31)
33613 return (x & y) | ((~x) & z);
33614 else if (j <= 47)
33615 return (x | (~y)) ^ z;
33616 else if (j <= 63)
33617 return (x & z) | (y & (~z));
33618 else
33619 return x ^ (y | (~z));
33620}
33621
33622function K(j) {
33623 if (j <= 15)
33624 return 0x00000000;
33625 else if (j <= 31)
33626 return 0x5a827999;
33627 else if (j <= 47)
33628 return 0x6ed9eba1;
33629 else if (j <= 63)
33630 return 0x8f1bbcdc;
33631 else
33632 return 0xa953fd4e;
33633}
33634
33635function Kh(j) {
33636 if (j <= 15)
33637 return 0x50a28be6;
33638 else if (j <= 31)
33639 return 0x5c4dd124;
33640 else if (j <= 47)
33641 return 0x6d703ef3;
33642 else if (j <= 63)
33643 return 0x7a6d76e9;
33644 else
33645 return 0x00000000;
33646}
ebd8d4e8 33647
8b095871
IC
33648var r = [
33649 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
33650 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
33651 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
33652 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
33653 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
33654];
ebd8d4e8 33655
8b095871
IC
33656var rh = [
33657 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
33658 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
33659 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
33660 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
33661 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
33662];
ebd8d4e8 33663
8b095871
IC
33664var s = [
33665 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
33666 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
33667 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
33668 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
33669 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
33670];
ebd8d4e8 33671
8b095871
IC
33672var sh = [
33673 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
33674 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
33675 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
33676 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
33677 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
33678];
ebd8d4e8 33679
8b095871
IC
33680},{"../hash":57}],61:[function(require,module,exports){
33681var hash = require('../hash');
33682var utils = hash.utils;
33683var assert = utils.assert;
33684
33685var rotr32 = utils.rotr32;
33686var rotl32 = utils.rotl32;
33687var sum32 = utils.sum32;
33688var sum32_4 = utils.sum32_4;
33689var sum32_5 = utils.sum32_5;
33690var rotr64_hi = utils.rotr64_hi;
33691var rotr64_lo = utils.rotr64_lo;
33692var shr64_hi = utils.shr64_hi;
33693var shr64_lo = utils.shr64_lo;
33694var sum64 = utils.sum64;
33695var sum64_hi = utils.sum64_hi;
33696var sum64_lo = utils.sum64_lo;
33697var sum64_4_hi = utils.sum64_4_hi;
33698var sum64_4_lo = utils.sum64_4_lo;
33699var sum64_5_hi = utils.sum64_5_hi;
33700var sum64_5_lo = utils.sum64_5_lo;
33701var BlockHash = hash.common.BlockHash;
33702
33703var sha256_K = [
33704 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,
33705 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
33706 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,
33707 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
33708 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,
33709 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
33710 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,
33711 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
33712 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,
33713 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
33714 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,
33715 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
33716 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,
33717 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
33718 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,
33719 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2
33720];
ebd8d4e8 33721
8b095871
IC
33722var sha512_K = [
33723 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
33724 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
33725 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
33726 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
33727 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
33728 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
33729 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
33730 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
33731 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
33732 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
33733 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
33734 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
33735 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
33736 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
33737 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
33738 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
33739 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
33740 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
33741 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
33742 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
33743 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
33744 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
33745 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
33746 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
33747 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
33748 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
33749 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
33750 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
33751 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
33752 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
33753 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
33754 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
33755 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
33756 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
33757 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
33758 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
33759 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
33760 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
33761 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
33762 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
33763];
ebd8d4e8 33764
8b095871
IC
33765var sha1_K = [
33766 0x5A827999, 0x6ED9EBA1,
33767 0x8F1BBCDC, 0xCA62C1D6
33768];
ebd8d4e8 33769
8b095871
IC
33770function SHA256() {
33771 if (!(this instanceof SHA256))
33772 return new SHA256();
33773
33774 BlockHash.call(this);
33775 this.h = [ 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,
33776 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19 ];
33777 this.k = sha256_K;
33778 this.W = new Array(64);
33779}
33780utils.inherits(SHA256, BlockHash);
33781exports.sha256 = SHA256;
33782
33783SHA256.blockSize = 512;
33784SHA256.outSize = 256;
33785SHA256.hmacStrength = 192;
33786SHA256.padLength = 64;
33787
33788SHA256.prototype._update = function _update(msg, start) {
33789 var W = this.W;
33790
33791 for (var i = 0; i < 16; i++)
33792 W[i] = msg[start + i];
33793 for (; i < W.length; i++)
33794 W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);
33795
33796 var a = this.h[0];
33797 var b = this.h[1];
33798 var c = this.h[2];
33799 var d = this.h[3];
33800 var e = this.h[4];
33801 var f = this.h[5];
33802 var g = this.h[6];
33803 var h = this.h[7];
33804
33805 assert(this.k.length === W.length);
33806 for (var i = 0; i < W.length; i++) {
33807 var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);
33808 var T2 = sum32(s0_256(a), maj32(a, b, c));
33809 h = g;
33810 g = f;
33811 f = e;
33812 e = sum32(d, T1);
33813 d = c;
33814 c = b;
33815 b = a;
33816 a = sum32(T1, T2);
33817 }
33818
33819 this.h[0] = sum32(this.h[0], a);
33820 this.h[1] = sum32(this.h[1], b);
33821 this.h[2] = sum32(this.h[2], c);
33822 this.h[3] = sum32(this.h[3], d);
33823 this.h[4] = sum32(this.h[4], e);
33824 this.h[5] = sum32(this.h[5], f);
33825 this.h[6] = sum32(this.h[6], g);
33826 this.h[7] = sum32(this.h[7], h);
33827};
ebd8d4e8 33828
8b095871
IC
33829SHA256.prototype._digest = function digest(enc) {
33830 if (enc === 'hex')
33831 return utils.toHex32(this.h, 'big');
33832 else
33833 return utils.split32(this.h, 'big');
33834};
ebd8d4e8 33835
8b095871
IC
33836function SHA224() {
33837 if (!(this instanceof SHA224))
33838 return new SHA224();
ebd8d4e8 33839
8b095871
IC
33840 SHA256.call(this);
33841 this.h = [ 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,
33842 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];
33843}
33844utils.inherits(SHA224, SHA256);
33845exports.sha224 = SHA224;
ebd8d4e8 33846
8b095871
IC
33847SHA224.blockSize = 512;
33848SHA224.outSize = 224;
33849SHA224.hmacStrength = 192;
33850SHA224.padLength = 64;
ebd8d4e8 33851
8b095871
IC
33852SHA224.prototype._digest = function digest(enc) {
33853 // Just truncate output
33854 if (enc === 'hex')
33855 return utils.toHex32(this.h.slice(0, 7), 'big');
33856 else
33857 return utils.split32(this.h.slice(0, 7), 'big');
33858};
33859
33860function SHA512() {
33861 if (!(this instanceof SHA512))
33862 return new SHA512();
33863
33864 BlockHash.call(this);
33865 this.h = [ 0x6a09e667, 0xf3bcc908,
33866 0xbb67ae85, 0x84caa73b,
33867 0x3c6ef372, 0xfe94f82b,
33868 0xa54ff53a, 0x5f1d36f1,
33869 0x510e527f, 0xade682d1,
33870 0x9b05688c, 0x2b3e6c1f,
33871 0x1f83d9ab, 0xfb41bd6b,
33872 0x5be0cd19, 0x137e2179 ];
33873 this.k = sha512_K;
33874 this.W = new Array(160);
33875}
33876utils.inherits(SHA512, BlockHash);
33877exports.sha512 = SHA512;
33878
33879SHA512.blockSize = 1024;
33880SHA512.outSize = 512;
33881SHA512.hmacStrength = 192;
33882SHA512.padLength = 128;
33883
33884SHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {
33885 var W = this.W;
33886
33887 // 32 x 32bit words
33888 for (var i = 0; i < 32; i++)
33889 W[i] = msg[start + i];
33890 for (; i < W.length; i += 2) {
33891 var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2
33892 var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);
33893 var c1_hi = W[i - 14]; // i - 7
33894 var c1_lo = W[i - 13];
33895 var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15
33896 var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);
33897 var c3_hi = W[i - 32]; // i - 16
33898 var c3_lo = W[i - 31];
33899
33900 W[i] = sum64_4_hi(c0_hi, c0_lo,
33901 c1_hi, c1_lo,
33902 c2_hi, c2_lo,
33903 c3_hi, c3_lo);
33904 W[i + 1] = sum64_4_lo(c0_hi, c0_lo,
33905 c1_hi, c1_lo,
33906 c2_hi, c2_lo,
33907 c3_hi, c3_lo);
ebd8d4e8 33908 }
8b095871
IC
33909};
33910
33911SHA512.prototype._update = function _update(msg, start) {
33912 this._prepareBlock(msg, start);
33913
33914 var W = this.W;
33915
33916 var ah = this.h[0];
33917 var al = this.h[1];
33918 var bh = this.h[2];
33919 var bl = this.h[3];
33920 var ch = this.h[4];
33921 var cl = this.h[5];
33922 var dh = this.h[6];
33923 var dl = this.h[7];
33924 var eh = this.h[8];
33925 var el = this.h[9];
33926 var fh = this.h[10];
33927 var fl = this.h[11];
33928 var gh = this.h[12];
33929 var gl = this.h[13];
33930 var hh = this.h[14];
33931 var hl = this.h[15];
33932
33933 assert(this.k.length === W.length);
33934 for (var i = 0; i < W.length; i += 2) {
33935 var c0_hi = hh;
33936 var c0_lo = hl;
33937 var c1_hi = s1_512_hi(eh, el);
33938 var c1_lo = s1_512_lo(eh, el);
33939 var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);
33940 var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);
33941 var c3_hi = this.k[i];
33942 var c3_lo = this.k[i + 1];
33943 var c4_hi = W[i];
33944 var c4_lo = W[i + 1];
33945
33946 var T1_hi = sum64_5_hi(c0_hi, c0_lo,
33947 c1_hi, c1_lo,
33948 c2_hi, c2_lo,
33949 c3_hi, c3_lo,
33950 c4_hi, c4_lo);
33951 var T1_lo = sum64_5_lo(c0_hi, c0_lo,
33952 c1_hi, c1_lo,
33953 c2_hi, c2_lo,
33954 c3_hi, c3_lo,
33955 c4_hi, c4_lo);
33956
33957 var c0_hi = s0_512_hi(ah, al);
33958 var c0_lo = s0_512_lo(ah, al);
33959 var c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);
33960 var c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);
33961
33962 var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);
33963 var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);
33964
33965 hh = gh;
33966 hl = gl;
33967
33968 gh = fh;
33969 gl = fl;
33970
33971 fh = eh;
33972 fl = el;
33973
33974 eh = sum64_hi(dh, dl, T1_hi, T1_lo);
33975 el = sum64_lo(dl, dl, T1_hi, T1_lo);
33976
33977 dh = ch;
33978 dl = cl;
33979
33980 ch = bh;
33981 cl = bl;
33982
33983 bh = ah;
33984 bl = al;
33985
33986 ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);
33987 al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);
33988 }
33989
33990 sum64(this.h, 0, ah, al);
33991 sum64(this.h, 2, bh, bl);
33992 sum64(this.h, 4, ch, cl);
33993 sum64(this.h, 6, dh, dl);
33994 sum64(this.h, 8, eh, el);
33995 sum64(this.h, 10, fh, fl);
33996 sum64(this.h, 12, gh, gl);
33997 sum64(this.h, 14, hh, hl);
33998};
33999
34000SHA512.prototype._digest = function digest(enc) {
34001 if (enc === 'hex')
34002 return utils.toHex32(this.h, 'big');
34003 else
34004 return utils.split32(this.h, 'big');
34005};
34006
34007function SHA384() {
34008 if (!(this instanceof SHA384))
34009 return new SHA384();
34010
34011 SHA512.call(this);
34012 this.h = [ 0xcbbb9d5d, 0xc1059ed8,
34013 0x629a292a, 0x367cd507,
34014 0x9159015a, 0x3070dd17,
34015 0x152fecd8, 0xf70e5939,
34016 0x67332667, 0xffc00b31,
34017 0x8eb44a87, 0x68581511,
34018 0xdb0c2e0d, 0x64f98fa7,
34019 0x47b5481d, 0xbefa4fa4 ];
34020}
34021utils.inherits(SHA384, SHA512);
34022exports.sha384 = SHA384;
34023
34024SHA384.blockSize = 1024;
34025SHA384.outSize = 384;
34026SHA384.hmacStrength = 192;
34027SHA384.padLength = 128;
34028
34029SHA384.prototype._digest = function digest(enc) {
34030 if (enc === 'hex')
34031 return utils.toHex32(this.h.slice(0, 12), 'big');
34032 else
34033 return utils.split32(this.h.slice(0, 12), 'big');
34034};
ebd8d4e8 34035
8b095871
IC
34036function SHA1() {
34037 if (!(this instanceof SHA1))
34038 return new SHA1();
ebd8d4e8 34039
8b095871
IC
34040 BlockHash.call(this);
34041 this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe,
34042 0x10325476, 0xc3d2e1f0 ];
34043 this.W = new Array(80);
34044}
ebd8d4e8 34045
8b095871
IC
34046utils.inherits(SHA1, BlockHash);
34047exports.sha1 = SHA1;
ebd8d4e8 34048
8b095871
IC
34049SHA1.blockSize = 512;
34050SHA1.outSize = 160;
34051SHA1.hmacStrength = 80;
34052SHA1.padLength = 64;
ebd8d4e8 34053
8b095871
IC
34054SHA1.prototype._update = function _update(msg, start) {
34055 var W = this.W;
ebd8d4e8 34056
8b095871
IC
34057 for (var i = 0; i < 16; i++)
34058 W[i] = msg[start + i];
ebd8d4e8 34059
8b095871
IC
34060 for(; i < W.length; i++)
34061 W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);
ebd8d4e8 34062
8b095871
IC
34063 var a = this.h[0];
34064 var b = this.h[1];
34065 var c = this.h[2];
34066 var d = this.h[3];
34067 var e = this.h[4];
ebd8d4e8 34068
8b095871
IC
34069 for (var i = 0; i < W.length; i++) {
34070 var s = ~~(i / 20);
34071 var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);
34072 e = d;
34073 d = c;
34074 c = rotl32(b, 30);
34075 b = a;
34076 a = t;
ebd8d4e8
IC
34077 }
34078
8b095871
IC
34079 this.h[0] = sum32(this.h[0], a);
34080 this.h[1] = sum32(this.h[1], b);
34081 this.h[2] = sum32(this.h[2], c);
34082 this.h[3] = sum32(this.h[3], d);
34083 this.h[4] = sum32(this.h[4], e);
34084};
ebd8d4e8 34085
8b095871
IC
34086SHA1.prototype._digest = function digest(enc) {
34087 if (enc === 'hex')
34088 return utils.toHex32(this.h, 'big');
34089 else
34090 return utils.split32(this.h, 'big');
34091};
34092
34093function ch32(x, y, z) {
34094 return (x & y) ^ ((~x) & z);
ebd8d4e8
IC
34095}
34096
8b095871
IC
34097function maj32(x, y, z) {
34098 return (x & y) ^ (x & z) ^ (y & z);
ebd8d4e8
IC
34099}
34100
8b095871
IC
34101function p32(x, y, z) {
34102 return x ^ y ^ z;
34103}
ebd8d4e8 34104
8b095871
IC
34105function s0_256(x) {
34106 return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);
34107}
ebd8d4e8 34108
8b095871
IC
34109function s1_256(x) {
34110 return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);
ab78acc6
IC
34111}
34112
8b095871
IC
34113function g0_256(x) {
34114 return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);
34115}
ab78acc6 34116
8b095871
IC
34117function g1_256(x) {
34118 return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);
34119}
ab78acc6 34120
8b095871
IC
34121function ft_1(s, x, y, z) {
34122 if (s === 0)
34123 return ch32(x, y, z);
34124 if (s === 1 || s === 3)
34125 return p32(x, y, z);
34126 if (s === 2)
34127 return maj32(x, y, z);
34128}
ebd8d4e8 34129
8b095871
IC
34130function ch64_hi(xh, xl, yh, yl, zh, zl) {
34131 var r = (xh & yh) ^ ((~xh) & zh);
34132 if (r < 0)
34133 r += 0x100000000;
34134 return r;
34135}
ebd8d4e8 34136
8b095871
IC
34137function ch64_lo(xh, xl, yh, yl, zh, zl) {
34138 var r = (xl & yl) ^ ((~xl) & zl);
34139 if (r < 0)
34140 r += 0x100000000;
34141 return r;
ebd8d4e8
IC
34142}
34143
8b095871
IC
34144function maj64_hi(xh, xl, yh, yl, zh, zl) {
34145 var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);
34146 if (r < 0)
34147 r += 0x100000000;
34148 return r;
34149}
ebd8d4e8 34150
8b095871
IC
34151function maj64_lo(xh, xl, yh, yl, zh, zl) {
34152 var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);
34153 if (r < 0)
34154 r += 0x100000000;
34155 return r;
34156}
ebd8d4e8 34157
8b095871
IC
34158function s0_512_hi(xh, xl) {
34159 var c0_hi = rotr64_hi(xh, xl, 28);
34160 var c1_hi = rotr64_hi(xl, xh, 2); // 34
34161 var c2_hi = rotr64_hi(xl, xh, 7); // 39
34162
34163 var r = c0_hi ^ c1_hi ^ c2_hi;
34164 if (r < 0)
34165 r += 0x100000000;
34166 return r;
ebd8d4e8
IC
34167}
34168
8b095871
IC
34169function s0_512_lo(xh, xl) {
34170 var c0_lo = rotr64_lo(xh, xl, 28);
34171 var c1_lo = rotr64_lo(xl, xh, 2); // 34
34172 var c2_lo = rotr64_lo(xl, xh, 7); // 39
ab78acc6 34173
8b095871
IC
34174 var r = c0_lo ^ c1_lo ^ c2_lo;
34175 if (r < 0)
34176 r += 0x100000000;
34177 return r;
34178}
ebd8d4e8 34179
8b095871
IC
34180function s1_512_hi(xh, xl) {
34181 var c0_hi = rotr64_hi(xh, xl, 14);
34182 var c1_hi = rotr64_hi(xh, xl, 18);
34183 var c2_hi = rotr64_hi(xl, xh, 9); // 41
ebd8d4e8 34184
8b095871
IC
34185 var r = c0_hi ^ c1_hi ^ c2_hi;
34186 if (r < 0)
34187 r += 0x100000000;
34188 return r;
ebd8d4e8
IC
34189}
34190
8b095871
IC
34191function s1_512_lo(xh, xl) {
34192 var c0_lo = rotr64_lo(xh, xl, 14);
34193 var c1_lo = rotr64_lo(xh, xl, 18);
34194 var c2_lo = rotr64_lo(xl, xh, 9); // 41
34195
34196 var r = c0_lo ^ c1_lo ^ c2_lo;
34197 if (r < 0)
34198 r += 0x100000000;
34199 return r;
ebd8d4e8
IC
34200}
34201
8b095871
IC
34202function g0_512_hi(xh, xl) {
34203 var c0_hi = rotr64_hi(xh, xl, 1);
34204 var c1_hi = rotr64_hi(xh, xl, 8);
34205 var c2_hi = shr64_hi(xh, xl, 7);
ebd8d4e8 34206
8b095871
IC
34207 var r = c0_hi ^ c1_hi ^ c2_hi;
34208 if (r < 0)
34209 r += 0x100000000;
34210 return r;
34211}
34212
34213function g0_512_lo(xh, xl) {
34214 var c0_lo = rotr64_lo(xh, xl, 1);
34215 var c1_lo = rotr64_lo(xh, xl, 8);
34216 var c2_lo = shr64_lo(xh, xl, 7);
34217
34218 var r = c0_lo ^ c1_lo ^ c2_lo;
34219 if (r < 0)
34220 r += 0x100000000;
34221 return r;
34222}
34223
34224function g1_512_hi(xh, xl) {
34225 var c0_hi = rotr64_hi(xh, xl, 19);
34226 var c1_hi = rotr64_hi(xl, xh, 29); // 61
34227 var c2_hi = shr64_hi(xh, xl, 6);
34228
34229 var r = c0_hi ^ c1_hi ^ c2_hi;
34230 if (r < 0)
34231 r += 0x100000000;
34232 return r;
34233}
34234
34235function g1_512_lo(xh, xl) {
34236 var c0_lo = rotr64_lo(xh, xl, 19);
34237 var c1_lo = rotr64_lo(xl, xh, 29); // 61
34238 var c2_lo = shr64_lo(xh, xl, 6);
34239
34240 var r = c0_lo ^ c1_lo ^ c2_lo;
34241 if (r < 0)
34242 r += 0x100000000;
34243 return r;
34244}
34245
34246},{"../hash":57}],62:[function(require,module,exports){
34247var utils = exports;
34248var inherits = require('inherits');
34249
34250function toArray(msg, enc) {
34251 if (Array.isArray(msg))
34252 return msg.slice();
34253 if (!msg)
34254 return [];
34255 var res = [];
34256 if (typeof msg === 'string') {
34257 if (!enc) {
34258 for (var i = 0; i < msg.length; i++) {
34259 var c = msg.charCodeAt(i);
34260 var hi = c >> 8;
34261 var lo = c & 0xff;
34262 if (hi)
34263 res.push(hi, lo);
34264 else
34265 res.push(lo);
34266 }
34267 } else if (enc === 'hex') {
34268 msg = msg.replace(/[^a-z0-9]+/ig, '');
34269 if (msg.length % 2 !== 0)
34270 msg = '0' + msg;
34271 for (var i = 0; i < msg.length; i += 2)
34272 res.push(parseInt(msg[i] + msg[i + 1], 16));
34273 }
34274 } else {
34275 for (var i = 0; i < msg.length; i++)
34276 res[i] = msg[i] | 0;
ebd8d4e8 34277 }
8b095871 34278 return res;
ebd8d4e8 34279}
8b095871 34280utils.toArray = toArray;
ebd8d4e8 34281
8b095871
IC
34282function toHex(msg) {
34283 var res = '';
34284 for (var i = 0; i < msg.length; i++)
34285 res += zero2(msg[i].toString(16));
34286 return res;
34287}
34288utils.toHex = toHex;
ebd8d4e8 34289
8b095871
IC
34290function htonl(w) {
34291 var res = (w >>> 24) |
34292 ((w >>> 8) & 0xff00) |
34293 ((w << 8) & 0xff0000) |
34294 ((w & 0xff) << 24);
34295 return res >>> 0;
34296}
34297utils.htonl = htonl;
ebd8d4e8 34298
8b095871
IC
34299function toHex32(msg, endian) {
34300 var res = '';
34301 for (var i = 0; i < msg.length; i++) {
34302 var w = msg[i];
34303 if (endian === 'little')
34304 w = htonl(w);
34305 res += zero8(w.toString(16));
34306 }
34307 return res;
34308}
34309utils.toHex32 = toHex32;
ebd8d4e8 34310
8b095871
IC
34311function zero2(word) {
34312 if (word.length === 1)
34313 return '0' + word;
34314 else
34315 return word;
34316}
34317utils.zero2 = zero2;
34318
34319function zero8(word) {
34320 if (word.length === 7)
34321 return '0' + word;
34322 else if (word.length === 6)
34323 return '00' + word;
34324 else if (word.length === 5)
34325 return '000' + word;
34326 else if (word.length === 4)
34327 return '0000' + word;
34328 else if (word.length === 3)
34329 return '00000' + word;
34330 else if (word.length === 2)
34331 return '000000' + word;
34332 else if (word.length === 1)
34333 return '0000000' + word;
34334 else
34335 return word;
34336}
34337utils.zero8 = zero8;
34338
34339function join32(msg, start, end, endian) {
34340 var len = end - start;
34341 assert(len % 4 === 0);
34342 var res = new Array(len / 4);
34343 for (var i = 0, k = start; i < res.length; i++, k += 4) {
34344 var w;
34345 if (endian === 'big')
34346 w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];
34347 else
34348 w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];
34349 res[i] = w >>> 0;
34350 }
34351 return res;
34352}
34353utils.join32 = join32;
34354
34355function split32(msg, endian) {
34356 var res = new Array(msg.length * 4);
34357 for (var i = 0, k = 0; i < msg.length; i++, k += 4) {
34358 var m = msg[i];
34359 if (endian === 'big') {
34360 res[k] = m >>> 24;
34361 res[k + 1] = (m >>> 16) & 0xff;
34362 res[k + 2] = (m >>> 8) & 0xff;
34363 res[k + 3] = m & 0xff;
34364 } else {
34365 res[k + 3] = m >>> 24;
34366 res[k + 2] = (m >>> 16) & 0xff;
34367 res[k + 1] = (m >>> 8) & 0xff;
34368 res[k] = m & 0xff;
34369 }
ebd8d4e8 34370 }
8b095871 34371 return res;
ebd8d4e8 34372}
8b095871 34373utils.split32 = split32;
ebd8d4e8 34374
8b095871
IC
34375function rotr32(w, b) {
34376 return (w >>> b) | (w << (32 - b));
34377}
34378utils.rotr32 = rotr32;
ebd8d4e8 34379
8b095871
IC
34380function rotl32(w, b) {
34381 return (w << b) | (w >>> (32 - b));
34382}
34383utils.rotl32 = rotl32;
ebd8d4e8 34384
8b095871
IC
34385function sum32(a, b) {
34386 return (a + b) >>> 0;
34387}
34388utils.sum32 = sum32;
ebd8d4e8 34389
8b095871
IC
34390function sum32_3(a, b, c) {
34391 return (a + b + c) >>> 0;
34392}
34393utils.sum32_3 = sum32_3;
ebd8d4e8 34394
8b095871
IC
34395function sum32_4(a, b, c, d) {
34396 return (a + b + c + d) >>> 0;
34397}
34398utils.sum32_4 = sum32_4;
ebd8d4e8 34399
8b095871
IC
34400function sum32_5(a, b, c, d, e) {
34401 return (a + b + c + d + e) >>> 0;
34402}
34403utils.sum32_5 = sum32_5;
ebd8d4e8 34404
8b095871
IC
34405function assert(cond, msg) {
34406 if (!cond)
34407 throw new Error(msg || 'Assertion failed');
34408}
34409utils.assert = assert;
ab78acc6 34410
8b095871 34411utils.inherits = inherits;
ab78acc6 34412
8b095871
IC
34413function sum64(buf, pos, ah, al) {
34414 var bh = buf[pos];
34415 var bl = buf[pos + 1];
ab78acc6 34416
8b095871
IC
34417 var lo = (al + bl) >>> 0;
34418 var hi = (lo < al ? 1 : 0) + ah + bh;
34419 buf[pos] = hi >>> 0;
34420 buf[pos + 1] = lo;
34421}
34422exports.sum64 = sum64;
ebd8d4e8 34423
8b095871
IC
34424function sum64_hi(ah, al, bh, bl) {
34425 var lo = (al + bl) >>> 0;
34426 var hi = (lo < al ? 1 : 0) + ah + bh;
34427 return hi >>> 0;
34428};
34429exports.sum64_hi = sum64_hi;
ebd8d4e8 34430
8b095871
IC
34431function sum64_lo(ah, al, bh, bl) {
34432 var lo = al + bl;
34433 return lo >>> 0;
34434};
34435exports.sum64_lo = sum64_lo;
34436
34437function sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {
34438 var carry = 0;
34439 var lo = al;
34440 lo = (lo + bl) >>> 0;
34441 carry += lo < al ? 1 : 0;
34442 lo = (lo + cl) >>> 0;
34443 carry += lo < cl ? 1 : 0;
34444 lo = (lo + dl) >>> 0;
34445 carry += lo < dl ? 1 : 0;
34446
34447 var hi = ah + bh + ch + dh + carry;
34448 return hi >>> 0;
34449};
34450exports.sum64_4_hi = sum64_4_hi;
ebd8d4e8 34451
8b095871
IC
34452function sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {
34453 var lo = al + bl + cl + dl;
34454 return lo >>> 0;
34455};
34456exports.sum64_4_lo = sum64_4_lo;
34457
34458function sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {
34459 var carry = 0;
34460 var lo = al;
34461 lo = (lo + bl) >>> 0;
34462 carry += lo < al ? 1 : 0;
34463 lo = (lo + cl) >>> 0;
34464 carry += lo < cl ? 1 : 0;
34465 lo = (lo + dl) >>> 0;
34466 carry += lo < dl ? 1 : 0;
34467 lo = (lo + el) >>> 0;
34468 carry += lo < el ? 1 : 0;
34469
34470 var hi = ah + bh + ch + dh + eh + carry;
34471 return hi >>> 0;
34472};
34473exports.sum64_5_hi = sum64_5_hi;
34474
34475function sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {
34476 var lo = al + bl + cl + dl + el;
34477
34478 return lo >>> 0;
34479};
34480exports.sum64_5_lo = sum64_5_lo;
34481
34482function rotr64_hi(ah, al, num) {
34483 var r = (al << (32 - num)) | (ah >>> num);
34484 return r >>> 0;
34485};
34486exports.rotr64_hi = rotr64_hi;
34487
34488function rotr64_lo(ah, al, num) {
34489 var r = (ah << (32 - num)) | (al >>> num);
34490 return r >>> 0;
34491};
34492exports.rotr64_lo = rotr64_lo;
34493
34494function shr64_hi(ah, al, num) {
34495 return ah >>> num;
34496};
34497exports.shr64_hi = shr64_hi;
34498
34499function shr64_lo(ah, al, num) {
34500 var r = (ah << (32 - num)) | (al >>> num);
34501 return r >>> 0;
34502};
34503exports.shr64_lo = shr64_lo;
34504
34505},{"inherits":63}],63:[function(require,module,exports){
34506arguments[4][9][0].apply(exports,arguments)
34507},{"dup":9}],64:[function(require,module,exports){
34508/**
34509 * Returns a `Boolean` on whether or not the a `String` starts with '0x'
34510 * @param {String} str the string input value
34511 * @return {Boolean} a boolean if it is or is not hex prefixed
34512 * @throws if the str input is not a string
34513 */
34514module.exports = function isHexPrefixed(str) {
34515 if (typeof str !== 'string') {
34516 throw new Error("[is-hex-prefixed] value must be type 'string', is currently type " + (typeof str) + ", while checking isHexPrefixed.");
34517 }
34518
34519 return str.slice(0, 2) === '0x';
ebd8d4e8
IC
34520}
34521
8b095871
IC
34522},{}],65:[function(require,module,exports){
34523'use strict'
34524module.exports = require('./lib/api')(require('./lib/keccak'))
34525
34526},{"./lib/api":66,"./lib/keccak":70}],66:[function(require,module,exports){
34527'use strict'
34528var createKeccak = require('./keccak')
34529var createShake = require('./shake')
34530
34531module.exports = function (KeccakState) {
34532 var Keccak = createKeccak(KeccakState)
34533 var Shake = createShake(KeccakState)
34534
34535 return function (algorithm, options) {
34536 var hash = typeof algorithm === 'string' ? algorithm.toLowerCase() : algorithm
34537 switch (hash) {
34538 case 'keccak224': return new Keccak(1152, 448, null, 224, options)
34539 case 'keccak256': return new Keccak(1088, 512, null, 256, options)
34540 case 'keccak384': return new Keccak(832, 768, null, 384, options)
34541 case 'keccak512': return new Keccak(576, 1024, null, 512, options)
34542
34543 case 'sha3-224': return new Keccak(1152, 448, 0x06, 224, options)
34544 case 'sha3-256': return new Keccak(1088, 512, 0x06, 256, options)
34545 case 'sha3-384': return new Keccak(832, 768, 0x06, 384, options)
34546 case 'sha3-512': return new Keccak(576, 1024, 0x06, 512, options)
34547
34548 case 'shake128': return new Shake(1344, 256, 0x1f, options)
34549 case 'shake256': return new Shake(1088, 512, 0x1f, options)
34550
34551 default: throw new Error('Invald algorithm: ' + algorithm)
34552 }
34553 }
34554}
34555
34556},{"./keccak":67,"./shake":68}],67:[function(require,module,exports){
ebd8d4e8 34557(function (Buffer){
8b095871
IC
34558'use strict'
34559var Transform = require('stream').Transform
34560var inherits = require('inherits')
34561
34562module.exports = function (KeccakState) {
34563 function Keccak (rate, capacity, delimitedSuffix, hashBitLength, options) {
34564 Transform.call(this, options)
34565
34566 this._rate = rate
34567 this._capacity = capacity
34568 this._delimitedSuffix = delimitedSuffix
34569 this._hashBitLength = hashBitLength
34570 this._options = options
34571
34572 this._state = new KeccakState()
34573 this._state.initialize(rate, capacity)
34574 this._finalized = false
34575 }
34576
34577 inherits(Keccak, Transform)
34578
34579 Keccak.prototype._transform = function (chunk, encoding, callback) {
34580 var error = null
34581 try {
34582 this.update(chunk, encoding)
34583 } catch (err) {
34584 error = err
34585 }
34586
34587 callback(error)
34588 }
34589
34590 Keccak.prototype._flush = function (callback) {
34591 var error = null
34592 try {
34593 this.push(this.digest())
34594 } catch (err) {
34595 error = err
34596 }
34597
34598 callback(error)
34599 }
34600
34601 Keccak.prototype.update = function (data, encoding) {
34602 if (!Buffer.isBuffer(data) && typeof data !== 'string') throw new TypeError('Data must be a string or a buffer')
34603 if (this._finalized) throw new Error('Digest already called')
34604 if (!Buffer.isBuffer(data)) data = Buffer.from(data, encoding)
34605
34606 this._state.absorb(data)
34607
34608 return this
34609 }
34610
34611 Keccak.prototype.digest = function (encoding) {
34612 if (this._finalized) throw new Error('Digest already called')
34613 this._finalized = true
34614
34615 if (this._delimitedSuffix) this._state.absorbLastFewBits(this._delimitedSuffix)
34616 var digest = this._state.squeeze(this._hashBitLength / 8)
34617 if (encoding !== undefined) digest = digest.toString(encoding)
34618
34619 this._resetState()
34620
34621 return digest
34622 }
34623
34624 // remove result from memory
34625 Keccak.prototype._resetState = function () {
34626 this._state.initialize(this._rate, this._capacity)
34627 return this
34628 }
34629
34630 // because sometimes we need hash right now and little later
34631 Keccak.prototype._clone = function () {
34632 var clone = new Keccak(this._rate, this._capacity, this._delimitedSuffix, this._hashBitLength, this._options)
34633 this._state.copy(clone._state)
34634 clone._finalized = this._finalized
34635
34636 return clone
34637 }
34638
34639 return Keccak
34640}
34641
34642}).call(this,require("buffer").Buffer)
34643},{"buffer":5,"inherits":63,"stream":25}],68:[function(require,module,exports){
34644(function (Buffer){
34645'use strict'
34646var Transform = require('stream').Transform
34647var inherits = require('inherits')
34648
34649module.exports = function (KeccakState) {
34650 function Shake (rate, capacity, delimitedSuffix, options) {
34651 Transform.call(this, options)
34652
34653 this._rate = rate
34654 this._capacity = capacity
34655 this._delimitedSuffix = delimitedSuffix
34656 this._options = options
34657
34658 this._state = new KeccakState()
34659 this._state.initialize(rate, capacity)
34660 this._finalized = false
34661 }
34662
34663 inherits(Shake, Transform)
34664
34665 Shake.prototype._transform = function (chunk, encoding, callback) {
34666 var error = null
34667 try {
34668 this.update(chunk, encoding)
34669 } catch (err) {
34670 error = err
34671 }
ebd8d4e8 34672
8b095871
IC
34673 callback(error)
34674 }
ebd8d4e8 34675
8b095871 34676 Shake.prototype._flush = function () {}
ebd8d4e8 34677
8b095871
IC
34678 Shake.prototype._read = function (size) {
34679 this.push(this.squeeze(size))
34680 }
ebd8d4e8 34681
8b095871
IC
34682 Shake.prototype.update = function (data, encoding) {
34683 if (!Buffer.isBuffer(data) && typeof data !== 'string') throw new TypeError('Data must be a string or a buffer')
34684 if (this._finalized) throw new Error('Squeeze already called')
34685 if (!Buffer.isBuffer(data)) data = Buffer.from(data, encoding)
34686
34687 this._state.absorb(data)
34688
34689 return this
34690 }
34691
34692 Shake.prototype.squeeze = function (dataByteLength, encoding) {
34693 if (!this._finalized) {
34694 this._finalized = true
34695 this._state.absorbLastFewBits(this._delimitedSuffix)
ebd8d4e8 34696 }
ebd8d4e8 34697
8b095871
IC
34698 var data = this._state.squeeze(dataByteLength)
34699 if (encoding !== undefined) data = data.toString(encoding)
ebd8d4e8 34700
8b095871
IC
34701 return data
34702 }
ebd8d4e8 34703
8b095871
IC
34704 Shake.prototype._resetState = function () {
34705 this._state.initialize(this._rate, this._capacity)
34706 return this
34707 }
ebd8d4e8 34708
8b095871
IC
34709 Shake.prototype._clone = function () {
34710 var clone = new Shake(this._rate, this._capacity, this._delimitedSuffix, this._options)
34711 this._state.copy(clone._state)
34712 clone._finalized = this._finalized
ab78acc6 34713
8b095871
IC
34714 return clone
34715 }
ebd8d4e8 34716
8b095871
IC
34717 return Shake
34718}
ab78acc6 34719
8b095871
IC
34720}).call(this,require("buffer").Buffer)
34721},{"buffer":5,"inherits":63,"stream":25}],69:[function(require,module,exports){
34722'use strict'
34723var 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]
34724
34725exports.p1600 = function (s) {
34726 for (var round = 0; round < 24; ++round) {
34727 // theta
34728 var lo0 = s[0] ^ s[10] ^ s[20] ^ s[30] ^ s[40]
34729 var hi0 = s[1] ^ s[11] ^ s[21] ^ s[31] ^ s[41]
34730 var lo1 = s[2] ^ s[12] ^ s[22] ^ s[32] ^ s[42]
34731 var hi1 = s[3] ^ s[13] ^ s[23] ^ s[33] ^ s[43]
34732 var lo2 = s[4] ^ s[14] ^ s[24] ^ s[34] ^ s[44]
34733 var hi2 = s[5] ^ s[15] ^ s[25] ^ s[35] ^ s[45]
34734 var lo3 = s[6] ^ s[16] ^ s[26] ^ s[36] ^ s[46]
34735 var hi3 = s[7] ^ s[17] ^ s[27] ^ s[37] ^ s[47]
34736 var lo4 = s[8] ^ s[18] ^ s[28] ^ s[38] ^ s[48]
34737 var hi4 = s[9] ^ s[19] ^ s[29] ^ s[39] ^ s[49]
34738
34739 var lo = lo4 ^ (lo1 << 1 | hi1 >>> 31)
34740 var hi = hi4 ^ (hi1 << 1 | lo1 >>> 31)
34741 var t1slo0 = s[0] ^ lo
34742 var t1shi0 = s[1] ^ hi
34743 var t1slo5 = s[10] ^ lo
34744 var t1shi5 = s[11] ^ hi
34745 var t1slo10 = s[20] ^ lo
34746 var t1shi10 = s[21] ^ hi
34747 var t1slo15 = s[30] ^ lo
34748 var t1shi15 = s[31] ^ hi
34749 var t1slo20 = s[40] ^ lo
34750 var t1shi20 = s[41] ^ hi
34751 lo = lo0 ^ (lo2 << 1 | hi2 >>> 31)
34752 hi = hi0 ^ (hi2 << 1 | lo2 >>> 31)
34753 var t1slo1 = s[2] ^ lo
34754 var t1shi1 = s[3] ^ hi
34755 var t1slo6 = s[12] ^ lo
34756 var t1shi6 = s[13] ^ hi
34757 var t1slo11 = s[22] ^ lo
34758 var t1shi11 = s[23] ^ hi
34759 var t1slo16 = s[32] ^ lo
34760 var t1shi16 = s[33] ^ hi
34761 var t1slo21 = s[42] ^ lo
34762 var t1shi21 = s[43] ^ hi
34763 lo = lo1 ^ (lo3 << 1 | hi3 >>> 31)
34764 hi = hi1 ^ (hi3 << 1 | lo3 >>> 31)
34765 var t1slo2 = s[4] ^ lo
34766 var t1shi2 = s[5] ^ hi
34767 var t1slo7 = s[14] ^ lo
34768 var t1shi7 = s[15] ^ hi
34769 var t1slo12 = s[24] ^ lo
34770 var t1shi12 = s[25] ^ hi
34771 var t1slo17 = s[34] ^ lo
34772 var t1shi17 = s[35] ^ hi
34773 var t1slo22 = s[44] ^ lo
34774 var t1shi22 = s[45] ^ hi
34775 lo = lo2 ^ (lo4 << 1 | hi4 >>> 31)
34776 hi = hi2 ^ (hi4 << 1 | lo4 >>> 31)
34777 var t1slo3 = s[6] ^ lo
34778 var t1shi3 = s[7] ^ hi
34779 var t1slo8 = s[16] ^ lo
34780 var t1shi8 = s[17] ^ hi
34781 var t1slo13 = s[26] ^ lo
34782 var t1shi13 = s[27] ^ hi
34783 var t1slo18 = s[36] ^ lo
34784 var t1shi18 = s[37] ^ hi
34785 var t1slo23 = s[46] ^ lo
34786 var t1shi23 = s[47] ^ hi
34787 lo = lo3 ^ (lo0 << 1 | hi0 >>> 31)
34788 hi = hi3 ^ (hi0 << 1 | lo0 >>> 31)
34789 var t1slo4 = s[8] ^ lo
34790 var t1shi4 = s[9] ^ hi
34791 var t1slo9 = s[18] ^ lo
34792 var t1shi9 = s[19] ^ hi
34793 var t1slo14 = s[28] ^ lo
34794 var t1shi14 = s[29] ^ hi
34795 var t1slo19 = s[38] ^ lo
34796 var t1shi19 = s[39] ^ hi
34797 var t1slo24 = s[48] ^ lo
34798 var t1shi24 = s[49] ^ hi
34799
34800 // rho & pi
34801 var t2slo0 = t1slo0
34802 var t2shi0 = t1shi0
34803 var t2slo16 = (t1shi5 << 4 | t1slo5 >>> 28)
34804 var t2shi16 = (t1slo5 << 4 | t1shi5 >>> 28)
34805 var t2slo7 = (t1slo10 << 3 | t1shi10 >>> 29)
34806 var t2shi7 = (t1shi10 << 3 | t1slo10 >>> 29)
34807 var t2slo23 = (t1shi15 << 9 | t1slo15 >>> 23)
34808 var t2shi23 = (t1slo15 << 9 | t1shi15 >>> 23)
34809 var t2slo14 = (t1slo20 << 18 | t1shi20 >>> 14)
34810 var t2shi14 = (t1shi20 << 18 | t1slo20 >>> 14)
34811 var t2slo10 = (t1slo1 << 1 | t1shi1 >>> 31)
34812 var t2shi10 = (t1shi1 << 1 | t1slo1 >>> 31)
34813 var t2slo1 = (t1shi6 << 12 | t1slo6 >>> 20)
34814 var t2shi1 = (t1slo6 << 12 | t1shi6 >>> 20)
34815 var t2slo17 = (t1slo11 << 10 | t1shi11 >>> 22)
34816 var t2shi17 = (t1shi11 << 10 | t1slo11 >>> 22)
34817 var t2slo8 = (t1shi16 << 13 | t1slo16 >>> 19)
34818 var t2shi8 = (t1slo16 << 13 | t1shi16 >>> 19)
34819 var t2slo24 = (t1slo21 << 2 | t1shi21 >>> 30)
34820 var t2shi24 = (t1shi21 << 2 | t1slo21 >>> 30)
34821 var t2slo20 = (t1shi2 << 30 | t1slo2 >>> 2)
34822 var t2shi20 = (t1slo2 << 30 | t1shi2 >>> 2)
34823 var t2slo11 = (t1slo7 << 6 | t1shi7 >>> 26)
34824 var t2shi11 = (t1shi7 << 6 | t1slo7 >>> 26)
34825 var t2slo2 = (t1shi12 << 11 | t1slo12 >>> 21)
34826 var t2shi2 = (t1slo12 << 11 | t1shi12 >>> 21)
34827 var t2slo18 = (t1slo17 << 15 | t1shi17 >>> 17)
34828 var t2shi18 = (t1shi17 << 15 | t1slo17 >>> 17)
34829 var t2slo9 = (t1shi22 << 29 | t1slo22 >>> 3)
34830 var t2shi9 = (t1slo22 << 29 | t1shi22 >>> 3)
34831 var t2slo5 = (t1slo3 << 28 | t1shi3 >>> 4)
34832 var t2shi5 = (t1shi3 << 28 | t1slo3 >>> 4)
34833 var t2slo21 = (t1shi8 << 23 | t1slo8 >>> 9)
34834 var t2shi21 = (t1slo8 << 23 | t1shi8 >>> 9)
34835 var t2slo12 = (t1slo13 << 25 | t1shi13 >>> 7)
34836 var t2shi12 = (t1shi13 << 25 | t1slo13 >>> 7)
34837 var t2slo3 = (t1slo18 << 21 | t1shi18 >>> 11)
34838 var t2shi3 = (t1shi18 << 21 | t1slo18 >>> 11)
34839 var t2slo19 = (t1shi23 << 24 | t1slo23 >>> 8)
34840 var t2shi19 = (t1slo23 << 24 | t1shi23 >>> 8)
34841 var t2slo15 = (t1slo4 << 27 | t1shi4 >>> 5)
34842 var t2shi15 = (t1shi4 << 27 | t1slo4 >>> 5)
34843 var t2slo6 = (t1slo9 << 20 | t1shi9 >>> 12)
34844 var t2shi6 = (t1shi9 << 20 | t1slo9 >>> 12)
34845 var t2slo22 = (t1shi14 << 7 | t1slo14 >>> 25)
34846 var t2shi22 = (t1slo14 << 7 | t1shi14 >>> 25)
34847 var t2slo13 = (t1slo19 << 8 | t1shi19 >>> 24)
34848 var t2shi13 = (t1shi19 << 8 | t1slo19 >>> 24)
34849 var t2slo4 = (t1slo24 << 14 | t1shi24 >>> 18)
34850 var t2shi4 = (t1shi24 << 14 | t1slo24 >>> 18)
34851
34852 // chi
34853 s[0] = t2slo0 ^ (~t2slo1 & t2slo2)
34854 s[1] = t2shi0 ^ (~t2shi1 & t2shi2)
34855 s[10] = t2slo5 ^ (~t2slo6 & t2slo7)
34856 s[11] = t2shi5 ^ (~t2shi6 & t2shi7)
34857 s[20] = t2slo10 ^ (~t2slo11 & t2slo12)
34858 s[21] = t2shi10 ^ (~t2shi11 & t2shi12)
34859 s[30] = t2slo15 ^ (~t2slo16 & t2slo17)
34860 s[31] = t2shi15 ^ (~t2shi16 & t2shi17)
34861 s[40] = t2slo20 ^ (~t2slo21 & t2slo22)
34862 s[41] = t2shi20 ^ (~t2shi21 & t2shi22)
34863 s[2] = t2slo1 ^ (~t2slo2 & t2slo3)
34864 s[3] = t2shi1 ^ (~t2shi2 & t2shi3)
34865 s[12] = t2slo6 ^ (~t2slo7 & t2slo8)
34866 s[13] = t2shi6 ^ (~t2shi7 & t2shi8)
34867 s[22] = t2slo11 ^ (~t2slo12 & t2slo13)
34868 s[23] = t2shi11 ^ (~t2shi12 & t2shi13)
34869 s[32] = t2slo16 ^ (~t2slo17 & t2slo18)
34870 s[33] = t2shi16 ^ (~t2shi17 & t2shi18)
34871 s[42] = t2slo21 ^ (~t2slo22 & t2slo23)
34872 s[43] = t2shi21 ^ (~t2shi22 & t2shi23)
34873 s[4] = t2slo2 ^ (~t2slo3 & t2slo4)
34874 s[5] = t2shi2 ^ (~t2shi3 & t2shi4)
34875 s[14] = t2slo7 ^ (~t2slo8 & t2slo9)
34876 s[15] = t2shi7 ^ (~t2shi8 & t2shi9)
34877 s[24] = t2slo12 ^ (~t2slo13 & t2slo14)
34878 s[25] = t2shi12 ^ (~t2shi13 & t2shi14)
34879 s[34] = t2slo17 ^ (~t2slo18 & t2slo19)
34880 s[35] = t2shi17 ^ (~t2shi18 & t2shi19)
34881 s[44] = t2slo22 ^ (~t2slo23 & t2slo24)
34882 s[45] = t2shi22 ^ (~t2shi23 & t2shi24)
34883 s[6] = t2slo3 ^ (~t2slo4 & t2slo0)
34884 s[7] = t2shi3 ^ (~t2shi4 & t2shi0)
34885 s[16] = t2slo8 ^ (~t2slo9 & t2slo5)
34886 s[17] = t2shi8 ^ (~t2shi9 & t2shi5)
34887 s[26] = t2slo13 ^ (~t2slo14 & t2slo10)
34888 s[27] = t2shi13 ^ (~t2shi14 & t2shi10)
34889 s[36] = t2slo18 ^ (~t2slo19 & t2slo15)
34890 s[37] = t2shi18 ^ (~t2shi19 & t2shi15)
34891 s[46] = t2slo23 ^ (~t2slo24 & t2slo20)
34892 s[47] = t2shi23 ^ (~t2shi24 & t2shi20)
34893 s[8] = t2slo4 ^ (~t2slo0 & t2slo1)
34894 s[9] = t2shi4 ^ (~t2shi0 & t2shi1)
34895 s[18] = t2slo9 ^ (~t2slo5 & t2slo6)
34896 s[19] = t2shi9 ^ (~t2shi5 & t2shi6)
34897 s[28] = t2slo14 ^ (~t2slo10 & t2slo11)
34898 s[29] = t2shi14 ^ (~t2shi10 & t2shi11)
34899 s[38] = t2slo19 ^ (~t2slo15 & t2slo16)
34900 s[39] = t2shi19 ^ (~t2shi15 & t2shi16)
34901 s[48] = t2slo24 ^ (~t2slo20 & t2slo21)
34902 s[49] = t2shi24 ^ (~t2shi20 & t2shi21)
34903
34904 // iota
34905 s[0] ^= P1600_ROUND_CONSTANTS[round * 2]
34906 s[1] ^= P1600_ROUND_CONSTANTS[round * 2 + 1]
34907 }
34908}
34909
34910},{}],70:[function(require,module,exports){
34911(function (Buffer){
34912'use strict'
34913var keccakState = require('./keccak-state-unroll')
ebd8d4e8 34914
8b095871
IC
34915function Keccak () {
34916 // much faster than `new Array(50)`
34917 this.state = [
34918 0, 0, 0, 0, 0,
34919 0, 0, 0, 0, 0,
34920 0, 0, 0, 0, 0,
34921 0, 0, 0, 0, 0,
34922 0, 0, 0, 0, 0
34923 ]
ebd8d4e8 34924
8b095871
IC
34925 this.blockSize = null
34926 this.count = 0
34927 this.squeezing = false
34928}
ebd8d4e8 34929
8b095871
IC
34930Keccak.prototype.initialize = function (rate, capacity) {
34931 for (var i = 0; i < 50; ++i) this.state[i] = 0
34932 this.blockSize = rate / 8
34933 this.count = 0
34934 this.squeezing = false
34935}
34936
34937Keccak.prototype.absorb = function (data) {
34938 for (var i = 0; i < data.length; ++i) {
34939 this.state[~~(this.count / 4)] ^= data[i] << (8 * (this.count % 4))
34940 this.count += 1
34941 if (this.count === this.blockSize) {
34942 keccakState.p1600(this.state)
34943 this.count = 0
ebd8d4e8
IC
34944 }
34945 }
8b095871 34946}
ebd8d4e8 34947
8b095871
IC
34948Keccak.prototype.absorbLastFewBits = function (bits) {
34949 this.state[~~(this.count / 4)] ^= bits << (8 * (this.count % 4))
34950 if ((bits & 0x80) !== 0 && this.count === (this.blockSize - 1)) keccakState.p1600(this.state)
34951 this.state[~~((this.blockSize - 1) / 4)] ^= 0x80 << (8 * ((this.blockSize - 1) % 4))
34952 keccakState.p1600(this.state)
34953 this.count = 0
34954 this.squeezing = true
ebd8d4e8
IC
34955}
34956
8b095871
IC
34957Keccak.prototype.squeeze = function (length) {
34958 if (!this.squeezing) this.absorbLastFewBits(0x01)
ebd8d4e8 34959
8b095871
IC
34960 var output = Buffer.allocUnsafe(length)
34961 for (var i = 0; i < length; ++i) {
34962 output[i] = (this.state[~~(this.count / 4)] >>> (8 * (this.count % 4))) & 0xff
34963 this.count += 1
34964 if (this.count === this.blockSize) {
34965 keccakState.p1600(this.state)
34966 this.count = 0
ebd8d4e8 34967 }
8b095871 34968 }
ebd8d4e8 34969
8b095871
IC
34970 return output
34971}
ebd8d4e8 34972
8b095871
IC
34973Keccak.prototype.copy = function (dest) {
34974 for (var i = 0; i < 50; ++i) dest.state[i] = this.state[i]
34975 dest.blockSize = this.blockSize
34976 dest.count = this.count
34977 dest.squeezing = this.squeezing
34978}
ebd8d4e8 34979
8b095871 34980module.exports = Keccak
ebd8d4e8 34981
8b095871
IC
34982}).call(this,require("buffer").Buffer)
34983},{"./keccak-state-unroll":69,"buffer":5}],71:[function(require,module,exports){
34984(function (Buffer){
34985/*
34986CryptoJS v3.1.2
34987code.google.com/p/crypto-js
34988(c) 2009-2013 by Jeff Mott. All rights reserved.
34989code.google.com/p/crypto-js/wiki/License
34990*/
34991/** @preserve
34992(c) 2012 by Cédric Mesnil. All rights reserved.
ebd8d4e8 34993
8b095871 34994Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
ebd8d4e8 34995
8b095871
IC
34996 - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
34997 - 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.
34998
34999THIS 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.
35000*/
35001
35002// constants table
35003var zl = [
35004 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
35005 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
35006 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
35007 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
35008 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
35009]
35010
35011var zr = [
35012 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
35013 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
35014 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
35015 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
35016 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
35017]
35018
35019var sl = [
35020 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
35021 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
35022 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
35023 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
35024 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
35025]
35026
35027var sr = [
35028 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
35029 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
35030 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
35031 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
35032 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
35033]
35034
35035var hl = [0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]
35036var hr = [0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]
35037
35038function bytesToWords (bytes) {
35039 var words = []
35040 for (var i = 0, b = 0; i < bytes.length; i++, b += 8) {
35041 words[b >>> 5] |= bytes[i] << (24 - b % 32)
35042 }
35043 return words
ebd8d4e8
IC
35044}
35045
8b095871
IC
35046function wordsToBytes (words) {
35047 var bytes = []
35048 for (var b = 0; b < words.length * 32; b += 8) {
35049 bytes.push((words[b >>> 5] >>> (24 - b % 32)) & 0xFF)
35050 }
35051 return bytes
ebd8d4e8
IC
35052}
35053
8b095871
IC
35054function processBlock (H, M, offset) {
35055 // swap endian
35056 for (var i = 0; i < 16; i++) {
35057 var offset_i = offset + i
35058 var M_offset_i = M[offset_i]
ebd8d4e8 35059
8b095871
IC
35060 // Swap
35061 M[offset_i] = (
35062 (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |
35063 (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)
35064 )
35065 }
ebd8d4e8 35066
8b095871
IC
35067 // Working variables
35068 var al, bl, cl, dl, el
35069 var ar, br, cr, dr, er
35070
35071 ar = al = H[0]
35072 br = bl = H[1]
35073 cr = cl = H[2]
35074 dr = dl = H[3]
35075 er = el = H[4]
35076
35077 // computation
35078 var t
35079 for (i = 0; i < 80; i += 1) {
35080 t = (al + M[offset + zl[i]]) | 0
35081 if (i < 16) {
35082 t += f1(bl, cl, dl) + hl[0]
35083 } else if (i < 32) {
35084 t += f2(bl, cl, dl) + hl[1]
35085 } else if (i < 48) {
35086 t += f3(bl, cl, dl) + hl[2]
35087 } else if (i < 64) {
35088 t += f4(bl, cl, dl) + hl[3]
35089 } else {// if (i<80) {
35090 t += f5(bl, cl, dl) + hl[4]
35091 }
35092 t = t | 0
35093 t = rotl(t, sl[i])
35094 t = (t + el) | 0
35095 al = el
35096 el = dl
35097 dl = rotl(cl, 10)
35098 cl = bl
35099 bl = t
35100
35101 t = (ar + M[offset + zr[i]]) | 0
35102 if (i < 16) {
35103 t += f5(br, cr, dr) + hr[0]
35104 } else if (i < 32) {
35105 t += f4(br, cr, dr) + hr[1]
35106 } else if (i < 48) {
35107 t += f3(br, cr, dr) + hr[2]
35108 } else if (i < 64) {
35109 t += f2(br, cr, dr) + hr[3]
35110 } else {// if (i<80) {
35111 t += f1(br, cr, dr) + hr[4]
35112 }
35113
35114 t = t | 0
35115 t = rotl(t, sr[i])
35116 t = (t + er) | 0
35117 ar = er
35118 er = dr
35119 dr = rotl(cr, 10)
35120 cr = br
35121 br = t
35122 }
35123
35124 // intermediate hash value
35125 t = (H[1] + cl + dr) | 0
35126 H[1] = (H[2] + dl + er) | 0
35127 H[2] = (H[3] + el + ar) | 0
35128 H[3] = (H[4] + al + br) | 0
35129 H[4] = (H[0] + bl + cr) | 0
35130 H[0] = t
ebd8d4e8
IC
35131}
35132
8b095871
IC
35133function f1 (x, y, z) {
35134 return ((x) ^ (y) ^ (z))
ebd8d4e8
IC
35135}
35136
8b095871
IC
35137function f2 (x, y, z) {
35138 return (((x) & (y)) | ((~x) & (z)))
35139}
ebd8d4e8 35140
8b095871
IC
35141function f3 (x, y, z) {
35142 return (((x) | (~(y))) ^ (z))
ebd8d4e8
IC
35143}
35144
8b095871
IC
35145function f4 (x, y, z) {
35146 return (((x) & (z)) | ((y) & (~(z))))
ebd8d4e8
IC
35147}
35148
8b095871
IC
35149function f5 (x, y, z) {
35150 return ((x) ^ ((y) | (~(z))))
ebd8d4e8
IC
35151}
35152
8b095871
IC
35153function rotl (x, n) {
35154 return (x << n) | (x >>> (32 - n))
35155}
ebd8d4e8 35156
8b095871
IC
35157function ripemd160 (message) {
35158 var H = [0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]
ebd8d4e8 35159
8b095871
IC
35160 if (typeof message === 'string') {
35161 message = new Buffer(message, 'utf8')
35162 }
ebd8d4e8 35163
8b095871 35164 var m = bytesToWords(message)
ebd8d4e8 35165
8b095871
IC
35166 var nBitsLeft = message.length * 8
35167 var nBitsTotal = message.length * 8
ebd8d4e8 35168
8b095871
IC
35169 // Add padding
35170 m[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32)
35171 m[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (
35172 (((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff) |
35173 (((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00)
35174 )
ebd8d4e8 35175
8b095871
IC
35176 for (var i = 0; i < m.length; i += 16) {
35177 processBlock(H, m, i)
ebd8d4e8
IC
35178 }
35179
8b095871
IC
35180 // swap endian
35181 for (i = 0; i < 5; i++) {
35182 // shortcut
35183 var H_i = H[i]
ebd8d4e8 35184
8b095871
IC
35185 // Swap
35186 H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |
35187 (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00)
ebd8d4e8
IC
35188 }
35189
8b095871
IC
35190 var digestbytes = wordsToBytes(H)
35191 return new Buffer(digestbytes)
ebd8d4e8
IC
35192}
35193
8b095871 35194module.exports = ripemd160
ebd8d4e8 35195
8b095871
IC
35196}).call(this,require("buffer").Buffer)
35197},{"buffer":5}],72:[function(require,module,exports){
35198(function (Buffer){
35199const assert = require('assert')
35200/**
35201 * RLP Encoding based on: https://github.com/ethereum/wiki/wiki/%5BEnglish%5D-RLP
35202 * This function takes in a data, convert it to buffer if not, and a length for recursion
35203 *
35204 * @param {Buffer,String,Integer,Array} data - will be converted to buffer
35205 * @returns {Buffer} - returns buffer of encoded data
35206 **/
35207exports.encode = function (input) {
35208 if (input instanceof Array) {
35209 var output = []
35210 for (var i = 0; i < input.length; i++) {
35211 output.push(exports.encode(input[i]))
35212 }
35213 var buf = Buffer.concat(output)
35214 return Buffer.concat([encodeLength(buf.length, 192), buf])
35215 } else {
35216 input = toBuffer(input)
35217 if (input.length === 1 && input[0] < 128) {
35218 return input
35219 } else {
35220 return Buffer.concat([encodeLength(input.length, 128), input])
35221 }
35222 }
ebd8d4e8
IC
35223}
35224
8b095871
IC
35225function safeParseInt (v, base) {
35226 if (v.slice(0, 2) === '00') {
35227 throw (new Error('invalid RLP: extra zeros'))
35228 }
ebd8d4e8 35229
8b095871 35230 return parseInt(v, base)
ebd8d4e8
IC
35231}
35232
8b095871
IC
35233function encodeLength (len, offset) {
35234 if (len < 56) {
35235 return new Buffer([len + offset])
35236 } else {
35237 var hexLength = intToHex(len)
35238 var lLength = hexLength.length / 2
35239 var firstByte = intToHex(offset + 55 + lLength)
35240 return new Buffer(firstByte + hexLength, 'hex')
35241 }
35242}
ebd8d4e8 35243
8b095871
IC
35244/**
35245 * RLP Decoding based on: {@link https://github.com/ethereum/wiki/wiki/%5BEnglish%5D-RLP|RLP}
35246 * @param {Buffer,String,Integer,Array} data - will be converted to buffer
35247 * @returns {Array} - returns decode Array of Buffers containg the original message
35248 **/
35249exports.decode = function (input, stream) {
35250 if (!input || input.length === 0) {
35251 return new Buffer([])
35252 }
ebd8d4e8 35253
8b095871
IC
35254 input = toBuffer(input)
35255 var decoded = _decode(input)
ab78acc6 35256
8b095871
IC
35257 if (stream) {
35258 return decoded
35259 }
ebd8d4e8 35260
8b095871
IC
35261 assert.equal(decoded.remainder.length, 0, 'invalid remainder')
35262 return decoded.data
ebd8d4e8
IC
35263}
35264
8b095871
IC
35265exports.getLength = function (input) {
35266 if (!input || input.length === 0) {
35267 return new Buffer([])
ab78acc6
IC
35268 }
35269
8b095871
IC
35270 input = toBuffer(input)
35271 var firstByte = input[0]
35272 if (firstByte <= 0x7f) {
35273 return input.length
35274 } else if (firstByte <= 0xb7) {
35275 return firstByte - 0x7f
35276 } else if (firstByte <= 0xbf) {
35277 return firstByte - 0xb6
35278 } else if (firstByte <= 0xf7) {
35279 // a list between 0-55 bytes long
35280 return firstByte - 0xbf
35281 } else {
35282 // a list over 55 bytes long
35283 var llength = firstByte - 0xf6
35284 var length = safeParseInt(input.slice(1, llength).toString('hex'), 16)
35285 return llength + length
35286 }
ebd8d4e8
IC
35287}
35288
8b095871
IC
35289function _decode (input) {
35290 var length, llength, data, innerRemainder, d
35291 var decoded = []
35292 var firstByte = input[0]
ebd8d4e8 35293
8b095871
IC
35294 if (firstByte <= 0x7f) {
35295 // a single byte whose value is in the [0x00, 0x7f] range, that byte is its own RLP encoding.
35296 return {
35297 data: input.slice(0, 1),
35298 remainder: input.slice(1)
35299 }
35300 } else if (firstByte <= 0xb7) {
35301 // string is 0-55 bytes long. A single byte with value 0x80 plus the length of the string followed by the string
35302 // The range of the first byte is [0x80, 0xb7]
35303 length = firstByte - 0x7f
ebd8d4e8 35304
8b095871
IC
35305 // set 0x80 null to 0
35306 if (firstByte === 0x80) {
35307 data = new Buffer([])
35308 } else {
35309 data = input.slice(1, length)
35310 }
ebd8d4e8 35311
8b095871
IC
35312 if (length === 2 && data[0] < 0x80) {
35313 throw new Error('invalid rlp encoding: byte must be less 0x80')
35314 }
ebd8d4e8 35315
8b095871
IC
35316 return {
35317 data: data,
35318 remainder: input.slice(length)
35319 }
35320 } else if (firstByte <= 0xbf) {
35321 llength = firstByte - 0xb6
35322 length = safeParseInt(input.slice(1, llength).toString('hex'), 16)
35323 data = input.slice(llength, length + llength)
35324 if (data.length < length) {
35325 throw (new Error('invalid RLP'))
35326 }
ebd8d4e8 35327
8b095871
IC
35328 return {
35329 data: data,
35330 remainder: input.slice(length + llength)
35331 }
35332 } else if (firstByte <= 0xf7) {
35333 // a list between 0-55 bytes long
35334 length = firstByte - 0xbf
35335 innerRemainder = input.slice(1, length)
35336 while (innerRemainder.length) {
35337 d = _decode(innerRemainder)
35338 decoded.push(d.data)
35339 innerRemainder = d.remainder
35340 }
ebd8d4e8 35341
8b095871
IC
35342 return {
35343 data: decoded,
35344 remainder: input.slice(length)
35345 }
35346 } else {
35347 // a list over 55 bytes long
35348 llength = firstByte - 0xf6
35349 length = safeParseInt(input.slice(1, llength).toString('hex'), 16)
35350 var totalLength = llength + length
35351 if (totalLength > input.length) {
35352 throw new Error('invalid rlp: total length is larger than the data')
35353 }
ab78acc6 35354
8b095871
IC
35355 innerRemainder = input.slice(llength, totalLength)
35356 if (innerRemainder.length === 0) {
35357 throw new Error('invalid rlp, List has a invalid length')
35358 }
ab78acc6 35359
8b095871
IC
35360 while (innerRemainder.length) {
35361 d = _decode(innerRemainder)
35362 decoded.push(d.data)
35363 innerRemainder = d.remainder
35364 }
35365 return {
35366 data: decoded,
35367 remainder: input.slice(totalLength)
35368 }
ab78acc6 35369 }
8b095871 35370}
ab78acc6 35371
8b095871
IC
35372function isHexPrefixed (str) {
35373 return str.slice(0, 2) === '0x'
ab78acc6
IC
35374}
35375
8b095871
IC
35376// Removes 0x from a given String
35377function stripHexPrefix (str) {
35378 if (typeof str !== 'string') {
35379 return str
35380 }
35381 return isHexPrefixed(str) ? str.slice(2) : str
35382}
ab78acc6 35383
8b095871
IC
35384function intToHex (i) {
35385 var hex = i.toString(16)
35386 if (hex.length % 2) {
35387 hex = '0' + hex
ab78acc6
IC
35388 }
35389
8b095871 35390 return hex
ebd8d4e8
IC
35391}
35392
8b095871
IC
35393function padToEven (a) {
35394 if (a.length % 2) a = '0' + a
35395 return a
ebd8d4e8
IC
35396}
35397
8b095871
IC
35398function intToBuffer (i) {
35399 var hex = intToHex(i)
35400 return new Buffer(hex, 'hex')
ebd8d4e8
IC
35401}
35402
8b095871
IC
35403function toBuffer (v) {
35404 if (!Buffer.isBuffer(v)) {
35405 if (typeof v === 'string') {
35406 if (isHexPrefixed(v)) {
35407 v = new Buffer(padToEven(stripHexPrefix(v)), 'hex')
35408 } else {
35409 v = new Buffer(v)
35410 }
35411 } else if (typeof v === 'number') {
35412 if (!v) {
35413 v = new Buffer([])
35414 } else {
35415 v = intToBuffer(v)
35416 }
35417 } else if (v === null || v === undefined) {
35418 v = new Buffer([])
35419 } else if (v.toArray) {
35420 // converts a BN to a Buffer
35421 v = new Buffer(v.toArray())
35422 } else {
35423 throw new Error('invalid type')
35424 }
35425 }
35426 return v
ebd8d4e8
IC
35427}
35428
8b095871
IC
35429}).call(this,require("buffer").Buffer)
35430},{"assert":1,"buffer":5}],73:[function(require,module,exports){
35431'use strict'
35432module.exports = require('./lib')(require('./lib/elliptic'))
ebd8d4e8 35433
8b095871
IC
35434},{"./lib":77,"./lib/elliptic":76}],74:[function(require,module,exports){
35435(function (Buffer){
35436'use strict'
35437var toString = Object.prototype.toString
ebd8d4e8 35438
8b095871
IC
35439// TypeError
35440exports.isArray = function (value, message) {
35441 if (!Array.isArray(value)) throw TypeError(message)
ebd8d4e8
IC
35442}
35443
8b095871
IC
35444exports.isBoolean = function (value, message) {
35445 if (toString.call(value) !== '[object Boolean]') throw TypeError(message)
35446}
ebd8d4e8 35447
8b095871
IC
35448exports.isBuffer = function (value, message) {
35449 if (!Buffer.isBuffer(value)) throw TypeError(message)
ebd8d4e8
IC
35450}
35451
8b095871
IC
35452exports.isFunction = function (value, message) {
35453 if (toString.call(value) !== '[object Function]') throw TypeError(message)
ebd8d4e8
IC
35454}
35455
8b095871
IC
35456exports.isNumber = function (value, message) {
35457 if (toString.call(value) !== '[object Number]') throw TypeError(message)
35458}
ab78acc6 35459
8b095871
IC
35460exports.isObject = function (value, message) {
35461 if (toString.call(value) !== '[object Object]') throw TypeError(message)
35462}
ebd8d4e8 35463
8b095871
IC
35464// RangeError
35465exports.isBufferLength = function (buffer, length, message) {
35466 if (buffer.length !== length) throw RangeError(message)
35467}
ebd8d4e8 35468
8b095871
IC
35469exports.isBufferLength2 = function (buffer, length1, length2, message) {
35470 if (buffer.length !== length1 && buffer.length !== length2) throw RangeError(message)
ab78acc6
IC
35471}
35472
8b095871
IC
35473exports.isLengthGTZero = function (value, message) {
35474 if (value.length === 0) throw RangeError(message)
ebd8d4e8
IC
35475}
35476
8b095871
IC
35477exports.isNumberInInterval = function (number, x, y, message) {
35478 if (number <= x || number >= y) throw RangeError(message)
ebd8d4e8
IC
35479}
35480
8b095871
IC
35481}).call(this,{"isBuffer":require("../../../../../.nvm/versions/node/v7.5.0/lib/node_modules/browserify/node_modules/is-buffer/index.js")})
35482},{"../../../../../.nvm/versions/node/v7.5.0/lib/node_modules/browserify/node_modules/is-buffer/index.js":10}],75:[function(require,module,exports){
ebd8d4e8 35483(function (Buffer){
8b095871
IC
35484'use strict'
35485var bip66 = require('bip66')
35486
35487var EC_PRIVKEY_EXPORT_DER_COMPRESSED = new Buffer([
35488 // begin
35489 0x30, 0x81, 0xd3, 0x02, 0x01, 0x01, 0x04, 0x20,
35490 // private key
35491 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
35492 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
35493 // middle
35494 0xa0, 0x81, 0x85, 0x30, 0x81, 0x82, 0x02, 0x01, 0x01, 0x30, 0x2c, 0x06, 0x07, 0x2a, 0x86, 0x48,
35495 0xcE, 0x3d, 0x01, 0x01, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
35496 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
35497 0xff, 0xff, 0xfE, 0xff, 0xff, 0xfc, 0x2f, 0x30, 0x06, 0x04, 0x01, 0x00, 0x04, 0x01, 0x07, 0x04,
35498 0x21, 0x02, 0x79, 0xbE, 0x66, 0x7E, 0xf9, 0xdc, 0xbb, 0xac, 0x55, 0xa0, 0x62, 0x95, 0xcE, 0x87,
35499 0x0b, 0x07, 0x02, 0x9b, 0xfc, 0xdb, 0x2d, 0xcE, 0x28, 0xd9, 0x59, 0xf2, 0x81, 0x5b, 0x16, 0xf8,
35500 0x17, 0x98, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
35501 0xff, 0xff, 0xff, 0xff, 0xfE, 0xba, 0xaE, 0xdc, 0xE6, 0xaf, 0x48, 0xa0, 0x3b, 0xbf, 0xd2, 0x5E,
35502 0x8c, 0xd0, 0x36, 0x41, 0x41, 0x02, 0x01, 0x01, 0xa1, 0x24, 0x03, 0x22, 0x00,
35503 // public key
35504 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
35505 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
35506 0x00
35507])
35508
35509var EC_PRIVKEY_EXPORT_DER_UNCOMPRESSED = new Buffer([
35510 // begin
35511 0x30, 0x82, 0x01, 0x13, 0x02, 0x01, 0x01, 0x04, 0x20,
35512 // private key
35513 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
35514 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
35515 // middle
35516 0xa0, 0x81, 0xa5, 0x30, 0x81, 0xa2, 0x02, 0x01, 0x01, 0x30, 0x2c, 0x06, 0x07, 0x2a, 0x86, 0x48,
35517 0xcE, 0x3d, 0x01, 0x01, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
35518 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
35519 0xff, 0xff, 0xfE, 0xff, 0xff, 0xfc, 0x2f, 0x30, 0x06, 0x04, 0x01, 0x00, 0x04, 0x01, 0x07, 0x04,
35520 0x41, 0x04, 0x79, 0xbE, 0x66, 0x7E, 0xf9, 0xdc, 0xbb, 0xac, 0x55, 0xa0, 0x62, 0x95, 0xcE, 0x87,
35521 0x0b, 0x07, 0x02, 0x9b, 0xfc, 0xdb, 0x2d, 0xcE, 0x28, 0xd9, 0x59, 0xf2, 0x81, 0x5b, 0x16, 0xf8,
35522 0x17, 0x98, 0x48, 0x3a, 0xda, 0x77, 0x26, 0xa3, 0xc4, 0x65, 0x5d, 0xa4, 0xfb, 0xfc, 0x0E, 0x11,
35523 0x08, 0xa8, 0xfd, 0x17, 0xb4, 0x48, 0xa6, 0x85, 0x54, 0x19, 0x9c, 0x47, 0xd0, 0x8f, 0xfb, 0x10,
35524 0xd4, 0xb8, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
35525 0xff, 0xff, 0xff, 0xff, 0xfE, 0xba, 0xaE, 0xdc, 0xE6, 0xaf, 0x48, 0xa0, 0x3b, 0xbf, 0xd2, 0x5E,
35526 0x8c, 0xd0, 0x36, 0x41, 0x41, 0x02, 0x01, 0x01, 0xa1, 0x44, 0x03, 0x42, 0x00,
35527 // public key
35528 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
35529 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
35530 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
35531 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
35532 0x00
35533])
35534
35535var ZERO_BUFFER_32 = new Buffer([
35536 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
35537 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
35538])
35539
35540exports.privateKeyExport = function (privateKey, publicKey, compressed) {
35541 var result = new Buffer(compressed ? EC_PRIVKEY_EXPORT_DER_COMPRESSED : EC_PRIVKEY_EXPORT_DER_UNCOMPRESSED)
35542 privateKey.copy(result, compressed ? 8 : 9)
35543 publicKey.copy(result, compressed ? 181 : 214)
35544 return result
35545}
35546
35547exports.privateKeyImport = function (privateKey) {
35548 var length = privateKey.length
35549
35550 // sequence header
35551 var index = 0
35552 if (length < index + 1 || privateKey[index] !== 0x30) return
35553 index += 1
35554
35555 // sequence length constructor
35556 if (length < index + 1 || !(privateKey[index] & 0x80)) return
35557
35558 var lenb = privateKey[index] & 0x7f
35559 index += 1
35560 if (lenb < 1 || lenb > 2) return
35561 if (length < index + lenb) return
35562
35563 // sequence length
35564 var len = privateKey[index + lenb - 1] | (lenb > 1 ? privateKey[index + lenb - 2] << 8 : 0)
35565 index += lenb
35566 if (length < index + len) return
35567
35568 // sequence element 0: version number (=1)
35569 if (length < index + 3 ||
35570 privateKey[index] !== 0x02 ||
35571 privateKey[index + 1] !== 0x01 ||
35572 privateKey[index + 2] !== 0x01) {
35573 return
35574 }
35575 index += 3
ab78acc6 35576
8b095871
IC
35577 // sequence element 1: octet string, up to 32 bytes
35578 if (length < index + 2 ||
35579 privateKey[index] !== 0x04 ||
35580 privateKey[index + 1] > 0x20 ||
35581 length < index + 2 + privateKey[index + 1]) {
35582 return
35583 }
ab78acc6 35584
8b095871 35585 return privateKey.slice(index + 2, index + 2 + privateKey[index + 1])
ab78acc6 35586}
ebd8d4e8 35587
8b095871
IC
35588exports.signatureExport = function (sigObj) {
35589 var r = Buffer.concat([new Buffer([0]), sigObj.r])
35590 for (var lenR = 33, posR = 0; lenR > 1 && r[posR] === 0x00 && !(r[posR + 1] & 0x80); --lenR, ++posR);
ebd8d4e8 35591
8b095871
IC
35592 var s = Buffer.concat([new Buffer([0]), sigObj.s])
35593 for (var lenS = 33, posS = 0; lenS > 1 && s[posS] === 0x00 && !(s[posS + 1] & 0x80); --lenS, ++posS);
ab78acc6 35594
8b095871
IC
35595 return bip66.encode(r.slice(posR), s.slice(posS))
35596}
ab78acc6 35597
8b095871
IC
35598exports.signatureImport = function (sig) {
35599 var r = new Buffer(ZERO_BUFFER_32)
35600 var s = new Buffer(ZERO_BUFFER_32)
ab78acc6 35601
8b095871
IC
35602 try {
35603 var sigObj = bip66.decode(sig)
35604 if (sigObj.r.length === 33 && sigObj.r[0] === 0x00) sigObj.r = sigObj.r.slice(1)
35605 if (sigObj.r.length > 32) throw new Error('R length is too long')
35606 if (sigObj.s.length === 33 && sigObj.s[0] === 0x00) sigObj.s = sigObj.s.slice(1)
35607 if (sigObj.s.length > 32) throw new Error('S length is too long')
35608 } catch (err) {
35609 return
ab78acc6
IC
35610 }
35611
8b095871
IC
35612 sigObj.r.copy(r, 32 - sigObj.r.length)
35613 sigObj.s.copy(s, 32 - sigObj.s.length)
ab78acc6 35614
8b095871
IC
35615 return { r: r, s: s }
35616}
ab78acc6 35617
8b095871
IC
35618exports.signatureImportLax = function (sig) {
35619 var r = new Buffer(ZERO_BUFFER_32)
35620 var s = new Buffer(ZERO_BUFFER_32)
ab78acc6 35621
8b095871
IC
35622 var length = sig.length
35623 var index = 0
ab78acc6 35624
8b095871
IC
35625 // sequence tag byte
35626 if (sig[index++] !== 0x30) return
35627
35628 // sequence length byte
35629 var lenbyte = sig[index++]
35630 if (lenbyte & 0x80) {
35631 index += lenbyte - 0x80
35632 if (index > length) return
ab78acc6
IC
35633 }
35634
8b095871
IC
35635 // sequence tag byte for r
35636 if (sig[index++] !== 0x02) return
35637
35638 // length for r
35639 var rlen = sig[index++]
35640 if (rlen & 0x80) {
35641 lenbyte = rlen - 0x80
35642 if (index + lenbyte > length) return
35643 for (; lenbyte > 0 && sig[index] === 0x00; index += 1, lenbyte -= 1);
35644 for (rlen = 0; lenbyte > 0; index += 1, lenbyte -= 1) rlen = (rlen << 8) + sig[index]
ab78acc6 35645 }
8b095871
IC
35646 if (rlen > length - index) return
35647 var rindex = index
35648 index += rlen
ab78acc6 35649
8b095871
IC
35650 // sequence tag byte for s
35651 if (sig[index++] !== 0x02) return
ab78acc6 35652
8b095871
IC
35653 // length for s
35654 var slen = sig[index++]
35655 if (slen & 0x80) {
35656 lenbyte = slen - 0x80
35657 if (index + lenbyte > length) return
35658 for (; lenbyte > 0 && sig[index] === 0x00; index += 1, lenbyte -= 1);
35659 for (slen = 0; lenbyte > 0; index += 1, lenbyte -= 1) slen = (slen << 8) + sig[index]
ab78acc6 35660 }
8b095871
IC
35661 if (slen > length - index) return
35662 var sindex = index
35663 index += slen
ab78acc6 35664
8b095871
IC
35665 // ignore leading zeros in r
35666 for (; rlen > 0 && sig[rindex] === 0x00; rlen -= 1, rindex += 1);
35667 // copy r value
35668 if (rlen > 32) return
35669 var rvalue = sig.slice(rindex, rindex + rlen)
35670 rvalue.copy(r, 32 - rvalue.length)
ab78acc6 35671
8b095871
IC
35672 // ignore leading zeros in s
35673 for (; slen > 0 && sig[sindex] === 0x00; slen -= 1, sindex += 1);
35674 // copy s value
35675 if (slen > 32) return
35676 var svalue = sig.slice(sindex, sindex + slen)
35677 svalue.copy(s, 32 - svalue.length)
35678
35679 return { r: r, s: s }
ab78acc6
IC
35680}
35681
8b095871
IC
35682}).call(this,require("buffer").Buffer)
35683},{"bip66":32,"buffer":5}],76:[function(require,module,exports){
35684(function (Buffer){
35685'use strict'
35686var createHash = require('create-hash')
35687var BN = require('bn.js')
35688var EC = require('elliptic').ec
35689
35690var messages = require('../messages.json')
35691
35692var ec = new EC('secp256k1')
35693var ecparams = ec.curve
35694
35695function loadCompressedPublicKey (first, xBuffer) {
35696 var x = new BN(xBuffer)
35697
35698 // overflow
35699 if (x.cmp(ecparams.p) >= 0) return null
35700 x = x.toRed(ecparams.red)
35701
35702 // compute corresponding Y
35703 var y = x.redSqr().redIMul(x).redIAdd(ecparams.b).redSqrt()
35704 if ((first === 0x03) !== y.isOdd()) y = y.redNeg()
35705
35706 return ec.keyPair({ pub: { x: x, y: y } })
ebd8d4e8
IC
35707}
35708
8b095871
IC
35709function loadUncompressedPublicKey (first, xBuffer, yBuffer) {
35710 var x = new BN(xBuffer)
35711 var y = new BN(yBuffer)
ebd8d4e8 35712
8b095871
IC
35713 // overflow
35714 if (x.cmp(ecparams.p) >= 0 || y.cmp(ecparams.p) >= 0) return null
ebd8d4e8 35715
8b095871
IC
35716 x = x.toRed(ecparams.red)
35717 y = y.toRed(ecparams.red)
ebd8d4e8 35718
8b095871
IC
35719 // is odd flag
35720 if ((first === 0x06 || first === 0x07) && y.isOdd() !== (first === 0x07)) return null
ab78acc6 35721
8b095871
IC
35722 // x*x*x + b = y*y
35723 var x3 = x.redSqr().redIMul(x)
35724 if (!y.redSqr().redISub(x3.redIAdd(ecparams.b)).isZero()) return null
ebd8d4e8 35725
8b095871 35726 return ec.keyPair({ pub: { x: x, y: y } })
ebd8d4e8
IC
35727}
35728
8b095871
IC
35729function loadPublicKey (publicKey) {
35730 var first = publicKey[0]
35731 switch (first) {
35732 case 0x02:
35733 case 0x03:
35734 if (publicKey.length !== 33) return null
35735 return loadCompressedPublicKey(first, publicKey.slice(1, 33))
35736 case 0x04:
35737 case 0x06:
35738 case 0x07:
35739 if (publicKey.length !== 65) return null
35740 return loadUncompressedPublicKey(first, publicKey.slice(1, 33), publicKey.slice(33, 65))
35741 default:
35742 return null
ebd8d4e8 35743 }
8b095871 35744}
ebd8d4e8 35745
8b095871
IC
35746exports.privateKeyVerify = function (privateKey) {
35747 var bn = new BN(privateKey)
35748 return bn.cmp(ecparams.n) < 0 && !bn.isZero()
35749}
ebd8d4e8 35750
8b095871
IC
35751exports.privateKeyExport = function (privateKey, compressed) {
35752 var d = new BN(privateKey)
35753 if (d.cmp(ecparams.n) >= 0 || d.isZero()) throw new Error(messages.EC_PRIVATE_KEY_EXPORT_DER_FAIL)
ab78acc6 35754
8b095871 35755 return new Buffer(ec.keyFromPrivate(privateKey).getPublic(compressed, true))
ebd8d4e8
IC
35756}
35757
8b095871
IC
35758exports.privateKeyTweakAdd = function (privateKey, tweak) {
35759 var bn = new BN(tweak)
35760 if (bn.cmp(ecparams.n) >= 0) throw new Error(messages.EC_PRIVATE_KEY_TWEAK_ADD_FAIL)
ab78acc6 35761
8b095871
IC
35762 bn.iadd(new BN(privateKey))
35763 if (bn.cmp(ecparams.n) >= 0) bn.isub(ecparams.n)
35764 if (bn.isZero()) throw new Error(messages.EC_PRIVATE_KEY_TWEAK_ADD_FAIL)
ab78acc6 35765
8b095871
IC
35766 return bn.toArrayLike(Buffer, 'be', 32)
35767}
35768
35769exports.privateKeyTweakMul = function (privateKey, tweak) {
35770 var bn = new BN(tweak)
35771 if (bn.cmp(ecparams.n) >= 0 || bn.isZero()) throw new Error(messages.EC_PRIVATE_KEY_TWEAK_MUL_FAIL)
35772
35773 bn.imul(new BN(privateKey))
35774 if (bn.cmp(ecparams.n)) bn = bn.umod(ecparams.n)
35775
35776 return bn.toArrayLike(Buffer, 'be', 32)
35777}
35778
35779exports.publicKeyCreate = function (privateKey, compressed) {
35780 var d = new BN(privateKey)
35781 if (d.cmp(ecparams.n) >= 0 || d.isZero()) throw new Error(messages.EC_PUBLIC_KEY_CREATE_FAIL)
35782
35783 return new Buffer(ec.keyFromPrivate(privateKey).getPublic(compressed, true))
35784}
35785
35786exports.publicKeyConvert = function (publicKey, compressed) {
35787 var pair = loadPublicKey(publicKey)
35788 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
ab78acc6 35789
8b095871 35790 return new Buffer(pair.getPublic(compressed, true))
ab78acc6
IC
35791}
35792
8b095871
IC
35793exports.publicKeyVerify = function (publicKey) {
35794 return loadPublicKey(publicKey) !== null
35795}
ab78acc6 35796
8b095871
IC
35797exports.publicKeyTweakAdd = function (publicKey, tweak, compressed) {
35798 var pair = loadPublicKey(publicKey)
35799 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
ab78acc6 35800
8b095871
IC
35801 tweak = new BN(tweak)
35802 if (tweak.cmp(ecparams.n) >= 0) throw new Error(messages.EC_PUBLIC_KEY_TWEAK_ADD_FAIL)
ab78acc6 35803
8b095871
IC
35804 return new Buffer(ecparams.g.mul(tweak).add(pair.pub).encode(true, compressed))
35805}
ab78acc6 35806
8b095871
IC
35807exports.publicKeyTweakMul = function (publicKey, tweak, compressed) {
35808 var pair = loadPublicKey(publicKey)
35809 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
ab78acc6 35810
8b095871
IC
35811 tweak = new BN(tweak)
35812 if (tweak.cmp(ecparams.n) >= 0 || tweak.isZero()) throw new Error(messages.EC_PUBLIC_KEY_TWEAK_MUL_FAIL)
ab78acc6 35813
8b095871
IC
35814 return new Buffer(pair.pub.mul(tweak).encode(true, compressed))
35815}
ab78acc6 35816
8b095871
IC
35817exports.publicKeyCombine = function (publicKeys, compressed) {
35818 var pairs = new Array(publicKeys.length)
35819 for (var i = 0; i < publicKeys.length; ++i) {
35820 pairs[i] = loadPublicKey(publicKeys[i])
35821 if (pairs[i] === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
ab78acc6
IC
35822 }
35823
8b095871
IC
35824 var point = pairs[0].pub
35825 for (var j = 1; j < pairs.length; ++j) point = point.add(pairs[j].pub)
35826 if (point.isInfinity()) throw new Error(messages.EC_PUBLIC_KEY_COMBINE_FAIL)
ab78acc6 35827
8b095871
IC
35828 return new Buffer(point.encode(true, compressed))
35829}
ab78acc6 35830
8b095871
IC
35831exports.signatureNormalize = function (signature) {
35832 var r = new BN(signature.slice(0, 32))
35833 var s = new BN(signature.slice(32, 64))
35834 if (r.cmp(ecparams.n) >= 0 || s.cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL)
35835
35836 var result = new Buffer(signature)
35837 if (s.cmp(ec.nh) === 1) ecparams.n.sub(s).toArrayLike(Buffer, 'be', 32).copy(result, 32)
35838
35839 return result
ab78acc6
IC
35840}
35841
8b095871
IC
35842exports.signatureExport = function (signature) {
35843 var r = signature.slice(0, 32)
35844 var s = signature.slice(32, 64)
35845 if (new BN(r).cmp(ecparams.n) >= 0 || new BN(s).cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL)
35846
35847 return { r: r, s: s }
ab78acc6
IC
35848}
35849
8b095871
IC
35850exports.signatureImport = function (sigObj) {
35851 var r = new BN(sigObj.r)
35852 if (r.cmp(ecparams.n) >= 0) r = new BN(0)
35853
35854 var s = new BN(sigObj.s)
35855 if (s.cmp(ecparams.n) >= 0) s = new BN(0)
35856
35857 return Buffer.concat([
35858 r.toArrayLike(Buffer, 'be', 32),
35859 s.toArrayLike(Buffer, 'be', 32)
35860 ])
ab78acc6
IC
35861}
35862
8b095871
IC
35863exports.sign = function (message, privateKey, noncefn, data) {
35864 if (typeof noncefn === 'function') {
35865 var getNonce = noncefn
35866 noncefn = function (counter) {
35867 var nonce = getNonce(message, privateKey, null, data, counter)
35868 if (!Buffer.isBuffer(nonce) || nonce.length !== 32) throw new Error(messages.ECDSA_SIGN_FAIL)
ebd8d4e8 35869
8b095871
IC
35870 return new BN(nonce)
35871 }
ab78acc6 35872 }
ebd8d4e8 35873
8b095871
IC
35874 var d = new BN(privateKey)
35875 if (d.cmp(ecparams.n) >= 0 || d.isZero()) throw new Error(messages.ECDSA_SIGN_FAIL)
ebd8d4e8 35876
8b095871
IC
35877 var result = ec.sign(message, privateKey, { canonical: true, k: noncefn, pers: data })
35878 return {
35879 signature: Buffer.concat([
35880 result.r.toArrayLike(Buffer, 'be', 32),
35881 result.s.toArrayLike(Buffer, 'be', 32)
35882 ]),
35883 recovery: result.recoveryParam
ebd8d4e8 35884 }
8b095871 35885}
ab78acc6 35886
8b095871
IC
35887exports.verify = function (message, signature, publicKey) {
35888 var sigObj = {r: signature.slice(0, 32), s: signature.slice(32, 64)}
ab78acc6 35889
8b095871
IC
35890 var sigr = new BN(sigObj.r)
35891 var sigs = new BN(sigObj.s)
35892 if (sigr.cmp(ecparams.n) >= 0 || sigs.cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL)
35893 if (sigs.cmp(ec.nh) === 1 || sigr.isZero() || sigs.isZero()) return false
ab78acc6 35894
8b095871
IC
35895 var pair = loadPublicKey(publicKey)
35896 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
ebd8d4e8 35897
8b095871
IC
35898 return ec.verify(message, sigObj, {x: pair.pub.x, y: pair.pub.y})
35899}
ebd8d4e8 35900
8b095871
IC
35901exports.recover = function (message, signature, recovery, compressed) {
35902 var sigObj = {r: signature.slice(0, 32), s: signature.slice(32, 64)}
ebd8d4e8 35903
8b095871
IC
35904 var sigr = new BN(sigObj.r)
35905 var sigs = new BN(sigObj.s)
35906 if (sigr.cmp(ecparams.n) >= 0 || sigs.cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL)
ebd8d4e8 35907
8b095871
IC
35908 try {
35909 if (sigr.isZero() || sigs.isZero()) throw new Error()
ebd8d4e8 35910
8b095871
IC
35911 var point = ec.recoverPubKey(message, sigObj, recovery)
35912 return new Buffer(point.encode(true, compressed))
35913 } catch (err) {
35914 throw new Error(messages.ECDSA_RECOVER_FAIL)
35915 }
ebd8d4e8
IC
35916}
35917
8b095871
IC
35918exports.ecdh = function (publicKey, privateKey) {
35919 var shared = exports.ecdhUnsafe(publicKey, privateKey, true)
35920 return createHash('sha256').update(shared).digest()
ebd8d4e8
IC
35921}
35922
8b095871
IC
35923exports.ecdhUnsafe = function (publicKey, privateKey, compressed) {
35924 var pair = loadPublicKey(publicKey)
35925 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
ab78acc6 35926
8b095871
IC
35927 var scalar = new BN(privateKey)
35928 if (scalar.cmp(ecparams.n) >= 0 || scalar.isZero()) throw new Error(messages.ECDH_FAIL)
35929
35930 return new Buffer(pair.pub.mul(scalar).encode(true, compressed))
ab78acc6
IC
35931}
35932
8b095871
IC
35933}).call(this,require("buffer").Buffer)
35934},{"../messages.json":78,"bn.js":33,"buffer":5,"create-hash":36,"elliptic":39}],77:[function(require,module,exports){
35935'use strict'
35936var assert = require('./assert')
35937var der = require('./der')
35938var messages = require('./messages.json')
ab78acc6 35939
8b095871
IC
35940function initCompressedValue (value, defaultValue) {
35941 if (value === undefined) return defaultValue
ab78acc6 35942
8b095871
IC
35943 assert.isBoolean(value, messages.COMPRESSED_TYPE_INVALID)
35944 return value
ab78acc6
IC
35945}
35946
8b095871
IC
35947module.exports = function (secp256k1) {
35948 return {
35949 privateKeyVerify: function (privateKey) {
35950 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
35951 return privateKey.length === 32 && secp256k1.privateKeyVerify(privateKey)
35952 },
ab78acc6 35953
8b095871
IC
35954 privateKeyExport: function (privateKey, compressed) {
35955 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
35956 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
ab78acc6 35957
8b095871
IC
35958 compressed = initCompressedValue(compressed, true)
35959 var publicKey = secp256k1.privateKeyExport(privateKey, compressed)
ab78acc6 35960
8b095871
IC
35961 return der.privateKeyExport(privateKey, publicKey, compressed)
35962 },
ab78acc6 35963
8b095871
IC
35964 privateKeyImport: function (privateKey) {
35965 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
ab78acc6 35966
8b095871
IC
35967 privateKey = der.privateKeyImport(privateKey)
35968 if (privateKey && privateKey.length === 32 && secp256k1.privateKeyVerify(privateKey)) return privateKey
ab78acc6 35969
8b095871
IC
35970 throw new Error(messages.EC_PRIVATE_KEY_IMPORT_DER_FAIL)
35971 },
ab78acc6 35972
8b095871
IC
35973 privateKeyTweakAdd: function (privateKey, tweak) {
35974 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
35975 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
ab78acc6 35976
8b095871
IC
35977 assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID)
35978 assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID)
ab78acc6 35979
8b095871
IC
35980 return secp256k1.privateKeyTweakAdd(privateKey, tweak)
35981 },
ab78acc6 35982
8b095871
IC
35983 privateKeyTweakMul: function (privateKey, tweak) {
35984 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
35985 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
ab78acc6 35986
8b095871
IC
35987 assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID)
35988 assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID)
ab78acc6 35989
8b095871
IC
35990 return secp256k1.privateKeyTweakMul(privateKey, tweak)
35991 },
ab78acc6 35992
8b095871
IC
35993 publicKeyCreate: function (privateKey, compressed) {
35994 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
35995 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
ab78acc6 35996
8b095871 35997 compressed = initCompressedValue(compressed, true)
ab78acc6 35998
8b095871
IC
35999 return secp256k1.publicKeyCreate(privateKey, compressed)
36000 },
ab78acc6 36001
8b095871
IC
36002 publicKeyConvert: function (publicKey, compressed) {
36003 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
36004 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
ab78acc6 36005
8b095871
IC
36006 compressed = initCompressedValue(compressed, true)
36007
36008 return secp256k1.publicKeyConvert(publicKey, compressed)
36009 },
36010
36011 publicKeyVerify: function (publicKey) {
36012 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
36013 return secp256k1.publicKeyVerify(publicKey)
36014 },
36015
36016 publicKeyTweakAdd: function (publicKey, tweak, compressed) {
36017 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
36018 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
36019
36020 assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID)
36021 assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID)
36022
36023 compressed = initCompressedValue(compressed, true)
36024
36025 return secp256k1.publicKeyTweakAdd(publicKey, tweak, compressed)
36026 },
36027
36028 publicKeyTweakMul: function (publicKey, tweak, compressed) {
36029 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
36030 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
36031
36032 assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID)
36033 assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID)
36034
36035 compressed = initCompressedValue(compressed, true)
36036
36037 return secp256k1.publicKeyTweakMul(publicKey, tweak, compressed)
36038 },
36039
36040 publicKeyCombine: function (publicKeys, compressed) {
36041 assert.isArray(publicKeys, messages.EC_PUBLIC_KEYS_TYPE_INVALID)
36042 assert.isLengthGTZero(publicKeys, messages.EC_PUBLIC_KEYS_LENGTH_INVALID)
36043 for (var i = 0; i < publicKeys.length; ++i) {
36044 assert.isBuffer(publicKeys[i], messages.EC_PUBLIC_KEY_TYPE_INVALID)
36045 assert.isBufferLength2(publicKeys[i], 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
ab78acc6
IC
36046 }
36047
8b095871 36048 compressed = initCompressedValue(compressed, true)
ab78acc6 36049
8b095871
IC
36050 return secp256k1.publicKeyCombine(publicKeys, compressed)
36051 },
ab78acc6 36052
8b095871
IC
36053 signatureNormalize: function (signature) {
36054 assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID)
36055 assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
ab78acc6 36056
8b095871
IC
36057 return secp256k1.signatureNormalize(signature)
36058 },
ab78acc6 36059
8b095871
IC
36060 signatureExport: function (signature) {
36061 assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID)
36062 assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
36063
36064 var sigObj = secp256k1.signatureExport(signature)
36065 return der.signatureExport(sigObj)
36066 },
36067
36068 signatureImport: function (sig) {
36069 assert.isBuffer(sig, messages.ECDSA_SIGNATURE_TYPE_INVALID)
36070 assert.isLengthGTZero(sig, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
36071
36072 var sigObj = der.signatureImport(sig)
36073 if (sigObj) return secp256k1.signatureImport(sigObj)
36074
36075 throw new Error(messages.ECDSA_SIGNATURE_PARSE_DER_FAIL)
36076 },
36077
36078 signatureImportLax: function (sig) {
36079 assert.isBuffer(sig, messages.ECDSA_SIGNATURE_TYPE_INVALID)
36080 assert.isLengthGTZero(sig, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
36081
36082 var sigObj = der.signatureImportLax(sig)
36083 if (sigObj) return secp256k1.signatureImport(sigObj)
36084
36085 throw new Error(messages.ECDSA_SIGNATURE_PARSE_DER_FAIL)
36086 },
36087
36088 sign: function (message, privateKey, options) {
36089 assert.isBuffer(message, messages.MSG32_TYPE_INVALID)
36090 assert.isBufferLength(message, 32, messages.MSG32_LENGTH_INVALID)
36091
36092 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
36093 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
36094
36095 var data = null
36096 var noncefn = null
36097 if (options !== undefined) {
36098 assert.isObject(options, messages.OPTIONS_TYPE_INVALID)
36099
36100 if (options.data !== undefined) {
36101 assert.isBuffer(options.data, messages.OPTIONS_DATA_TYPE_INVALID)
36102 assert.isBufferLength(options.data, 32, messages.OPTIONS_DATA_LENGTH_INVALID)
36103 data = options.data
36104 }
36105
36106 if (options.noncefn !== undefined) {
36107 assert.isFunction(options.noncefn, messages.OPTIONS_NONCEFN_TYPE_INVALID)
36108 noncefn = options.noncefn
36109 }
ab78acc6
IC
36110 }
36111
8b095871
IC
36112 return secp256k1.sign(message, privateKey, noncefn, data)
36113 },
ab78acc6 36114
8b095871
IC
36115 verify: function (message, signature, publicKey) {
36116 assert.isBuffer(message, messages.MSG32_TYPE_INVALID)
36117 assert.isBufferLength(message, 32, messages.MSG32_LENGTH_INVALID)
ab78acc6 36118
8b095871
IC
36119 assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID)
36120 assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
ab78acc6 36121
8b095871
IC
36122 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
36123 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
36124
36125 return secp256k1.verify(message, signature, publicKey)
36126 },
ab78acc6 36127
8b095871
IC
36128 recover: function (message, signature, recovery, compressed) {
36129 assert.isBuffer(message, messages.MSG32_TYPE_INVALID)
36130 assert.isBufferLength(message, 32, messages.MSG32_LENGTH_INVALID)
ab78acc6 36131
8b095871
IC
36132 assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID)
36133 assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
ab78acc6 36134
8b095871
IC
36135 assert.isNumber(recovery, messages.RECOVERY_ID_TYPE_INVALID)
36136 assert.isNumberInInterval(recovery, -1, 4, messages.RECOVERY_ID_VALUE_INVALID)
ab78acc6 36137
8b095871 36138 compressed = initCompressedValue(compressed, true)
ab78acc6 36139
8b095871
IC
36140 return secp256k1.recover(message, signature, recovery, compressed)
36141 },
ab78acc6 36142
8b095871
IC
36143 ecdh: function (publicKey, privateKey) {
36144 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
36145 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
ab78acc6 36146
8b095871
IC
36147 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
36148 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
ab78acc6 36149
8b095871
IC
36150 return secp256k1.ecdh(publicKey, privateKey)
36151 },
ab78acc6 36152
8b095871
IC
36153 ecdhUnsafe: function (publicKey, privateKey, compressed) {
36154 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
36155 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
ab78acc6 36156
8b095871
IC
36157 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
36158 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
ab78acc6 36159
8b095871 36160 compressed = initCompressedValue(compressed, true)
ab78acc6 36161
8b095871
IC
36162 return secp256k1.ecdhUnsafe(publicKey, privateKey, compressed)
36163 }
36164 }
36165}
ab78acc6 36166
8b095871
IC
36167},{"./assert":74,"./der":75,"./messages.json":78}],78:[function(require,module,exports){
36168module.exports={
36169 "COMPRESSED_TYPE_INVALID": "compressed should be a boolean",
36170 "EC_PRIVATE_KEY_TYPE_INVALID": "private key should be a Buffer",
36171 "EC_PRIVATE_KEY_LENGTH_INVALID": "private key length is invalid",
36172 "EC_PRIVATE_KEY_TWEAK_ADD_FAIL": "tweak out of range or resulting private key is invalid",
36173 "EC_PRIVATE_KEY_TWEAK_MUL_FAIL": "tweak out of range",
36174 "EC_PRIVATE_KEY_EXPORT_DER_FAIL": "couldn't export to DER format",
36175 "EC_PRIVATE_KEY_IMPORT_DER_FAIL": "couldn't import from DER format",
36176 "EC_PUBLIC_KEYS_TYPE_INVALID": "public keys should be an Array",
36177 "EC_PUBLIC_KEYS_LENGTH_INVALID": "public keys Array should have at least 1 element",
36178 "EC_PUBLIC_KEY_TYPE_INVALID": "public key should be a Buffer",
36179 "EC_PUBLIC_KEY_LENGTH_INVALID": "public key length is invalid",
36180 "EC_PUBLIC_KEY_PARSE_FAIL": "the public key could not be parsed or is invalid",
36181 "EC_PUBLIC_KEY_CREATE_FAIL": "private was invalid, try again",
36182 "EC_PUBLIC_KEY_TWEAK_ADD_FAIL": "tweak out of range or resulting public key is invalid",
36183 "EC_PUBLIC_KEY_TWEAK_MUL_FAIL": "tweak out of range",
36184 "EC_PUBLIC_KEY_COMBINE_FAIL": "the sum of the public keys is not valid",
36185 "ECDH_FAIL": "scalar was invalid (zero or overflow)",
36186 "ECDSA_SIGNATURE_TYPE_INVALID": "signature should be a Buffer",
36187 "ECDSA_SIGNATURE_LENGTH_INVALID": "signature length is invalid",
36188 "ECDSA_SIGNATURE_PARSE_FAIL": "couldn't parse signature",
36189 "ECDSA_SIGNATURE_PARSE_DER_FAIL": "couldn't parse DER signature",
36190 "ECDSA_SIGNATURE_SERIALIZE_DER_FAIL": "couldn't serialize signature to DER format",
36191 "ECDSA_SIGN_FAIL": "nonce generation function failed or private key is invalid",
36192 "ECDSA_RECOVER_FAIL": "couldn't recover public key from signature",
36193 "MSG32_TYPE_INVALID": "message should be a Buffer",
36194 "MSG32_LENGTH_INVALID": "message length is invalid",
36195 "OPTIONS_TYPE_INVALID": "options should be an Object",
36196 "OPTIONS_DATA_TYPE_INVALID": "options.data should be a Buffer",
36197 "OPTIONS_DATA_LENGTH_INVALID": "options.data length is invalid",
36198 "OPTIONS_NONCEFN_TYPE_INVALID": "options.noncefn should be a Function",
36199 "RECOVERY_ID_TYPE_INVALID": "recovery should be a Number",
36200 "RECOVERY_ID_VALUE_INVALID": "recovery should have value between -1 and 4",
36201 "TWEAK_TYPE_INVALID": "tweak should be a Buffer",
36202 "TWEAK_LENGTH_INVALID": "tweak length is invalid"
36203}
36204
36205},{}],79:[function(require,module,exports){
36206(function (Buffer){
36207// prototype class for hash functions
36208function Hash (blockSize, finalSize) {
36209 this._block = new Buffer(blockSize)
36210 this._finalSize = finalSize
36211 this._blockSize = blockSize
36212 this._len = 0
36213 this._s = 0
36214}
36215
36216Hash.prototype.update = function (data, enc) {
36217 if (typeof data === 'string') {
36218 enc = enc || 'utf8'
36219 data = new Buffer(data, enc)
ab78acc6
IC
36220 }
36221
8b095871
IC
36222 var l = this._len += data.length
36223 var s = this._s || 0
36224 var f = 0
36225 var buffer = this._block
ab78acc6 36226
8b095871
IC
36227 while (s < l) {
36228 var t = Math.min(data.length, f + this._blockSize - (s % this._blockSize))
36229 var ch = (t - f)
ab78acc6 36230
8b095871
IC
36231 for (var i = 0; i < ch; i++) {
36232 buffer[(s % this._blockSize) + i] = data[i + f]
ab78acc6
IC
36233 }
36234
8b095871
IC
36235 s += ch
36236 f += ch
ab78acc6 36237
8b095871
IC
36238 if ((s % this._blockSize) === 0) {
36239 this._update(buffer)
36240 }
ab78acc6 36241 }
8b095871 36242 this._s = s
ab78acc6 36243
8b095871
IC
36244 return this
36245}
ab78acc6 36246
8b095871
IC
36247Hash.prototype.digest = function (enc) {
36248 // Suppose the length of the message M, in bits, is l
36249 var l = this._len * 8
ab78acc6 36250
8b095871
IC
36251 // Append the bit 1 to the end of the message
36252 this._block[this._len % this._blockSize] = 0x80
ab78acc6 36253
8b095871
IC
36254 // and then k zero bits, where k is the smallest non-negative solution to the equation (l + 1 + k) === finalSize mod blockSize
36255 this._block.fill(0, this._len % this._blockSize + 1)
ab78acc6 36256
8b095871
IC
36257 if (l % (this._blockSize * 8) >= this._finalSize * 8) {
36258 this._update(this._block)
36259 this._block.fill(0)
36260 }
ab78acc6 36261
8b095871
IC
36262 // to this append the block which is equal to the number l written in binary
36263 // TODO: handle case where l is > Math.pow(2, 29)
36264 this._block.writeInt32BE(l, this._blockSize - 4)
ebd8d4e8 36265
8b095871 36266 var hash = this._update(this._block) || this._hash()
ebd8d4e8 36267
8b095871 36268 return enc ? hash.toString(enc) : hash
ab78acc6 36269}
ebd8d4e8 36270
8b095871
IC
36271Hash.prototype._update = function () {
36272 throw new Error('_update must be implemented by subclass')
ab78acc6 36273}
8b095871
IC
36274
36275module.exports = Hash
36276
36277}).call(this,require("buffer").Buffer)
36278},{"buffer":5}],80:[function(require,module,exports){
36279var exports = module.exports = function SHA (algorithm) {
36280 algorithm = algorithm.toLowerCase()
36281
36282 var Algorithm = exports[algorithm]
36283 if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')
36284
36285 return new Algorithm()
ab78acc6 36286}
ebd8d4e8 36287
8b095871
IC
36288exports.sha = require('./sha')
36289exports.sha1 = require('./sha1')
36290exports.sha224 = require('./sha224')
36291exports.sha256 = require('./sha256')
36292exports.sha384 = require('./sha384')
36293exports.sha512 = require('./sha512')
36294
36295},{"./sha":81,"./sha1":82,"./sha224":83,"./sha256":84,"./sha384":85,"./sha512":86}],81:[function(require,module,exports){
36296(function (Buffer){
36297/*
36298 * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined
36299 * in FIPS PUB 180-1
36300 * This source code is derived from sha1.js of the same repository.
36301 * The difference between SHA-0 and SHA-1 is just a bitwise rotate left
36302 * operation was added.
36303 */
36304
36305var inherits = require('inherits')
36306var Hash = require('./hash')
36307
36308var K = [
36309 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
36310]
36311
36312var W = new Array(80)
36313
36314function Sha () {
36315 this.init()
36316 this._w = W
36317
36318 Hash.call(this, 64, 56)
ab78acc6 36319}
ebd8d4e8 36320
8b095871 36321inherits(Sha, Hash)
ebd8d4e8 36322
8b095871
IC
36323Sha.prototype.init = function () {
36324 this._a = 0x67452301
36325 this._b = 0xefcdab89
36326 this._c = 0x98badcfe
36327 this._d = 0x10325476
36328 this._e = 0xc3d2e1f0
ebd8d4e8 36329
8b095871
IC
36330 return this
36331}
ebd8d4e8 36332
8b095871
IC
36333function rotl5 (num) {
36334 return (num << 5) | (num >>> 27)
36335}
ebd8d4e8 36336
8b095871
IC
36337function rotl30 (num) {
36338 return (num << 30) | (num >>> 2)
36339}
ebd8d4e8 36340
8b095871
IC
36341function ft (s, b, c, d) {
36342 if (s === 0) return (b & c) | ((~b) & d)
36343 if (s === 2) return (b & c) | (b & d) | (c & d)
36344 return b ^ c ^ d
36345}
ebd8d4e8 36346
8b095871
IC
36347Sha.prototype._update = function (M) {
36348 var W = this._w
ebd8d4e8 36349
8b095871
IC
36350 var a = this._a | 0
36351 var b = this._b | 0
36352 var c = this._c | 0
36353 var d = this._d | 0
36354 var e = this._e | 0
ebd8d4e8 36355
8b095871
IC
36356 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
36357 for (; i < 80; ++i) W[i] = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]
ebd8d4e8 36358
8b095871
IC
36359 for (var j = 0; j < 80; ++j) {
36360 var s = ~~(j / 20)
36361 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
ebd8d4e8 36362
8b095871
IC
36363 e = d
36364 d = c
36365 c = rotl30(b)
36366 b = a
36367 a = t
36368 }
36369
36370 this._a = (a + this._a) | 0
36371 this._b = (b + this._b) | 0
36372 this._c = (c + this._c) | 0
36373 this._d = (d + this._d) | 0
36374 this._e = (e + this._e) | 0
36375}
36376
36377Sha.prototype._hash = function () {
36378 var H = new Buffer(20)
ab78acc6 36379
8b095871
IC
36380 H.writeInt32BE(this._a | 0, 0)
36381 H.writeInt32BE(this._b | 0, 4)
36382 H.writeInt32BE(this._c | 0, 8)
36383 H.writeInt32BE(this._d | 0, 12)
36384 H.writeInt32BE(this._e | 0, 16)
ebd8d4e8 36385
8b095871 36386 return H
ebd8d4e8
IC
36387}
36388
8b095871 36389module.exports = Sha
ebd8d4e8 36390
8b095871
IC
36391}).call(this,require("buffer").Buffer)
36392},{"./hash":79,"buffer":5,"inherits":63}],82:[function(require,module,exports){
36393(function (Buffer){
36394/*
36395 * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
36396 * in FIPS PUB 180-1
36397 * Version 2.1a Copyright Paul Johnston 2000 - 2002.
36398 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
36399 * Distributed under the BSD License
36400 * See http://pajhome.org.uk/crypt/md5 for details.
36401 */
ebd8d4e8 36402
8b095871
IC
36403var inherits = require('inherits')
36404var Hash = require('./hash')
ebd8d4e8 36405
8b095871
IC
36406var K = [
36407 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
36408]
ebd8d4e8 36409
8b095871 36410var W = new Array(80)
ab78acc6 36411
8b095871
IC
36412function Sha1 () {
36413 this.init()
36414 this._w = W
ebd8d4e8 36415
8b095871
IC
36416 Hash.call(this, 64, 56)
36417}
ebd8d4e8 36418
8b095871 36419inherits(Sha1, Hash)
ebd8d4e8 36420
8b095871
IC
36421Sha1.prototype.init = function () {
36422 this._a = 0x67452301
36423 this._b = 0xefcdab89
36424 this._c = 0x98badcfe
36425 this._d = 0x10325476
36426 this._e = 0xc3d2e1f0
ebd8d4e8 36427
8b095871
IC
36428 return this
36429}
ebd8d4e8 36430
8b095871
IC
36431function rotl1 (num) {
36432 return (num << 1) | (num >>> 31)
36433}
ebd8d4e8 36434
8b095871
IC
36435function rotl5 (num) {
36436 return (num << 5) | (num >>> 27)
36437}
ebd8d4e8 36438
8b095871
IC
36439function rotl30 (num) {
36440 return (num << 30) | (num >>> 2)
36441}
ebd8d4e8 36442
8b095871
IC
36443function ft (s, b, c, d) {
36444 if (s === 0) return (b & c) | ((~b) & d)
36445 if (s === 2) return (b & c) | (b & d) | (c & d)
36446 return b ^ c ^ d
36447}
ebd8d4e8 36448
8b095871
IC
36449Sha1.prototype._update = function (M) {
36450 var W = this._w
ebd8d4e8 36451
8b095871
IC
36452 var a = this._a | 0
36453 var b = this._b | 0
36454 var c = this._c | 0
36455 var d = this._d | 0
36456 var e = this._e | 0
ebd8d4e8 36457
8b095871
IC
36458 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
36459 for (; i < 80; ++i) W[i] = rotl1(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16])
36460
36461 for (var j = 0; j < 80; ++j) {
36462 var s = ~~(j / 20)
36463 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
36464
36465 e = d
36466 d = c
36467 c = rotl30(b)
36468 b = a
36469 a = t
ab78acc6
IC
36470 }
36471
8b095871
IC
36472 this._a = (a + this._a) | 0
36473 this._b = (b + this._b) | 0
36474 this._c = (c + this._c) | 0
36475 this._d = (d + this._d) | 0
36476 this._e = (e + this._e) | 0
36477}
ab78acc6 36478
8b095871
IC
36479Sha1.prototype._hash = function () {
36480 var H = new Buffer(20)
ab78acc6 36481
8b095871
IC
36482 H.writeInt32BE(this._a | 0, 0)
36483 H.writeInt32BE(this._b | 0, 4)
36484 H.writeInt32BE(this._c | 0, 8)
36485 H.writeInt32BE(this._d | 0, 12)
36486 H.writeInt32BE(this._e | 0, 16)
ab78acc6 36487
8b095871
IC
36488 return H
36489}
ab78acc6 36490
8b095871 36491module.exports = Sha1
ab78acc6 36492
8b095871
IC
36493}).call(this,require("buffer").Buffer)
36494},{"./hash":79,"buffer":5,"inherits":63}],83:[function(require,module,exports){
36495(function (Buffer){
36496/**
36497 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
36498 * in FIPS 180-2
36499 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
36500 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
36501 *
36502 */
ab78acc6 36503
8b095871
IC
36504var inherits = require('inherits')
36505var Sha256 = require('./sha256')
36506var Hash = require('./hash')
ab78acc6 36507
8b095871 36508var W = new Array(64)
ab78acc6 36509
8b095871
IC
36510function Sha224 () {
36511 this.init()
ab78acc6 36512
8b095871 36513 this._w = W // new Array(64)
ebd8d4e8 36514
8b095871
IC
36515 Hash.call(this, 64, 56)
36516}
ebd8d4e8 36517
8b095871 36518inherits(Sha224, Sha256)
ebd8d4e8 36519
8b095871
IC
36520Sha224.prototype.init = function () {
36521 this._a = 0xc1059ed8
36522 this._b = 0x367cd507
36523 this._c = 0x3070dd17
36524 this._d = 0xf70e5939
36525 this._e = 0xffc00b31
36526 this._f = 0x68581511
36527 this._g = 0x64f98fa7
36528 this._h = 0xbefa4fa4
ebd8d4e8 36529
8b095871
IC
36530 return this
36531}
ab78acc6 36532
8b095871
IC
36533Sha224.prototype._hash = function () {
36534 var H = new Buffer(28)
ebd8d4e8 36535
8b095871
IC
36536 H.writeInt32BE(this._a, 0)
36537 H.writeInt32BE(this._b, 4)
36538 H.writeInt32BE(this._c, 8)
36539 H.writeInt32BE(this._d, 12)
36540 H.writeInt32BE(this._e, 16)
36541 H.writeInt32BE(this._f, 20)
36542 H.writeInt32BE(this._g, 24)
ab78acc6 36543
8b095871
IC
36544 return H
36545}
ebd8d4e8 36546
8b095871 36547module.exports = Sha224
ebd8d4e8 36548
8b095871
IC
36549}).call(this,require("buffer").Buffer)
36550},{"./hash":79,"./sha256":84,"buffer":5,"inherits":63}],84:[function(require,module,exports){
36551(function (Buffer){
36552/**
36553 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
36554 * in FIPS 180-2
36555 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
36556 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
36557 *
36558 */
ebd8d4e8 36559
8b095871
IC
36560var inherits = require('inherits')
36561var Hash = require('./hash')
ab78acc6 36562
8b095871
IC
36563var K = [
36564 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,
36565 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,
36566 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,
36567 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,
36568 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,
36569 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,
36570 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,
36571 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,
36572 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,
36573 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,
36574 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,
36575 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,
36576 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,
36577 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,
36578 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,
36579 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2
36580]
ebd8d4e8 36581
8b095871 36582var W = new Array(64)
ebd8d4e8 36583
8b095871
IC
36584function Sha256 () {
36585 this.init()
ebd8d4e8 36586
8b095871 36587 this._w = W // new Array(64)
ebd8d4e8 36588
8b095871 36589 Hash.call(this, 64, 56)
ab78acc6 36590}
ebd8d4e8 36591
8b095871 36592inherits(Sha256, Hash)
ebd8d4e8 36593
8b095871
IC
36594Sha256.prototype.init = function () {
36595 this._a = 0x6a09e667
36596 this._b = 0xbb67ae85
36597 this._c = 0x3c6ef372
36598 this._d = 0xa54ff53a
36599 this._e = 0x510e527f
36600 this._f = 0x9b05688c
36601 this._g = 0x1f83d9ab
36602 this._h = 0x5be0cd19
ebd8d4e8 36603
8b095871
IC
36604 return this
36605}
ebd8d4e8 36606
8b095871
IC
36607function ch (x, y, z) {
36608 return z ^ (x & (y ^ z))
36609}
ebd8d4e8 36610
8b095871
IC
36611function maj (x, y, z) {
36612 return (x & y) | (z & (x | y))
36613}
ebd8d4e8 36614
8b095871
IC
36615function sigma0 (x) {
36616 return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10)
36617}
ebd8d4e8 36618
8b095871
IC
36619function sigma1 (x) {
36620 return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7)
36621}
ebd8d4e8 36622
8b095871
IC
36623function gamma0 (x) {
36624 return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3)
36625}
ebd8d4e8 36626
8b095871
IC
36627function gamma1 (x) {
36628 return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10)
36629}
ab78acc6 36630
8b095871
IC
36631Sha256.prototype._update = function (M) {
36632 var W = this._w
ebd8d4e8 36633
8b095871
IC
36634 var a = this._a | 0
36635 var b = this._b | 0
36636 var c = this._c | 0
36637 var d = this._d | 0
36638 var e = this._e | 0
36639 var f = this._f | 0
36640 var g = this._g | 0
36641 var h = this._h | 0
ab78acc6 36642
8b095871
IC
36643 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
36644 for (; i < 64; ++i) W[i] = (gamma1(W[i - 2]) + W[i - 7] + gamma0(W[i - 15]) + W[i - 16]) | 0
ab78acc6 36645
8b095871
IC
36646 for (var j = 0; j < 64; ++j) {
36647 var T1 = (h + sigma1(e) + ch(e, f, g) + K[j] + W[j]) | 0
36648 var T2 = (sigma0(a) + maj(a, b, c)) | 0
ebd8d4e8 36649
8b095871
IC
36650 h = g
36651 g = f
36652 f = e
36653 e = (d + T1) | 0
36654 d = c
36655 c = b
36656 b = a
36657 a = (T1 + T2) | 0
ebd8d4e8
IC
36658 }
36659
8b095871
IC
36660 this._a = (a + this._a) | 0
36661 this._b = (b + this._b) | 0
36662 this._c = (c + this._c) | 0
36663 this._d = (d + this._d) | 0
36664 this._e = (e + this._e) | 0
36665 this._f = (f + this._f) | 0
36666 this._g = (g + this._g) | 0
36667 this._h = (h + this._h) | 0
ab78acc6 36668}
ebd8d4e8 36669
8b095871
IC
36670Sha256.prototype._hash = function () {
36671 var H = new Buffer(32)
ebd8d4e8 36672
8b095871
IC
36673 H.writeInt32BE(this._a, 0)
36674 H.writeInt32BE(this._b, 4)
36675 H.writeInt32BE(this._c, 8)
36676 H.writeInt32BE(this._d, 12)
36677 H.writeInt32BE(this._e, 16)
36678 H.writeInt32BE(this._f, 20)
36679 H.writeInt32BE(this._g, 24)
36680 H.writeInt32BE(this._h, 28)
36681
36682 return H
ab78acc6 36683}
ebd8d4e8 36684
8b095871 36685module.exports = Sha256
ebd8d4e8 36686
8b095871
IC
36687}).call(this,require("buffer").Buffer)
36688},{"./hash":79,"buffer":5,"inherits":63}],85:[function(require,module,exports){
36689(function (Buffer){
36690var inherits = require('inherits')
36691var SHA512 = require('./sha512')
36692var Hash = require('./hash')
ebd8d4e8 36693
8b095871 36694var W = new Array(160)
ebd8d4e8 36695
8b095871
IC
36696function Sha384 () {
36697 this.init()
36698 this._w = W
ab78acc6 36699
8b095871
IC
36700 Hash.call(this, 128, 112)
36701}
ab78acc6 36702
8b095871 36703inherits(Sha384, SHA512)
ebd8d4e8 36704
8b095871
IC
36705Sha384.prototype.init = function () {
36706 this._ah = 0xcbbb9d5d
36707 this._bh = 0x629a292a
36708 this._ch = 0x9159015a
36709 this._dh = 0x152fecd8
36710 this._eh = 0x67332667
36711 this._fh = 0x8eb44a87
36712 this._gh = 0xdb0c2e0d
36713 this._hh = 0x47b5481d
36714
36715 this._al = 0xc1059ed8
36716 this._bl = 0x367cd507
36717 this._cl = 0x3070dd17
36718 this._dl = 0xf70e5939
36719 this._el = 0xffc00b31
36720 this._fl = 0x68581511
36721 this._gl = 0x64f98fa7
36722 this._hl = 0xbefa4fa4
ebd8d4e8 36723
8b095871
IC
36724 return this
36725}
ebd8d4e8 36726
8b095871
IC
36727Sha384.prototype._hash = function () {
36728 var H = new Buffer(48)
ebd8d4e8 36729
8b095871
IC
36730 function writeInt64BE (h, l, offset) {
36731 H.writeInt32BE(h, offset)
36732 H.writeInt32BE(l, offset + 4)
36733 }
ebd8d4e8 36734
8b095871
IC
36735 writeInt64BE(this._ah, this._al, 0)
36736 writeInt64BE(this._bh, this._bl, 8)
36737 writeInt64BE(this._ch, this._cl, 16)
36738 writeInt64BE(this._dh, this._dl, 24)
36739 writeInt64BE(this._eh, this._el, 32)
36740 writeInt64BE(this._fh, this._fl, 40)
ebd8d4e8 36741
8b095871 36742 return H
ab78acc6 36743}
ebd8d4e8 36744
8b095871
IC
36745module.exports = Sha384
36746
36747}).call(this,require("buffer").Buffer)
36748},{"./hash":79,"./sha512":86,"buffer":5,"inherits":63}],86:[function(require,module,exports){
36749(function (Buffer){
36750var inherits = require('inherits')
36751var Hash = require('./hash')
36752
36753var K = [
36754 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
36755 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
36756 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
36757 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
36758 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
36759 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
36760 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
36761 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
36762 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
36763 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
36764 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
36765 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
36766 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
36767 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
36768 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
36769 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
36770 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
36771 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
36772 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
36773 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
36774 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
36775 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
36776 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
36777 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
36778 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
36779 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
36780 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
36781 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
36782 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
36783 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
36784 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
36785 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
36786 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
36787 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
36788 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
36789 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
36790 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
36791 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
36792 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
36793 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
36794]
36795
36796var W = new Array(160)
ebd8d4e8 36797
8b095871
IC
36798function Sha512 () {
36799 this.init()
36800 this._w = W
ebd8d4e8 36801
8b095871 36802 Hash.call(this, 128, 112)
ab78acc6 36803}
ebd8d4e8 36804
8b095871 36805inherits(Sha512, Hash)
ebd8d4e8 36806
8b095871
IC
36807Sha512.prototype.init = function () {
36808 this._ah = 0x6a09e667
36809 this._bh = 0xbb67ae85
36810 this._ch = 0x3c6ef372
36811 this._dh = 0xa54ff53a
36812 this._eh = 0x510e527f
36813 this._fh = 0x9b05688c
36814 this._gh = 0x1f83d9ab
36815 this._hh = 0x5be0cd19
36816
36817 this._al = 0xf3bcc908
36818 this._bl = 0x84caa73b
36819 this._cl = 0xfe94f82b
36820 this._dl = 0x5f1d36f1
36821 this._el = 0xade682d1
36822 this._fl = 0x2b3e6c1f
36823 this._gl = 0xfb41bd6b
36824 this._hl = 0x137e2179
ebd8d4e8 36825
8b095871 36826 return this
ab78acc6 36827}
ebd8d4e8 36828
8b095871
IC
36829function Ch (x, y, z) {
36830 return z ^ (x & (y ^ z))
36831}
ebd8d4e8 36832
8b095871
IC
36833function maj (x, y, z) {
36834 return (x & y) | (z & (x | y))
ab78acc6 36835}
ebd8d4e8 36836
8b095871
IC
36837function sigma0 (x, xl) {
36838 return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25)
36839}
ebd8d4e8 36840
8b095871
IC
36841function sigma1 (x, xl) {
36842 return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23)
36843}
ab78acc6 36844
8b095871
IC
36845function Gamma0 (x, xl) {
36846 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7)
ab78acc6 36847}
ebd8d4e8 36848
8b095871
IC
36849function Gamma0l (x, xl) {
36850 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25)
36851}
ebd8d4e8 36852
8b095871
IC
36853function Gamma1 (x, xl) {
36854 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6)
ab78acc6
IC
36855}
36856
8b095871
IC
36857function Gamma1l (x, xl) {
36858 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26)
ab78acc6
IC
36859}
36860
8b095871
IC
36861function getCarry (a, b) {
36862 return (a >>> 0) < (b >>> 0) ? 1 : 0
ab78acc6
IC
36863}
36864
8b095871
IC
36865Sha512.prototype._update = function (M) {
36866 var W = this._w
ebd8d4e8 36867
8b095871
IC
36868 var ah = this._ah | 0
36869 var bh = this._bh | 0
36870 var ch = this._ch | 0
36871 var dh = this._dh | 0
36872 var eh = this._eh | 0
36873 var fh = this._fh | 0
36874 var gh = this._gh | 0
36875 var hh = this._hh | 0
ebd8d4e8 36876
8b095871
IC
36877 var al = this._al | 0
36878 var bl = this._bl | 0
36879 var cl = this._cl | 0
36880 var dl = this._dl | 0
36881 var el = this._el | 0
36882 var fl = this._fl | 0
36883 var gl = this._gl | 0
36884 var hl = this._hl | 0
ebd8d4e8 36885
8b095871
IC
36886 for (var i = 0; i < 32; i += 2) {
36887 W[i] = M.readInt32BE(i * 4)
36888 W[i + 1] = M.readInt32BE(i * 4 + 4)
36889 }
36890 for (; i < 160; i += 2) {
36891 var xh = W[i - 15 * 2]
36892 var xl = W[i - 15 * 2 + 1]
36893 var gamma0 = Gamma0(xh, xl)
36894 var gamma0l = Gamma0l(xl, xh)
ebd8d4e8 36895
8b095871
IC
36896 xh = W[i - 2 * 2]
36897 xl = W[i - 2 * 2 + 1]
36898 var gamma1 = Gamma1(xh, xl)
36899 var gamma1l = Gamma1l(xl, xh)
ebd8d4e8 36900
8b095871
IC
36901 // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]
36902 var Wi7h = W[i - 7 * 2]
36903 var Wi7l = W[i - 7 * 2 + 1]
ebd8d4e8 36904
8b095871
IC
36905 var Wi16h = W[i - 16 * 2]
36906 var Wi16l = W[i - 16 * 2 + 1]
ab78acc6 36907
8b095871
IC
36908 var Wil = (gamma0l + Wi7l) | 0
36909 var Wih = (gamma0 + Wi7h + getCarry(Wil, gamma0l)) | 0
36910 Wil = (Wil + gamma1l) | 0
36911 Wih = (Wih + gamma1 + getCarry(Wil, gamma1l)) | 0
36912 Wil = (Wil + Wi16l) | 0
36913 Wih = (Wih + Wi16h + getCarry(Wil, Wi16l)) | 0
ebd8d4e8 36914
8b095871
IC
36915 W[i] = Wih
36916 W[i + 1] = Wil
36917 }
ebd8d4e8 36918
8b095871
IC
36919 for (var j = 0; j < 160; j += 2) {
36920 Wih = W[j]
36921 Wil = W[j + 1]
ebd8d4e8 36922
8b095871
IC
36923 var majh = maj(ah, bh, ch)
36924 var majl = maj(al, bl, cl)
ebd8d4e8 36925
8b095871
IC
36926 var sigma0h = sigma0(ah, al)
36927 var sigma0l = sigma0(al, ah)
36928 var sigma1h = sigma1(eh, el)
36929 var sigma1l = sigma1(el, eh)
ab78acc6 36930
8b095871
IC
36931 // t1 = h + sigma1 + ch + K[j] + W[j]
36932 var Kih = K[j]
36933 var Kil = K[j + 1]
ab78acc6 36934
8b095871
IC
36935 var chh = Ch(eh, fh, gh)
36936 var chl = Ch(el, fl, gl)
ebd8d4e8 36937
8b095871
IC
36938 var t1l = (hl + sigma1l) | 0
36939 var t1h = (hh + sigma1h + getCarry(t1l, hl)) | 0
36940 t1l = (t1l + chl) | 0
36941 t1h = (t1h + chh + getCarry(t1l, chl)) | 0
36942 t1l = (t1l + Kil) | 0
36943 t1h = (t1h + Kih + getCarry(t1l, Kil)) | 0
36944 t1l = (t1l + Wil) | 0
36945 t1h = (t1h + Wih + getCarry(t1l, Wil)) | 0
ebd8d4e8 36946
8b095871
IC
36947 // t2 = sigma0 + maj
36948 var t2l = (sigma0l + majl) | 0
36949 var t2h = (sigma0h + majh + getCarry(t2l, sigma0l)) | 0
ebd8d4e8 36950
8b095871
IC
36951 hh = gh
36952 hl = gl
36953 gh = fh
36954 gl = fl
36955 fh = eh
36956 fl = el
36957 el = (dl + t1l) | 0
36958 eh = (dh + t1h + getCarry(el, dl)) | 0
36959 dh = ch
36960 dl = cl
36961 ch = bh
36962 cl = bl
36963 bh = ah
36964 bl = al
36965 al = (t1l + t2l) | 0
36966 ah = (t1h + t2h + getCarry(al, t1l)) | 0
36967 }
ab78acc6 36968
8b095871
IC
36969 this._al = (this._al + al) | 0
36970 this._bl = (this._bl + bl) | 0
36971 this._cl = (this._cl + cl) | 0
36972 this._dl = (this._dl + dl) | 0
36973 this._el = (this._el + el) | 0
36974 this._fl = (this._fl + fl) | 0
36975 this._gl = (this._gl + gl) | 0
36976 this._hl = (this._hl + hl) | 0
ab78acc6 36977
8b095871
IC
36978 this._ah = (this._ah + ah + getCarry(this._al, al)) | 0
36979 this._bh = (this._bh + bh + getCarry(this._bl, bl)) | 0
36980 this._ch = (this._ch + ch + getCarry(this._cl, cl)) | 0
36981 this._dh = (this._dh + dh + getCarry(this._dl, dl)) | 0
36982 this._eh = (this._eh + eh + getCarry(this._el, el)) | 0
36983 this._fh = (this._fh + fh + getCarry(this._fl, fl)) | 0
36984 this._gh = (this._gh + gh + getCarry(this._gl, gl)) | 0
36985 this._hh = (this._hh + hh + getCarry(this._hl, hl)) | 0
ab78acc6
IC
36986}
36987
8b095871
IC
36988Sha512.prototype._hash = function () {
36989 var H = new Buffer(64)
ab78acc6 36990
8b095871
IC
36991 function writeInt64BE (h, l, offset) {
36992 H.writeInt32BE(h, offset)
36993 H.writeInt32BE(l, offset + 4)
36994 }
ab78acc6 36995
8b095871
IC
36996 writeInt64BE(this._ah, this._al, 0)
36997 writeInt64BE(this._bh, this._bl, 8)
36998 writeInt64BE(this._ch, this._cl, 16)
36999 writeInt64BE(this._dh, this._dl, 24)
37000 writeInt64BE(this._eh, this._el, 32)
37001 writeInt64BE(this._fh, this._fl, 40)
37002 writeInt64BE(this._gh, this._gl, 48)
37003 writeInt64BE(this._hh, this._hl, 56)
ab78acc6 37004
8b095871 37005 return H
ebd8d4e8
IC
37006}
37007
8b095871 37008module.exports = Sha512
ebd8d4e8 37009
ab78acc6 37010}).call(this,require("buffer").Buffer)
8b095871
IC
37011},{"./hash":79,"buffer":5,"inherits":63}],87:[function(require,module,exports){
37012var isHexPrefixed = require('is-hex-prefixed');
d5dc92fd 37013
8b095871
IC
37014/**
37015 * Removes '0x' from a given `String` is present
37016 * @param {String} str the string value
37017 * @return {String|Optional} a string by pass if necessary
37018 */
37019module.exports = function stripHexPrefix(str) {
37020 if (typeof str !== 'string') {
37021 return str;
37022 }
07ac4350 37023
8b095871
IC
37024 return isHexPrefixed(str) ? str.slice(2) : str;
37025}
07ac4350 37026
8b095871
IC
37027},{"is-hex-prefixed":64}]},{},[31])(31)
37028});</script>
ab78acc6 37029 <script>// Select components from sjcl to suit the crypto operations bip39 requires.
80c4dd2a
IC
37030
37031//// base.js
37032
37033/** @fileOverview Javascript cryptography implementation.
37034 *
37035 * Crush to remove comments, shorten variable names and
37036 * generally reduce transmission size.
37037 *
37038 * @author Emily Stark
37039 * @author Mike Hamburg
37040 * @author Dan Boneh
37041 */
37042
37043"use strict";
37044/*jslint indent: 2, bitwise: false, nomen: false, plusplus: false, white: false, regexp: false */
37045/*global document, window, escape, unescape, module, require, Uint32Array */
37046
37047/** @namespace The Stanford Javascript Crypto Library, top-level namespace. */
37048var sjcl = {
37049 /** @namespace Symmetric ciphers. */
37050 cipher: {},
37051
37052 /** @namespace Hash functions. Right now only SHA256 is implemented. */
37053 hash: {},
37054
37055 /** @namespace Key exchange functions. Right now only SRP is implemented. */
37056 keyexchange: {},
37057
37058 /** @namespace Block cipher modes of operation. */
37059 mode: {},
37060
37061 /** @namespace Miscellaneous. HMAC and PBKDF2. */
37062 misc: {},
37063
37064 /**
37065 * @namespace Bit array encoders and decoders.
37066 *
37067 * @description
37068 * The members of this namespace are functions which translate between
37069 * SJCL's bitArrays and other objects (usually strings). Because it
37070 * isn't always clear which direction is encoding and which is decoding,
37071 * the method names are "fromBits" and "toBits".
37072 */
37073 codec: {},
37074
37075 /** @namespace Exceptions. */
37076 exception: {
37077 /** @constructor Ciphertext is corrupt. */
37078 corrupt: function(message) {
37079 this.toString = function() { return "CORRUPT: "+this.message; };
37080 this.message = message;
37081 },
37082
37083 /** @constructor Invalid parameter. */
37084 invalid: function(message) {
37085 this.toString = function() { return "INVALID: "+this.message; };
37086 this.message = message;
37087 },
37088
37089 /** @constructor Bug or missing feature in SJCL. @constructor */
37090 bug: function(message) {
37091 this.toString = function() { return "BUG: "+this.message; };
37092 this.message = message;
37093 },
37094
37095 /** @constructor Something isn't ready. */
37096 notReady: function(message) {
37097 this.toString = function() { return "NOT READY: "+this.message; };
37098 this.message = message;
ebd8d4e8 37099 }
80c4dd2a
IC
37100 }
37101};
37102
37103if(typeof module !== 'undefined' && module.exports){
37104 module.exports = sjcl;
37105}
37106if (typeof define === "function") {
37107 define([], function () {
37108 return sjcl;
37109 });
37110}
37111
37112
37113//// bitArray.js
37114
37115/** @fileOverview Arrays of bits, encoded as arrays of Numbers.
37116 *
37117 * @author Emily Stark
37118 * @author Mike Hamburg
37119 * @author Dan Boneh
37120 */
37121
37122/** @namespace Arrays of bits, encoded as arrays of Numbers.
37123 *
37124 * @description
37125 * <p>
37126 * These objects are the currency accepted by SJCL's crypto functions.
37127 * </p>
37128 *
37129 * <p>
37130 * Most of our crypto primitives operate on arrays of 4-byte words internally,
37131 * but many of them can take arguments that are not a multiple of 4 bytes.
37132 * This library encodes arrays of bits (whose size need not be a multiple of 8
37133 * bits) as arrays of 32-bit words. The bits are packed, big-endian, into an
37134 * array of words, 32 bits at a time. Since the words are double-precision
37135 * floating point numbers, they fit some extra data. We use this (in a private,
37136 * possibly-changing manner) to encode the number of bits actually present
37137 * in the last word of the array.
37138 * </p>
37139 *
37140 * <p>
37141 * Because bitwise ops clear this out-of-band data, these arrays can be passed
37142 * to ciphers like AES which want arrays of words.
37143 * </p>
37144 */
37145sjcl.bitArray = {
37146 /**
37147 * Array slices in units of bits.
37148 * @param {bitArray} a The array to slice.
37149 * @param {Number} bstart The offset to the start of the slice, in bits.
37150 * @param {Number} bend The offset to the end of the slice, in bits. If this is undefined,
37151 * slice until the end of the array.
37152 * @return {bitArray} The requested slice.
37153 */
37154 bitSlice: function (a, bstart, bend) {
37155 a = sjcl.bitArray._shiftRight(a.slice(bstart/32), 32 - (bstart & 31)).slice(1);
37156 return (bend === undefined) ? a : sjcl.bitArray.clamp(a, bend-bstart);
37157 },
37158
37159 /**
37160 * Extract a number packed into a bit array.
37161 * @param {bitArray} a The array to slice.
37162 * @param {Number} bstart The offset to the start of the slice, in bits.
37163 * @param {Number} length The length of the number to extract.
37164 * @return {Number} The requested slice.
37165 */
37166 extract: function(a, bstart, blength) {
37167 // FIXME: this Math.floor is not necessary at all, but for some reason
37168 // seems to suppress a bug in the Chromium JIT.
37169 var x, sh = Math.floor((-bstart-blength) & 31);
37170 if ((bstart + blength - 1 ^ bstart) & -32) {
37171 // it crosses a boundary
37172 x = (a[bstart/32|0] << (32 - sh)) ^ (a[bstart/32+1|0] >>> sh);
37173 } else {
37174 // within a single word
37175 x = a[bstart/32|0] >>> sh;
ebd8d4e8 37176 }
80c4dd2a
IC
37177 return x & ((1<<blength) - 1);
37178 },
37179
37180 /**
37181 * Concatenate two bit arrays.
37182 * @param {bitArray} a1 The first array.
37183 * @param {bitArray} a2 The second array.
37184 * @return {bitArray} The concatenation of a1 and a2.
37185 */
37186 concat: function (a1, a2) {
37187 if (a1.length === 0 || a2.length === 0) {
37188 return a1.concat(a2);
37189 }
37190
37191 var last = a1[a1.length-1], shift = sjcl.bitArray.getPartial(last);
37192 if (shift === 32) {
37193 return a1.concat(a2);
37194 } else {
37195 return sjcl.bitArray._shiftRight(a2, shift, last|0, a1.slice(0,a1.length-1));
ebd8d4e8 37196 }
80c4dd2a
IC
37197 },
37198
37199 /**
37200 * Find the length of an array of bits.
37201 * @param {bitArray} a The array.
37202 * @return {Number} The length of a, in bits.
37203 */
37204 bitLength: function (a) {
37205 var l = a.length, x;
37206 if (l === 0) { return 0; }
37207 x = a[l - 1];
37208 return (l-1) * 32 + sjcl.bitArray.getPartial(x);
37209 },
37210
37211 /**
37212 * Truncate an array.
37213 * @param {bitArray} a The array.
37214 * @param {Number} len The length to truncate to, in bits.
37215 * @return {bitArray} A new array, truncated to len bits.
37216 */
37217 clamp: function (a, len) {
37218 if (a.length * 32 < len) { return a; }
37219 a = a.slice(0, Math.ceil(len / 32));
37220 var l = a.length;
37221 len = len & 31;
37222 if (l > 0 && len) {
37223 a[l-1] = sjcl.bitArray.partial(len, a[l-1] & 0x80000000 >> (len-1), 1);
37224 }
37225 return a;
37226 },
37227
37228 /**
37229 * Make a partial word for a bit array.
37230 * @param {Number} len The number of bits in the word.
37231 * @param {Number} x The bits.
37232 * @param {Number} [0] _end Pass 1 if x has already been shifted to the high side.
37233 * @return {Number} The partial word.
37234 */
37235 partial: function (len, x, _end) {
37236 if (len === 32) { return x; }
37237 return (_end ? x|0 : x << (32-len)) + len * 0x10000000000;
37238 },
37239
37240 /**
37241 * Get the number of bits used by a partial word.
37242 * @param {Number} x The partial word.
37243 * @return {Number} The number of bits used by the partial word.
37244 */
37245 getPartial: function (x) {
37246 return Math.round(x/0x10000000000) || 32;
37247 },
37248
37249 /**
37250 * Compare two arrays for equality in a predictable amount of time.
37251 * @param {bitArray} a The first array.
37252 * @param {bitArray} b The second array.
37253 * @return {boolean} true if a == b; false otherwise.
37254 */
37255 equal: function (a, b) {
37256 if (sjcl.bitArray.bitLength(a) !== sjcl.bitArray.bitLength(b)) {
37257 return false;
ebd8d4e8 37258 }
80c4dd2a
IC
37259 var x = 0, i;
37260 for (i=0; i<a.length; i++) {
37261 x |= a[i]^b[i];
ebd8d4e8 37262 }
80c4dd2a
IC
37263 return (x === 0);
37264 },
37265
37266 /** Shift an array right.
37267 * @param {bitArray} a The array to shift.
37268 * @param {Number} shift The number of bits to shift.
37269 * @param {Number} [carry=0] A byte to carry in
37270 * @param {bitArray} [out=[]] An array to prepend to the output.
37271 * @private
37272 */
37273 _shiftRight: function (a, shift, carry, out) {
37274 var i, last2=0, shift2;
37275 if (out === undefined) { out = []; }
37276
37277 for (; shift >= 32; shift -= 32) {
37278 out.push(carry);
37279 carry = 0;
37280 }
37281 if (shift === 0) {
37282 return out.concat(a);
37283 }
37284
37285 for (i=0; i<a.length; i++) {
37286 out.push(carry | a[i]>>>shift);
37287 carry = a[i] << (32-shift);
37288 }
37289 last2 = a.length ? a[a.length-1] : 0;
37290 shift2 = sjcl.bitArray.getPartial(last2);
37291 out.push(sjcl.bitArray.partial(shift+shift2 & 31, (shift + shift2 > 32) ? carry : out.pop(),1));
37292 return out;
37293 },
37294
37295 /** xor a block of 4 words together.
37296 * @private
37297 */
37298 _xor4: function(x,y) {
37299 return [x[0]^y[0],x[1]^y[1],x[2]^y[2],x[3]^y[3]];
37300 },
37301
37302 /** byteswap a word array inplace.
37303 * (does not handle partial words)
37304 * @param {sjcl.bitArray} a word array
37305 * @return {sjcl.bitArray} byteswapped array
37306 */
37307 byteswapM: function(a) {
37308 var i, v, m = 0xff00;
37309 for (i = 0; i < a.length; ++i) {
37310 v = a[i];
37311 a[i] = (v >>> 24) | ((v >>> 8) & m) | ((v & m) << 8) | (v << 24);
ebd8d4e8 37312 }
80c4dd2a
IC
37313 return a;
37314 }
37315};
37316
37317
37318//// codecString.js
37319
37320/** @fileOverview Bit array codec implementations.
37321 *
37322 * @author Emily Stark
37323 * @author Mike Hamburg
37324 * @author Dan Boneh
37325 */
37326
37327/** @namespace UTF-8 strings */
37328sjcl.codec.utf8String = {
37329 /** Convert from a bitArray to a UTF-8 string. */
37330 fromBits: function (arr) {
37331 var out = "", bl = sjcl.bitArray.bitLength(arr), i, tmp;
37332 for (i=0; i<bl/8; i++) {
37333 if ((i&3) === 0) {
37334 tmp = arr[i/4];
37335 }
37336 out += String.fromCharCode(tmp >>> 24);
37337 tmp <<= 8;
ebd8d4e8 37338 }
80c4dd2a
IC
37339 return decodeURIComponent(escape(out));
37340 },
37341
37342 /** Convert from a UTF-8 string to a bitArray. */
37343 toBits: function (str) {
37344 str = unescape(encodeURIComponent(str));
37345 var out = [], i, tmp=0;
37346 for (i=0; i<str.length; i++) {
37347 tmp = tmp << 8 | str.charCodeAt(i);
37348 if ((i&3) === 3) {
37349 out.push(tmp);
37350 tmp = 0;
37351 }
ebd8d4e8 37352 }
80c4dd2a
IC
37353 if (i&3) {
37354 out.push(sjcl.bitArray.partial(8*(i&3), tmp));
ebd8d4e8 37355 }
80c4dd2a
IC
37356 return out;
37357 }
37358};
37359
37360
37361//// codecHex.js
37362
37363/** @fileOverview Bit array codec implementations.
37364 *
37365 * @author Emily Stark
37366 * @author Mike Hamburg
37367 * @author Dan Boneh
37368 */
37369
37370/** @namespace Hexadecimal */
37371sjcl.codec.hex = {
37372 /** Convert from a bitArray to a hex string. */
37373 fromBits: function (arr) {
37374 var out = "", i;
37375 for (i=0; i<arr.length; i++) {
37376 out += ((arr[i]|0)+0xF00000000000).toString(16).substr(4);
ebd8d4e8 37377 }
80c4dd2a
IC
37378 return out.substr(0, sjcl.bitArray.bitLength(arr)/4);//.replace(/(.{8})/g, "$1 ");
37379 },
37380 /** Convert from a hex string to a bitArray. */
37381 toBits: function (str) {
37382 var i, out=[], len;
37383 str = str.replace(/\s|0x/g, "");
37384 len = str.length;
37385 str = str + "00000000";
37386 for (i=0; i<str.length; i+=8) {
37387 out.push(parseInt(str.substr(i,8),16)^0);
ebd8d4e8 37388 }
80c4dd2a
IC
37389 return sjcl.bitArray.clamp(out, len*4);
37390 }
37391};
37392
37393
37394//// sha512.js
37395
37396/** @fileOverview Javascript SHA-512 implementation.
37397 *
37398 * This implementation was written for CryptoJS by Jeff Mott and adapted for
37399 * SJCL by Stefan Thomas.
37400 *
37401 * CryptoJS (c) 2009–2012 by Jeff Mott. All rights reserved.
37402 * Released with New BSD License
37403 *
37404 * @author Emily Stark
37405 * @author Mike Hamburg
37406 * @author Dan Boneh
37407 * @author Jeff Mott
37408 * @author Stefan Thomas
37409 */
37410
37411/**
37412 * Context for a SHA-512 operation in progress.
37413 * @constructor
37414 * @class Secure Hash Algorithm, 512 bits.
37415 */
37416sjcl.hash.sha512 = function (hash) {
37417 if (!this._key[0]) { this._precompute(); }
37418 if (hash) {
37419 this._h = hash._h.slice(0);
37420 this._buffer = hash._buffer.slice(0);
37421 this._length = hash._length;
37422 } else {
37423 this.reset();
37424 }
37425};
37426
37427/**
37428 * Hash a string or an array of words.
37429 * @static
37430 * @param {bitArray|String} data the data to hash.
37431 * @return {bitArray} The hash value, an array of 16 big-endian words.
37432 */
37433sjcl.hash.sha512.hash = function (data) {
37434 return (new sjcl.hash.sha512()).update(data).finalize();
37435};
37436
37437sjcl.hash.sha512.prototype = {
37438 /**
37439 * The hash's block size, in bits.
37440 * @constant
37441 */
37442 blockSize: 1024,
37443
37444 /**
37445 * Reset the hash state.
37446 * @return this
37447 */
37448 reset:function () {
37449 this._h = this._init.slice(0);
37450 this._buffer = [];
37451 this._length = 0;
37452 return this;
37453 },
37454
37455 /**
37456 * Input several words to the hash.
37457 * @param {bitArray|String} data the data to hash.
37458 * @return this
37459 */
37460 update: function (data) {
37461 if (typeof data === "string") {
37462 data = sjcl.codec.utf8String.toBits(data);
ebd8d4e8 37463 }
80c4dd2a
IC
37464 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
37465 ol = this._length,
37466 nl = this._length = ol + sjcl.bitArray.bitLength(data);
37467 for (i = 1024+ol & -1024; i <= nl; i+= 1024) {
37468 this._block(b.splice(0,32));
ebd8d4e8 37469 }
80c4dd2a
IC
37470 return this;
37471 },
37472
37473 /**
37474 * Complete hashing and output the hash value.
37475 * @return {bitArray} The hash value, an array of 16 big-endian words.
37476 */
37477 finalize:function () {
37478 var i, b = this._buffer, h = this._h;
37479
37480 // Round out and push the buffer
37481 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(1,1)]);
37482
37483 // Round out the buffer to a multiple of 32 words, less the 4 length words.
37484 for (i = b.length + 4; i & 31; i++) {
37485 b.push(0);
ebd8d4e8 37486 }
80c4dd2a
IC
37487
37488 // append the length
37489 b.push(0);
37490 b.push(0);
37491 b.push(Math.floor(this._length / 0x100000000));
37492 b.push(this._length | 0);
37493
37494 while (b.length) {
37495 this._block(b.splice(0,32));
ebd8d4e8 37496 }
80c4dd2a
IC
37497
37498 this.reset();
37499 return h;
37500 },
37501
37502 /**
37503 * The SHA-512 initialization vector, to be precomputed.
37504 * @private
37505 */
37506 _init:[],
37507
37508 /**
37509 * Least significant 24 bits of SHA512 initialization values.
37510 *
37511 * Javascript only has 53 bits of precision, so we compute the 40 most
37512 * significant bits and add the remaining 24 bits as constants.
37513 *
37514 * @private
37515 */
37516 _initr: [ 0xbcc908, 0xcaa73b, 0x94f82b, 0x1d36f1, 0xe682d1, 0x3e6c1f, 0x41bd6b, 0x7e2179 ],
37517
37518 /*
37519 _init:
37520 [0x6a09e667, 0xf3bcc908, 0xbb67ae85, 0x84caa73b, 0x3c6ef372, 0xfe94f82b, 0xa54ff53a, 0x5f1d36f1,
37521 0x510e527f, 0xade682d1, 0x9b05688c, 0x2b3e6c1f, 0x1f83d9ab, 0xfb41bd6b, 0x5be0cd19, 0x137e2179],
37522 */
37523
37524 /**
37525 * The SHA-512 hash key, to be precomputed.
37526 * @private
37527 */
37528 _key:[],
37529
37530 /**
37531 * Least significant 24 bits of SHA512 key values.
37532 * @private
37533 */
37534 _keyr:
37535 [0x28ae22, 0xef65cd, 0x4d3b2f, 0x89dbbc, 0x48b538, 0x05d019, 0x194f9b, 0x6d8118,
37536 0x030242, 0x706fbe, 0xe4b28c, 0xffb4e2, 0x7b896f, 0x1696b1, 0xc71235, 0x692694,
37537 0xf14ad2, 0x4f25e3, 0x8cd5b5, 0xac9c65, 0x2b0275, 0xa6e483, 0x41fbd4, 0x1153b5,
37538 0x66dfab, 0xb43210, 0xfb213f, 0xef0ee4, 0xa88fc2, 0x0aa725, 0x03826f, 0x0e6e70,
37539 0xd22ffc, 0x26c926, 0xc42aed, 0x95b3df, 0xaf63de, 0x77b2a8, 0xedaee6, 0x82353b,
37540 0xf10364, 0x423001, 0xf89791, 0x54be30, 0xef5218, 0x65a910, 0x71202a, 0xbbd1b8,
37541 0xd2d0c8, 0x41ab53, 0x8eeb99, 0x9b48a8, 0xc95a63, 0x418acb, 0x63e373, 0xb2b8a3,
37542 0xefb2fc, 0x172f60, 0xf0ab72, 0x6439ec, 0x631e28, 0x82bde9, 0xc67915, 0x72532b,
37543 0x26619c, 0xc0c207, 0xe0eb1e, 0x6ed178, 0x176fba, 0xc898a6, 0xf90dae, 0x1c471b,
37544 0x047d84, 0xc72493, 0xc9bebc, 0x100d4c, 0x3e42b6, 0x657e2a, 0xd6faec, 0x475817],
37545
37546 /*
37547 _key:
37548 [0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd, 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
37549 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019, 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
37550 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe, 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
37551 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1, 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
37552 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3, 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
37553 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483, 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
37554 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210, 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
37555 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725, 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
37556 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926, 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
37557 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8, 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
37558 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001, 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
37559 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910, 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
37560 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53, 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
37561 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb, 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
37562 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60, 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
37563 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9, 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
37564 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207, 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
37565 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6, 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
37566 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493, 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
37567 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a, 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817],
37568 */
37569
37570 /**
37571 * Function to precompute _init and _key.
37572 * @private
37573 */
37574 _precompute: function () {
37575 // XXX: This code is for precomputing the SHA256 constants, change for
37576 // SHA512 and re-enable.
37577 var i = 0, prime = 2, factor;
37578
37579 function frac(x) { return (x-Math.floor(x)) * 0x100000000 | 0; }
37580 function frac2(x) { return (x-Math.floor(x)) * 0x10000000000 & 0xff; }
37581
37582 outer: for (; i<80; prime++) {
37583 for (factor=2; factor*factor <= prime; factor++) {
37584 if (prime % factor === 0) {
37585 // not a prime
37586 continue outer;
ebd8d4e8 37587 }
80c4dd2a
IC
37588 }
37589
37590 if (i<8) {
37591 this._init[i*2] = frac(Math.pow(prime, 1/2));
37592 this._init[i*2+1] = (frac2(Math.pow(prime, 1/2)) << 24) | this._initr[i];
37593 }
37594 this._key[i*2] = frac(Math.pow(prime, 1/3));
37595 this._key[i*2+1] = (frac2(Math.pow(prime, 1/3)) << 24) | this._keyr[i];
37596 i++;
ebd8d4e8 37597 }
80c4dd2a
IC
37598 },
37599
37600 /**
37601 * Perform one cycle of SHA-512.
37602 * @param {bitArray} words one block of words.
37603 * @private
37604 */
37605 _block:function (words) {
37606 var i, wrh, wrl,
37607 w = words.slice(0),
37608 h = this._h,
37609 k = this._key,
37610 h0h = h[ 0], h0l = h[ 1], h1h = h[ 2], h1l = h[ 3],
37611 h2h = h[ 4], h2l = h[ 5], h3h = h[ 6], h3l = h[ 7],
37612 h4h = h[ 8], h4l = h[ 9], h5h = h[10], h5l = h[11],
37613 h6h = h[12], h6l = h[13], h7h = h[14], h7l = h[15];
37614
37615 // Working variables
37616 var ah = h0h, al = h0l, bh = h1h, bl = h1l,
37617 ch = h2h, cl = h2l, dh = h3h, dl = h3l,
37618 eh = h4h, el = h4l, fh = h5h, fl = h5l,
37619 gh = h6h, gl = h6l, hh = h7h, hl = h7l;
37620
37621 for (i=0; i<80; i++) {
37622 // load up the input word for this round
37623 if (i<16) {
37624 wrh = w[i * 2];
37625 wrl = w[i * 2 + 1];
37626 } else {
37627 // Gamma0
37628 var gamma0xh = w[(i-15) * 2];
37629 var gamma0xl = w[(i-15) * 2 + 1];
37630 var gamma0h =
37631 ((gamma0xl << 31) | (gamma0xh >>> 1)) ^
37632 ((gamma0xl << 24) | (gamma0xh >>> 8)) ^
37633 (gamma0xh >>> 7);
37634 var gamma0l =
37635 ((gamma0xh << 31) | (gamma0xl >>> 1)) ^
37636 ((gamma0xh << 24) | (gamma0xl >>> 8)) ^
37637 ((gamma0xh << 25) | (gamma0xl >>> 7));
37638
37639 // Gamma1
37640 var gamma1xh = w[(i-2) * 2];
37641 var gamma1xl = w[(i-2) * 2 + 1];
37642 var gamma1h =
37643 ((gamma1xl << 13) | (gamma1xh >>> 19)) ^
37644 ((gamma1xh << 3) | (gamma1xl >>> 29)) ^
37645 (gamma1xh >>> 6);
37646 var gamma1l =
37647 ((gamma1xh << 13) | (gamma1xl >>> 19)) ^
37648 ((gamma1xl << 3) | (gamma1xh >>> 29)) ^
37649 ((gamma1xh << 26) | (gamma1xl >>> 6));
37650
37651 // Shortcuts
37652 var wr7h = w[(i-7) * 2];
37653 var wr7l = w[(i-7) * 2 + 1];
37654
37655 var wr16h = w[(i-16) * 2];
37656 var wr16l = w[(i-16) * 2 + 1];
37657
37658 // W(round) = gamma0 + W(round - 7) + gamma1 + W(round - 16)
37659 wrl = gamma0l + wr7l;
37660 wrh = gamma0h + wr7h + ((wrl >>> 0) < (gamma0l >>> 0) ? 1 : 0);
37661 wrl += gamma1l;
37662 wrh += gamma1h + ((wrl >>> 0) < (gamma1l >>> 0) ? 1 : 0);
37663 wrl += wr16l;
37664 wrh += wr16h + ((wrl >>> 0) < (wr16l >>> 0) ? 1 : 0);
37665 }
37666
37667 w[i*2] = wrh |= 0;
37668 w[i*2 + 1] = wrl |= 0;
37669
37670 // Ch
37671 var chh = (eh & fh) ^ (~eh & gh);
37672 var chl = (el & fl) ^ (~el & gl);
37673
37674 // Maj
37675 var majh = (ah & bh) ^ (ah & ch) ^ (bh & ch);
37676 var majl = (al & bl) ^ (al & cl) ^ (bl & cl);
37677
37678 // Sigma0
37679 var sigma0h = ((al << 4) | (ah >>> 28)) ^ ((ah << 30) | (al >>> 2)) ^ ((ah << 25) | (al >>> 7));
37680 var sigma0l = ((ah << 4) | (al >>> 28)) ^ ((al << 30) | (ah >>> 2)) ^ ((al << 25) | (ah >>> 7));
37681
37682 // Sigma1
37683 var sigma1h = ((el << 18) | (eh >>> 14)) ^ ((el << 14) | (eh >>> 18)) ^ ((eh << 23) | (el >>> 9));
37684 var sigma1l = ((eh << 18) | (el >>> 14)) ^ ((eh << 14) | (el >>> 18)) ^ ((el << 23) | (eh >>> 9));
37685
37686 // K(round)
37687 var krh = k[i*2];
37688 var krl = k[i*2+1];
37689
37690 // t1 = h + sigma1 + ch + K(round) + W(round)
37691 var t1l = hl + sigma1l;
37692 var t1h = hh + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0);
37693 t1l += chl;
37694 t1h += chh + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0);
37695 t1l += krl;
37696 t1h += krh + ((t1l >>> 0) < (krl >>> 0) ? 1 : 0);
37697 t1l = t1l + wrl|0; // FF32..FF34 perf issue https://bugzilla.mozilla.org/show_bug.cgi?id=1054972
37698 t1h += wrh + ((t1l >>> 0) < (wrl >>> 0) ? 1 : 0);
37699
37700 // t2 = sigma0 + maj
37701 var t2l = sigma0l + majl;
37702 var t2h = sigma0h + majh + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0);
37703
37704 // Update working variables
37705 hh = gh;
37706 hl = gl;
37707 gh = fh;
37708 gl = fl;
37709 fh = eh;
37710 fl = el;
37711 el = (dl + t1l) | 0;
37712 eh = (dh + t1h + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;
37713 dh = ch;
37714 dl = cl;
37715 ch = bh;
37716 cl = bl;
37717 bh = ah;
37718 bl = al;
37719 al = (t1l + t2l) | 0;
37720 ah = (t1h + t2h + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0;
37721 }
37722
37723 // Intermediate hash
37724 h0l = h[1] = (h0l + al) | 0;
37725 h[0] = (h0h + ah + ((h0l >>> 0) < (al >>> 0) ? 1 : 0)) | 0;
37726 h1l = h[3] = (h1l + bl) | 0;
37727 h[2] = (h1h + bh + ((h1l >>> 0) < (bl >>> 0) ? 1 : 0)) | 0;
37728 h2l = h[5] = (h2l + cl) | 0;
37729 h[4] = (h2h + ch + ((h2l >>> 0) < (cl >>> 0) ? 1 : 0)) | 0;
37730 h3l = h[7] = (h3l + dl) | 0;
37731 h[6] = (h3h + dh + ((h3l >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;
37732 h4l = h[9] = (h4l + el) | 0;
37733 h[8] = (h4h + eh + ((h4l >>> 0) < (el >>> 0) ? 1 : 0)) | 0;
37734 h5l = h[11] = (h5l + fl) | 0;
37735 h[10] = (h5h + fh + ((h5l >>> 0) < (fl >>> 0) ? 1 : 0)) | 0;
37736 h6l = h[13] = (h6l + gl) | 0;
37737 h[12] = (h6h + gh + ((h6l >>> 0) < (gl >>> 0) ? 1 : 0)) | 0;
37738 h7l = h[15] = (h7l + hl) | 0;
37739 h[14] = (h7h + hh + ((h7l >>> 0) < (hl >>> 0) ? 1 : 0)) | 0;
37740 }
37741};
37742
37743
37744//// hmac.js
37745
37746/** @fileOverview HMAC implementation.
37747 *
37748 * @author Emily Stark
37749 * @author Mike Hamburg
37750 * @author Dan Boneh
37751 */
37752
37753/** HMAC with the specified hash function.
37754 * @constructor
37755 * @param {bitArray} key the key for HMAC.
37756 * @param {Object} [hash=sjcl.hash.sha256] The hash function to use.
37757 */
37758sjcl.misc.hmac = function (key, Hash) {
37759 this._hash = Hash = Hash || sjcl.hash.sha256;
37760 var exKey = [[],[]], i,
37761 bs = Hash.prototype.blockSize / 32;
37762 this._baseHash = [new Hash(), new Hash()];
37763
37764 if (key.length > bs) {
37765 key = Hash.hash(key);
37766 }
37767
37768 for (i=0; i<bs; i++) {
37769 exKey[0][i] = key[i]^0x36363636;
37770 exKey[1][i] = key[i]^0x5C5C5C5C;
37771 }
37772
37773 this._baseHash[0].update(exKey[0]);
37774 this._baseHash[1].update(exKey[1]);
37775 this._resultHash = new Hash(this._baseHash[0]);
37776};
37777
37778/** HMAC with the specified hash function. Also called encrypt since it's a prf.
37779 * @param {bitArray|String} data The data to mac.
37780 */
37781sjcl.misc.hmac.prototype.encrypt = sjcl.misc.hmac.prototype.mac = function (data) {
37782 if (!this._updated) {
37783 this.update(data);
37784 return this.digest(data);
37785 } else {
37786 throw new sjcl.exception.invalid("encrypt on already updated hmac called!");
37787 }
37788};
37789
37790sjcl.misc.hmac.prototype.reset = function () {
37791 this._resultHash = new this._hash(this._baseHash[0]);
37792 this._updated = false;
37793};
37794
37795sjcl.misc.hmac.prototype.update = function (data) {
37796 this._updated = true;
37797 this._resultHash.update(data);
37798};
37799
37800sjcl.misc.hmac.prototype.digest = function () {
37801 var w = this._resultHash.finalize(), result = new (this._hash)(this._baseHash[1]).update(w).finalize();
37802
37803 this.reset();
37804
37805 return result;
37806};
37807
37808
37809//// pbkdf2.js
37810
37811
37812/** @fileOverview Password-based key-derivation function, version 2.0.
37813 *
37814 * @author Emily Stark
37815 * @author Mike Hamburg
37816 * @author Dan Boneh
37817 */
37818
37819/** Password-Based Key-Derivation Function, version 2.0.
37820 *
37821 * Generate keys from passwords using PBKDF2-HMAC-SHA256.
37822 *
37823 * This is the method specified by RSA's PKCS #5 standard.
37824 *
37825 * @param {bitArray|String} password The password.
37826 * @param {bitArray|String} salt The salt. Should have lots of entropy.
37827 * @param {Number} [count=1000] The number of iterations. Higher numbers make the function slower but more secure.
37828 * @param {Number} [length] The length of the derived key. Defaults to the
37829 output size of the hash function.
37830 * @param {Object} [Prff=sjcl.misc.hmac] The pseudorandom function family.
37831 * @return {bitArray} the derived key.
37832 */
37833sjcl.misc.pbkdf2 = function (password, salt, count, length, Prff) {
37834 count = count || 1000;
37835
37836 if (length < 0 || count < 0) {
37837 throw sjcl.exception.invalid("invalid params to pbkdf2");
37838 }
37839
37840 if (typeof password === "string") {
37841 password = sjcl.codec.utf8String.toBits(password);
37842 }
37843
37844 if (typeof salt === "string") {
37845 salt = sjcl.codec.utf8String.toBits(salt);
37846 }
37847
37848 Prff = Prff || sjcl.misc.hmac;
37849
37850 var prf = new Prff(password),
37851 u, ui, i, j, k, out = [], b = sjcl.bitArray;
37852
37853 for (k = 1; 32 * out.length < (length || 1); k++) {
37854 u = ui = prf.encrypt(b.concat(salt,[k]));
37855
37856 for (i=1; i<count; i++) {
37857 ui = prf.encrypt(ui);
37858 for (j=0; j<ui.length; j++) {
37859 u[j] ^= ui[j];
37860 }
ebd8d4e8 37861 }
80c4dd2a
IC
37862
37863 out = out.concat(u);
37864 }
37865
37866 if (length) { out = b.clamp(out, length); }
37867
37868 return out;
37869};
37870
37871
37872//// sha256.js
37873
37874/** @fileOverview Javascript SHA-256 implementation.
37875 *
37876 * An older version of this implementation is available in the public
37877 * domain, but this one is (c) Emily Stark, Mike Hamburg, Dan Boneh,
37878 * Stanford University 2008-2010 and BSD-licensed for liability
37879 * reasons.
37880 *
37881 * Special thanks to Aldo Cortesi for pointing out several bugs in
37882 * this code.
37883 *
37884 * @author Emily Stark
37885 * @author Mike Hamburg
37886 * @author Dan Boneh
37887 */
37888
37889/**
37890 * Context for a SHA-256 operation in progress.
37891 * @constructor
37892 * @class Secure Hash Algorithm, 256 bits.
37893 */
37894sjcl.hash.sha256 = function (hash) {
37895 if (!this._key[0]) { this._precompute(); }
37896 if (hash) {
37897 this._h = hash._h.slice(0);
37898 this._buffer = hash._buffer.slice(0);
37899 this._length = hash._length;
37900 } else {
37901 this.reset();
37902 }
37903};
37904
37905/**
37906 * Hash a string or an array of words.
37907 * @static
37908 * @param {bitArray|String} data the data to hash.
37909 * @return {bitArray} The hash value, an array of 16 big-endian words.
37910 */
37911sjcl.hash.sha256.hash = function (data) {
37912 return (new sjcl.hash.sha256()).update(data).finalize();
37913};
37914
37915sjcl.hash.sha256.prototype = {
37916 /**
37917 * The hash's block size, in bits.
37918 * @constant
37919 */
37920 blockSize: 512,
37921
37922 /**
37923 * Reset the hash state.
37924 * @return this
37925 */
37926 reset:function () {
37927 this._h = this._init.slice(0);
37928 this._buffer = [];
37929 this._length = 0;
37930 return this;
37931 },
37932
37933 /**
37934 * Input several words to the hash.
37935 * @param {bitArray|String} data the data to hash.
37936 * @return this
37937 */
37938 update: function (data) {
37939 if (typeof data === "string") {
37940 data = sjcl.codec.utf8String.toBits(data);
37941 }
37942 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
37943 ol = this._length,
37944 nl = this._length = ol + sjcl.bitArray.bitLength(data);
37945 for (i = 512+ol & -512; i <= nl; i+= 512) {
37946 this._block(b.splice(0,16));
ebd8d4e8 37947 }
3af2954a 37948 return this;
80c4dd2a
IC
37949 },
37950
37951 /**
37952 * Complete hashing and output the hash value.
37953 * @return {bitArray} The hash value, an array of 8 big-endian words.
37954 */
37955 finalize:function () {
37956 var i, b = this._buffer, h = this._h;
37957
37958 // Round out and push the buffer
37959 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(1,1)]);
37960
37961 // Round out the buffer to a multiple of 16 words, less the 2 length words.
37962 for (i = b.length + 2; i & 15; i++) {
37963 b.push(0);
37964 }
37965
37966 // append the length
37967 b.push(Math.floor(this._length / 0x100000000));
37968 b.push(this._length | 0);
37969
37970 while (b.length) {
37971 this._block(b.splice(0,16));
37972 }
37973
37974 this.reset();
37975 return h;
37976 },
37977
37978 /**
37979 * The SHA-256 initialization vector, to be precomputed.
37980 * @private
37981 */
37982 _init:[],
37983 /*
37984 _init:[0x6a09e667,0xbb67ae85,0x3c6ef372,0xa54ff53a,0x510e527f,0x9b05688c,0x1f83d9ab,0x5be0cd19],
37985 */
37986
37987 /**
37988 * The SHA-256 hash key, to be precomputed.
37989 * @private
37990 */
37991 _key:[],
37992 /*
37993 _key:
37994 [0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
37995 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
37996 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
37997 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
37998 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
37999 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
38000 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
38001 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2],
38002 */
38003
38004
38005 /**
38006 * Function to precompute _init and _key.
38007 * @private
38008 */
38009 _precompute: function () {
38010 var i = 0, prime = 2, factor;
38011
38012 function frac(x) { return (x-Math.floor(x)) * 0x100000000 | 0; }
38013
38014 outer: for (; i<64; prime++) {
38015 for (factor=2; factor*factor <= prime; factor++) {
38016 if (prime % factor === 0) {
38017 // not a prime
38018 continue outer;
ebd8d4e8 38019 }
80c4dd2a
IC
38020 }
38021
38022 if (i<8) {
38023 this._init[i] = frac(Math.pow(prime, 1/2));
38024 }
38025 this._key[i] = frac(Math.pow(prime, 1/3));
38026 i++;
ebd8d4e8 38027 }
80c4dd2a
IC
38028 },
38029
38030 /**
38031 * Perform one cycle of SHA-256.
38032 * @param {bitArray} words one block of words.
38033 * @private
38034 */
38035 _block:function (words) {
38036 var i, tmp, a, b,
38037 w = words.slice(0),
38038 h = this._h,
38039 k = this._key,
38040 h0 = h[0], h1 = h[1], h2 = h[2], h3 = h[3],
38041 h4 = h[4], h5 = h[5], h6 = h[6], h7 = h[7];
38042
38043 /* Rationale for placement of |0 :
38044 * If a value can overflow is original 32 bits by a factor of more than a few
38045 * million (2^23 ish), there is a possibility that it might overflow the
38046 * 53-bit mantissa and lose precision.
38047 *
38048 * To avoid this, we clamp back to 32 bits by |'ing with 0 on any value that
38049 * propagates around the loop, and on the hash state h[]. I don't believe
38050 * that the clamps on h4 and on h0 are strictly necessary, but it's close
38051 * (for h4 anyway), and better safe than sorry.
38052 *
38053 * The clamps on h[] are necessary for the output to be correct even in the
38054 * common case and for short inputs.
38055 */
38056 for (i=0; i<64; i++) {
38057 // load up the input word for this round
38058 if (i<16) {
38059 tmp = w[i];
38060 } else {
38061 a = w[(i+1 ) & 15];
38062 b = w[(i+14) & 15];
38063 tmp = w[i&15] = ((a>>>7 ^ a>>>18 ^ a>>>3 ^ a<<25 ^ a<<14) +
38064 (b>>>17 ^ b>>>19 ^ b>>>10 ^ b<<15 ^ b<<13) +
38065 w[i&15] + w[(i+9) & 15]) | 0;
38066 }
38067
38068 tmp = (tmp + h7 + (h4>>>6 ^ h4>>>11 ^ h4>>>25 ^ h4<<26 ^ h4<<21 ^ h4<<7) + (h6 ^ h4&(h5^h6)) + k[i]); // | 0;
38069
38070 // shift register
38071 h7 = h6; h6 = h5; h5 = h4;
38072 h4 = h3 + tmp | 0;
38073 h3 = h2; h2 = h1; h1 = h0;
38074
38075 h0 = (tmp + ((h1&h2) ^ (h3&(h1^h2))) + (h1>>>2 ^ h1>>>13 ^ h1>>>22 ^ h1<<30 ^ h1<<19 ^ h1<<10)) | 0;
38076 }
38077
38078 h[0] = h[0]+h0 | 0;
38079 h[1] = h[1]+h1 | 0;
38080 h[2] = h[2]+h2 | 0;
38081 h[3] = h[3]+h3 | 0;
38082 h[4] = h[4]+h4 | 0;
38083 h[5] = h[5]+h5 | 0;
38084 h[6] = h[6]+h6 | 0;
38085 h[7] = h[7]+h7 | 0;
38086 }
38087};
ea87f1d3
IC
38088</script>
38089 <script>// An extremely basic translation library
38090//
38091// Example usage:
38092//
38093// Set some html to be translated. Do this using the 'data-translate' attribute:
38094//
38095// <div data-translate>Test</div>
38096// <div data-translate-html><em>keep em tag</em></div>
52da415f
IC
38097// <input data-translate-placeholder placeholder="Example placeholder">
38098// <span data-translate-title title="Example title"></span>
ea87f1d3
IC
38099//
38100// Obtain all the phrases to be translated via js debug console:
38101//
38102// Translate.phrasesAsJson();
38103//
38104// Use that template to translate the phrases into another language.
38105// Leave the key the same. Change the value to the new language.
38106//
38107// Create a js file to load the new phrases. In this example for Spanish,
38108// es.js will contain the following code:
38109//
38110// Translate.loadForeignPhrases("es", {
38111// "Test": "Test in Spanish",
38112// "<em>keep em tag</em>": "<em>keep em tag in Spanish</em>",
52da415f
IC
38113// "Example placeholder": "Example placeholder in Spanish"
38114// "Example title": "Example title in Spanish"
ea87f1d3
IC
38115// });
38116//
38117// In your UI put a listener for clicking on the Spanish button:
38118//
38119// mySpanishButton.addEventListener("click", function() {
38120// Translate.setLanguage("es");
38121// });
38122// myEnglishButton.addEventListener("click", function() {
38123// Translate.setLanguage("en");
38124// });
38125
38126Translate = new (function() {
38127
38128 var defaultLanguage = "en";
38129
38130 var allPhrases = {};
38131 allPhrases[defaultLanguage] = {};
38132
38133 // Node types
38134
38135 var text = {
38136 selector: "[data-translate]",
38137 getKey: function() {
38138 return this.textContent.trim().replace(/\s+/g, " ");
38139 },
38140 setPhrase: function(p) {
38141 this.textContent = p;
38142 },
38143 }
38144
38145 var html = {
38146 selector: "[data-translate-html]",
38147 getKey: function() {
38148 return this.innerHTML.trim().replace(/\s+/g, " ");
38149 },
38150 setPhrase: function(p) {
38151 this.innerHTML = p;
38152 },
38153 }
38154
38155 var placeholder = {
38156 selector: "[data-translate-placeholder]",
38157 getKey: function() {
38158 return this.getAttribute("placeholder").trim().replace(/\s+/g, " ");
38159 },
38160 setPhrase: function(p) {
38161 this.setAttribute("placeholder", p);
38162 },
38163 }
38164
52da415f
IC
38165 var title = {
38166 selector: "[data-translate-title]",
38167 getKey: function() {
38168 return this.getAttribute("title").trim().replace(/\s+/g, " ");
38169 },
38170 setPhrase: function(p) {
38171 this.setAttribute("title", p);
38172 },
38173 }
38174
ea87f1d3
IC
38175 // Get elements to be translated
38176 var allEls = getEls(text)
38177 .concat(getEls(html))
52da415f
IC
38178 .concat(getEls(placeholder))
38179 .concat(getEls(title));
ea87f1d3
IC
38180
38181 // Provides access to phrases from a non-default language.
38182 // See phrases_en.js for example usage.
38183 this.loadForeignPhrases = function(language, phrases) {
38184 allPhrases[language] = phrases;
38185 }
38186
38187 // Displays a different language, eg "en" or "fr"
38188 this.setLanguage = function(language) {
38189 for (var i=0; i<allEls.length; i++) {
38190 var el = allEls[i];
38191 var key = el.key;
38192 if (!(language in allPhrases)) {
38193 console.log(language + " not in allPhrases");
38194 return;
38195 }
38196 if (!(key in allPhrases[language])) {
38197 console.log(language + " does not contain phrase: " + key);
38198 return;
38199 }
38200 var phrase = allPhrases[language][key];
38201 el.setPhrase(phrase);
38202 }
38203 }
38204
38205 // Converts the phrases to a key-pair json file.
38206 // This is a good way to export phrases for use in translation tools.
38207 this.phrasesAsJson = function(language) {
38208 var keys = [];
38209 for (var i=0; i<allEls.length; i++) {
38210 var el = allEls[i];
38211 var key = el.key;
38212 keys.push(key);
38213 }
38214 keys.sort();
38215 var output = {};
38216 for (var i=0; i<keys.length; i++) {
38217 var key = keys[i];
38218 var translated = "";
38219 if (language in allPhrases && key in allPhrases[language]) {
38220 translated = allPhrases[language][key];
38221 }
38222 output[key] = translated;
38223 }
38224 return JSON.stringify(output, null, 2);
38225 }
38226
38227 function getEls(nodeType) {
38228 var nodes = document.querySelectorAll(nodeType.selector);
38229 var els = [];
38230 for (var i=0; i<nodes.length; i++) {
38231 var node = nodes[i];
38232 node.getKey = nodeType.getKey;
38233 node.setPhrase = nodeType.setPhrase;
38234 node.key = node.getKey();
38235 allPhrases[defaultLanguage][node.key] = node.key;
38236 els.push(node);
38237 }
38238 return els;
38239 }
38240
38241})();
38242</script>
38243 <script>Translate.loadForeignPhrases("en",
38244{
38245 "<code>m/44'/0'/0'/0</code> generates public addresses": "<code>m/44'/0'/0'/0</code> generates public addresses",
38246 "<code>m/44'/0'/0'/1</code> generates change addresses": "<code>m/44'/0'/0'/1</code> generates change addresses",
38247 "<code>m/44'/0'/0'</code> generates extended keys for import / export": "<code>m/44'/0'/0'</code> generates extended keys for import / export",
38248 "<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).",
38249 "Accepts binary, base 6, 6-sided dice, base 10, hexadecimal, cards": "Accepts binary, base 6, 6-sided dice, base 10, hexadecimal, cards",
38250 "Account": "Account",
38251 "Address": "Address",
38252 "Alternatively, download the file from the repository": "Alternatively, download the file from the repository",
38253 "BIP32 Derivation Path": "BIP32 Derivation Path",
38254 "BIP32 Extended Key": "BIP32 Extended Key",
38255 "BIP32 Extended Key (addresses only)": "BIP32 Extended Key (addresses only)",
38256 "BIP32 Root Key": "BIP32 Root Key",
38257 "BIP39 Mnemonic": "BIP39 Mnemonic",
38258 "BIP39 Passphrase (optional)": "BIP39 Passphrase (optional)",
38259 "BIP39 Seed": "BIP39 Seed",
38260 "Base 10": "Base 10",
38261 "Base 6": "Base 6",
38262 "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.",
38263 "Binary": "Binary",
38264 "Bitcoin Core": "Bitcoin Core",
38265 "Bits Per Event": "Bits Per Event",
38266 "Block Explorers": "Block Explorers",
38267 "Can be used with": "Can be used with",
38268 "Card": "Card",
38269 "Coin": "Coin",
38270 "Dice": "Dice",
38271 "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.",
38272 "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.",
38273 "Entropy": "Entropy",
38274 "Entropy Type": "Entropy Type",
38275 "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.",
38276 "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>.",
38277 "Event Count": "Event Count",
38278 "External / Internal": "External / Internal",
38279 "Filtered Entropy": "Filtered Entropy",
38280 "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>",
38281 "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>.",
38282 "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>.",
38283 "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>",
38284 "For more info see the BIP32 spec": "For more info see the BIP32 spec",
38285 "From entropy length (3 words per 32 bits)": "From entropy length (3 words per 32 bits)",
38286 "Generate a random mnemonic, or enter your own below": "Generate a random mnemonic, or enter your own below",
38287 "Get the source code from the repository": "Get the source code from the repository",
38288 "Hex": "Hex",
38289 "Hierarchical Deterministic Wallets": "Hierarchical Deterministic Wallets",
38290 "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.",
38291 "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.",
38292 "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.",
38293 "Libraries": "Libraries",
38294 "Mnemonic Language": "Mnemonic Language",
38295 "Mnemonic Length": "Mnemonic Length",
38296 "Mnemonic code for generating deterministic keys": "Mnemonic code for generating deterministic keys",
38297 "More info": "More info",
38298 "Multi-Account Hierarchy for Deterministic Wallets": "Multi-Account Hierarchy for Deterministic Wallets",
38299 "Mycelium Wallet": "Mycelium Wallet",
38300 "Note these addreses are derived from the BIP32 Extended Key": "Note these addreses are derived from the BIP32 Extended Key",
38301 "Offline Usage": "Offline Usage",
38302 "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.",
38303 "Path": "Path",
38304 "Private Key": "Private Key",
38305 "Private Keys": "Private Keys",
38306 "Public Key": "Public Key",
38307 "Purpose": "Purpose",
38308 "Raw Binary": "Raw Binary",
38309 "Read more": "Read more",
38310 "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>",
38311 "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>",
38312 "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>",
38313 "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>",
38314 "Show": "Show",
38315 "Show more rows": "Show more rows",
38316 "Strength": "Strength",
38317 "Supply my own source of entropy": "Supply my own source of entropy",
38318 "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.",
38319 "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>.",
38320 "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.",
38321 "This project is 100% open-source code": "This project is 100% open-source code",
38322 "Toggle": "Toggle",
38323 "Total Bits": "Total Bits",
38324 "Use hardened addresses": "Use hardened addresses",
38325 "Use path <code>m/0'/0'</code> with hardened addresses.": "Use path <code>m/0'/0'</code> with hardened addresses.",
38326 "Use path <code>m/44'/0'/0'</code>.": "Use path <code>m/44'/0'/0'</code>.",
38327 "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>.",
38328 "Valid entropy values include:": "Valid entropy values include:",
38329 "Warning": "Warning",
38330 "Word Count": "Word Count",
38331 "You are not a good source of entropy.": "You are not a good source of entropy.",
38332 "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).",
38333 "You can use this tool without having to be online.": "You can use this tool without having to be online.",
38334 "words": "words"
38335}
38336);
dc55c6b0 38337</script>
ab78acc6 38338 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
3af2954a 38339WORDLISTS["english"] = [
ebd8d4e8
IC
38340"abandon","ability","able","about","above","absent","absorb","abstract","absurd","abuse",
38341"access","accident","account","accuse","achieve","acid","acoustic","acquire","across","act",
38342"action","actor","actress","actual","adapt","add","addict","address","adjust","admit",
38343"adult","advance","advice","aerobic","affair","afford","afraid","again","age","agent",
38344"agree","ahead","aim","air","airport","aisle","alarm","album","alcohol","alert",
38345"alien","all","alley","allow","almost","alone","alpha","already","also","alter",
38346"always","amateur","amazing","among","amount","amused","analyst","anchor","ancient","anger",
38347"angle","angry","animal","ankle","announce","annual","another","answer","antenna","antique",
38348"anxiety","any","apart","apology","appear","apple","approve","april","arch","arctic",
38349"area","arena","argue","arm","armed","armor","army","around","arrange","arrest",
38350"arrive","arrow","art","artefact","artist","artwork","ask","aspect","assault","asset",
38351"assist","assume","asthma","athlete","atom","attack","attend","attitude","attract","auction",
38352"audit","august","aunt","author","auto","autumn","average","avocado","avoid","awake",
38353"aware","away","awesome","awful","awkward","axis","baby","bachelor","bacon","badge",
38354"bag","balance","balcony","ball","bamboo","banana","banner","bar","barely","bargain",
38355"barrel","base","basic","basket","battle","beach","bean","beauty","because","become",
38356"beef","before","begin","behave","behind","believe","below","belt","bench","benefit",
38357"best","betray","better","between","beyond","bicycle","bid","bike","bind","biology",
38358"bird","birth","bitter","black","blade","blame","blanket","blast","bleak","bless",
38359"blind","blood","blossom","blouse","blue","blur","blush","board","boat","body",
38360"boil","bomb","bone","bonus","book","boost","border","boring","borrow","boss",
38361"bottom","bounce","box","boy","bracket","brain","brand","brass","brave","bread",
38362"breeze","brick","bridge","brief","bright","bring","brisk","broccoli","broken","bronze",
38363"broom","brother","brown","brush","bubble","buddy","budget","buffalo","build","bulb",
38364"bulk","bullet","bundle","bunker","burden","burger","burst","bus","business","busy",
38365"butter","buyer","buzz","cabbage","cabin","cable","cactus","cage","cake","call",
38366"calm","camera","camp","can","canal","cancel","candy","cannon","canoe","canvas",
38367"canyon","capable","capital","captain","car","carbon","card","cargo","carpet","carry",
38368"cart","case","cash","casino","castle","casual","cat","catalog","catch","category",
38369"cattle","caught","cause","caution","cave","ceiling","celery","cement","census","century",
38370"cereal","certain","chair","chalk","champion","change","chaos","chapter","charge","chase",
38371"chat","cheap","check","cheese","chef","cherry","chest","chicken","chief","child",
38372"chimney","choice","choose","chronic","chuckle","chunk","churn","cigar","cinnamon","circle",
38373"citizen","city","civil","claim","clap","clarify","claw","clay","clean","clerk",
38374"clever","click","client","cliff","climb","clinic","clip","clock","clog","close",
38375"cloth","cloud","clown","club","clump","cluster","clutch","coach","coast","coconut",
38376"code","coffee","coil","coin","collect","color","column","combine","come","comfort",
38377"comic","common","company","concert","conduct","confirm","congress","connect","consider","control",
38378"convince","cook","cool","copper","copy","coral","core","corn","correct","cost",
38379"cotton","couch","country","couple","course","cousin","cover","coyote","crack","cradle",
38380"craft","cram","crane","crash","crater","crawl","crazy","cream","credit","creek",
38381"crew","cricket","crime","crisp","critic","crop","cross","crouch","crowd","crucial",
38382"cruel","cruise","crumble","crunch","crush","cry","crystal","cube","culture","cup",
38383"cupboard","curious","current","curtain","curve","cushion","custom","cute","cycle","dad",
38384"damage","damp","dance","danger","daring","dash","daughter","dawn","day","deal",
38385"debate","debris","decade","december","decide","decline","decorate","decrease","deer","defense",
38386"define","defy","degree","delay","deliver","demand","demise","denial","dentist","deny",
38387"depart","depend","deposit","depth","deputy","derive","describe","desert","design","desk",
38388"despair","destroy","detail","detect","develop","device","devote","diagram","dial","diamond",
38389"diary","dice","diesel","diet","differ","digital","dignity","dilemma","dinner","dinosaur",
38390"direct","dirt","disagree","discover","disease","dish","dismiss","disorder","display","distance",
38391"divert","divide","divorce","dizzy","doctor","document","dog","doll","dolphin","domain",
38392"donate","donkey","donor","door","dose","double","dove","draft","dragon","drama",
38393"drastic","draw","dream","dress","drift","drill","drink","drip","drive","drop",
38394"drum","dry","duck","dumb","dune","during","dust","dutch","duty","dwarf",
38395"dynamic","eager","eagle","early","earn","earth","easily","east","easy","echo",
38396"ecology","economy","edge","edit","educate","effort","egg","eight","either","elbow",
38397"elder","electric","elegant","element","elephant","elevator","elite","else","embark","embody",
38398"embrace","emerge","emotion","employ","empower","empty","enable","enact","end","endless",
38399"endorse","enemy","energy","enforce","engage","engine","enhance","enjoy","enlist","enough",
38400"enrich","enroll","ensure","enter","entire","entry","envelope","episode","equal","equip",
38401"era","erase","erode","erosion","error","erupt","escape","essay","essence","estate",
38402"eternal","ethics","evidence","evil","evoke","evolve","exact","example","excess","exchange",
38403"excite","exclude","excuse","execute","exercise","exhaust","exhibit","exile","exist","exit",
38404"exotic","expand","expect","expire","explain","expose","express","extend","extra","eye",
38405"eyebrow","fabric","face","faculty","fade","faint","faith","fall","false","fame",
38406"family","famous","fan","fancy","fantasy","farm","fashion","fat","fatal","father",
38407"fatigue","fault","favorite","feature","february","federal","fee","feed","feel","female",
38408"fence","festival","fetch","fever","few","fiber","fiction","field","figure","file",
38409"film","filter","final","find","fine","finger","finish","fire","firm","first",
38410"fiscal","fish","fit","fitness","fix","flag","flame","flash","flat","flavor",
38411"flee","flight","flip","float","flock","floor","flower","fluid","flush","fly",
38412"foam","focus","fog","foil","fold","follow","food","foot","force","forest",
38413"forget","fork","fortune","forum","forward","fossil","foster","found","fox","fragile",
38414"frame","frequent","fresh","friend","fringe","frog","front","frost","frown","frozen",
38415"fruit","fuel","fun","funny","furnace","fury","future","gadget","gain","galaxy",
38416"gallery","game","gap","garage","garbage","garden","garlic","garment","gas","gasp",
38417"gate","gather","gauge","gaze","general","genius","genre","gentle","genuine","gesture",
38418"ghost","giant","gift","giggle","ginger","giraffe","girl","give","glad","glance",
38419"glare","glass","glide","glimpse","globe","gloom","glory","glove","glow","glue",
38420"goat","goddess","gold","good","goose","gorilla","gospel","gossip","govern","gown",
38421"grab","grace","grain","grant","grape","grass","gravity","great","green","grid",
38422"grief","grit","grocery","group","grow","grunt","guard","guess","guide","guilt",
38423"guitar","gun","gym","habit","hair","half","hammer","hamster","hand","happy",
38424"harbor","hard","harsh","harvest","hat","have","hawk","hazard","head","health",
38425"heart","heavy","hedgehog","height","hello","helmet","help","hen","hero","hidden",
38426"high","hill","hint","hip","hire","history","hobby","hockey","hold","hole",
38427"holiday","hollow","home","honey","hood","hope","horn","horror","horse","hospital",
38428"host","hotel","hour","hover","hub","huge","human","humble","humor","hundred",
38429"hungry","hunt","hurdle","hurry","hurt","husband","hybrid","ice","icon","idea",
38430"identify","idle","ignore","ill","illegal","illness","image","imitate","immense","immune",
38431"impact","impose","improve","impulse","inch","include","income","increase","index","indicate",
38432"indoor","industry","infant","inflict","inform","inhale","inherit","initial","inject","injury",
38433"inmate","inner","innocent","input","inquiry","insane","insect","inside","inspire","install",
38434"intact","interest","into","invest","invite","involve","iron","island","isolate","issue",
38435"item","ivory","jacket","jaguar","jar","jazz","jealous","jeans","jelly","jewel",
38436"job","join","joke","journey","joy","judge","juice","jump","jungle","junior",
38437"junk","just","kangaroo","keen","keep","ketchup","key","kick","kid","kidney",
38438"kind","kingdom","kiss","kit","kitchen","kite","kitten","kiwi","knee","knife",
38439"knock","know","lab","label","labor","ladder","lady","lake","lamp","language",
38440"laptop","large","later","latin","laugh","laundry","lava","law","lawn","lawsuit",
38441"layer","lazy","leader","leaf","learn","leave","lecture","left","leg","legal",
38442"legend","leisure","lemon","lend","length","lens","leopard","lesson","letter","level",
38443"liar","liberty","library","license","life","lift","light","like","limb","limit",
38444"link","lion","liquid","list","little","live","lizard","load","loan","lobster",
38445"local","lock","logic","lonely","long","loop","lottery","loud","lounge","love",
38446"loyal","lucky","luggage","lumber","lunar","lunch","luxury","lyrics","machine","mad",
38447"magic","magnet","maid","mail","main","major","make","mammal","man","manage",
38448"mandate","mango","mansion","manual","maple","marble","march","margin","marine","market",
38449"marriage","mask","mass","master","match","material","math","matrix","matter","maximum",
38450"maze","meadow","mean","measure","meat","mechanic","medal","media","melody","melt",
38451"member","memory","mention","menu","mercy","merge","merit","merry","mesh","message",
38452"metal","method","middle","midnight","milk","million","mimic","mind","minimum","minor",
38453"minute","miracle","mirror","misery","miss","mistake","mix","mixed","mixture","mobile",
38454"model","modify","mom","moment","monitor","monkey","monster","month","moon","moral",
38455"more","morning","mosquito","mother","motion","motor","mountain","mouse","move","movie",
38456"much","muffin","mule","multiply","muscle","museum","mushroom","music","must","mutual",
38457"myself","mystery","myth","naive","name","napkin","narrow","nasty","nation","nature",
38458"near","neck","need","negative","neglect","neither","nephew","nerve","nest","net",
38459"network","neutral","never","news","next","nice","night","noble","noise","nominee",
38460"noodle","normal","north","nose","notable","note","nothing","notice","novel","now",
38461"nuclear","number","nurse","nut","oak","obey","object","oblige","obscure","observe",
38462"obtain","obvious","occur","ocean","october","odor","off","offer","office","often",
38463"oil","okay","old","olive","olympic","omit","once","one","onion","online",
38464"only","open","opera","opinion","oppose","option","orange","orbit","orchard","order",
38465"ordinary","organ","orient","original","orphan","ostrich","other","outdoor","outer","output",
38466"outside","oval","oven","over","own","owner","oxygen","oyster","ozone","pact",
38467"paddle","page","pair","palace","palm","panda","panel","panic","panther","paper",
38468"parade","parent","park","parrot","party","pass","patch","path","patient","patrol",
38469"pattern","pause","pave","payment","peace","peanut","pear","peasant","pelican","pen",
38470"penalty","pencil","people","pepper","perfect","permit","person","pet","phone","photo",
38471"phrase","physical","piano","picnic","picture","piece","pig","pigeon","pill","pilot",
38472"pink","pioneer","pipe","pistol","pitch","pizza","place","planet","plastic","plate",
38473"play","please","pledge","pluck","plug","plunge","poem","poet","point","polar",
38474"pole","police","pond","pony","pool","popular","portion","position","possible","post",
38475"potato","pottery","poverty","powder","power","practice","praise","predict","prefer","prepare",
38476"present","pretty","prevent","price","pride","primary","print","priority","prison","private",
38477"prize","problem","process","produce","profit","program","project","promote","proof","property",
38478"prosper","protect","proud","provide","public","pudding","pull","pulp","pulse","pumpkin",
38479"punch","pupil","puppy","purchase","purity","purpose","purse","push","put","puzzle",
38480"pyramid","quality","quantum","quarter","question","quick","quit","quiz","quote","rabbit",
38481"raccoon","race","rack","radar","radio","rail","rain","raise","rally","ramp",
38482"ranch","random","range","rapid","rare","rate","rather","raven","raw","razor",
38483"ready","real","reason","rebel","rebuild","recall","receive","recipe","record","recycle",
38484"reduce","reflect","reform","refuse","region","regret","regular","reject","relax","release",
38485"relief","rely","remain","remember","remind","remove","render","renew","rent","reopen",
38486"repair","repeat","replace","report","require","rescue","resemble","resist","resource","response",
38487"result","retire","retreat","return","reunion","reveal","review","reward","rhythm","rib",
38488"ribbon","rice","rich","ride","ridge","rifle","right","rigid","ring","riot",
38489"ripple","risk","ritual","rival","river","road","roast","robot","robust","rocket",
38490"romance","roof","rookie","room","rose","rotate","rough","round","route","royal",
38491"rubber","rude","rug","rule","run","runway","rural","sad","saddle","sadness",
38492"safe","sail","salad","salmon","salon","salt","salute","same","sample","sand",
38493"satisfy","satoshi","sauce","sausage","save","say","scale","scan","scare","scatter",
38494"scene","scheme","school","science","scissors","scorpion","scout","scrap","screen","script",
38495"scrub","sea","search","season","seat","second","secret","section","security","seed",
38496"seek","segment","select","sell","seminar","senior","sense","sentence","series","service",
38497"session","settle","setup","seven","shadow","shaft","shallow","share","shed","shell",
38498"sheriff","shield","shift","shine","ship","shiver","shock","shoe","shoot","shop",
38499"short","shoulder","shove","shrimp","shrug","shuffle","shy","sibling","sick","side",
38500"siege","sight","sign","silent","silk","silly","silver","similar","simple","since",
38501"sing","siren","sister","situate","six","size","skate","sketch","ski","skill",
38502"skin","skirt","skull","slab","slam","sleep","slender","slice","slide","slight",
38503"slim","slogan","slot","slow","slush","small","smart","smile","smoke","smooth",
38504"snack","snake","snap","sniff","snow","soap","soccer","social","sock","soda",
38505"soft","solar","soldier","solid","solution","solve","someone","song","soon","sorry",
38506"sort","soul","sound","soup","source","south","space","spare","spatial","spawn",
38507"speak","special","speed","spell","spend","sphere","spice","spider","spike","spin",
38508"spirit","split","spoil","sponsor","spoon","sport","spot","spray","spread","spring",
38509"spy","square","squeeze","squirrel","stable","stadium","staff","stage","stairs","stamp",
38510"stand","start","state","stay","steak","steel","stem","step","stereo","stick",
38511"still","sting","stock","stomach","stone","stool","story","stove","strategy","street",
38512"strike","strong","struggle","student","stuff","stumble","style","subject","submit","subway",
38513"success","such","sudden","suffer","sugar","suggest","suit","summer","sun","sunny",
38514"sunset","super","supply","supreme","sure","surface","surge","surprise","surround","survey",
38515"suspect","sustain","swallow","swamp","swap","swarm","swear","sweet","swift","swim",
38516"swing","switch","sword","symbol","symptom","syrup","system","table","tackle","tag",
38517"tail","talent","talk","tank","tape","target","task","taste","tattoo","taxi",
38518"teach","team","tell","ten","tenant","tennis","tent","term","test","text",
38519"thank","that","theme","then","theory","there","they","thing","this","thought",
38520"three","thrive","throw","thumb","thunder","ticket","tide","tiger","tilt","timber",
38521"time","tiny","tip","tired","tissue","title","toast","tobacco","today","toddler",
38522"toe","together","toilet","token","tomato","tomorrow","tone","tongue","tonight","tool",
38523"tooth","top","topic","topple","torch","tornado","tortoise","toss","total","tourist",
38524"toward","tower","town","toy","track","trade","traffic","tragic","train","transfer",
38525"trap","trash","travel","tray","treat","tree","trend","trial","tribe","trick",
38526"trigger","trim","trip","trophy","trouble","truck","true","truly","trumpet","trust",
38527"truth","try","tube","tuition","tumble","tuna","tunnel","turkey","turn","turtle",
38528"twelve","twenty","twice","twin","twist","two","type","typical","ugly","umbrella",
38529"unable","unaware","uncle","uncover","under","undo","unfair","unfold","unhappy","uniform",
38530"unique","unit","universe","unknown","unlock","until","unusual","unveil","update","upgrade",
38531"uphold","upon","upper","upset","urban","urge","usage","use","used","useful",
38532"useless","usual","utility","vacant","vacuum","vague","valid","valley","valve","van",
38533"vanish","vapor","various","vast","vault","vehicle","velvet","vendor","venture","venue",
38534"verb","verify","version","very","vessel","veteran","viable","vibrant","vicious","victory",
38535"video","view","village","vintage","violin","virtual","virus","visa","visit","visual",
38536"vital","vivid","vocal","voice","void","volcano","volume","vote","voyage","wage",
38537"wagon","wait","walk","wall","walnut","want","warfare","warm","warrior","wash",
38538"wasp","waste","water","wave","way","wealth","weapon","wear","weasel","weather",
38539"web","wedding","weekend","weird","welcome","west","wet","whale","what","wheat",
38540"wheel","when","where","whip","whisper","wide","width","wife","wild","will",
38541"win","window","wine","wing","wink","winner","winter","wire","wisdom","wise",
38542"wish","witness","wolf","woman","wonder","wood","wool","word","work","world",
38543"worry","worth","wrap","wreck","wrestle","wrist","write","wrong","yard","year",
38544"yellow","you","young","youth","zebra","zero","zone","zoo"]
0515eeec
IC
38545</script>
38546 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
38547WORDLISTS["japanese"] = [
38548"あいこくしん", "あいさつ", "あいだ", "あおぞら", "あかちゃん", "あきる", "あけがた", "あける", "あこがれる", "あさい",
38549"あさひ", "あしあと", "あじわう", "あずかる", "あずき", "あそぶ", "あたえる", "あたためる", "あたりまえ", "あたる",
38550"あつい", "あつかう", "あっしゅく", "あつまり", "あつめる", "あてな", "あてはまる", "あひる", "あぶら", "あぶる",
38551"あふれる", "あまい", "あまど", "あまやかす", "あまり", "あみもの", "あめりか", "あやまる", "あゆむ", "あらいぐま",
38552"あらし", "あらすじ", "あらためる", "あらゆる", "あらわす", "ありがとう", "あわせる", "あわてる", "あんい", "あんがい",
38553"あんこ", "あんぜん", "あんてい", "あんない", "あんまり", "いいだす", "いおん", "いがい", "いがく", "いきおい",
38554"いきなり", "いきもの", "いきる", "いくじ", "いくぶん", "いけばな", "いけん", "いこう", "いこく", "いこつ",
38555"いさましい", "いさん", "いしき", "いじゅう", "いじょう", "いじわる", "いずみ", "いずれ", "いせい", "いせえび",
38556"いせかい", "いせき", "いぜん", "いそうろう", "いそがしい", "いだい", "いだく", "いたずら", "いたみ", "いたりあ",
38557"いちおう", "いちじ", "いちど", "いちば", "いちぶ", "いちりゅう", "いつか", "いっしゅん", "いっせい", "いっそう",
38558"いったん", "いっち", "いってい", "いっぽう", "いてざ", "いてん", "いどう", "いとこ", "いない", "いなか",
38559"いねむり", "いのち", "いのる", "いはつ", "いばる", "いはん", "いびき", "いひん", "いふく", "いへん",
38560"いほう", "いみん", "いもうと", "いもたれ", "いもり", "いやがる", "いやす", "いよかん", "いよく", "いらい",
38561"いらすと", "いりぐち", "いりょう", "いれい", "いれもの", "いれる", "いろえんぴつ", "いわい", "いわう", "いわかん",
38562"いわば", "いわゆる", "いんげんまめ", "いんさつ", "いんしょう", "いんよう", "うえき", "うえる", "うおざ", "うがい",
38563"うかぶ", "うかべる", "うきわ", "うくらいな", "うくれれ", "うけたまわる", "うけつけ", "うけとる", "うけもつ", "うける",
38564"うごかす", "うごく", "うこん", "うさぎ", "うしなう", "うしろがみ", "うすい", "うすぎ", "うすぐらい", "うすめる",
38565"うせつ", "うちあわせ", "うちがわ", "うちき", "うちゅう", "うっかり", "うつくしい", "うったえる", "うつる", "うどん",
38566"うなぎ", "うなじ", "うなずく", "うなる", "うねる", "うのう", "うぶげ", "うぶごえ", "うまれる", "うめる",
38567"うもう", "うやまう", "うよく", "うらがえす", "うらぐち", "うらない", "うりあげ", "うりきれ", "うるさい", "うれしい",
38568"うれゆき", "うれる", "うろこ", "うわき", "うわさ", "うんこう", "うんちん", "うんてん", "うんどう", "えいえん",
38569"えいが", "えいきょう", "えいご", "えいせい", "えいぶん", "えいよう", "えいわ", "えおり", "えがお", "えがく",
38570"えきたい", "えくせる", "えしゃく", "えすて", "えつらん", "えのぐ", "えほうまき", "えほん", "えまき", "えもじ",
38571"えもの", "えらい", "えらぶ", "えりあ", "えんえん", "えんかい", "えんぎ", "えんげき", "えんしゅう", "えんぜつ",
38572"えんそく", "えんちょう", "えんとつ", "おいかける", "おいこす", "おいしい", "おいつく", "おうえん", "おうさま", "おうじ",
38573"おうせつ", "おうたい", "おうふく", "おうべい", "おうよう", "おえる", "おおい", "おおう", "おおどおり", "おおや",
38574"おおよそ", "おかえり", "おかず", "おがむ", "おかわり", "おぎなう", "おきる", "おくさま", "おくじょう", "おくりがな",
38575"おくる", "おくれる", "おこす", "おこなう", "おこる", "おさえる", "おさない", "おさめる", "おしいれ", "おしえる",
38576"おじぎ", "おじさん", "おしゃれ", "おそらく", "おそわる", "おたがい", "おたく", "おだやか", "おちつく", "おっと",
38577"おつり", "おでかけ", "おとしもの", "おとなしい", "おどり", "おどろかす", "おばさん", "おまいり", "おめでとう", "おもいで",
38578"おもう", "おもたい", "おもちゃ", "おやつ", "おやゆび", "およぼす", "おらんだ", "おろす", "おんがく", "おんけい",
38579"おんしゃ", "おんせん", "おんだん", "おんちゅう", "おんどけい", "かあつ", "かいが", "がいき", "がいけん", "がいこう",
38580"かいさつ", "かいしゃ", "かいすいよく", "かいぜん", "かいぞうど", "かいつう", "かいてん", "かいとう", "かいふく", "がいへき",
38581"かいほう", "かいよう", "がいらい", "かいわ", "かえる", "かおり", "かかえる", "かがく", "かがし", "かがみ",
38582"かくご", "かくとく", "かざる", "がぞう", "かたい", "かたち", "がちょう", "がっきゅう", "がっこう", "がっさん",
38583"がっしょう", "かなざわし", "かのう", "がはく", "かぶか", "かほう", "かほご", "かまう", "かまぼこ", "かめれおん",
38584"かゆい", "かようび", "からい", "かるい", "かろう", "かわく", "かわら", "がんか", "かんけい", "かんこう",
38585"かんしゃ", "かんそう", "かんたん", "かんち", "がんばる", "きあい", "きあつ", "きいろ", "ぎいん", "きうい",
38586"きうん", "きえる", "きおう", "きおく", "きおち", "きおん", "きかい", "きかく", "きかんしゃ", "ききて",
38587"きくばり", "きくらげ", "きけんせい", "きこう", "きこえる", "きこく", "きさい", "きさく", "きさま", "きさらぎ",
38588"ぎじかがく", "ぎしき", "ぎじたいけん", "ぎじにってい", "ぎじゅつしゃ", "きすう", "きせい", "きせき", "きせつ", "きそう",
38589"きぞく", "きぞん", "きたえる", "きちょう", "きつえん", "ぎっちり", "きつつき", "きつね", "きてい", "きどう",
38590"きどく", "きない", "きなが", "きなこ", "きぬごし", "きねん", "きのう", "きのした", "きはく", "きびしい",
38591"きひん", "きふく", "きぶん", "きぼう", "きほん", "きまる", "きみつ", "きむずかしい", "きめる", "きもだめし",
38592"きもち", "きもの", "きゃく", "きやく", "ぎゅうにく", "きよう", "きょうりゅう", "きらい", "きらく", "きりん",
38593"きれい", "きれつ", "きろく", "ぎろん", "きわめる", "ぎんいろ", "きんかくじ", "きんじょ", "きんようび", "ぐあい",
38594"くいず", "くうかん", "くうき", "くうぐん", "くうこう", "ぐうせい", "くうそう", "ぐうたら", "くうふく", "くうぼ",
38595"くかん", "くきょう", "くげん", "ぐこう", "くさい", "くさき", "くさばな", "くさる", "くしゃみ", "くしょう",
38596"くすのき", "くすりゆび", "くせげ", "くせん", "ぐたいてき", "くださる", "くたびれる", "くちこみ", "くちさき", "くつした",
38597"ぐっすり", "くつろぐ", "くとうてん", "くどく", "くなん", "くねくね", "くのう", "くふう", "くみあわせ", "くみたてる",
38598"くめる", "くやくしょ", "くらす", "くらべる", "くるま", "くれる", "くろう", "くわしい", "ぐんかん", "ぐんしょく",
38599"ぐんたい", "ぐんて", "けあな", "けいかく", "けいけん", "けいこ", "けいさつ", "げいじゅつ", "けいたい", "げいのうじん",
38600"けいれき", "けいろ", "けおとす", "けおりもの", "げきか", "げきげん", "げきだん", "げきちん", "げきとつ", "げきは",
38601"げきやく", "げこう", "げこくじょう", "げざい", "けさき", "げざん", "けしき", "けしごむ", "けしょう", "げすと",
38602"けたば", "けちゃっぷ", "けちらす", "けつあつ", "けつい", "けつえき", "けっこん", "けつじょ", "けっせき", "けってい",
38603"けつまつ", "げつようび", "げつれい", "けつろん", "げどく", "けとばす", "けとる", "けなげ", "けなす", "けなみ",
38604"けぬき", "げねつ", "けねん", "けはい", "げひん", "けぶかい", "げぼく", "けまり", "けみかる", "けむし",
38605"けむり", "けもの", "けらい", "けろけろ", "けわしい", "けんい", "けんえつ", "けんお", "けんか", "げんき",
38606"けんげん", "けんこう", "けんさく", "けんしゅう", "けんすう", "げんそう", "けんちく", "けんてい", "けんとう", "けんない",
38607"けんにん", "げんぶつ", "けんま", "けんみん", "けんめい", "けんらん", "けんり", "こあくま", "こいぬ", "こいびと",
38608"ごうい", "こうえん", "こうおん", "こうかん", "ごうきゅう", "ごうけい", "こうこう", "こうさい", "こうじ", "こうすい",
38609"ごうせい", "こうそく", "こうたい", "こうちゃ", "こうつう", "こうてい", "こうどう", "こうない", "こうはい", "ごうほう",
38610"ごうまん", "こうもく", "こうりつ", "こえる", "こおり", "ごかい", "ごがつ", "ごかん", "こくご", "こくさい",
38611"こくとう", "こくない", "こくはく", "こぐま", "こけい", "こける", "ここのか", "こころ", "こさめ", "こしつ",
38612"こすう", "こせい", "こせき", "こぜん", "こそだて", "こたい", "こたえる", "こたつ", "こちょう", "こっか",
38613"こつこつ", "こつばん", "こつぶ", "こてい", "こてん", "ことがら", "ことし", "ことば", "ことり", "こなごな",
38614"こねこね", "このまま", "このみ", "このよ", "ごはん", "こひつじ", "こふう", "こふん", "こぼれる", "ごまあぶら",
38615"こまかい", "ごますり", "こまつな", "こまる", "こむぎこ", "こもじ", "こもち", "こもの", "こもん", "こやく",
38616"こやま", "こゆう", "こゆび", "こよい", "こよう", "こりる", "これくしょん", "ころっけ", "こわもて", "こわれる",
38617"こんいん", "こんかい", "こんき", "こんしゅう", "こんすい", "こんだて", "こんとん", "こんなん", "こんびに", "こんぽん",
38618"こんまけ", "こんや", "こんれい", "こんわく", "ざいえき", "さいかい", "さいきん", "ざいげん", "ざいこ", "さいしょ",
38619"さいせい", "ざいたく", "ざいちゅう", "さいてき", "ざいりょう", "さうな", "さかいし", "さがす", "さかな", "さかみち",
38620"さがる", "さぎょう", "さくし", "さくひん", "さくら", "さこく", "さこつ", "さずかる", "ざせき", "さたん",
38621"さつえい", "ざつおん", "ざっか", "ざつがく", "さっきょく", "ざっし", "さつじん", "ざっそう", "さつたば", "さつまいも",
38622"さてい", "さといも", "さとう", "さとおや", "さとし", "さとる", "さのう", "さばく", "さびしい", "さべつ",
38623"さほう", "さほど", "さます", "さみしい", "さみだれ", "さむけ", "さめる", "さやえんどう", "さゆう", "さよう",
38624"さよく", "さらだ", "ざるそば", "さわやか", "さわる", "さんいん", "さんか", "さんきゃく", "さんこう", "さんさい",
38625"ざんしょ", "さんすう", "さんせい", "さんそ", "さんち", "さんま", "さんみ", "さんらん", "しあい", "しあげ",
38626"しあさって", "しあわせ", "しいく", "しいん", "しうち", "しえい", "しおけ", "しかい", "しかく", "じかん",
38627"しごと", "しすう", "じだい", "したうけ", "したぎ", "したて", "したみ", "しちょう", "しちりん", "しっかり",
38628"しつじ", "しつもん", "してい", "してき", "してつ", "じてん", "じどう", "しなぎれ", "しなもの", "しなん",
38629"しねま", "しねん", "しのぐ", "しのぶ", "しはい", "しばかり", "しはつ", "しはらい", "しはん", "しひょう",
38630"しふく", "じぶん", "しへい", "しほう", "しほん", "しまう", "しまる", "しみん", "しむける", "じむしょ",
38631"しめい", "しめる", "しもん", "しゃいん", "しゃうん", "しゃおん", "じゃがいも", "しやくしょ", "しゃくほう", "しゃけん",
38632"しゃこ", "しゃざい", "しゃしん", "しゃせん", "しゃそう", "しゃたい", "しゃちょう", "しゃっきん", "じゃま", "しゃりん",
38633"しゃれい", "じゆう", "じゅうしょ", "しゅくはく", "じゅしん", "しゅっせき", "しゅみ", "しゅらば", "じゅんばん", "しょうかい",
38634"しょくたく", "しょっけん", "しょどう", "しょもつ", "しらせる", "しらべる", "しんか", "しんこう", "じんじゃ", "しんせいじ",
38635"しんちく", "しんりん", "すあげ", "すあし", "すあな", "ずあん", "すいえい", "すいか", "すいとう", "ずいぶん",
38636"すいようび", "すうがく", "すうじつ", "すうせん", "すおどり", "すきま", "すくう", "すくない", "すける", "すごい",
38637"すこし", "ずさん", "すずしい", "すすむ", "すすめる", "すっかり", "ずっしり", "ずっと", "すてき", "すてる",
38638"すねる", "すのこ", "すはだ", "すばらしい", "ずひょう", "ずぶぬれ", "すぶり", "すふれ", "すべて", "すべる",
38639"ずほう", "すぼん", "すまい", "すめし", "すもう", "すやき", "すらすら", "するめ", "すれちがう", "すろっと",
38640"すわる", "すんぜん", "すんぽう", "せあぶら", "せいかつ", "せいげん", "せいじ", "せいよう", "せおう", "せかいかん",
38641"せきにん", "せきむ", "せきゆ", "せきらんうん", "せけん", "せこう", "せすじ", "せたい", "せたけ", "せっかく",
38642"せっきゃく", "ぜっく", "せっけん", "せっこつ", "せっさたくま", "せつぞく", "せつだん", "せつでん", "せっぱん", "せつび",
38643"せつぶん", "せつめい", "せつりつ", "せなか", "せのび", "せはば", "せびろ", "せぼね", "せまい", "せまる",
38644"せめる", "せもたれ", "せりふ", "ぜんあく", "せんい", "せんえい", "せんか", "せんきょ", "せんく", "せんげん",
38645"ぜんご", "せんさい", "せんしゅ", "せんすい", "せんせい", "せんぞ", "せんたく", "せんちょう", "せんてい", "せんとう",
38646"せんぬき", "せんねん", "せんぱい", "ぜんぶ", "ぜんぽう", "せんむ", "せんめんじょ", "せんもん", "せんやく", "せんゆう",
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</script>
38754 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
38755WORDLISTS["spanish"] = [
38756"ábaco", "abdomen", "abeja", "abierto", "abogado", "abono", "aborto", "abrazo", "abrir", "abuelo",
38757"abuso", "acabar", "academia", "acceso", "acción", "aceite", "acelga", "acento", "aceptar", "ácido",
38758"aclarar", "acné", "acoger", "acoso", "activo", "acto", "actriz", "actuar", "acudir", "acuerdo",
38759"acusar", "adicto", "admitir", "adoptar", "adorno", "aduana", "adulto", "aéreo", "afectar", "afición",
38760"afinar", "afirmar", "ágil", "agitar", "agonía", "agosto", "agotar", "agregar", "agrio", "agua",
38761"agudo", "águila", "aguja", "ahogo", "ahorro", "aire", "aislar", "ajedrez", "ajeno", "ajuste",
38762"alacrán", "alambre", "alarma", "alba", "álbum", "alcalde", "aldea", "alegre", "alejar", "alerta",
38763"aleta", "alfiler", "alga", "algodón", "aliado", "aliento", "alivio", "alma", "almeja", "almíbar",
38764"altar", "alteza", "altivo", "alto", "altura", "alumno", "alzar", "amable", "amante", "amapola",
38765"amargo", "amasar", "ámbar", "ámbito", "ameno", "amigo", "amistad", "amor", "amparo", "amplio",
38766"ancho", "anciano", "ancla", "andar", "andén", "anemia", "ángulo", "anillo", "ánimo", "anís",
38767"anotar", "antena", "antiguo", "antojo", "anual", "anular", "anuncio", "añadir", "añejo", "año",
38768"apagar", "aparato", "apetito", "apio", "aplicar", "apodo", "aporte", "apoyo", "aprender", "aprobar",
38769"apuesta", "apuro", "arado", "araña", "arar", "árbitro", "árbol", "arbusto", "archivo", "arco",
38770"arder", "ardilla", "arduo", "área", "árido", "aries", "armonía", "arnés", "aroma", "arpa",
38771"arpón", "arreglo", "arroz", "arruga", "arte", "artista", "asa", "asado", "asalto", "ascenso",
38772"asegurar", "aseo", "asesor", "asiento", "asilo", "asistir", "asno", "asombro", "áspero", "astilla",
38773"astro", "astuto", "asumir", "asunto", "atajo", "ataque", "atar", "atento", "ateo", "ático",
38774"atleta", "átomo", "atraer", "atroz", "atún", "audaz", "audio", "auge", "aula", "aumento",
38775"ausente", "autor", "aval", "avance", "avaro", "ave", "avellana", "avena", "avestruz", "avión",
38776"aviso", "ayer", "ayuda", "ayuno", "azafrán", "azar", "azote", "azúcar", "azufre", "azul",
38777"baba", "babor", "bache", "bahía", "baile", "bajar", "balanza", "balcón", "balde", "bambú",
38778"banco", "banda", "baño", "barba", "barco", "barniz", "barro", "báscula", "bastón", "basura",
38779"batalla", "batería", "batir", "batuta", "baúl", "bazar", "bebé", "bebida", "bello", "besar",
38780"beso", "bestia", "bicho", "bien", "bingo", "blanco", "bloque", "blusa", "boa", "bobina",
38781"bobo", "boca", "bocina", "boda", "bodega", "boina", "bola", "bolero", "bolsa", "bomba",
38782"bondad", "bonito", "bono", "bonsái", "borde", "borrar", "bosque", "bote", "botín", "bóveda",
38783"bozal", "bravo", "brazo", "brecha", "breve", "brillo", "brinco", "brisa", "broca", "broma",
38784"bronce", "brote", "bruja", "brusco", "bruto", "buceo", "bucle", "bueno", "buey", "bufanda",
38785"bufón", "búho", "buitre", "bulto", "burbuja", "burla", "burro", "buscar", "butaca", "buzón",
38786"caballo", "cabeza", "cabina", "cabra", "cacao", "cadáver", "cadena", "caer", "café", "caída",
38787"caimán", "caja", "cajón", "cal", "calamar", "calcio", "caldo", "calidad", "calle", "calma",
38788"calor", "calvo", "cama", "cambio", "camello", "camino", "campo", "cáncer", "candil", "canela",
38789"canguro", "canica", "canto", "caña", "cañón", "caoba", "caos", "capaz", "capitán", "capote",
38790"captar", "capucha", "cara", "carbón", "cárcel", "careta", "carga", "cariño", "carne", "carpeta",
38791"carro", "carta", "casa", "casco", "casero", "caspa", "castor", "catorce", "catre", "caudal",
38792"causa", "cazo", "cebolla", "ceder", "cedro", "celda", "célebre", "celoso", "célula", "cemento",
38793"ceniza", "centro", "cerca", "cerdo", "cereza", "cero", "cerrar", "certeza", "césped", "cetro",
38794"chacal", "chaleco", "champú", "chancla", "chapa", "charla", "chico", "chiste", "chivo", "choque",
38795"choza", "chuleta", "chupar", "ciclón", "ciego", "cielo", "cien", "cierto", "cifra", "cigarro",
38796"cima", "cinco", "cine", "cinta", "ciprés", "circo", "ciruela", "cisne", "cita", "ciudad",
38797"clamor", "clan", "claro", "clase", "clave", "cliente", "clima", "clínica", "cobre", "cocción",
38798"cochino", "cocina", "coco", "código", "codo", "cofre", "coger", "cohete", "cojín", "cojo",
38799"cola", "colcha", "colegio", "colgar", "colina", "collar", "colmo", "columna", "combate", "comer",
38800"comida", "cómodo", "compra", "conde", "conejo", "conga", "conocer", "consejo", "contar", "copa",
38801"copia", "corazón", "corbata", "corcho", "cordón", "corona", "correr", "coser", "cosmos", "costa",
38802"cráneo", "cráter", "crear", "crecer", "creído", "crema", "cría", "crimen", "cripta", "crisis",
38803"cromo", "crónica", "croqueta", "crudo", "cruz", "cuadro", "cuarto", "cuatro", "cubo", "cubrir",
38804"cuchara", "cuello", "cuento", "cuerda", "cuesta", "cueva", "cuidar", "culebra", "culpa", "culto",
38805"cumbre", "cumplir", "cuna", "cuneta", "cuota", "cupón", "cúpula", "curar", "curioso", "curso",
38806"curva", "cutis", "dama", "danza", "dar", "dardo", "dátil", "deber", "débil", "década",
38807"decir", "dedo", "defensa", "definir", "dejar", "delfín", "delgado", "delito", "demora", "denso",
38808"dental", "deporte", "derecho", "derrota", "desayuno", "deseo", "desfile", "desnudo", "destino", "desvío",
38809"detalle", "detener", "deuda", "día", "diablo", "diadema", "diamante", "diana", "diario", "dibujo",
38810"dictar", "diente", "dieta", "diez", "difícil", "digno", "dilema", "diluir", "dinero", "directo",
38811"dirigir", "disco", "diseño", "disfraz", "diva", "divino", "doble", "doce", "dolor", "domingo",
38812"don", "donar", "dorado", "dormir", "dorso", "dos", "dosis", "dragón", "droga", "ducha",
38813"duda", "duelo", "dueño", "dulce", "dúo", "duque", "durar", "dureza", "duro", "ébano",
38814"ebrio", "echar", "eco", "ecuador", "edad", "edición", "edificio", "editor", "educar", "efecto",
38815"eficaz", "eje", "ejemplo", "elefante", "elegir", "elemento", "elevar", "elipse", "élite", "elixir",
38816"elogio", "eludir", "embudo", "emitir", "emoción", "empate", "empeño", "empleo", "empresa", "enano",
38817"encargo", "enchufe", "encía", "enemigo", "enero", "enfado", "enfermo", "engaño", "enigma", "enlace",
38818"enorme", "enredo", "ensayo", "enseñar", "entero", "entrar", "envase", "envío", "época", "equipo",
38819"erizo", "escala", "escena", "escolar", "escribir", "escudo", "esencia", "esfera", "esfuerzo", "espada",
38820"espejo", "espía", "esposa", "espuma", "esquí", "estar", "este", "estilo", "estufa", "etapa",
38821"eterno", "ética", "etnia", "evadir", "evaluar", "evento", "evitar", "exacto", "examen", "exceso",
38822"excusa", "exento", "exigir", "exilio", "existir", "éxito", "experto", "explicar", "exponer", "extremo",
38823"fábrica", "fábula", "fachada", "fácil", "factor", "faena", "faja", "falda", "fallo", "falso",
38824"faltar", "fama", "familia", "famoso", "faraón", "farmacia", "farol", "farsa", "fase", "fatiga",
38825"fauna", "favor", "fax", "febrero", "fecha", "feliz", "feo", "feria", "feroz", "fértil",
38826"fervor", "festín", "fiable", "fianza", "fiar", "fibra", "ficción", "ficha", "fideo", "fiebre",
38827"fiel", "fiera", "fiesta", "figura", "fijar", "fijo", "fila", "filete", "filial", "filtro",
38828"fin", "finca", "fingir", "finito", "firma", "flaco", "flauta", "flecha", "flor", "flota",
38829"fluir", "flujo", "flúor", "fobia", "foca", "fogata", "fogón", "folio", "folleto", "fondo",
38830"forma", "forro", "fortuna", "forzar", "fosa", "foto", "fracaso", "frágil", "franja", "frase",
38831"fraude", "freír", "freno", "fresa", "frío", "frito", "fruta", "fuego", "fuente", "fuerza",
38832"fuga", "fumar", "función", "funda", "furgón", "furia", "fusil", "fútbol", "futuro", "gacela",
38833"gafas", "gaita", "gajo", "gala", "galería", "gallo", "gamba", "ganar", "gancho", "ganga",
38834"ganso", "garaje", "garza", "gasolina", "gastar", "gato", "gavilán", "gemelo", "gemir", "gen",
38835"género", "genio", "gente", "geranio", "gerente", "germen", "gesto", "gigante", "gimnasio", "girar",
38836"giro", "glaciar", "globo", "gloria", "gol", "golfo", "goloso", "golpe", "goma", "gordo",
38837"gorila", "gorra", "gota", "goteo", "gozar", "grada", "gráfico", "grano", "grasa", "gratis",
38838"grave", "grieta", "grillo", "gripe", "gris", "grito", "grosor", "grúa", "grueso", "grumo",
38839"grupo", "guante", "guapo", "guardia", "guerra", "guía", "guiño", "guion", "guiso", "guitarra",
38840"gusano", "gustar", "haber", "hábil", "hablar", "hacer", "hacha", "hada", "hallar", "hamaca",
38841"harina", "haz", "hazaña", "hebilla", "hebra", "hecho", "helado", "helio", "hembra", "herir",
38842"hermano", "héroe", "hervir", "hielo", "hierro", "hígado", "higiene", "hijo", "himno", "historia",
38843"hocico", "hogar", "hoguera", "hoja", "hombre", "hongo", "honor", "honra", "hora", "hormiga",
38844"horno", "hostil", "hoyo", "hueco", "huelga", "huerta", "hueso", "huevo", "huida", "huir",
38845"humano", "húmedo", "humilde", "humo", "hundir", "huracán", "hurto", "icono", "ideal", "idioma",
38846"ídolo", "iglesia", "iglú", "igual", "ilegal", "ilusión", "imagen", "imán", "imitar", "impar",
38847"imperio", "imponer", "impulso", "incapaz", "índice", "inerte", "infiel", "informe", "ingenio", "inicio",
38848"inmenso", "inmune", "innato", "insecto", "instante", "interés", "íntimo", "intuir", "inútil", "invierno",
38849"ira", "iris", "ironía", "isla", "islote", "jabalí", "jabón", "jamón", "jarabe", "jardín",
38850"jarra", "jaula", "jazmín", "jefe", "jeringa", "jinete", "jornada", "joroba", "joven", "joya",
38851"juerga", "jueves", "juez", "jugador", "jugo", "juguete", "juicio", "junco", "jungla", "junio",
38852"juntar", "júpiter", "jurar", "justo", "juvenil", "juzgar", "kilo", "koala", "labio", "lacio",
38853"lacra", "lado", "ladrón", "lagarto", "lágrima", "laguna", "laico", "lamer", "lámina", "lámpara",
38854"lana", "lancha", "langosta", "lanza", "lápiz", "largo", "larva", "lástima", "lata", "látex",
38855"latir", "laurel", "lavar", "lazo", "leal", "lección", "leche", "lector", "leer", "legión",
38856"legumbre", "lejano", "lengua", "lento", "leña", "león", "leopardo", "lesión", "letal", "letra",
38857"leve", "leyenda", "libertad", "libro", "licor", "líder", "lidiar", "lienzo", "liga", "ligero",
38858"lima", "límite", "limón", "limpio", "lince", "lindo", "línea", "lingote", "lino", "linterna",
38859"líquido", "liso", "lista", "litera", "litio", "litro", "llaga", "llama", "llanto", "llave",
38860"llegar", "llenar", "llevar", "llorar", "llover", "lluvia", "lobo", "loción", "loco", "locura",
38861"lógica", "logro", "lombriz", "lomo", "lonja", "lote", "lucha", "lucir", "lugar", "lujo",
38862"luna", "lunes", "lupa", "lustro", "luto", "luz", "maceta", "macho", "madera", "madre",
38863"maduro", "maestro", "mafia", "magia", "mago", "maíz", "maldad", "maleta", "malla", "malo",
38864"mamá", "mambo", "mamut", "manco", "mando", "manejar", "manga", "maniquí", "manjar", "mano",
38865"manso", "manta", "mañana", "mapa", "máquina", "mar", "marco", "marea", "marfil", "margen",
38866"marido", "mármol", "marrón", "martes", "marzo", "masa", "máscara", "masivo", "matar", "materia",
38867"matiz", "matriz", "máximo", "mayor", "mazorca", "mecha", "medalla", "medio", "médula", "mejilla",
38868"mejor", "melena", "melón", "memoria", "menor", "mensaje", "mente", "menú", "mercado", "merengue",
38869"mérito", "mes", "mesón", "meta", "meter", "método", "metro", "mezcla", "miedo", "miel",
38870"miembro", "miga", "mil", "milagro", "militar", "millón", "mimo", "mina", "minero", "mínimo",
38871"minuto", "miope", "mirar", "misa", "miseria", "misil", "mismo", "mitad", "mito", "mochila",
38872"moción", "moda", "modelo", "moho", "mojar", "molde", "moler", "molino", "momento", "momia",
38873"monarca", "moneda", "monja", "monto", "moño", "morada", "morder", "moreno", "morir", "morro",
38874"morsa", "mortal", "mosca", "mostrar", "motivo", "mover", "móvil", "mozo", "mucho", "mudar",
38875"mueble", "muela", "muerte", "muestra", "mugre", "mujer", "mula", "muleta", "multa", "mundo",
38876"muñeca", "mural", "muro", "músculo", "museo", "musgo", "música", "muslo", "nácar", "nación",
38877"nadar", "naipe", "naranja", "nariz", "narrar", "nasal", "natal", "nativo", "natural", "náusea",
38878"naval", "nave", "navidad", "necio", "néctar", "negar", "negocio", "negro", "neón", "nervio",
38879"neto", "neutro", "nevar", "nevera", "nicho", "nido", "niebla", "nieto", "niñez", "niño",
38880"nítido", "nivel", "nobleza", "noche", "nómina", "noria", "norma", "norte", "nota", "noticia",
38881"novato", "novela", "novio", "nube", "nuca", "núcleo", "nudillo", "nudo", "nuera", "nueve",
38882"nuez", "nulo", "número", "nutria", "oasis", "obeso", "obispo", "objeto", "obra", "obrero",
38883"observar", "obtener", "obvio", "oca", "ocaso", "océano", "ochenta", "ocho", "ocio", "ocre",
38884"octavo", "octubre", "oculto", "ocupar", "ocurrir", "odiar", "odio", "odisea", "oeste", "ofensa",
38885"oferta", "oficio", "ofrecer", "ogro", "oído", "oír", "ojo", "ola", "oleada", "olfato",
38886"olivo", "olla", "olmo", "olor", "olvido", "ombligo", "onda", "onza", "opaco", "opción",
38887"ópera", "opinar", "oponer", "optar", "óptica", "opuesto", "oración", "orador", "oral", "órbita",
38888"orca", "orden", "oreja", "órgano", "orgía", "orgullo", "oriente", "origen", "orilla", "oro",
38889"orquesta", "oruga", "osadía", "oscuro", "osezno", "oso", "ostra", "otoño", "otro", "oveja",
38890"óvulo", "óxido", "oxígeno", "oyente", "ozono", "pacto", "padre", "paella", "página", "pago",
38891"país", "pájaro", "palabra", "palco", "paleta", "pálido", "palma", "paloma", "palpar", "pan",
38892"panal", "pánico", "pantera", "pañuelo", "papá", "papel", "papilla", "paquete", "parar", "parcela",
38893"pared", "parir", "paro", "párpado", "parque", "párrafo", "parte", "pasar", "paseo", "pasión",
38894"paso", "pasta", "pata", "patio", "patria", "pausa", "pauta", "pavo", "payaso", "peatón",
38895"pecado", "pecera", "pecho", "pedal", "pedir", "pegar", "peine", "pelar", "peldaño", "pelea",
38896"peligro", "pellejo", "pelo", "peluca", "pena", "pensar", "peñón", "peón", "peor", "pepino",
38897"pequeño", "pera", "percha", "perder", "pereza", "perfil", "perico", "perla", "permiso", "perro",
38898"persona", "pesa", "pesca", "pésimo", "pestaña", "pétalo", "petróleo", "pez", "pezuña", "picar",
38899"pichón", "pie", "piedra", "pierna", "pieza", "pijama", "pilar", "piloto", "pimienta", "pino",
38900"pintor", "pinza", "piña", "piojo", "pipa", "pirata", "pisar", "piscina", "piso", "pista",
38901"pitón", "pizca", "placa", "plan", "plata", "playa", "plaza", "pleito", "pleno", "plomo",
38902"pluma", "plural", "pobre", "poco", "poder", "podio", "poema", "poesía", "poeta", "polen",
38903"policía", "pollo", "polvo", "pomada", "pomelo", "pomo", "pompa", "poner", "porción", "portal",
38904"posada", "poseer", "posible", "poste", "potencia", "potro", "pozo", "prado", "precoz", "pregunta",
38905"premio", "prensa", "preso", "previo", "primo", "príncipe", "prisión", "privar", "proa", "probar",
38906"proceso", "producto", "proeza", "profesor", "programa", "prole", "promesa", "pronto", "propio", "próximo",
38907"prueba", "público", "puchero", "pudor", "pueblo", "puerta", "puesto", "pulga", "pulir", "pulmón",
38908"pulpo", "pulso", "puma", "punto", "puñal", "puño", "pupa", "pupila", "puré", "quedar",
38909"queja", "quemar", "querer", "queso", "quieto", "química", "quince", "quitar", "rábano", "rabia",
38910"rabo", "ración", "radical", "raíz", "rama", "rampa", "rancho", "rango", "rapaz", "rápido",
38911"rapto", "rasgo", "raspa", "rato", "rayo", "raza", "razón", "reacción", "realidad", "rebaño",
38912"rebote", "recaer", "receta", "rechazo", "recoger", "recreo", "recto", "recurso", "red", "redondo",
38913"reducir", "reflejo", "reforma", "refrán", "refugio", "regalo", "regir", "regla", "regreso", "rehén",
38914"reino", "reír", "reja", "relato", "relevo", "relieve", "relleno", "reloj", "remar", "remedio",
38915"remo", "rencor", "rendir", "renta", "reparto", "repetir", "reposo", "reptil", "res", "rescate",
38916"resina", "respeto", "resto", "resumen", "retiro", "retorno", "retrato", "reunir", "revés", "revista",
38917"rey", "rezar", "rico", "riego", "rienda", "riesgo", "rifa", "rígido", "rigor", "rincón",
38918"riñón", "río", "riqueza", "risa", "ritmo", "rito", "rizo", "roble", "roce", "rociar",
38919"rodar", "rodeo", "rodilla", "roer", "rojizo", "rojo", "romero", "romper", "ron", "ronco",
38920"ronda", "ropa", "ropero", "rosa", "rosca", "rostro", "rotar", "rubí", "rubor", "rudo",
38921"rueda", "rugir", "ruido", "ruina", "ruleta", "rulo", "rumbo", "rumor", "ruptura", "ruta",
38922"rutina", "sábado", "saber", "sabio", "sable", "sacar", "sagaz", "sagrado", "sala", "saldo",
38923"salero", "salir", "salmón", "salón", "salsa", "salto", "salud", "salvar", "samba", "sanción",
38924"sandía", "sanear", "sangre", "sanidad", "sano", "santo", "sapo", "saque", "sardina", "sartén",
38925"sastre", "satán", "sauna", "saxofón", "sección", "seco", "secreto", "secta", "sed", "seguir",
38926"seis", "sello", "selva", "semana", "semilla", "senda", "sensor", "señal", "señor", "separar",
38927"sepia", "sequía", "ser", "serie", "sermón", "servir", "sesenta", "sesión", "seta", "setenta",
38928"severo", "sexo", "sexto", "sidra", "siesta", "siete", "siglo", "signo", "sílaba", "silbar",
38929"silencio", "silla", "símbolo", "simio", "sirena", "sistema", "sitio", "situar", "sobre", "socio",
38930"sodio", "sol", "solapa", "soldado", "soledad", "sólido", "soltar", "solución", "sombra", "sondeo",
38931"sonido", "sonoro", "sonrisa", "sopa", "soplar", "soporte", "sordo", "sorpresa", "sorteo", "sostén",
38932"sótano", "suave", "subir", "suceso", "sudor", "suegra", "suelo", "sueño", "suerte", "sufrir",
38933"sujeto", "sultán", "sumar", "superar", "suplir", "suponer", "supremo", "sur", "surco", "sureño",
38934"surgir", "susto", "sutil", "tabaco", "tabique", "tabla", "tabú", "taco", "tacto", "tajo",
38935"talar", "talco", "talento", "talla", "talón", "tamaño", "tambor", "tango", "tanque", "tapa",
38936"tapete", "tapia", "tapón", "taquilla", "tarde", "tarea", "tarifa", "tarjeta", "tarot", "tarro",
38937"tarta", "tatuaje", "tauro", "taza", "tazón", "teatro", "techo", "tecla", "técnica", "tejado",
38938"tejer", "tejido", "tela", "teléfono", "tema", "temor", "templo", "tenaz", "tender", "tener",
38939"tenis", "tenso", "teoría", "terapia", "terco", "término", "ternura", "terror", "tesis", "tesoro",
38940"testigo", "tetera", "texto", "tez", "tibio", "tiburón", "tiempo", "tienda", "tierra", "tieso",
38941"tigre", "tijera", "tilde", "timbre", "tímido", "timo", "tinta", "tío", "típico", "tipo",
38942"tira", "tirón", "titán", "títere", "título", "tiza", "toalla", "tobillo", "tocar", "tocino",
38943"todo", "toga", "toldo", "tomar", "tono", "tonto", "topar", "tope", "toque", "tórax",
38944"torero", "tormenta", "torneo", "toro", "torpedo", "torre", "torso", "tortuga", "tos", "tosco",
38945"toser", "tóxico", "trabajo", "tractor", "traer", "tráfico", "trago", "traje", "tramo", "trance",
38946"trato", "trauma", "trazar", "trébol", "tregua", "treinta", "tren", "trepar", "tres", "tribu",
38947"trigo", "tripa", "triste", "triunfo", "trofeo", "trompa", "tronco", "tropa", "trote", "trozo",
38948"truco", "trueno", "trufa", "tubería", "tubo", "tuerto", "tumba", "tumor", "túnel", "túnica",
38949"turbina", "turismo", "turno", "tutor", "ubicar", "úlcera", "umbral", "unidad", "unir", "universo",
38950"uno", "untar", "uña", "urbano", "urbe", "urgente", "urna", "usar", "usuario", "útil",
38951"utopía", "uva", "vaca", "vacío", "vacuna", "vagar", "vago", "vaina", "vajilla", "vale",
38952"válido", "valle", "valor", "válvula", "vampiro", "vara", "variar", "varón", "vaso", "vecino",
38953"vector", "vehículo", "veinte", "vejez", "vela", "velero", "veloz", "vena", "vencer", "venda",
38954"veneno", "vengar", "venir", "venta", "venus", "ver", "verano", "verbo", "verde", "vereda",
38955"verja", "verso", "verter", "vía", "viaje", "vibrar", "vicio", "víctima", "vida", "vídeo",
38956"vidrio", "viejo", "viernes", "vigor", "vil", "villa", "vinagre", "vino", "viñedo", "violín",
38957"viral", "virgo", "virtud", "visor", "víspera", "vista", "vitamina", "viudo", "vivaz", "vivero",
38958"vivir", "vivo", "volcán", "volumen", "volver", "voraz", "votar", "voto", "voz", "vuelo",
38959"vulgar", "yacer", "yate", "yegua", "yema", "yerno", "yeso", "yodo", "yoga", "yogur",
38960"zafiro", "zanja", "zapato", "zarza", "zona", "zorro", "zumo", "zurdo"]
38961</script>
38962 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
38963WORDLISTS["chinese_simplified"] = [
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"胡", "额", "款", "绍", "卷", "齐", "伟", "蒸", "殖", "永",
39061"宗", "苗", "川", "炉", "岩", "弱", "零", "杨", "奏", "沿",
39062"露", "杆", "探", "滑", "镇", "饭", "浓", "航", "怀", "赶",
39063"库", "夺", "伊", "灵", "税", "途", "灭", "赛", "归", "召",
39064"鼓", "播", "盘", "裁", "险", "康", "唯", "录", "菌", "纯",
39065"借", "糖", "盖", "横", "符", "私", "努", "堂", "域", "枪",
39066"润", "幅", "哈", "竟", "熟", "虫", "泽", "脑", "壤", "碳",
39067"欧", "遍", "侧", "寨", "敢", "彻", "虑", "斜", "薄", "庭",
39068"纳", "弹", "饲", "伸", "折", "麦", "湿", "暗", "荷", "瓦",
39069"塞", "床", "筑", "恶", "户", "访", "塔", "奇", "透", "梁",
39070"刀", "旋", "迹", "卡", "氯", "遇", "份", "毒", "泥", "退",
39071"洗", "摆", "灰", "彩", "卖", "耗", "夏", "择", "忙", "铜",
39072"献", "硬", "予", "繁", "圈", "雪", "函", "亦", "抽", "篇",
39073"阵", "阴", "丁", "尺", "追", "堆", "雄", "迎", "泛", "爸",
39074"楼", "避", "谋", "吨", "野", "猪", "旗", "累", "偏", "典",
39075"馆", "索", "秦", "脂", "潮", "爷", "豆", "忽", "托", "惊",
39076"塑", "遗", "愈", "朱", "替", "纤", "粗", "倾", "尚", "痛",
39077"楚", "谢", "奋", "购", "磨", "君", "池", "旁", "碎", "骨",
39078"监", "捕", "弟", "暴", "割", "贯", "殊", "释", "词", "亡",
39079"壁", "顿", "宝", "午", "尘", "闻", "揭", "炮", "残", "冬",
39080"桥", "妇", "警", "综", "招", "吴", "付", "浮", "遭", "徐",
39081"您", "摇", "谷", "赞", "箱", "隔", "订", "男", "吹", "园",
39082"纷", "唐", "败", "宋", "玻", "巨", "耕", "坦", "荣", "闭",
39083"湾", "键", "凡", "驻", "锅", "救", "恩", "剥", "凝", "碱",
39084"齿", "截", "炼", "麻", "纺", "禁", "废", "盛", "版", "缓",
39085"净", "睛", "昌", "婚", "涉", "筒", "嘴", "插", "岸", "朗",
39086"庄", "街", "藏", "姑", "贸", "腐", "奴", "啦", "惯", "乘",
39087"伙", "恢", "匀", "纱", "扎", "辩", "耳", "彪", "臣", "亿",
39088"璃", "抵", "脉", "秀", "萨", "俄", "网", "舞", "店", "喷",
39089"纵", "寸", "汗", "挂", "洪", "贺", "闪", "柬", "爆", "烯",
39090"津", "稻", "墙", "软", "勇", "像", "滚", "厘", "蒙", "芳",
39091"肯", "坡", "柱", "荡", "腿", "仪", "旅", "尾", "轧", "冰",
39092"贡", "登", "黎", "削", "钻", "勒", "逃", "障", "氨", "郭",
39093"峰", "币", "港", "伏", "轨", "亩", "毕", "擦", "莫", "刺",
39094"浪", "秘", "援", "株", "健", "售", "股", "岛", "甘", "泡",
39095"睡", "童", "铸", "汤", "阀", "休", "汇", "舍", "牧", "绕",
39096"炸", "哲", "磷", "绩", "朋", "淡", "尖", "启", "陷", "柴",
39097"呈", "徒", "颜", "泪", "稍", "忘", "泵", "蓝", "拖", "洞",
39098"授", "镜", "辛", "壮", "锋", "贫", "虚", "弯", "摩", "泰",
39099"幼", "廷", "尊", "窗", "纲", "弄", "隶", "疑", "氏", "宫",
39100"姐", "震", "瑞", "怪", "尤", "琴", "循", "描", "膜", "违",
39101"夹", "腰", "缘", "珠", "穷", "森", "枝", "竹", "沟", "催",
39102"绳", "忆", "邦", "剩", "幸", "浆", "栏", "拥", "牙", "贮",
39103"礼", "滤", "钠", "纹", "罢", "拍", "咱", "喊", "袖", "埃",
39104"勤", "罚", "焦", "潜", "伍", "墨", "欲", "缝", "姓", "刊",
39105"饱", "仿", "奖", "铝", "鬼", "丽", "跨", "默", "挖", "链",
39106"扫", "喝", "袋", "炭", "污", "幕", "诸", "弧", "励", "梅",
39107"奶", "洁", "灾", "舟", "鉴", "苯", "讼", "抱", "毁", "懂",
39108"寒", "智", "埔", "寄", "届", "跃", "渡", "挑", "丹", "艰",
39109"贝", "碰", "拔", "爹", "戴", "码", "梦", "芽", "熔", "赤",
39110"渔", "哭", "敬", "颗", "奔", "铅", "仲", "虎", "稀", "妹",
39111"乏", "珍", "申", "桌", "遵", "允", "隆", "螺", "仓", "魏",
39112"锐", "晓", "氮", "兼", "隐", "碍", "赫", "拨", "忠", "肃",
39113"缸", "牵", "抢", "博", "巧", "壳", "兄", "杜", "讯", "诚",
39114"碧", "祥", "柯", "页", "巡", "矩", "悲", "灌", "龄", "伦",
39115"票", "寻", "桂", "铺", "圣", "恐", "恰", "郑", "趣", "抬",
39116"荒", "腾", "贴", "柔", "滴", "猛", "阔", "辆", "妻", "填",
39117"撤", "储", "签", "闹", "扰", "紫", "砂", "递", "戏", "吊",
39118"陶", "伐", "喂", "疗", "瓶", "婆", "抚", "臂", "摸", "忍",
39119"虾", "蜡", "邻", "胸", "巩", "挤", "偶", "弃", "槽", "劲",
39120"乳", "邓", "吉", "仁", "烂", "砖", "租", "乌", "舰", "伴",
39121"瓜", "浅", "丙", "暂", "燥", "橡", "柳", "迷", "暖", "牌",
39122"秧", "胆", "详", "簧", "踏", "瓷", "谱", "呆", "宾", "糊",
39123"洛", "辉", "愤", "竞", "隙", "怒", "粘", "乃", "绪", "肩",
39124"籍", "敏", "涂", "熙", "皆", "侦", "悬", "掘", "享", "纠",
39125"醒", "狂", "锁", "淀", "恨", "牲", "霸", "爬", "赏", "逆",
39126"玩", "陵", "祝", "秒", "浙", "貌", "役", "彼", "悉", "鸭",
39127"趋", "凤", "晨", "畜", "辈", "秩", "卵", "署", "梯", "炎",
39128"滩", "棋", "驱", "筛", "峡", "冒", "啥", "寿", "译", "浸",
39129"泉", "帽", "迟", "硅", "疆", "贷", "漏", "稿", "冠", "嫩",
39130"胁", "芯", "牢", "叛", "蚀", "奥", "鸣", "岭", "羊", "凭",
39131"串", "塘", "绘", "酵", "融", "盆", "锡", "庙", "筹", "冻",
39132"辅", "摄", "袭", "筋", "拒", "僚", "旱", "钾", "鸟", "漆",
39133"沈", "眉", "疏", "添", "棒", "穗", "硝", "韩", "逼", "扭",
39134"侨", "凉", "挺", "碗", "栽", "炒", "杯", "患", "馏", "劝",
39135"豪", "辽", "勃", "鸿", "旦", "吏", "拜", "狗", "埋", "辊",
39136"掩", "饮", "搬", "骂", "辞", "勾", "扣", "估", "蒋", "绒",
39137"雾", "丈", "朵", "姆", "拟", "宇", "辑", "陕", "雕", "偿",
39138"蓄", "崇", "剪", "倡", "厅", "咬", "驶", "薯", "刷", "斥",
39139"番", "赋", "奉", "佛", "浇", "漫", "曼", "扇", "钙", "桃",
39140"扶", "仔", "返", "俗", "亏", "腔", "鞋", "棱", "覆", "框",
39141"悄", "叔", "撞", "骗", "勘", "旺", "沸", "孤", "吐", "孟",
39142"渠", "屈", "疾", "妙", "惜", "仰", "狠", "胀", "谐", "抛",
39143"霉", "桑", "岗", "嘛", "衰", "盗", "渗", "脏", "赖", "涌",
39144"甜", "曹", "阅", "肌", "哩", "厉", "烃", "纬", "毅", "昨",
39145"伪", "症", "煮", "叹", "钉", "搭", "茎", "笼", "酷", "偷",
39146"弓", "锥", "恒", "杰", "坑", "鼻", "翼", "纶", "叙", "狱",
39147"逮", "罐", "络", "棚", "抑", "膨", "蔬", "寺", "骤", "穆",
39148"冶", "枯", "册", "尸", "凸", "绅", "坯", "牺", "焰", "轰",
39149"欣", "晋", "瘦", "御", "锭", "锦", "丧", "旬", "锻", "垄",
39150"搜", "扑", "邀", "亭", "酯", "迈", "舒", "脆", "酶", "闲",
39151"忧", "酚", "顽", "羽", "涨", "卸", "仗", "陪", "辟", "惩",
39152"杭", "姚", "肚", "捉", "飘", "漂", "昆", "欺", "吾", "郎",
39153"烷", "汁", "呵", "饰", "萧", "雅", "邮", "迁", "燕", "撒",
39154"姻", "赴", "宴", "烦", "债", "帐", "斑", "铃", "旨", "醇",
39155"董", "饼", "雏", "姿", "拌", "傅", "腹", "妥", "揉", "贤",
39156"拆", "歪", "葡", "胺", "丢", "浩", "徽", "昂", "垫", "挡",
39157"览", "贪", "慰", "缴", "汪", "慌", "冯", "诺", "姜", "谊",
39158"凶", "劣", "诬", "耀", "昏", "躺", "盈", "骑", "乔", "溪",
39159"丛", "卢", "抹", "闷", "咨", "刮", "驾", "缆", "悟", "摘",
39160"铒", "掷", "颇", "幻", "柄", "惠", "惨", "佳", "仇", "腊",
39161"窝", "涤", "剑", "瞧", "堡", "泼", "葱", "罩", "霍", "捞",
39162"胎", "苍", "滨", "俩", "捅", "湘", "砍", "霞", "邵", "萄",
39163"疯", "淮", "遂", "熊", "粪", "烘", "宿", "档", "戈", "驳",
39164"嫂", "裕", "徙", "箭", "捐", "肠", "撑", "晒", "辨", "殿",
39165"莲", "摊", "搅", "酱", "屏", "疫", "哀", "蔡", "堵", "沫",
39166"皱", "畅", "叠", "阁", "莱", "敲", "辖", "钩", "痕", "坝",
39167"巷", "饿", "祸", "丘", "玄", "溜", "曰", "逻", "彭", "尝",
39168"卿", "妨", "艇", "吞", "韦", "怨", "矮", "歇" ]
39169</script>
39170 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
39171WORDLISTS["chinese_traditional"] = [
39172"的", "一", "是", "在", "不", "了", "有", "和", "人", "這",
39173"中", "大", "為", "上", "個", "國", "我", "以", "要", "他",
39174"時", "來", "用", "們", "生", "到", "作", "地", "於", "出",
39175"就", "分", "對", "成", "會", "可", "主", "發", "年", "動",
39176"同", "工", "也", "能", "下", "過", "子", "說", "產", "種",
39177"面", "而", "方", "後", "多", "定", "行", "學", "法", "所",
39178"民", "得", "經", "十", "三", "之", "進", "著", "等", "部",
39179"度", "家", "電", "力", "裡", "如", "水", "化", "高", "自",
39180"二", "理", "起", "小", "物", "現", "實", "加", "量", "都",
39181"兩", "體", "制", "機", "當", "使", "點", "從", "業", "本",
39182"去", "把", "性", "好", "應", "開", "它", "合", "還", "因",
39183"由", "其", "些", "然", "前", "外", "天", "政", "四", "日",
39184"那", "社", "義", "事", "平", "形", "相", "全", "表", "間",
39185"樣", "與", "關", "各", "重", "新", "線", "內", "數", "正",
39186"心", "反", "你", "明", "看", "原", "又", "麼", "利", "比",
39187"或", "但", "質", "氣", "第", "向", "道", "命", "此", "變",
39188"條", "只", "沒", "結", "解", "問", "意", "建", "月", "公",
39189"無", "系", "軍", "很", "情", "者", "最", "立", "代", "想",
39190"已", "通", "並", "提", "直", "題", "黨", "程", "展", "五",
39191"果", "料", "象", "員", "革", "位", "入", "常", "文", "總",
39192"次", "品", "式", "活", "設", "及", "管", "特", "件", "長",
39193"求", "老", "頭", "基", "資", "邊", "流", "路", "級", "少",
39194"圖", "山", "統", "接", "知", "較", "將", "組", "見", "計",
39195"別", "她", "手", "角", "期", "根", "論", "運", "農", "指",
39196"幾", "九", "區", "強", "放", "決", "西", "被", "幹", "做",
39197"必", "戰", "先", "回", "則", "任", "取", "據", "處", "隊",
39198"南", "給", "色", "光", "門", "即", "保", "治", "北", "造",
39199"百", "規", "熱", "領", "七", "海", "口", "東", "導", "器",
39200"壓", "志", "世", "金", "增", "爭", "濟", "階", "油", "思",
39201"術", "極", "交", "受", "聯", "什", "認", "六", "共", "權",
39202"收", "證", "改", "清", "美", "再", "採", "轉", "更", "單",
39203"風", "切", "打", "白", "教", "速", "花", "帶", "安", "場",
39204"身", "車", "例", "真", "務", "具", "萬", "每", "目", "至",
39205"達", "走", "積", "示", "議", "聲", "報", "鬥", "完", "類",
39206"八", "離", "華", "名", "確", "才", "科", "張", "信", "馬",
39207"節", "話", "米", "整", "空", "元", "況", "今", "集", "溫",
39208"傳", "土", "許", "步", "群", "廣", "石", "記", "需", "段",
39209"研", "界", "拉", "林", "律", "叫", "且", "究", "觀", "越",
39210"織", "裝", "影", "算", "低", "持", "音", "眾", "書", "布",
39211"复", "容", "兒", "須", "際", "商", "非", "驗", "連", "斷",
39212"深", "難", "近", "礦", "千", "週", "委", "素", "技", "備",
39213"半", "辦", "青", "省", "列", "習", "響", "約", "支", "般",
39214"史", "感", "勞", "便", "團", "往", "酸", "歷", "市", "克",
39215"何", "除", "消", "構", "府", "稱", "太", "準", "精", "值",
39216"號", "率", "族", "維", "劃", "選", "標", "寫", "存", "候",
39217"毛", "親", "快", "效", "斯", "院", "查", "江", "型", "眼",
39218"王", "按", "格", "養", "易", "置", "派", "層", "片", "始",
39219"卻", "專", "狀", "育", "廠", "京", "識", "適", "屬", "圓",
39220"包", "火", "住", "調", "滿", "縣", "局", "照", "參", "紅",
39221"細", "引", "聽", "該", "鐵", "價", "嚴", "首", "底", "液",
39222"官", "德", "隨", "病", "蘇", "失", "爾", "死", "講", "配",
39223"女", "黃", "推", "顯", "談", "罪", "神", "藝", "呢", "席",
39224"含", "企", "望", "密", "批", "營", "項", "防", "舉", "球",
39225"英", "氧", "勢", "告", "李", "台", "落", "木", "幫", "輪",
39226"破", "亞", "師", "圍", "注", "遠", "字", "材", "排", "供",
39227"河", "態", "封", "另", "施", "減", "樹", "溶", "怎", "止",
39228"案", "言", "士", "均", "武", "固", "葉", "魚", "波", "視",
39229"僅", "費", "緊", "愛", "左", "章", "早", "朝", "害", "續",
39230"輕", "服", "試", "食", "充", "兵", "源", "判", "護", "司",
39231"足", "某", "練", "差", "致", "板", "田", "降", "黑", "犯",
39232"負", "擊", "范", "繼", "興", "似", "餘", "堅", "曲", "輸",
39233"修", "故", "城", "夫", "夠", "送", "筆", "船", "佔", "右",
39234"財", "吃", "富", "春", "職", "覺", "漢", "畫", "功", "巴",
39235"跟", "雖", "雜", "飛", "檢", "吸", "助", "昇", "陽", "互",
39236"初", "創", "抗", "考", "投", "壞", "策", "古", "徑", "換",
39237"未", "跑", "留", "鋼", "曾", "端", "責", "站", "簡", "述",
39238"錢", "副", "盡", "帝", "射", "草", "衝", "承", "獨", "令",
39239"限", "阿", "宣", "環", "雙", "請", "超", "微", "讓", "控",
39240"州", "良", "軸", "找", "否", "紀", "益", "依", "優", "頂",
39241"礎", "載", "倒", "房", "突", "坐", "粉", "敵", "略", "客",
39242"袁", "冷", "勝", "絕", "析", "塊", "劑", "測", "絲", "協",
39243"訴", "念", "陳", "仍", "羅", "鹽", "友", "洋", "錯", "苦",
39244"夜", "刑", "移", "頻", "逐", "靠", "混", "母", "短", "皮",
39245"終", "聚", "汽", "村", "雲", "哪", "既", "距", "衛", "停",
39246"烈", "央", "察", "燒", "迅", "境", "若", "印", "洲", "刻",
39247"括", "激", "孔", "搞", "甚", "室", "待", "核", "校", "散",
39248"侵", "吧", "甲", "遊", "久", "菜", "味", "舊", "模", "湖",
39249"貨", "損", "預", "阻", "毫", "普", "穩", "乙", "媽", "植",
39250"息", "擴", "銀", "語", "揮", "酒", "守", "拿", "序", "紙",
39251"醫", "缺", "雨", "嗎", "針", "劉", "啊", "急", "唱", "誤",
39252"訓", "願", "審", "附", "獲", "茶", "鮮", "糧", "斤", "孩",
39253"脫", "硫", "肥", "善", "龍", "演", "父", "漸", "血", "歡",
39254"械", "掌", "歌", "沙", "剛", "攻", "謂", "盾", "討", "晚",
39255"粒", "亂", "燃", "矛", "乎", "殺", "藥", "寧", "魯", "貴",
39256"鐘", "煤", "讀", "班", "伯", "香", "介", "迫", "句", "豐",
39257"培", "握", "蘭", "擔", "弦", "蛋", "沉", "假", "穿", "執",
39258"答", "樂", "誰", "順", "煙", "縮", "徵", "臉", "喜", "松",
39259"腳", "困", "異", "免", "背", "星", "福", "買", "染", "井",
39260"概", "慢", "怕", "磁", "倍", "祖", "皇", "促", "靜", "補",
39261"評", "翻", "肉", "踐", "尼", "衣", "寬", "揚", "棉", "希",
39262"傷", "操", "垂", "秋", "宜", "氫", "套", "督", "振", "架",
39263"亮", "末", "憲", "慶", "編", "牛", "觸", "映", "雷", "銷",
39264"詩", "座", "居", "抓", "裂", "胞", "呼", "娘", "景", "威",
39265"綠", "晶", "厚", "盟", "衡", "雞", "孫", "延", "危", "膠",
39266"屋", "鄉", "臨", "陸", "顧", "掉", "呀", "燈", "歲", "措",
39267"束", "耐", "劇", "玉", "趙", "跳", "哥", "季", "課", "凱",
39268"胡", "額", "款", "紹", "卷", "齊", "偉", "蒸", "殖", "永",
39269"宗", "苗", "川", "爐", "岩", "弱", "零", "楊", "奏", "沿",
39270"露", "桿", "探", "滑", "鎮", "飯", "濃", "航", "懷", "趕",
39271"庫", "奪", "伊", "靈", "稅", "途", "滅", "賽", "歸", "召",
39272"鼓", "播", "盤", "裁", "險", "康", "唯", "錄", "菌", "純",
39273"借", "糖", "蓋", "橫", "符", "私", "努", "堂", "域", "槍",
39274"潤", "幅", "哈", "竟", "熟", "蟲", "澤", "腦", "壤", "碳",
39275"歐", "遍", "側", "寨", "敢", "徹", "慮", "斜", "薄", "庭",
39276"納", "彈", "飼", "伸", "折", "麥", "濕", "暗", "荷", "瓦",
39277"塞", "床", "築", "惡", "戶", "訪", "塔", "奇", "透", "梁",
39278"刀", "旋", "跡", "卡", "氯", "遇", "份", "毒", "泥", "退",
39279"洗", "擺", "灰", "彩", "賣", "耗", "夏", "擇", "忙", "銅",
39280"獻", "硬", "予", "繁", "圈", "雪", "函", "亦", "抽", "篇",
39281"陣", "陰", "丁", "尺", "追", "堆", "雄", "迎", "泛", "爸",
39282"樓", "避", "謀", "噸", "野", "豬", "旗", "累", "偏", "典",
39283"館", "索", "秦", "脂", "潮", "爺", "豆", "忽", "托", "驚",
39284"塑", "遺", "愈", "朱", "替", "纖", "粗", "傾", "尚", "痛",
39285"楚", "謝", "奮", "購", "磨", "君", "池", "旁", "碎", "骨",
39286"監", "捕", "弟", "暴", "割", "貫", "殊", "釋", "詞", "亡",
39287"壁", "頓", "寶", "午", "塵", "聞", "揭", "炮", "殘", "冬",
39288"橋", "婦", "警", "綜", "招", "吳", "付", "浮", "遭", "徐",
39289"您", "搖", "谷", "贊", "箱", "隔", "訂", "男", "吹", "園",
39290"紛", "唐", "敗", "宋", "玻", "巨", "耕", "坦", "榮", "閉",
39291"灣", "鍵", "凡", "駐", "鍋", "救", "恩", "剝", "凝", "鹼",
39292"齒", "截", "煉", "麻", "紡", "禁", "廢", "盛", "版", "緩",
39293"淨", "睛", "昌", "婚", "涉", "筒", "嘴", "插", "岸", "朗",
39294"莊", "街", "藏", "姑", "貿", "腐", "奴", "啦", "慣", "乘",
39295"夥", "恢", "勻", "紗", "扎", "辯", "耳", "彪", "臣", "億",
39296"璃", "抵", "脈", "秀", "薩", "俄", "網", "舞", "店", "噴",
39297"縱", "寸", "汗", "掛", "洪", "賀", "閃", "柬", "爆", "烯",
39298"津", "稻", "牆", "軟", "勇", "像", "滾", "厘", "蒙", "芳",
39299"肯", "坡", "柱", "盪", "腿", "儀", "旅", "尾", "軋", "冰",
39300"貢", "登", "黎", "削", "鑽", "勒", "逃", "障", "氨", "郭",
39301"峰", "幣", "港", "伏", "軌", "畝", "畢", "擦", "莫", "刺",
39302"浪", "秘", "援", "株", "健", "售", "股", "島", "甘", "泡",
39303"睡", "童", "鑄", "湯", "閥", "休", "匯", "舍", "牧", "繞",
39304"炸", "哲", "磷", "績", "朋", "淡", "尖", "啟", "陷", "柴",
39305"呈", "徒", "顏", "淚", "稍", "忘", "泵", "藍", "拖", "洞",
39306"授", "鏡", "辛", "壯", "鋒", "貧", "虛", "彎", "摩", "泰",
39307"幼", "廷", "尊", "窗", "綱", "弄", "隸", "疑", "氏", "宮",
39308"姐", "震", "瑞", "怪", "尤", "琴", "循", "描", "膜", "違",
39309"夾", "腰", "緣", "珠", "窮", "森", "枝", "竹", "溝", "催",
39310"繩", "憶", "邦", "剩", "幸", "漿", "欄", "擁", "牙", "貯",
39311"禮", "濾", "鈉", "紋", "罷", "拍", "咱", "喊", "袖", "埃",
39312"勤", "罰", "焦", "潛", "伍", "墨", "欲", "縫", "姓", "刊",
39313"飽", "仿", "獎", "鋁", "鬼", "麗", "跨", "默", "挖", "鏈",
39314"掃", "喝", "袋", "炭", "污", "幕", "諸", "弧", "勵", "梅",
39315"奶", "潔", "災", "舟", "鑑", "苯", "訟", "抱", "毀", "懂",
39316"寒", "智", "埔", "寄", "屆", "躍", "渡", "挑", "丹", "艱",
39317"貝", "碰", "拔", "爹", "戴", "碼", "夢", "芽", "熔", "赤",
39318"漁", "哭", "敬", "顆", "奔", "鉛", "仲", "虎", "稀", "妹",
39319"乏", "珍", "申", "桌", "遵", "允", "隆", "螺", "倉", "魏",
39320"銳", "曉", "氮", "兼", "隱", "礙", "赫", "撥", "忠", "肅",
39321"缸", "牽", "搶", "博", "巧", "殼", "兄", "杜", "訊", "誠",
39322"碧", "祥", "柯", "頁", "巡", "矩", "悲", "灌", "齡", "倫",
39323"票", "尋", "桂", "鋪", "聖", "恐", "恰", "鄭", "趣", "抬",
39324"荒", "騰", "貼", "柔", "滴", "猛", "闊", "輛", "妻", "填",
39325"撤", "儲", "簽", "鬧", "擾", "紫", "砂", "遞", "戲", "吊",
39326"陶", "伐", "餵", "療", "瓶", "婆", "撫", "臂", "摸", "忍",
39327"蝦", "蠟", "鄰", "胸", "鞏", "擠", "偶", "棄", "槽", "勁",
39328"乳", "鄧", "吉", "仁", "爛", "磚", "租", "烏", "艦", "伴",
39329"瓜", "淺", "丙", "暫", "燥", "橡", "柳", "迷", "暖", "牌",
39330"秧", "膽", "詳", "簧", "踏", "瓷", "譜", "呆", "賓", "糊",
39331"洛", "輝", "憤", "競", "隙", "怒", "粘", "乃", "緒", "肩",
39332"籍", "敏", "塗", "熙", "皆", "偵", "懸", "掘", "享", "糾",
39333"醒", "狂", "鎖", "淀", "恨", "牲", "霸", "爬", "賞", "逆",
39334"玩", "陵", "祝", "秒", "浙", "貌", "役", "彼", "悉", "鴨",
39335"趨", "鳳", "晨", "畜", "輩", "秩", "卵", "署", "梯", "炎",
39336"灘", "棋", "驅", "篩", "峽", "冒", "啥", "壽", "譯", "浸",
39337"泉", "帽", "遲", "矽", "疆", "貸", "漏", "稿", "冠", "嫩",
39338"脅", "芯", "牢", "叛", "蝕", "奧", "鳴", "嶺", "羊", "憑",
39339"串", "塘", "繪", "酵", "融", "盆", "錫", "廟", "籌", "凍",
39340"輔", "攝", "襲", "筋", "拒", "僚", "旱", "鉀", "鳥", "漆",
39341"沈", "眉", "疏", "添", "棒", "穗", "硝", "韓", "逼", "扭",
39342"僑", "涼", "挺", "碗", "栽", "炒", "杯", "患", "餾", "勸",
39343"豪", "遼", "勃", "鴻", "旦", "吏", "拜", "狗", "埋", "輥",
39344"掩", "飲", "搬", "罵", "辭", "勾", "扣", "估", "蔣", "絨",
39345"霧", "丈", "朵", "姆", "擬", "宇", "輯", "陝", "雕", "償",
39346"蓄", "崇", "剪", "倡", "廳", "咬", "駛", "薯", "刷", "斥",
39347"番", "賦", "奉", "佛", "澆", "漫", "曼", "扇", "鈣", "桃",
39348"扶", "仔", "返", "俗", "虧", "腔", "鞋", "棱", "覆", "框",
39349"悄", "叔", "撞", "騙", "勘", "旺", "沸", "孤", "吐", "孟",
39350"渠", "屈", "疾", "妙", "惜", "仰", "狠", "脹", "諧", "拋",
39351"黴", "桑", "崗", "嘛", "衰", "盜", "滲", "臟", "賴", "湧",
39352"甜", "曹", "閱", "肌", "哩", "厲", "烴", "緯", "毅", "昨",
39353"偽", "症", "煮", "嘆", "釘", "搭", "莖", "籠", "酷", "偷",
39354"弓", "錐", "恆", "傑", "坑", "鼻", "翼", "綸", "敘", "獄",
39355"逮", "罐", "絡", "棚", "抑", "膨", "蔬", "寺", "驟", "穆",
39356"冶", "枯", "冊", "屍", "凸", "紳", "坯", "犧", "焰", "轟",
39357"欣", "晉", "瘦", "禦", "錠", "錦", "喪", "旬", "鍛", "壟",
39358"搜", "撲", "邀", "亭", "酯", "邁", "舒", "脆", "酶", "閒",
39359"憂", "酚", "頑", "羽", "漲", "卸", "仗", "陪", "闢", "懲",
39360"杭", "姚", "肚", "捉", "飄", "漂", "昆", "欺", "吾", "郎",
39361"烷", "汁", "呵", "飾", "蕭", "雅", "郵", "遷", "燕", "撒",
39362"姻", "赴", "宴", "煩", "債", "帳", "斑", "鈴", "旨", "醇",
39363"董", "餅", "雛", "姿", "拌", "傅", "腹", "妥", "揉", "賢",
39364"拆", "歪", "葡", "胺", "丟", "浩", "徽", "昂", "墊", "擋",
39365"覽", "貪", "慰", "繳", "汪", "慌", "馮", "諾", "姜", "誼",
39366"兇", "劣", "誣", "耀", "昏", "躺", "盈", "騎", "喬", "溪",
39367"叢", "盧", "抹", "悶", "諮", "刮", "駕", "纜", "悟", "摘",
39368"鉺", "擲", "頗", "幻", "柄", "惠", "慘", "佳", "仇", "臘",
39369"窩", "滌", "劍", "瞧", "堡", "潑", "蔥", "罩", "霍", "撈",
39370"胎", "蒼", "濱", "倆", "捅", "湘", "砍", "霞", "邵", "萄",
39371"瘋", "淮", "遂", "熊", "糞", "烘", "宿", "檔", "戈", "駁",
39372"嫂", "裕", "徙", "箭", "捐", "腸", "撐", "曬", "辨", "殿",
39373"蓮", "攤", "攪", "醬", "屏", "疫", "哀", "蔡", "堵", "沫",
39374"皺", "暢", "疊", "閣", "萊", "敲", "轄", "鉤", "痕", "壩",
39375"巷", "餓", "禍", "丘", "玄", "溜", "曰", "邏", "彭", "嘗",
39376"卿", "妨", "艇", "吞", "韋", "怨", "矮", "歇" ]
39377</script>
39378 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
39379WORDLISTS["french"] = [
39380"abaisser", "abandon", "abdiquer", "abeille", "abolir", "aborder", "aboutir", "aboyer", "abrasif", "abreuver",
39381"abriter", "abroger", "abrupt", "absence", "absolu", "absurde", "abusif", "abyssal", "académie", "acajou",
39382"acarien", "accabler", "accepter", "acclamer", "accolade", "accroche", "accuser", "acerbe", "achat", "acheter",
39383"aciduler", "acier", "acompte", "acquérir", "acronyme", "acteur", "actif", "actuel", "adepte", "adéquat",
39384"adhésif", "adjectif", "adjuger", "admettre", "admirer", "adopter", "adorer", "adoucir", "adresse", "adroit",
39385"adulte", "adverbe", "aérer", "aéronef", "affaire", "affecter", "affiche", "affreux", "affubler", "agacer",
39386"agencer", "agile", "agiter", "agrafer", "agréable", "agrume", "aider", "aiguille", "ailier", "aimable",
39387"aisance", "ajouter", "ajuster", "alarmer", "alchimie", "alerte", "algèbre", "algue", "aliéner", "aliment",
39388"alléger", "alliage", "allouer", "allumer", "alourdir", "alpaga", "altesse", "alvéole", "amateur", "ambigu",
39389"ambre", "aménager", "amertume", "amidon", "amiral", "amorcer", "amour", "amovible", "amphibie", "ampleur",
39390"amusant", "analyse", "anaphore", "anarchie", "anatomie", "ancien", "anéantir", "angle", "angoisse", "anguleux",
39391"animal", "annexer", "annonce", "annuel", "anodin", "anomalie", "anonyme", "anormal", "antenne", "antidote",
39392"anxieux", "apaiser", "apéritif", "aplanir", "apologie", "appareil", "appeler", "apporter", "appuyer", "aquarium",
39393"aqueduc", "arbitre", "arbuste", "ardeur", "ardoise", "argent", "arlequin", "armature", "armement", "armoire",
39394"armure", "arpenter", "arracher", "arriver", "arroser", "arsenic", "artériel", "article", "aspect", "asphalte",
39395"aspirer", "assaut", "asservir", "assiette", "associer", "assurer", "asticot", "astre", "astuce", "atelier",
39396"atome", "atrium", "atroce", "attaque", "attentif", "attirer", "attraper", "aubaine", "auberge", "audace",
39397"audible", "augurer", "aurore", "automne", "autruche", "avaler", "avancer", "avarice", "avenir", "averse",
39398"aveugle", "aviateur", "avide", "avion", "aviser", "avoine", "avouer", "avril", "axial", "axiome",
39399"badge", "bafouer", "bagage", "baguette", "baignade", "balancer", "balcon", "baleine", "balisage", "bambin",
39400"bancaire", "bandage", "banlieue", "bannière", "banquier", "barbier", "baril", "baron", "barque", "barrage",
39401"bassin", "bastion", "bataille", "bateau", "batterie", "baudrier", "bavarder", "belette", "bélier", "belote",
39402"bénéfice", "berceau", "berger", "berline", "bermuda", "besace", "besogne", "bétail", "beurre", "biberon",
39403"bicycle", "bidule", "bijou", "bilan", "bilingue", "billard", "binaire", "biologie", "biopsie", "biotype",
39404"biscuit", "bison", "bistouri", "bitume", "bizarre", "blafard", "blague", "blanchir", "blessant", "blinder",
39405"blond", "bloquer", "blouson", "bobard", "bobine", "boire", "boiser", "bolide", "bonbon", "bondir",
39406"bonheur", "bonifier", "bonus", "bordure", "borne", "botte", "boucle", "boueux", "bougie", "boulon",
39407"bouquin", "bourse", "boussole", "boutique", "boxeur", "branche", "brasier", "brave", "brebis", "brèche",
39408"breuvage", "bricoler", "brigade", "brillant", "brioche", "brique", "brochure", "broder", "bronzer", "brousse",
39409"broyeur", "brume", "brusque", "brutal", "bruyant", "buffle", "buisson", "bulletin", "bureau", "burin",
39410"bustier", "butiner", "butoir", "buvable", "buvette", "cabanon", "cabine", "cachette", "cadeau", "cadre",
39411"caféine", "caillou", "caisson", "calculer", "calepin", "calibre", "calmer", "calomnie", "calvaire", "camarade",
39412"caméra", "camion", "campagne", "canal", "caneton", "canon", "cantine", "canular", "capable", "caporal",
39413"caprice", "capsule", "capter", "capuche", "carabine", "carbone", "caresser", "caribou", "carnage", "carotte",
39414"carreau", "carton", "cascade", "casier", "casque", "cassure", "causer", "caution", "cavalier", "caverne",
39415"caviar", "cédille", "ceinture", "céleste", "cellule", "cendrier", "censurer", "central", "cercle", "cérébral",
39416"cerise", "cerner", "cerveau", "cesser", "chagrin", "chaise", "chaleur", "chambre", "chance", "chapitre",
39417"charbon", "chasseur", "chaton", "chausson", "chavirer", "chemise", "chenille", "chéquier", "chercher", "cheval",
39418"chien", "chiffre", "chignon", "chimère", "chiot", "chlorure", "chocolat", "choisir", "chose", "chouette",
39419"chrome", "chute", "cigare", "cigogne", "cimenter", "cinéma", "cintrer", "circuler", "cirer", "cirque",
39420"citerne", "citoyen", "citron", "civil", "clairon", "clameur", "claquer", "classe", "clavier", "client",
39421"cligner", "climat", "clivage", "cloche", "clonage", "cloporte", "cobalt", "cobra", "cocasse", "cocotier",
39422"coder", "codifier", "coffre", "cogner", "cohésion", "coiffer", "coincer", "colère", "colibri", "colline",
39423"colmater", "colonel", "combat", "comédie", "commande", "compact", "concert", "conduire", "confier", "congeler",
39424"connoter", "consonne", "contact", "convexe", "copain", "copie", "corail", "corbeau", "cordage", "corniche",
39425"corpus", "correct", "cortège", "cosmique", "costume", "coton", "coude", "coupure", "courage", "couteau",
39426"couvrir", "coyote", "crabe", "crainte", "cravate", "crayon", "créature", "créditer", "crémeux", "creuser",
39427"crevette", "cribler", "crier", "cristal", "critère", "croire", "croquer", "crotale", "crucial", "cruel",
39428"crypter", "cubique", "cueillir", "cuillère", "cuisine", "cuivre", "culminer", "cultiver", "cumuler", "cupide",
39429"curatif", "curseur", "cyanure", "cycle", "cylindre", "cynique", "daigner", "damier", "danger", "danseur",
39430"dauphin", "débattre", "débiter", "déborder", "débrider", "débutant", "décaler", "décembre", "déchirer", "décider",
39431"déclarer", "décorer", "décrire", "décupler", "dédale", "déductif", "déesse", "défensif", "défiler", "défrayer",
39432"dégager", "dégivrer", "déglutir", "dégrafer", "déjeuner", "délice", "déloger", "demander", "demeurer", "démolir",
39433"dénicher", "dénouer", "dentelle", "dénuder", "départ", "dépenser", "déphaser", "déplacer", "déposer", "déranger",
39434"dérober", "désastre", "descente", "désert", "désigner", "désobéir", "dessiner", "destrier", "détacher", "détester",
39435"détourer", "détresse", "devancer", "devenir", "deviner", "devoir", "diable", "dialogue", "diamant", "dicter",
39436"différer", "digérer", "digital", "digne", "diluer", "dimanche", "diminuer", "dioxyde", "directif", "diriger",
39437"discuter", "disposer", "dissiper", "distance", "divertir", "diviser", "docile", "docteur", "dogme", "doigt",
39438"domaine", "domicile", "dompter", "donateur", "donjon", "donner", "dopamine", "dortoir", "dorure", "dosage",
39439"doseur", "dossier", "dotation", "douanier", "double", "douceur", "douter", "doyen", "dragon", "draper",
39440"dresser", "dribbler", "droiture", "duperie", "duplexe", "durable", "durcir", "dynastie", "éblouir", "écarter",
39441"écharpe", "échelle", "éclairer", "éclipse", "éclore", "écluse", "école", "économie", "écorce", "écouter",
39442"écraser", "écrémer", "écrivain", "écrou", "écume", "écureuil", "édifier", "éduquer", "effacer", "effectif",
39443"effigie", "effort", "effrayer", "effusion", "égaliser", "égarer", "éjecter", "élaborer", "élargir", "électron",
39444"élégant", "éléphant", "élève", "éligible", "élitisme", "éloge", "élucider", "éluder", "emballer", "embellir",
39445"embryon", "émeraude", "émission", "emmener", "émotion", "émouvoir", "empereur", "employer", "emporter", "emprise",
39446"émulsion", "encadrer", "enchère", "enclave", "encoche", "endiguer", "endosser", "endroit", "enduire", "énergie",
39447"enfance", "enfermer", "enfouir", "engager", "engin", "englober", "énigme", "enjamber", "enjeu", "enlever",
39448"ennemi", "ennuyeux", "enrichir", "enrobage", "enseigne", "entasser", "entendre", "entier", "entourer", "entraver",
39449"énumérer", "envahir", "enviable", "envoyer", "enzyme", "éolien", "épaissir", "épargne", "épatant", "épaule",
39450"épicerie", "épidémie", "épier", "épilogue", "épine", "épisode", "épitaphe", "époque", "épreuve", "éprouver",
39451"épuisant", "équerre", "équipe", "ériger", "érosion", "erreur", "éruption", "escalier", "espadon", "espèce",
39452"espiègle", "espoir", "esprit", "esquiver", "essayer", "essence", "essieu", "essorer", "estime", "estomac",
39453"estrade", "étagère", "étaler", "étanche", "étatique", "éteindre", "étendoir", "éternel", "éthanol", "éthique",
39454"ethnie", "étirer", "étoffer", "étoile", "étonnant", "étourdir", "étrange", "étroit", "étude", "euphorie",
39455"évaluer", "évasion", "éventail", "évidence", "éviter", "évolutif", "évoquer", "exact", "exagérer", "exaucer",
39456"exceller", "excitant", "exclusif", "excuse", "exécuter", "exemple", "exercer", "exhaler", "exhorter", "exigence",
39457"exiler", "exister", "exotique", "expédier", "explorer", "exposer", "exprimer", "exquis", "extensif", "extraire",
39458"exulter", "fable", "fabuleux", "facette", "facile", "facture", "faiblir", "falaise", "fameux", "famille",
39459"farceur", "farfelu", "farine", "farouche", "fasciner", "fatal", "fatigue", "faucon", "fautif", "faveur",
39460"favori", "fébrile", "féconder", "fédérer", "félin", "femme", "fémur", "fendoir", "féodal", "fermer",
39461"féroce", "ferveur", "festival", "feuille", "feutre", "février", "fiasco", "ficeler", "fictif", "fidèle",
39462"figure", "filature", "filetage", "filière", "filleul", "filmer", "filou", "filtrer", "financer", "finir",
39463"fiole", "firme", "fissure", "fixer", "flairer", "flamme", "flasque", "flatteur", "fléau", "flèche",
39464"fleur", "flexion", "flocon", "flore", "fluctuer", "fluide", "fluvial", "folie", "fonderie", "fongible",
39465"fontaine", "forcer", "forgeron", "formuler", "fortune", "fossile", "foudre", "fougère", "fouiller", "foulure",
39466"fourmi", "fragile", "fraise", "franchir", "frapper", "frayeur", "frégate", "freiner", "frelon", "frémir",
39467"frénésie", "frère", "friable", "friction", "frisson", "frivole", "froid", "fromage", "frontal", "frotter",
39468"fruit", "fugitif", "fuite", "fureur", "furieux", "furtif", "fusion", "futur", "gagner", "galaxie",
39469"galerie", "gambader", "garantir", "gardien", "garnir", "garrigue", "gazelle", "gazon", "géant", "gélatine",
39470"gélule", "gendarme", "général", "génie", "genou", "gentil", "géologie", "géomètre", "géranium", "germe",
39471"gestuel", "geyser", "gibier", "gicler", "girafe", "givre", "glace", "glaive", "glisser", "globe",
39472"gloire", "glorieux", "golfeur", "gomme", "gonfler", "gorge", "gorille", "goudron", "gouffre", "goulot",
39473"goupille", "gourmand", "goutte", "graduel", "graffiti", "graine", "grand", "grappin", "gratuit", "gravir",
39474"grenat", "griffure", "griller", "grimper", "grogner", "gronder", "grotte", "groupe", "gruger", "grutier",
39475"gruyère", "guépard", "guerrier", "guide", "guimauve", "guitare", "gustatif", "gymnaste", "gyrostat", "habitude",
39476"hachoir", "halte", "hameau", "hangar", "hanneton", "haricot", "harmonie", "harpon", "hasard", "hélium",
39477"hématome", "herbe", "hérisson", "hermine", "héron", "hésiter", "heureux", "hiberner", "hibou", "hilarant",
39478"histoire", "hiver", "homard", "hommage", "homogène", "honneur", "honorer", "honteux", "horde", "horizon",
39479"horloge", "hormone", "horrible", "houleux", "housse", "hublot", "huileux", "humain", "humble", "humide",
39480"humour", "hurler", "hydromel", "hygiène", "hymne", "hypnose", "idylle", "ignorer", "iguane", "illicite",
39481"illusion", "image", "imbiber", "imiter", "immense", "immobile", "immuable", "impact", "impérial", "implorer",
39482"imposer", "imprimer", "imputer", "incarner", "incendie", "incident", "incliner", "incolore", "indexer", "indice",
39483"inductif", "inédit", "ineptie", "inexact", "infini", "infliger", "informer", "infusion", "ingérer", "inhaler",
39484"inhiber", "injecter", "injure", "innocent", "inoculer", "inonder", "inscrire", "insecte", "insigne", "insolite",
39485"inspirer", "instinct", "insulter", "intact", "intense", "intime", "intrigue", "intuitif", "inutile", "invasion",
39486"inventer", "inviter", "invoquer", "ironique", "irradier", "irréel", "irriter", "isoler", "ivoire", "ivresse",
39487"jaguar", "jaillir", "jambe", "janvier", "jardin", "jauger", "jaune", "javelot", "jetable", "jeton",
39488"jeudi", "jeunesse", "joindre", "joncher", "jongler", "joueur", "jouissif", "journal", "jovial", "joyau",
39489"joyeux", "jubiler", "jugement", "junior", "jupon", "juriste", "justice", "juteux", "juvénile", "kayak",
39490"kimono", "kiosque", "label", "labial", "labourer", "lacérer", "lactose", "lagune", "laine", "laisser",
39491"laitier", "lambeau", "lamelle", "lampe", "lanceur", "langage", "lanterne", "lapin", "largeur", "larme",
39492"laurier", "lavabo", "lavoir", "lecture", "légal", "léger", "légume", "lessive", "lettre", "levier",
39493"lexique", "lézard", "liasse", "libérer", "libre", "licence", "licorne", "liège", "lièvre", "ligature",
39494"ligoter", "ligue", "limer", "limite", "limonade", "limpide", "linéaire", "lingot", "lionceau", "liquide",
39495"lisière", "lister", "lithium", "litige", "littoral", "livreur", "logique", "lointain", "loisir", "lombric",
39496"loterie", "louer", "lourd", "loutre", "louve", "loyal", "lubie", "lucide", "lucratif", "lueur",
39497"lugubre", "luisant", "lumière", "lunaire", "lundi", "luron", "lutter", "luxueux", "machine", "magasin",
39498"magenta", "magique", "maigre", "maillon", "maintien", "mairie", "maison", "majorer", "malaxer", "maléfice",
39499"malheur", "malice", "mallette", "mammouth", "mandater", "maniable", "manquant", "manteau", "manuel", "marathon",
39500"marbre", "marchand", "mardi", "maritime", "marqueur", "marron", "marteler", "mascotte", "massif", "matériel",
39501"matière", "matraque", "maudire", "maussade", "mauve", "maximal", "méchant", "méconnu", "médaille", "médecin",
39502"méditer", "méduse", "meilleur", "mélange", "mélodie", "membre", "mémoire", "menacer", "mener", "menhir",
39503"mensonge", "mentor", "mercredi", "mérite", "merle", "messager", "mesure", "métal", "météore", "méthode",
39504"métier", "meuble", "miauler", "microbe", "miette", "mignon", "migrer", "milieu", "million", "mimique",
39505"mince", "minéral", "minimal", "minorer", "minute", "miracle", "miroiter", "missile", "mixte", "mobile",
39506"moderne", "moelleux", "mondial", "moniteur", "monnaie", "monotone", "monstre", "montagne", "monument", "moqueur",
39507"morceau", "morsure", "mortier", "moteur", "motif", "mouche", "moufle", "moulin", "mousson", "mouton",
39508"mouvant", "multiple", "munition", "muraille", "murène", "murmure", "muscle", "muséum", "musicien", "mutation",
39509"muter", "mutuel", "myriade", "myrtille", "mystère", "mythique", "nageur", "nappe", "narquois", "narrer",
39510"natation", "nation", "nature", "naufrage", "nautique", "navire", "nébuleux", "nectar", "néfaste", "négation",
39511"négliger", "négocier", "neige", "nerveux", "nettoyer", "neurone", "neutron", "neveu", "niche", "nickel",
39512"nitrate", "niveau", "noble", "nocif", "nocturne", "noirceur", "noisette", "nomade", "nombreux", "nommer",
39513"normatif", "notable", "notifier", "notoire", "nourrir", "nouveau", "novateur", "novembre", "novice", "nuage",
39514"nuancer", "nuire", "nuisible", "numéro", "nuptial", "nuque", "nutritif", "obéir", "objectif", "obliger",
39515"obscur", "observer", "obstacle", "obtenir", "obturer", "occasion", "occuper", "océan", "octobre", "octroyer",
39516"octupler", "oculaire", "odeur", "odorant", "offenser", "officier", "offrir", "ogive", "oiseau", "oisillon",
39517"olfactif", "olivier", "ombrage", "omettre", "onctueux", "onduler", "onéreux", "onirique", "opale", "opaque",
39518"opérer", "opinion", "opportun", "opprimer", "opter", "optique", "orageux", "orange", "orbite", "ordonner",
39519"oreille", "organe", "orgueil", "orifice", "ornement", "orque", "ortie", "osciller", "osmose", "ossature",
39520"otarie", "ouragan", "ourson", "outil", "outrager", "ouvrage", "ovation", "oxyde", "oxygène", "ozone",
39521"paisible", "palace", "palmarès", "palourde", "palper", "panache", "panda", "pangolin", "paniquer", "panneau",
39522"panorama", "pantalon", "papaye", "papier", "papoter", "papyrus", "paradoxe", "parcelle", "paresse", "parfumer",
39523"parler", "parole", "parrain", "parsemer", "partager", "parure", "parvenir", "passion", "pastèque", "paternel",
39524"patience", "patron", "pavillon", "pavoiser", "payer", "paysage", "peigne", "peintre", "pelage", "pélican",
39525"pelle", "pelouse", "peluche", "pendule", "pénétrer", "pénible", "pensif", "pénurie", "pépite", "péplum",
39526"perdrix", "perforer", "période", "permuter", "perplexe", "persil", "perte", "peser", "pétale", "petit",
39527"pétrir", "peuple", "pharaon", "phobie", "phoque", "photon", "phrase", "physique", "piano", "pictural",
39528"pièce", "pierre", "pieuvre", "pilote", "pinceau", "pipette", "piquer", "pirogue", "piscine", "piston",
39529"pivoter", "pixel", "pizza", "placard", "plafond", "plaisir", "planer", "plaque", "plastron", "plateau",
39530"pleurer", "plexus", "pliage", "plomb", "plonger", "pluie", "plumage", "pochette", "poésie", "poète",
39531"pointe", "poirier", "poisson", "poivre", "polaire", "policier", "pollen", "polygone", "pommade", "pompier",
39532"ponctuel", "pondérer", "poney", "portique", "position", "posséder", "posture", "potager", "poteau", "potion",
39533"pouce", "poulain", "poumon", "pourpre", "poussin", "pouvoir", "prairie", "pratique", "précieux", "prédire",
39534"préfixe", "prélude", "prénom", "présence", "prétexte", "prévoir", "primitif", "prince", "prison", "priver",
39535"problème", "procéder", "prodige", "profond", "progrès", "proie", "projeter", "prologue", "promener", "propre",
39536"prospère", "protéger", "prouesse", "proverbe", "prudence", "pruneau", "psychose", "public", "puceron", "puiser",
39537"pulpe", "pulsar", "punaise", "punitif", "pupitre", "purifier", "puzzle", "pyramide", "quasar", "querelle",
39538"question", "quiétude", "quitter", "quotient", "racine", "raconter", "radieux", "ragondin", "raideur", "raisin",
39539"ralentir", "rallonge", "ramasser", "rapide", "rasage", "ratisser", "ravager", "ravin", "rayonner", "réactif",
39540"réagir", "réaliser", "réanimer", "recevoir", "réciter", "réclamer", "récolter", "recruter", "reculer", "recycler",
39541"rédiger", "redouter", "refaire", "réflexe", "réformer", "refrain", "refuge", "régalien", "région", "réglage",
39542"régulier", "réitérer", "rejeter", "rejouer", "relatif", "relever", "relief", "remarque", "remède", "remise",
39543"remonter", "remplir", "remuer", "renard", "renfort", "renifler", "renoncer", "rentrer", "renvoi", "replier",
39544"reporter", "reprise", "reptile", "requin", "réserve", "résineux", "résoudre", "respect", "rester", "résultat",
39545"rétablir", "retenir", "réticule", "retomber", "retracer", "réunion", "réussir", "revanche", "revivre", "révolte",
39546"révulsif", "richesse", "rideau", "rieur", "rigide", "rigoler", "rincer", "riposter", "risible", "risque",
39547"rituel", "rival", "rivière", "rocheux", "romance", "rompre", "ronce", "rondin", "roseau", "rosier",
39548"rotatif", "rotor", "rotule", "rouge", "rouille", "rouleau", "routine", "royaume", "ruban", "rubis",
39549"ruche", "ruelle", "rugueux", "ruiner", "ruisseau", "ruser", "rustique", "rythme", "sabler", "saboter",
39550"sabre", "sacoche", "safari", "sagesse", "saisir", "salade", "salive", "salon", "saluer", "samedi",
39551"sanction", "sanglier", "sarcasme", "sardine", "saturer", "saugrenu", "saumon", "sauter", "sauvage", "savant",
39552"savonner", "scalpel", "scandale", "scélérat", "scénario", "sceptre", "schéma", "science", "scinder", "score",
39553"scrutin", "sculpter", "séance", "sécable", "sécher", "secouer", "sécréter", "sédatif", "séduire", "seigneur",
39554"séjour", "sélectif", "semaine", "sembler", "semence", "séminal", "sénateur", "sensible", "sentence", "séparer",
39555"séquence", "serein", "sergent", "sérieux", "serrure", "sérum", "service", "sésame", "sévir", "sevrage",
39556"sextuple", "sidéral", "siècle", "siéger", "siffler", "sigle", "signal", "silence", "silicium", "simple",
39557"sincère", "sinistre", "siphon", "sirop", "sismique", "situer", "skier", "social", "socle", "sodium",
39558"soigneux", "soldat", "soleil", "solitude", "soluble", "sombre", "sommeil", "somnoler", "sonde", "songeur",
39559"sonnette", "sonore", "sorcier", "sortir", "sosie", "sottise", "soucieux", "soudure", "souffle", "soulever",
39560"soupape", "source", "soutirer", "souvenir", "spacieux", "spatial", "spécial", "sphère", "spiral", "stable",
39561"station", "sternum", "stimulus", "stipuler", "strict", "studieux", "stupeur", "styliste", "sublime", "substrat",
39562"subtil", "subvenir", "succès", "sucre", "suffixe", "suggérer", "suiveur", "sulfate", "superbe", "supplier",
39563"surface", "suricate", "surmener", "surprise", "sursaut", "survie", "suspect", "syllabe", "symbole", "symétrie",
39564"synapse", "syntaxe", "système", "tabac", "tablier", "tactile", "tailler", "talent", "talisman", "talonner",
39565"tambour", "tamiser", "tangible", "tapis", "taquiner", "tarder", "tarif", "tartine", "tasse", "tatami",
39566"tatouage", "taupe", "taureau", "taxer", "témoin", "temporel", "tenaille", "tendre", "teneur", "tenir",
39567"tension", "terminer", "terne", "terrible", "tétine", "texte", "thème", "théorie", "thérapie", "thorax",
39568"tibia", "tiède", "timide", "tirelire", "tiroir", "tissu", "titane", "titre", "tituber", "toboggan",
39569"tolérant", "tomate", "tonique", "tonneau", "toponyme", "torche", "tordre", "tornade", "torpille", "torrent",
39570"torse", "tortue", "totem", "toucher", "tournage", "tousser", "toxine", "traction", "trafic", "tragique",
39571"trahir", "train", "trancher", "travail", "trèfle", "tremper", "trésor", "treuil", "triage", "tribunal",
39572"tricoter", "trilogie", "triomphe", "tripler", "triturer", "trivial", "trombone", "tronc", "tropical", "troupeau",
39573"tuile", "tulipe", "tumulte", "tunnel", "turbine", "tuteur", "tutoyer", "tuyau", "tympan", "typhon",
39574"typique", "tyran", "ubuesque", "ultime", "ultrason", "unanime", "unifier", "union", "unique", "unitaire",
39575"univers", "uranium", "urbain", "urticant", "usage", "usine", "usuel", "usure", "utile", "utopie",
39576"vacarme", "vaccin", "vagabond", "vague", "vaillant", "vaincre", "vaisseau", "valable", "valise", "vallon",
39577"valve", "vampire", "vanille", "vapeur", "varier", "vaseux", "vassal", "vaste", "vecteur", "vedette",
39578"végétal", "véhicule", "veinard", "véloce", "vendredi", "vénérer", "venger", "venimeux", "ventouse", "verdure",
39579"vérin", "vernir", "verrou", "verser", "vertu", "veston", "vétéran", "vétuste", "vexant", "vexer",
39580"viaduc", "viande", "victoire", "vidange", "vidéo", "vignette", "vigueur", "vilain", "village", "vinaigre",
39581"violon", "vipère", "virement", "virtuose", "virus", "visage", "viseur", "vision", "visqueux", "visuel",
39582"vital", "vitesse", "viticole", "vitrine", "vivace", "vivipare", "vocation", "voguer", "voile", "voisin",
39583"voiture", "volaille", "volcan", "voltiger", "volume", "vorace", "vortex", "voter", "vouloir", "voyage",
39584"voyelle", "wagon", "xénon", "yacht", "zèbre", "zénith", "zeste", "zoologie"]
39585</script>
39586 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
39587WORDLISTS["italian"] = [
39588"abaco", "abbaglio", "abbinato", "abete", "abisso", "abolire", "abrasivo", "abrogato", "accadere", "accenno",
39589"accusato", "acetone", "achille", "acido", "acqua", "acre", "acrilico", "acrobata", "acuto", "adagio",
39590"addebito", "addome", "adeguato", "aderire", "adipe", "adottare", "adulare", "affabile", "affetto", "affisso",
39591"affranto", "aforisma", "afoso", "africano", "agave", "agente", "agevole", "aggancio", "agire", "agitare",
39592"agonismo", "agricolo", "agrumeto", "aguzzo", "alabarda", "alato", "albatro", "alberato", "albo", "albume",
39593"alce", "alcolico", "alettone", "alfa", "algebra", "aliante", "alibi", "alimento", "allagato", "allegro",
39594"allievo", "allodola", "allusivo", "almeno", "alogeno", "alpaca", "alpestre", "altalena", "alterno", "alticcio",
39595"altrove", "alunno", "alveolo", "alzare", "amalgama", "amanita", "amarena", "ambito", "ambrato", "ameba",
39596"america", "ametista", "amico", "ammasso", "ammenda", "ammirare", "ammonito", "amore", "ampio", "ampliare",
39597"amuleto", "anacardo", "anagrafe", "analista", "anarchia", "anatra", "anca", "ancella", "ancora", "andare",
39598"andrea", "anello", "angelo", "angolare", "angusto", "anima", "annegare", "annidato", "anno", "annuncio",
39599"anonimo", "anticipo", "anzi", "apatico", "apertura", "apode", "apparire", "appetito", "appoggio", "approdo",
39600"appunto", "aprile", "arabica", "arachide", "aragosta", "araldica", "arancio", "aratura", "arazzo", "arbitro",
39601"archivio", "ardito", "arenile", "argento", "argine", "arguto", "aria", "armonia", "arnese", "arredato",
39602"arringa", "arrosto", "arsenico", "arso", "artefice", "arzillo", "asciutto", "ascolto", "asepsi", "asettico",
39603"asfalto", "asino", "asola", "aspirato", "aspro", "assaggio", "asse", "assoluto", "assurdo", "asta",
39604"astenuto", "astice", "astratto", "atavico", "ateismo", "atomico", "atono", "attesa", "attivare", "attorno",
39605"attrito", "attuale", "ausilio", "austria", "autista", "autonomo", "autunno", "avanzato", "avere", "avvenire",
39606"avviso", "avvolgere", "azione", "azoto", "azzimo", "azzurro", "babele", "baccano", "bacino", "baco",
39607"badessa", "badilata", "bagnato", "baita", "balcone", "baldo", "balena", "ballata", "balzano", "bambino",
39608"bandire", "baraonda", "barbaro", "barca", "baritono", "barlume", "barocco", "basilico", "basso", "batosta",
39609"battuto", "baule", "bava", "bavosa", "becco", "beffa", "belgio", "belva", "benda", "benevole",
39610"benigno", "benzina", "bere", "berlina", "beta", "bibita", "bici", "bidone", "bifido", "biga",
39611"bilancia", "bimbo", "binocolo", "biologo", "bipede", "bipolare", "birbante", "birra", "biscotto", "bisesto",
39612"bisnonno", "bisonte", "bisturi", "bizzarro", "blando", "blatta", "bollito", "bonifico", "bordo", "bosco",
39613"botanico", "bottino", "bozzolo", "braccio", "bradipo", "brama", "branca", "bravura", "bretella", "brevetto",
39614"brezza", "briglia", "brillante", "brindare", "broccolo", "brodo", "bronzina", "brullo", "bruno", "bubbone",
39615"buca", "budino", "buffone", "buio", "bulbo", "buono", "burlone", "burrasca", "bussola", "busta",
39616"cadetto", "caduco", "calamaro", "calcolo", "calesse", "calibro", "calmo", "caloria", "cambusa", "camerata",
39617"camicia", "cammino", "camola", "campale", "canapa", "candela", "cane", "canino", "canotto", "cantina",
39618"capace", "capello", "capitolo", "capogiro", "cappero", "capra", "capsula", "carapace", "carcassa", "cardo",
39619"carisma", "carovana", "carretto", "cartolina", "casaccio", "cascata", "caserma", "caso", "cassone", "castello",
39620"casuale", "catasta", "catena", "catrame", "cauto", "cavillo", "cedibile", "cedrata", "cefalo", "celebre",
39621"cellulare", "cena", "cenone", "centesimo", "ceramica", "cercare", "certo", "cerume", "cervello", "cesoia",
39622"cespo", "ceto", "chela", "chiaro", "chicca", "chiedere", "chimera", "china", "chirurgo", "chitarra",
39623"ciao", "ciclismo", "cifrare", "cigno", "cilindro", "ciottolo", "circa", "cirrosi", "citrico", "cittadino",
39624"ciuffo", "civetta", "civile", "classico", "clinica", "cloro", "cocco", "codardo", "codice", "coerente",
39625"cognome", "collare", "colmato", "colore", "colposo", "coltivato", "colza", "coma", "cometa", "commando",
39626"comodo", "computer", "comune", "conciso", "condurre", "conferma", "congelare", "coniuge", "connesso", "conoscere",
39627"consumo", "continuo", "convegno", "coperto", "copione", "coppia", "copricapo", "corazza", "cordata", "coricato",
39628"cornice", "corolla", "corpo", "corredo", "corsia", "cortese", "cosmico", "costante", "cottura", "covato",
39629"cratere", "cravatta", "creato", "credere", "cremoso", "crescita", "creta", "criceto", "crinale", "crisi",
39630"critico", "croce", "cronaca", "crostata", "cruciale", "crusca", "cucire", "cuculo", "cugino", "cullato",
39631"cupola", "curatore", "cursore", "curvo", "cuscino", "custode", "dado", "daino", "dalmata", "damerino",
39632"daniela", "dannoso", "danzare", "datato", "davanti", "davvero", "debutto", "decennio", "deciso", "declino",
39633"decollo", "decreto", "dedicato", "definito", "deforme", "degno", "delegare", "delfino", "delirio", "delta",
39634"demenza", "denotato", "dentro", "deposito", "derapata", "derivare", "deroga", "descritto", "deserto", "desiderio",
39635"desumere", "detersivo", "devoto", "diametro", "dicembre", "diedro", "difeso", "diffuso", "digerire", "digitale",
39636"diluvio", "dinamico", "dinnanzi", "dipinto", "diploma", "dipolo", "diradare", "dire", "dirotto", "dirupo",
39637"disagio", "discreto", "disfare", "disgelo", "disposto", "distanza", "disumano", "dito", "divano", "divelto",
39638"dividere", "divorato", "doblone", "docente", "doganale", "dogma", "dolce", "domato", "domenica", "dominare",
39639"dondolo", "dono", "dormire", "dote", "dottore", "dovuto", "dozzina", "drago", "druido", "dubbio",
39640"dubitare", "ducale", "duna", "duomo", "duplice", "duraturo", "ebano", "eccesso", "ecco", "eclissi",
39641"economia", "edera", "edicola", "edile", "editoria", "educare", "egemonia", "egli", "egoismo", "egregio",
39642"elaborato", "elargire", "elegante", "elencato", "eletto", "elevare", "elfico", "elica", "elmo", "elsa",
39643"eluso", "emanato", "emblema", "emesso", "emiro", "emotivo", "emozione", "empirico", "emulo", "endemico",
39644"enduro", "energia", "enfasi", "enoteca", "entrare", "enzima", "epatite", "epilogo", "episodio", "epocale",
39645"eppure", "equatore", "erario", "erba", "erboso", "erede", "eremita", "erigere", "ermetico", "eroe",
39646"erosivo", "errante", "esagono", "esame", "esanime", "esaudire", "esca", "esempio", "esercito", "esibito",
39647"esigente", "esistere", "esito", "esofago", "esortato", "esoso", "espanso", "espresso", "essenza", "esso",
39648"esteso", "estimare", "estonia", "estroso", "esultare", "etilico", "etnico", "etrusco", "etto", "euclideo",
39649"europa", "evaso", "evidenza", "evitato", "evoluto", "evviva", "fabbrica", "faccenda", "fachiro", "falco",
39650"famiglia", "fanale", "fanfara", "fango", "fantasma", "fare", "farfalla", "farinoso", "farmaco", "fascia",
39651"fastoso", "fasullo", "faticare", "fato", "favoloso", "febbre", "fecola", "fede", "fegato", "felpa",
39652"feltro", "femmina", "fendere", "fenomeno", "fermento", "ferro", "fertile", "fessura", "festivo", "fetta",
39653"feudo", "fiaba", "fiducia", "fifa", "figurato", "filo", "finanza", "finestra", "finire", "fiore",
39654"fiscale", "fisico", "fiume", "flacone", "flamenco", "flebo", "flemma", "florido", "fluente", "fluoro",
39655"fobico", "focaccia", "focoso", "foderato", "foglio", "folata", "folclore", "folgore", "fondente", "fonetico",
39656"fonia", "fontana", "forbito", "forchetta", "foresta", "formica", "fornaio", "foro", "fortezza", "forzare",
39657"fosfato", "fosso", "fracasso", "frana", "frassino", "fratello", "freccetta", "frenata", "fresco", "frigo",
39658"frollino", "fronde", "frugale", "frutta", "fucilata", "fucsia", "fuggente", "fulmine", "fulvo", "fumante",
39659"fumetto", "fumoso", "fune", "funzione", "fuoco", "furbo", "furgone", "furore", "fuso", "futile",
39660"gabbiano", "gaffe", "galateo", "gallina", "galoppo", "gambero", "gamma", "garanzia", "garbo", "garofano",
39661"garzone", "gasdotto", "gasolio", "gastrico", "gatto", "gaudio", "gazebo", "gazzella", "geco", "gelatina",
39662"gelso", "gemello", "gemmato", "gene", "genitore", "gennaio", "genotipo", "gergo", "ghepardo", "ghiaccio",
39663"ghisa", "giallo", "gilda", "ginepro", "giocare", "gioiello", "giorno", "giove", "girato", "girone",
39664"gittata", "giudizio", "giurato", "giusto", "globulo", "glutine", "gnomo", "gobba", "golf", "gomito",
39665"gommone", "gonfio", "gonna", "governo", "gracile", "grado", "grafico", "grammo", "grande", "grattare",
39666"gravoso", "grazia", "greca", "gregge", "grifone", "grigio", "grinza", "grotta", "gruppo", "guadagno",
39667"guaio", "guanto", "guardare", "gufo", "guidare", "ibernato", "icona", "identico", "idillio", "idolo",
39668"idra", "idrico", "idrogeno", "igiene", "ignaro", "ignorato", "ilare", "illeso", "illogico", "illudere",
39669"imballo", "imbevuto", "imbocco", "imbuto", "immane", "immerso", "immolato", "impacco", "impeto", "impiego",
39670"importo", "impronta", "inalare", "inarcare", "inattivo", "incanto", "incendio", "inchino", "incisivo", "incluso",
39671"incontro", "incrocio", "incubo", "indagine", "india", "indole", "inedito", "infatti", "infilare", "inflitto",
39672"ingaggio", "ingegno", "inglese", "ingordo", "ingrosso", "innesco", "inodore", "inoltrare", "inondato", "insano",
39673"insetto", "insieme", "insonnia", "insulina", "intasato", "intero", "intonaco", "intuito", "inumidire", "invalido",
39674"invece", "invito", "iperbole", "ipnotico", "ipotesi", "ippica", "iride", "irlanda", "ironico", "irrigato",
39675"irrorare", "isolato", "isotopo", "isterico", "istituto", "istrice", "italia", "iterare", "labbro", "labirinto",
39676"lacca", "lacerato", "lacrima", "lacuna", "laddove", "lago", "lampo", "lancetta", "lanterna", "lardoso",
39677"larga", "laringe", "lastra", "latenza", "latino", "lattuga", "lavagna", "lavoro", "legale", "leggero",
39678"lembo", "lentezza", "lenza", "leone", "lepre", "lesivo", "lessato", "lesto", "letterale", "leva",
39679"levigato", "libero", "lido", "lievito", "lilla", "limatura", "limitare", "limpido", "lineare", "lingua",
39680"liquido", "lira", "lirica", "lisca", "lite", "litigio", "livrea", "locanda", "lode", "logica",
39681"lombare", "londra", "longevo", "loquace", "lorenzo", "loto", "lotteria", "luce", "lucidato", "lumaca",
39682"luminoso", "lungo", "lupo", "luppolo", "lusinga", "lusso", "lutto", "macabro", "macchina", "macero",
39683"macinato", "madama", "magico", "maglia", "magnete", "magro", "maiolica", "malafede", "malgrado", "malinteso",
39684"malsano", "malto", "malumore", "mana", "mancia", "mandorla", "mangiare", "manifesto", "mannaro", "manovra",
39685"mansarda", "mantide", "manubrio", "mappa", "maratona", "marcire", "maretta", "marmo", "marsupio", "maschera",
39686"massaia", "mastino", "materasso", "matricola", "mattone", "maturo", "mazurca", "meandro", "meccanico", "mecenate",
39687"medesimo", "meditare", "mega", "melassa", "melis", "melodia", "meninge", "meno", "mensola", "mercurio",
39688"merenda", "merlo", "meschino", "mese", "messere", "mestolo", "metallo", "metodo", "mettere", "miagolare",
39689"mica", "micelio", "michele", "microbo", "midollo", "miele", "migliore", "milano", "milite", "mimosa",
39690"minerale", "mini", "minore", "mirino", "mirtillo", "miscela", "missiva", "misto", "misurare", "mitezza",
39691"mitigare", "mitra", "mittente", "mnemonico", "modello", "modifica", "modulo", "mogano", "mogio", "mole",
39692"molosso", "monastero", "monco", "mondina", "monetario", "monile", "monotono", "monsone", "montato", "monviso",
39693"mora", "mordere", "morsicato", "mostro", "motivato", "motosega", "motto", "movenza", "movimento", "mozzo",
39694"mucca", "mucosa", "muffa", "mughetto", "mugnaio", "mulatto", "mulinello", "multiplo", "mummia", "munto",
39695"muovere", "murale", "musa", "muscolo", "musica", "mutevole", "muto", "nababbo", "nafta", "nanometro",
39696"narciso", "narice", "narrato", "nascere", "nastrare", "naturale", "nautica", "naviglio", "nebulosa", "necrosi",
39697"negativo", "negozio", "nemmeno", "neofita", "neretto", "nervo", "nessuno", "nettuno", "neutrale", "neve",
39698"nevrotico", "nicchia", "ninfa", "nitido", "nobile", "nocivo", "nodo", "nome", "nomina", "nordico",
39699"normale", "norvegese", "nostrano", "notare", "notizia", "notturno", "novella", "nucleo", "nulla", "numero",
39700"nuovo", "nutrire", "nuvola", "nuziale", "oasi", "obbedire", "obbligo", "obelisco", "oblio", "obolo",
39701"obsoleto", "occasione", "occhio", "occidente", "occorrere", "occultare", "ocra", "oculato", "odierno", "odorare",
39702"offerta", "offrire", "offuscato", "oggetto", "oggi", "ognuno", "olandese", "olfatto", "oliato", "oliva",
39703"ologramma", "oltre", "omaggio", "ombelico", "ombra", "omega", "omissione", "ondoso", "onere", "onice",
39704"onnivoro", "onorevole", "onta", "operato", "opinione", "opposto", "oracolo", "orafo", "ordine", "orecchino",
39705"orefice", "orfano", "organico", "origine", "orizzonte", "orma", "ormeggio", "ornativo", "orologio", "orrendo",
39706"orribile", "ortensia", "ortica", "orzata", "orzo", "osare", "oscurare", "osmosi", "ospedale", "ospite",
39707"ossa", "ossidare", "ostacolo", "oste", "otite", "otre", "ottagono", "ottimo", "ottobre", "ovale",
39708"ovest", "ovino", "oviparo", "ovocito", "ovunque", "ovviare", "ozio", "pacchetto", "pace", "pacifico",
39709"padella", "padrone", "paese", "paga", "pagina", "palazzina", "palesare", "pallido", "palo", "palude",
39710"pandoro", "pannello", "paolo", "paonazzo", "paprica", "parabola", "parcella", "parere", "pargolo", "pari",
39711"parlato", "parola", "partire", "parvenza", "parziale", "passivo", "pasticca", "patacca", "patologia", "pattume",
39712"pavone", "peccato", "pedalare", "pedonale", "peggio", "peloso", "penare", "pendice", "penisola", "pennuto",
39713"penombra", "pensare", "pentola", "pepe", "pepita", "perbene", "percorso", "perdonato", "perforare", "pergamena",
39714"periodo", "permesso", "perno", "perplesso", "persuaso", "pertugio", "pervaso", "pesatore", "pesista", "peso",
39715"pestifero", "petalo", "pettine", "petulante", "pezzo", "piacere", "pianta", "piattino", "piccino", "picozza",
39716"piega", "pietra", "piffero", "pigiama", "pigolio", "pigro", "pila", "pilifero", "pillola", "pilota",
39717"pimpante", "pineta", "pinna", "pinolo", "pioggia", "piombo", "piramide", "piretico", "pirite", "pirolisi",
39718"pitone", "pizzico", "placebo", "planare", "plasma", "platano", "plenario", "pochezza", "poderoso", "podismo",
39719"poesia", "poggiare", "polenta", "poligono", "pollice", "polmonite", "polpetta", "polso", "poltrona", "polvere",
39720"pomice", "pomodoro", "ponte", "popoloso", "porfido", "poroso", "porpora", "porre", "portata", "posa",
39721"positivo", "possesso", "postulato", "potassio", "potere", "pranzo", "prassi", "pratica", "precluso", "predica",
39722"prefisso", "pregiato", "prelievo", "premere", "prenotare", "preparato", "presenza", "pretesto", "prevalso", "prima",
39723"principe", "privato", "problema", "procura", "produrre", "profumo", "progetto", "prolunga", "promessa", "pronome",
39724"proposta", "proroga", "proteso", "prova", "prudente", "prugna", "prurito", "psiche", "pubblico", "pudica",
39725"pugilato", "pugno", "pulce", "pulito", "pulsante", "puntare", "pupazzo", "pupilla", "puro", "quadro",
39726"qualcosa", "quasi", "querela", "quota", "raccolto", "raddoppio", "radicale", "radunato", "raffica", "ragazzo",
39727"ragione", "ragno", "ramarro", "ramingo", "ramo", "randagio", "rantolare", "rapato", "rapina", "rappreso",
39728"rasatura", "raschiato", "rasente", "rassegna", "rastrello", "rata", "ravveduto", "reale", "recepire", "recinto",
39729"recluta", "recondito", "recupero", "reddito", "redimere", "regalato", "registro", "regola", "regresso", "relazione",
39730"remare", "remoto", "renna", "replica", "reprimere", "reputare", "resa", "residente", "responso", "restauro",
39731"rete", "retina", "retorica", "rettifica", "revocato", "riassunto", "ribadire", "ribelle", "ribrezzo", "ricarica",
39732"ricco", "ricevere", "riciclato", "ricordo", "ricreduto", "ridicolo", "ridurre", "rifasare", "riflesso", "riforma",
39733"rifugio", "rigare", "rigettato", "righello", "rilassato", "rilevato", "rimanere", "rimbalzo", "rimedio", "rimorchio",
39734"rinascita", "rincaro", "rinforzo", "rinnovo", "rinomato", "rinsavito", "rintocco", "rinuncia", "rinvenire", "riparato",
39735"ripetuto", "ripieno", "riportare", "ripresa", "ripulire", "risata", "rischio", "riserva", "risibile", "riso",
39736"rispetto", "ristoro", "risultato", "risvolto", "ritardo", "ritegno", "ritmico", "ritrovo", "riunione", "riva",
39737"riverso", "rivincita", "rivolto", "rizoma", "roba", "robotico", "robusto", "roccia", "roco", "rodaggio",
39738"rodere", "roditore", "rogito", "rollio", "romantico", "rompere", "ronzio", "rosolare", "rospo", "rotante",
39739"rotondo", "rotula", "rovescio", "rubizzo", "rubrica", "ruga", "rullino", "rumine", "rumoroso", "ruolo",
39740"rupe", "russare", "rustico", "sabato", "sabbiare", "sabotato", "sagoma", "salasso", "saldatura", "salgemma",
39741"salivare", "salmone", "salone", "saltare", "saluto", "salvo", "sapere", "sapido", "saporito", "saraceno",
39742"sarcasmo", "sarto", "sassoso", "satellite", "satira", "satollo", "saturno", "savana", "savio", "saziato",
39743"sbadiglio", "sbalzo", "sbancato", "sbarra", "sbattere", "sbavare", "sbendare", "sbirciare", "sbloccato", "sbocciato",
39744"sbrinare", "sbruffone", "sbuffare", "scabroso", "scadenza", "scala", "scambiare", "scandalo", "scapola", "scarso",
39745"scatenare", "scavato", "scelto", "scenico", "scettro", "scheda", "schiena", "sciarpa", "scienza", "scindere",
39746"scippo", "sciroppo", "scivolo", "sclerare", "scodella", "scolpito", "scomparto", "sconforto", "scoprire", "scorta",
39747"scossone", "scozzese", "scriba", "scrollare", "scrutinio", "scuderia", "scultore", "scuola", "scuro", "scusare",
39748"sdebitare", "sdoganare", "seccatura", "secondo", "sedano", "seggiola", "segnalato", "segregato", "seguito", "selciato",
39749"selettivo", "sella", "selvaggio", "semaforo", "sembrare", "seme", "seminato", "sempre", "senso", "sentire",
39750"sepolto", "sequenza", "serata", "serbato", "sereno", "serio", "serpente", "serraglio", "servire", "sestina",
39751"setola", "settimana", "sfacelo", "sfaldare", "sfamato", "sfarzoso", "sfaticato", "sfera", "sfida", "sfilato",
39752"sfinge", "sfocato", "sfoderare", "sfogo", "sfoltire", "sforzato", "sfratto", "sfruttato", "sfuggito", "sfumare",
39753"sfuso", "sgabello", "sgarbato", "sgonfiare", "sgorbio", "sgrassato", "sguardo", "sibilo", "siccome", "sierra",
39754"sigla", "signore", "silenzio", "sillaba", "simbolo", "simpatico", "simulato", "sinfonia", "singolo", "sinistro",
39755"sino", "sintesi", "sinusoide", "sipario", "sisma", "sistole", "situato", "slitta", "slogatura", "sloveno",
39756"smarrito", "smemorato", "smentito", "smeraldo", "smilzo", "smontare", "smottato", "smussato", "snellire", "snervato",
39757"snodo", "sobbalzo", "sobrio", "soccorso", "sociale", "sodale", "soffitto", "sogno", "soldato", "solenne",
39758"solido", "sollazzo", "solo", "solubile", "solvente", "somatico", "somma", "sonda", "sonetto", "sonnifero",
39759"sopire", "soppeso", "sopra", "sorgere", "sorpasso", "sorriso", "sorso", "sorteggio", "sorvolato", "sospiro",
39760"sosta", "sottile", "spada", "spalla", "spargere", "spatola", "spavento", "spazzola", "specie", "spedire",
39761"spegnere", "spelatura", "speranza", "spessore", "spettrale", "spezzato", "spia", "spigoloso", "spillato", "spinoso",
39762"spirale", "splendido", "sportivo", "sposo", "spranga", "sprecare", "spronato", "spruzzo", "spuntino", "squillo",
39763"sradicare", "srotolato", "stabile", "stacco", "staffa", "stagnare", "stampato", "stantio", "starnuto", "stasera",
39764"statuto", "stelo", "steppa", "sterzo", "stiletto", "stima", "stirpe", "stivale", "stizzoso", "stonato",
39765"storico", "strappo", "stregato", "stridulo", "strozzare", "strutto", "stuccare", "stufo", "stupendo", "subentro",
39766"succoso", "sudore", "suggerito", "sugo", "sultano", "suonare", "superbo", "supporto", "surgelato", "surrogato",
39767"sussurro", "sutura", "svagare", "svedese", "sveglio", "svelare", "svenuto", "svezia", "sviluppo", "svista",
39768"svizzera", "svolta", "svuotare", "tabacco", "tabulato", "tacciare", "taciturno", "tale", "talismano", "tampone",
39769"tannino", "tara", "tardivo", "targato", "tariffa", "tarpare", "tartaruga", "tasto", "tattico", "taverna",
39770"tavolata", "tazza", "teca", "tecnico", "telefono", "temerario", "tempo", "temuto", "tendone", "tenero",
39771"tensione", "tentacolo", "teorema", "terme", "terrazzo", "terzetto", "tesi", "tesserato", "testato", "tetro",
39772"tettoia", "tifare", "tigella", "timbro", "tinto", "tipico", "tipografo", "tiraggio", "tiro", "titanio",
39773"titolo", "titubante", "tizio", "tizzone", "toccare", "tollerare", "tolto", "tombola", "tomo", "tonfo",
39774"tonsilla", "topazio", "topologia", "toppa", "torba", "tornare", "torrone", "tortora", "toscano", "tossire",
39775"tostatura", "totano", "trabocco", "trachea", "trafila", "tragedia", "tralcio", "tramonto", "transito", "trapano",
39776"trarre", "trasloco", "trattato", "trave", "treccia", "tremolio", "trespolo", "tributo", "tricheco", "trifoglio",
39777"trillo", "trincea", "trio", "tristezza", "triturato", "trivella", "tromba", "trono", "troppo", "trottola",
39778"trovare", "truccato", "tubatura", "tuffato", "tulipano", "tumulto", "tunisia", "turbare", "turchino", "tuta",
39779"tutela", "ubicato", "uccello", "uccisore", "udire", "uditivo", "uffa", "ufficio", "uguale", "ulisse",
39780"ultimato", "umano", "umile", "umorismo", "uncinetto", "ungere", "ungherese", "unicorno", "unificato", "unisono",
39781"unitario", "unte", "uovo", "upupa", "uragano", "urgenza", "urlo", "usanza", "usato", "uscito",
39782"usignolo", "usuraio", "utensile", "utilizzo", "utopia", "vacante", "vaccinato", "vagabondo", "vagliato", "valanga",
39783"valgo", "valico", "valletta", "valoroso", "valutare", "valvola", "vampata", "vangare", "vanitoso", "vano",
39784"vantaggio", "vanvera", "vapore", "varano", "varcato", "variante", "vasca", "vedetta", "vedova", "veduto",
39785"vegetale", "veicolo", "velcro", "velina", "velluto", "veloce", "venato", "vendemmia", "vento", "verace",
39786"verbale", "vergogna", "verifica", "vero", "verruca", "verticale", "vescica", "vessillo", "vestale", "veterano",
39787"vetrina", "vetusto", "viandante", "vibrante", "vicenda", "vichingo", "vicinanza", "vidimare", "vigilia", "vigneto",
39788"vigore", "vile", "villano", "vimini", "vincitore", "viola", "vipera", "virgola", "virologo", "virulento",
39789"viscoso", "visione", "vispo", "vissuto", "visura", "vita", "vitello", "vittima", "vivanda", "vivido",
39790"viziare", "voce", "voga", "volatile", "volere", "volpe", "voragine", "vulcano", "zampogna", "zanna",
39791"zappato", "zattera", "zavorra", "zefiro", "zelante", "zelo", "zenzero", "zerbino", "zibetto", "zinco",
39792"zircone", "zitto", "zolla", "zotico", "zucchero", "zufolo", "zulu", "zuppa"]
dc55c6b0 39793</script>
ab78acc6 39794 <script>/*
3af2954a
IC
39795 * Copyright (c) 2013 Pavol Rusnak
39796 *
39797 * Permission is hereby granted, free of charge, to any person obtaining a copy of
39798 * this software and associated documentation files (the "Software"), to deal in
39799 * the Software without restriction, including without limitation the rights to
39800 * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
39801 * of the Software, and to permit persons to whom the Software is furnished to do
39802 * so, subject to the following conditions:
39803 *
39804 * The above copyright notice and this permission notice shall be included in all
39805 * copies or substantial portions of the Software.
39806 *
39807 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
39808 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
39809 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
39810 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
39811 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
39812 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
39813 */
39814
39815/*
39816 * Javascript port from python by Ian Coleman
39817 *
80c4dd2a
IC
39818 * Requires code from sjcl
39819 * https://github.com/bitwiseshiftleft/sjcl
3af2954a
IC
39820 */
39821
39822var Mnemonic = function(language) {
39823
39824 var PBKDF2_ROUNDS = 2048;
39825 var RADIX = 2048;
39826
39827 var self = this;
39828 var wordlist = [];
39829
80c4dd2a
IC
39830 var hmacSHA512 = function(key) {
39831 var hasher = new sjcl.misc.hmac(key, sjcl.hash.sha512);
39832 this.encrypt = function() {
39833 return hasher.encrypt.apply(hasher, arguments);
39834 };
39835 };
39836
3af2954a
IC
39837 function init() {
39838 wordlist = WORDLISTS[language];
39839 if (wordlist.length != RADIX) {
39840 err = 'Wordlist should contain ' + RADIX + ' words, but it contains ' + wordlist.length + ' words.';
39841 throw err;
39842 }
39843 }
39844
39845 self.generate = function(strength) {
39846 strength = strength || 128;
39847 var r = strength % 32;
39848 if (r > 0) {
39849 throw 'Strength should be divisible by 32, but it is not (' + r + ').';
39850 }
39851 var hasStrongCrypto = 'crypto' in window && window['crypto'] !== null;
39852 if (!hasStrongCrypto) {
39853 throw 'Mnemonic should be generated with strong randomness, but crypto.getRandomValues is unavailable';
39854 }
39855 var buffer = new Uint8Array(strength / 8);
39856 var data = crypto.getRandomValues(buffer);
39857 return self.toMnemonic(data);
39858 }
39859
80c4dd2a
IC
39860 self.toMnemonic = function(byteArray) {
39861 if (byteArray.length % 4 > 0) {
39862 throw 'Data length in bits should be divisible by 32, but it is not (' + byteArray.length + ' bytes = ' + byteArray.length*8 + ' bits).'
3af2954a
IC
39863 }
39864
39865 //h = hashlib.sha256(data).hexdigest()
80c4dd2a
IC
39866 var data = byteArrayToWordArray(byteArray);
39867 var hash = sjcl.hash.sha256.hash(data);
39868 var h = sjcl.codec.hex.fromBits(hash);
3af2954a
IC
39869
39870 // b is a binary string, eg '00111010101100...'
39871 //b = bin(int(binascii.hexlify(data), 16))[2:].zfill(len(data) * 8) + \
39872 // bin(int(h, 16))[2:].zfill(256)[:len(data) * 8 / 32]
39873 //
39874 // a = bin(int(binascii.hexlify(data), 16))[2:].zfill(len(data) * 8)
39875 // c = bin(int(h, 16))[2:].zfill(256)
39876 // d = c[:len(data) * 8 / 32]
80c4dd2a
IC
39877 var a = byteArrayToBinaryString(byteArray);
39878 var c = zfill(hexStringToBinaryString(h), 256);
39879 var d = c.substring(0, byteArray.length * 8 / 32);
3af2954a
IC
39880 // b = line1 + line2
39881 var b = a + d;
39882
39883 var result = [];
39884 var blen = b.length / 11;
39885 for (var i=0; i<blen; i++) {
39886 var idx = parseInt(b.substring(i * 11, (i + 1) * 11), 2);
39887 result.push(wordlist[idx]);
39888 }
0515eeec 39889 return self.joinWords(result);
3af2954a
IC
39890 }
39891
39892 self.check = function(mnemonic) {
0515eeec 39893 var mnemonic = self.splitWords(mnemonic);
18abe53b 39894 if (mnemonic.length == 0 || mnemonic.length % 3 > 0) {
3af2954a
IC
39895 return false
39896 }
39897 // idx = map(lambda x: bin(self.wordlist.index(x))[2:].zfill(11), mnemonic)
39898 var idx = [];
39899 for (var i=0; i<mnemonic.length; i++) {
39900 var word = mnemonic[i];
39901 var wordIndex = wordlist.indexOf(word);
39902 if (wordIndex == -1) {
39903 return false;
39904 }
39905 var binaryIndex = zfill(wordIndex.toString(2), 11);
39906 idx.push(binaryIndex);
39907 }
39908 var b = idx.join('');
39909 var l = b.length;
39910 //d = b[:l / 33 * 32]
39911 //h = b[-l / 33:]
39912 var d = b.substring(0, l / 33 * 32);
39913 var h = b.substring(l - l / 33, l);
39914 //nd = binascii.unhexlify(hex(int(d, 2))[2:].rstrip('L').zfill(l / 33 * 8))
80c4dd2a 39915 var nd = binaryStringToWordArray(d);
3af2954a 39916 //nh = bin(int(hashlib.sha256(nd).hexdigest(), 16))[2:].zfill(256)[:l / 33]
80c4dd2a
IC
39917 var ndHash = sjcl.hash.sha256.hash(nd);
39918 var ndHex = sjcl.codec.hex.fromBits(ndHash);
39919 var ndBstr = zfill(hexStringToBinaryString(ndHex), 256);
3af2954a
IC
39920 var nh = ndBstr.substring(0,l/33);
39921 return h == nh;
39922 }
39923
39924 self.toSeed = function(mnemonic, passphrase) {
39925 passphrase = passphrase || '';
599fb39e
IC
39926 mnemonic = self.joinWords(self.splitWords(mnemonic)); // removes duplicate blanks
39927 var mnemonicNormalized = self.normalizeString(mnemonic);
3af2954a
IC
39928 passphrase = self.normalizeString(passphrase)
39929 passphrase = "mnemonic" + passphrase;
599fb39e 39930 var mnemonicBits = sjcl.codec.utf8String.toBits(mnemonicNormalized);
80c4dd2a
IC
39931 var passphraseBits = sjcl.codec.utf8String.toBits(passphrase);
39932 var result = sjcl.misc.pbkdf2(mnemonicBits, passphraseBits, PBKDF2_ROUNDS, 512, hmacSHA512);
39933 var hashHex = sjcl.codec.hex.fromBits(result);
39934 return hashHex;
3af2954a
IC
39935 }
39936
0515eeec
IC
39937 self.splitWords = function(mnemonic) {
39938 return mnemonic.split(/\s/g).filter(function(x) { return x.length; });
39939 }
39940
39941 self.joinWords = function(words) {
39942 // Set space correctly depending on the language
39943 // see https://github.com/bitcoin/bips/blob/master/bip-0039/bip-0039-wordlists.md#japanese
39944 var space = " ";
39945 if (language == "japanese") {
39946 space = "\u3000"; // ideographic space
39947 }
39948 return words.join(space);
39949 }
39950
3af2954a
IC
39951 self.normalizeString = function(str) {
39952 if (typeof str.normalize == "function") {
39953 return str.normalize("NFKD");
39954 }
39955 else {
39956 // TODO decide how to handle this in the future.
39957 // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize
39958 return str;
39959 }
39960 }
39961
80c4dd2a
IC
39962 function byteArrayToWordArray(data) {
39963 var a = [];
39964 for (var i=0; i<data.length/4; i++) {
39965 v = 0;
39966 v += data[i*4 + 0] << 8 * 3;
39967 v += data[i*4 + 1] << 8 * 2;
39968 v += data[i*4 + 2] << 8 * 1;
39969 v += data[i*4 + 3] << 8 * 0;
39970 a.push(v);
39971 }
39972 return a;
39973 }
39974
3af2954a
IC
39975 function byteArrayToBinaryString(data) {
39976 var bin = "";
39977 for (var i=0; i<data.length; i++) {
39978 bin += zfill(data[i].toString(2), 8);
39979 }
39980 return bin;
39981 }
39982
80c4dd2a
IC
39983 function hexStringToBinaryString(hexString) {
39984 binaryString = "";
39985 for (var i=0; i<hexString.length; i++) {
39986 binaryString += zfill(parseInt(hexString[i], 16).toString(2),4);
39987 }
39988 return binaryString;
39989 }
39990
39991 function binaryStringToWordArray(binary) {
39992 var aLen = binary.length / 32;
39993 var a = [];
39994 for (var i=0; i<aLen; i++) {
39995 var valueStr = binary.substring(0,32);
3af2954a 39996 var value = parseInt(valueStr, 2);
80c4dd2a
IC
39997 a.push(value);
39998 binary = binary.slice(32);
3af2954a 39999 }
80c4dd2a 40000 return a;
3af2954a
IC
40001 }
40002
40003 // Pad a numeric string on the left with zero digits until the given width
40004 // is reached.
40005 // Note this differs to the python implementation because it does not
40006 // handle numbers starting with a sign.
40007 function zfill(source, length) {
40008 source = source.toString();
40009 while (source.length < length) {
40010 source = '0' + source;
40011 }
40012 return source;
40013 }
40014
40015 init();
ebd8d4e8 40016
3af2954a 40017}
dc55c6b0 40018</script>
95f04905
IC
40019 <script>/*
40020 JavaScript BigInteger library version 0.9.1
40021 http://silentmatt.com/biginteger/
18abe53b 40022
95f04905
IC
40023 Copyright (c) 2009 Matthew Crumley <email@matthewcrumley.com>
40024 Copyright (c) 2010,2011 by John Tobey <John.Tobey@gmail.com>
40025 Licensed under the MIT license.
c6624d51 40026
95f04905
IC
40027 Support for arbitrary internal representation base was added by
40028 Vitaly Magerya.
40029*/
18abe53b 40030
95f04905
IC
40031/*
40032 File: biginteger.js
18abe53b 40033
95f04905 40034 Exports:
18abe53b 40035
95f04905
IC
40036 <BigInteger>
40037*/
40038(function(exports) {
40039"use strict";
40040/*
40041 Class: BigInteger
40042 An arbitrarily-large integer.
18abe53b 40043
95f04905
IC
40044 <BigInteger> objects should be considered immutable. None of the "built-in"
40045 methods modify *this* or their arguments. All properties should be
40046 considered private.
18abe53b 40047
95f04905
IC
40048 All the methods of <BigInteger> instances can be called "statically". The
40049 static versions are convenient if you don't already have a <BigInteger>
40050 object.
18abe53b 40051
95f04905 40052 As an example, these calls are equivalent.
18abe53b 40053
95f04905
IC
40054 > BigInteger(4).multiply(5); // returns BigInteger(20);
40055 > BigInteger.multiply(4, 5); // returns BigInteger(20);
18abe53b 40056
95f04905
IC
40057 > var a = 42;
40058 > var a = BigInteger.toJSValue("0b101010"); // Not completely useless...
40059*/
c6624d51 40060
95f04905 40061var CONSTRUCT = {}; // Unique token to call "private" version of constructor
c6624d51
IC
40062
40063/*
40064 Constructor: BigInteger()
40065 Convert a value to a <BigInteger>.
40066
40067 Although <BigInteger()> is the constructor for <BigInteger> objects, it is
40068 best not to call it as a constructor. If *n* is a <BigInteger> object, it is
40069 simply returned as-is. Otherwise, <BigInteger()> is equivalent to <parse>
40070 without a radix argument.
40071
40072 > var n0 = BigInteger(); // Same as <BigInteger.ZERO>
40073 > var n1 = BigInteger("123"); // Create a new <BigInteger> with value 123
40074 > var n2 = BigInteger(123); // Create a new <BigInteger> with value 123
40075 > var n3 = BigInteger(n2); // Return n2, unchanged
40076
40077 The constructor form only takes an array and a sign. *n* must be an
40078 array of numbers in little-endian order, where each digit is between 0
40079 and BigInteger.base. The second parameter sets the sign: -1 for
40080 negative, +1 for positive, or 0 for zero. The array is *not copied and
40081 may be modified*. If the array contains only zeros, the sign parameter
40082 is ignored and is forced to zero.
40083
40084 > new BigInteger([5], -1): create a new BigInteger with value -5
40085
40086 Parameters:
40087
40088 n - Value to convert to a <BigInteger>.
40089
40090 Returns:
40091
40092 A <BigInteger> value.
40093
40094 See Also:
40095
40096 <parse>, <BigInteger>
40097*/
40098function BigInteger(n, s, token) {
40099 if (token !== CONSTRUCT) {
40100 if (n instanceof BigInteger) {
40101 return n;
40102 }
40103 else if (typeof n === "undefined") {
40104 return ZERO;
40105 }
40106 return BigInteger.parse(n);
40107 }
40108
40109 n = n || []; // Provide the nullary constructor for subclasses.
40110 while (n.length && !n[n.length - 1]) {
40111 --n.length;
40112 }
40113 this._d = n;
40114 this._s = n.length ? (s || 1) : 0;
40115}
40116
40117BigInteger._construct = function(n, s) {
40118 return new BigInteger(n, s, CONSTRUCT);
40119};
40120
40121// Base-10 speedup hacks in parse, toString, exp10 and log functions
40122// require base to be a power of 10. 10^7 is the largest such power
40123// that won't cause a precision loss when digits are multiplied.
40124var BigInteger_base = 10000000;
40125var BigInteger_base_log10 = 7;
40126
40127BigInteger.base = BigInteger_base;
40128BigInteger.base_log10 = BigInteger_base_log10;
40129
40130var ZERO = new BigInteger([], 0, CONSTRUCT);
40131// Constant: ZERO
40132// <BigInteger> 0.
40133BigInteger.ZERO = ZERO;
40134
40135var ONE = new BigInteger([1], 1, CONSTRUCT);
40136// Constant: ONE
40137// <BigInteger> 1.
40138BigInteger.ONE = ONE;
40139
40140var M_ONE = new BigInteger(ONE._d, -1, CONSTRUCT);
40141// Constant: M_ONE
40142// <BigInteger> -1.
40143BigInteger.M_ONE = M_ONE;
40144
40145// Constant: _0
40146// Shortcut for <ZERO>.
40147BigInteger._0 = ZERO;
40148
40149// Constant: _1
40150// Shortcut for <ONE>.
40151BigInteger._1 = ONE;
40152
40153/*
40154 Constant: small
40155 Array of <BigIntegers> from 0 to 36.
40156
40157 These are used internally for parsing, but useful when you need a "small"
40158 <BigInteger>.
40159
40160 See Also:
40161
40162 <ZERO>, <ONE>, <_0>, <_1>
40163*/
40164BigInteger.small = [
40165 ZERO,
40166 ONE,
40167 /* Assuming BigInteger_base > 36 */
40168 new BigInteger( [2], 1, CONSTRUCT),
40169 new BigInteger( [3], 1, CONSTRUCT),
40170 new BigInteger( [4], 1, CONSTRUCT),
40171 new BigInteger( [5], 1, CONSTRUCT),
40172 new BigInteger( [6], 1, CONSTRUCT),
40173 new BigInteger( [7], 1, CONSTRUCT),
40174 new BigInteger( [8], 1, CONSTRUCT),
40175 new BigInteger( [9], 1, CONSTRUCT),
40176 new BigInteger([10], 1, CONSTRUCT),
40177 new BigInteger([11], 1, CONSTRUCT),
40178 new BigInteger([12], 1, CONSTRUCT),
40179 new BigInteger([13], 1, CONSTRUCT),
40180 new BigInteger([14], 1, CONSTRUCT),
40181 new BigInteger([15], 1, CONSTRUCT),
40182 new BigInteger([16], 1, CONSTRUCT),
40183 new BigInteger([17], 1, CONSTRUCT),
40184 new BigInteger([18], 1, CONSTRUCT),
40185 new BigInteger([19], 1, CONSTRUCT),
40186 new BigInteger([20], 1, CONSTRUCT),
40187 new BigInteger([21], 1, CONSTRUCT),
40188 new BigInteger([22], 1, CONSTRUCT),
40189 new BigInteger([23], 1, CONSTRUCT),
40190 new BigInteger([24], 1, CONSTRUCT),
40191 new BigInteger([25], 1, CONSTRUCT),
40192 new BigInteger([26], 1, CONSTRUCT),
40193 new BigInteger([27], 1, CONSTRUCT),
40194 new BigInteger([28], 1, CONSTRUCT),
40195 new BigInteger([29], 1, CONSTRUCT),
40196 new BigInteger([30], 1, CONSTRUCT),
40197 new BigInteger([31], 1, CONSTRUCT),
40198 new BigInteger([32], 1, CONSTRUCT),
40199 new BigInteger([33], 1, CONSTRUCT),
40200 new BigInteger([34], 1, CONSTRUCT),
40201 new BigInteger([35], 1, CONSTRUCT),
40202 new BigInteger([36], 1, CONSTRUCT)
40203];
40204
40205// Used for parsing/radix conversion
40206BigInteger.digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ".split("");
40207
40208/*
40209 Method: toString
40210 Convert a <BigInteger> to a string.
40211
40212 When *base* is greater than 10, letters are upper case.
40213
40214 Parameters:
40215
40216 base - Optional base to represent the number in (default is base 10).
40217 Must be between 2 and 36 inclusive, or an Error will be thrown.
40218
40219 Returns:
40220
40221 The string representation of the <BigInteger>.
40222*/
40223BigInteger.prototype.toString = function(base) {
40224 base = +base || 10;
40225 if (base < 2 || base > 36) {
40226 throw new Error("illegal radix " + base + ".");
40227 }
40228 if (this._s === 0) {
40229 return "0";
40230 }
40231 if (base === 10) {
40232 var str = this._s < 0 ? "-" : "";
40233 str += this._d[this._d.length - 1].toString();
40234 for (var i = this._d.length - 2; i >= 0; i--) {
40235 var group = this._d[i].toString();
40236 while (group.length < BigInteger_base_log10) group = '0' + group;
40237 str += group;
40238 }
40239 return str;
40240 }
40241 else {
40242 var numerals = BigInteger.digits;
40243 base = BigInteger.small[base];
40244 var sign = this._s;
40245
40246 var n = this.abs();
40247 var digits = [];
40248 var digit;
40249
40250 while (n._s !== 0) {
40251 var divmod = n.divRem(base);
40252 n = divmod[0];
40253 digit = divmod[1];
40254 // TODO: This could be changed to unshift instead of reversing at the end.
40255 // Benchmark both to compare speeds.
40256 digits.push(numerals[digit.valueOf()]);
40257 }
40258 return (sign < 0 ? "-" : "") + digits.reverse().join("");
40259 }
40260};
40261
40262// Verify strings for parsing
40263BigInteger.radixRegex = [
40264 /^$/,
40265 /^$/,
40266 /^[01]*$/,
40267 /^[012]*$/,
40268 /^[0-3]*$/,
40269 /^[0-4]*$/,
40270 /^[0-5]*$/,
40271 /^[0-6]*$/,
40272 /^[0-7]*$/,
40273 /^[0-8]*$/,
40274 /^[0-9]*$/,
40275 /^[0-9aA]*$/,
40276 /^[0-9abAB]*$/,
40277 /^[0-9abcABC]*$/,
40278 /^[0-9a-dA-D]*$/,
40279 /^[0-9a-eA-E]*$/,
40280 /^[0-9a-fA-F]*$/,
40281 /^[0-9a-gA-G]*$/,
40282 /^[0-9a-hA-H]*$/,
40283 /^[0-9a-iA-I]*$/,
40284 /^[0-9a-jA-J]*$/,
40285 /^[0-9a-kA-K]*$/,
40286 /^[0-9a-lA-L]*$/,
40287 /^[0-9a-mA-M]*$/,
40288 /^[0-9a-nA-N]*$/,
40289 /^[0-9a-oA-O]*$/,
40290 /^[0-9a-pA-P]*$/,
40291 /^[0-9a-qA-Q]*$/,
40292 /^[0-9a-rA-R]*$/,
40293 /^[0-9a-sA-S]*$/,
40294 /^[0-9a-tA-T]*$/,
40295 /^[0-9a-uA-U]*$/,
40296 /^[0-9a-vA-V]*$/,
40297 /^[0-9a-wA-W]*$/,
40298 /^[0-9a-xA-X]*$/,
40299 /^[0-9a-yA-Y]*$/,
40300 /^[0-9a-zA-Z]*$/
40301];
40302
40303/*
40304 Function: parse
40305 Parse a string into a <BigInteger>.
40306
40307 *base* is optional but, if provided, must be from 2 to 36 inclusive. If
40308 *base* is not provided, it will be guessed based on the leading characters
40309 of *s* as follows:
40310
40311 - "0x" or "0X": *base* = 16
40312 - "0c" or "0C": *base* = 8
40313 - "0b" or "0B": *base* = 2
40314 - else: *base* = 10
40315
40316 If no base is provided, or *base* is 10, the number can be in exponential
40317 form. For example, these are all valid:
40318
40319 > BigInteger.parse("1e9"); // Same as "1000000000"
40320 > BigInteger.parse("1.234*10^3"); // Same as 1234
40321 > BigInteger.parse("56789 * 10 ** -2"); // Same as 567
40322
40323 If any characters fall outside the range defined by the radix, an exception
40324 will be thrown.
40325
40326 Parameters:
40327
40328 s - The string to parse.
40329 base - Optional radix (default is to guess based on *s*).
40330
40331 Returns:
40332
40333 a <BigInteger> instance.
40334*/
40335BigInteger.parse = function(s, base) {
40336 // Expands a number in exponential form to decimal form.
40337 // expandExponential("-13.441*10^5") === "1344100";
40338 // expandExponential("1.12300e-1") === "0.112300";
40339 // expandExponential(1000000000000000000000000000000) === "1000000000000000000000000000000";
40340 function expandExponential(str) {
40341 str = str.replace(/\s*[*xX]\s*10\s*(\^|\*\*)\s*/, "e");
40342
40343 return str.replace(/^([+\-])?(\d+)\.?(\d*)[eE]([+\-]?\d+)$/, function(x, s, n, f, c) {
40344 c = +c;
40345 var l = c < 0;
40346 var i = n.length + c;
40347 x = (l ? n : f).length;
40348 c = ((c = Math.abs(c)) >= x ? c - x + l : 0);
40349 var z = (new Array(c + 1)).join("0");
40350 var r = n + f;
40351 return (s || "") + (l ? r = z + r : r += z).substr(0, i += l ? z.length : 0) + (i < r.length ? "." + r.substr(i) : "");
40352 });
40353 }
40354
40355 s = s.toString();
40356 if (typeof base === "undefined" || +base === 10) {
40357 s = expandExponential(s);
40358 }
40359
40360 var prefixRE;
40361 if (typeof base === "undefined") {
40362 prefixRE = '0[xcb]';
40363 }
40364 else if (base == 16) {
40365 prefixRE = '0x';
40366 }
40367 else if (base == 8) {
40368 prefixRE = '0c';
40369 }
40370 else if (base == 2) {
40371 prefixRE = '0b';
40372 }
40373 else {
40374 prefixRE = '';
40375 }
40376 var parts = new RegExp('^([+\\-]?)(' + prefixRE + ')?([0-9a-z]*)(?:\\.\\d*)?$', 'i').exec(s);
40377 if (parts) {
40378 var sign = parts[1] || "+";
40379 var baseSection = parts[2] || "";
40380 var digits = parts[3] || "";
40381
40382 if (typeof base === "undefined") {
40383 // Guess base
40384 if (baseSection === "0x" || baseSection === "0X") { // Hex
40385 base = 16;
40386 }
40387 else if (baseSection === "0c" || baseSection === "0C") { // Octal
40388 base = 8;
40389 }
40390 else if (baseSection === "0b" || baseSection === "0B") { // Binary
40391 base = 2;
40392 }
40393 else {
40394 base = 10;
40395 }
40396 }
40397 else if (base < 2 || base > 36) {
40398 throw new Error("Illegal radix " + base + ".");
40399 }
40400
40401 base = +base;
40402
40403 // Check for digits outside the range
40404 if (!(BigInteger.radixRegex[base].test(digits))) {
40405 throw new Error("Bad digit for radix " + base);
40406 }
40407
40408 // Strip leading zeros, and convert to array
40409 digits = digits.replace(/^0+/, "").split("");
40410 if (digits.length === 0) {
40411 return ZERO;
40412 }
40413
40414 // Get the sign (we know it's not zero)
40415 sign = (sign === "-") ? -1 : 1;
40416
40417 // Optimize 10
40418 if (base == 10) {
40419 var d = [];
40420 while (digits.length >= BigInteger_base_log10) {
40421 d.push(parseInt(digits.splice(digits.length-BigInteger.base_log10, BigInteger.base_log10).join(''), 10));
40422 }
40423 d.push(parseInt(digits.join(''), 10));
40424 return new BigInteger(d, sign, CONSTRUCT);
40425 }
40426
40427 // Do the conversion
40428 var d = ZERO;
40429 base = BigInteger.small[base];
40430 var small = BigInteger.small;
40431 for (var i = 0; i < digits.length; i++) {
40432 d = d.multiply(base).add(small[parseInt(digits[i], 36)]);
40433 }
40434 return new BigInteger(d._d, sign, CONSTRUCT);
40435 }
40436 else {
40437 throw new Error("Invalid BigInteger format: " + s);
40438 }
40439};
40440
40441/*
40442 Function: add
40443 Add two <BigIntegers>.
40444
40445 Parameters:
40446
40447 n - The number to add to *this*. Will be converted to a <BigInteger>.
40448
40449 Returns:
40450
40451 The numbers added together.
40452
40453 See Also:
40454
40455 <subtract>, <multiply>, <quotient>, <next>
40456*/
40457BigInteger.prototype.add = function(n) {
40458 if (this._s === 0) {
40459 return BigInteger(n);
40460 }
40461
40462 n = BigInteger(n);
40463 if (n._s === 0) {
40464 return this;
40465 }
40466 if (this._s !== n._s) {
40467 n = n.negate();
40468 return this.subtract(n);
40469 }
40470
40471 var a = this._d;
40472 var b = n._d;
40473 var al = a.length;
40474 var bl = b.length;
40475 var sum = new Array(Math.max(al, bl) + 1);
40476 var size = Math.min(al, bl);
40477 var carry = 0;
40478 var digit;
40479
40480 for (var i = 0; i < size; i++) {
40481 digit = a[i] + b[i] + carry;
40482 sum[i] = digit % BigInteger_base;
40483 carry = (digit / BigInteger_base) | 0;
40484 }
40485 if (bl > al) {
40486 a = b;
40487 al = bl;
40488 }
40489 for (i = size; carry && i < al; i++) {
40490 digit = a[i] + carry;
40491 sum[i] = digit % BigInteger_base;
40492 carry = (digit / BigInteger_base) | 0;
40493 }
40494 if (carry) {
40495 sum[i] = carry;
40496 }
40497
40498 for ( ; i < al; i++) {
40499 sum[i] = a[i];
40500 }
40501
40502 return new BigInteger(sum, this._s, CONSTRUCT);
40503};
40504
40505/*
40506 Function: negate
40507 Get the additive inverse of a <BigInteger>.
40508
40509 Returns:
40510
40511 A <BigInteger> with the same magnatude, but with the opposite sign.
40512
40513 See Also:
40514
40515 <abs>
40516*/
40517BigInteger.prototype.negate = function() {
40518 return new BigInteger(this._d, (-this._s) | 0, CONSTRUCT);
40519};
40520
40521/*
40522 Function: abs
40523 Get the absolute value of a <BigInteger>.
40524
40525 Returns:
40526
40527 A <BigInteger> with the same magnatude, but always positive (or zero).
40528
40529 See Also:
40530
40531 <negate>
40532*/
40533BigInteger.prototype.abs = function() {
40534 return (this._s < 0) ? this.negate() : this;
40535};
40536
40537/*
40538 Function: subtract
40539 Subtract two <BigIntegers>.
40540
40541 Parameters:
40542
40543 n - The number to subtract from *this*. Will be converted to a <BigInteger>.
40544
40545 Returns:
40546
40547 The *n* subtracted from *this*.
40548
40549 See Also:
40550
40551 <add>, <multiply>, <quotient>, <prev>
40552*/
40553BigInteger.prototype.subtract = function(n) {
40554 if (this._s === 0) {
40555 return BigInteger(n).negate();
40556 }
40557
40558 n = BigInteger(n);
40559 if (n._s === 0) {
40560 return this;
40561 }
40562 if (this._s !== n._s) {
40563 n = n.negate();
40564 return this.add(n);
40565 }
40566
40567 var m = this;
40568 // negative - negative => -|a| - -|b| => -|a| + |b| => |b| - |a|
40569 if (this._s < 0) {
40570 m = new BigInteger(n._d, 1, CONSTRUCT);
40571 n = new BigInteger(this._d, 1, CONSTRUCT);
40572 }
40573
40574 // Both are positive => a - b
40575 var sign = m.compareAbs(n);
40576 if (sign === 0) {
40577 return ZERO;
40578 }
40579 else if (sign < 0) {
40580 // swap m and n
40581 var t = n;
40582 n = m;
40583 m = t;
40584 }
40585
40586 // a > b
40587 var a = m._d;
40588 var b = n._d;
40589 var al = a.length;
40590 var bl = b.length;
40591 var diff = new Array(al); // al >= bl since a > b
40592 var borrow = 0;
40593 var i;
40594 var digit;
40595
40596 for (i = 0; i < bl; i++) {
40597 digit = a[i] - borrow - b[i];
40598 if (digit < 0) {
40599 digit += BigInteger_base;
40600 borrow = 1;
40601 }
40602 else {
40603 borrow = 0;
40604 }
40605 diff[i] = digit;
40606 }
40607 for (i = bl; i < al; i++) {
40608 digit = a[i] - borrow;
40609 if (digit < 0) {
40610 digit += BigInteger_base;
40611 }
40612 else {
40613 diff[i++] = digit;
40614 break;
40615 }
40616 diff[i] = digit;
40617 }
40618 for ( ; i < al; i++) {
40619 diff[i] = a[i];
40620 }
40621
40622 return new BigInteger(diff, sign, CONSTRUCT);
40623};
40624
40625(function() {
40626 function addOne(n, sign) {
40627 var a = n._d;
40628 var sum = a.slice();
40629 var carry = true;
40630 var i = 0;
40631
40632 while (true) {
40633 var digit = (a[i] || 0) + 1;
40634 sum[i] = digit % BigInteger_base;
40635 if (digit <= BigInteger_base - 1) {
40636 break;
40637 }
40638 ++i;
40639 }
40640
40641 return new BigInteger(sum, sign, CONSTRUCT);
40642 }
40643
40644 function subtractOne(n, sign) {
40645 var a = n._d;
40646 var sum = a.slice();
40647 var borrow = true;
40648 var i = 0;
40649
40650 while (true) {
40651 var digit = (a[i] || 0) - 1;
40652 if (digit < 0) {
40653 sum[i] = digit + BigInteger_base;
40654 }
40655 else {
40656 sum[i] = digit;
40657 break;
40658 }
40659 ++i;
40660 }
40661
40662 return new BigInteger(sum, sign, CONSTRUCT);
40663 }
40664
40665 /*
40666 Function: next
40667 Get the next <BigInteger> (add one).
40668
40669 Returns:
40670
40671 *this* + 1.
40672
40673 See Also:
40674
40675 <add>, <prev>
40676 */
40677 BigInteger.prototype.next = function() {
40678 switch (this._s) {
40679 case 0:
40680 return ONE;
40681 case -1:
40682 return subtractOne(this, -1);
40683 // case 1:
40684 default:
40685 return addOne(this, 1);
40686 }
40687 };
40688
40689 /*
40690 Function: prev
40691 Get the previous <BigInteger> (subtract one).
40692
40693 Returns:
40694
40695 *this* - 1.
40696
40697 See Also:
40698
40699 <next>, <subtract>
40700 */
40701 BigInteger.prototype.prev = function() {
40702 switch (this._s) {
40703 case 0:
40704 return M_ONE;
40705 case -1:
40706 return addOne(this, -1);
40707 // case 1:
40708 default:
40709 return subtractOne(this, 1);
40710 }
40711 };
40712})();
40713
40714/*
40715 Function: compareAbs
40716 Compare the absolute value of two <BigIntegers>.
40717
40718 Calling <compareAbs> is faster than calling <abs> twice, then <compare>.
40719
40720 Parameters:
40721
40722 n - The number to compare to *this*. Will be converted to a <BigInteger>.
40723
40724 Returns:
40725
40726 -1, 0, or +1 if *|this|* is less than, equal to, or greater than *|n|*.
40727
40728 See Also:
40729
40730 <compare>, <abs>
40731*/
40732BigInteger.prototype.compareAbs = function(n) {
40733 if (this === n) {
40734 return 0;
40735 }
40736
40737 if (!(n instanceof BigInteger)) {
40738 if (!isFinite(n)) {
40739 return(isNaN(n) ? n : -1);
40740 }
40741 n = BigInteger(n);
40742 }
40743
40744 if (this._s === 0) {
40745 return (n._s !== 0) ? -1 : 0;
40746 }
40747 if (n._s === 0) {
40748 return 1;
40749 }
40750
40751 var l = this._d.length;
40752 var nl = n._d.length;
40753 if (l < nl) {
40754 return -1;
40755 }
40756 else if (l > nl) {
40757 return 1;
40758 }
40759
40760 var a = this._d;
40761 var b = n._d;
40762 for (var i = l-1; i >= 0; i--) {
40763 if (a[i] !== b[i]) {
40764 return a[i] < b[i] ? -1 : 1;
40765 }
40766 }
40767
40768 return 0;
40769};
40770
40771/*
40772 Function: compare
40773 Compare two <BigIntegers>.
40774
40775 Parameters:
40776
40777 n - The number to compare to *this*. Will be converted to a <BigInteger>.
40778
40779 Returns:
40780
40781 -1, 0, or +1 if *this* is less than, equal to, or greater than *n*.
40782
40783 See Also:
40784
40785 <compareAbs>, <isPositive>, <isNegative>, <isUnit>
40786*/
40787BigInteger.prototype.compare = function(n) {
40788 if (this === n) {
40789 return 0;
40790 }
40791
40792 n = BigInteger(n);
40793
40794 if (this._s === 0) {
40795 return -n._s;
40796 }
40797
40798 if (this._s === n._s) { // both positive or both negative
40799 var cmp = this.compareAbs(n);
40800 return cmp * this._s;
40801 }
40802 else {
40803 return this._s;
40804 }
40805};
40806
40807/*
40808 Function: isUnit
40809 Return true iff *this* is either 1 or -1.
40810
40811 Returns:
40812
40813 true if *this* compares equal to <BigInteger.ONE> or <BigInteger.M_ONE>.
40814
40815 See Also:
40816
40817 <isZero>, <isNegative>, <isPositive>, <compareAbs>, <compare>,
40818 <BigInteger.ONE>, <BigInteger.M_ONE>
40819*/
40820BigInteger.prototype.isUnit = function() {
40821 return this === ONE ||
40822 this === M_ONE ||
40823 (this._d.length === 1 && this._d[0] === 1);
40824};
40825
40826/*
40827 Function: multiply
40828 Multiply two <BigIntegers>.
40829
40830 Parameters:
40831
40832 n - The number to multiply *this* by. Will be converted to a
40833 <BigInteger>.
40834
40835 Returns:
40836
40837 The numbers multiplied together.
40838
40839 See Also:
40840
40841 <add>, <subtract>, <quotient>, <square>
40842*/
40843BigInteger.prototype.multiply = function(n) {
40844 // TODO: Consider adding Karatsuba multiplication for large numbers
40845 if (this._s === 0) {
40846 return ZERO;
40847 }
40848
40849 n = BigInteger(n);
40850 if (n._s === 0) {
40851 return ZERO;
40852 }
40853 if (this.isUnit()) {
40854 if (this._s < 0) {
40855 return n.negate();
40856 }
40857 return n;
40858 }
40859 if (n.isUnit()) {
40860 if (n._s < 0) {
40861 return this.negate();
40862 }
40863 return this;
40864 }
40865 if (this === n) {
40866 return this.square();
40867 }
40868
40869 var r = (this._d.length >= n._d.length);
40870 var a = (r ? this : n)._d; // a will be longer than b
40871 var b = (r ? n : this)._d;
40872 var al = a.length;
40873 var bl = b.length;
40874
40875 var pl = al + bl;
40876 var partial = new Array(pl);
40877 var i;
40878 for (i = 0; i < pl; i++) {
40879 partial[i] = 0;
40880 }
40881
40882 for (i = 0; i < bl; i++) {
40883 var carry = 0;
40884 var bi = b[i];
40885 var jlimit = al + i;
40886 var digit;
40887 for (var j = i; j < jlimit; j++) {
40888 digit = partial[j] + bi * a[j - i] + carry;
40889 carry = (digit / BigInteger_base) | 0;
40890 partial[j] = (digit % BigInteger_base) | 0;
40891 }
40892 if (carry) {
40893 digit = partial[j] + carry;
40894 carry = (digit / BigInteger_base) | 0;
40895 partial[j] = digit % BigInteger_base;
40896 }
40897 }
40898 return new BigInteger(partial, this._s * n._s, CONSTRUCT);
40899};
40900
40901// Multiply a BigInteger by a single-digit native number
40902// Assumes that this and n are >= 0
40903// This is not really intended to be used outside the library itself
40904BigInteger.prototype.multiplySingleDigit = function(n) {
40905 if (n === 0 || this._s === 0) {
40906 return ZERO;
40907 }
40908 if (n === 1) {
40909 return this;
40910 }
40911
40912 var digit;
40913 if (this._d.length === 1) {
40914 digit = this._d[0] * n;
40915 if (digit >= BigInteger_base) {
40916 return new BigInteger([(digit % BigInteger_base)|0,
40917 (digit / BigInteger_base)|0], 1, CONSTRUCT);
40918 }
40919 return new BigInteger([digit], 1, CONSTRUCT);
40920 }
40921
40922 if (n === 2) {
40923 return this.add(this);
40924 }
40925 if (this.isUnit()) {
40926 return new BigInteger([n], 1, CONSTRUCT);
40927 }
40928
40929 var a = this._d;
40930 var al = a.length;
40931
40932 var pl = al + 1;
40933 var partial = new Array(pl);
40934 for (var i = 0; i < pl; i++) {
40935 partial[i] = 0;
40936 }
40937
40938 var carry = 0;
40939 for (var j = 0; j < al; j++) {
40940 digit = n * a[j] + carry;
40941 carry = (digit / BigInteger_base) | 0;
40942 partial[j] = (digit % BigInteger_base) | 0;
40943 }
40944 if (carry) {
40945 partial[j] = carry;
40946 }
40947
40948 return new BigInteger(partial, 1, CONSTRUCT);
40949};
40950
40951/*
40952 Function: square
40953 Multiply a <BigInteger> by itself.
40954
40955 This is slightly faster than regular multiplication, since it removes the
40956 duplicated multiplcations.
40957
40958 Returns:
40959
40960 > this.multiply(this)
40961
40962 See Also:
40963 <multiply>
40964*/
40965BigInteger.prototype.square = function() {
40966 // Normally, squaring a 10-digit number would take 100 multiplications.
40967 // Of these 10 are unique diagonals, of the remaining 90 (100-10), 45 are repeated.
40968 // This procedure saves (N*(N-1))/2 multiplications, (e.g., 45 of 100 multiplies).
40969 // Based on code by Gary Darby, Intellitech Systems Inc., www.DelphiForFun.org
40970
40971 if (this._s === 0) {
40972 return ZERO;
40973 }
40974 if (this.isUnit()) {
40975 return ONE;
40976 }
40977
40978 var digits = this._d;
40979 var length = digits.length;
40980 var imult1 = new Array(length + length + 1);
40981 var product, carry, k;
40982 var i;
40983
40984 // Calculate diagonal
40985 for (i = 0; i < length; i++) {
40986 k = i * 2;
40987 product = digits[i] * digits[i];
40988 carry = (product / BigInteger_base) | 0;
40989 imult1[k] = product % BigInteger_base;
40990 imult1[k + 1] = carry;
40991 }
40992
40993 // Calculate repeating part
40994 for (i = 0; i < length; i++) {
40995 carry = 0;
40996 k = i * 2 + 1;
40997 for (var j = i + 1; j < length; j++, k++) {
40998 product = digits[j] * digits[i] * 2 + imult1[k] + carry;
40999 carry = (product / BigInteger_base) | 0;
41000 imult1[k] = product % BigInteger_base;
41001 }
41002 k = length + i;
41003 var digit = carry + imult1[k];
41004 carry = (digit / BigInteger_base) | 0;
41005 imult1[k] = digit % BigInteger_base;
41006 imult1[k + 1] += carry;
41007 }
41008
41009 return new BigInteger(imult1, 1, CONSTRUCT);
41010};
41011
41012/*
41013 Function: quotient
41014 Divide two <BigIntegers> and truncate towards zero.
41015
41016 <quotient> throws an exception if *n* is zero.
41017
41018 Parameters:
41019
41020 n - The number to divide *this* by. Will be converted to a <BigInteger>.
41021
41022 Returns:
41023
41024 The *this* / *n*, truncated to an integer.
41025
41026 See Also:
41027
41028 <add>, <subtract>, <multiply>, <divRem>, <remainder>
41029*/
41030BigInteger.prototype.quotient = function(n) {
41031 return this.divRem(n)[0];
41032};
41033
41034/*
41035 Function: divide
41036 Deprecated synonym for <quotient>.
41037*/
41038BigInteger.prototype.divide = BigInteger.prototype.quotient;
41039
41040/*
41041 Function: remainder
41042 Calculate the remainder of two <BigIntegers>.
41043
41044 <remainder> throws an exception if *n* is zero.
41045
41046 Parameters:
41047
41048 n - The remainder after *this* is divided *this* by *n*. Will be
41049 converted to a <BigInteger>.
41050
41051 Returns:
41052
41053 *this* % *n*.
41054
41055 See Also:
41056
41057 <divRem>, <quotient>
41058*/
41059BigInteger.prototype.remainder = function(n) {
41060 return this.divRem(n)[1];
41061};
41062
41063/*
41064 Function: divRem
41065 Calculate the integer quotient and remainder of two <BigIntegers>.
41066
41067 <divRem> throws an exception if *n* is zero.
41068
41069 Parameters:
41070
41071 n - The number to divide *this* by. Will be converted to a <BigInteger>.
41072
41073 Returns:
41074
41075 A two-element array containing the quotient and the remainder.
41076
41077 > a.divRem(b)
41078
41079 is exactly equivalent to
41080
41081 > [a.quotient(b), a.remainder(b)]
41082
41083 except it is faster, because they are calculated at the same time.
41084
41085 See Also:
41086
41087 <quotient>, <remainder>
41088*/
41089BigInteger.prototype.divRem = function(n) {
41090 n = BigInteger(n);
41091 if (n._s === 0) {
41092 throw new Error("Divide by zero");
41093 }
41094 if (this._s === 0) {
41095 return [ZERO, ZERO];
41096 }
41097 if (n._d.length === 1) {
41098 return this.divRemSmall(n._s * n._d[0]);
41099 }
41100
41101 // Test for easy cases -- |n1| <= |n2|
41102 switch (this.compareAbs(n)) {
41103 case 0: // n1 == n2
41104 return [this._s === n._s ? ONE : M_ONE, ZERO];
41105 case -1: // |n1| < |n2|
41106 return [ZERO, this];
41107 }
41108
41109 var sign = this._s * n._s;
41110 var a = n.abs();
41111 var b_digits = this._d;
41112 var b_index = b_digits.length;
41113 var digits = n._d.length;
41114 var quot = [];
41115 var guess;
41116
41117 var part = new BigInteger([], 0, CONSTRUCT);
41118
41119 while (b_index) {
41120 part._d.unshift(b_digits[--b_index]);
41121 part = new BigInteger(part._d, 1, CONSTRUCT);
41122
41123 if (part.compareAbs(n) < 0) {
41124 quot.push(0);
41125 continue;
41126 }
41127 if (part._s === 0) {
41128 guess = 0;
41129 }
41130 else {
41131 var xlen = part._d.length, ylen = a._d.length;
41132 var highx = part._d[xlen-1]*BigInteger_base + part._d[xlen-2];
41133 var highy = a._d[ylen-1]*BigInteger_base + a._d[ylen-2];
41134 if (part._d.length > a._d.length) {
41135 // The length of part._d can either match a._d length,
41136 // or exceed it by one.
41137 highx = (highx+1)*BigInteger_base;
41138 }
41139 guess = Math.ceil(highx/highy);
41140 }
41141 do {
41142 var check = a.multiplySingleDigit(guess);
41143 if (check.compareAbs(part) <= 0) {
41144 break;
41145 }
41146 guess--;
41147 } while (guess);
41148
41149 quot.push(guess);
41150 if (!guess) {
41151 continue;
41152 }
41153 var diff = part.subtract(check);
41154 part._d = diff._d.slice();
41155 }
41156
41157 return [new BigInteger(quot.reverse(), sign, CONSTRUCT),
41158 new BigInteger(part._d, this._s, CONSTRUCT)];
41159};
41160
41161// Throws an exception if n is outside of (-BigInteger.base, -1] or
41162// [1, BigInteger.base). It's not necessary to call this, since the
41163// other division functions will call it if they are able to.
41164BigInteger.prototype.divRemSmall = function(n) {
41165 var r;
41166 n = +n;
41167 if (n === 0) {
41168 throw new Error("Divide by zero");
41169 }
41170
41171 var n_s = n < 0 ? -1 : 1;
41172 var sign = this._s * n_s;
41173 n = Math.abs(n);
41174
41175 if (n < 1 || n >= BigInteger_base) {
41176 throw new Error("Argument out of range");
41177 }
41178
41179 if (this._s === 0) {
41180 return [ZERO, ZERO];
41181 }
41182
41183 if (n === 1 || n === -1) {
41184 return [(sign === 1) ? this.abs() : new BigInteger(this._d, sign, CONSTRUCT), ZERO];
41185 }
41186
41187 // 2 <= n < BigInteger_base
41188
41189 // divide a single digit by a single digit
41190 if (this._d.length === 1) {
41191 var q = new BigInteger([(this._d[0] / n) | 0], 1, CONSTRUCT);
41192 r = new BigInteger([(this._d[0] % n) | 0], 1, CONSTRUCT);
41193 if (sign < 0) {
41194 q = q.negate();
41195 }
41196 if (this._s < 0) {
41197 r = r.negate();
41198 }
41199 return [q, r];
41200 }
41201
41202 var digits = this._d.slice();
41203 var quot = new Array(digits.length);
41204 var part = 0;
41205 var diff = 0;
41206 var i = 0;
41207 var guess;
41208
41209 while (digits.length) {
41210 part = part * BigInteger_base + digits[digits.length - 1];
41211 if (part < n) {
41212 quot[i++] = 0;
41213 digits.pop();
41214 diff = BigInteger_base * diff + part;
41215 continue;
41216 }
41217 if (part === 0) {
41218 guess = 0;
41219 }
41220 else {
41221 guess = (part / n) | 0;
41222 }
41223
41224 var check = n * guess;
41225 diff = part - check;
41226 quot[i++] = guess;
41227 if (!guess) {
41228 digits.pop();
41229 continue;
41230 }
41231
41232 digits.pop();
41233 part = diff;
41234 }
41235
41236 r = new BigInteger([diff], 1, CONSTRUCT);
41237 if (this._s < 0) {
41238 r = r.negate();
41239 }
41240 return [new BigInteger(quot.reverse(), sign, CONSTRUCT), r];
41241};
41242
41243/*
41244 Function: isEven
41245 Return true iff *this* is divisible by two.
41246
41247 Note that <BigInteger.ZERO> is even.
41248
41249 Returns:
41250
41251 true if *this* is even, false otherwise.
41252
41253 See Also:
41254
41255 <isOdd>
41256*/
41257BigInteger.prototype.isEven = function() {
41258 var digits = this._d;
41259 return this._s === 0 || digits.length === 0 || (digits[0] % 2) === 0;
41260};
41261
41262/*
41263 Function: isOdd
41264 Return true iff *this* is not divisible by two.
41265
41266 Returns:
41267
41268 true if *this* is odd, false otherwise.
41269
41270 See Also:
41271
41272 <isEven>
41273*/
41274BigInteger.prototype.isOdd = function() {
41275 return !this.isEven();
41276};
41277
41278/*
41279 Function: sign
41280 Get the sign of a <BigInteger>.
41281
41282 Returns:
41283
41284 * -1 if *this* < 0
41285 * 0 if *this* == 0
41286 * +1 if *this* > 0
41287
41288 See Also:
41289
41290 <isZero>, <isPositive>, <isNegative>, <compare>, <BigInteger.ZERO>
41291*/
41292BigInteger.prototype.sign = function() {
41293 return this._s;
41294};
41295
41296/*
41297 Function: isPositive
41298 Return true iff *this* > 0.
41299
41300 Returns:
41301
41302 true if *this*.compare(<BigInteger.ZERO>) == 1.
41303
41304 See Also:
41305
41306 <sign>, <isZero>, <isNegative>, <isUnit>, <compare>, <BigInteger.ZERO>
41307*/
41308BigInteger.prototype.isPositive = function() {
41309 return this._s > 0;
41310};
41311
41312/*
41313 Function: isNegative
41314 Return true iff *this* < 0.
41315
41316 Returns:
41317
41318 true if *this*.compare(<BigInteger.ZERO>) == -1.
41319
41320 See Also:
41321
41322 <sign>, <isPositive>, <isZero>, <isUnit>, <compare>, <BigInteger.ZERO>
41323*/
41324BigInteger.prototype.isNegative = function() {
41325 return this._s < 0;
41326};
41327
41328/*
41329 Function: isZero
41330 Return true iff *this* == 0.
41331
41332 Returns:
41333
41334 true if *this*.compare(<BigInteger.ZERO>) == 0.
41335
41336 See Also:
41337
41338 <sign>, <isPositive>, <isNegative>, <isUnit>, <BigInteger.ZERO>
41339*/
41340BigInteger.prototype.isZero = function() {
41341 return this._s === 0;
41342};
41343
41344/*
41345 Function: exp10
41346 Multiply a <BigInteger> by a power of 10.
41347
41348 This is equivalent to, but faster than
41349
41350 > if (n >= 0) {
41351 > return this.multiply(BigInteger("1e" + n));
41352 > }
41353 > else { // n <= 0
41354 > return this.quotient(BigInteger("1e" + -n));
41355 > }
41356
41357 Parameters:
41358
41359 n - The power of 10 to multiply *this* by. *n* is converted to a
41360 javascipt number and must be no greater than <BigInteger.MAX_EXP>
41361 (0x7FFFFFFF), or an exception will be thrown.
41362
41363 Returns:
41364
41365 *this* * (10 ** *n*), truncated to an integer if necessary.
41366
41367 See Also:
41368
41369 <pow>, <multiply>
41370*/
41371BigInteger.prototype.exp10 = function(n) {
41372 n = +n;
41373 if (n === 0) {
41374 return this;
41375 }
41376 if (Math.abs(n) > Number(MAX_EXP)) {
41377 throw new Error("exponent too large in BigInteger.exp10");
41378 }
41379 // Optimization for this == 0. This also keeps us from having to trim zeros in the positive n case
41380 if (this._s === 0) {
41381 return ZERO;
41382 }
41383 if (n > 0) {
41384 var k = new BigInteger(this._d.slice(), this._s, CONSTRUCT);
41385
41386 for (; n >= BigInteger_base_log10; n -= BigInteger_base_log10) {
41387 k._d.unshift(0);
41388 }
41389 if (n == 0)
41390 return k;
41391 k._s = 1;
41392 k = k.multiplySingleDigit(Math.pow(10, n));
41393 return (this._s < 0 ? k.negate() : k);
41394 } else if (-n >= this._d.length*BigInteger_base_log10) {
41395 return ZERO;
41396 } else {
41397 var k = new BigInteger(this._d.slice(), this._s, CONSTRUCT);
41398
41399 for (n = -n; n >= BigInteger_base_log10; n -= BigInteger_base_log10) {
41400 k._d.shift();
41401 }
41402 return (n == 0) ? k : k.divRemSmall(Math.pow(10, n))[0];
41403 }
41404};
41405
41406/*
41407 Function: pow
41408 Raise a <BigInteger> to a power.
41409
41410 In this implementation, 0**0 is 1.
41411
41412 Parameters:
41413
41414 n - The exponent to raise *this* by. *n* must be no greater than
41415 <BigInteger.MAX_EXP> (0x7FFFFFFF), or an exception will be thrown.
41416
41417 Returns:
41418
41419 *this* raised to the *nth* power.
41420
41421 See Also:
41422
41423 <modPow>
41424*/
41425BigInteger.prototype.pow = function(n) {
41426 if (this.isUnit()) {
41427 if (this._s > 0) {
41428 return this;
41429 }
41430 else {
41431 return BigInteger(n).isOdd() ? this : this.negate();
41432 }
41433 }
41434
41435 n = BigInteger(n);
41436 if (n._s === 0) {
41437 return ONE;
41438 }
41439 else if (n._s < 0) {
41440 if (this._s === 0) {
41441 throw new Error("Divide by zero");
41442 }
41443 else {
41444 return ZERO;
41445 }
41446 }
41447 if (this._s === 0) {
41448 return ZERO;
41449 }
41450 if (n.isUnit()) {
41451 return this;
41452 }
41453
41454 if (n.compareAbs(MAX_EXP) > 0) {
41455 throw new Error("exponent too large in BigInteger.pow");
41456 }
41457 var x = this;
41458 var aux = ONE;
41459 var two = BigInteger.small[2];
41460
41461 while (n.isPositive()) {
41462 if (n.isOdd()) {
41463 aux = aux.multiply(x);
41464 if (n.isUnit()) {
41465 return aux;
41466 }
41467 }
41468 x = x.square();
41469 n = n.quotient(two);
41470 }
41471
41472 return aux;
41473};
41474
41475/*
41476 Function: modPow
41477 Raise a <BigInteger> to a power (mod m).
41478
41479 Because it is reduced by a modulus, <modPow> is not limited by
41480 <BigInteger.MAX_EXP> like <pow>.
41481
41482 Parameters:
41483
41484 exponent - The exponent to raise *this* by. Must be positive.
41485 modulus - The modulus.
41486
41487 Returns:
41488
41489 *this* ^ *exponent* (mod *modulus*).
41490
41491 See Also:
41492
41493 <pow>, <mod>
41494*/
41495BigInteger.prototype.modPow = function(exponent, modulus) {
41496 var result = ONE;
41497 var base = this;
41498
41499 while (exponent.isPositive()) {
41500 if (exponent.isOdd()) {
41501 result = result.multiply(base).remainder(modulus);
41502 }
41503
41504 exponent = exponent.quotient(BigInteger.small[2]);
41505 if (exponent.isPositive()) {
41506 base = base.square().remainder(modulus);
41507 }
41508 }
41509
41510 return result;
41511};
41512
41513/*
41514 Function: log
41515 Get the natural logarithm of a <BigInteger> as a native JavaScript number.
41516
41517 This is equivalent to
41518
41519 > Math.log(this.toJSValue())
41520
41521 but handles values outside of the native number range.
41522
41523 Returns:
41524
41525 log( *this* )
41526
41527 See Also:
41528
41529 <toJSValue>
41530*/
41531BigInteger.prototype.log = function() {
41532 switch (this._s) {
41533 case 0: return -Infinity;
41534 case -1: return NaN;
41535 default: // Fall through.
41536 }
41537
41538 var l = this._d.length;
41539
41540 if (l*BigInteger_base_log10 < 30) {
41541 return Math.log(this.valueOf());
41542 }
41543
41544 var N = Math.ceil(30/BigInteger_base_log10);
41545 var firstNdigits = this._d.slice(l - N);
41546 return Math.log((new BigInteger(firstNdigits, 1, CONSTRUCT)).valueOf()) + (l - N) * Math.log(BigInteger_base);
41547};
41548
41549/*
41550 Function: valueOf
41551 Convert a <BigInteger> to a native JavaScript integer.
41552
41553 This is called automatically by JavaScipt to convert a <BigInteger> to a
41554 native value.
41555
41556 Returns:
41557
41558 > parseInt(this.toString(), 10)
41559
41560 See Also:
41561
41562 <toString>, <toJSValue>
41563*/
41564BigInteger.prototype.valueOf = function() {
41565 return parseInt(this.toString(), 10);
41566};
41567
41568/*
41569 Function: toJSValue
41570 Convert a <BigInteger> to a native JavaScript integer.
41571
41572 This is the same as valueOf, but more explicitly named.
41573
41574 Returns:
41575
41576 > parseInt(this.toString(), 10)
41577
41578 See Also:
41579
41580 <toString>, <valueOf>
41581*/
41582BigInteger.prototype.toJSValue = function() {
41583 return parseInt(this.toString(), 10);
41584};
41585
41586var MAX_EXP = BigInteger(0x7FFFFFFF);
41587// Constant: MAX_EXP
41588// The largest exponent allowed in <pow> and <exp10> (0x7FFFFFFF or 2147483647).
41589BigInteger.MAX_EXP = MAX_EXP;
41590
41591(function() {
41592 function makeUnary(fn) {
41593 return function(a) {
41594 return fn.call(BigInteger(a));
41595 };
41596 }
41597
41598 function makeBinary(fn) {
41599 return function(a, b) {
41600 return fn.call(BigInteger(a), BigInteger(b));
41601 };
41602 }
41603
41604 function makeTrinary(fn) {
41605 return function(a, b, c) {
41606 return fn.call(BigInteger(a), BigInteger(b), BigInteger(c));
41607 };
41608 }
41609
41610 (function() {
41611 var i, fn;
41612 var unary = "toJSValue,isEven,isOdd,sign,isZero,isNegative,abs,isUnit,square,negate,isPositive,toString,next,prev,log".split(",");
41613 var binary = "compare,remainder,divRem,subtract,add,quotient,divide,multiply,pow,compareAbs".split(",");
41614 var trinary = ["modPow"];
41615
41616 for (i = 0; i < unary.length; i++) {
41617 fn = unary[i];
41618 BigInteger[fn] = makeUnary(BigInteger.prototype[fn]);
41619 }
41620
41621 for (i = 0; i < binary.length; i++) {
41622 fn = binary[i];
41623 BigInteger[fn] = makeBinary(BigInteger.prototype[fn]);
41624 }
41625
41626 for (i = 0; i < trinary.length; i++) {
41627 fn = trinary[i];
41628 BigInteger[fn] = makeTrinary(BigInteger.prototype[fn]);
41629 }
41630
41631 BigInteger.exp10 = function(x, n) {
41632 return BigInteger(x).exp10(n);
41633 };
41634 })();
41635})();
41636
41637exports.BigInteger = BigInteger;
41638})(typeof exports !== 'undefined' ? exports : this);
95f04905
IC
41639</script>
41640 <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){
41641var 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;
41642
41643},{}],2:[function(require,module,exports){
41644var 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;
41645
41646},{"./scoring":6}],3:[function(require,module,exports){
41647var 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(","),
41648english_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(","),
41649female_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(","),
41650us_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(","),
41651male_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;
41652
41653},{}],4:[function(require,module,exports){
41654var 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;
41655
41656},{"./feedback":2,"./matching":5,"./scoring":6,"./time_estimates":7}],5:[function(require,module,exports){
41657var 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;
41658
41659},{"./adjacency_graphs":1,"./frequency_lists":3,"./scoring":6}],6:[function(require,module,exports){
41660var 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;
41661
41662},{"./adjacency_graphs":1}],7:[function(require,module,exports){
41663var 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;
41664
41665},{}]},{},[4])(4)
41666});
41667//# sourceMappingURL=zxcvbn.js.map
41668</script>
41669 <script>/*
41670 * Detects entropy from a string.
41671 *
41672 * Formats include:
41673 * binary [0-1]
41674 * base 6 [0-5]
41675 * dice 6 [1-6]
41676 * decimal [0-9]
41677 * hexadecimal [0-9A-F]
9e97eb76 41678 * card [A2-9TJQK][CDHS]
95f04905
IC
41679 *
41680 * Automatically uses lowest entropy to avoid issues such as interpretting 0101
41681 * as hexadecimal which would be 16 bits when really it's only 4 bits of binary
41682 * entropy.
41683 */
41684
41685window.Entropy = new (function() {
41686
78b8d604
IC
41687 var TWO = new BigInteger(2);
41688
95f04905
IC
41689 // matchers returns an array of the matched events for each type of entropy.
41690 // eg
41691 // matchers.binary("010") returns ["0", "1", "0"]
41692 // matchers.binary("a10") returns ["1", "0"]
41693 // matchers.hex("a10") returns ["a", "1", "0"]
41694 var matchers = {
41695 binary: function(str) {
41696 return str.match(/[0-1]/gi) || [];
41697 },
41698 base6: function(str) {
41699 return str.match(/[0-5]/gi) || [];
41700 },
41701 dice: function(str) {
41702 return str.match(/[1-6]/gi) || []; // ie dice numbers
41703 },
41704 base10: function(str) {
41705 return str.match(/[0-9]/gi) || [];
41706 },
41707 hex: function(str) {
41708 return str.match(/[0-9A-F]/gi) || [];
41709 },
41710 card: function(str) {
41711 // Format is NumberSuit, eg
41712 // AH ace of hearts
41713 // 8C eight of clubs
41714 // TD ten of diamonds
41715 // JS jack of spades
41716 // QH queen of hearts
41717 // KC king of clubs
41718 return str.match(/([A2-9TJQK][CDHS])/gi) || [];
41719 }
41720 }
41721
41722 // Convert array of cards from ["ac", "4d", "ks"]
41723 // to numbers between 0 and 51 [0, 16, 51]
41724 function convertCardsToInts(cards) {
41725 var ints = [];
41726 var values = "a23456789tjqk";
41727 var suits = "cdhs";
41728 for (var i=0; i<cards.length; i++) {
41729 var card = cards[i].toLowerCase();
41730 var value = card[0];
41731 var suit = card[1];
41732 var asInt = 13 * suits.indexOf(suit) + values.indexOf(value);
41733 ints.push(asInt);
41734 }
41735 return ints;
41736 }
41737
41738 this.fromString = function(rawEntropyStr) {
41739 // Find type of entropy being used (binary, hex, dice etc)
41740 var base = getBase(rawEntropyStr);
41741 // Convert dice to base6 entropy (ie 1-6 to 0-5)
41742 // This is done by changing all 6s to 0s
41743 if (base.str == "dice") {
41744 var newParts = [];
41745 var newInts = [];
41746 for (var i=0; i<base.parts.length; i++) {
41747 var c = base.parts[i];
41748 if ("12345".indexOf(c) > -1) {
41749 newParts[i] = base.parts[i];
41750 newInts[i] = base.ints[i];
41751 }
41752 else {
41753 newParts[i] = "0";
41754 newInts[i] = 0;
41755 }
41756 }
41757 base.str = "base 6 (dice)";
41758 base.ints = newInts;
41759 base.parts = newParts;
41760 base.matcher = matchers.base6;
41761 }
41762 // Detect empty entropy
41763 if (base.parts.length == 0) {
41764 return {
41765 binaryStr: "",
41766 cleanStr: "",
41767 cleanHtml: "",
41768 base: base,
41769 };
41770 }
41771 // Convert base.ints to BigInteger.
41772 // Due to using unusual bases, eg cards of base52, this is not as simple as
41773 // using BigInteger.parse()
41774 var entropyInt = BigInteger.ZERO;
41775 for (var i=base.ints.length-1; i>=0; i--) {
41776 var thisInt = BigInteger.parse(base.ints[i]);
41777 var power = (base.ints.length - 1) - i;
41778 var additionalEntropy = BigInteger.parse(base.asInt).pow(power).multiply(thisInt);
41779 entropyInt = entropyInt.add(additionalEntropy);
41780 }
41781 // Convert entropy to binary
41782 var entropyBin = entropyInt.toString(2);
41783 // If the first integer is small, it must be padded with zeros.
41784 // Otherwise the chance of the first bit being 1 is 100%, which is
41785 // obviously incorrect.
41786 // This is not perfect for non-2^n bases.
41787 var expectedBits = Math.floor(base.parts.length * Math.log2(base.asInt));
41788 while (entropyBin.length < expectedBits) {
41789 entropyBin = "0" + entropyBin;
41790 }
94959756
IC
41791 // Calculate the number of bits per event
41792 var bitsPerEvent = Math.log2(base.asInt);
ea87f1d3 41793 // Cards binary must be handled differently, since they're not replaced
9e97eb76 41794 if (base.asInt == 52) {
94959756
IC
41795 var cardEntropy = processCardEntropy(base.parts);
41796 entropyBin = cardEntropy.binaryStr;
41797 bitsPerEvent = cardEntropy.bitsPerEvent;
9e97eb76 41798 }
95f04905
IC
41799 // Supply a 'filtered' entropy string for display purposes
41800 var entropyClean = base.parts.join("");
41801 var entropyHtml = base.parts.join("");
41802 if (base.asInt == 52) {
41803 entropyClean = base.parts.join(" ").toUpperCase();
41804 entropyClean = entropyClean.replace(/C/g, "\u2663");
41805 entropyClean = entropyClean.replace(/D/g, "\u2666");
41806 entropyClean = entropyClean.replace(/H/g, "\u2665");
41807 entropyClean = entropyClean.replace(/S/g, "\u2660");
41808 entropyHtml = base.parts.join(" ").toUpperCase();
41809 entropyHtml = entropyHtml.replace(/C/g, "<span class='card-suit club'>\u2663</span>");
41810 entropyHtml = entropyHtml.replace(/D/g, "<span class='card-suit diamond'>\u2666</span>");
41811 entropyHtml = entropyHtml.replace(/H/g, "<span class='card-suit heart'>\u2665</span>");
41812 entropyHtml = entropyHtml.replace(/S/g, "<span class='card-suit spade'>\u2660</span>");
41813 }
9e97eb76 41814 // Return the result
95f04905
IC
41815 var e = {
41816 binaryStr: entropyBin,
41817 cleanStr: entropyClean,
41818 cleanHtml: entropyHtml,
94959756 41819 bitsPerEvent: bitsPerEvent,
95f04905
IC
41820 base: base,
41821 }
41822 return e;
41823 }
41824
78b8d604
IC
41825 function getSortedDeck() {
41826 var s = [];
41827 var suits = "CDHS";
41828 var values = "A23456789TJQK";
41829 for (var i=0; i<suits.length; i++) {
41830 for (var j=0; j<values.length; j++) {
41831 s.push(values[j]+suits[i]);
41832 }
41833 }
41834 return s;
41835 }
41836
95f04905
IC
41837 function getBase(str) {
41838 // Need to get the lowest base for the supplied entropy.
41839 // This prevents interpreting, say, dice rolls as hexadecimal.
41840 var binaryMatches = matchers.binary(str);
41841 var hexMatches = matchers.hex(str);
41842 // Find the lowest base that can be used, whilst ignoring any irrelevant chars
41843 if (binaryMatches.length == hexMatches.length && hexMatches.length > 0) {
41844 var ints = binaryMatches.map(function(i) { return parseInt(i, 2) });
41845 return {
41846 ints: ints,
41847 parts: binaryMatches,
41848 matcher: matchers.binary,
41849 asInt: 2,
41850 str: "binary",
41851 }
41852 }
41853 var cardMatches = matchers.card(str);
41854 if (cardMatches.length >= hexMatches.length / 2) {
41855 var ints = convertCardsToInts(cardMatches);
41856 return {
41857 ints: ints,
41858 parts: cardMatches,
41859 matcher: matchers.card,
41860 asInt: 52,
41861 str: "card",
41862 }
41863 }
41864 var diceMatches = matchers.dice(str);
41865 if (diceMatches.length == hexMatches.length && hexMatches.length > 0) {
41866 var ints = diceMatches.map(function(i) { return parseInt(i) });
41867 return {
41868 ints: ints,
41869 parts: diceMatches,
41870 matcher: matchers.dice,
41871 asInt: 6,
41872 str: "dice",
41873 }
41874 }
41875 var base6Matches = matchers.base6(str);
41876 if (base6Matches.length == hexMatches.length && hexMatches.length > 0) {
41877 var ints = base6Matches.map(function(i) { return parseInt(i) });
41878 return {
41879 ints: ints,
41880 parts: base6Matches,
41881 matcher: matchers.base6,
41882 asInt: 6,
41883 str: "base 6",
41884 }
41885 }
41886 var base10Matches = matchers.base10(str);
41887 if (base10Matches.length == hexMatches.length && hexMatches.length > 0) {
41888 var ints = base10Matches.map(function(i) { return parseInt(i) });
41889 return {
41890 ints: ints,
41891 parts: base10Matches,
41892 matcher: matchers.base10,
41893 asInt: 10,
41894 str: "base 10",
41895 }
41896 }
41897 var ints = hexMatches.map(function(i) { return parseInt(i, 16) });
41898 return {
41899 ints: ints,
41900 parts: hexMatches,
41901 matcher: matchers.hex,
41902 asInt: 16,
41903 str: "hexadecimal",
41904 }
41905 }
41906
ea87f1d3
IC
41907 // Assume cards are NOT replaced.
41908 // Additional entropy decreases as more cards are used. This means
41909 // total possible entropy is measured using n!, not base^n.
41910 // eg the second last card can be only one of two, not one of fifty two
41911 // so the added entropy for that card is only one bit at most
94959756 41912 function processCardEntropy(cards) {
ea87f1d3
IC
41913 // Track how many instances of each card have been used, and thus
41914 // how many decks are in use.
41915 var cardCounts = {};
41916 var numberOfDecks = 0;
41917 // Work out number of decks by max(duplicates)
41918 for (var i=0; i<cards.length; i++) {
41919 // Get the card that was drawn
41920 var cardLower = cards[i];
41921 var card = cardLower.toUpperCase();
41922 // Initialize the count for this card if needed
41923 if (!(card in cardCounts)) {
41924 cardCounts[card] = 0;
41925 }
41926 cardCounts[card] += 1;
41927 // See if this is max(duplicates)
41928 if (cardCounts[card] > numberOfDecks) {
41929 numberOfDecks = cardCounts[card];
41930 }
41931 }
41932 // Work out the total number of bits for this many decks
41933 // See http://crypto.stackexchange.com/q/41886
fc7c248f
IC
41934 var gainedBits = 0;
41935 // Equivalent of Math.log2(factorial(52*numberOfDecks))
41936 // which becomes infinity for numberOfDecks > 4
41937 for (var i=1; i<=52*numberOfDecks; i++) {
41938 gainedBits = gainedBits + Math.log2(i);
41939 }
ea87f1d3
IC
41940 var lostBits = 52 * Math.log2(factorial(numberOfDecks));
41941 var maxBits = gainedBits - lostBits;
41942 // Convert the drawn cards to a binary representation.
41943 // The exact technique for doing this is unclear.
41944 // See
41945 // http://crypto.stackexchange.com/a/41896
41946 // "I even doubt that this is well defined (only the average entropy
41947 // is, I believe)."
41948 // See
41949 // https://github.com/iancoleman/bip39/issues/33#issuecomment-263021856
41950 // "The binary representation can be the first log(permutations,2) bits
41951 // of the sha-2 hash of the normalized deck string."
41952 //
41953 // In this specific implementation, the first N bits of the hash of the
41954 // normalized cards string is being used. Uppercase, no spaces; eg
41955 // sha256("AH8DQSTC2H")
41956 var totalCards = numberOfDecks * 52;
41957 var percentUsed = cards.length / totalCards;
41958 // Calculate the average number of bits of entropy for the number of
41959 // cards drawn.
41960 var numberOfBits = Math.floor(maxBits * percentUsed);
41961 // Create a normalized string of the selected cards
41962 var normalizedCards = cards.join("").toUpperCase();
41963 // Convert to binary using the SHA256 hash of the normalized cards.
434caecd 41964 // If the number of bits is more than 256, multiple hashes
ea87f1d3
IC
41965 // are used until the required number of bits is reached.
41966 var entropyBin = "";
41967 var iterations = 0;
41968 while (entropyBin.length < numberOfBits) {
434caecd 41969 var hashedCards = sjcl.hash.sha256.hash(normalizedCards + ":" + iterations);
ea87f1d3
IC
41970 var hashHex = sjcl.codec.hex.fromBits(hashedCards);
41971 for (var i=0; i<hashHex.length; i++) {
41972 var decimal = parseInt(hashHex[i], 16);
41973 var binary = decimal.toString(2);
41974 while (binary.length < 4) {
41975 binary = "0" + binary;
41976 }
41977 entropyBin = entropyBin + binary;
41978 }
41979 iterations = iterations + 1;
41980 }
41981 // Truncate to the appropriate number of bits.
41982 entropyBin = entropyBin.substring(0, numberOfBits);
94959756
IC
41983 // Get the number of bits per event
41984 bitsPerEvent = maxBits / totalCards;
41985 return {
41986 binaryStr: entropyBin,
41987 bitsPerEvent: bitsPerEvent,
41988 }
ea87f1d3
IC
41989 }
41990
95f04905
IC
41991 // Polyfill for Math.log2
41992 // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/log2#Polyfill
41993 Math.log2 = Math.log2 || function(x) {
41994 // The polyfill isn't good enough because of the poor accuracy of
41995 // Math.LOG2E
41996 // log2(8) gave 2.9999999999999996 which when floored causes issues.
41997 // So instead use the BigInteger library to get it right.
41998 return BigInteger.log(x) / BigInteger.log(2);
41999 };
42000
9e97eb76
IC
42001 // Depends on BigInteger
42002 function factorial(n) {
42003 if (n == 0) {
42004 return 1;
42005 }
42006 f = BigInteger.ONE;
42007 for (var i=1; i<=n; i++) {
42008 f = f.multiply(new BigInteger(i));
42009 }
42010 return f;
42011 }
42012
95f04905 42013})();
5802c0b7 42014</script>
42015 <script>/*! jQuery UI - v1.12.1 - 2016-09-14
42016* http://jqueryui.com
42017* Includes: widget.js, position.js, data.js, disable-selection.js, effect.js, effects/effect-blind.js, effects/effect-bounce.js, effects/effect-clip.js, effects/effect-drop.js, effects/effect-explode.js, effects/effect-fade.js, effects/effect-fold.js, effects/effect-highlight.js, effects/effect-puff.js, effects/effect-pulsate.js, effects/effect-scale.js, effects/effect-shake.js, effects/effect-size.js, effects/effect-slide.js, effects/effect-transfer.js, focusable.js, form-reset-mixin.js, jquery-1-7.js, keycode.js, labels.js, scroll-parent.js, tabbable.js, unique-id.js, widgets/accordion.js, widgets/autocomplete.js, widgets/button.js, widgets/checkboxradio.js, widgets/controlgroup.js, widgets/datepicker.js, widgets/dialog.js, widgets/draggable.js, widgets/droppable.js, widgets/menu.js, widgets/mouse.js, widgets/progressbar.js, widgets/resizable.js, widgets/selectable.js, widgets/selectmenu.js, widgets/slider.js, widgets/sortable.js, widgets/spinner.js, widgets/tabs.js, widgets/tooltip.js
42018* Copyright jQuery Foundation and other contributors; Licensed MIT */
42019
42020(function(t){"function"==typeof define&&define.amd?define(["jquery"],t):t(jQuery)})(function(t){function e(t){for(var e=t.css("visibility");"inherit"===e;)t=t.parent(),e=t.css("visibility");return"hidden"!==e}function i(t){for(var e,i;t.length&&t[0]!==document;){if(e=t.css("position"),("absolute"===e||"relative"===e||"fixed"===e)&&(i=parseInt(t.css("zIndex"),10),!isNaN(i)&&0!==i))return i;t=t.parent()}return 0}function s(){this._curInst=null,this._keyEvent=!1,this._disabledInputs=[],this._datepickerShowing=!1,this._inDialog=!1,this._mainDivId="ui-datepicker-div",this._inlineClass="ui-datepicker-inline",this._appendClass="ui-datepicker-append",this._triggerClass="ui-datepicker-trigger",this._dialogClass="ui-datepicker-dialog",this._disableClass="ui-datepicker-disabled",this._unselectableClass="ui-datepicker-unselectable",this._currentClass="ui-datepicker-current-day",this._dayOverClass="ui-datepicker-days-cell-over",this.regional=[],this.regional[""]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"mm/dd/yy",firstDay:0,isRTL:!1,showMonthAfterYear:!1,yearSuffix:""},this._defaults={showOn:"focus",showAnim:"fadeIn",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:!1,hideIfNoPrevNext:!1,navigationAsDateFormat:!1,gotoCurrent:!1,changeMonth:!1,changeYear:!1,yearRange:"c-10:c+10",showOtherMonths:!1,selectOtherMonths:!1,showWeek:!1,calculateWeek:this.iso8601Week,shortYearCutoff:"+10",minDate:null,maxDate:null,duration:"fast",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:!0,showButtonPanel:!1,autoSize:!1,disabled:!1},t.extend(this._defaults,this.regional[""]),this.regional.en=t.extend(!0,{},this.regional[""]),this.regional["en-US"]=t.extend(!0,{},this.regional.en),this.dpDiv=n(t("<div id='"+this._mainDivId+"' class='ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>"))}function n(e){var i="button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a";return e.on("mouseout",i,function(){t(this).removeClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&t(this).removeClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&t(this).removeClass("ui-datepicker-next-hover")}).on("mouseover",i,o)}function o(){t.datepicker._isDisabledDatepicker(m.inline?m.dpDiv.parent()[0]:m.input[0])||(t(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover"),t(this).addClass("ui-state-hover"),-1!==this.className.indexOf("ui-datepicker-prev")&&t(this).addClass("ui-datepicker-prev-hover"),-1!==this.className.indexOf("ui-datepicker-next")&&t(this).addClass("ui-datepicker-next-hover"))}function a(e,i){t.extend(e,i);for(var s in i)null==i[s]&&(e[s]=i[s]);return e}function r(t){return function(){var e=this.element.val();t.apply(this,arguments),this._refresh(),e!==this.element.val()&&this._trigger("change")}}t.ui=t.ui||{},t.ui.version="1.12.1";var h=0,l=Array.prototype.slice;t.cleanData=function(e){return function(i){var s,n,o;for(o=0;null!=(n=i[o]);o++)try{s=t._data(n,"events"),s&&s.remove&&t(n).triggerHandler("remove")}catch(a){}e(i)}}(t.cleanData),t.widget=function(e,i,s){var n,o,a,r={},h=e.split(".")[0];e=e.split(".")[1];var l=h+"-"+e;return s||(s=i,i=t.Widget),t.isArray(s)&&(s=t.extend.apply(null,[{}].concat(s))),t.expr[":"][l.toLowerCase()]=function(e){return!!t.data(e,l)},t[h]=t[h]||{},n=t[h][e],o=t[h][e]=function(t,e){return this._createWidget?(arguments.length&&this._createWidget(t,e),void 0):new o(t,e)},t.extend(o,n,{version:s.version,_proto:t.extend({},s),_childConstructors:[]}),a=new i,a.options=t.widget.extend({},a.options),t.each(s,function(e,s){return t.isFunction(s)?(r[e]=function(){function t(){return i.prototype[e].apply(this,arguments)}function n(t){return i.prototype[e].apply(this,t)}return function(){var e,i=this._super,o=this._superApply;return this._super=t,this._superApply=n,e=s.apply(this,arguments),this._super=i,this._superApply=o,e}}(),void 0):(r[e]=s,void 0)}),o.prototype=t.widget.extend(a,{widgetEventPrefix:n?a.widgetEventPrefix||e:e},r,{constructor:o,namespace:h,widgetName:e,widgetFullName:l}),n?(t.each(n._childConstructors,function(e,i){var s=i.prototype;t.widget(s.namespace+"."+s.widgetName,o,i._proto)}),delete n._childConstructors):i._childConstructors.push(o),t.widget.bridge(e,o),o},t.widget.extend=function(e){for(var i,s,n=l.call(arguments,1),o=0,a=n.length;a>o;o++)for(i in n[o])s=n[o][i],n[o].hasOwnProperty(i)&&void 0!==s&&(e[i]=t.isPlainObject(s)?t.isPlainObject(e[i])?t.widget.extend({},e[i],s):t.widget.extend({},s):s);return e},t.widget.bridge=function(e,i){var s=i.prototype.widgetFullName||e;t.fn[e]=function(n){var o="string"==typeof n,a=l.call(arguments,1),r=this;return o?this.length||"instance"!==n?this.each(function(){var i,o=t.data(this,s);return"instance"===n?(r=o,!1):o?t.isFunction(o[n])&&"_"!==n.charAt(0)?(i=o[n].apply(o,a),i!==o&&void 0!==i?(r=i&&i.jquery?r.pushStack(i.get()):i,!1):void 0):t.error("no such method '"+n+"' for "+e+" widget instance"):t.error("cannot call methods on "+e+" prior to initialization; "+"attempted to call method '"+n+"'")}):r=void 0:(a.length&&(n=t.widget.extend.apply(null,[n].concat(a))),this.each(function(){var e=t.data(this,s);e?(e.option(n||{}),e._init&&e._init()):t.data(this,s,new i(n,this))})),r}},t.Widget=function(){},t.Widget._childConstructors=[],t.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"<div>",options:{classes:{},disabled:!1,create:null},_createWidget:function(e,i){i=t(i||this.defaultElement||this)[0],this.element=t(i),this.uuid=h++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=t(),this.hoverable=t(),this.focusable=t(),this.classesElementLookup={},i!==this&&(t.data(i,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===i&&this.destroy()}}),this.document=t(i.style?i.ownerDocument:i.document||i),this.window=t(this.document[0].defaultView||this.document[0].parentWindow)),this.options=t.widget.extend({},this.options,this._getCreateOptions(),e),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:t.noop,_create:t.noop,_init:t.noop,destroy:function(){var e=this;this._destroy(),t.each(this.classesElementLookup,function(t,i){e._removeClass(i,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:t.noop,widget:function(){return this.element},option:function(e,i){var s,n,o,a=e;if(0===arguments.length)return t.widget.extend({},this.options);if("string"==typeof e)if(a={},s=e.split("."),e=s.shift(),s.length){for(n=a[e]=t.widget.extend({},this.options[e]),o=0;s.length-1>o;o++)n[s[o]]=n[s[o]]||{},n=n[s[o]];if(e=s.pop(),1===arguments.length)return void 0===n[e]?null:n[e];n[e]=i}else{if(1===arguments.length)return void 0===this.options[e]?null:this.options[e];a[e]=i}return this._setOptions(a),this},_setOptions:function(t){var e;for(e in t)this._setOption(e,t[e]);return this},_setOption:function(t,e){return"classes"===t&&this._setOptionClasses(e),this.options[t]=e,"disabled"===t&&this._setOptionDisabled(e),this},_setOptionClasses:function(e){var i,s,n;for(i in e)n=this.classesElementLookup[i],e[i]!==this.options.classes[i]&&n&&n.length&&(s=t(n.get()),this._removeClass(n,i),s.addClass(this._classes({element:s,keys:i,classes:e,add:!0})))},_setOptionDisabled:function(t){this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,!!t),t&&(this._removeClass(this.hoverable,null,"ui-state-hover"),this._removeClass(this.focusable,null,"ui-state-focus"))},enable:function(){return this._setOptions({disabled:!1})},disable:function(){return this._setOptions({disabled:!0})},_classes:function(e){function i(i,o){var a,r;for(r=0;i.length>r;r++)a=n.classesElementLookup[i[r]]||t(),a=e.add?t(t.unique(a.get().concat(e.element.get()))):t(a.not(e.element).get()),n.classesElementLookup[i[r]]=a,s.push(i[r]),o&&e.classes[i[r]]&&s.push(e.classes[i[r]])}var s=[],n=this;return e=t.extend({element:this.element,classes:this.options.classes||{}},e),this._on(e.element,{remove:"_untrackClassesElement"}),e.keys&&i(e.keys.match(/\S+/g)||[],!0),e.extra&&i(e.extra.match(/\S+/g)||[]),s.join(" ")},_untrackClassesElement:function(e){var i=this;t.each(i.classesElementLookup,function(s,n){-1!==t.inArray(e.target,n)&&(i.classesElementLookup[s]=t(n.not(e.target).get()))})},_removeClass:function(t,e,i){return this._toggleClass(t,e,i,!1)},_addClass:function(t,e,i){return this._toggleClass(t,e,i,!0)},_toggleClass:function(t,e,i,s){s="boolean"==typeof s?s:i;var n="string"==typeof t||null===t,o={extra:n?e:i,keys:n?t:e,element:n?this.element:t,add:s};return o.element.toggleClass(this._classes(o),s),this},_on:function(e,i,s){var n,o=this;"boolean"!=typeof e&&(s=i,i=e,e=!1),s?(i=n=t(i),this.bindings=this.bindings.add(i)):(s=i,i=this.element,n=this.widget()),t.each(s,function(s,a){function r(){return e||o.options.disabled!==!0&&!t(this).hasClass("ui-state-disabled")?("string"==typeof a?o[a]:a).apply(o,arguments):void 0}"string"!=typeof a&&(r.guid=a.guid=a.guid||r.guid||t.guid++);var h=s.match(/^([\w:-]*)\s*(.*)$/),l=h[1]+o.eventNamespace,c=h[2];c?n.on(l,c,r):i.on(l,r)})},_off:function(e,i){i=(i||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,e.off(i).off(i),this.bindings=t(this.bindings.not(e).get()),this.focusable=t(this.focusable.not(e).get()),this.hoverable=t(this.hoverable.not(e).get())},_delay:function(t,e){function i(){return("string"==typeof t?s[t]:t).apply(s,arguments)}var s=this;return setTimeout(i,e||0)},_hoverable:function(e){this.hoverable=this.hoverable.add(e),this._on(e,{mouseenter:function(e){this._addClass(t(e.currentTarget),null,"ui-state-hover")},mouseleave:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-hover")}})},_focusable:function(e){this.focusable=this.focusable.add(e),this._on(e,{focusin:function(e){this._addClass(t(e.currentTarget),null,"ui-state-focus")},focusout:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-focus")}})},_trigger:function(e,i,s){var n,o,a=this.options[e];if(s=s||{},i=t.Event(i),i.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase(),i.target=this.element[0],o=i.originalEvent)for(n in o)n in i||(i[n]=o[n]);return this.element.trigger(i,s),!(t.isFunction(a)&&a.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},t.each({show:"fadeIn",hide:"fadeOut"},function(e,i){t.Widget.prototype["_"+e]=function(s,n,o){"string"==typeof n&&(n={effect:n});var a,r=n?n===!0||"number"==typeof n?i:n.effect||i:e;n=n||{},"number"==typeof n&&(n={duration:n}),a=!t.isEmptyObject(n),n.complete=o,n.delay&&s.delay(n.delay),a&&t.effects&&t.effects.effect[r]?s[e](n):r!==e&&s[r]?s[r](n.duration,n.easing,o):s.queue(function(i){t(this)[e](),o&&o.call(s[0]),i()})}}),t.widget,function(){function e(t,e,i){return[parseFloat(t[0])*(u.test(t[0])?e/100:1),parseFloat(t[1])*(u.test(t[1])?i/100:1)]}function i(e,i){return parseInt(t.css(e,i),10)||0}function s(e){var i=e[0];return 9===i.nodeType?{width:e.width(),height:e.height(),offset:{top:0,left:0}}:t.isWindow(i)?{width:e.width(),height:e.height(),offset:{top:e.scrollTop(),left:e.scrollLeft()}}:i.preventDefault?{width:0,height:0,offset:{top:i.pageY,left:i.pageX}}:{width:e.outerWidth(),height:e.outerHeight(),offset:e.offset()}}var n,o=Math.max,a=Math.abs,r=/left|center|right/,h=/top|center|bottom/,l=/[\+\-]\d+(\.[\d]+)?%?/,c=/^\w+/,u=/%$/,d=t.fn.position;t.position={scrollbarWidth:function(){if(void 0!==n)return n;var e,i,s=t("<div style='display:block;position:absolute;width:50px;height:50px;overflow:hidden;'><div style='height:100px;width:auto;'></div></div>"),o=s.children()[0];return t("body").append(s),e=o.offsetWidth,s.css("overflow","scroll"),i=o.offsetWidth,e===i&&(i=s[0].clientWidth),s.remove(),n=e-i},getScrollInfo:function(e){var i=e.isWindow||e.isDocument?"":e.element.css("overflow-x"),s=e.isWindow||e.isDocument?"":e.element.css("overflow-y"),n="scroll"===i||"auto"===i&&e.width<e.element[0].scrollWidth,o="scroll"===s||"auto"===s&&e.height<e.element[0].scrollHeight;return{width:o?t.position.scrollbarWidth():0,height:n?t.position.scrollbarWidth():0}},getWithinInfo:function(e){var i=t(e||window),s=t.isWindow(i[0]),n=!!i[0]&&9===i[0].nodeType,o=!s&&!n;return{element:i,isWindow:s,isDocument:n,offset:o?t(e).offset():{left:0,top:0},scrollLeft:i.scrollLeft(),scrollTop:i.scrollTop(),width:i.outerWidth(),height:i.outerHeight()}}},t.fn.position=function(n){if(!n||!n.of)return d.apply(this,arguments);n=t.extend({},n);var u,p,f,g,m,_,v=t(n.of),b=t.position.getWithinInfo(n.within),y=t.position.getScrollInfo(b),w=(n.collision||"flip").split(" "),k={};return _=s(v),v[0].preventDefault&&(n.at="left top"),p=_.width,f=_.height,g=_.offset,m=t.extend({},g),t.each(["my","at"],function(){var t,e,i=(n[this]||"").split(" ");1===i.length&&(i=r.test(i[0])?i.concat(["center"]):h.test(i[0])?["center"].concat(i):["center","center"]),i[0]=r.test(i[0])?i[0]:"center",i[1]=h.test(i[1])?i[1]:"center",t=l.exec(i[0]),e=l.exec(i[1]),k[this]=[t?t[0]:0,e?e[0]:0],n[this]=[c.exec(i[0])[0],c.exec(i[1])[0]]}),1===w.length&&(w[1]=w[0]),"right"===n.at[0]?m.left+=p:"center"===n.at[0]&&(m.left+=p/2),"bottom"===n.at[1]?m.top+=f:"center"===n.at[1]&&(m.top+=f/2),u=e(k.at,p,f),m.left+=u[0],m.top+=u[1],this.each(function(){var s,r,h=t(this),l=h.outerWidth(),c=h.outerHeight(),d=i(this,"marginLeft"),_=i(this,"marginTop"),x=l+d+i(this,"marginRight")+y.width,C=c+_+i(this,"marginBottom")+y.height,D=t.extend({},m),I=e(k.my,h.outerWidth(),h.outerHeight());"right"===n.my[0]?D.left-=l:"center"===n.my[0]&&(D.left-=l/2),"bottom"===n.my[1]?D.top-=c:"center"===n.my[1]&&(D.top-=c/2),D.left+=I[0],D.top+=I[1],s={marginLeft:d,marginTop:_},t.each(["left","top"],function(e,i){t.ui.position[w[e]]&&t.ui.position[w[e]][i](D,{targetWidth:p,targetHeight:f,elemWidth:l,elemHeight:c,collisionPosition:s,collisionWidth:x,collisionHeight:C,offset:[u[0]+I[0],u[1]+I[1]],my:n.my,at:n.at,within:b,elem:h})}),n.using&&(r=function(t){var e=g.left-D.left,i=e+p-l,s=g.top-D.top,r=s+f-c,u={target:{element:v,left:g.left,top:g.top,width:p,height:f},element:{element:h,left:D.left,top:D.top,width:l,height:c},horizontal:0>i?"left":e>0?"right":"center",vertical:0>r?"top":s>0?"bottom":"middle"};l>p&&p>a(e+i)&&(u.horizontal="center"),c>f&&f>a(s+r)&&(u.vertical="middle"),u.important=o(a(e),a(i))>o(a(s),a(r))?"horizontal":"vertical",n.using.call(this,t,u)}),h.offset(t.extend(D,{using:r}))})},t.ui.position={fit:{left:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollLeft:s.offset.left,a=s.width,r=t.left-e.collisionPosition.marginLeft,h=n-r,l=r+e.collisionWidth-a-n;e.collisionWidth>a?h>0&&0>=l?(i=t.left+h+e.collisionWidth-a-n,t.left+=h-i):t.left=l>0&&0>=h?n:h>l?n+a-e.collisionWidth:n:h>0?t.left+=h:l>0?t.left-=l:t.left=o(t.left-r,t.left)},top:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollTop:s.offset.top,a=e.within.height,r=t.top-e.collisionPosition.marginTop,h=n-r,l=r+e.collisionHeight-a-n;e.collisionHeight>a?h>0&&0>=l?(i=t.top+h+e.collisionHeight-a-n,t.top+=h-i):t.top=l>0&&0>=h?n:h>l?n+a-e.collisionHeight:n:h>0?t.top+=h:l>0?t.top-=l:t.top=o(t.top-r,t.top)}},flip:{left:function(t,e){var i,s,n=e.within,o=n.offset.left+n.scrollLeft,r=n.width,h=n.isWindow?n.scrollLeft:n.offset.left,l=t.left-e.collisionPosition.marginLeft,c=l-h,u=l+e.collisionWidth-r-h,d="left"===e.my[0]?-e.elemWidth:"right"===e.my[0]?e.elemWidth:0,p="left"===e.at[0]?e.targetWidth:"right"===e.at[0]?-e.targetWidth:0,f=-2*e.offset[0];0>c?(i=t.left+d+p+f+e.collisionWidth-r-o,(0>i||a(c)>i)&&(t.left+=d+p+f)):u>0&&(s=t.left-e.collisionPosition.marginLeft+d+p+f-h,(s>0||u>a(s))&&(t.left+=d+p+f))},top:function(t,e){var i,s,n=e.within,o=n.offset.top+n.scrollTop,r=n.height,h=n.isWindow?n.scrollTop:n.offset.top,l=t.top-e.collisionPosition.marginTop,c=l-h,u=l+e.collisionHeight-r-h,d="top"===e.my[1],p=d?-e.elemHeight:"bottom"===e.my[1]?e.elemHeight:0,f="top"===e.at[1]?e.targetHeight:"bottom"===e.at[1]?-e.targetHeight:0,g=-2*e.offset[1];0>c?(s=t.top+p+f+g+e.collisionHeight-r-o,(0>s||a(c)>s)&&(t.top+=p+f+g)):u>0&&(i=t.top-e.collisionPosition.marginTop+p+f+g-h,(i>0||u>a(i))&&(t.top+=p+f+g))}},flipfit:{left:function(){t.ui.position.flip.left.apply(this,arguments),t.ui.position.fit.left.apply(this,arguments)},top:function(){t.ui.position.flip.top.apply(this,arguments),t.ui.position.fit.top.apply(this,arguments)}}}}(),t.ui.position,t.extend(t.expr[":"],{data:t.expr.createPseudo?t.expr.createPseudo(function(e){return function(i){return!!t.data(i,e)}}):function(e,i,s){return!!t.data(e,s[3])}}),t.fn.extend({disableSelection:function(){var t="onselectstart"in document.createElement("div")?"selectstart":"mousedown";return function(){return this.on(t+".ui-disableSelection",function(t){t.preventDefault()})}}(),enableSelection:function(){return this.off(".ui-disableSelection")}});var c="ui-effects-",u="ui-effects-style",d="ui-effects-animated",p=t;t.effects={effect:{}},function(t,e){function i(t,e,i){var s=u[e.type]||{};return null==t?i||!e.def?null:e.def:(t=s.floor?~~t:parseFloat(t),isNaN(t)?e.def:s.mod?(t+s.mod)%s.mod:0>t?0:t>s.max?s.max:t)}function s(i){var s=l(),n=s._rgba=[];return i=i.toLowerCase(),f(h,function(t,o){var a,r=o.re.exec(i),h=r&&o.parse(r),l=o.space||"rgba";return h?(a=s[l](h),s[c[l].cache]=a[c[l].cache],n=s._rgba=a._rgba,!1):e}),n.length?("0,0,0,0"===n.join()&&t.extend(n,o.transparent),s):o[i]}function n(t,e,i){return i=(i+1)%1,1>6*i?t+6*(e-t)*i:1>2*i?e:2>3*i?t+6*(e-t)*(2/3-i):t}var o,a="backgroundColor borderBottomColor borderLeftColor borderRightColor borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor",r=/^([\-+])=\s*(\d+\.?\d*)/,h=[{re:/rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(t){return[t[1],t[2],t[3],t[4]]}},{re:/rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(t){return[2.55*t[1],2.55*t[2],2.55*t[3],t[4]]}},{re:/#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/,parse:function(t){return[parseInt(t[1],16),parseInt(t[2],16),parseInt(t[3],16)]}},{re:/#([a-f0-9])([a-f0-9])([a-f0-9])/,parse:function(t){return[parseInt(t[1]+t[1],16),parseInt(t[2]+t[2],16),parseInt(t[3]+t[3],16)]}},{re:/hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,space:"hsla",parse:function(t){return[t[1],t[2]/100,t[3]/100,t[4]]}}],l=t.Color=function(e,i,s,n){return new t.Color.fn.parse(e,i,s,n)},c={rgba:{props:{red:{idx:0,type:"byte"},green:{idx:1,type:"byte"},blue:{idx:2,type:"byte"}}},hsla:{props:{hue:{idx:0,type:"degrees"},saturation:{idx:1,type:"percent"},lightness:{idx:2,type:"percent"}}}},u={"byte":{floor:!0,max:255},percent:{max:1},degrees:{mod:360,floor:!0}},d=l.support={},p=t("<p>")[0],f=t.each;p.style.cssText="background-color:rgba(1,1,1,.5)",d.rgba=p.style.backgroundColor.indexOf("rgba")>-1,f(c,function(t,e){e.cache="_"+t,e.props.alpha={idx:3,type:"percent",def:1}}),l.fn=t.extend(l.prototype,{parse:function(n,a,r,h){if(n===e)return this._rgba=[null,null,null,null],this;(n.jquery||n.nodeType)&&(n=t(n).css(a),a=e);var u=this,d=t.type(n),p=this._rgba=[];return a!==e&&(n=[n,a,r,h],d="array"),"string"===d?this.parse(s(n)||o._default):"array"===d?(f(c.rgba.props,function(t,e){p[e.idx]=i(n[e.idx],e)}),this):"object"===d?(n instanceof l?f(c,function(t,e){n[e.cache]&&(u[e.cache]=n[e.cache].slice())}):f(c,function(e,s){var o=s.cache;f(s.props,function(t,e){if(!u[o]&&s.to){if("alpha"===t||null==n[t])return;u[o]=s.to(u._rgba)}u[o][e.idx]=i(n[t],e,!0)}),u[o]&&0>t.inArray(null,u[o].slice(0,3))&&(u[o][3]=1,s.from&&(u._rgba=s.from(u[o])))}),this):e},is:function(t){var i=l(t),s=!0,n=this;return f(c,function(t,o){var a,r=i[o.cache];return r&&(a=n[o.cache]||o.to&&o.to(n._rgba)||[],f(o.props,function(t,i){return null!=r[i.idx]?s=r[i.idx]===a[i.idx]:e})),s}),s},_space:function(){var t=[],e=this;return f(c,function(i,s){e[s.cache]&&t.push(i)}),t.pop()},transition:function(t,e){var s=l(t),n=s._space(),o=c[n],a=0===this.alpha()?l("transparent"):this,r=a[o.cache]||o.to(a._rgba),h=r.slice();return s=s[o.cache],f(o.props,function(t,n){var o=n.idx,a=r[o],l=s[o],c=u[n.type]||{};null!==l&&(null===a?h[o]=l:(c.mod&&(l-a>c.mod/2?a+=c.mod:a-l>c.mod/2&&(a-=c.mod)),h[o]=i((l-a)*e+a,n)))}),this[n](h)},blend:function(e){if(1===this._rgba[3])return this;var i=this._rgba.slice(),s=i.pop(),n=l(e)._rgba;return l(t.map(i,function(t,e){return(1-s)*n[e]+s*t}))},toRgbaString:function(){var e="rgba(",i=t.map(this._rgba,function(t,e){return null==t?e>2?1:0:t});return 1===i[3]&&(i.pop(),e="rgb("),e+i.join()+")"},toHslaString:function(){var e="hsla(",i=t.map(this.hsla(),function(t,e){return null==t&&(t=e>2?1:0),e&&3>e&&(t=Math.round(100*t)+"%"),t});return 1===i[3]&&(i.pop(),e="hsl("),e+i.join()+")"},toHexString:function(e){var i=this._rgba.slice(),s=i.pop();return e&&i.push(~~(255*s)),"#"+t.map(i,function(t){return t=(t||0).toString(16),1===t.length?"0"+t:t}).join("")},toString:function(){return 0===this._rgba[3]?"transparent":this.toRgbaString()}}),l.fn.parse.prototype=l.fn,c.hsla.to=function(t){if(null==t[0]||null==t[1]||null==t[2])return[null,null,null,t[3]];var e,i,s=t[0]/255,n=t[1]/255,o=t[2]/255,a=t[3],r=Math.max(s,n,o),h=Math.min(s,n,o),l=r-h,c=r+h,u=.5*c;return e=h===r?0:s===r?60*(n-o)/l+360:n===r?60*(o-s)/l+120:60*(s-n)/l+240,i=0===l?0:.5>=u?l/c:l/(2-c),[Math.round(e)%360,i,u,null==a?1:a]},c.hsla.from=function(t){if(null==t[0]||null==t[1]||null==t[2])return[null,null,null,t[3]];var e=t[0]/360,i=t[1],s=t[2],o=t[3],a=.5>=s?s*(1+i):s+i-s*i,r=2*s-a;return[Math.round(255*n(r,a,e+1/3)),Math.round(255*n(r,a,e)),Math.round(255*n(r,a,e-1/3)),o]},f(c,function(s,n){var o=n.props,a=n.cache,h=n.to,c=n.from;l.fn[s]=function(s){if(h&&!this[a]&&(this[a]=h(this._rgba)),s===e)return this[a].slice();var n,r=t.type(s),u="array"===r||"object"===r?s:arguments,d=this[a].slice();return f(o,function(t,e){var s=u["object"===r?t:e.idx];null==s&&(s=d[e.idx]),d[e.idx]=i(s,e)}),c?(n=l(c(d)),n[a]=d,n):l(d)},f(o,function(e,i){l.fn[e]||(l.fn[e]=function(n){var o,a=t.type(n),h="alpha"===e?this._hsla?"hsla":"rgba":s,l=this[h](),c=l[i.idx];return"undefined"===a?c:("function"===a&&(n=n.call(this,c),a=t.type(n)),null==n&&i.empty?this:("string"===a&&(o=r.exec(n),o&&(n=c+parseFloat(o[2])*("+"===o[1]?1:-1))),l[i.idx]=n,this[h](l)))})})}),l.hook=function(e){var i=e.split(" ");f(i,function(e,i){t.cssHooks[i]={set:function(e,n){var o,a,r="";if("transparent"!==n&&("string"!==t.type(n)||(o=s(n)))){if(n=l(o||n),!d.rgba&&1!==n._rgba[3]){for(a="backgroundColor"===i?e.parentNode:e;(""===r||"transparent"===r)&&a&&a.style;)try{r=t.css(a,"backgroundColor"),a=a.parentNode}catch(h){}n=n.blend(r&&"transparent"!==r?r:"_default")}n=n.toRgbaString()}try{e.style[i]=n}catch(h){}}},t.fx.step[i]=function(e){e.colorInit||(e.start=l(e.elem,i),e.end=l(e.end),e.colorInit=!0),t.cssHooks[i].set(e.elem,e.start.transition(e.end,e.pos))}})},l.hook(a),t.cssHooks.borderColor={expand:function(t){var e={};return f(["Top","Right","Bottom","Left"],function(i,s){e["border"+s+"Color"]=t}),e}},o=t.Color.names={aqua:"#00ffff",black:"#000000",blue:"#0000ff",fuchsia:"#ff00ff",gray:"#808080",green:"#008000",lime:"#00ff00",maroon:"#800000",navy:"#000080",olive:"#808000",purple:"#800080",red:"#ff0000",silver:"#c0c0c0",teal:"#008080",white:"#ffffff",yellow:"#ffff00",transparent:[null,null,null,0],_default:"#ffffff"}}(p),function(){function e(e){var i,s,n=e.ownerDocument.defaultView?e.ownerDocument.defaultView.getComputedStyle(e,null):e.currentStyle,o={};if(n&&n.length&&n[0]&&n[n[0]])for(s=n.length;s--;)i=n[s],"string"==typeof n[i]&&(o[t.camelCase(i)]=n[i]);else for(i in n)"string"==typeof n[i]&&(o[i]=n[i]);return o}function i(e,i){var s,o,a={};for(s in i)o=i[s],e[s]!==o&&(n[s]||(t.fx.step[s]||!isNaN(parseFloat(o)))&&(a[s]=o));return a}var s=["add","remove","toggle"],n={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};t.each(["borderLeftStyle","borderRightStyle","borderBottomStyle","borderTopStyle"],function(e,i){t.fx.step[i]=function(t){("none"!==t.end&&!t.setAttr||1===t.pos&&!t.setAttr)&&(p.style(t.elem,i,t.end),t.setAttr=!0)}}),t.fn.addBack||(t.fn.addBack=function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}),t.effects.animateClass=function(n,o,a,r){var h=t.speed(o,a,r);return this.queue(function(){var o,a=t(this),r=a.attr("class")||"",l=h.children?a.find("*").addBack():a;l=l.map(function(){var i=t(this);return{el:i,start:e(this)}}),o=function(){t.each(s,function(t,e){n[e]&&a[e+"Class"](n[e])})},o(),l=l.map(function(){return this.end=e(this.el[0]),this.diff=i(this.start,this.end),this}),a.attr("class",r),l=l.map(function(){var e=this,i=t.Deferred(),s=t.extend({},h,{queue:!1,complete:function(){i.resolve(e)}});return this.el.animate(this.diff,s),i.promise()}),t.when.apply(t,l.get()).done(function(){o(),t.each(arguments,function(){var e=this.el;t.each(this.diff,function(t){e.css(t,"")})}),h.complete.call(a[0])})})},t.fn.extend({addClass:function(e){return function(i,s,n,o){return s?t.effects.animateClass.call(this,{add:i},s,n,o):e.apply(this,arguments)}}(t.fn.addClass),removeClass:function(e){return function(i,s,n,o){return arguments.length>1?t.effects.animateClass.call(this,{remove:i},s,n,o):e.apply(this,arguments)}}(t.fn.removeClass),toggleClass:function(e){return function(i,s,n,o,a){return"boolean"==typeof s||void 0===s?n?t.effects.animateClass.call(this,s?{add:i}:{remove:i},n,o,a):e.apply(this,arguments):t.effects.animateClass.call(this,{toggle:i},s,n,o)}}(t.fn.toggleClass),switchClass:function(e,i,s,n,o){return t.effects.animateClass.call(this,{add:i,remove:e},s,n,o)}})}(),function(){function e(e,i,s,n){return t.isPlainObject(e)&&(i=e,e=e.effect),e={effect:e},null==i&&(i={}),t.isFunction(i)&&(n=i,s=null,i={}),("number"==typeof i||t.fx.speeds[i])&&(n=s,s=i,i={}),t.isFunction(s)&&(n=s,s=null),i&&t.extend(e,i),s=s||i.duration,e.duration=t.fx.off?0:"number"==typeof s?s:s in t.fx.speeds?t.fx.speeds[s]:t.fx.speeds._default,e.complete=n||i.complete,e}function i(e){return!e||"number"==typeof e||t.fx.speeds[e]?!0:"string"!=typeof e||t.effects.effect[e]?t.isFunction(e)?!0:"object"!=typeof e||e.effect?!1:!0:!0}function s(t,e){var i=e.outerWidth(),s=e.outerHeight(),n=/^rect\((-?\d*\.?\d*px|-?\d+%|auto),?\s*(-?\d*\.?\d*px|-?\d+%|auto),?\s*(-?\d*\.?\d*px|-?\d+%|auto),?\s*(-?\d*\.?\d*px|-?\d+%|auto)\)$/,o=n.exec(t)||["",0,i,s,0];return{top:parseFloat(o[1])||0,right:"auto"===o[2]?i:parseFloat(o[2]),bottom:"auto"===o[3]?s:parseFloat(o[3]),left:parseFloat(o[4])||0}}t.expr&&t.expr.filters&&t.expr.filters.animated&&(t.expr.filters.animated=function(e){return function(i){return!!t(i).data(d)||e(i)}}(t.expr.filters.animated)),t.uiBackCompat!==!1&&t.extend(t.effects,{save:function(t,e){for(var i=0,s=e.length;s>i;i++)null!==e[i]&&t.data(c+e[i],t[0].style[e[i]])},restore:function(t,e){for(var i,s=0,n=e.length;n>s;s++)null!==e[s]&&(i=t.data(c+e[s]),t.css(e[s],i))},setMode:function(t,e){return"toggle"===e&&(e=t.is(":hidden")?"show":"hide"),e},createWrapper:function(e){if(e.parent().is(".ui-effects-wrapper"))return e.parent();var i={width:e.outerWidth(!0),height:e.outerHeight(!0),"float":e.css("float")},s=t("<div></div>").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}),n={width:e.width(),height:e.height()},o=document.activeElement;try{o.id}catch(a){o=document.body}return e.wrap(s),(e[0]===o||t.contains(e[0],o))&&t(o).trigger("focus"),s=e.parent(),"static"===e.css("position")?(s.css({position:"relative"}),e.css({position:"relative"})):(t.extend(i,{position:e.css("position"),zIndex:e.css("z-index")}),t.each(["top","left","bottom","right"],function(t,s){i[s]=e.css(s),isNaN(parseInt(i[s],10))&&(i[s]="auto")}),e.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})),e.css(n),s.css(i).show()},removeWrapper:function(e){var i=document.activeElement;return e.parent().is(".ui-effects-wrapper")&&(e.parent().replaceWith(e),(e[0]===i||t.contains(e[0],i))&&t(i).trigger("focus")),e}}),t.extend(t.effects,{version:"1.12.1",define:function(e,i,s){return s||(s=i,i="effect"),t.effects.effect[e]=s,t.effects.effect[e].mode=i,s},scaledDimensions:function(t,e,i){if(0===e)return{height:0,width:0,outerHeight:0,outerWidth:0};var s="horizontal"!==i?(e||100)/100:1,n="vertical"!==i?(e||100)/100:1;return{height:t.height()*n,width:t.width()*s,outerHeight:t.outerHeight()*n,outerWidth:t.outerWidth()*s}},clipToBox:function(t){return{width:t.clip.right-t.clip.left,height:t.clip.bottom-t.clip.top,left:t.clip.left,top:t.clip.top}},unshift:function(t,e,i){var s=t.queue();e>1&&s.splice.apply(s,[1,0].concat(s.splice(e,i))),t.dequeue()},saveStyle:function(t){t.data(u,t[0].style.cssText)},restoreStyle:function(t){t[0].style.cssText=t.data(u)||"",t.removeData(u)},mode:function(t,e){var i=t.is(":hidden");return"toggle"===e&&(e=i?"show":"hide"),(i?"hide"===e:"show"===e)&&(e="none"),e},getBaseline:function(t,e){var i,s;switch(t[0]){case"top":i=0;break;case"middle":i=.5;break;case"bottom":i=1;break;default:i=t[0]/e.height}switch(t[1]){case"left":s=0;break;case"center":s=.5;break;case"right":s=1;break;default:s=t[1]/e.width}return{x:s,y:i}},createPlaceholder:function(e){var i,s=e.css("position"),n=e.position();return e.css({marginTop:e.css("marginTop"),marginBottom:e.css("marginBottom"),marginLeft:e.css("marginLeft"),marginRight:e.css("marginRight")}).outerWidth(e.outerWidth()).outerHeight(e.outerHeight()),/^(static|relative)/.test(s)&&(s="absolute",i=t("<"+e[0].nodeName+">").insertAfter(e).css({display:/^(inline|ruby)/.test(e.css("display"))?"inline-block":"block",visibility:"hidden",marginTop:e.css("marginTop"),marginBottom:e.css("marginBottom"),marginLeft:e.css("marginLeft"),marginRight:e.css("marginRight"),"float":e.css("float")}).outerWidth(e.outerWidth()).outerHeight(e.outerHeight()).addClass("ui-effects-placeholder"),e.data(c+"placeholder",i)),e.css({position:s,left:n.left,top:n.top}),i},removePlaceholder:function(t){var e=c+"placeholder",i=t.data(e);i&&(i.remove(),t.removeData(e))},cleanUp:function(e){t.effects.restoreStyle(e),t.effects.removePlaceholder(e)},setTransition:function(e,i,s,n){return n=n||{},t.each(i,function(t,i){var o=e.cssUnit(i);o[0]>0&&(n[i]=o[0]*s+o[1])}),n}}),t.fn.extend({effect:function(){function i(e){function i(){r.removeData(d),t.effects.cleanUp(r),"hide"===s.mode&&r.hide(),a()}function a(){t.isFunction(h)&&h.call(r[0]),t.isFunction(e)&&e()}var r=t(this);s.mode=c.shift(),t.uiBackCompat===!1||o?"none"===s.mode?(r[l](),a()):n.call(r[0],s,i):(r.is(":hidden")?"hide"===l:"show"===l)?(r[l](),a()):n.call(r[0],s,a)}var s=e.apply(this,arguments),n=t.effects.effect[s.effect],o=n.mode,a=s.queue,r=a||"fx",h=s.complete,l=s.mode,c=[],u=function(e){var i=t(this),s=t.effects.mode(i,l)||o;i.data(d,!0),c.push(s),o&&("show"===s||s===o&&"hide"===s)&&i.show(),o&&"none"===s||t.effects.saveStyle(i),t.isFunction(e)&&e()};return t.fx.off||!n?l?this[l](s.duration,h):this.each(function(){h&&h.call(this)}):a===!1?this.each(u).each(i):this.queue(r,u).queue(r,i)},show:function(t){return function(s){if(i(s))return t.apply(this,arguments);var n=e.apply(this,arguments);return n.mode="show",this.effect.call(this,n)
42021}}(t.fn.show),hide:function(t){return function(s){if(i(s))return t.apply(this,arguments);var n=e.apply(this,arguments);return n.mode="hide",this.effect.call(this,n)}}(t.fn.hide),toggle:function(t){return function(s){if(i(s)||"boolean"==typeof s)return t.apply(this,arguments);var n=e.apply(this,arguments);return n.mode="toggle",this.effect.call(this,n)}}(t.fn.toggle),cssUnit:function(e){var i=this.css(e),s=[];return t.each(["em","px","%","pt"],function(t,e){i.indexOf(e)>0&&(s=[parseFloat(i),e])}),s},cssClip:function(t){return t?this.css("clip","rect("+t.top+"px "+t.right+"px "+t.bottom+"px "+t.left+"px)"):s(this.css("clip"),this)},transfer:function(e,i){var s=t(this),n=t(e.to),o="fixed"===n.css("position"),a=t("body"),r=o?a.scrollTop():0,h=o?a.scrollLeft():0,l=n.offset(),c={top:l.top-r,left:l.left-h,height:n.innerHeight(),width:n.innerWidth()},u=s.offset(),d=t("<div class='ui-effects-transfer'></div>").appendTo("body").addClass(e.className).css({top:u.top-r,left:u.left-h,height:s.innerHeight(),width:s.innerWidth(),position:o?"fixed":"absolute"}).animate(c,e.duration,e.easing,function(){d.remove(),t.isFunction(i)&&i()})}}),t.fx.step.clip=function(e){e.clipInit||(e.start=t(e.elem).cssClip(),"string"==typeof e.end&&(e.end=s(e.end,e.elem)),e.clipInit=!0),t(e.elem).cssClip({top:e.pos*(e.end.top-e.start.top)+e.start.top,right:e.pos*(e.end.right-e.start.right)+e.start.right,bottom:e.pos*(e.end.bottom-e.start.bottom)+e.start.bottom,left:e.pos*(e.end.left-e.start.left)+e.start.left})}}(),function(){var e={};t.each(["Quad","Cubic","Quart","Quint","Expo"],function(t,i){e[i]=function(e){return Math.pow(e,t+2)}}),t.extend(e,{Sine:function(t){return 1-Math.cos(t*Math.PI/2)},Circ:function(t){return 1-Math.sqrt(1-t*t)},Elastic:function(t){return 0===t||1===t?t:-Math.pow(2,8*(t-1))*Math.sin((80*(t-1)-7.5)*Math.PI/15)},Back:function(t){return t*t*(3*t-2)},Bounce:function(t){for(var e,i=4;((e=Math.pow(2,--i))-1)/11>t;);return 1/Math.pow(4,3-i)-7.5625*Math.pow((3*e-2)/22-t,2)}}),t.each(e,function(e,i){t.easing["easeIn"+e]=i,t.easing["easeOut"+e]=function(t){return 1-i(1-t)},t.easing["easeInOut"+e]=function(t){return.5>t?i(2*t)/2:1-i(-2*t+2)/2}})}();var f=t.effects;t.effects.define("blind","hide",function(e,i){var s={up:["bottom","top"],vertical:["bottom","top"],down:["top","bottom"],left:["right","left"],horizontal:["right","left"],right:["left","right"]},n=t(this),o=e.direction||"up",a=n.cssClip(),r={clip:t.extend({},a)},h=t.effects.createPlaceholder(n);r.clip[s[o][0]]=r.clip[s[o][1]],"show"===e.mode&&(n.cssClip(r.clip),h&&h.css(t.effects.clipToBox(r)),r.clip=a),h&&h.animate(t.effects.clipToBox(r),e.duration,e.easing),n.animate(r,{queue:!1,duration:e.duration,easing:e.easing,complete:i})}),t.effects.define("bounce",function(e,i){var s,n,o,a=t(this),r=e.mode,h="hide"===r,l="show"===r,c=e.direction||"up",u=e.distance,d=e.times||5,p=2*d+(l||h?1:0),f=e.duration/p,g=e.easing,m="up"===c||"down"===c?"top":"left",_="up"===c||"left"===c,v=0,b=a.queue().length;for(t.effects.createPlaceholder(a),o=a.css(m),u||(u=a["top"===m?"outerHeight":"outerWidth"]()/3),l&&(n={opacity:1},n[m]=o,a.css("opacity",0).css(m,_?2*-u:2*u).animate(n,f,g)),h&&(u/=Math.pow(2,d-1)),n={},n[m]=o;d>v;v++)s={},s[m]=(_?"-=":"+=")+u,a.animate(s,f,g).animate(n,f,g),u=h?2*u:u/2;h&&(s={opacity:0},s[m]=(_?"-=":"+=")+u,a.animate(s,f,g)),a.queue(i),t.effects.unshift(a,b,p+1)}),t.effects.define("clip","hide",function(e,i){var s,n={},o=t(this),a=e.direction||"vertical",r="both"===a,h=r||"horizontal"===a,l=r||"vertical"===a;s=o.cssClip(),n.clip={top:l?(s.bottom-s.top)/2:s.top,right:h?(s.right-s.left)/2:s.right,bottom:l?(s.bottom-s.top)/2:s.bottom,left:h?(s.right-s.left)/2:s.left},t.effects.createPlaceholder(o),"show"===e.mode&&(o.cssClip(n.clip),n.clip=s),o.animate(n,{queue:!1,duration:e.duration,easing:e.easing,complete:i})}),t.effects.define("drop","hide",function(e,i){var s,n=t(this),o=e.mode,a="show"===o,r=e.direction||"left",h="up"===r||"down"===r?"top":"left",l="up"===r||"left"===r?"-=":"+=",c="+="===l?"-=":"+=",u={opacity:0};t.effects.createPlaceholder(n),s=e.distance||n["top"===h?"outerHeight":"outerWidth"](!0)/2,u[h]=l+s,a&&(n.css(u),u[h]=c+s,u.opacity=1),n.animate(u,{queue:!1,duration:e.duration,easing:e.easing,complete:i})}),t.effects.define("explode","hide",function(e,i){function s(){b.push(this),b.length===u*d&&n()}function n(){p.css({visibility:"visible"}),t(b).remove(),i()}var o,a,r,h,l,c,u=e.pieces?Math.round(Math.sqrt(e.pieces)):3,d=u,p=t(this),f=e.mode,g="show"===f,m=p.show().css("visibility","hidden").offset(),_=Math.ceil(p.outerWidth()/d),v=Math.ceil(p.outerHeight()/u),b=[];for(o=0;u>o;o++)for(h=m.top+o*v,c=o-(u-1)/2,a=0;d>a;a++)r=m.left+a*_,l=a-(d-1)/2,p.clone().appendTo("body").wrap("<div></div>").css({position:"absolute",visibility:"visible",left:-a*_,top:-o*v}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:_,height:v,left:r+(g?l*_:0),top:h+(g?c*v:0),opacity:g?0:1}).animate({left:r+(g?0:l*_),top:h+(g?0:c*v),opacity:g?1:0},e.duration||500,e.easing,s)}),t.effects.define("fade","toggle",function(e,i){var s="show"===e.mode;t(this).css("opacity",s?0:1).animate({opacity:s?1:0},{queue:!1,duration:e.duration,easing:e.easing,complete:i})}),t.effects.define("fold","hide",function(e,i){var s=t(this),n=e.mode,o="show"===n,a="hide"===n,r=e.size||15,h=/([0-9]+)%/.exec(r),l=!!e.horizFirst,c=l?["right","bottom"]:["bottom","right"],u=e.duration/2,d=t.effects.createPlaceholder(s),p=s.cssClip(),f={clip:t.extend({},p)},g={clip:t.extend({},p)},m=[p[c[0]],p[c[1]]],_=s.queue().length;h&&(r=parseInt(h[1],10)/100*m[a?0:1]),f.clip[c[0]]=r,g.clip[c[0]]=r,g.clip[c[1]]=0,o&&(s.cssClip(g.clip),d&&d.css(t.effects.clipToBox(g)),g.clip=p),s.queue(function(i){d&&d.animate(t.effects.clipToBox(f),u,e.easing).animate(t.effects.clipToBox(g),u,e.easing),i()}).animate(f,u,e.easing).animate(g,u,e.easing).queue(i),t.effects.unshift(s,_,4)}),t.effects.define("highlight","show",function(e,i){var s=t(this),n={backgroundColor:s.css("backgroundColor")};"hide"===e.mode&&(n.opacity=0),t.effects.saveStyle(s),s.css({backgroundImage:"none",backgroundColor:e.color||"#ffff99"}).animate(n,{queue:!1,duration:e.duration,easing:e.easing,complete:i})}),t.effects.define("size",function(e,i){var s,n,o,a=t(this),r=["fontSize"],h=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"],l=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"],c=e.mode,u="effect"!==c,d=e.scale||"both",p=e.origin||["middle","center"],f=a.css("position"),g=a.position(),m=t.effects.scaledDimensions(a),_=e.from||m,v=e.to||t.effects.scaledDimensions(a,0);t.effects.createPlaceholder(a),"show"===c&&(o=_,_=v,v=o),n={from:{y:_.height/m.height,x:_.width/m.width},to:{y:v.height/m.height,x:v.width/m.width}},("box"===d||"both"===d)&&(n.from.y!==n.to.y&&(_=t.effects.setTransition(a,h,n.from.y,_),v=t.effects.setTransition(a,h,n.to.y,v)),n.from.x!==n.to.x&&(_=t.effects.setTransition(a,l,n.from.x,_),v=t.effects.setTransition(a,l,n.to.x,v))),("content"===d||"both"===d)&&n.from.y!==n.to.y&&(_=t.effects.setTransition(a,r,n.from.y,_),v=t.effects.setTransition(a,r,n.to.y,v)),p&&(s=t.effects.getBaseline(p,m),_.top=(m.outerHeight-_.outerHeight)*s.y+g.top,_.left=(m.outerWidth-_.outerWidth)*s.x+g.left,v.top=(m.outerHeight-v.outerHeight)*s.y+g.top,v.left=(m.outerWidth-v.outerWidth)*s.x+g.left),a.css(_),("content"===d||"both"===d)&&(h=h.concat(["marginTop","marginBottom"]).concat(r),l=l.concat(["marginLeft","marginRight"]),a.find("*[width]").each(function(){var i=t(this),s=t.effects.scaledDimensions(i),o={height:s.height*n.from.y,width:s.width*n.from.x,outerHeight:s.outerHeight*n.from.y,outerWidth:s.outerWidth*n.from.x},a={height:s.height*n.to.y,width:s.width*n.to.x,outerHeight:s.height*n.to.y,outerWidth:s.width*n.to.x};n.from.y!==n.to.y&&(o=t.effects.setTransition(i,h,n.from.y,o),a=t.effects.setTransition(i,h,n.to.y,a)),n.from.x!==n.to.x&&(o=t.effects.setTransition(i,l,n.from.x,o),a=t.effects.setTransition(i,l,n.to.x,a)),u&&t.effects.saveStyle(i),i.css(o),i.animate(a,e.duration,e.easing,function(){u&&t.effects.restoreStyle(i)})})),a.animate(v,{queue:!1,duration:e.duration,easing:e.easing,complete:function(){var e=a.offset();0===v.opacity&&a.css("opacity",_.opacity),u||(a.css("position","static"===f?"relative":f).offset(e),t.effects.saveStyle(a)),i()}})}),t.effects.define("scale",function(e,i){var s=t(this),n=e.mode,o=parseInt(e.percent,10)||(0===parseInt(e.percent,10)?0:"effect"!==n?0:100),a=t.extend(!0,{from:t.effects.scaledDimensions(s),to:t.effects.scaledDimensions(s,o,e.direction||"both"),origin:e.origin||["middle","center"]},e);e.fade&&(a.from.opacity=1,a.to.opacity=0),t.effects.effect.size.call(this,a,i)}),t.effects.define("puff","hide",function(e,i){var s=t.extend(!0,{},e,{fade:!0,percent:parseInt(e.percent,10)||150});t.effects.effect.scale.call(this,s,i)}),t.effects.define("pulsate","show",function(e,i){var s=t(this),n=e.mode,o="show"===n,a="hide"===n,r=o||a,h=2*(e.times||5)+(r?1:0),l=e.duration/h,c=0,u=1,d=s.queue().length;for((o||!s.is(":visible"))&&(s.css("opacity",0).show(),c=1);h>u;u++)s.animate({opacity:c},l,e.easing),c=1-c;s.animate({opacity:c},l,e.easing),s.queue(i),t.effects.unshift(s,d,h+1)}),t.effects.define("shake",function(e,i){var s=1,n=t(this),o=e.direction||"left",a=e.distance||20,r=e.times||3,h=2*r+1,l=Math.round(e.duration/h),c="up"===o||"down"===o?"top":"left",u="up"===o||"left"===o,d={},p={},f={},g=n.queue().length;for(t.effects.createPlaceholder(n),d[c]=(u?"-=":"+=")+a,p[c]=(u?"+=":"-=")+2*a,f[c]=(u?"-=":"+=")+2*a,n.animate(d,l,e.easing);r>s;s++)n.animate(p,l,e.easing).animate(f,l,e.easing);n.animate(p,l,e.easing).animate(d,l/2,e.easing).queue(i),t.effects.unshift(n,g,h+1)}),t.effects.define("slide","show",function(e,i){var s,n,o=t(this),a={up:["bottom","top"],down:["top","bottom"],left:["right","left"],right:["left","right"]},r=e.mode,h=e.direction||"left",l="up"===h||"down"===h?"top":"left",c="up"===h||"left"===h,u=e.distance||o["top"===l?"outerHeight":"outerWidth"](!0),d={};t.effects.createPlaceholder(o),s=o.cssClip(),n=o.position()[l],d[l]=(c?-1:1)*u+n,d.clip=o.cssClip(),d.clip[a[h][1]]=d.clip[a[h][0]],"show"===r&&(o.cssClip(d.clip),o.css(l,d[l]),d.clip=s,d[l]=n),o.animate(d,{queue:!1,duration:e.duration,easing:e.easing,complete:i})});var f;t.uiBackCompat!==!1&&(f=t.effects.define("transfer",function(e,i){t(this).transfer(e,i)})),t.ui.focusable=function(i,s){var n,o,a,r,h,l=i.nodeName.toLowerCase();return"area"===l?(n=i.parentNode,o=n.name,i.href&&o&&"map"===n.nodeName.toLowerCase()?(a=t("img[usemap='#"+o+"']"),a.length>0&&a.is(":visible")):!1):(/^(input|select|textarea|button|object)$/.test(l)?(r=!i.disabled,r&&(h=t(i).closest("fieldset")[0],h&&(r=!h.disabled))):r="a"===l?i.href||s:s,r&&t(i).is(":visible")&&e(t(i)))},t.extend(t.expr[":"],{focusable:function(e){return t.ui.focusable(e,null!=t.attr(e,"tabindex"))}}),t.ui.focusable,t.fn.form=function(){return"string"==typeof this[0].form?this.closest("form"):t(this[0].form)},t.ui.formResetMixin={_formResetHandler:function(){var e=t(this);setTimeout(function(){var i=e.data("ui-form-reset-instances");t.each(i,function(){this.refresh()})})},_bindFormResetHandler:function(){if(this.form=this.element.form(),this.form.length){var t=this.form.data("ui-form-reset-instances")||[];t.length||this.form.on("reset.ui-form-reset",this._formResetHandler),t.push(this),this.form.data("ui-form-reset-instances",t)}},_unbindFormResetHandler:function(){if(this.form.length){var e=this.form.data("ui-form-reset-instances");e.splice(t.inArray(this,e),1),e.length?this.form.data("ui-form-reset-instances",e):this.form.removeData("ui-form-reset-instances").off("reset.ui-form-reset")}}},"1.7"===t.fn.jquery.substring(0,3)&&(t.each(["Width","Height"],function(e,i){function s(e,i,s,o){return t.each(n,function(){i-=parseFloat(t.css(e,"padding"+this))||0,s&&(i-=parseFloat(t.css(e,"border"+this+"Width"))||0),o&&(i-=parseFloat(t.css(e,"margin"+this))||0)}),i}var n="Width"===i?["Left","Right"]:["Top","Bottom"],o=i.toLowerCase(),a={innerWidth:t.fn.innerWidth,innerHeight:t.fn.innerHeight,outerWidth:t.fn.outerWidth,outerHeight:t.fn.outerHeight};t.fn["inner"+i]=function(e){return void 0===e?a["inner"+i].call(this):this.each(function(){t(this).css(o,s(this,e)+"px")})},t.fn["outer"+i]=function(e,n){return"number"!=typeof e?a["outer"+i].call(this,e):this.each(function(){t(this).css(o,s(this,e,!0,n)+"px")})}}),t.fn.addBack=function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}),t.ui.keyCode={BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38},t.ui.escapeSelector=function(){var t=/([!"#$%&'()*+,./:;<=>?@[\]^`{|}~])/g;return function(e){return e.replace(t,"\\$1")}}(),t.fn.labels=function(){var e,i,s,n,o;return this[0].labels&&this[0].labels.length?this.pushStack(this[0].labels):(n=this.eq(0).parents("label"),s=this.attr("id"),s&&(e=this.eq(0).parents().last(),o=e.add(e.length?e.siblings():this.siblings()),i="label[for='"+t.ui.escapeSelector(s)+"']",n=n.add(o.find(i).addBack(i))),this.pushStack(n))},t.fn.scrollParent=function(e){var i=this.css("position"),s="absolute"===i,n=e?/(auto|scroll|hidden)/:/(auto|scroll)/,o=this.parents().filter(function(){var e=t(this);return s&&"static"===e.css("position")?!1:n.test(e.css("overflow")+e.css("overflow-y")+e.css("overflow-x"))}).eq(0);return"fixed"!==i&&o.length?o:t(this[0].ownerDocument||document)},t.extend(t.expr[":"],{tabbable:function(e){var i=t.attr(e,"tabindex"),s=null!=i;return(!s||i>=0)&&t.ui.focusable(e,s)}}),t.fn.extend({uniqueId:function(){var t=0;return function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++t)})}}(),removeUniqueId:function(){return this.each(function(){/^ui-id-\d+$/.test(this.id)&&t(this).removeAttr("id")})}}),t.widget("ui.accordion",{version:"1.12.1",options:{active:0,animate:{},classes:{"ui-accordion-header":"ui-corner-top","ui-accordion-header-collapsed":"ui-corner-all","ui-accordion-content":"ui-corner-bottom"},collapsible:!1,event:"click",header:"> li > :first-child, > :not(li):even",heightStyle:"auto",icons:{activeHeader:"ui-icon-triangle-1-s",header:"ui-icon-triangle-1-e"},activate:null,beforeActivate:null},hideProps:{borderTopWidth:"hide",borderBottomWidth:"hide",paddingTop:"hide",paddingBottom:"hide",height:"hide"},showProps:{borderTopWidth:"show",borderBottomWidth:"show",paddingTop:"show",paddingBottom:"show",height:"show"},_create:function(){var e=this.options;this.prevShow=this.prevHide=t(),this._addClass("ui-accordion","ui-widget ui-helper-reset"),this.element.attr("role","tablist"),e.collapsible||e.active!==!1&&null!=e.active||(e.active=0),this._processPanels(),0>e.active&&(e.active+=this.headers.length),this._refresh()},_getCreateEventData:function(){return{header:this.active,panel:this.active.length?this.active.next():t()}},_createIcons:function(){var e,i,s=this.options.icons;s&&(e=t("<span>"),this._addClass(e,"ui-accordion-header-icon","ui-icon "+s.header),e.prependTo(this.headers),i=this.active.children(".ui-accordion-header-icon"),this._removeClass(i,s.header)._addClass(i,null,s.activeHeader)._addClass(this.headers,"ui-accordion-icons"))},_destroyIcons:function(){this._removeClass(this.headers,"ui-accordion-icons"),this.headers.children(".ui-accordion-header-icon").remove()},_destroy:function(){var t;this.element.removeAttr("role"),this.headers.removeAttr("role aria-expanded aria-selected aria-controls tabIndex").removeUniqueId(),this._destroyIcons(),t=this.headers.next().css("display","").removeAttr("role aria-hidden aria-labelledby").removeUniqueId(),"content"!==this.options.heightStyle&&t.css("height","")},_setOption:function(t,e){return"active"===t?(this._activate(e),void 0):("event"===t&&(this.options.event&&this._off(this.headers,this.options.event),this._setupEvents(e)),this._super(t,e),"collapsible"!==t||e||this.options.active!==!1||this._activate(0),"icons"===t&&(this._destroyIcons(),e&&this._createIcons()),void 0)},_setOptionDisabled:function(t){this._super(t),this.element.attr("aria-disabled",t),this._toggleClass(null,"ui-state-disabled",!!t),this._toggleClass(this.headers.add(this.headers.next()),null,"ui-state-disabled",!!t)},_keydown:function(e){if(!e.altKey&&!e.ctrlKey){var i=t.ui.keyCode,s=this.headers.length,n=this.headers.index(e.target),o=!1;switch(e.keyCode){case i.RIGHT:case i.DOWN:o=this.headers[(n+1)%s];break;case i.LEFT:case i.UP:o=this.headers[(n-1+s)%s];break;case i.SPACE:case i.ENTER:this._eventHandler(e);break;case i.HOME:o=this.headers[0];break;case i.END:o=this.headers[s-1]}o&&(t(e.target).attr("tabIndex",-1),t(o).attr("tabIndex",0),t(o).trigger("focus"),e.preventDefault())}},_panelKeyDown:function(e){e.keyCode===t.ui.keyCode.UP&&e.ctrlKey&&t(e.currentTarget).prev().trigger("focus")},refresh:function(){var e=this.options;this._processPanels(),e.active===!1&&e.collapsible===!0||!this.headers.length?(e.active=!1,this.active=t()):e.active===!1?this._activate(0):this.active.length&&!t.contains(this.element[0],this.active[0])?this.headers.length===this.headers.find(".ui-state-disabled").length?(e.active=!1,this.active=t()):this._activate(Math.max(0,e.active-1)):e.active=this.headers.index(this.active),this._destroyIcons(),this._refresh()},_processPanels:function(){var t=this.headers,e=this.panels;this.headers=this.element.find(this.options.header),this._addClass(this.headers,"ui-accordion-header ui-accordion-header-collapsed","ui-state-default"),this.panels=this.headers.next().filter(":not(.ui-accordion-content-active)").hide(),this._addClass(this.panels,"ui-accordion-content","ui-helper-reset ui-widget-content"),e&&(this._off(t.not(this.headers)),this._off(e.not(this.panels)))},_refresh:function(){var e,i=this.options,s=i.heightStyle,n=this.element.parent();this.active=this._findActive(i.active),this._addClass(this.active,"ui-accordion-header-active","ui-state-active")._removeClass(this.active,"ui-accordion-header-collapsed"),this._addClass(this.active.next(),"ui-accordion-content-active"),this.active.next().show(),this.headers.attr("role","tab").each(function(){var e=t(this),i=e.uniqueId().attr("id"),s=e.next(),n=s.uniqueId().attr("id");e.attr("aria-controls",n),s.attr("aria-labelledby",i)}).next().attr("role","tabpanel"),this.headers.not(this.active).attr({"aria-selected":"false","aria-expanded":"false",tabIndex:-1}).next().attr({"aria-hidden":"true"}).hide(),this.active.length?this.active.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0}).next().attr({"aria-hidden":"false"}):this.headers.eq(0).attr("tabIndex",0),this._createIcons(),this._setupEvents(i.event),"fill"===s?(e=n.height(),this.element.siblings(":visible").each(function(){var i=t(this),s=i.css("position");"absolute"!==s&&"fixed"!==s&&(e-=i.outerHeight(!0))}),this.headers.each(function(){e-=t(this).outerHeight(!0)}),this.headers.next().each(function(){t(this).height(Math.max(0,e-t(this).innerHeight()+t(this).height()))}).css("overflow","auto")):"auto"===s&&(e=0,this.headers.next().each(function(){var i=t(this).is(":visible");i||t(this).show(),e=Math.max(e,t(this).css("height","").height()),i||t(this).hide()}).height(e))},_activate:function(e){var i=this._findActive(e)[0];i!==this.active[0]&&(i=i||this.active[0],this._eventHandler({target:i,currentTarget:i,preventDefault:t.noop}))},_findActive:function(e){return"number"==typeof e?this.headers.eq(e):t()},_setupEvents:function(e){var i={keydown:"_keydown"};e&&t.each(e.split(" "),function(t,e){i[e]="_eventHandler"}),this._off(this.headers.add(this.headers.next())),this._on(this.headers,i),this._on(this.headers.next(),{keydown:"_panelKeyDown"}),this._hoverable(this.headers),this._focusable(this.headers)},_eventHandler:function(e){var i,s,n=this.options,o=this.active,a=t(e.currentTarget),r=a[0]===o[0],h=r&&n.collapsible,l=h?t():a.next(),c=o.next(),u={oldHeader:o,oldPanel:c,newHeader:h?t():a,newPanel:l};e.preventDefault(),r&&!n.collapsible||this._trigger("beforeActivate",e,u)===!1||(n.active=h?!1:this.headers.index(a),this.active=r?t():a,this._toggle(u),this._removeClass(o,"ui-accordion-header-active","ui-state-active"),n.icons&&(i=o.children(".ui-accordion-header-icon"),this._removeClass(i,null,n.icons.activeHeader)._addClass(i,null,n.icons.header)),r||(this._removeClass(a,"ui-accordion-header-collapsed")._addClass(a,"ui-accordion-header-active","ui-state-active"),n.icons&&(s=a.children(".ui-accordion-header-icon"),this._removeClass(s,null,n.icons.header)._addClass(s,null,n.icons.activeHeader)),this._addClass(a.next(),"ui-accordion-content-active")))},_toggle:function(e){var i=e.newPanel,s=this.prevShow.length?this.prevShow:e.oldPanel;this.prevShow.add(this.prevHide).stop(!0,!0),this.prevShow=i,this.prevHide=s,this.options.animate?this._animate(i,s,e):(s.hide(),i.show(),this._toggleComplete(e)),s.attr({"aria-hidden":"true"}),s.prev().attr({"aria-selected":"false","aria-expanded":"false"}),i.length&&s.length?s.prev().attr({tabIndex:-1,"aria-expanded":"false"}):i.length&&this.headers.filter(function(){return 0===parseInt(t(this).attr("tabIndex"),10)}).attr("tabIndex",-1),i.attr("aria-hidden","false").prev().attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0})},_animate:function(t,e,i){var s,n,o,a=this,r=0,h=t.css("box-sizing"),l=t.length&&(!e.length||t.index()<e.index()),c=this.options.animate||{},u=l&&c.down||c,d=function(){a._toggleComplete(i)};return"number"==typeof u&&(o=u),"string"==typeof u&&(n=u),n=n||u.easing||c.easing,o=o||u.duration||c.duration,e.length?t.length?(s=t.show().outerHeight(),e.animate(this.hideProps,{duration:o,easing:n,step:function(t,e){e.now=Math.round(t)}}),t.hide().animate(this.showProps,{duration:o,easing:n,complete:d,step:function(t,i){i.now=Math.round(t),"height"!==i.prop?"content-box"===h&&(r+=i.now):"content"!==a.options.heightStyle&&(i.now=Math.round(s-e.outerHeight()-r),r=0)}}),void 0):e.animate(this.hideProps,o,n,d):t.animate(this.showProps,o,n,d)},_toggleComplete:function(t){var e=t.oldPanel,i=e.prev();this._removeClass(e,"ui-accordion-content-active"),this._removeClass(i,"ui-accordion-header-active")._addClass(i,"ui-accordion-header-collapsed"),e.length&&(e.parent()[0].className=e.parent()[0].className),this._trigger("activate",null,t)}}),t.ui.safeActiveElement=function(t){var e;try{e=t.activeElement}catch(i){e=t.body}return e||(e=t.body),e.nodeName||(e=t.body),e},t.widget("ui.menu",{version:"1.12.1",defaultElement:"<ul>",delay:300,options:{icons:{submenu:"ui-icon-caret-1-e"},items:"> *",menus:"ul",position:{my:"left top",at:"right top"},role:"menu",blur:null,focus:null,select:null},_create:function(){this.activeMenu=this.element,this.mouseHandled=!1,this.element.uniqueId().attr({role:this.options.role,tabIndex:0}),this._addClass("ui-menu","ui-widget ui-widget-content"),this._on({"mousedown .ui-menu-item":function(t){t.preventDefault()},"click .ui-menu-item":function(e){var i=t(e.target),s=t(t.ui.safeActiveElement(this.document[0]));!this.mouseHandled&&i.not(".ui-state-disabled").length&&(this.select(e),e.isPropagationStopped()||(this.mouseHandled=!0),i.has(".ui-menu").length?this.expand(e):!this.element.is(":focus")&&s.closest(".ui-menu").length&&(this.element.trigger("focus",[!0]),this.active&&1===this.active.parents(".ui-menu").length&&clearTimeout(this.timer)))},"mouseenter .ui-menu-item":function(e){if(!this.previousFilter){var i=t(e.target).closest(".ui-menu-item"),s=t(e.currentTarget);i[0]===s[0]&&(this._removeClass(s.siblings().children(".ui-state-active"),null,"ui-state-active"),this.focus(e,s))}},mouseleave:"collapseAll","mouseleave .ui-menu":"collapseAll",focus:function(t,e){var i=this.active||this.element.find(this.options.items).eq(0);e||this.focus(t,i)},blur:function(e){this._delay(function(){var i=!t.contains(this.element[0],t.ui.safeActiveElement(this.document[0]));i&&this.collapseAll(e)})},keydown:"_keydown"}),this.refresh(),this._on(this.document,{click:function(t){this._closeOnDocumentClick(t)&&this.collapseAll(t),this.mouseHandled=!1}})},_destroy:function(){var e=this.element.find(".ui-menu-item").removeAttr("role aria-disabled"),i=e.children(".ui-menu-item-wrapper").removeUniqueId().removeAttr("tabIndex role aria-haspopup");this.element.removeAttr("aria-activedescendant").find(".ui-menu").addBack().removeAttr("role aria-labelledby aria-expanded aria-hidden aria-disabled tabIndex").removeUniqueId().show(),i.children().each(function(){var e=t(this);e.data("ui-menu-submenu-caret")&&e.remove()})},_keydown:function(e){var i,s,n,o,a=!0;switch(e.keyCode){case t.ui.keyCode.PAGE_UP:this.previousPage(e);break;case t.ui.keyCode.PAGE_DOWN:this.nextPage(e);break;case t.ui.keyCode.HOME:this._move("first","first",e);break;case t.ui.keyCode.END:this._move("last","last",e);break;case t.ui.keyCode.UP:this.previous(e);break;case t.ui.keyCode.DOWN:this.next(e);break;case t.ui.keyCode.LEFT:this.collapse(e);break;case t.ui.keyCode.RIGHT:this.active&&!this.active.is(".ui-state-disabled")&&this.expand(e);break;case t.ui.keyCode.ENTER:case t.ui.keyCode.SPACE:this._activate(e);break;case t.ui.keyCode.ESCAPE:this.collapse(e);break;default:a=!1,s=this.previousFilter||"",o=!1,n=e.keyCode>=96&&105>=e.keyCode?""+(e.keyCode-96):String.fromCharCode(e.keyCode),clearTimeout(this.filterTimer),n===s?o=!0:n=s+n,i=this._filterMenuItems(n),i=o&&-1!==i.index(this.active.next())?this.active.nextAll(".ui-menu-item"):i,i.length||(n=String.fromCharCode(e.keyCode),i=this._filterMenuItems(n)),i.length?(this.focus(e,i),this.previousFilter=n,this.filterTimer=this._delay(function(){delete this.previousFilter},1e3)):delete this.previousFilter}a&&e.preventDefault()},_activate:function(t){this.active&&!this.active.is(".ui-state-disabled")&&(this.active.children("[aria-haspopup='true']").length?this.expand(t):this.select(t))},refresh:function(){var e,i,s,n,o,a=this,r=this.options.icons.submenu,h=this.element.find(this.options.menus);this._toggleClass("ui-menu-icons",null,!!this.element.find(".ui-icon").length),s=h.filter(":not(.ui-menu)").hide().attr({role:this.options.role,"aria-hidden":"true","aria-expanded":"false"}).each(function(){var e=t(this),i=e.prev(),s=t("<span>").data("ui-menu-submenu-caret",!0);a._addClass(s,"ui-menu-icon","ui-icon "+r),i.attr("aria-haspopup","true").prepend(s),e.attr("aria-labelledby",i.attr("id"))}),this._addClass(s,"ui-menu","ui-widget ui-widget-content ui-front"),e=h.add(this.element),i=e.find(this.options.items),i.not(".ui-menu-item").each(function(){var e=t(this);a._isDivider(e)&&a._addClass(e,"ui-menu-divider","ui-widget-content")}),n=i.not(".ui-menu-item, .ui-menu-divider"),o=n.children().not(".ui-menu").uniqueId().attr({tabIndex:-1,role:this._itemRole()}),this._addClass(n,"ui-menu-item")._addClass(o,"ui-menu-item-wrapper"),i.filter(".ui-state-disabled").attr("aria-disabled","true"),this.active&&!t.contains(this.element[0],this.active[0])&&this.blur()},_itemRole:function(){return{menu:"menuitem",listbox:"option"}[this.options.role]},_setOption:function(t,e){if("icons"===t){var i=this.element.find(".ui-menu-icon");this._removeClass(i,null,this.options.icons.submenu)._addClass(i,null,e.submenu)}this._super(t,e)},_setOptionDisabled:function(t){this._super(t),this.element.attr("aria-disabled",t+""),this._toggleClass(null,"ui-state-disabled",!!t)},focus:function(t,e){var i,s,n;this.blur(t,t&&"focus"===t.type),this._scrollIntoView(e),this.active=e.first(),s=this.active.children(".ui-menu-item-wrapper"),this._addClass(s,null,"ui-state-active"),this.options.role&&this.element.attr("aria-activedescendant",s.attr("id")),n=this.active.parent().closest(".ui-menu-item").children(".ui-menu-item-wrapper"),this._addClass(n,null,"ui-state-active"),t&&"keydown"===t.type?this._close():this.timer=this._delay(function(){this._close()},this.delay),i=e.children(".ui-menu"),i.length&&t&&/^mouse/.test(t.type)&&this._startOpening(i),this.activeMenu=e.parent(),this._trigger("focus",t,{item:e})},_scrollIntoView:function(e){var i,s,n,o,a,r;this._hasScroll()&&(i=parseFloat(t.css(this.activeMenu[0],"borderTopWidth"))||0,s=parseFloat(t.css(this.activeMenu[0],"paddingTop"))||0,n=e.offset().top-this.activeMenu.offset().top-i-s,o=this.activeMenu.scrollTop(),a=this.activeMenu.height(),r=e.outerHeight(),0>n?this.activeMenu.scrollTop(o+n):n+r>a&&this.activeMenu.scrollTop(o+n-a+r))},blur:function(t,e){e||clearTimeout(this.timer),this.active&&(this._removeClass(this.active.children(".ui-menu-item-wrapper"),null,"ui-state-active"),this._trigger("blur",t,{item:this.active}),this.active=null)},_startOpening:function(t){clearTimeout(this.timer),"true"===t.attr("aria-hidden")&&(this.timer=this._delay(function(){this._close(),this._open(t)},this.delay))},_open:function(e){var i=t.extend({of:this.active},this.options.position);clearTimeout(this.timer),this.element.find(".ui-menu").not(e.parents(".ui-menu")).hide().attr("aria-hidden","true"),e.show().removeAttr("aria-hidden").attr("aria-expanded","true").position(i)},collapseAll:function(e,i){clearTimeout(this.timer),this.timer=this._delay(function(){var s=i?this.element:t(e&&e.target).closest(this.element.find(".ui-menu"));s.length||(s=this.element),this._close(s),this.blur(e),this._removeClass(s.find(".ui-state-active"),null,"ui-state-active"),this.activeMenu=s},this.delay)},_close:function(t){t||(t=this.active?this.active.parent():this.element),t.find(".ui-menu").hide().attr("aria-hidden","true").attr("aria-expanded","false")},_closeOnDocumentClick:function(e){return!t(e.target).closest(".ui-menu").length},_isDivider:function(t){return!/[^\-\u2014\u2013\s]/.test(t.text())},collapse:function(t){var e=this.active&&this.active.parent().closest(".ui-menu-item",this.element);e&&e.length&&(this._close(),this.focus(t,e))},expand:function(t){var e=this.active&&this.active.children(".ui-menu ").find(this.options.items).first();e&&e.length&&(this._open(e.parent()),this._delay(function(){this.focus(t,e)}))},next:function(t){this._move("next","first",t)},previous:function(t){this._move("prev","last",t)},isFirstItem:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},isLastItem:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},_move:function(t,e,i){var s;this.active&&(s="first"===t||"last"===t?this.active["first"===t?"prevAll":"nextAll"](".ui-menu-item").eq(-1):this.active[t+"All"](".ui-menu-item").eq(0)),s&&s.length&&this.active||(s=this.activeMenu.find(this.options.items)[e]()),this.focus(i,s)},nextPage:function(e){var i,s,n;return this.active?(this.isLastItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.nextAll(".ui-menu-item").each(function(){return i=t(this),0>i.offset().top-s-n}),this.focus(e,i)):this.focus(e,this.activeMenu.find(this.options.items)[this.active?"last":"first"]())),void 0):(this.next(e),void 0)},previousPage:function(e){var i,s,n;return this.active?(this.isFirstItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.prevAll(".ui-menu-item").each(function(){return i=t(this),i.offset().top-s+n>0}),this.focus(e,i)):this.focus(e,this.activeMenu.find(this.options.items).first())),void 0):(this.next(e),void 0)},_hasScroll:function(){return this.element.outerHeight()<this.element.prop("scrollHeight")},select:function(e){this.active=this.active||t(e.target).closest(".ui-menu-item");var i={item:this.active};this.active.has(".ui-menu").length||this.collapseAll(e,!0),this._trigger("select",e,i)},_filterMenuItems:function(e){var i=e.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&"),s=RegExp("^"+i,"i");return this.activeMenu.find(this.options.items).filter(".ui-menu-item").filter(function(){return s.test(t.trim(t(this).children(".ui-menu-item-wrapper").text()))})}}),t.widget("ui.autocomplete",{version:"1.12.1",defaultElement:"<input>",options:{appendTo:null,autoFocus:!1,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null,change:null,close:null,focus:null,open:null,response:null,search:null,select:null},requestIndex:0,pending:0,_create:function(){var e,i,s,n=this.element[0].nodeName.toLowerCase(),o="textarea"===n,a="input"===n;
42022this.isMultiLine=o||!a&&this._isContentEditable(this.element),this.valueMethod=this.element[o||a?"val":"text"],this.isNewMenu=!0,this._addClass("ui-autocomplete-input"),this.element.attr("autocomplete","off"),this._on(this.element,{keydown:function(n){if(this.element.prop("readOnly"))return e=!0,s=!0,i=!0,void 0;e=!1,s=!1,i=!1;var o=t.ui.keyCode;switch(n.keyCode){case o.PAGE_UP:e=!0,this._move("previousPage",n);break;case o.PAGE_DOWN:e=!0,this._move("nextPage",n);break;case o.UP:e=!0,this._keyEvent("previous",n);break;case o.DOWN:e=!0,this._keyEvent("next",n);break;case o.ENTER:this.menu.active&&(e=!0,n.preventDefault(),this.menu.select(n));break;case o.TAB:this.menu.active&&this.menu.select(n);break;case o.ESCAPE:this.menu.element.is(":visible")&&(this.isMultiLine||this._value(this.term),this.close(n),n.preventDefault());break;default:i=!0,this._searchTimeout(n)}},keypress:function(s){if(e)return e=!1,(!this.isMultiLine||this.menu.element.is(":visible"))&&s.preventDefault(),void 0;if(!i){var n=t.ui.keyCode;switch(s.keyCode){case n.PAGE_UP:this._move("previousPage",s);break;case n.PAGE_DOWN:this._move("nextPage",s);break;case n.UP:this._keyEvent("previous",s);break;case n.DOWN:this._keyEvent("next",s)}}},input:function(t){return s?(s=!1,t.preventDefault(),void 0):(this._searchTimeout(t),void 0)},focus:function(){this.selectedItem=null,this.previous=this._value()},blur:function(t){return this.cancelBlur?(delete this.cancelBlur,void 0):(clearTimeout(this.searching),this.close(t),this._change(t),void 0)}}),this._initSource(),this.menu=t("<ul>").appendTo(this._appendTo()).menu({role:null}).hide().menu("instance"),this._addClass(this.menu.element,"ui-autocomplete","ui-front"),this._on(this.menu.element,{mousedown:function(e){e.preventDefault(),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur,this.element[0]!==t.ui.safeActiveElement(this.document[0])&&this.element.trigger("focus")})},menufocus:function(e,i){var s,n;return this.isNewMenu&&(this.isNewMenu=!1,e.originalEvent&&/^mouse/.test(e.originalEvent.type))?(this.menu.blur(),this.document.one("mousemove",function(){t(e.target).trigger(e.originalEvent)}),void 0):(n=i.item.data("ui-autocomplete-item"),!1!==this._trigger("focus",e,{item:n})&&e.originalEvent&&/^key/.test(e.originalEvent.type)&&this._value(n.value),s=i.item.attr("aria-label")||n.value,s&&t.trim(s).length&&(this.liveRegion.children().hide(),t("<div>").text(s).appendTo(this.liveRegion)),void 0)},menuselect:function(e,i){var s=i.item.data("ui-autocomplete-item"),n=this.previous;this.element[0]!==t.ui.safeActiveElement(this.document[0])&&(this.element.trigger("focus"),this.previous=n,this._delay(function(){this.previous=n,this.selectedItem=s})),!1!==this._trigger("select",e,{item:s})&&this._value(s.value),this.term=this._value(),this.close(e),this.selectedItem=s}}),this.liveRegion=t("<div>",{role:"status","aria-live":"assertive","aria-relevant":"additions"}).appendTo(this.document[0].body),this._addClass(this.liveRegion,null,"ui-helper-hidden-accessible"),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_destroy:function(){clearTimeout(this.searching),this.element.removeAttr("autocomplete"),this.menu.element.remove(),this.liveRegion.remove()},_setOption:function(t,e){this._super(t,e),"source"===t&&this._initSource(),"appendTo"===t&&this.menu.element.appendTo(this._appendTo()),"disabled"===t&&e&&this.xhr&&this.xhr.abort()},_isEventTargetInWidget:function(e){var i=this.menu.element[0];return e.target===this.element[0]||e.target===i||t.contains(i,e.target)},_closeOnClickOutside:function(t){this._isEventTargetInWidget(t)||this.close()},_appendTo:function(){var e=this.options.appendTo;return e&&(e=e.jquery||e.nodeType?t(e):this.document.find(e).eq(0)),e&&e[0]||(e=this.element.closest(".ui-front, dialog")),e.length||(e=this.document[0].body),e},_initSource:function(){var e,i,s=this;t.isArray(this.options.source)?(e=this.options.source,this.source=function(i,s){s(t.ui.autocomplete.filter(e,i.term))}):"string"==typeof this.options.source?(i=this.options.source,this.source=function(e,n){s.xhr&&s.xhr.abort(),s.xhr=t.ajax({url:i,data:e,dataType:"json",success:function(t){n(t)},error:function(){n([])}})}):this.source=this.options.source},_searchTimeout:function(t){clearTimeout(this.searching),this.searching=this._delay(function(){var e=this.term===this._value(),i=this.menu.element.is(":visible"),s=t.altKey||t.ctrlKey||t.metaKey||t.shiftKey;(!e||e&&!i&&!s)&&(this.selectedItem=null,this.search(null,t))},this.options.delay)},search:function(t,e){return t=null!=t?t:this._value(),this.term=this._value(),t.length<this.options.minLength?this.close(e):this._trigger("search",e)!==!1?this._search(t):void 0},_search:function(t){this.pending++,this._addClass("ui-autocomplete-loading"),this.cancelSearch=!1,this.source({term:t},this._response())},_response:function(){var e=++this.requestIndex;return t.proxy(function(t){e===this.requestIndex&&this.__response(t),this.pending--,this.pending||this._removeClass("ui-autocomplete-loading")},this)},__response:function(t){t&&(t=this._normalize(t)),this._trigger("response",null,{content:t}),!this.options.disabled&&t&&t.length&&!this.cancelSearch?(this._suggest(t),this._trigger("open")):this._close()},close:function(t){this.cancelSearch=!0,this._close(t)},_close:function(t){this._off(this.document,"mousedown"),this.menu.element.is(":visible")&&(this.menu.element.hide(),this.menu.blur(),this.isNewMenu=!0,this._trigger("close",t))},_change:function(t){this.previous!==this._value()&&this._trigger("change",t,{item:this.selectedItem})},_normalize:function(e){return e.length&&e[0].label&&e[0].value?e:t.map(e,function(e){return"string"==typeof e?{label:e,value:e}:t.extend({},e,{label:e.label||e.value,value:e.value||e.label})})},_suggest:function(e){var i=this.menu.element.empty();this._renderMenu(i,e),this.isNewMenu=!0,this.menu.refresh(),i.show(),this._resizeMenu(),i.position(t.extend({of:this.element},this.options.position)),this.options.autoFocus&&this.menu.next(),this._on(this.document,{mousedown:"_closeOnClickOutside"})},_resizeMenu:function(){var t=this.menu.element;t.outerWidth(Math.max(t.width("").outerWidth()+1,this.element.outerWidth()))},_renderMenu:function(e,i){var s=this;t.each(i,function(t,i){s._renderItemData(e,i)})},_renderItemData:function(t,e){return this._renderItem(t,e).data("ui-autocomplete-item",e)},_renderItem:function(e,i){return t("<li>").append(t("<div>").text(i.label)).appendTo(e)},_move:function(t,e){return this.menu.element.is(":visible")?this.menu.isFirstItem()&&/^previous/.test(t)||this.menu.isLastItem()&&/^next/.test(t)?(this.isMultiLine||this._value(this.term),this.menu.blur(),void 0):(this.menu[t](e),void 0):(this.search(null,e),void 0)},widget:function(){return this.menu.element},_value:function(){return this.valueMethod.apply(this.element,arguments)},_keyEvent:function(t,e){(!this.isMultiLine||this.menu.element.is(":visible"))&&(this._move(t,e),e.preventDefault())},_isContentEditable:function(t){if(!t.length)return!1;var e=t.prop("contentEditable");return"inherit"===e?this._isContentEditable(t.parent()):"true"===e}}),t.extend(t.ui.autocomplete,{escapeRegex:function(t){return t.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")},filter:function(e,i){var s=RegExp(t.ui.autocomplete.escapeRegex(i),"i");return t.grep(e,function(t){return s.test(t.label||t.value||t)})}}),t.widget("ui.autocomplete",t.ui.autocomplete,{options:{messages:{noResults:"No search results.",results:function(t){return t+(t>1?" results are":" result is")+" available, use up and down arrow keys to navigate."}}},__response:function(e){var i;this._superApply(arguments),this.options.disabled||this.cancelSearch||(i=e&&e.length?this.options.messages.results(e.length):this.options.messages.noResults,this.liveRegion.children().hide(),t("<div>").text(i).appendTo(this.liveRegion))}}),t.ui.autocomplete;var g=/ui-corner-([a-z]){2,6}/g;t.widget("ui.controlgroup",{version:"1.12.1",defaultElement:"<div>",options:{direction:"horizontal",disabled:null,onlyVisible:!0,items:{button:"input[type=button], input[type=submit], input[type=reset], button, a",controlgroupLabel:".ui-controlgroup-label",checkboxradio:"input[type='checkbox'], input[type='radio']",selectmenu:"select",spinner:".ui-spinner-input"}},_create:function(){this._enhance()},_enhance:function(){this.element.attr("role","toolbar"),this.refresh()},_destroy:function(){this._callChildMethod("destroy"),this.childWidgets.removeData("ui-controlgroup-data"),this.element.removeAttr("role"),this.options.items.controlgroupLabel&&this.element.find(this.options.items.controlgroupLabel).find(".ui-controlgroup-label-contents").contents().unwrap()},_initWidgets:function(){var e=this,i=[];t.each(this.options.items,function(s,n){var o,a={};return n?"controlgroupLabel"===s?(o=e.element.find(n),o.each(function(){var e=t(this);e.children(".ui-controlgroup-label-contents").length||e.contents().wrapAll("<span class='ui-controlgroup-label-contents'></span>")}),e._addClass(o,null,"ui-widget ui-widget-content ui-state-default"),i=i.concat(o.get()),void 0):(t.fn[s]&&(a=e["_"+s+"Options"]?e["_"+s+"Options"]("middle"):{classes:{}},e.element.find(n).each(function(){var n=t(this),o=n[s]("instance"),r=t.widget.extend({},a);if("button"!==s||!n.parent(".ui-spinner").length){o||(o=n[s]()[s]("instance")),o&&(r.classes=e._resolveClassesValues(r.classes,o)),n[s](r);var h=n[s]("widget");t.data(h[0],"ui-controlgroup-data",o?o:n[s]("instance")),i.push(h[0])}})),void 0):void 0}),this.childWidgets=t(t.unique(i)),this._addClass(this.childWidgets,"ui-controlgroup-item")},_callChildMethod:function(e){this.childWidgets.each(function(){var i=t(this),s=i.data("ui-controlgroup-data");s&&s[e]&&s[e]()})},_updateCornerClass:function(t,e){var i="ui-corner-top ui-corner-bottom ui-corner-left ui-corner-right ui-corner-all",s=this._buildSimpleOptions(e,"label").classes.label;this._removeClass(t,null,i),this._addClass(t,null,s)},_buildSimpleOptions:function(t,e){var i="vertical"===this.options.direction,s={classes:{}};return s.classes[e]={middle:"",first:"ui-corner-"+(i?"top":"left"),last:"ui-corner-"+(i?"bottom":"right"),only:"ui-corner-all"}[t],s},_spinnerOptions:function(t){var e=this._buildSimpleOptions(t,"ui-spinner");return e.classes["ui-spinner-up"]="",e.classes["ui-spinner-down"]="",e},_buttonOptions:function(t){return this._buildSimpleOptions(t,"ui-button")},_checkboxradioOptions:function(t){return this._buildSimpleOptions(t,"ui-checkboxradio-label")},_selectmenuOptions:function(t){var e="vertical"===this.options.direction;return{width:e?"auto":!1,classes:{middle:{"ui-selectmenu-button-open":"","ui-selectmenu-button-closed":""},first:{"ui-selectmenu-button-open":"ui-corner-"+(e?"top":"tl"),"ui-selectmenu-button-closed":"ui-corner-"+(e?"top":"left")},last:{"ui-selectmenu-button-open":e?"":"ui-corner-tr","ui-selectmenu-button-closed":"ui-corner-"+(e?"bottom":"right")},only:{"ui-selectmenu-button-open":"ui-corner-top","ui-selectmenu-button-closed":"ui-corner-all"}}[t]}},_resolveClassesValues:function(e,i){var s={};return t.each(e,function(n){var o=i.options.classes[n]||"";o=t.trim(o.replace(g,"")),s[n]=(o+" "+e[n]).replace(/\s+/g," ")}),s},_setOption:function(t,e){return"direction"===t&&this._removeClass("ui-controlgroup-"+this.options.direction),this._super(t,e),"disabled"===t?(this._callChildMethod(e?"disable":"enable"),void 0):(this.refresh(),void 0)},refresh:function(){var e,i=this;this._addClass("ui-controlgroup ui-controlgroup-"+this.options.direction),"horizontal"===this.options.direction&&this._addClass(null,"ui-helper-clearfix"),this._initWidgets(),e=this.childWidgets,this.options.onlyVisible&&(e=e.filter(":visible")),e.length&&(t.each(["first","last"],function(t,s){var n=e[s]().data("ui-controlgroup-data");if(n&&i["_"+n.widgetName+"Options"]){var o=i["_"+n.widgetName+"Options"](1===e.length?"only":s);o.classes=i._resolveClassesValues(o.classes,n),n.element[n.widgetName](o)}else i._updateCornerClass(e[s](),s)}),this._callChildMethod("refresh"))}}),t.widget("ui.checkboxradio",[t.ui.formResetMixin,{version:"1.12.1",options:{disabled:null,label:null,icon:!0,classes:{"ui-checkboxradio-label":"ui-corner-all","ui-checkboxradio-icon":"ui-corner-all"}},_getCreateOptions:function(){var e,i,s=this,n=this._super()||{};return this._readType(),i=this.element.labels(),this.label=t(i[i.length-1]),this.label.length||t.error("No label found for checkboxradio widget"),this.originalLabel="",this.label.contents().not(this.element[0]).each(function(){s.originalLabel+=3===this.nodeType?t(this).text():this.outerHTML}),this.originalLabel&&(n.label=this.originalLabel),e=this.element[0].disabled,null!=e&&(n.disabled=e),n},_create:function(){var t=this.element[0].checked;this._bindFormResetHandler(),null==this.options.disabled&&(this.options.disabled=this.element[0].disabled),this._setOption("disabled",this.options.disabled),this._addClass("ui-checkboxradio","ui-helper-hidden-accessible"),this._addClass(this.label,"ui-checkboxradio-label","ui-button ui-widget"),"radio"===this.type&&this._addClass(this.label,"ui-checkboxradio-radio-label"),this.options.label&&this.options.label!==this.originalLabel?this._updateLabel():this.originalLabel&&(this.options.label=this.originalLabel),this._enhance(),t&&(this._addClass(this.label,"ui-checkboxradio-checked","ui-state-active"),this.icon&&this._addClass(this.icon,null,"ui-state-hover")),this._on({change:"_toggleClasses",focus:function(){this._addClass(this.label,null,"ui-state-focus ui-visual-focus")},blur:function(){this._removeClass(this.label,null,"ui-state-focus ui-visual-focus")}})},_readType:function(){var e=this.element[0].nodeName.toLowerCase();this.type=this.element[0].type,"input"===e&&/radio|checkbox/.test(this.type)||t.error("Can't create checkboxradio on element.nodeName="+e+" and element.type="+this.type)},_enhance:function(){this._updateIcon(this.element[0].checked)},widget:function(){return this.label},_getRadioGroup:function(){var e,i=this.element[0].name,s="input[name='"+t.ui.escapeSelector(i)+"']";return i?(e=this.form.length?t(this.form[0].elements).filter(s):t(s).filter(function(){return 0===t(this).form().length}),e.not(this.element)):t([])},_toggleClasses:function(){var e=this.element[0].checked;this._toggleClass(this.label,"ui-checkboxradio-checked","ui-state-active",e),this.options.icon&&"checkbox"===this.type&&this._toggleClass(this.icon,null,"ui-icon-check ui-state-checked",e)._toggleClass(this.icon,null,"ui-icon-blank",!e),"radio"===this.type&&this._getRadioGroup().each(function(){var e=t(this).checkboxradio("instance");e&&e._removeClass(e.label,"ui-checkboxradio-checked","ui-state-active")})},_destroy:function(){this._unbindFormResetHandler(),this.icon&&(this.icon.remove(),this.iconSpace.remove())},_setOption:function(t,e){return"label"!==t||e?(this._super(t,e),"disabled"===t?(this._toggleClass(this.label,null,"ui-state-disabled",e),this.element[0].disabled=e,void 0):(this.refresh(),void 0)):void 0},_updateIcon:function(e){var i="ui-icon ui-icon-background ";this.options.icon?(this.icon||(this.icon=t("<span>"),this.iconSpace=t("<span> </span>"),this._addClass(this.iconSpace,"ui-checkboxradio-icon-space")),"checkbox"===this.type?(i+=e?"ui-icon-check ui-state-checked":"ui-icon-blank",this._removeClass(this.icon,null,e?"ui-icon-blank":"ui-icon-check")):i+="ui-icon-blank",this._addClass(this.icon,"ui-checkboxradio-icon",i),e||this._removeClass(this.icon,null,"ui-icon-check ui-state-checked"),this.icon.prependTo(this.label).after(this.iconSpace)):void 0!==this.icon&&(this.icon.remove(),this.iconSpace.remove(),delete this.icon)},_updateLabel:function(){var t=this.label.contents().not(this.element[0]);this.icon&&(t=t.not(this.icon[0])),this.iconSpace&&(t=t.not(this.iconSpace[0])),t.remove(),this.label.append(this.options.label)},refresh:function(){var t=this.element[0].checked,e=this.element[0].disabled;this._updateIcon(t),this._toggleClass(this.label,"ui-checkboxradio-checked","ui-state-active",t),null!==this.options.label&&this._updateLabel(),e!==this.options.disabled&&this._setOptions({disabled:e})}}]),t.ui.checkboxradio,t.widget("ui.button",{version:"1.12.1",defaultElement:"<button>",options:{classes:{"ui-button":"ui-corner-all"},disabled:null,icon:null,iconPosition:"beginning",label:null,showLabel:!0},_getCreateOptions:function(){var t,e=this._super()||{};return this.isInput=this.element.is("input"),t=this.element[0].disabled,null!=t&&(e.disabled=t),this.originalLabel=this.isInput?this.element.val():this.element.html(),this.originalLabel&&(e.label=this.originalLabel),e},_create:function(){!this.option.showLabel&!this.options.icon&&(this.options.showLabel=!0),null==this.options.disabled&&(this.options.disabled=this.element[0].disabled||!1),this.hasTitle=!!this.element.attr("title"),this.options.label&&this.options.label!==this.originalLabel&&(this.isInput?this.element.val(this.options.label):this.element.html(this.options.label)),this._addClass("ui-button","ui-widget"),this._setOption("disabled",this.options.disabled),this._enhance(),this.element.is("a")&&this._on({keyup:function(e){e.keyCode===t.ui.keyCode.SPACE&&(e.preventDefault(),this.element[0].click?this.element[0].click():this.element.trigger("click"))}})},_enhance:function(){this.element.is("button")||this.element.attr("role","button"),this.options.icon&&(this._updateIcon("icon",this.options.icon),this._updateTooltip())},_updateTooltip:function(){this.title=this.element.attr("title"),this.options.showLabel||this.title||this.element.attr("title",this.options.label)},_updateIcon:function(e,i){var s="iconPosition"!==e,n=s?this.options.iconPosition:i,o="top"===n||"bottom"===n;this.icon?s&&this._removeClass(this.icon,null,this.options.icon):(this.icon=t("<span>"),this._addClass(this.icon,"ui-button-icon","ui-icon"),this.options.showLabel||this._addClass("ui-button-icon-only")),s&&this._addClass(this.icon,null,i),this._attachIcon(n),o?(this._addClass(this.icon,null,"ui-widget-icon-block"),this.iconSpace&&this.iconSpace.remove()):(this.iconSpace||(this.iconSpace=t("<span> </span>"),this._addClass(this.iconSpace,"ui-button-icon-space")),this._removeClass(this.icon,null,"ui-wiget-icon-block"),this._attachIconSpace(n))},_destroy:function(){this.element.removeAttr("role"),this.icon&&this.icon.remove(),this.iconSpace&&this.iconSpace.remove(),this.hasTitle||this.element.removeAttr("title")},_attachIconSpace:function(t){this.icon[/^(?:end|bottom)/.test(t)?"before":"after"](this.iconSpace)},_attachIcon:function(t){this.element[/^(?:end|bottom)/.test(t)?"append":"prepend"](this.icon)},_setOptions:function(t){var e=void 0===t.showLabel?this.options.showLabel:t.showLabel,i=void 0===t.icon?this.options.icon:t.icon;e||i||(t.showLabel=!0),this._super(t)},_setOption:function(t,e){"icon"===t&&(e?this._updateIcon(t,e):this.icon&&(this.icon.remove(),this.iconSpace&&this.iconSpace.remove())),"iconPosition"===t&&this._updateIcon(t,e),"showLabel"===t&&(this._toggleClass("ui-button-icon-only",null,!e),this._updateTooltip()),"label"===t&&(this.isInput?this.element.val(e):(this.element.html(e),this.icon&&(this._attachIcon(this.options.iconPosition),this._attachIconSpace(this.options.iconPosition)))),this._super(t,e),"disabled"===t&&(this._toggleClass(null,"ui-state-disabled",e),this.element[0].disabled=e,e&&this.element.blur())},refresh:function(){var t=this.element.is("input, button")?this.element[0].disabled:this.element.hasClass("ui-button-disabled");t!==this.options.disabled&&this._setOptions({disabled:t}),this._updateTooltip()}}),t.uiBackCompat!==!1&&(t.widget("ui.button",t.ui.button,{options:{text:!0,icons:{primary:null,secondary:null}},_create:function(){this.options.showLabel&&!this.options.text&&(this.options.showLabel=this.options.text),!this.options.showLabel&&this.options.text&&(this.options.text=this.options.showLabel),this.options.icon||!this.options.icons.primary&&!this.options.icons.secondary?this.options.icon&&(this.options.icons.primary=this.options.icon):this.options.icons.primary?this.options.icon=this.options.icons.primary:(this.options.icon=this.options.icons.secondary,this.options.iconPosition="end"),this._super()},_setOption:function(t,e){return"text"===t?(this._super("showLabel",e),void 0):("showLabel"===t&&(this.options.text=e),"icon"===t&&(this.options.icons.primary=e),"icons"===t&&(e.primary?(this._super("icon",e.primary),this._super("iconPosition","beginning")):e.secondary&&(this._super("icon",e.secondary),this._super("iconPosition","end"))),this._superApply(arguments),void 0)}}),t.fn.button=function(e){return function(){return!this.length||this.length&&"INPUT"!==this[0].tagName||this.length&&"INPUT"===this[0].tagName&&"checkbox"!==this.attr("type")&&"radio"!==this.attr("type")?e.apply(this,arguments):(t.ui.checkboxradio||t.error("Checkboxradio widget missing"),0===arguments.length?this.checkboxradio({icon:!1}):this.checkboxradio.apply(this,arguments))}}(t.fn.button),t.fn.buttonset=function(){return t.ui.controlgroup||t.error("Controlgroup widget missing"),"option"===arguments[0]&&"items"===arguments[1]&&arguments[2]?this.controlgroup.apply(this,[arguments[0],"items.button",arguments[2]]):"option"===arguments[0]&&"items"===arguments[1]?this.controlgroup.apply(this,[arguments[0],"items.button"]):("object"==typeof arguments[0]&&arguments[0].items&&(arguments[0].items={button:arguments[0].items}),this.controlgroup.apply(this,arguments))}),t.ui.button,t.extend(t.ui,{datepicker:{version:"1.12.1"}});var m;t.extend(s.prototype,{markerClassName:"hasDatepicker",maxRows:4,_widgetDatepicker:function(){return this.dpDiv},setDefaults:function(t){return a(this._defaults,t||{}),this},_attachDatepicker:function(e,i){var s,n,o;s=e.nodeName.toLowerCase(),n="div"===s||"span"===s,e.id||(this.uuid+=1,e.id="dp"+this.uuid),o=this._newInst(t(e),n),o.settings=t.extend({},i||{}),"input"===s?this._connectDatepicker(e,o):n&&this._inlineDatepicker(e,o)},_newInst:function(e,i){var s=e[0].id.replace(/([^A-Za-z0-9_\-])/g,"\\\\$1");return{id:s,input:e,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:i,dpDiv:i?n(t("<div class='"+this._inlineClass+" ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>")):this.dpDiv}},_connectDatepicker:function(e,i){var s=t(e);i.append=t([]),i.trigger=t([]),s.hasClass(this.markerClassName)||(this._attachments(s,i),s.addClass(this.markerClassName).on("keydown",this._doKeyDown).on("keypress",this._doKeyPress).on("keyup",this._doKeyUp),this._autoSize(i),t.data(e,"datepicker",i),i.settings.disabled&&this._disableDatepicker(e))},_attachments:function(e,i){var s,n,o,a=this._get(i,"appendText"),r=this._get(i,"isRTL");i.append&&i.append.remove(),a&&(i.append=t("<span class='"+this._appendClass+"'>"+a+"</span>"),e[r?"before":"after"](i.append)),e.off("focus",this._showDatepicker),i.trigger&&i.trigger.remove(),s=this._get(i,"showOn"),("focus"===s||"both"===s)&&e.on("focus",this._showDatepicker),("button"===s||"both"===s)&&(n=this._get(i,"buttonText"),o=this._get(i,"buttonImage"),i.trigger=t(this._get(i,"buttonImageOnly")?t("<img/>").addClass(this._triggerClass).attr({src:o,alt:n,title:n}):t("<button type='button'></button>").addClass(this._triggerClass).html(o?t("<img/>").attr({src:o,alt:n,title:n}):n)),e[r?"before":"after"](i.trigger),i.trigger.on("click",function(){return t.datepicker._datepickerShowing&&t.datepicker._lastInput===e[0]?t.datepicker._hideDatepicker():t.datepicker._datepickerShowing&&t.datepicker._lastInput!==e[0]?(t.datepicker._hideDatepicker(),t.datepicker._showDatepicker(e[0])):t.datepicker._showDatepicker(e[0]),!1}))},_autoSize:function(t){if(this._get(t,"autoSize")&&!t.inline){var e,i,s,n,o=new Date(2009,11,20),a=this._get(t,"dateFormat");a.match(/[DM]/)&&(e=function(t){for(i=0,s=0,n=0;t.length>n;n++)t[n].length>i&&(i=t[n].length,s=n);return s},o.setMonth(e(this._get(t,a.match(/MM/)?"monthNames":"monthNamesShort"))),o.setDate(e(this._get(t,a.match(/DD/)?"dayNames":"dayNamesShort"))+20-o.getDay())),t.input.attr("size",this._formatDate(t,o).length)}},_inlineDatepicker:function(e,i){var s=t(e);s.hasClass(this.markerClassName)||(s.addClass(this.markerClassName).append(i.dpDiv),t.data(e,"datepicker",i),this._setDate(i,this._getDefaultDate(i),!0),this._updateDatepicker(i),this._updateAlternate(i),i.settings.disabled&&this._disableDatepicker(e),i.dpDiv.css("display","block"))},_dialogDatepicker:function(e,i,s,n,o){var r,h,l,c,u,d=this._dialogInst;return d||(this.uuid+=1,r="dp"+this.uuid,this._dialogInput=t("<input type='text' id='"+r+"' style='position: absolute; top: -100px; width: 0px;'/>"),this._dialogInput.on("keydown",this._doKeyDown),t("body").append(this._dialogInput),d=this._dialogInst=this._newInst(this._dialogInput,!1),d.settings={},t.data(this._dialogInput[0],"datepicker",d)),a(d.settings,n||{}),i=i&&i.constructor===Date?this._formatDate(d,i):i,this._dialogInput.val(i),this._pos=o?o.length?o:[o.pageX,o.pageY]:null,this._pos||(h=document.documentElement.clientWidth,l=document.documentElement.clientHeight,c=document.documentElement.scrollLeft||document.body.scrollLeft,u=document.documentElement.scrollTop||document.body.scrollTop,this._pos=[h/2-100+c,l/2-150+u]),this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px"),d.settings.onSelect=s,this._inDialog=!0,this.dpDiv.addClass(this._dialogClass),this._showDatepicker(this._dialogInput[0]),t.blockUI&&t.blockUI(this.dpDiv),t.data(this._dialogInput[0],"datepicker",d),this},_destroyDatepicker:function(e){var i,s=t(e),n=t.data(e,"datepicker");s.hasClass(this.markerClassName)&&(i=e.nodeName.toLowerCase(),t.removeData(e,"datepicker"),"input"===i?(n.append.remove(),n.trigger.remove(),s.removeClass(this.markerClassName).off("focus",this._showDatepicker).off("keydown",this._doKeyDown).off("keypress",this._doKeyPress).off("keyup",this._doKeyUp)):("div"===i||"span"===i)&&s.removeClass(this.markerClassName).empty(),m===n&&(m=null))},_enableDatepicker:function(e){var i,s,n=t(e),o=t.data(e,"datepicker");n.hasClass(this.markerClassName)&&(i=e.nodeName.toLowerCase(),"input"===i?(e.disabled=!1,o.trigger.filter("button").each(function(){this.disabled=!1}).end().filter("img").css({opacity:"1.0",cursor:""})):("div"===i||"span"===i)&&(s=n.children("."+this._inlineClass),s.children().removeClass("ui-state-disabled"),s.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!1)),this._disabledInputs=t.map(this._disabledInputs,function(t){return t===e?null:t}))},_disableDatepicker:function(e){var i,s,n=t(e),o=t.data(e,"datepicker");n.hasClass(this.markerClassName)&&(i=e.nodeName.toLowerCase(),"input"===i?(e.disabled=!0,o.trigger.filter("button").each(function(){this.disabled=!0}).end().filter("img").css({opacity:"0.5",cursor:"default"})):("div"===i||"span"===i)&&(s=n.children("."+this._inlineClass),s.children().addClass("ui-state-disabled"),s.find("select.ui-datepicker-month, select.ui-datepicker-year").prop("disabled",!0)),this._disabledInputs=t.map(this._disabledInputs,function(t){return t===e?null:t}),this._disabledInputs[this._disabledInputs.length]=e)},_isDisabledDatepicker:function(t){if(!t)return!1;for(var e=0;this._disabledInputs.length>e;e++)if(this._disabledInputs[e]===t)return!0;return!1},_getInst:function(e){try{return t.data(e,"datepicker")}catch(i){throw"Missing instance data for this datepicker"}},_optionDatepicker:function(e,i,s){var n,o,r,h,l=this._getInst(e);return 2===arguments.length&&"string"==typeof i?"defaults"===i?t.extend({},t.datepicker._defaults):l?"all"===i?t.extend({},l.settings):this._get(l,i):null:(n=i||{},"string"==typeof i&&(n={},n[i]=s),l&&(this._curInst===l&&this._hideDatepicker(),o=this._getDateDatepicker(e,!0),r=this._getMinMaxDate(l,"min"),h=this._getMinMaxDate(l,"max"),a(l.settings,n),null!==r&&void 0!==n.dateFormat&&void 0===n.minDate&&(l.settings.minDate=this._formatDate(l,r)),null!==h&&void 0!==n.dateFormat&&void 0===n.maxDate&&(l.settings.maxDate=this._formatDate(l,h)),"disabled"in n&&(n.disabled?this._disableDatepicker(e):this._enableDatepicker(e)),this._attachments(t(e),l),this._autoSize(l),this._setDate(l,o),this._updateAlternate(l),this._updateDatepicker(l)),void 0)},_changeDatepicker:function(t,e,i){this._optionDatepicker(t,e,i)},_refreshDatepicker:function(t){var e=this._getInst(t);e&&this._updateDatepicker(e)},_setDateDatepicker:function(t,e){var i=this._getInst(t);i&&(this._setDate(i,e),this._updateDatepicker(i),this._updateAlternate(i))},_getDateDatepicker:function(t,e){var i=this._getInst(t);return i&&!i.inline&&this._setDateFromField(i,e),i?this._getDate(i):null},_doKeyDown:function(e){var i,s,n,o=t.datepicker._getInst(e.target),a=!0,r=o.dpDiv.is(".ui-datepicker-rtl");if(o._keyEvent=!0,t.datepicker._datepickerShowing)switch(e.keyCode){case 9:t.datepicker._hideDatepicker(),a=!1;break;case 13:return n=t("td."+t.datepicker._dayOverClass+":not(."+t.datepicker._currentClass+")",o.dpDiv),n[0]&&t.datepicker._selectDay(e.target,o.selectedMonth,o.selectedYear,n[0]),i=t.datepicker._get(o,"onSelect"),i?(s=t.datepicker._formatDate(o),i.apply(o.input?o.input[0]:null,[s,o])):t.datepicker._hideDatepicker(),!1;case 27:t.datepicker._hideDatepicker();break;case 33:t.datepicker._adjustDate(e.target,e.ctrlKey?-t.datepicker._get(o,"stepBigMonths"):-t.datepicker._get(o,"stepMonths"),"M");break;case 34:t.datepicker._adjustDate(e.target,e.ctrlKey?+t.datepicker._get(o,"stepBigMonths"):+t.datepicker._get(o,"stepMonths"),"M");break;case 35:(e.ctrlKey||e.metaKey)&&t.datepicker._clearDate(e.target),a=e.ctrlKey||e.metaKey;break;case 36:(e.ctrlKey||e.metaKey)&&t.datepicker._gotoToday(e.target),a=e.ctrlKey||e.metaKey;break;case 37:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,r?1:-1,"D"),a=e.ctrlKey||e.metaKey,e.originalEvent.altKey&&t.datepicker._adjustDate(e.target,e.ctrlKey?-t.datepicker._get(o,"stepBigMonths"):-t.datepicker._get(o,"stepMonths"),"M");break;case 38:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,-7,"D"),a=e.ctrlKey||e.metaKey;break;case 39:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,r?-1:1,"D"),a=e.ctrlKey||e.metaKey,e.originalEvent.altKey&&t.datepicker._adjustDate(e.target,e.ctrlKey?+t.datepicker._get(o,"stepBigMonths"):+t.datepicker._get(o,"stepMonths"),"M");break;case 40:(e.ctrlKey||e.metaKey)&&t.datepicker._adjustDate(e.target,7,"D"),a=e.ctrlKey||e.metaKey;break;default:a=!1}else 36===e.keyCode&&e.ctrlKey?t.datepicker._showDatepicker(this):a=!1;a&&(e.preventDefault(),e.stopPropagation())},_doKeyPress:function(e){var i,s,n=t.datepicker._getInst(e.target);return t.datepicker._get(n,"constrainInput")?(i=t.datepicker._possibleChars(t.datepicker._get(n,"dateFormat")),s=String.fromCharCode(null==e.charCode?e.keyCode:e.charCode),e.ctrlKey||e.metaKey||" ">s||!i||i.indexOf(s)>-1):void 0},_doKeyUp:function(e){var i,s=t.datepicker._getInst(e.target);if(s.input.val()!==s.lastVal)try{i=t.datepicker.parseDate(t.datepicker._get(s,"dateFormat"),s.input?s.input.val():null,t.datepicker._getFormatConfig(s)),i&&(t.datepicker._setDateFromField(s),t.datepicker._updateAlternate(s),t.datepicker._updateDatepicker(s))}catch(n){}return!0},_showDatepicker:function(e){if(e=e.target||e,"input"!==e.nodeName.toLowerCase()&&(e=t("input",e.parentNode)[0]),!t.datepicker._isDisabledDatepicker(e)&&t.datepicker._lastInput!==e){var s,n,o,r,h,l,c;s=t.datepicker._getInst(e),t.datepicker._curInst&&t.datepicker._curInst!==s&&(t.datepicker._curInst.dpDiv.stop(!0,!0),s&&t.datepicker._datepickerShowing&&t.datepicker._hideDatepicker(t.datepicker._curInst.input[0])),n=t.datepicker._get(s,"beforeShow"),o=n?n.apply(e,[e,s]):{},o!==!1&&(a(s.settings,o),s.lastVal=null,t.datepicker._lastInput=e,t.datepicker._setDateFromField(s),t.datepicker._inDialog&&(e.value=""),t.datepicker._pos||(t.datepicker._pos=t.datepicker._findPos(e),t.datepicker._pos[1]+=e.offsetHeight),r=!1,t(e).parents().each(function(){return r|="fixed"===t(this).css("position"),!r}),h={left:t.datepicker._pos[0],top:t.datepicker._pos[1]},t.datepicker._pos=null,s.dpDiv.empty(),s.dpDiv.css({position:"absolute",display:"block",top:"-1000px"}),t.datepicker._updateDatepicker(s),h=t.datepicker._checkOffset(s,h,r),s.dpDiv.css({position:t.datepicker._inDialog&&t.blockUI?"static":r?"fixed":"absolute",display:"none",left:h.left+"px",top:h.top+"px"}),s.inline||(l=t.datepicker._get(s,"showAnim"),c=t.datepicker._get(s,"duration"),s.dpDiv.css("z-index",i(t(e))+1),t.datepicker._datepickerShowing=!0,t.effects&&t.effects.effect[l]?s.dpDiv.show(l,t.datepicker._get(s,"showOptions"),c):s.dpDiv[l||"show"](l?c:null),t.datepicker._shouldFocusInput(s)&&s.input.trigger("focus"),t.datepicker._curInst=s))
42023}},_updateDatepicker:function(e){this.maxRows=4,m=e,e.dpDiv.empty().append(this._generateHTML(e)),this._attachHandlers(e);var i,s=this._getNumberOfMonths(e),n=s[1],a=17,r=e.dpDiv.find("."+this._dayOverClass+" a");r.length>0&&o.apply(r.get(0)),e.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width(""),n>1&&e.dpDiv.addClass("ui-datepicker-multi-"+n).css("width",a*n+"em"),e.dpDiv[(1!==s[0]||1!==s[1]?"add":"remove")+"Class"]("ui-datepicker-multi"),e.dpDiv[(this._get(e,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl"),e===t.datepicker._curInst&&t.datepicker._datepickerShowing&&t.datepicker._shouldFocusInput(e)&&e.input.trigger("focus"),e.yearshtml&&(i=e.yearshtml,setTimeout(function(){i===e.yearshtml&&e.yearshtml&&e.dpDiv.find("select.ui-datepicker-year:first").replaceWith(e.yearshtml),i=e.yearshtml=null},0))},_shouldFocusInput:function(t){return t.input&&t.input.is(":visible")&&!t.input.is(":disabled")&&!t.input.is(":focus")},_checkOffset:function(e,i,s){var n=e.dpDiv.outerWidth(),o=e.dpDiv.outerHeight(),a=e.input?e.input.outerWidth():0,r=e.input?e.input.outerHeight():0,h=document.documentElement.clientWidth+(s?0:t(document).scrollLeft()),l=document.documentElement.clientHeight+(s?0:t(document).scrollTop());return i.left-=this._get(e,"isRTL")?n-a:0,i.left-=s&&i.left===e.input.offset().left?t(document).scrollLeft():0,i.top-=s&&i.top===e.input.offset().top+r?t(document).scrollTop():0,i.left-=Math.min(i.left,i.left+n>h&&h>n?Math.abs(i.left+n-h):0),i.top-=Math.min(i.top,i.top+o>l&&l>o?Math.abs(o+r):0),i},_findPos:function(e){for(var i,s=this._getInst(e),n=this._get(s,"isRTL");e&&("hidden"===e.type||1!==e.nodeType||t.expr.filters.hidden(e));)e=e[n?"previousSibling":"nextSibling"];return i=t(e).offset(),[i.left,i.top]},_hideDatepicker:function(e){var i,s,n,o,a=this._curInst;!a||e&&a!==t.data(e,"datepicker")||this._datepickerShowing&&(i=this._get(a,"showAnim"),s=this._get(a,"duration"),n=function(){t.datepicker._tidyDialog(a)},t.effects&&(t.effects.effect[i]||t.effects[i])?a.dpDiv.hide(i,t.datepicker._get(a,"showOptions"),s,n):a.dpDiv["slideDown"===i?"slideUp":"fadeIn"===i?"fadeOut":"hide"](i?s:null,n),i||n(),this._datepickerShowing=!1,o=this._get(a,"onClose"),o&&o.apply(a.input?a.input[0]:null,[a.input?a.input.val():"",a]),this._lastInput=null,this._inDialog&&(this._dialogInput.css({position:"absolute",left:"0",top:"-100px"}),t.blockUI&&(t.unblockUI(),t("body").append(this.dpDiv))),this._inDialog=!1)},_tidyDialog:function(t){t.dpDiv.removeClass(this._dialogClass).off(".ui-datepicker-calendar")},_checkExternalClick:function(e){if(t.datepicker._curInst){var i=t(e.target),s=t.datepicker._getInst(i[0]);(i[0].id!==t.datepicker._mainDivId&&0===i.parents("#"+t.datepicker._mainDivId).length&&!i.hasClass(t.datepicker.markerClassName)&&!i.closest("."+t.datepicker._triggerClass).length&&t.datepicker._datepickerShowing&&(!t.datepicker._inDialog||!t.blockUI)||i.hasClass(t.datepicker.markerClassName)&&t.datepicker._curInst!==s)&&t.datepicker._hideDatepicker()}},_adjustDate:function(e,i,s){var n=t(e),o=this._getInst(n[0]);this._isDisabledDatepicker(n[0])||(this._adjustInstDate(o,i+("M"===s?this._get(o,"showCurrentAtPos"):0),s),this._updateDatepicker(o))},_gotoToday:function(e){var i,s=t(e),n=this._getInst(s[0]);this._get(n,"gotoCurrent")&&n.currentDay?(n.selectedDay=n.currentDay,n.drawMonth=n.selectedMonth=n.currentMonth,n.drawYear=n.selectedYear=n.currentYear):(i=new Date,n.selectedDay=i.getDate(),n.drawMonth=n.selectedMonth=i.getMonth(),n.drawYear=n.selectedYear=i.getFullYear()),this._notifyChange(n),this._adjustDate(s)},_selectMonthYear:function(e,i,s){var n=t(e),o=this._getInst(n[0]);o["selected"+("M"===s?"Month":"Year")]=o["draw"+("M"===s?"Month":"Year")]=parseInt(i.options[i.selectedIndex].value,10),this._notifyChange(o),this._adjustDate(n)},_selectDay:function(e,i,s,n){var o,a=t(e);t(n).hasClass(this._unselectableClass)||this._isDisabledDatepicker(a[0])||(o=this._getInst(a[0]),o.selectedDay=o.currentDay=t("a",n).html(),o.selectedMonth=o.currentMonth=i,o.selectedYear=o.currentYear=s,this._selectDate(e,this._formatDate(o,o.currentDay,o.currentMonth,o.currentYear)))},_clearDate:function(e){var i=t(e);this._selectDate(i,"")},_selectDate:function(e,i){var s,n=t(e),o=this._getInst(n[0]);i=null!=i?i:this._formatDate(o),o.input&&o.input.val(i),this._updateAlternate(o),s=this._get(o,"onSelect"),s?s.apply(o.input?o.input[0]:null,[i,o]):o.input&&o.input.trigger("change"),o.inline?this._updateDatepicker(o):(this._hideDatepicker(),this._lastInput=o.input[0],"object"!=typeof o.input[0]&&o.input.trigger("focus"),this._lastInput=null)},_updateAlternate:function(e){var i,s,n,o=this._get(e,"altField");o&&(i=this._get(e,"altFormat")||this._get(e,"dateFormat"),s=this._getDate(e),n=this.formatDate(i,s,this._getFormatConfig(e)),t(o).val(n))},noWeekends:function(t){var e=t.getDay();return[e>0&&6>e,""]},iso8601Week:function(t){var e,i=new Date(t.getTime());return i.setDate(i.getDate()+4-(i.getDay()||7)),e=i.getTime(),i.setMonth(0),i.setDate(1),Math.floor(Math.round((e-i)/864e5)/7)+1},parseDate:function(e,i,s){if(null==e||null==i)throw"Invalid arguments";if(i="object"==typeof i?""+i:i+"",""===i)return null;var n,o,a,r,h=0,l=(s?s.shortYearCutoff:null)||this._defaults.shortYearCutoff,c="string"!=typeof l?l:(new Date).getFullYear()%100+parseInt(l,10),u=(s?s.dayNamesShort:null)||this._defaults.dayNamesShort,d=(s?s.dayNames:null)||this._defaults.dayNames,p=(s?s.monthNamesShort:null)||this._defaults.monthNamesShort,f=(s?s.monthNames:null)||this._defaults.monthNames,g=-1,m=-1,_=-1,v=-1,b=!1,y=function(t){var i=e.length>n+1&&e.charAt(n+1)===t;return i&&n++,i},w=function(t){var e=y(t),s="@"===t?14:"!"===t?20:"y"===t&&e?4:"o"===t?3:2,n="y"===t?s:1,o=RegExp("^\\d{"+n+","+s+"}"),a=i.substring(h).match(o);if(!a)throw"Missing number at position "+h;return h+=a[0].length,parseInt(a[0],10)},k=function(e,s,n){var o=-1,a=t.map(y(e)?n:s,function(t,e){return[[e,t]]}).sort(function(t,e){return-(t[1].length-e[1].length)});if(t.each(a,function(t,e){var s=e[1];return i.substr(h,s.length).toLowerCase()===s.toLowerCase()?(o=e[0],h+=s.length,!1):void 0}),-1!==o)return o+1;throw"Unknown name at position "+h},x=function(){if(i.charAt(h)!==e.charAt(n))throw"Unexpected literal at position "+h;h++};for(n=0;e.length>n;n++)if(b)"'"!==e.charAt(n)||y("'")?x():b=!1;else switch(e.charAt(n)){case"d":_=w("d");break;case"D":k("D",u,d);break;case"o":v=w("o");break;case"m":m=w("m");break;case"M":m=k("M",p,f);break;case"y":g=w("y");break;case"@":r=new Date(w("@")),g=r.getFullYear(),m=r.getMonth()+1,_=r.getDate();break;case"!":r=new Date((w("!")-this._ticksTo1970)/1e4),g=r.getFullYear(),m=r.getMonth()+1,_=r.getDate();break;case"'":y("'")?x():b=!0;break;default:x()}if(i.length>h&&(a=i.substr(h),!/^\s+/.test(a)))throw"Extra/unparsed characters found in date: "+a;if(-1===g?g=(new Date).getFullYear():100>g&&(g+=(new Date).getFullYear()-(new Date).getFullYear()%100+(c>=g?0:-100)),v>-1)for(m=1,_=v;;){if(o=this._getDaysInMonth(g,m-1),o>=_)break;m++,_-=o}if(r=this._daylightSavingAdjust(new Date(g,m-1,_)),r.getFullYear()!==g||r.getMonth()+1!==m||r.getDate()!==_)throw"Invalid date";return r},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:1e7*60*60*24*(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925)),formatDate:function(t,e,i){if(!e)return"";var s,n=(i?i.dayNamesShort:null)||this._defaults.dayNamesShort,o=(i?i.dayNames:null)||this._defaults.dayNames,a=(i?i.monthNamesShort:null)||this._defaults.monthNamesShort,r=(i?i.monthNames:null)||this._defaults.monthNames,h=function(e){var i=t.length>s+1&&t.charAt(s+1)===e;return i&&s++,i},l=function(t,e,i){var s=""+e;if(h(t))for(;i>s.length;)s="0"+s;return s},c=function(t,e,i,s){return h(t)?s[e]:i[e]},u="",d=!1;if(e)for(s=0;t.length>s;s++)if(d)"'"!==t.charAt(s)||h("'")?u+=t.charAt(s):d=!1;else switch(t.charAt(s)){case"d":u+=l("d",e.getDate(),2);break;case"D":u+=c("D",e.getDay(),n,o);break;case"o":u+=l("o",Math.round((new Date(e.getFullYear(),e.getMonth(),e.getDate()).getTime()-new Date(e.getFullYear(),0,0).getTime())/864e5),3);break;case"m":u+=l("m",e.getMonth()+1,2);break;case"M":u+=c("M",e.getMonth(),a,r);break;case"y":u+=h("y")?e.getFullYear():(10>e.getFullYear()%100?"0":"")+e.getFullYear()%100;break;case"@":u+=e.getTime();break;case"!":u+=1e4*e.getTime()+this._ticksTo1970;break;case"'":h("'")?u+="'":d=!0;break;default:u+=t.charAt(s)}return u},_possibleChars:function(t){var e,i="",s=!1,n=function(i){var s=t.length>e+1&&t.charAt(e+1)===i;return s&&e++,s};for(e=0;t.length>e;e++)if(s)"'"!==t.charAt(e)||n("'")?i+=t.charAt(e):s=!1;else switch(t.charAt(e)){case"d":case"m":case"y":case"@":i+="0123456789";break;case"D":case"M":return null;case"'":n("'")?i+="'":s=!0;break;default:i+=t.charAt(e)}return i},_get:function(t,e){return void 0!==t.settings[e]?t.settings[e]:this._defaults[e]},_setDateFromField:function(t,e){if(t.input.val()!==t.lastVal){var i=this._get(t,"dateFormat"),s=t.lastVal=t.input?t.input.val():null,n=this._getDefaultDate(t),o=n,a=this._getFormatConfig(t);try{o=this.parseDate(i,s,a)||n}catch(r){s=e?"":s}t.selectedDay=o.getDate(),t.drawMonth=t.selectedMonth=o.getMonth(),t.drawYear=t.selectedYear=o.getFullYear(),t.currentDay=s?o.getDate():0,t.currentMonth=s?o.getMonth():0,t.currentYear=s?o.getFullYear():0,this._adjustInstDate(t)}},_getDefaultDate:function(t){return this._restrictMinMax(t,this._determineDate(t,this._get(t,"defaultDate"),new Date))},_determineDate:function(e,i,s){var n=function(t){var e=new Date;return e.setDate(e.getDate()+t),e},o=function(i){try{return t.datepicker.parseDate(t.datepicker._get(e,"dateFormat"),i,t.datepicker._getFormatConfig(e))}catch(s){}for(var n=(i.toLowerCase().match(/^c/)?t.datepicker._getDate(e):null)||new Date,o=n.getFullYear(),a=n.getMonth(),r=n.getDate(),h=/([+\-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,l=h.exec(i);l;){switch(l[2]||"d"){case"d":case"D":r+=parseInt(l[1],10);break;case"w":case"W":r+=7*parseInt(l[1],10);break;case"m":case"M":a+=parseInt(l[1],10),r=Math.min(r,t.datepicker._getDaysInMonth(o,a));break;case"y":case"Y":o+=parseInt(l[1],10),r=Math.min(r,t.datepicker._getDaysInMonth(o,a))}l=h.exec(i)}return new Date(o,a,r)},a=null==i||""===i?s:"string"==typeof i?o(i):"number"==typeof i?isNaN(i)?s:n(i):new Date(i.getTime());return a=a&&"Invalid Date"==""+a?s:a,a&&(a.setHours(0),a.setMinutes(0),a.setSeconds(0),a.setMilliseconds(0)),this._daylightSavingAdjust(a)},_daylightSavingAdjust:function(t){return t?(t.setHours(t.getHours()>12?t.getHours()+2:0),t):null},_setDate:function(t,e,i){var s=!e,n=t.selectedMonth,o=t.selectedYear,a=this._restrictMinMax(t,this._determineDate(t,e,new Date));t.selectedDay=t.currentDay=a.getDate(),t.drawMonth=t.selectedMonth=t.currentMonth=a.getMonth(),t.drawYear=t.selectedYear=t.currentYear=a.getFullYear(),n===t.selectedMonth&&o===t.selectedYear||i||this._notifyChange(t),this._adjustInstDate(t),t.input&&t.input.val(s?"":this._formatDate(t))},_getDate:function(t){var e=!t.currentYear||t.input&&""===t.input.val()?null:this._daylightSavingAdjust(new Date(t.currentYear,t.currentMonth,t.currentDay));return e},_attachHandlers:function(e){var i=this._get(e,"stepMonths"),s="#"+e.id.replace(/\\\\/g,"\\");e.dpDiv.find("[data-handler]").map(function(){var e={prev:function(){t.datepicker._adjustDate(s,-i,"M")},next:function(){t.datepicker._adjustDate(s,+i,"M")},hide:function(){t.datepicker._hideDatepicker()},today:function(){t.datepicker._gotoToday(s)},selectDay:function(){return t.datepicker._selectDay(s,+this.getAttribute("data-month"),+this.getAttribute("data-year"),this),!1},selectMonth:function(){return t.datepicker._selectMonthYear(s,this,"M"),!1},selectYear:function(){return t.datepicker._selectMonthYear(s,this,"Y"),!1}};t(this).on(this.getAttribute("data-event"),e[this.getAttribute("data-handler")])})},_generateHTML:function(t){var e,i,s,n,o,a,r,h,l,c,u,d,p,f,g,m,_,v,b,y,w,k,x,C,D,I,T,P,M,S,H,z,O,A,N,W,E,F,L,R=new Date,B=this._daylightSavingAdjust(new Date(R.getFullYear(),R.getMonth(),R.getDate())),Y=this._get(t,"isRTL"),j=this._get(t,"showButtonPanel"),q=this._get(t,"hideIfNoPrevNext"),K=this._get(t,"navigationAsDateFormat"),U=this._getNumberOfMonths(t),V=this._get(t,"showCurrentAtPos"),$=this._get(t,"stepMonths"),X=1!==U[0]||1!==U[1],G=this._daylightSavingAdjust(t.currentDay?new Date(t.currentYear,t.currentMonth,t.currentDay):new Date(9999,9,9)),Q=this._getMinMaxDate(t,"min"),J=this._getMinMaxDate(t,"max"),Z=t.drawMonth-V,te=t.drawYear;if(0>Z&&(Z+=12,te--),J)for(e=this._daylightSavingAdjust(new Date(J.getFullYear(),J.getMonth()-U[0]*U[1]+1,J.getDate())),e=Q&&Q>e?Q:e;this._daylightSavingAdjust(new Date(te,Z,1))>e;)Z--,0>Z&&(Z=11,te--);for(t.drawMonth=Z,t.drawYear=te,i=this._get(t,"prevText"),i=K?this.formatDate(i,this._daylightSavingAdjust(new Date(te,Z-$,1)),this._getFormatConfig(t)):i,s=this._canAdjustMonth(t,-1,te,Z)?"<a class='ui-datepicker-prev ui-corner-all' data-handler='prev' data-event='click' title='"+i+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"e":"w")+"'>"+i+"</span></a>":q?"":"<a class='ui-datepicker-prev ui-corner-all ui-state-disabled' title='"+i+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"e":"w")+"'>"+i+"</span></a>",n=this._get(t,"nextText"),n=K?this.formatDate(n,this._daylightSavingAdjust(new Date(te,Z+$,1)),this._getFormatConfig(t)):n,o=this._canAdjustMonth(t,1,te,Z)?"<a class='ui-datepicker-next ui-corner-all' data-handler='next' data-event='click' title='"+n+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"w":"e")+"'>"+n+"</span></a>":q?"":"<a class='ui-datepicker-next ui-corner-all ui-state-disabled' title='"+n+"'><span class='ui-icon ui-icon-circle-triangle-"+(Y?"w":"e")+"'>"+n+"</span></a>",a=this._get(t,"currentText"),r=this._get(t,"gotoCurrent")&&t.currentDay?G:B,a=K?this.formatDate(a,r,this._getFormatConfig(t)):a,h=t.inline?"":"<button type='button' class='ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all' data-handler='hide' data-event='click'>"+this._get(t,"closeText")+"</button>",l=j?"<div class='ui-datepicker-buttonpane ui-widget-content'>"+(Y?h:"")+(this._isInRange(t,r)?"<button type='button' class='ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all' data-handler='today' data-event='click'>"+a+"</button>":"")+(Y?"":h)+"</div>":"",c=parseInt(this._get(t,"firstDay"),10),c=isNaN(c)?0:c,u=this._get(t,"showWeek"),d=this._get(t,"dayNames"),p=this._get(t,"dayNamesMin"),f=this._get(t,"monthNames"),g=this._get(t,"monthNamesShort"),m=this._get(t,"beforeShowDay"),_=this._get(t,"showOtherMonths"),v=this._get(t,"selectOtherMonths"),b=this._getDefaultDate(t),y="",k=0;U[0]>k;k++){for(x="",this.maxRows=4,C=0;U[1]>C;C++){if(D=this._daylightSavingAdjust(new Date(te,Z,t.selectedDay)),I=" ui-corner-all",T="",X){if(T+="<div class='ui-datepicker-group",U[1]>1)switch(C){case 0:T+=" ui-datepicker-group-first",I=" ui-corner-"+(Y?"right":"left");break;case U[1]-1:T+=" ui-datepicker-group-last",I=" ui-corner-"+(Y?"left":"right");break;default:T+=" ui-datepicker-group-middle",I=""}T+="'>"}for(T+="<div class='ui-datepicker-header ui-widget-header ui-helper-clearfix"+I+"'>"+(/all|left/.test(I)&&0===k?Y?o:s:"")+(/all|right/.test(I)&&0===k?Y?s:o:"")+this._generateMonthYearHeader(t,Z,te,Q,J,k>0||C>0,f,g)+"</div><table class='ui-datepicker-calendar'><thead>"+"<tr>",P=u?"<th class='ui-datepicker-week-col'>"+this._get(t,"weekHeader")+"</th>":"",w=0;7>w;w++)M=(w+c)%7,P+="<th scope='col'"+((w+c+6)%7>=5?" class='ui-datepicker-week-end'":"")+">"+"<span title='"+d[M]+"'>"+p[M]+"</span></th>";for(T+=P+"</tr></thead><tbody>",S=this._getDaysInMonth(te,Z),te===t.selectedYear&&Z===t.selectedMonth&&(t.selectedDay=Math.min(t.selectedDay,S)),H=(this._getFirstDayOfMonth(te,Z)-c+7)%7,z=Math.ceil((H+S)/7),O=X?this.maxRows>z?this.maxRows:z:z,this.maxRows=O,A=this._daylightSavingAdjust(new Date(te,Z,1-H)),N=0;O>N;N++){for(T+="<tr>",W=u?"<td class='ui-datepicker-week-col'>"+this._get(t,"calculateWeek")(A)+"</td>":"",w=0;7>w;w++)E=m?m.apply(t.input?t.input[0]:null,[A]):[!0,""],F=A.getMonth()!==Z,L=F&&!v||!E[0]||Q&&Q>A||J&&A>J,W+="<td class='"+((w+c+6)%7>=5?" ui-datepicker-week-end":"")+(F?" ui-datepicker-other-month":"")+(A.getTime()===D.getTime()&&Z===t.selectedMonth&&t._keyEvent||b.getTime()===A.getTime()&&b.getTime()===D.getTime()?" "+this._dayOverClass:"")+(L?" "+this._unselectableClass+" ui-state-disabled":"")+(F&&!_?"":" "+E[1]+(A.getTime()===G.getTime()?" "+this._currentClass:"")+(A.getTime()===B.getTime()?" ui-datepicker-today":""))+"'"+(F&&!_||!E[2]?"":" title='"+E[2].replace(/'/g,"&#39;")+"'")+(L?"":" data-handler='selectDay' data-event='click' data-month='"+A.getMonth()+"' data-year='"+A.getFullYear()+"'")+">"+(F&&!_?"&#xa0;":L?"<span class='ui-state-default'>"+A.getDate()+"</span>":"<a class='ui-state-default"+(A.getTime()===B.getTime()?" ui-state-highlight":"")+(A.getTime()===G.getTime()?" ui-state-active":"")+(F?" ui-priority-secondary":"")+"' href='#'>"+A.getDate()+"</a>")+"</td>",A.setDate(A.getDate()+1),A=this._daylightSavingAdjust(A);T+=W+"</tr>"}Z++,Z>11&&(Z=0,te++),T+="</tbody></table>"+(X?"</div>"+(U[0]>0&&C===U[1]-1?"<div class='ui-datepicker-row-break'></div>":""):""),x+=T}y+=x}return y+=l,t._keyEvent=!1,y},_generateMonthYearHeader:function(t,e,i,s,n,o,a,r){var h,l,c,u,d,p,f,g,m=this._get(t,"changeMonth"),_=this._get(t,"changeYear"),v=this._get(t,"showMonthAfterYear"),b="<div class='ui-datepicker-title'>",y="";if(o||!m)y+="<span class='ui-datepicker-month'>"+a[e]+"</span>";else{for(h=s&&s.getFullYear()===i,l=n&&n.getFullYear()===i,y+="<select class='ui-datepicker-month' data-handler='selectMonth' data-event='change'>",c=0;12>c;c++)(!h||c>=s.getMonth())&&(!l||n.getMonth()>=c)&&(y+="<option value='"+c+"'"+(c===e?" selected='selected'":"")+">"+r[c]+"</option>");y+="</select>"}if(v||(b+=y+(!o&&m&&_?"":"&#xa0;")),!t.yearshtml)if(t.yearshtml="",o||!_)b+="<span class='ui-datepicker-year'>"+i+"</span>";else{for(u=this._get(t,"yearRange").split(":"),d=(new Date).getFullYear(),p=function(t){var e=t.match(/c[+\-].*/)?i+parseInt(t.substring(1),10):t.match(/[+\-].*/)?d+parseInt(t,10):parseInt(t,10);return isNaN(e)?d:e},f=p(u[0]),g=Math.max(f,p(u[1]||"")),f=s?Math.max(f,s.getFullYear()):f,g=n?Math.min(g,n.getFullYear()):g,t.yearshtml+="<select class='ui-datepicker-year' data-handler='selectYear' data-event='change'>";g>=f;f++)t.yearshtml+="<option value='"+f+"'"+(f===i?" selected='selected'":"")+">"+f+"</option>";t.yearshtml+="</select>",b+=t.yearshtml,t.yearshtml=null}return b+=this._get(t,"yearSuffix"),v&&(b+=(!o&&m&&_?"":"&#xa0;")+y),b+="</div>"},_adjustInstDate:function(t,e,i){var s=t.selectedYear+("Y"===i?e:0),n=t.selectedMonth+("M"===i?e:0),o=Math.min(t.selectedDay,this._getDaysInMonth(s,n))+("D"===i?e:0),a=this._restrictMinMax(t,this._daylightSavingAdjust(new Date(s,n,o)));t.selectedDay=a.getDate(),t.drawMonth=t.selectedMonth=a.getMonth(),t.drawYear=t.selectedYear=a.getFullYear(),("M"===i||"Y"===i)&&this._notifyChange(t)},_restrictMinMax:function(t,e){var i=this._getMinMaxDate(t,"min"),s=this._getMinMaxDate(t,"max"),n=i&&i>e?i:e;return s&&n>s?s:n},_notifyChange:function(t){var e=this._get(t,"onChangeMonthYear");e&&e.apply(t.input?t.input[0]:null,[t.selectedYear,t.selectedMonth+1,t])},_getNumberOfMonths:function(t){var e=this._get(t,"numberOfMonths");return null==e?[1,1]:"number"==typeof e?[1,e]:e},_getMinMaxDate:function(t,e){return this._determineDate(t,this._get(t,e+"Date"),null)},_getDaysInMonth:function(t,e){return 32-this._daylightSavingAdjust(new Date(t,e,32)).getDate()},_getFirstDayOfMonth:function(t,e){return new Date(t,e,1).getDay()},_canAdjustMonth:function(t,e,i,s){var n=this._getNumberOfMonths(t),o=this._daylightSavingAdjust(new Date(i,s+(0>e?e:n[0]*n[1]),1));return 0>e&&o.setDate(this._getDaysInMonth(o.getFullYear(),o.getMonth())),this._isInRange(t,o)},_isInRange:function(t,e){var i,s,n=this._getMinMaxDate(t,"min"),o=this._getMinMaxDate(t,"max"),a=null,r=null,h=this._get(t,"yearRange");return h&&(i=h.split(":"),s=(new Date).getFullYear(),a=parseInt(i[0],10),r=parseInt(i[1],10),i[0].match(/[+\-].*/)&&(a+=s),i[1].match(/[+\-].*/)&&(r+=s)),(!n||e.getTime()>=n.getTime())&&(!o||e.getTime()<=o.getTime())&&(!a||e.getFullYear()>=a)&&(!r||r>=e.getFullYear())},_getFormatConfig:function(t){var e=this._get(t,"shortYearCutoff");return e="string"!=typeof e?e:(new Date).getFullYear()%100+parseInt(e,10),{shortYearCutoff:e,dayNamesShort:this._get(t,"dayNamesShort"),dayNames:this._get(t,"dayNames"),monthNamesShort:this._get(t,"monthNamesShort"),monthNames:this._get(t,"monthNames")}},_formatDate:function(t,e,i,s){e||(t.currentDay=t.selectedDay,t.currentMonth=t.selectedMonth,t.currentYear=t.selectedYear);var n=e?"object"==typeof e?e:this._daylightSavingAdjust(new Date(s,i,e)):this._daylightSavingAdjust(new Date(t.currentYear,t.currentMonth,t.currentDay));return this.formatDate(this._get(t,"dateFormat"),n,this._getFormatConfig(t))}}),t.fn.datepicker=function(e){if(!this.length)return this;t.datepicker.initialized||(t(document).on("mousedown",t.datepicker._checkExternalClick),t.datepicker.initialized=!0),0===t("#"+t.datepicker._mainDivId).length&&t("body").append(t.datepicker.dpDiv);var i=Array.prototype.slice.call(arguments,1);return"string"!=typeof e||"isDisabled"!==e&&"getDate"!==e&&"widget"!==e?"option"===e&&2===arguments.length&&"string"==typeof arguments[1]?t.datepicker["_"+e+"Datepicker"].apply(t.datepicker,[this[0]].concat(i)):this.each(function(){"string"==typeof e?t.datepicker["_"+e+"Datepicker"].apply(t.datepicker,[this].concat(i)):t.datepicker._attachDatepicker(this,e)}):t.datepicker["_"+e+"Datepicker"].apply(t.datepicker,[this[0]].concat(i))},t.datepicker=new s,t.datepicker.initialized=!1,t.datepicker.uuid=(new Date).getTime(),t.datepicker.version="1.12.1",t.datepicker,t.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase());var _=!1;t(document).on("mouseup",function(){_=!1}),t.widget("ui.mouse",{version:"1.12.1",options:{cancel:"input, textarea, button, select, option",distance:1,delay:0},_mouseInit:function(){var e=this;this.element.on("mousedown."+this.widgetName,function(t){return e._mouseDown(t)}).on("click."+this.widgetName,function(i){return!0===t.data(i.target,e.widgetName+".preventClickEvent")?(t.removeData(i.target,e.widgetName+".preventClickEvent"),i.stopImmediatePropagation(),!1):void 0}),this.started=!1},_mouseDestroy:function(){this.element.off("."+this.widgetName),this._mouseMoveDelegate&&this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(e){if(!_){this._mouseMoved=!1,this._mouseStarted&&this._mouseUp(e),this._mouseDownEvent=e;var i=this,s=1===e.which,n="string"==typeof this.options.cancel&&e.target.nodeName?t(e.target).closest(this.options.cancel).length:!1;return s&&!n&&this._mouseCapture(e)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){i.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(e)!==!1,!this._mouseStarted)?(e.preventDefault(),!0):(!0===t.data(e.target,this.widgetName+".preventClickEvent")&&t.removeData(e.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(t){return i._mouseMove(t)},this._mouseUpDelegate=function(t){return i._mouseUp(t)},this.document.on("mousemove."+this.widgetName,this._mouseMoveDelegate).on("mouseup."+this.widgetName,this._mouseUpDelegate),e.preventDefault(),_=!0,!0)):!0}},_mouseMove:function(e){if(this._mouseMoved){if(t.ui.ie&&(!document.documentMode||9>document.documentMode)&&!e.button)return this._mouseUp(e);if(!e.which)if(e.originalEvent.altKey||e.originalEvent.ctrlKey||e.originalEvent.metaKey||e.originalEvent.shiftKey)this.ignoreMissingWhich=!0;else if(!this.ignoreMissingWhich)return this._mouseUp(e)}return(e.which||e.button)&&(this._mouseMoved=!0),this._mouseStarted?(this._mouseDrag(e),e.preventDefault()):(this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,e)!==!1,this._mouseStarted?this._mouseDrag(e):this._mouseUp(e)),!this._mouseStarted)},_mouseUp:function(e){this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,e.target===this._mouseDownEvent.target&&t.data(e.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(e)),this._mouseDelayTimer&&(clearTimeout(this._mouseDelayTimer),delete this._mouseDelayTimer),this.ignoreMissingWhich=!1,_=!1,e.preventDefault()},_mouseDistanceMet:function(t){return Math.max(Math.abs(this._mouseDownEvent.pageX-t.pageX),Math.abs(this._mouseDownEvent.pageY-t.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),t.ui.plugin={add:function(e,i,s){var n,o=t.ui[e].prototype;for(n in s)o.plugins[n]=o.plugins[n]||[],o.plugins[n].push([i,s[n]])},call:function(t,e,i,s){var n,o=t.plugins[e];if(o&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(n=0;o.length>n;n++)t.options[o[n][0]]&&o[n][1].apply(t.element,i)}},t.ui.safeBlur=function(e){e&&"body"!==e.nodeName.toLowerCase()&&t(e).trigger("blur")},t.widget("ui.draggable",t.ui.mouse,{version:"1.12.1",widgetEventPrefix:"drag",options:{addClasses:!0,appendTo:"parent",axis:!1,connectToSortable:!1,containment:!1,cursor:"auto",cursorAt:!1,grid:!1,handle:!1,helper:"original",iframeFix:!1,opacity:!1,refreshPositions:!1,revert:!1,revertDuration:500,scope:"default",scroll:!0,scrollSensitivity:20,scrollSpeed:20,snap:!1,snapMode:"both",snapTolerance:20,stack:!1,zIndex:!1,drag:null,start:null,stop:null},_create:function(){"original"===this.options.helper&&this._setPositionRelative(),this.options.addClasses&&this._addClass("ui-draggable"),this._setHandleClassName(),this._mouseInit()},_setOption:function(t,e){this._super(t,e),"handle"===t&&(this._removeHandleClassName(),this._setHandleClassName())},_destroy:function(){return(this.helper||this.element).is(".ui-draggable-dragging")?(this.destroyOnClear=!0,void 0):(this._removeHandleClassName(),this._mouseDestroy(),void 0)},_mouseCapture:function(e){var i=this.options;return this.helper||i.disabled||t(e.target).closest(".ui-resizable-handle").length>0?!1:(this.handle=this._getHandle(e),this.handle?(this._blurActiveElement(e),this._blockFrames(i.iframeFix===!0?"iframe":i.iframeFix),!0):!1)},_blockFrames:function(e){this.iframeBlocks=this.document.find(e).map(function(){var e=t(this);return t("<div>").css("position","absolute").appendTo(e.parent()).outerWidth(e.outerWidth()).outerHeight(e.outerHeight()).offset(e.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_blurActiveElement:function(e){var i=t.ui.safeActiveElement(this.document[0]),s=t(e.target);s.closest(i).length||t.ui.safeBlur(i)},_mouseStart:function(e){var i=this.options;return this.helper=this._createHelper(e),this._addClass(this.helper,"ui-draggable-dragging"),this._cacheHelperProportions(),t.ui.ddmanager&&(t.ui.ddmanager.current=this),this._cacheMargins(),this.cssPosition=this.helper.css("position"),this.scrollParent=this.helper.scrollParent(!0),this.offsetParent=this.helper.offsetParent(),this.hasFixedAncestor=this.helper.parents().filter(function(){return"fixed"===t(this).css("position")}).length>0,this.positionAbs=this.element.offset(),this._refreshOffsets(e),this.originalPosition=this.position=this._generatePosition(e,!1),this.originalPageX=e.pageX,this.originalPageY=e.pageY,i.cursorAt&&this._adjustOffsetFromHelper(i.cursorAt),this._setContainment(),this._trigger("start",e)===!1?(this._clear(),!1):(this._cacheHelperProportions(),t.ui.ddmanager&&!i.dropBehaviour&&t.ui.ddmanager.prepareOffsets(this,e),this._mouseDrag(e,!0),t.ui.ddmanager&&t.ui.ddmanager.dragStart(this,e),!0)},_refreshOffsets:function(t){this.offset={top:this.positionAbs.top-this.margins.top,left:this.positionAbs.left-this.margins.left,scroll:!1,parent:this._getParentOffset(),relative:this._getRelativeOffset()},this.offset.click={left:t.pageX-this.offset.left,top:t.pageY-this.offset.top}},_mouseDrag:function(e,i){if(this.hasFixedAncestor&&(this.offset.parent=this._getParentOffset()),this.position=this._generatePosition(e,!0),this.positionAbs=this._convertPositionTo("absolute"),!i){var s=this._uiHash();if(this._trigger("drag",e,s)===!1)return this._mouseUp(new t.Event("mouseup",e)),!1;this.position=s.position}return this.helper[0].style.left=this.position.left+"px",this.helper[0].style.top=this.position.top+"px",t.ui.ddmanager&&t.ui.ddmanager.drag(this,e),!1},_mouseStop:function(e){var i=this,s=!1;return t.ui.ddmanager&&!this.options.dropBehaviour&&(s=t.ui.ddmanager.drop(this,e)),this.dropped&&(s=this.dropped,this.dropped=!1),"invalid"===this.options.revert&&!s||"valid"===this.options.revert&&s||this.options.revert===!0||t.isFunction(this.options.revert)&&this.options.revert.call(this.element,s)?t(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){i._trigger("stop",e)!==!1&&i._clear()}):this._trigger("stop",e)!==!1&&this._clear(),!1},_mouseUp:function(e){return this._unblockFrames(),t.ui.ddmanager&&t.ui.ddmanager.dragStop(this,e),this.handleElement.is(e.target)&&this.element.trigger("focus"),t.ui.mouse.prototype._mouseUp.call(this,e)},cancel:function(){return this.helper.is(".ui-draggable-dragging")?this._mouseUp(new t.Event("mouseup",{target:this.element[0]})):this._clear(),this},_getHandle:function(e){return this.options.handle?!!t(e.target).closest(this.element.find(this.options.handle)).length:!0},_setHandleClassName:function(){this.handleElement=this.options.handle?this.element.find(this.options.handle):this.element,this._addClass(this.handleElement,"ui-draggable-handle")},_removeHandleClassName:function(){this._removeClass(this.handleElement,"ui-draggable-handle")},_createHelper:function(e){var i=this.options,s=t.isFunction(i.helper),n=s?t(i.helper.apply(this.element[0],[e])):"clone"===i.helper?this.element.clone().removeAttr("id"):this.element;return n.parents("body").length||n.appendTo("parent"===i.appendTo?this.element[0].parentNode:i.appendTo),s&&n[0]===this.element[0]&&this._setPositionRelative(),n[0]===this.element[0]||/(fixed|absolute)/.test(n.css("position"))||n.css("position","absolute"),n},_setPositionRelative:function(){/^(?:r|a|f)/.test(this.element.css("position"))||(this.element[0].style.position="relative")},_adjustOffsetFromHelper:function(e){"string"==typeof e&&(e=e.split(" ")),t.isArray(e)&&(e={left:+e[0],top:+e[1]||0}),"left"in e&&(this.offset.click.left=e.left+this.margins.left),"right"in e&&(this.offset.click.left=this.helperProportions.width-e.right+this.margins.left),"top"in e&&(this.offset.click.top=e.top+this.margins.top),"bottom"in e&&(this.offset.click.top=this.helperProportions.height-e.bottom+this.margins.top)},_isRootNode:function(t){return/(html|body)/i.test(t.tagName)||t===this.document[0]},_getParentOffset:function(){var e=this.offsetParent.offset(),i=this.document[0];return"absolute"===this.cssPosition&&this.scrollParent[0]!==i&&t.contains(this.scrollParent[0],this.offsetParent[0])&&(e.left+=this.scrollParent.scrollLeft(),e.top+=this.scrollParent.scrollTop()),this._isRootNode(this.offsetParent[0])&&(e={top:0,left:0}),{top:e.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:e.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"!==this.cssPosition)return{top:0,left:0};var t=this.element.position(),e=this._isRootNode(this.scrollParent[0]);return{top:t.top-(parseInt(this.helper.css("top"),10)||0)+(e?0:this.scrollParent.scrollTop()),left:t.left-(parseInt(this.helper.css("left"),10)||0)+(e?0:this.scrollParent.scrollLeft())}
42024},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0,right:parseInt(this.element.css("marginRight"),10)||0,bottom:parseInt(this.element.css("marginBottom"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var e,i,s,n=this.options,o=this.document[0];return this.relativeContainer=null,n.containment?"window"===n.containment?(this.containment=[t(window).scrollLeft()-this.offset.relative.left-this.offset.parent.left,t(window).scrollTop()-this.offset.relative.top-this.offset.parent.top,t(window).scrollLeft()+t(window).width()-this.helperProportions.width-this.margins.left,t(window).scrollTop()+(t(window).height()||o.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top],void 0):"document"===n.containment?(this.containment=[0,0,t(o).width()-this.helperProportions.width-this.margins.left,(t(o).height()||o.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top],void 0):n.containment.constructor===Array?(this.containment=n.containment,void 0):("parent"===n.containment&&(n.containment=this.helper[0].parentNode),i=t(n.containment),s=i[0],s&&(e=/(scroll|auto)/.test(i.css("overflow")),this.containment=[(parseInt(i.css("borderLeftWidth"),10)||0)+(parseInt(i.css("paddingLeft"),10)||0),(parseInt(i.css("borderTopWidth"),10)||0)+(parseInt(i.css("paddingTop"),10)||0),(e?Math.max(s.scrollWidth,s.offsetWidth):s.offsetWidth)-(parseInt(i.css("borderRightWidth"),10)||0)-(parseInt(i.css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left-this.margins.right,(e?Math.max(s.scrollHeight,s.offsetHeight):s.offsetHeight)-(parseInt(i.css("borderBottomWidth"),10)||0)-(parseInt(i.css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top-this.margins.bottom],this.relativeContainer=i),void 0):(this.containment=null,void 0)},_convertPositionTo:function(t,e){e||(e=this.position);var i="absolute"===t?1:-1,s=this._isRootNode(this.scrollParent[0]);return{top:e.top+this.offset.relative.top*i+this.offset.parent.top*i-("fixed"===this.cssPosition?-this.offset.scroll.top:s?0:this.offset.scroll.top)*i,left:e.left+this.offset.relative.left*i+this.offset.parent.left*i-("fixed"===this.cssPosition?-this.offset.scroll.left:s?0:this.offset.scroll.left)*i}},_generatePosition:function(t,e){var i,s,n,o,a=this.options,r=this._isRootNode(this.scrollParent[0]),h=t.pageX,l=t.pageY;return r&&this.offset.scroll||(this.offset.scroll={top:this.scrollParent.scrollTop(),left:this.scrollParent.scrollLeft()}),e&&(this.containment&&(this.relativeContainer?(s=this.relativeContainer.offset(),i=[this.containment[0]+s.left,this.containment[1]+s.top,this.containment[2]+s.left,this.containment[3]+s.top]):i=this.containment,t.pageX-this.offset.click.left<i[0]&&(h=i[0]+this.offset.click.left),t.pageY-this.offset.click.top<i[1]&&(l=i[1]+this.offset.click.top),t.pageX-this.offset.click.left>i[2]&&(h=i[2]+this.offset.click.left),t.pageY-this.offset.click.top>i[3]&&(l=i[3]+this.offset.click.top)),a.grid&&(n=a.grid[1]?this.originalPageY+Math.round((l-this.originalPageY)/a.grid[1])*a.grid[1]:this.originalPageY,l=i?n-this.offset.click.top>=i[1]||n-this.offset.click.top>i[3]?n:n-this.offset.click.top>=i[1]?n-a.grid[1]:n+a.grid[1]:n,o=a.grid[0]?this.originalPageX+Math.round((h-this.originalPageX)/a.grid[0])*a.grid[0]:this.originalPageX,h=i?o-this.offset.click.left>=i[0]||o-this.offset.click.left>i[2]?o:o-this.offset.click.left>=i[0]?o-a.grid[0]:o+a.grid[0]:o),"y"===a.axis&&(h=this.originalPageX),"x"===a.axis&&(l=this.originalPageY)),{top:l-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.offset.scroll.top:r?0:this.offset.scroll.top),left:h-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.offset.scroll.left:r?0:this.offset.scroll.left)}},_clear:function(){this._removeClass(this.helper,"ui-draggable-dragging"),this.helper[0]===this.element[0]||this.cancelHelperRemoval||this.helper.remove(),this.helper=null,this.cancelHelperRemoval=!1,this.destroyOnClear&&this.destroy()},_trigger:function(e,i,s){return s=s||this._uiHash(),t.ui.plugin.call(this,e,[i,s,this],!0),/^(drag|start|stop)/.test(e)&&(this.positionAbs=this._convertPositionTo("absolute"),s.offset=this.positionAbs),t.Widget.prototype._trigger.call(this,e,i,s)},plugins:{},_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}}),t.ui.plugin.add("draggable","connectToSortable",{start:function(e,i,s){var n=t.extend({},i,{item:s.element});s.sortables=[],t(s.options.connectToSortable).each(function(){var i=t(this).sortable("instance");i&&!i.options.disabled&&(s.sortables.push(i),i.refreshPositions(),i._trigger("activate",e,n))})},stop:function(e,i,s){var n=t.extend({},i,{item:s.element});s.cancelHelperRemoval=!1,t.each(s.sortables,function(){var t=this;t.isOver?(t.isOver=0,s.cancelHelperRemoval=!0,t.cancelHelperRemoval=!1,t._storedCSS={position:t.placeholder.css("position"),top:t.placeholder.css("top"),left:t.placeholder.css("left")},t._mouseStop(e),t.options.helper=t.options._helper):(t.cancelHelperRemoval=!0,t._trigger("deactivate",e,n))})},drag:function(e,i,s){t.each(s.sortables,function(){var n=!1,o=this;o.positionAbs=s.positionAbs,o.helperProportions=s.helperProportions,o.offset.click=s.offset.click,o._intersectsWith(o.containerCache)&&(n=!0,t.each(s.sortables,function(){return this.positionAbs=s.positionAbs,this.helperProportions=s.helperProportions,this.offset.click=s.offset.click,this!==o&&this._intersectsWith(this.containerCache)&&t.contains(o.element[0],this.element[0])&&(n=!1),n})),n?(o.isOver||(o.isOver=1,s._parent=i.helper.parent(),o.currentItem=i.helper.appendTo(o.element).data("ui-sortable-item",!0),o.options._helper=o.options.helper,o.options.helper=function(){return i.helper[0]},e.target=o.currentItem[0],o._mouseCapture(e,!0),o._mouseStart(e,!0,!0),o.offset.click.top=s.offset.click.top,o.offset.click.left=s.offset.click.left,o.offset.parent.left-=s.offset.parent.left-o.offset.parent.left,o.offset.parent.top-=s.offset.parent.top-o.offset.parent.top,s._trigger("toSortable",e),s.dropped=o.element,t.each(s.sortables,function(){this.refreshPositions()}),s.currentItem=s.element,o.fromOutside=s),o.currentItem&&(o._mouseDrag(e),i.position=o.position)):o.isOver&&(o.isOver=0,o.cancelHelperRemoval=!0,o.options._revert=o.options.revert,o.options.revert=!1,o._trigger("out",e,o._uiHash(o)),o._mouseStop(e,!0),o.options.revert=o.options._revert,o.options.helper=o.options._helper,o.placeholder&&o.placeholder.remove(),i.helper.appendTo(s._parent),s._refreshOffsets(e),i.position=s._generatePosition(e,!0),s._trigger("fromSortable",e),s.dropped=!1,t.each(s.sortables,function(){this.refreshPositions()}))})}}),t.ui.plugin.add("draggable","cursor",{start:function(e,i,s){var n=t("body"),o=s.options;n.css("cursor")&&(o._cursor=n.css("cursor")),n.css("cursor",o.cursor)},stop:function(e,i,s){var n=s.options;n._cursor&&t("body").css("cursor",n._cursor)}}),t.ui.plugin.add("draggable","opacity",{start:function(e,i,s){var n=t(i.helper),o=s.options;n.css("opacity")&&(o._opacity=n.css("opacity")),n.css("opacity",o.opacity)},stop:function(e,i,s){var n=s.options;n._opacity&&t(i.helper).css("opacity",n._opacity)}}),t.ui.plugin.add("draggable","scroll",{start:function(t,e,i){i.scrollParentNotHidden||(i.scrollParentNotHidden=i.helper.scrollParent(!1)),i.scrollParentNotHidden[0]!==i.document[0]&&"HTML"!==i.scrollParentNotHidden[0].tagName&&(i.overflowOffset=i.scrollParentNotHidden.offset())},drag:function(e,i,s){var n=s.options,o=!1,a=s.scrollParentNotHidden[0],r=s.document[0];a!==r&&"HTML"!==a.tagName?(n.axis&&"x"===n.axis||(s.overflowOffset.top+a.offsetHeight-e.pageY<n.scrollSensitivity?a.scrollTop=o=a.scrollTop+n.scrollSpeed:e.pageY-s.overflowOffset.top<n.scrollSensitivity&&(a.scrollTop=o=a.scrollTop-n.scrollSpeed)),n.axis&&"y"===n.axis||(s.overflowOffset.left+a.offsetWidth-e.pageX<n.scrollSensitivity?a.scrollLeft=o=a.scrollLeft+n.scrollSpeed:e.pageX-s.overflowOffset.left<n.scrollSensitivity&&(a.scrollLeft=o=a.scrollLeft-n.scrollSpeed))):(n.axis&&"x"===n.axis||(e.pageY-t(r).scrollTop()<n.scrollSensitivity?o=t(r).scrollTop(t(r).scrollTop()-n.scrollSpeed):t(window).height()-(e.pageY-t(r).scrollTop())<n.scrollSensitivity&&(o=t(r).scrollTop(t(r).scrollTop()+n.scrollSpeed))),n.axis&&"y"===n.axis||(e.pageX-t(r).scrollLeft()<n.scrollSensitivity?o=t(r).scrollLeft(t(r).scrollLeft()-n.scrollSpeed):t(window).width()-(e.pageX-t(r).scrollLeft())<n.scrollSensitivity&&(o=t(r).scrollLeft(t(r).scrollLeft()+n.scrollSpeed)))),o!==!1&&t.ui.ddmanager&&!n.dropBehaviour&&t.ui.ddmanager.prepareOffsets(s,e)}}),t.ui.plugin.add("draggable","snap",{start:function(e,i,s){var n=s.options;s.snapElements=[],t(n.snap.constructor!==String?n.snap.items||":data(ui-draggable)":n.snap).each(function(){var e=t(this),i=e.offset();this!==s.element[0]&&s.snapElements.push({item:this,width:e.outerWidth(),height:e.outerHeight(),top:i.top,left:i.left})})},drag:function(e,i,s){var n,o,a,r,h,l,c,u,d,p,f=s.options,g=f.snapTolerance,m=i.offset.left,_=m+s.helperProportions.width,v=i.offset.top,b=v+s.helperProportions.height;for(d=s.snapElements.length-1;d>=0;d--)h=s.snapElements[d].left-s.margins.left,l=h+s.snapElements[d].width,c=s.snapElements[d].top-s.margins.top,u=c+s.snapElements[d].height,h-g>_||m>l+g||c-g>b||v>u+g||!t.contains(s.snapElements[d].item.ownerDocument,s.snapElements[d].item)?(s.snapElements[d].snapping&&s.options.snap.release&&s.options.snap.release.call(s.element,e,t.extend(s._uiHash(),{snapItem:s.snapElements[d].item})),s.snapElements[d].snapping=!1):("inner"!==f.snapMode&&(n=g>=Math.abs(c-b),o=g>=Math.abs(u-v),a=g>=Math.abs(h-_),r=g>=Math.abs(l-m),n&&(i.position.top=s._convertPositionTo("relative",{top:c-s.helperProportions.height,left:0}).top),o&&(i.position.top=s._convertPositionTo("relative",{top:u,left:0}).top),a&&(i.position.left=s._convertPositionTo("relative",{top:0,left:h-s.helperProportions.width}).left),r&&(i.position.left=s._convertPositionTo("relative",{top:0,left:l}).left)),p=n||o||a||r,"outer"!==f.snapMode&&(n=g>=Math.abs(c-v),o=g>=Math.abs(u-b),a=g>=Math.abs(h-m),r=g>=Math.abs(l-_),n&&(i.position.top=s._convertPositionTo("relative",{top:c,left:0}).top),o&&(i.position.top=s._convertPositionTo("relative",{top:u-s.helperProportions.height,left:0}).top),a&&(i.position.left=s._convertPositionTo("relative",{top:0,left:h}).left),r&&(i.position.left=s._convertPositionTo("relative",{top:0,left:l-s.helperProportions.width}).left)),!s.snapElements[d].snapping&&(n||o||a||r||p)&&s.options.snap.snap&&s.options.snap.snap.call(s.element,e,t.extend(s._uiHash(),{snapItem:s.snapElements[d].item})),s.snapElements[d].snapping=n||o||a||r||p)}}),t.ui.plugin.add("draggable","stack",{start:function(e,i,s){var n,o=s.options,a=t.makeArray(t(o.stack)).sort(function(e,i){return(parseInt(t(e).css("zIndex"),10)||0)-(parseInt(t(i).css("zIndex"),10)||0)});a.length&&(n=parseInt(t(a[0]).css("zIndex"),10)||0,t(a).each(function(e){t(this).css("zIndex",n+e)}),this.css("zIndex",n+a.length))}}),t.ui.plugin.add("draggable","zIndex",{start:function(e,i,s){var n=t(i.helper),o=s.options;n.css("zIndex")&&(o._zIndex=n.css("zIndex")),n.css("zIndex",o.zIndex)},stop:function(e,i,s){var n=s.options;n._zIndex&&t(i.helper).css("zIndex",n._zIndex)}}),t.ui.draggable,t.widget("ui.resizable",t.ui.mouse,{version:"1.12.1",widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,classes:{"ui-resizable-se":"ui-icon ui-icon-gripsmall-diagonal-se"},containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:90,resize:null,start:null,stop:null},_num:function(t){return parseFloat(t)||0},_isNumber:function(t){return!isNaN(parseFloat(t))},_hasScroll:function(e,i){if("hidden"===t(e).css("overflow"))return!1;var s=i&&"left"===i?"scrollLeft":"scrollTop",n=!1;return e[s]>0?!0:(e[s]=1,n=e[s]>0,e[s]=0,n)},_create:function(){var e,i=this.options,s=this;this._addClass("ui-resizable"),t.extend(this,{_aspectRatio:!!i.aspectRatio,aspectRatio:i.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:i.helper||i.ghost||i.animate?i.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/^(canvas|textarea|input|select|button|img)$/i)&&(this.element.wrap(t("<div class='ui-wrapper' style='overflow: hidden;'></div>").css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,e={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(e),this.originalElement.css("margin",0),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css(e),this._proportionallyResize()),this._setupHandles(),i.autoHide&&t(this.element).on("mouseenter",function(){i.disabled||(s._removeClass("ui-resizable-autohide"),s._handles.show())}).on("mouseleave",function(){i.disabled||s.resizing||(s._addClass("ui-resizable-autohide"),s._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy();var e,i=function(e){t(e).removeData("resizable").removeData("ui-resizable").off(".resizable").find(".ui-resizable-handle").remove()};return this.elementIsWrapper&&(i(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),i(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles();break;default:}},_setupHandles:function(){var e,i,s,n,o,a=this.options,r=this;if(this.handles=a.handles||(t(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=t(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),s=this.handles.split(","),this.handles={},i=0;s.length>i;i++)e=t.trim(s[i]),n="ui-resizable-"+e,o=t("<div>"),this._addClass(o,"ui-resizable-handle "+n),o.css({zIndex:a.zIndex}),this.handles[e]=".ui-resizable-"+e,this.element.append(o);this._renderAxis=function(e){var i,s,n,o;e=e||this.element;for(i in this.handles)this.handles[i].constructor===String?this.handles[i]=this.element.children(this.handles[i]).first().show():(this.handles[i].jquery||this.handles[i].nodeType)&&(this.handles[i]=t(this.handles[i]),this._on(this.handles[i],{mousedown:r._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(s=t(this.handles[i],this.element),o=/sw|ne|nw|se|n|s/.test(i)?s.outerHeight():s.outerWidth(),n=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join(""),e.css(n,o),this._proportionallyResize()),this._handles=this._handles.add(this.handles[i])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){r.resizing||(this.className&&(o=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),r.axis=o&&o[1]?o[1]:"se")}),a.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._handles.remove()},_mouseCapture:function(e){var i,s,n=!1;for(i in this.handles)s=t(this.handles[i])[0],(s===e.target||t.contains(s,e.target))&&(n=!0);return!this.options.disabled&&n},_mouseStart:function(e){var i,s,n,o=this.options,a=this.element;return this.resizing=!0,this._renderProxy(),i=this._num(this.helper.css("left")),s=this._num(this.helper.css("top")),o.containment&&(i+=t(o.containment).scrollLeft()||0,s+=t(o.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:i,top:s},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:a.width(),height:a.height()},this.originalSize=this._helper?{width:a.outerWidth(),height:a.outerHeight()}:{width:a.width(),height:a.height()},this.sizeDiff={width:a.outerWidth()-a.width(),height:a.outerHeight()-a.height()},this.originalPosition={left:i,top:s},this.originalMousePosition={left:e.pageX,top:e.pageY},this.aspectRatio="number"==typeof o.aspectRatio?o.aspectRatio:this.originalSize.width/this.originalSize.height||1,n=t(".ui-resizable-"+this.axis).css("cursor"),t("body").css("cursor","auto"===n?this.axis+"-resize":n),this._addClass("ui-resizable-resizing"),this._propagate("start",e),!0},_mouseDrag:function(e){var i,s,n=this.originalMousePosition,o=this.axis,a=e.pageX-n.left||0,r=e.pageY-n.top||0,h=this._change[o];return this._updatePrevProperties(),h?(i=h.apply(this,[e,a,r]),this._updateVirtualBoundaries(e.shiftKey),(this._aspectRatio||e.shiftKey)&&(i=this._updateRatio(i,e)),i=this._respectSize(i,e),this._updateCache(i),this._propagate("resize",e),s=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),t.isEmptyObject(s)||(this._updatePrevProperties(),this._trigger("resize",e,this.ui()),this._applyChanges()),!1):!1},_mouseStop:function(e){this.resizing=!1;var i,s,n,o,a,r,h,l=this.options,c=this;return this._helper&&(i=this._proportionallyResizeElements,s=i.length&&/textarea/i.test(i[0].nodeName),n=s&&this._hasScroll(i[0],"left")?0:c.sizeDiff.height,o=s?0:c.sizeDiff.width,a={width:c.helper.width()-o,height:c.helper.height()-n},r=parseFloat(c.element.css("left"))+(c.position.left-c.originalPosition.left)||null,h=parseFloat(c.element.css("top"))+(c.position.top-c.originalPosition.top)||null,l.animate||this.element.css(t.extend(a,{top:h,left:r})),c.helper.height(c.size.height),c.helper.width(c.size.width),this._helper&&!l.animate&&this._proportionallyResize()),t("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",e),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,s,n,o,a=this.options;o={minWidth:this._isNumber(a.minWidth)?a.minWidth:0,maxWidth:this._isNumber(a.maxWidth)?a.maxWidth:1/0,minHeight:this._isNumber(a.minHeight)?a.minHeight:0,maxHeight:this._isNumber(a.maxHeight)?a.maxHeight:1/0},(this._aspectRatio||t)&&(e=o.minHeight*this.aspectRatio,s=o.minWidth/this.aspectRatio,i=o.maxHeight*this.aspectRatio,n=o.maxWidth/this.aspectRatio,e>o.minWidth&&(o.minWidth=e),s>o.minHeight&&(o.minHeight=s),o.maxWidth>i&&(o.maxWidth=i),o.maxHeight>n&&(o.maxHeight=n)),this._vBoundaries=o},_updateCache:function(t){this.offset=this.helper.offset(),this._isNumber(t.left)&&(this.position.left=t.left),this._isNumber(t.top)&&(this.position.top=t.top),this._isNumber(t.height)&&(this.size.height=t.height),this._isNumber(t.width)&&(this.size.width=t.width)},_updateRatio:function(t){var e=this.position,i=this.size,s=this.axis;return this._isNumber(t.height)?t.width=t.height*this.aspectRatio:this._isNumber(t.width)&&(t.height=t.width/this.aspectRatio),"sw"===s&&(t.left=e.left+(i.width-t.width),t.top=null),"nw"===s&&(t.top=e.top+(i.height-t.height),t.left=e.left+(i.width-t.width)),t},_respectSize:function(t){var e=this._vBoundaries,i=this.axis,s=this._isNumber(t.width)&&e.maxWidth&&e.maxWidth<t.width,n=this._isNumber(t.height)&&e.maxHeight&&e.maxHeight<t.height,o=this._isNumber(t.width)&&e.minWidth&&e.minWidth>t.width,a=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,r=this.originalPosition.left+this.originalSize.width,h=this.originalPosition.top+this.originalSize.height,l=/sw|nw|w/.test(i),c=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),a&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&l&&(t.left=r-e.minWidth),s&&l&&(t.left=r-e.maxWidth),a&&c&&(t.top=h-e.minHeight),n&&c&&(t.top=h-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],n=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];4>e;e++)i[e]=parseFloat(s[e])||0,i[e]+=parseFloat(n[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;this._proportionallyResizeElements.length>e;e++)t=this._proportionallyResizeElements[e],this.outerDimensions||(this.outerDimensions=this._getPaddingPlusBorderDimensions(t)),t.css({height:i.height()-this.outerDimensions.height||0,width:i.width()-this.outerDimensions.width||0})},_renderProxy:function(){var e=this.element,i=this.options;this.elementOffset=e.offset(),this._helper?(this.helper=this.helper||t("<div style='overflow:hidden;'></div>"),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++i.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize,s=this.originalPosition;return{left:s.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize,n=this.originalPosition;return{top:n.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},sw:function(e,i,s){return t.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[e,i,s]))},ne:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[e,i,s]))},nw:function(e,i,s){return t.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[e,i,s]))}},_propagate:function(e,i){t.ui.plugin.call(this,e,[i,this.ui()]),"resize"!==e&&this._trigger(e,i,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),t.ui.plugin.add("resizable","animate",{stop:function(e){var i=t(this).resizable("instance"),s=i.options,n=i._proportionallyResizeElements,o=n.length&&/textarea/i.test(n[0].nodeName),a=o&&i._hasScroll(n[0],"left")?0:i.sizeDiff.height,r=o?0:i.sizeDiff.width,h={width:i.size.width-r,height:i.size.height-a},l=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left)||null,c=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(t.extend(h,c&&l?{top:c,left:l}:{}),{duration:s.animateDuration,easing:s.animateEasing,step:function(){var s={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};n&&n.length&&t(n[0]).css({width:s.width,height:s.height}),i._updateCache(s),i._propagate("resize",e)}})}}),t.ui.plugin.add("resizable","containment",{start:function(){var e,i,s,n,o,a,r,h=t(this).resizable("instance"),l=h.options,c=h.element,u=l.containment,d=u instanceof t?u.get(0):/parent/.test(u)?c.parent().get(0):u;d&&(h.containerElement=t(d),/document/.test(u)||u===document?(h.containerOffset={left:0,top:0},h.containerPosition={left:0,top:0},h.parentData={element:t(document),left:0,top:0,width:t(document).width(),height:t(document).height()||document.body.parentNode.scrollHeight}):(e=t(d),i=[],t(["Top","Right","Left","Bottom"]).each(function(t,s){i[t]=h._num(e.css("padding"+s))}),h.containerOffset=e.offset(),h.containerPosition=e.position(),h.containerSize={height:e.innerHeight()-i[3],width:e.innerWidth()-i[1]},s=h.containerOffset,n=h.containerSize.height,o=h.containerSize.width,a=h._hasScroll(d,"left")?d.scrollWidth:o,r=h._hasScroll(d)?d.scrollHeight:n,h.parentData={element:d,left:s.left,top:s.top,width:a,height:r}))},resize:function(e){var i,s,n,o,a=t(this).resizable("instance"),r=a.options,h=a.containerOffset,l=a.position,c=a._aspectRatio||e.shiftKey,u={top:0,left:0},d=a.containerElement,p=!0;d[0]!==document&&/static/.test(d.css("position"))&&(u=h),l.left<(a._helper?h.left:0)&&(a.size.width=a.size.width+(a._helper?a.position.left-h.left:a.position.left-u.left),c&&(a.size.height=a.size.width/a.aspectRatio,p=!1),a.position.left=r.helper?h.left:0),l.top<(a._helper?h.top:0)&&(a.size.height=a.size.height+(a._helper?a.position.top-h.top:a.position.top),c&&(a.size.width=a.size.height*a.aspectRatio,p=!1),a.position.top=a._helper?h.top:0),n=a.containerElement.get(0)===a.element.parent().get(0),o=/relative|absolute/.test(a.containerElement.css("position")),n&&o?(a.offset.left=a.parentData.left+a.position.left,a.offset.top=a.parentData.top+a.position.top):(a.offset.left=a.element.offset().left,a.offset.top=a.element.offset().top),i=Math.abs(a.sizeDiff.width+(a._helper?a.offset.left-u.left:a.offset.left-h.left)),s=Math.abs(a.sizeDiff.height+(a._helper?a.offset.top-u.top:a.offset.top-h.top)),i+a.size.width>=a.parentData.width&&(a.size.width=a.parentData.width-i,c&&(a.size.height=a.size.width/a.aspectRatio,p=!1)),s+a.size.height>=a.parentData.height&&(a.size.height=a.parentData.height-s,c&&(a.size.width=a.size.height*a.aspectRatio,p=!1)),p||(a.position.left=a.prevPosition.left,a.position.top=a.prevPosition.top,a.size.width=a.prevSize.width,a.size.height=a.prevSize.height)},stop:function(){var e=t(this).resizable("instance"),i=e.options,s=e.containerOffset,n=e.containerPosition,o=e.containerElement,a=t(e.helper),r=a.offset(),h=a.outerWidth()-e.sizeDiff.width,l=a.outerHeight()-e.sizeDiff.height;e._helper&&!i.animate&&/relative/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l}),e._helper&&!i.animate&&/static/.test(o.css("position"))&&t(this).css({left:r.left-n.left-s.left,width:h,height:l})}}),t.ui.plugin.add("resizable","alsoResize",{start:function(){var e=t(this).resizable("instance"),i=e.options;t(i.alsoResize).each(function(){var e=t(this);e.data("ui-resizable-alsoresize",{width:parseFloat(e.width()),height:parseFloat(e.height()),left:parseFloat(e.css("left")),top:parseFloat(e.css("top"))})})},resize:function(e,i){var s=t(this).resizable("instance"),n=s.options,o=s.originalSize,a=s.originalPosition,r={height:s.size.height-o.height||0,width:s.size.width-o.width||0,top:s.position.top-a.top||0,left:s.position.left-a.left||0};t(n.alsoResize).each(function(){var e=t(this),s=t(this).data("ui-resizable-alsoresize"),n={},o=e.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];t.each(o,function(t,e){var i=(s[e]||0)+(r[e]||0);i&&i>=0&&(n[e]=i||null)}),e.css(n)})},stop:function(){t(this).removeData("ui-resizable-alsoresize")}}),t.ui.plugin.add("resizable","ghost",{start:function(){var e=t(this).resizable("instance"),i=e.size;e.ghost=e.originalElement.clone(),e.ghost.css({opacity:.25,display:"block",position:"relative",height:i.height,width:i.width,margin:0,left:0,top:0}),e._addClass(e.ghost,"ui-resizable-ghost"),t.uiBackCompat!==!1&&"string"==typeof e.options.ghost&&e.ghost.addClass(this.options.ghost),e.ghost.appendTo(e.helper)},resize:function(){var e=t(this).resizable("instance");e.ghost&&e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})},stop:function(){var e=t(this).resizable("instance");e.ghost&&e.helper&&e.helper.get(0).removeChild(e.ghost.get(0))}}),t.ui.plugin.add("resizable","grid",{resize:function(){var e,i=t(this).resizable("instance"),s=i.options,n=i.size,o=i.originalSize,a=i.originalPosition,r=i.axis,h="number"==typeof s.grid?[s.grid,s.grid]:s.grid,l=h[0]||1,c=h[1]||1,u=Math.round((n.width-o.width)/l)*l,d=Math.round((n.height-o.height)/c)*c,p=o.width+u,f=o.height+d,g=s.maxWidth&&p>s.maxWidth,m=s.maxHeight&&f>s.maxHeight,_=s.minWidth&&s.minWidth>p,v=s.minHeight&&s.minHeight>f;s.grid=h,_&&(p+=l),v&&(f+=c),g&&(p-=l),m&&(f-=c),/^(se|s|e)$/.test(r)?(i.size.width=p,i.size.height=f):/^(ne)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.top=a.top-d):/^(sw)$/.test(r)?(i.size.width=p,i.size.height=f,i.position.left=a.left-u):((0>=f-c||0>=p-l)&&(e=i._getPaddingPlusBorderDimensions(this)),f-c>0?(i.size.height=f,i.position.top=a.top-d):(f=c-e.height,i.size.height=f,i.position.top=a.top+o.height-f),p-l>0?(i.size.width=p,i.position.left=a.left-u):(p=l-e.width,i.size.width=p,i.position.left=a.left+o.width-p))}}),t.ui.resizable,t.widget("ui.dialog",{version:"1.12.1",options:{appendTo:"body",autoOpen:!0,buttons:[],classes:{"ui-dialog":"ui-corner-all","ui-dialog-titlebar":"ui-corner-all"},closeOnEscape:!0,closeText:"Close",draggable:!0,hide:null,height:"auto",maxHeight:null,maxWidth:null,minHeight:150,minWidth:150,modal:!1,position:{my:"center",at:"center",of:window,collision:"fit",using:function(e){var i=t(this).css(e).offset().top;0>i&&t(this).css("top",e.top-i)}},resizable:!0,show:null,title:null,width:300,beforeClose:null,close:null,drag:null,dragStart:null,dragStop:null,focus:null,open:null,resize:null,resizeStart:null,resizeStop:null},sizeRelatedOptions:{buttons:!0,height:!0,maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0,width:!0},resizableRelatedOptions:{maxHeight:!0,maxWidth:!0,minHeight:!0,minWidth:!0},_create:function(){this.originalCss={display:this.element[0].style.display,width:this.element[0].style.width,minHeight:this.element[0].style.minHeight,maxHeight:this.element[0].style.maxHeight,height:this.element[0].style.height},this.originalPosition={parent:this.element.parent(),index:this.element.parent().children().index(this.element)},this.originalTitle=this.element.attr("title"),null==this.options.title&&null!=this.originalTitle&&(this.options.title=this.originalTitle),this.options.disabled&&(this.options.disabled=!1),this._createWrapper(),this.element.show().removeAttr("title").appendTo(this.uiDialog),this._addClass("ui-dialog-content","ui-widget-content"),this._createTitlebar(),this._createButtonPane(),this.options.draggable&&t.fn.draggable&&this._makeDraggable(),this.options.resizable&&t.fn.resizable&&this._makeResizable(),this._isOpen=!1,this._trackFocus()},_init:function(){this.options.autoOpen&&this.open()},_appendTo:function(){var e=this.options.appendTo;return e&&(e.jquery||e.nodeType)?t(e):this.document.find(e||"body").eq(0)},_destroy:function(){var t,e=this.originalPosition;this._untrackInstance(),this._destroyOverlay(),this.element.removeUniqueId().css(this.originalCss).detach(),this.uiDialog.remove(),this.originalTitle&&this.element.attr("title",this.originalTitle),t=e.parent.children().eq(e.index),t.length&&t[0]!==this.element[0]?t.before(this.element):e.parent.append(this.element)},widget:function(){return this.uiDialog
42025},disable:t.noop,enable:t.noop,close:function(e){var i=this;this._isOpen&&this._trigger("beforeClose",e)!==!1&&(this._isOpen=!1,this._focusedElement=null,this._destroyOverlay(),this._untrackInstance(),this.opener.filter(":focusable").trigger("focus").length||t.ui.safeBlur(t.ui.safeActiveElement(this.document[0])),this._hide(this.uiDialog,this.options.hide,function(){i._trigger("close",e)}))},isOpen:function(){return this._isOpen},moveToTop:function(){this._moveToTop()},_moveToTop:function(e,i){var s=!1,n=this.uiDialog.siblings(".ui-front:visible").map(function(){return+t(this).css("z-index")}).get(),o=Math.max.apply(null,n);return o>=+this.uiDialog.css("z-index")&&(this.uiDialog.css("z-index",o+1),s=!0),s&&!i&&this._trigger("focus",e),s},open:function(){var e=this;return this._isOpen?(this._moveToTop()&&this._focusTabbable(),void 0):(this._isOpen=!0,this.opener=t(t.ui.safeActiveElement(this.document[0])),this._size(),this._position(),this._createOverlay(),this._moveToTop(null,!0),this.overlay&&this.overlay.css("z-index",this.uiDialog.css("z-index")-1),this._show(this.uiDialog,this.options.show,function(){e._focusTabbable(),e._trigger("focus")}),this._makeFocusTarget(),this._trigger("open"),void 0)},_focusTabbable:function(){var t=this._focusedElement;t||(t=this.element.find("[autofocus]")),t.length||(t=this.element.find(":tabbable")),t.length||(t=this.uiDialogButtonPane.find(":tabbable")),t.length||(t=this.uiDialogTitlebarClose.filter(":tabbable")),t.length||(t=this.uiDialog),t.eq(0).trigger("focus")},_keepFocus:function(e){function i(){var e=t.ui.safeActiveElement(this.document[0]),i=this.uiDialog[0]===e||t.contains(this.uiDialog[0],e);i||this._focusTabbable()}e.preventDefault(),i.call(this),this._delay(i)},_createWrapper:function(){this.uiDialog=t("<div>").hide().attr({tabIndex:-1,role:"dialog"}).appendTo(this._appendTo()),this._addClass(this.uiDialog,"ui-dialog","ui-widget ui-widget-content ui-front"),this._on(this.uiDialog,{keydown:function(e){if(this.options.closeOnEscape&&!e.isDefaultPrevented()&&e.keyCode&&e.keyCode===t.ui.keyCode.ESCAPE)return e.preventDefault(),this.close(e),void 0;if(e.keyCode===t.ui.keyCode.TAB&&!e.isDefaultPrevented()){var i=this.uiDialog.find(":tabbable"),s=i.filter(":first"),n=i.filter(":last");e.target!==n[0]&&e.target!==this.uiDialog[0]||e.shiftKey?e.target!==s[0]&&e.target!==this.uiDialog[0]||!e.shiftKey||(this._delay(function(){n.trigger("focus")}),e.preventDefault()):(this._delay(function(){s.trigger("focus")}),e.preventDefault())}},mousedown:function(t){this._moveToTop(t)&&this._focusTabbable()}}),this.element.find("[aria-describedby]").length||this.uiDialog.attr({"aria-describedby":this.element.uniqueId().attr("id")})},_createTitlebar:function(){var e;this.uiDialogTitlebar=t("<div>"),this._addClass(this.uiDialogTitlebar,"ui-dialog-titlebar","ui-widget-header ui-helper-clearfix"),this._on(this.uiDialogTitlebar,{mousedown:function(e){t(e.target).closest(".ui-dialog-titlebar-close")||this.uiDialog.trigger("focus")}}),this.uiDialogTitlebarClose=t("<button type='button'></button>").button({label:t("<a>").text(this.options.closeText).html(),icon:"ui-icon-closethick",showLabel:!1}).appendTo(this.uiDialogTitlebar),this._addClass(this.uiDialogTitlebarClose,"ui-dialog-titlebar-close"),this._on(this.uiDialogTitlebarClose,{click:function(t){t.preventDefault(),this.close(t)}}),e=t("<span>").uniqueId().prependTo(this.uiDialogTitlebar),this._addClass(e,"ui-dialog-title"),this._title(e),this.uiDialogTitlebar.prependTo(this.uiDialog),this.uiDialog.attr({"aria-labelledby":e.attr("id")})},_title:function(t){this.options.title?t.text(this.options.title):t.html("&#160;")},_createButtonPane:function(){this.uiDialogButtonPane=t("<div>"),this._addClass(this.uiDialogButtonPane,"ui-dialog-buttonpane","ui-widget-content ui-helper-clearfix"),this.uiButtonSet=t("<div>").appendTo(this.uiDialogButtonPane),this._addClass(this.uiButtonSet,"ui-dialog-buttonset"),this._createButtons()},_createButtons:function(){var e=this,i=this.options.buttons;return this.uiDialogButtonPane.remove(),this.uiButtonSet.empty(),t.isEmptyObject(i)||t.isArray(i)&&!i.length?(this._removeClass(this.uiDialog,"ui-dialog-buttons"),void 0):(t.each(i,function(i,s){var n,o;s=t.isFunction(s)?{click:s,text:i}:s,s=t.extend({type:"button"},s),n=s.click,o={icon:s.icon,iconPosition:s.iconPosition,showLabel:s.showLabel,icons:s.icons,text:s.text},delete s.click,delete s.icon,delete s.iconPosition,delete s.showLabel,delete s.icons,"boolean"==typeof s.text&&delete s.text,t("<button></button>",s).button(o).appendTo(e.uiButtonSet).on("click",function(){n.apply(e.element[0],arguments)})}),this._addClass(this.uiDialog,"ui-dialog-buttons"),this.uiDialogButtonPane.appendTo(this.uiDialog),void 0)},_makeDraggable:function(){function e(t){return{position:t.position,offset:t.offset}}var i=this,s=this.options;this.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",handle:".ui-dialog-titlebar",containment:"document",start:function(s,n){i._addClass(t(this),"ui-dialog-dragging"),i._blockFrames(),i._trigger("dragStart",s,e(n))},drag:function(t,s){i._trigger("drag",t,e(s))},stop:function(n,o){var a=o.offset.left-i.document.scrollLeft(),r=o.offset.top-i.document.scrollTop();s.position={my:"left top",at:"left"+(a>=0?"+":"")+a+" "+"top"+(r>=0?"+":"")+r,of:i.window},i._removeClass(t(this),"ui-dialog-dragging"),i._unblockFrames(),i._trigger("dragStop",n,e(o))}})},_makeResizable:function(){function e(t){return{originalPosition:t.originalPosition,originalSize:t.originalSize,position:t.position,size:t.size}}var i=this,s=this.options,n=s.resizable,o=this.uiDialog.css("position"),a="string"==typeof n?n:"n,e,s,w,se,sw,ne,nw";this.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:this.element,maxWidth:s.maxWidth,maxHeight:s.maxHeight,minWidth:s.minWidth,minHeight:this._minHeight(),handles:a,start:function(s,n){i._addClass(t(this),"ui-dialog-resizing"),i._blockFrames(),i._trigger("resizeStart",s,e(n))},resize:function(t,s){i._trigger("resize",t,e(s))},stop:function(n,o){var a=i.uiDialog.offset(),r=a.left-i.document.scrollLeft(),h=a.top-i.document.scrollTop();s.height=i.uiDialog.height(),s.width=i.uiDialog.width(),s.position={my:"left top",at:"left"+(r>=0?"+":"")+r+" "+"top"+(h>=0?"+":"")+h,of:i.window},i._removeClass(t(this),"ui-dialog-resizing"),i._unblockFrames(),i._trigger("resizeStop",n,e(o))}}).css("position",o)},_trackFocus:function(){this._on(this.widget(),{focusin:function(e){this._makeFocusTarget(),this._focusedElement=t(e.target)}})},_makeFocusTarget:function(){this._untrackInstance(),this._trackingInstances().unshift(this)},_untrackInstance:function(){var e=this._trackingInstances(),i=t.inArray(this,e);-1!==i&&e.splice(i,1)},_trackingInstances:function(){var t=this.document.data("ui-dialog-instances");return t||(t=[],this.document.data("ui-dialog-instances",t)),t},_minHeight:function(){var t=this.options;return"auto"===t.height?t.minHeight:Math.min(t.minHeight,t.height)},_position:function(){var t=this.uiDialog.is(":visible");t||this.uiDialog.show(),this.uiDialog.position(this.options.position),t||this.uiDialog.hide()},_setOptions:function(e){var i=this,s=!1,n={};t.each(e,function(t,e){i._setOption(t,e),t in i.sizeRelatedOptions&&(s=!0),t in i.resizableRelatedOptions&&(n[t]=e)}),s&&(this._size(),this._position()),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option",n)},_setOption:function(e,i){var s,n,o=this.uiDialog;"disabled"!==e&&(this._super(e,i),"appendTo"===e&&this.uiDialog.appendTo(this._appendTo()),"buttons"===e&&this._createButtons(),"closeText"===e&&this.uiDialogTitlebarClose.button({label:t("<a>").text(""+this.options.closeText).html()}),"draggable"===e&&(s=o.is(":data(ui-draggable)"),s&&!i&&o.draggable("destroy"),!s&&i&&this._makeDraggable()),"position"===e&&this._position(),"resizable"===e&&(n=o.is(":data(ui-resizable)"),n&&!i&&o.resizable("destroy"),n&&"string"==typeof i&&o.resizable("option","handles",i),n||i===!1||this._makeResizable()),"title"===e&&this._title(this.uiDialogTitlebar.find(".ui-dialog-title")))},_size:function(){var t,e,i,s=this.options;this.element.show().css({width:"auto",minHeight:0,maxHeight:"none",height:0}),s.minWidth>s.width&&(s.width=s.minWidth),t=this.uiDialog.css({height:"auto",width:s.width}).outerHeight(),e=Math.max(0,s.minHeight-t),i="number"==typeof s.maxHeight?Math.max(0,s.maxHeight-t):"none","auto"===s.height?this.element.css({minHeight:e,maxHeight:i,height:"auto"}):this.element.height(Math.max(0,s.height-t)),this.uiDialog.is(":data(ui-resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())},_blockFrames:function(){this.iframeBlocks=this.document.find("iframe").map(function(){var e=t(this);return t("<div>").css({position:"absolute",width:e.outerWidth(),height:e.outerHeight()}).appendTo(e.parent()).offset(e.offset())[0]})},_unblockFrames:function(){this.iframeBlocks&&(this.iframeBlocks.remove(),delete this.iframeBlocks)},_allowInteraction:function(e){return t(e.target).closest(".ui-dialog").length?!0:!!t(e.target).closest(".ui-datepicker").length},_createOverlay:function(){if(this.options.modal){var e=!0;this._delay(function(){e=!1}),this.document.data("ui-dialog-overlays")||this._on(this.document,{focusin:function(t){e||this._allowInteraction(t)||(t.preventDefault(),this._trackingInstances()[0]._focusTabbable())}}),this.overlay=t("<div>").appendTo(this._appendTo()),this._addClass(this.overlay,null,"ui-widget-overlay ui-front"),this._on(this.overlay,{mousedown:"_keepFocus"}),this.document.data("ui-dialog-overlays",(this.document.data("ui-dialog-overlays")||0)+1)}},_destroyOverlay:function(){if(this.options.modal&&this.overlay){var t=this.document.data("ui-dialog-overlays")-1;t?this.document.data("ui-dialog-overlays",t):(this._off(this.document,"focusin"),this.document.removeData("ui-dialog-overlays")),this.overlay.remove(),this.overlay=null}}}),t.uiBackCompat!==!1&&t.widget("ui.dialog",t.ui.dialog,{options:{dialogClass:""},_createWrapper:function(){this._super(),this.uiDialog.addClass(this.options.dialogClass)},_setOption:function(t,e){"dialogClass"===t&&this.uiDialog.removeClass(this.options.dialogClass).addClass(e),this._superApply(arguments)}}),t.ui.dialog,t.widget("ui.droppable",{version:"1.12.1",widgetEventPrefix:"drop",options:{accept:"*",addClasses:!0,greedy:!1,scope:"default",tolerance:"intersect",activate:null,deactivate:null,drop:null,out:null,over:null},_create:function(){var e,i=this.options,s=i.accept;this.isover=!1,this.isout=!0,this.accept=t.isFunction(s)?s:function(t){return t.is(s)},this.proportions=function(){return arguments.length?(e=arguments[0],void 0):e?e:e={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight}},this._addToManager(i.scope),i.addClasses&&this._addClass("ui-droppable")},_addToManager:function(e){t.ui.ddmanager.droppables[e]=t.ui.ddmanager.droppables[e]||[],t.ui.ddmanager.droppables[e].push(this)},_splice:function(t){for(var e=0;t.length>e;e++)t[e]===this&&t.splice(e,1)},_destroy:function(){var e=t.ui.ddmanager.droppables[this.options.scope];this._splice(e)},_setOption:function(e,i){if("accept"===e)this.accept=t.isFunction(i)?i:function(t){return t.is(i)};else if("scope"===e){var s=t.ui.ddmanager.droppables[this.options.scope];this._splice(s),this._addToManager(i)}this._super(e,i)},_activate:function(e){var i=t.ui.ddmanager.current;this._addActiveClass(),i&&this._trigger("activate",e,this.ui(i))},_deactivate:function(e){var i=t.ui.ddmanager.current;this._removeActiveClass(),i&&this._trigger("deactivate",e,this.ui(i))},_over:function(e){var i=t.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this._addHoverClass(),this._trigger("over",e,this.ui(i)))},_out:function(e){var i=t.ui.ddmanager.current;i&&(i.currentItem||i.element)[0]!==this.element[0]&&this.accept.call(this.element[0],i.currentItem||i.element)&&(this._removeHoverClass(),this._trigger("out",e,this.ui(i)))},_drop:function(e,i){var s=i||t.ui.ddmanager.current,n=!1;return s&&(s.currentItem||s.element)[0]!==this.element[0]?(this.element.find(":data(ui-droppable)").not(".ui-draggable-dragging").each(function(){var i=t(this).droppable("instance");return i.options.greedy&&!i.options.disabled&&i.options.scope===s.options.scope&&i.accept.call(i.element[0],s.currentItem||s.element)&&v(s,t.extend(i,{offset:i.element.offset()}),i.options.tolerance,e)?(n=!0,!1):void 0}),n?!1:this.accept.call(this.element[0],s.currentItem||s.element)?(this._removeActiveClass(),this._removeHoverClass(),this._trigger("drop",e,this.ui(s)),this.element):!1):!1},ui:function(t){return{draggable:t.currentItem||t.element,helper:t.helper,position:t.position,offset:t.positionAbs}},_addHoverClass:function(){this._addClass("ui-droppable-hover")},_removeHoverClass:function(){this._removeClass("ui-droppable-hover")},_addActiveClass:function(){this._addClass("ui-droppable-active")},_removeActiveClass:function(){this._removeClass("ui-droppable-active")}});var v=t.ui.intersect=function(){function t(t,e,i){return t>=e&&e+i>t}return function(e,i,s,n){if(!i.offset)return!1;var o=(e.positionAbs||e.position.absolute).left+e.margins.left,a=(e.positionAbs||e.position.absolute).top+e.margins.top,r=o+e.helperProportions.width,h=a+e.helperProportions.height,l=i.offset.left,c=i.offset.top,u=l+i.proportions().width,d=c+i.proportions().height;switch(s){case"fit":return o>=l&&u>=r&&a>=c&&d>=h;case"intersect":return o+e.helperProportions.width/2>l&&u>r-e.helperProportions.width/2&&a+e.helperProportions.height/2>c&&d>h-e.helperProportions.height/2;case"pointer":return t(n.pageY,c,i.proportions().height)&&t(n.pageX,l,i.proportions().width);case"touch":return(a>=c&&d>=a||h>=c&&d>=h||c>a&&h>d)&&(o>=l&&u>=o||r>=l&&u>=r||l>o&&r>u);default:return!1}}}();t.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(e,i){var s,n,o=t.ui.ddmanager.droppables[e.options.scope]||[],a=i?i.type:null,r=(e.currentItem||e.element).find(":data(ui-droppable)").addBack();t:for(s=0;o.length>s;s++)if(!(o[s].options.disabled||e&&!o[s].accept.call(o[s].element[0],e.currentItem||e.element))){for(n=0;r.length>n;n++)if(r[n]===o[s].element[0]){o[s].proportions().height=0;continue t}o[s].visible="none"!==o[s].element.css("display"),o[s].visible&&("mousedown"===a&&o[s]._activate.call(o[s],i),o[s].offset=o[s].element.offset(),o[s].proportions({width:o[s].element[0].offsetWidth,height:o[s].element[0].offsetHeight}))}},drop:function(e,i){var s=!1;return t.each((t.ui.ddmanager.droppables[e.options.scope]||[]).slice(),function(){this.options&&(!this.options.disabled&&this.visible&&v(e,this,this.options.tolerance,i)&&(s=this._drop.call(this,i)||s),!this.options.disabled&&this.visible&&this.accept.call(this.element[0],e.currentItem||e.element)&&(this.isout=!0,this.isover=!1,this._deactivate.call(this,i)))}),s},dragStart:function(e,i){e.element.parentsUntil("body").on("scroll.droppable",function(){e.options.refreshPositions||t.ui.ddmanager.prepareOffsets(e,i)})},drag:function(e,i){e.options.refreshPositions&&t.ui.ddmanager.prepareOffsets(e,i),t.each(t.ui.ddmanager.droppables[e.options.scope]||[],function(){if(!this.options.disabled&&!this.greedyChild&&this.visible){var s,n,o,a=v(e,this,this.options.tolerance,i),r=!a&&this.isover?"isout":a&&!this.isover?"isover":null;r&&(this.options.greedy&&(n=this.options.scope,o=this.element.parents(":data(ui-droppable)").filter(function(){return t(this).droppable("instance").options.scope===n}),o.length&&(s=t(o[0]).droppable("instance"),s.greedyChild="isover"===r)),s&&"isover"===r&&(s.isover=!1,s.isout=!0,s._out.call(s,i)),this[r]=!0,this["isout"===r?"isover":"isout"]=!1,this["isover"===r?"_over":"_out"].call(this,i),s&&"isout"===r&&(s.isout=!1,s.isover=!0,s._over.call(s,i)))}})},dragStop:function(e,i){e.element.parentsUntil("body").off("scroll.droppable"),e.options.refreshPositions||t.ui.ddmanager.prepareOffsets(e,i)}},t.uiBackCompat!==!1&&t.widget("ui.droppable",t.ui.droppable,{options:{hoverClass:!1,activeClass:!1},_addActiveClass:function(){this._super(),this.options.activeClass&&this.element.addClass(this.options.activeClass)},_removeActiveClass:function(){this._super(),this.options.activeClass&&this.element.removeClass(this.options.activeClass)},_addHoverClass:function(){this._super(),this.options.hoverClass&&this.element.addClass(this.options.hoverClass)},_removeHoverClass:function(){this._super(),this.options.hoverClass&&this.element.removeClass(this.options.hoverClass)}}),t.ui.droppable,t.widget("ui.progressbar",{version:"1.12.1",options:{classes:{"ui-progressbar":"ui-corner-all","ui-progressbar-value":"ui-corner-left","ui-progressbar-complete":"ui-corner-right"},max:100,value:0,change:null,complete:null},min:0,_create:function(){this.oldValue=this.options.value=this._constrainedValue(),this.element.attr({role:"progressbar","aria-valuemin":this.min}),this._addClass("ui-progressbar","ui-widget ui-widget-content"),this.valueDiv=t("<div>").appendTo(this.element),this._addClass(this.valueDiv,"ui-progressbar-value","ui-widget-header"),this._refreshValue()},_destroy:function(){this.element.removeAttr("role aria-valuemin aria-valuemax aria-valuenow"),this.valueDiv.remove()},value:function(t){return void 0===t?this.options.value:(this.options.value=this._constrainedValue(t),this._refreshValue(),void 0)},_constrainedValue:function(t){return void 0===t&&(t=this.options.value),this.indeterminate=t===!1,"number"!=typeof t&&(t=0),this.indeterminate?!1:Math.min(this.options.max,Math.max(this.min,t))},_setOptions:function(t){var e=t.value;delete t.value,this._super(t),this.options.value=this._constrainedValue(e),this._refreshValue()},_setOption:function(t,e){"max"===t&&(e=Math.max(this.min,e)),this._super(t,e)},_setOptionDisabled:function(t){this._super(t),this.element.attr("aria-disabled",t),this._toggleClass(null,"ui-state-disabled",!!t)},_percentage:function(){return this.indeterminate?100:100*(this.options.value-this.min)/(this.options.max-this.min)},_refreshValue:function(){var e=this.options.value,i=this._percentage();this.valueDiv.toggle(this.indeterminate||e>this.min).width(i.toFixed(0)+"%"),this._toggleClass(this.valueDiv,"ui-progressbar-complete",null,e===this.options.max)._toggleClass("ui-progressbar-indeterminate",null,this.indeterminate),this.indeterminate?(this.element.removeAttr("aria-valuenow"),this.overlayDiv||(this.overlayDiv=t("<div>").appendTo(this.valueDiv),this._addClass(this.overlayDiv,"ui-progressbar-overlay"))):(this.element.attr({"aria-valuemax":this.options.max,"aria-valuenow":e}),this.overlayDiv&&(this.overlayDiv.remove(),this.overlayDiv=null)),this.oldValue!==e&&(this.oldValue=e,this._trigger("change")),e===this.options.max&&this._trigger("complete")}}),t.widget("ui.selectable",t.ui.mouse,{version:"1.12.1",options:{appendTo:"body",autoRefresh:!0,distance:0,filter:"*",tolerance:"touch",selected:null,selecting:null,start:null,stop:null,unselected:null,unselecting:null},_create:function(){var e=this;this._addClass("ui-selectable"),this.dragged=!1,this.refresh=function(){e.elementPos=t(e.element[0]).offset(),e.selectees=t(e.options.filter,e.element[0]),e._addClass(e.selectees,"ui-selectee"),e.selectees.each(function(){var i=t(this),s=i.offset(),n={left:s.left-e.elementPos.left,top:s.top-e.elementPos.top};t.data(this,"selectable-item",{element:this,$element:i,left:n.left,top:n.top,right:n.left+i.outerWidth(),bottom:n.top+i.outerHeight(),startselected:!1,selected:i.hasClass("ui-selected"),selecting:i.hasClass("ui-selecting"),unselecting:i.hasClass("ui-unselecting")})})},this.refresh(),this._mouseInit(),this.helper=t("<div>"),this._addClass(this.helper,"ui-selectable-helper")},_destroy:function(){this.selectees.removeData("selectable-item"),this._mouseDestroy()},_mouseStart:function(e){var i=this,s=this.options;this.opos=[e.pageX,e.pageY],this.elementPos=t(this.element[0]).offset(),this.options.disabled||(this.selectees=t(s.filter,this.element[0]),this._trigger("start",e),t(s.appendTo).append(this.helper),this.helper.css({left:e.pageX,top:e.pageY,width:0,height:0}),s.autoRefresh&&this.refresh(),this.selectees.filter(".ui-selected").each(function(){var s=t.data(this,"selectable-item");s.startselected=!0,e.metaKey||e.ctrlKey||(i._removeClass(s.$element,"ui-selected"),s.selected=!1,i._addClass(s.$element,"ui-unselecting"),s.unselecting=!0,i._trigger("unselecting",e,{unselecting:s.element}))}),t(e.target).parents().addBack().each(function(){var s,n=t.data(this,"selectable-item");return n?(s=!e.metaKey&&!e.ctrlKey||!n.$element.hasClass("ui-selected"),i._removeClass(n.$element,s?"ui-unselecting":"ui-selected")._addClass(n.$element,s?"ui-selecting":"ui-unselecting"),n.unselecting=!s,n.selecting=s,n.selected=s,s?i._trigger("selecting",e,{selecting:n.element}):i._trigger("unselecting",e,{unselecting:n.element}),!1):void 0}))},_mouseDrag:function(e){if(this.dragged=!0,!this.options.disabled){var i,s=this,n=this.options,o=this.opos[0],a=this.opos[1],r=e.pageX,h=e.pageY;return o>r&&(i=r,r=o,o=i),a>h&&(i=h,h=a,a=i),this.helper.css({left:o,top:a,width:r-o,height:h-a}),this.selectees.each(function(){var i=t.data(this,"selectable-item"),l=!1,c={};i&&i.element!==s.element[0]&&(c.left=i.left+s.elementPos.left,c.right=i.right+s.elementPos.left,c.top=i.top+s.elementPos.top,c.bottom=i.bottom+s.elementPos.top,"touch"===n.tolerance?l=!(c.left>r||o>c.right||c.top>h||a>c.bottom):"fit"===n.tolerance&&(l=c.left>o&&r>c.right&&c.top>a&&h>c.bottom),l?(i.selected&&(s._removeClass(i.$element,"ui-selected"),i.selected=!1),i.unselecting&&(s._removeClass(i.$element,"ui-unselecting"),i.unselecting=!1),i.selecting||(s._addClass(i.$element,"ui-selecting"),i.selecting=!0,s._trigger("selecting",e,{selecting:i.element}))):(i.selecting&&((e.metaKey||e.ctrlKey)&&i.startselected?(s._removeClass(i.$element,"ui-selecting"),i.selecting=!1,s._addClass(i.$element,"ui-selected"),i.selected=!0):(s._removeClass(i.$element,"ui-selecting"),i.selecting=!1,i.startselected&&(s._addClass(i.$element,"ui-unselecting"),i.unselecting=!0),s._trigger("unselecting",e,{unselecting:i.element}))),i.selected&&(e.metaKey||e.ctrlKey||i.startselected||(s._removeClass(i.$element,"ui-selected"),i.selected=!1,s._addClass(i.$element,"ui-unselecting"),i.unselecting=!0,s._trigger("unselecting",e,{unselecting:i.element})))))}),!1}},_mouseStop:function(e){var i=this;return this.dragged=!1,t(".ui-unselecting",this.element[0]).each(function(){var s=t.data(this,"selectable-item");i._removeClass(s.$element,"ui-unselecting"),s.unselecting=!1,s.startselected=!1,i._trigger("unselected",e,{unselected:s.element})}),t(".ui-selecting",this.element[0]).each(function(){var s=t.data(this,"selectable-item");i._removeClass(s.$element,"ui-selecting")._addClass(s.$element,"ui-selected"),s.selecting=!1,s.selected=!0,s.startselected=!0,i._trigger("selected",e,{selected:s.element})}),this._trigger("stop",e),this.helper.remove(),!1}}),t.widget("ui.selectmenu",[t.ui.formResetMixin,{version:"1.12.1",defaultElement:"<select>",options:{appendTo:null,classes:{"ui-selectmenu-button-open":"ui-corner-top","ui-selectmenu-button-closed":"ui-corner-all"},disabled:null,icons:{button:"ui-icon-triangle-1-s"},position:{my:"left top",at:"left bottom",collision:"none"},width:!1,change:null,close:null,focus:null,open:null,select:null},_create:function(){var e=this.element.uniqueId().attr("id");this.ids={element:e,button:e+"-button",menu:e+"-menu"},this._drawButton(),this._drawMenu(),this._bindFormResetHandler(),this._rendered=!1,this.menuItems=t()},_drawButton:function(){var e,i=this,s=this._parseOption(this.element.find("option:selected"),this.element[0].selectedIndex);this.labels=this.element.labels().attr("for",this.ids.button),this._on(this.labels,{click:function(t){this.button.focus(),t.preventDefault()}}),this.element.hide(),this.button=t("<span>",{tabindex:this.options.disabled?-1:0,id:this.ids.button,role:"combobox","aria-expanded":"false","aria-autocomplete":"list","aria-owns":this.ids.menu,"aria-haspopup":"true",title:this.element.attr("title")}).insertAfter(this.element),this._addClass(this.button,"ui-selectmenu-button ui-selectmenu-button-closed","ui-button ui-widget"),e=t("<span>").appendTo(this.button),this._addClass(e,"ui-selectmenu-icon","ui-icon "+this.options.icons.button),this.buttonItem=this._renderButtonItem(s).appendTo(this.button),this.options.width!==!1&&this._resizeButton(),this._on(this.button,this._buttonEvents),this.button.one("focusin",function(){i._rendered||i._refreshMenu()})},_drawMenu:function(){var e=this;this.menu=t("<ul>",{"aria-hidden":"true","aria-labelledby":this.ids.button,id:this.ids.menu}),this.menuWrap=t("<div>").append(this.menu),this._addClass(this.menuWrap,"ui-selectmenu-menu","ui-front"),this.menuWrap.appendTo(this._appendTo()),this.menuInstance=this.menu.menu({classes:{"ui-menu":"ui-corner-bottom"},role:"listbox",select:function(t,i){t.preventDefault(),e._setSelection(),e._select(i.item.data("ui-selectmenu-item"),t)},focus:function(t,i){var s=i.item.data("ui-selectmenu-item");null!=e.focusIndex&&s.index!==e.focusIndex&&(e._trigger("focus",t,{item:s}),e.isOpen||e._select(s,t)),e.focusIndex=s.index,e.button.attr("aria-activedescendant",e.menuItems.eq(s.index).attr("id"))}}).menu("instance"),this.menuInstance._off(this.menu,"mouseleave"),this.menuInstance._closeOnDocumentClick=function(){return!1},this.menuInstance._isDivider=function(){return!1}},refresh:function(){this._refreshMenu(),this.buttonItem.replaceWith(this.buttonItem=this._renderButtonItem(this._getSelectedItem().data("ui-selectmenu-item")||{})),null===this.options.width&&this._resizeButton()},_refreshMenu:function(){var t,e=this.element.find("option");this.menu.empty(),this._parseOptions(e),this._renderMenu(this.menu,this.items),this.menuInstance.refresh(),this.menuItems=this.menu.find("li").not(".ui-selectmenu-optgroup").find(".ui-menu-item-wrapper"),this._rendered=!0,e.length&&(t=this._getSelectedItem(),this.menuInstance.focus(null,t),this._setAria(t.data("ui-selectmenu-item")),this._setOption("disabled",this.element.prop("disabled")))},open:function(t){this.options.disabled||(this._rendered?(this._removeClass(this.menu.find(".ui-state-active"),null,"ui-state-active"),this.menuInstance.focus(null,this._getSelectedItem())):this._refreshMenu(),this.menuItems.length&&(this.isOpen=!0,this._toggleAttr(),this._resizeMenu(),this._position(),this._on(this.document,this._documentClick),this._trigger("open",t)))},_position:function(){this.menuWrap.position(t.extend({of:this.button},this.options.position))},close:function(t){this.isOpen&&(this.isOpen=!1,this._toggleAttr(),this.range=null,this._off(this.document),this._trigger("close",t))},widget:function(){return this.button},menuWidget:function(){return this.menu},_renderButtonItem:function(e){var i=t("<span>");return this._setText(i,e.label),this._addClass(i,"ui-selectmenu-text"),i},_renderMenu:function(e,i){var s=this,n="";t.each(i,function(i,o){var a;o.optgroup!==n&&(a=t("<li>",{text:o.optgroup}),s._addClass(a,"ui-selectmenu-optgroup","ui-menu-divider"+(o.element.parent("optgroup").prop("disabled")?" ui-state-disabled":"")),a.appendTo(e),n=o.optgroup),s._renderItemData(e,o)})},_renderItemData:function(t,e){return this._renderItem(t,e).data("ui-selectmenu-item",e)},_renderItem:function(e,i){var s=t("<li>"),n=t("<div>",{title:i.element.attr("title")});return i.disabled&&this._addClass(s,null,"ui-state-disabled"),this._setText(n,i.label),s.append(n).appendTo(e)},_setText:function(t,e){e?t.text(e):t.html("&#160;")},_move:function(t,e){var i,s,n=".ui-menu-item";this.isOpen?i=this.menuItems.eq(this.focusIndex).parent("li"):(i=this.menuItems.eq(this.element[0].selectedIndex).parent("li"),n+=":not(.ui-state-disabled)"),s="first"===t||"last"===t?i["first"===t?"prevAll":"nextAll"](n).eq(-1):i[t+"All"](n).eq(0),s.length&&this.menuInstance.focus(e,s)},_getSelectedItem:function(){return this.menuItems.eq(this.element[0].selectedIndex).parent("li")},_toggle:function(t){this[this.isOpen?"close":"open"](t)},_setSelection:function(){var t;this.range&&(window.getSelection?(t=window.getSelection(),t.removeAllRanges(),t.addRange(this.range)):this.range.select(),this.button.focus())},_documentClick:{mousedown:function(e){this.isOpen&&(t(e.target).closest(".ui-selectmenu-menu, #"+t.ui.escapeSelector(this.ids.button)).length||this.close(e))}},_buttonEvents:{mousedown:function(){var t;window.getSelection?(t=window.getSelection(),t.rangeCount&&(this.range=t.getRangeAt(0))):this.range=document.selection.createRange()},click:function(t){this._setSelection(),this._toggle(t)},keydown:function(e){var i=!0;switch(e.keyCode){case t.ui.keyCode.TAB:case t.ui.keyCode.ESCAPE:this.close(e),i=!1;break;case t.ui.keyCode.ENTER:this.isOpen&&this._selectFocusedItem(e);break;case t.ui.keyCode.UP:e.altKey?this._toggle(e):this._move("prev",e);break;case t.ui.keyCode.DOWN:e.altKey?this._toggle(e):this._move("next",e);break;case t.ui.keyCode.SPACE:this.isOpen?this._selectFocusedItem(e):this._toggle(e);break;case t.ui.keyCode.LEFT:this._move("prev",e);break;case t.ui.keyCode.RIGHT:this._move("next",e);break;case t.ui.keyCode.HOME:case t.ui.keyCode.PAGE_UP:this._move("first",e);break;case t.ui.keyCode.END:case t.ui.keyCode.PAGE_DOWN:this._move("last",e);break;default:this.menu.trigger(e),i=!1}i&&e.preventDefault()}},_selectFocusedItem:function(t){var e=this.menuItems.eq(this.focusIndex).parent("li");e.hasClass("ui-state-disabled")||this._select(e.data("ui-selectmenu-item"),t)},_select:function(t,e){var i=this.element[0].selectedIndex;this.element[0].selectedIndex=t.index,this.buttonItem.replaceWith(this.buttonItem=this._renderButtonItem(t)),this._setAria(t),this._trigger("select",e,{item:t}),t.index!==i&&this._trigger("change",e,{item:t}),this.close(e)},_setAria:function(t){var e=this.menuItems.eq(t.index).attr("id");this.button.attr({"aria-labelledby":e,"aria-activedescendant":e}),this.menu.attr("aria-activedescendant",e)},_setOption:function(t,e){if("icons"===t){var i=this.button.find("span.ui-icon");this._removeClass(i,null,this.options.icons.button)._addClass(i,null,e.button)}this._super(t,e),"appendTo"===t&&this.menuWrap.appendTo(this._appendTo()),"width"===t&&this._resizeButton()},_setOptionDisabled:function(t){this._super(t),this.menuInstance.option("disabled",t),this.button.attr("aria-disabled",t),this._toggleClass(this.button,null,"ui-state-disabled",t),this.element.prop("disabled",t),t?(this.button.attr("tabindex",-1),this.close()):this.button.attr("tabindex",0)},_appendTo:function(){var e=this.options.appendTo;return e&&(e=e.jquery||e.nodeType?t(e):this.document.find(e).eq(0)),e&&e[0]||(e=this.element.closest(".ui-front, dialog")),e.length||(e=this.document[0].body),e},_toggleAttr:function(){this.button.attr("aria-expanded",this.isOpen),this._removeClass(this.button,"ui-selectmenu-button-"+(this.isOpen?"closed":"open"))._addClass(this.button,"ui-selectmenu-button-"+(this.isOpen?"open":"closed"))._toggleClass(this.menuWrap,"ui-selectmenu-open",null,this.isOpen),this.menu.attr("aria-hidden",!this.isOpen)},_resizeButton:function(){var t=this.options.width;return t===!1?(this.button.css("width",""),void 0):(null===t&&(t=this.element.show().outerWidth(),this.element.hide()),this.button.outerWidth(t),void 0)},_resizeMenu:function(){this.menu.outerWidth(Math.max(this.button.outerWidth(),this.menu.width("").outerWidth()+1))},_getCreateOptions:function(){var t=this._super();return t.disabled=this.element.prop("disabled"),t},_parseOptions:function(e){var i=this,s=[];e.each(function(e,n){s.push(i._parseOption(t(n),e))}),this.items=s},_parseOption:function(t,e){var i=t.parent("optgroup");return{element:t,index:e,value:t.val(),label:t.text(),optgroup:i.attr("label")||"",disabled:i.prop("disabled")||t.prop("disabled")}},_destroy:function(){this._unbindFormResetHandler(),this.menuWrap.remove(),this.button.remove(),this.element.show(),this.element.removeUniqueId(),this.labels.attr("for",this.ids.element)}}]),t.widget("ui.slider",t.ui.mouse,{version:"1.12.1",widgetEventPrefix:"slide",options:{animate:!1,classes:{"ui-slider":"ui-corner-all","ui-slider-handle":"ui-corner-all","ui-slider-range":"ui-corner-all ui-widget-header"},distance:0,max:100,min:0,orientation:"horizontal",range:!1,step:1,value:0,values:null,change:null,slide:null,start:null,stop:null},numPages:5,_create:function(){this._keySliding=!1,this._mouseSliding=!1,this._animateOff=!0,this._handleIndex=null,this._detectOrientation(),this._mouseInit(),this._calculateNewMax(),this._addClass("ui-slider ui-slider-"+this.orientation,"ui-widget ui-widget-content"),this._refresh(),this._animateOff=!1
42026},_refresh:function(){this._createRange(),this._createHandles(),this._setupEvents(),this._refreshValue()},_createHandles:function(){var e,i,s=this.options,n=this.element.find(".ui-slider-handle"),o="<span tabindex='0'></span>",a=[];for(i=s.values&&s.values.length||1,n.length>i&&(n.slice(i).remove(),n=n.slice(0,i)),e=n.length;i>e;e++)a.push(o);this.handles=n.add(t(a.join("")).appendTo(this.element)),this._addClass(this.handles,"ui-slider-handle","ui-state-default"),this.handle=this.handles.eq(0),this.handles.each(function(e){t(this).data("ui-slider-handle-index",e).attr("tabIndex",0)})},_createRange:function(){var e=this.options;e.range?(e.range===!0&&(e.values?e.values.length&&2!==e.values.length?e.values=[e.values[0],e.values[0]]:t.isArray(e.values)&&(e.values=e.values.slice(0)):e.values=[this._valueMin(),this._valueMin()]),this.range&&this.range.length?(this._removeClass(this.range,"ui-slider-range-min ui-slider-range-max"),this.range.css({left:"",bottom:""})):(this.range=t("<div>").appendTo(this.element),this._addClass(this.range,"ui-slider-range")),("min"===e.range||"max"===e.range)&&this._addClass(this.range,"ui-slider-range-"+e.range)):(this.range&&this.range.remove(),this.range=null)},_setupEvents:function(){this._off(this.handles),this._on(this.handles,this._handleEvents),this._hoverable(this.handles),this._focusable(this.handles)},_destroy:function(){this.handles.remove(),this.range&&this.range.remove(),this._mouseDestroy()},_mouseCapture:function(e){var i,s,n,o,a,r,h,l,c=this,u=this.options;return u.disabled?!1:(this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()},this.elementOffset=this.element.offset(),i={x:e.pageX,y:e.pageY},s=this._normValueFromMouse(i),n=this._valueMax()-this._valueMin()+1,this.handles.each(function(e){var i=Math.abs(s-c.values(e));(n>i||n===i&&(e===c._lastChangedValue||c.values(e)===u.min))&&(n=i,o=t(this),a=e)}),r=this._start(e,a),r===!1?!1:(this._mouseSliding=!0,this._handleIndex=a,this._addClass(o,null,"ui-state-active"),o.trigger("focus"),h=o.offset(),l=!t(e.target).parents().addBack().is(".ui-slider-handle"),this._clickOffset=l?{left:0,top:0}:{left:e.pageX-h.left-o.width()/2,top:e.pageY-h.top-o.height()/2-(parseInt(o.css("borderTopWidth"),10)||0)-(parseInt(o.css("borderBottomWidth"),10)||0)+(parseInt(o.css("marginTop"),10)||0)},this.handles.hasClass("ui-state-hover")||this._slide(e,a,s),this._animateOff=!0,!0))},_mouseStart:function(){return!0},_mouseDrag:function(t){var e={x:t.pageX,y:t.pageY},i=this._normValueFromMouse(e);return this._slide(t,this._handleIndex,i),!1},_mouseStop:function(t){return this._removeClass(this.handles,null,"ui-state-active"),this._mouseSliding=!1,this._stop(t,this._handleIndex),this._change(t,this._handleIndex),this._handleIndex=null,this._clickOffset=null,this._animateOff=!1,!1},_detectOrientation:function(){this.orientation="vertical"===this.options.orientation?"vertical":"horizontal"},_normValueFromMouse:function(t){var e,i,s,n,o;return"horizontal"===this.orientation?(e=this.elementSize.width,i=t.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)):(e=this.elementSize.height,i=t.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)),s=i/e,s>1&&(s=1),0>s&&(s=0),"vertical"===this.orientation&&(s=1-s),n=this._valueMax()-this._valueMin(),o=this._valueMin()+s*n,this._trimAlignValue(o)},_uiHash:function(t,e,i){var s={handle:this.handles[t],handleIndex:t,value:void 0!==e?e:this.value()};return this._hasMultipleValues()&&(s.value=void 0!==e?e:this.values(t),s.values=i||this.values()),s},_hasMultipleValues:function(){return this.options.values&&this.options.values.length},_start:function(t,e){return this._trigger("start",t,this._uiHash(e))},_slide:function(t,e,i){var s,n,o=this.value(),a=this.values();this._hasMultipleValues()&&(n=this.values(e?0:1),o=this.values(e),2===this.options.values.length&&this.options.range===!0&&(i=0===e?Math.min(n,i):Math.max(n,i)),a[e]=i),i!==o&&(s=this._trigger("slide",t,this._uiHash(e,i,a)),s!==!1&&(this._hasMultipleValues()?this.values(e,i):this.value(i)))},_stop:function(t,e){this._trigger("stop",t,this._uiHash(e))},_change:function(t,e){this._keySliding||this._mouseSliding||(this._lastChangedValue=e,this._trigger("change",t,this._uiHash(e)))},value:function(t){return arguments.length?(this.options.value=this._trimAlignValue(t),this._refreshValue(),this._change(null,0),void 0):this._value()},values:function(e,i){var s,n,o;if(arguments.length>1)return this.options.values[e]=this._trimAlignValue(i),this._refreshValue(),this._change(null,e),void 0;if(!arguments.length)return this._values();if(!t.isArray(arguments[0]))return this._hasMultipleValues()?this._values(e):this.value();for(s=this.options.values,n=arguments[0],o=0;s.length>o;o+=1)s[o]=this._trimAlignValue(n[o]),this._change(null,o);this._refreshValue()},_setOption:function(e,i){var s,n=0;switch("range"===e&&this.options.range===!0&&("min"===i?(this.options.value=this._values(0),this.options.values=null):"max"===i&&(this.options.value=this._values(this.options.values.length-1),this.options.values=null)),t.isArray(this.options.values)&&(n=this.options.values.length),this._super(e,i),e){case"orientation":this._detectOrientation(),this._removeClass("ui-slider-horizontal ui-slider-vertical")._addClass("ui-slider-"+this.orientation),this._refreshValue(),this.options.range&&this._refreshRange(i),this.handles.css("horizontal"===i?"bottom":"left","");break;case"value":this._animateOff=!0,this._refreshValue(),this._change(null,0),this._animateOff=!1;break;case"values":for(this._animateOff=!0,this._refreshValue(),s=n-1;s>=0;s--)this._change(null,s);this._animateOff=!1;break;case"step":case"min":case"max":this._animateOff=!0,this._calculateNewMax(),this._refreshValue(),this._animateOff=!1;break;case"range":this._animateOff=!0,this._refresh(),this._animateOff=!1}},_setOptionDisabled:function(t){this._super(t),this._toggleClass(null,"ui-state-disabled",!!t)},_value:function(){var t=this.options.value;return t=this._trimAlignValue(t)},_values:function(t){var e,i,s;if(arguments.length)return e=this.options.values[t],e=this._trimAlignValue(e);if(this._hasMultipleValues()){for(i=this.options.values.slice(),s=0;i.length>s;s+=1)i[s]=this._trimAlignValue(i[s]);return i}return[]},_trimAlignValue:function(t){if(this._valueMin()>=t)return this._valueMin();if(t>=this._valueMax())return this._valueMax();var e=this.options.step>0?this.options.step:1,i=(t-this._valueMin())%e,s=t-i;return 2*Math.abs(i)>=e&&(s+=i>0?e:-e),parseFloat(s.toFixed(5))},_calculateNewMax:function(){var t=this.options.max,e=this._valueMin(),i=this.options.step,s=Math.round((t-e)/i)*i;t=s+e,t>this.options.max&&(t-=i),this.max=parseFloat(t.toFixed(this._precision()))},_precision:function(){var t=this._precisionOf(this.options.step);return null!==this.options.min&&(t=Math.max(t,this._precisionOf(this.options.min))),t},_precisionOf:function(t){var e=""+t,i=e.indexOf(".");return-1===i?0:e.length-i-1},_valueMin:function(){return this.options.min},_valueMax:function(){return this.max},_refreshRange:function(t){"vertical"===t&&this.range.css({width:"",left:""}),"horizontal"===t&&this.range.css({height:"",bottom:""})},_refreshValue:function(){var e,i,s,n,o,a=this.options.range,r=this.options,h=this,l=this._animateOff?!1:r.animate,c={};this._hasMultipleValues()?this.handles.each(function(s){i=100*((h.values(s)-h._valueMin())/(h._valueMax()-h._valueMin())),c["horizontal"===h.orientation?"left":"bottom"]=i+"%",t(this).stop(1,1)[l?"animate":"css"](c,r.animate),h.options.range===!0&&("horizontal"===h.orientation?(0===s&&h.range.stop(1,1)[l?"animate":"css"]({left:i+"%"},r.animate),1===s&&h.range[l?"animate":"css"]({width:i-e+"%"},{queue:!1,duration:r.animate})):(0===s&&h.range.stop(1,1)[l?"animate":"css"]({bottom:i+"%"},r.animate),1===s&&h.range[l?"animate":"css"]({height:i-e+"%"},{queue:!1,duration:r.animate}))),e=i}):(s=this.value(),n=this._valueMin(),o=this._valueMax(),i=o!==n?100*((s-n)/(o-n)):0,c["horizontal"===this.orientation?"left":"bottom"]=i+"%",this.handle.stop(1,1)[l?"animate":"css"](c,r.animate),"min"===a&&"horizontal"===this.orientation&&this.range.stop(1,1)[l?"animate":"css"]({width:i+"%"},r.animate),"max"===a&&"horizontal"===this.orientation&&this.range.stop(1,1)[l?"animate":"css"]({width:100-i+"%"},r.animate),"min"===a&&"vertical"===this.orientation&&this.range.stop(1,1)[l?"animate":"css"]({height:i+"%"},r.animate),"max"===a&&"vertical"===this.orientation&&this.range.stop(1,1)[l?"animate":"css"]({height:100-i+"%"},r.animate))},_handleEvents:{keydown:function(e){var i,s,n,o,a=t(e.target).data("ui-slider-handle-index");switch(e.keyCode){case t.ui.keyCode.HOME:case t.ui.keyCode.END:case t.ui.keyCode.PAGE_UP:case t.ui.keyCode.PAGE_DOWN:case t.ui.keyCode.UP:case t.ui.keyCode.RIGHT:case t.ui.keyCode.DOWN:case t.ui.keyCode.LEFT:if(e.preventDefault(),!this._keySliding&&(this._keySliding=!0,this._addClass(t(e.target),null,"ui-state-active"),i=this._start(e,a),i===!1))return}switch(o=this.options.step,s=n=this._hasMultipleValues()?this.values(a):this.value(),e.keyCode){case t.ui.keyCode.HOME:n=this._valueMin();break;case t.ui.keyCode.END:n=this._valueMax();break;case t.ui.keyCode.PAGE_UP:n=this._trimAlignValue(s+(this._valueMax()-this._valueMin())/this.numPages);break;case t.ui.keyCode.PAGE_DOWN:n=this._trimAlignValue(s-(this._valueMax()-this._valueMin())/this.numPages);break;case t.ui.keyCode.UP:case t.ui.keyCode.RIGHT:if(s===this._valueMax())return;n=this._trimAlignValue(s+o);break;case t.ui.keyCode.DOWN:case t.ui.keyCode.LEFT:if(s===this._valueMin())return;n=this._trimAlignValue(s-o)}this._slide(e,a,n)},keyup:function(e){var i=t(e.target).data("ui-slider-handle-index");this._keySliding&&(this._keySliding=!1,this._stop(e,i),this._change(e,i),this._removeClass(t(e.target),null,"ui-state-active"))}}}),t.widget("ui.sortable",t.ui.mouse,{version:"1.12.1",widgetEventPrefix:"sort",ready:!1,options:{appendTo:"parent",axis:!1,connectWith:!1,containment:!1,cursor:"auto",cursorAt:!1,dropOnEmpty:!0,forcePlaceholderSize:!1,forceHelperSize:!1,grid:!1,handle:!1,helper:"original",items:"> *",opacity:!1,placeholder:!1,revert:!1,scroll:!0,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1e3,activate:null,beforeStop:null,change:null,deactivate:null,out:null,over:null,receive:null,remove:null,sort:null,start:null,stop:null,update:null},_isOverAxis:function(t,e,i){return t>=e&&e+i>t},_isFloating:function(t){return/left|right/.test(t.css("float"))||/inline|table-cell/.test(t.css("display"))},_create:function(){this.containerCache={},this._addClass("ui-sortable"),this.refresh(),this.offset=this.element.offset(),this._mouseInit(),this._setHandleClassName(),this.ready=!0},_setOption:function(t,e){this._super(t,e),"handle"===t&&this._setHandleClassName()},_setHandleClassName:function(){var e=this;this._removeClass(this.element.find(".ui-sortable-handle"),"ui-sortable-handle"),t.each(this.items,function(){e._addClass(this.instance.options.handle?this.item.find(this.instance.options.handle):this.item,"ui-sortable-handle")})},_destroy:function(){this._mouseDestroy();for(var t=this.items.length-1;t>=0;t--)this.items[t].item.removeData(this.widgetName+"-item");return this},_mouseCapture:function(e,i){var s=null,n=!1,o=this;return this.reverting?!1:this.options.disabled||"static"===this.options.type?!1:(this._refreshItems(e),t(e.target).parents().each(function(){return t.data(this,o.widgetName+"-item")===o?(s=t(this),!1):void 0}),t.data(e.target,o.widgetName+"-item")===o&&(s=t(e.target)),s?!this.options.handle||i||(t(this.options.handle,s).find("*").addBack().each(function(){this===e.target&&(n=!0)}),n)?(this.currentItem=s,this._removeCurrentsFromItems(),!0):!1:!1)},_mouseStart:function(e,i,s){var n,o,a=this.options;if(this.currentContainer=this,this.refreshPositions(),this.helper=this._createHelper(e),this._cacheHelperProportions(),this._cacheMargins(),this.scrollParent=this.helper.scrollParent(),this.offset=this.currentItem.offset(),this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left},t.extend(this.offset,{click:{left:e.pageX-this.offset.left,top:e.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()}),this.helper.css("position","absolute"),this.cssPosition=this.helper.css("position"),this.originalPosition=this._generatePosition(e),this.originalPageX=e.pageX,this.originalPageY=e.pageY,a.cursorAt&&this._adjustOffsetFromHelper(a.cursorAt),this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]},this.helper[0]!==this.currentItem[0]&&this.currentItem.hide(),this._createPlaceholder(),a.containment&&this._setContainment(),a.cursor&&"auto"!==a.cursor&&(o=this.document.find("body"),this.storedCursor=o.css("cursor"),o.css("cursor",a.cursor),this.storedStylesheet=t("<style>*{ cursor: "+a.cursor+" !important; }</style>").appendTo(o)),a.opacity&&(this.helper.css("opacity")&&(this._storedOpacity=this.helper.css("opacity")),this.helper.css("opacity",a.opacity)),a.zIndex&&(this.helper.css("zIndex")&&(this._storedZIndex=this.helper.css("zIndex")),this.helper.css("zIndex",a.zIndex)),this.scrollParent[0]!==this.document[0]&&"HTML"!==this.scrollParent[0].tagName&&(this.overflowOffset=this.scrollParent.offset()),this._trigger("start",e,this._uiHash()),this._preserveHelperProportions||this._cacheHelperProportions(),!s)for(n=this.containers.length-1;n>=0;n--)this.containers[n]._trigger("activate",e,this._uiHash(this));return t.ui.ddmanager&&(t.ui.ddmanager.current=this),t.ui.ddmanager&&!a.dropBehaviour&&t.ui.ddmanager.prepareOffsets(this,e),this.dragging=!0,this._addClass(this.helper,"ui-sortable-helper"),this._mouseDrag(e),!0},_mouseDrag:function(e){var i,s,n,o,a=this.options,r=!1;for(this.position=this._generatePosition(e),this.positionAbs=this._convertPositionTo("absolute"),this.lastPositionAbs||(this.lastPositionAbs=this.positionAbs),this.options.scroll&&(this.scrollParent[0]!==this.document[0]&&"HTML"!==this.scrollParent[0].tagName?(this.overflowOffset.top+this.scrollParent[0].offsetHeight-e.pageY<a.scrollSensitivity?this.scrollParent[0].scrollTop=r=this.scrollParent[0].scrollTop+a.scrollSpeed:e.pageY-this.overflowOffset.top<a.scrollSensitivity&&(this.scrollParent[0].scrollTop=r=this.scrollParent[0].scrollTop-a.scrollSpeed),this.overflowOffset.left+this.scrollParent[0].offsetWidth-e.pageX<a.scrollSensitivity?this.scrollParent[0].scrollLeft=r=this.scrollParent[0].scrollLeft+a.scrollSpeed:e.pageX-this.overflowOffset.left<a.scrollSensitivity&&(this.scrollParent[0].scrollLeft=r=this.scrollParent[0].scrollLeft-a.scrollSpeed)):(e.pageY-this.document.scrollTop()<a.scrollSensitivity?r=this.document.scrollTop(this.document.scrollTop()-a.scrollSpeed):this.window.height()-(e.pageY-this.document.scrollTop())<a.scrollSensitivity&&(r=this.document.scrollTop(this.document.scrollTop()+a.scrollSpeed)),e.pageX-this.document.scrollLeft()<a.scrollSensitivity?r=this.document.scrollLeft(this.document.scrollLeft()-a.scrollSpeed):this.window.width()-(e.pageX-this.document.scrollLeft())<a.scrollSensitivity&&(r=this.document.scrollLeft(this.document.scrollLeft()+a.scrollSpeed))),r!==!1&&t.ui.ddmanager&&!a.dropBehaviour&&t.ui.ddmanager.prepareOffsets(this,e)),this.positionAbs=this._convertPositionTo("absolute"),this.options.axis&&"y"===this.options.axis||(this.helper[0].style.left=this.position.left+"px"),this.options.axis&&"x"===this.options.axis||(this.helper[0].style.top=this.position.top+"px"),i=this.items.length-1;i>=0;i--)if(s=this.items[i],n=s.item[0],o=this._intersectsWithPointer(s),o&&s.instance===this.currentContainer&&n!==this.currentItem[0]&&this.placeholder[1===o?"next":"prev"]()[0]!==n&&!t.contains(this.placeholder[0],n)&&("semi-dynamic"===this.options.type?!t.contains(this.element[0],n):!0)){if(this.direction=1===o?"down":"up","pointer"!==this.options.tolerance&&!this._intersectsWithSides(s))break;this._rearrange(e,s),this._trigger("change",e,this._uiHash());break}return this._contactContainers(e),t.ui.ddmanager&&t.ui.ddmanager.drag(this,e),this._trigger("sort",e,this._uiHash()),this.lastPositionAbs=this.positionAbs,!1},_mouseStop:function(e,i){if(e){if(t.ui.ddmanager&&!this.options.dropBehaviour&&t.ui.ddmanager.drop(this,e),this.options.revert){var s=this,n=this.placeholder.offset(),o=this.options.axis,a={};o&&"x"!==o||(a.left=n.left-this.offset.parent.left-this.margins.left+(this.offsetParent[0]===this.document[0].body?0:this.offsetParent[0].scrollLeft)),o&&"y"!==o||(a.top=n.top-this.offset.parent.top-this.margins.top+(this.offsetParent[0]===this.document[0].body?0:this.offsetParent[0].scrollTop)),this.reverting=!0,t(this.helper).animate(a,parseInt(this.options.revert,10)||500,function(){s._clear(e)})}else this._clear(e,i);return!1}},cancel:function(){if(this.dragging){this._mouseUp(new t.Event("mouseup",{target:null})),"original"===this.options.helper?(this.currentItem.css(this._storedCSS),this._removeClass(this.currentItem,"ui-sortable-helper")):this.currentItem.show();for(var e=this.containers.length-1;e>=0;e--)this.containers[e]._trigger("deactivate",null,this._uiHash(this)),this.containers[e].containerCache.over&&(this.containers[e]._trigger("out",null,this._uiHash(this)),this.containers[e].containerCache.over=0)}return this.placeholder&&(this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]),"original"!==this.options.helper&&this.helper&&this.helper[0].parentNode&&this.helper.remove(),t.extend(this,{helper:null,dragging:!1,reverting:!1,_noFinalSort:null}),this.domPosition.prev?t(this.domPosition.prev).after(this.currentItem):t(this.domPosition.parent).prepend(this.currentItem)),this},serialize:function(e){var i=this._getItemsAsjQuery(e&&e.connected),s=[];return e=e||{},t(i).each(function(){var i=(t(e.item||this).attr(e.attribute||"id")||"").match(e.expression||/(.+)[\-=_](.+)/);i&&s.push((e.key||i[1]+"[]")+"="+(e.key&&e.expression?i[1]:i[2]))}),!s.length&&e.key&&s.push(e.key+"="),s.join("&")},toArray:function(e){var i=this._getItemsAsjQuery(e&&e.connected),s=[];return e=e||{},i.each(function(){s.push(t(e.item||this).attr(e.attribute||"id")||"")}),s},_intersectsWith:function(t){var e=this.positionAbs.left,i=e+this.helperProportions.width,s=this.positionAbs.top,n=s+this.helperProportions.height,o=t.left,a=o+t.width,r=t.top,h=r+t.height,l=this.offset.click.top,c=this.offset.click.left,u="x"===this.options.axis||s+l>r&&h>s+l,d="y"===this.options.axis||e+c>o&&a>e+c,p=u&&d;return"pointer"===this.options.tolerance||this.options.forcePointerForContainers||"pointer"!==this.options.tolerance&&this.helperProportions[this.floating?"width":"height"]>t[this.floating?"width":"height"]?p:e+this.helperProportions.width/2>o&&a>i-this.helperProportions.width/2&&s+this.helperProportions.height/2>r&&h>n-this.helperProportions.height/2},_intersectsWithPointer:function(t){var e,i,s="x"===this.options.axis||this._isOverAxis(this.positionAbs.top+this.offset.click.top,t.top,t.height),n="y"===this.options.axis||this._isOverAxis(this.positionAbs.left+this.offset.click.left,t.left,t.width),o=s&&n;return o?(e=this._getDragVerticalDirection(),i=this._getDragHorizontalDirection(),this.floating?"right"===i||"down"===e?2:1:e&&("down"===e?2:1)):!1},_intersectsWithSides:function(t){var e=this._isOverAxis(this.positionAbs.top+this.offset.click.top,t.top+t.height/2,t.height),i=this._isOverAxis(this.positionAbs.left+this.offset.click.left,t.left+t.width/2,t.width),s=this._getDragVerticalDirection(),n=this._getDragHorizontalDirection();return this.floating&&n?"right"===n&&i||"left"===n&&!i:s&&("down"===s&&e||"up"===s&&!e)},_getDragVerticalDirection:function(){var t=this.positionAbs.top-this.lastPositionAbs.top;return 0!==t&&(t>0?"down":"up")},_getDragHorizontalDirection:function(){var t=this.positionAbs.left-this.lastPositionAbs.left;return 0!==t&&(t>0?"right":"left")},refresh:function(t){return this._refreshItems(t),this._setHandleClassName(),this.refreshPositions(),this},_connectWith:function(){var t=this.options;return t.connectWith.constructor===String?[t.connectWith]:t.connectWith},_getItemsAsjQuery:function(e){function i(){r.push(this)}var s,n,o,a,r=[],h=[],l=this._connectWith();if(l&&e)for(s=l.length-1;s>=0;s--)for(o=t(l[s],this.document[0]),n=o.length-1;n>=0;n--)a=t.data(o[n],this.widgetFullName),a&&a!==this&&!a.options.disabled&&h.push([t.isFunction(a.options.items)?a.options.items.call(a.element):t(a.options.items,a.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),a]);for(h.push([t.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):t(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),this]),s=h.length-1;s>=0;s--)h[s][0].each(i);return t(r)},_removeCurrentsFromItems:function(){var e=this.currentItem.find(":data("+this.widgetName+"-item)");this.items=t.grep(this.items,function(t){for(var i=0;e.length>i;i++)if(e[i]===t.item[0])return!1;return!0})},_refreshItems:function(e){this.items=[],this.containers=[this];var i,s,n,o,a,r,h,l,c=this.items,u=[[t.isFunction(this.options.items)?this.options.items.call(this.element[0],e,{item:this.currentItem}):t(this.options.items,this.element),this]],d=this._connectWith();if(d&&this.ready)for(i=d.length-1;i>=0;i--)for(n=t(d[i],this.document[0]),s=n.length-1;s>=0;s--)o=t.data(n[s],this.widgetFullName),o&&o!==this&&!o.options.disabled&&(u.push([t.isFunction(o.options.items)?o.options.items.call(o.element[0],e,{item:this.currentItem}):t(o.options.items,o.element),o]),this.containers.push(o));for(i=u.length-1;i>=0;i--)for(a=u[i][1],r=u[i][0],s=0,l=r.length;l>s;s++)h=t(r[s]),h.data(this.widgetName+"-item",a),c.push({item:h,instance:a,width:0,height:0,left:0,top:0})},refreshPositions:function(e){this.floating=this.items.length?"x"===this.options.axis||this._isFloating(this.items[0].item):!1,this.offsetParent&&this.helper&&(this.offset.parent=this._getParentOffset());var i,s,n,o;for(i=this.items.length-1;i>=0;i--)s=this.items[i],s.instance!==this.currentContainer&&this.currentContainer&&s.item[0]!==this.currentItem[0]||(n=this.options.toleranceElement?t(this.options.toleranceElement,s.item):s.item,e||(s.width=n.outerWidth(),s.height=n.outerHeight()),o=n.offset(),s.left=o.left,s.top=o.top);if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(i=this.containers.length-1;i>=0;i--)o=this.containers[i].element.offset(),this.containers[i].containerCache.left=o.left,this.containers[i].containerCache.top=o.top,this.containers[i].containerCache.width=this.containers[i].element.outerWidth(),this.containers[i].containerCache.height=this.containers[i].element.outerHeight();return this},_createPlaceholder:function(e){e=e||this;var i,s=e.options;s.placeholder&&s.placeholder.constructor!==String||(i=s.placeholder,s.placeholder={element:function(){var s=e.currentItem[0].nodeName.toLowerCase(),n=t("<"+s+">",e.document[0]);return e._addClass(n,"ui-sortable-placeholder",i||e.currentItem[0].className)._removeClass(n,"ui-sortable-helper"),"tbody"===s?e._createTrPlaceholder(e.currentItem.find("tr").eq(0),t("<tr>",e.document[0]).appendTo(n)):"tr"===s?e._createTrPlaceholder(e.currentItem,n):"img"===s&&n.attr("src",e.currentItem.attr("src")),i||n.css("visibility","hidden"),n},update:function(t,n){(!i||s.forcePlaceholderSize)&&(n.height()||n.height(e.currentItem.innerHeight()-parseInt(e.currentItem.css("paddingTop")||0,10)-parseInt(e.currentItem.css("paddingBottom")||0,10)),n.width()||n.width(e.currentItem.innerWidth()-parseInt(e.currentItem.css("paddingLeft")||0,10)-parseInt(e.currentItem.css("paddingRight")||0,10)))}}),e.placeholder=t(s.placeholder.element.call(e.element,e.currentItem)),e.currentItem.after(e.placeholder),s.placeholder.update(e,e.placeholder)},_createTrPlaceholder:function(e,i){var s=this;e.children().each(function(){t("<td>&#160;</td>",s.document[0]).attr("colspan",t(this).attr("colspan")||1).appendTo(i)})},_contactContainers:function(e){var i,s,n,o,a,r,h,l,c,u,d=null,p=null;for(i=this.containers.length-1;i>=0;i--)if(!t.contains(this.currentItem[0],this.containers[i].element[0]))if(this._intersectsWith(this.containers[i].containerCache)){if(d&&t.contains(this.containers[i].element[0],d.element[0]))continue;d=this.containers[i],p=i}else this.containers[i].containerCache.over&&(this.containers[i]._trigger("out",e,this._uiHash(this)),this.containers[i].containerCache.over=0);if(d)if(1===this.containers.length)this.containers[p].containerCache.over||(this.containers[p]._trigger("over",e,this._uiHash(this)),this.containers[p].containerCache.over=1);else{for(n=1e4,o=null,c=d.floating||this._isFloating(this.currentItem),a=c?"left":"top",r=c?"width":"height",u=c?"pageX":"pageY",s=this.items.length-1;s>=0;s--)t.contains(this.containers[p].element[0],this.items[s].item[0])&&this.items[s].item[0]!==this.currentItem[0]&&(h=this.items[s].item.offset()[a],l=!1,e[u]-h>this.items[s][r]/2&&(l=!0),n>Math.abs(e[u]-h)&&(n=Math.abs(e[u]-h),o=this.items[s],this.direction=l?"up":"down"));if(!o&&!this.options.dropOnEmpty)return;if(this.currentContainer===this.containers[p])return this.currentContainer.containerCache.over||(this.containers[p]._trigger("over",e,this._uiHash()),this.currentContainer.containerCache.over=1),void 0;o?this._rearrange(e,o,null,!0):this._rearrange(e,null,this.containers[p].element,!0),this._trigger("change",e,this._uiHash()),this.containers[p]._trigger("change",e,this._uiHash(this)),this.currentContainer=this.containers[p],this.options.placeholder.update(this.currentContainer,this.placeholder),this.containers[p]._trigger("over",e,this._uiHash(this)),this.containers[p].containerCache.over=1}},_createHelper:function(e){var i=this.options,s=t.isFunction(i.helper)?t(i.helper.apply(this.element[0],[e,this.currentItem])):"clone"===i.helper?this.currentItem.clone():this.currentItem;return s.parents("body").length||t("parent"!==i.appendTo?i.appendTo:this.currentItem[0].parentNode)[0].appendChild(s[0]),s[0]===this.currentItem[0]&&(this._storedCSS={width:this.currentItem[0].style.width,height:this.currentItem[0].style.height,position:this.currentItem.css("position"),top:this.currentItem.css("top"),left:this.currentItem.css("left")}),(!s[0].style.width||i.forceHelperSize)&&s.width(this.currentItem.width()),(!s[0].style.height||i.forceHelperSize)&&s.height(this.currentItem.height()),s},_adjustOffsetFromHelper:function(e){"string"==typeof e&&(e=e.split(" ")),t.isArray(e)&&(e={left:+e[0],top:+e[1]||0}),"left"in e&&(this.offset.click.left=e.left+this.margins.left),"right"in e&&(this.offset.click.left=this.helperProportions.width-e.right+this.margins.left),"top"in e&&(this.offset.click.top=e.top+this.margins.top),"bottom"in e&&(this.offset.click.top=this.helperProportions.height-e.bottom+this.margins.top)},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var e=this.offsetParent.offset();return"absolute"===this.cssPosition&&this.scrollParent[0]!==this.document[0]&&t.contains(this.scrollParent[0],this.offsetParent[0])&&(e.left+=this.scrollParent.scrollLeft(),e.top+=this.scrollParent.scrollTop()),(this.offsetParent[0]===this.document[0].body||this.offsetParent[0].tagName&&"html"===this.offsetParent[0].tagName.toLowerCase()&&t.ui.ie)&&(e={top:0,left:0}),{top:e.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:e.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if("relative"===this.cssPosition){var t=this.currentItem.position();return{top:t.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:t.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.currentItem.css("marginLeft"),10)||0,top:parseInt(this.currentItem.css("marginTop"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var e,i,s,n=this.options;"parent"===n.containment&&(n.containment=this.helper[0].parentNode),("document"===n.containment||"window"===n.containment)&&(this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,"document"===n.containment?this.document.width():this.window.width()-this.helperProportions.width-this.margins.left,("document"===n.containment?this.document.height()||document.body.parentNode.scrollHeight:this.window.height()||this.document[0].body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]),/^(document|window|parent)$/.test(n.containment)||(e=t(n.containment)[0],i=t(n.containment).offset(),s="hidden"!==t(e).css("overflow"),this.containment=[i.left+(parseInt(t(e).css("borderLeftWidth"),10)||0)+(parseInt(t(e).css("paddingLeft"),10)||0)-this.margins.left,i.top+(parseInt(t(e).css("borderTopWidth"),10)||0)+(parseInt(t(e).css("paddingTop"),10)||0)-this.margins.top,i.left+(s?Math.max(e.scrollWidth,e.offsetWidth):e.offsetWidth)-(parseInt(t(e).css("borderLeftWidth"),10)||0)-(parseInt(t(e).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,i.top+(s?Math.max(e.scrollHeight,e.offsetHeight):e.offsetHeight)-(parseInt(t(e).css("borderTopWidth"),10)||0)-(parseInt(t(e).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top])},_convertPositionTo:function(e,i){i||(i=this.position);var s="absolute"===e?1:-1,n="absolute"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&&t.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,o=/(html|body)/i.test(n[0].tagName);return{top:i.top+this.offset.relative.top*s+this.offset.parent.top*s-("fixed"===this.cssPosition?-this.scrollParent.scrollTop():o?0:n.scrollTop())*s,left:i.left+this.offset.relative.left*s+this.offset.parent.left*s-("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():o?0:n.scrollLeft())*s}},_generatePosition:function(e){var i,s,n=this.options,o=e.pageX,a=e.pageY,r="absolute"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&&t.contains(this.scrollParent[0],this.offsetParent[0])?this.scrollParent:this.offsetParent,h=/(html|body)/i.test(r[0].tagName);return"relative"!==this.cssPosition||this.scrollParent[0]!==this.document[0]&&this.scrollParent[0]!==this.offsetParent[0]||(this.offset.relative=this._getRelativeOffset()),this.originalPosition&&(this.containment&&(e.pageX-this.offset.click.left<this.containment[0]&&(o=this.containment[0]+this.offset.click.left),e.pageY-this.offset.click.top<this.containment[1]&&(a=this.containment[1]+this.offset.click.top),e.pageX-this.offset.click.left>this.containment[2]&&(o=this.containment[2]+this.offset.click.left),e.pageY-this.offset.click.top>this.containment[3]&&(a=this.containment[3]+this.offset.click.top)),n.grid&&(i=this.originalPageY+Math.round((a-this.originalPageY)/n.grid[1])*n.grid[1],a=this.containment?i-this.offset.click.top>=this.containment[1]&&i-this.offset.click.top<=this.containment[3]?i:i-this.offset.click.top>=this.containment[1]?i-n.grid[1]:i+n.grid[1]:i,s=this.originalPageX+Math.round((o-this.originalPageX)/n.grid[0])*n.grid[0],o=this.containment?s-this.offset.click.left>=this.containment[0]&&s-this.offset.click.left<=this.containment[2]?s:s-this.offset.click.left>=this.containment[0]?s-n.grid[0]:s+n.grid[0]:s)),{top:a-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+("fixed"===this.cssPosition?-this.scrollParent.scrollTop():h?0:r.scrollTop()),left:o-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+("fixed"===this.cssPosition?-this.scrollParent.scrollLeft():h?0:r.scrollLeft())}},_rearrange:function(t,e,i,s){i?i[0].appendChild(this.placeholder[0]):e.item[0].parentNode.insertBefore(this.placeholder[0],"down"===this.direction?e.item[0]:e.item[0].nextSibling),this.counter=this.counter?++this.counter:1;var n=this.counter;
42027this._delay(function(){n===this.counter&&this.refreshPositions(!s)})},_clear:function(t,e){function i(t,e,i){return function(s){i._trigger(t,s,e._uiHash(e))}}this.reverting=!1;var s,n=[];if(!this._noFinalSort&&this.currentItem.parent().length&&this.placeholder.before(this.currentItem),this._noFinalSort=null,this.helper[0]===this.currentItem[0]){for(s in this._storedCSS)("auto"===this._storedCSS[s]||"static"===this._storedCSS[s])&&(this._storedCSS[s]="");this.currentItem.css(this._storedCSS),this._removeClass(this.currentItem,"ui-sortable-helper")}else this.currentItem.show();for(this.fromOutside&&!e&&n.push(function(t){this._trigger("receive",t,this._uiHash(this.fromOutside))}),!this.fromOutside&&this.domPosition.prev===this.currentItem.prev().not(".ui-sortable-helper")[0]&&this.domPosition.parent===this.currentItem.parent()[0]||e||n.push(function(t){this._trigger("update",t,this._uiHash())}),this!==this.currentContainer&&(e||(n.push(function(t){this._trigger("remove",t,this._uiHash())}),n.push(function(t){return function(e){t._trigger("receive",e,this._uiHash(this))}}.call(this,this.currentContainer)),n.push(function(t){return function(e){t._trigger("update",e,this._uiHash(this))}}.call(this,this.currentContainer)))),s=this.containers.length-1;s>=0;s--)e||n.push(i("deactivate",this,this.containers[s])),this.containers[s].containerCache.over&&(n.push(i("out",this,this.containers[s])),this.containers[s].containerCache.over=0);if(this.storedCursor&&(this.document.find("body").css("cursor",this.storedCursor),this.storedStylesheet.remove()),this._storedOpacity&&this.helper.css("opacity",this._storedOpacity),this._storedZIndex&&this.helper.css("zIndex","auto"===this._storedZIndex?"":this._storedZIndex),this.dragging=!1,e||this._trigger("beforeStop",t,this._uiHash()),this.placeholder[0].parentNode.removeChild(this.placeholder[0]),this.cancelHelperRemoval||(this.helper[0]!==this.currentItem[0]&&this.helper.remove(),this.helper=null),!e){for(s=0;n.length>s;s++)n[s].call(this,t);this._trigger("stop",t,this._uiHash())}return this.fromOutside=!1,!this.cancelHelperRemoval},_trigger:function(){t.Widget.prototype._trigger.apply(this,arguments)===!1&&this.cancel()},_uiHash:function(e){var i=e||this;return{helper:i.helper,placeholder:i.placeholder||t([]),position:i.position,originalPosition:i.originalPosition,offset:i.positionAbs,item:i.currentItem,sender:e?e.element:null}}}),t.widget("ui.spinner",{version:"1.12.1",defaultElement:"<input>",widgetEventPrefix:"spin",options:{classes:{"ui-spinner":"ui-corner-all","ui-spinner-down":"ui-corner-br","ui-spinner-up":"ui-corner-tr"},culture:null,icons:{down:"ui-icon-triangle-1-s",up:"ui-icon-triangle-1-n"},incremental:!0,max:null,min:null,numberFormat:null,page:10,step:1,change:null,spin:null,start:null,stop:null},_create:function(){this._setOption("max",this.options.max),this._setOption("min",this.options.min),this._setOption("step",this.options.step),""!==this.value()&&this._value(this.element.val(),!0),this._draw(),this._on(this._events),this._refresh(),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_getCreateOptions:function(){var e=this._super(),i=this.element;return t.each(["min","max","step"],function(t,s){var n=i.attr(s);null!=n&&n.length&&(e[s]=n)}),e},_events:{keydown:function(t){this._start(t)&&this._keydown(t)&&t.preventDefault()},keyup:"_stop",focus:function(){this.previous=this.element.val()},blur:function(t){return this.cancelBlur?(delete this.cancelBlur,void 0):(this._stop(),this._refresh(),this.previous!==this.element.val()&&this._trigger("change",t),void 0)},mousewheel:function(t,e){if(e){if(!this.spinning&&!this._start(t))return!1;this._spin((e>0?1:-1)*this.options.step,t),clearTimeout(this.mousewheelTimer),this.mousewheelTimer=this._delay(function(){this.spinning&&this._stop(t)},100),t.preventDefault()}},"mousedown .ui-spinner-button":function(e){function i(){var e=this.element[0]===t.ui.safeActiveElement(this.document[0]);e||(this.element.trigger("focus"),this.previous=s,this._delay(function(){this.previous=s}))}var s;s=this.element[0]===t.ui.safeActiveElement(this.document[0])?this.previous:this.element.val(),e.preventDefault(),i.call(this),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur,i.call(this)}),this._start(e)!==!1&&this._repeat(null,t(e.currentTarget).hasClass("ui-spinner-up")?1:-1,e)},"mouseup .ui-spinner-button":"_stop","mouseenter .ui-spinner-button":function(e){return t(e.currentTarget).hasClass("ui-state-active")?this._start(e)===!1?!1:(this._repeat(null,t(e.currentTarget).hasClass("ui-spinner-up")?1:-1,e),void 0):void 0},"mouseleave .ui-spinner-button":"_stop"},_enhance:function(){this.uiSpinner=this.element.attr("autocomplete","off").wrap("<span>").parent().append("<a></a><a></a>")},_draw:function(){this._enhance(),this._addClass(this.uiSpinner,"ui-spinner","ui-widget ui-widget-content"),this._addClass("ui-spinner-input"),this.element.attr("role","spinbutton"),this.buttons=this.uiSpinner.children("a").attr("tabIndex",-1).attr("aria-hidden",!0).button({classes:{"ui-button":""}}),this._removeClass(this.buttons,"ui-corner-all"),this._addClass(this.buttons.first(),"ui-spinner-button ui-spinner-up"),this._addClass(this.buttons.last(),"ui-spinner-button ui-spinner-down"),this.buttons.first().button({icon:this.options.icons.up,showLabel:!1}),this.buttons.last().button({icon:this.options.icons.down,showLabel:!1}),this.buttons.height()>Math.ceil(.5*this.uiSpinner.height())&&this.uiSpinner.height()>0&&this.uiSpinner.height(this.uiSpinner.height())},_keydown:function(e){var i=this.options,s=t.ui.keyCode;switch(e.keyCode){case s.UP:return this._repeat(null,1,e),!0;case s.DOWN:return this._repeat(null,-1,e),!0;case s.PAGE_UP:return this._repeat(null,i.page,e),!0;case s.PAGE_DOWN:return this._repeat(null,-i.page,e),!0}return!1},_start:function(t){return this.spinning||this._trigger("start",t)!==!1?(this.counter||(this.counter=1),this.spinning=!0,!0):!1},_repeat:function(t,e,i){t=t||500,clearTimeout(this.timer),this.timer=this._delay(function(){this._repeat(40,e,i)},t),this._spin(e*this.options.step,i)},_spin:function(t,e){var i=this.value()||0;this.counter||(this.counter=1),i=this._adjustValue(i+t*this._increment(this.counter)),this.spinning&&this._trigger("spin",e,{value:i})===!1||(this._value(i),this.counter++)},_increment:function(e){var i=this.options.incremental;return i?t.isFunction(i)?i(e):Math.floor(e*e*e/5e4-e*e/500+17*e/200+1):1},_precision:function(){var t=this._precisionOf(this.options.step);return null!==this.options.min&&(t=Math.max(t,this._precisionOf(this.options.min))),t},_precisionOf:function(t){var e=""+t,i=e.indexOf(".");return-1===i?0:e.length-i-1},_adjustValue:function(t){var e,i,s=this.options;return e=null!==s.min?s.min:0,i=t-e,i=Math.round(i/s.step)*s.step,t=e+i,t=parseFloat(t.toFixed(this._precision())),null!==s.max&&t>s.max?s.max:null!==s.min&&s.min>t?s.min:t},_stop:function(t){this.spinning&&(clearTimeout(this.timer),clearTimeout(this.mousewheelTimer),this.counter=0,this.spinning=!1,this._trigger("stop",t))},_setOption:function(t,e){var i,s,n;return"culture"===t||"numberFormat"===t?(i=this._parse(this.element.val()),this.options[t]=e,this.element.val(this._format(i)),void 0):(("max"===t||"min"===t||"step"===t)&&"string"==typeof e&&(e=this._parse(e)),"icons"===t&&(s=this.buttons.first().find(".ui-icon"),this._removeClass(s,null,this.options.icons.up),this._addClass(s,null,e.up),n=this.buttons.last().find(".ui-icon"),this._removeClass(n,null,this.options.icons.down),this._addClass(n,null,e.down)),this._super(t,e),void 0)},_setOptionDisabled:function(t){this._super(t),this._toggleClass(this.uiSpinner,null,"ui-state-disabled",!!t),this.element.prop("disabled",!!t),this.buttons.button(t?"disable":"enable")},_setOptions:r(function(t){this._super(t)}),_parse:function(t){return"string"==typeof t&&""!==t&&(t=window.Globalize&&this.options.numberFormat?Globalize.parseFloat(t,10,this.options.culture):+t),""===t||isNaN(t)?null:t},_format:function(t){return""===t?"":window.Globalize&&this.options.numberFormat?Globalize.format(t,this.options.numberFormat,this.options.culture):t},_refresh:function(){this.element.attr({"aria-valuemin":this.options.min,"aria-valuemax":this.options.max,"aria-valuenow":this._parse(this.element.val())})},isValid:function(){var t=this.value();return null===t?!1:t===this._adjustValue(t)},_value:function(t,e){var i;""!==t&&(i=this._parse(t),null!==i&&(e||(i=this._adjustValue(i)),t=this._format(i))),this.element.val(t),this._refresh()},_destroy:function(){this.element.prop("disabled",!1).removeAttr("autocomplete role aria-valuemin aria-valuemax aria-valuenow"),this.uiSpinner.replaceWith(this.element)},stepUp:r(function(t){this._stepUp(t)}),_stepUp:function(t){this._start()&&(this._spin((t||1)*this.options.step),this._stop())},stepDown:r(function(t){this._stepDown(t)}),_stepDown:function(t){this._start()&&(this._spin((t||1)*-this.options.step),this._stop())},pageUp:r(function(t){this._stepUp((t||1)*this.options.page)}),pageDown:r(function(t){this._stepDown((t||1)*this.options.page)}),value:function(t){return arguments.length?(r(this._value).call(this,t),void 0):this._parse(this.element.val())},widget:function(){return this.uiSpinner}}),t.uiBackCompat!==!1&&t.widget("ui.spinner",t.ui.spinner,{_enhance:function(){this.uiSpinner=this.element.attr("autocomplete","off").wrap(this._uiSpinnerHtml()).parent().append(this._buttonHtml())},_uiSpinnerHtml:function(){return"<span>"},_buttonHtml:function(){return"<a></a><a></a>"}}),t.ui.spinner,t.widget("ui.tabs",{version:"1.12.1",delay:300,options:{active:null,classes:{"ui-tabs":"ui-corner-all","ui-tabs-nav":"ui-corner-all","ui-tabs-panel":"ui-corner-bottom","ui-tabs-tab":"ui-corner-top"},collapsible:!1,event:"click",heightStyle:"content",hide:null,show:null,activate:null,beforeActivate:null,beforeLoad:null,load:null},_isLocal:function(){var t=/#.*$/;return function(e){var i,s;i=e.href.replace(t,""),s=location.href.replace(t,"");try{i=decodeURIComponent(i)}catch(n){}try{s=decodeURIComponent(s)}catch(n){}return e.hash.length>1&&i===s}}(),_create:function(){var e=this,i=this.options;this.running=!1,this._addClass("ui-tabs","ui-widget ui-widget-content"),this._toggleClass("ui-tabs-collapsible",null,i.collapsible),this._processTabs(),i.active=this._initialActive(),t.isArray(i.disabled)&&(i.disabled=t.unique(i.disabled.concat(t.map(this.tabs.filter(".ui-state-disabled"),function(t){return e.tabs.index(t)}))).sort()),this.active=this.options.active!==!1&&this.anchors.length?this._findActive(i.active):t(),this._refresh(),this.active.length&&this.load(i.active)},_initialActive:function(){var e=this.options.active,i=this.options.collapsible,s=location.hash.substring(1);return null===e&&(s&&this.tabs.each(function(i,n){return t(n).attr("aria-controls")===s?(e=i,!1):void 0}),null===e&&(e=this.tabs.index(this.tabs.filter(".ui-tabs-active"))),(null===e||-1===e)&&(e=this.tabs.length?0:!1)),e!==!1&&(e=this.tabs.index(this.tabs.eq(e)),-1===e&&(e=i?!1:0)),!i&&e===!1&&this.anchors.length&&(e=0),e},_getCreateEventData:function(){return{tab:this.active,panel:this.active.length?this._getPanelForTab(this.active):t()}},_tabKeydown:function(e){var i=t(t.ui.safeActiveElement(this.document[0])).closest("li"),s=this.tabs.index(i),n=!0;if(!this._handlePageNav(e)){switch(e.keyCode){case t.ui.keyCode.RIGHT:case t.ui.keyCode.DOWN:s++;break;case t.ui.keyCode.UP:case t.ui.keyCode.LEFT:n=!1,s--;break;case t.ui.keyCode.END:s=this.anchors.length-1;break;case t.ui.keyCode.HOME:s=0;break;case t.ui.keyCode.SPACE:return e.preventDefault(),clearTimeout(this.activating),this._activate(s),void 0;case t.ui.keyCode.ENTER:return e.preventDefault(),clearTimeout(this.activating),this._activate(s===this.options.active?!1:s),void 0;default:return}e.preventDefault(),clearTimeout(this.activating),s=this._focusNextTab(s,n),e.ctrlKey||e.metaKey||(i.attr("aria-selected","false"),this.tabs.eq(s).attr("aria-selected","true"),this.activating=this._delay(function(){this.option("active",s)},this.delay))}},_panelKeydown:function(e){this._handlePageNav(e)||e.ctrlKey&&e.keyCode===t.ui.keyCode.UP&&(e.preventDefault(),this.active.trigger("focus"))},_handlePageNav:function(e){return e.altKey&&e.keyCode===t.ui.keyCode.PAGE_UP?(this._activate(this._focusNextTab(this.options.active-1,!1)),!0):e.altKey&&e.keyCode===t.ui.keyCode.PAGE_DOWN?(this._activate(this._focusNextTab(this.options.active+1,!0)),!0):void 0},_findNextTab:function(e,i){function s(){return e>n&&(e=0),0>e&&(e=n),e}for(var n=this.tabs.length-1;-1!==t.inArray(s(),this.options.disabled);)e=i?e+1:e-1;return e},_focusNextTab:function(t,e){return t=this._findNextTab(t,e),this.tabs.eq(t).trigger("focus"),t},_setOption:function(t,e){return"active"===t?(this._activate(e),void 0):(this._super(t,e),"collapsible"===t&&(this._toggleClass("ui-tabs-collapsible",null,e),e||this.options.active!==!1||this._activate(0)),"event"===t&&this._setupEvents(e),"heightStyle"===t&&this._setupHeightStyle(e),void 0)},_sanitizeSelector:function(t){return t?t.replace(/[!"$%&'()*+,.\/:;<=>?@\[\]\^`{|}~]/g,"\\$&"):""},refresh:function(){var e=this.options,i=this.tablist.children(":has(a[href])");e.disabled=t.map(i.filter(".ui-state-disabled"),function(t){return i.index(t)}),this._processTabs(),e.active!==!1&&this.anchors.length?this.active.length&&!t.contains(this.tablist[0],this.active[0])?this.tabs.length===e.disabled.length?(e.active=!1,this.active=t()):this._activate(this._findNextTab(Math.max(0,e.active-1),!1)):e.active=this.tabs.index(this.active):(e.active=!1,this.active=t()),this._refresh()},_refresh:function(){this._setOptionDisabled(this.options.disabled),this._setupEvents(this.options.event),this._setupHeightStyle(this.options.heightStyle),this.tabs.not(this.active).attr({"aria-selected":"false","aria-expanded":"false",tabIndex:-1}),this.panels.not(this._getPanelForTab(this.active)).hide().attr({"aria-hidden":"true"}),this.active.length?(this.active.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0}),this._addClass(this.active,"ui-tabs-active","ui-state-active"),this._getPanelForTab(this.active).show().attr({"aria-hidden":"false"})):this.tabs.eq(0).attr("tabIndex",0)},_processTabs:function(){var e=this,i=this.tabs,s=this.anchors,n=this.panels;this.tablist=this._getList().attr("role","tablist"),this._addClass(this.tablist,"ui-tabs-nav","ui-helper-reset ui-helper-clearfix ui-widget-header"),this.tablist.on("mousedown"+this.eventNamespace,"> li",function(e){t(this).is(".ui-state-disabled")&&e.preventDefault()}).on("focus"+this.eventNamespace,".ui-tabs-anchor",function(){t(this).closest("li").is(".ui-state-disabled")&&this.blur()}),this.tabs=this.tablist.find("> li:has(a[href])").attr({role:"tab",tabIndex:-1}),this._addClass(this.tabs,"ui-tabs-tab","ui-state-default"),this.anchors=this.tabs.map(function(){return t("a",this)[0]}).attr({role:"presentation",tabIndex:-1}),this._addClass(this.anchors,"ui-tabs-anchor"),this.panels=t(),this.anchors.each(function(i,s){var n,o,a,r=t(s).uniqueId().attr("id"),h=t(s).closest("li"),l=h.attr("aria-controls");e._isLocal(s)?(n=s.hash,a=n.substring(1),o=e.element.find(e._sanitizeSelector(n))):(a=h.attr("aria-controls")||t({}).uniqueId()[0].id,n="#"+a,o=e.element.find(n),o.length||(o=e._createPanel(a),o.insertAfter(e.panels[i-1]||e.tablist)),o.attr("aria-live","polite")),o.length&&(e.panels=e.panels.add(o)),l&&h.data("ui-tabs-aria-controls",l),h.attr({"aria-controls":a,"aria-labelledby":r}),o.attr("aria-labelledby",r)}),this.panels.attr("role","tabpanel"),this._addClass(this.panels,"ui-tabs-panel","ui-widget-content"),i&&(this._off(i.not(this.tabs)),this._off(s.not(this.anchors)),this._off(n.not(this.panels)))},_getList:function(){return this.tablist||this.element.find("ol, ul").eq(0)},_createPanel:function(e){return t("<div>").attr("id",e).data("ui-tabs-destroy",!0)},_setOptionDisabled:function(e){var i,s,n;for(t.isArray(e)&&(e.length?e.length===this.anchors.length&&(e=!0):e=!1),n=0;s=this.tabs[n];n++)i=t(s),e===!0||-1!==t.inArray(n,e)?(i.attr("aria-disabled","true"),this._addClass(i,null,"ui-state-disabled")):(i.removeAttr("aria-disabled"),this._removeClass(i,null,"ui-state-disabled"));this.options.disabled=e,this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,e===!0)},_setupEvents:function(e){var i={};e&&t.each(e.split(" "),function(t,e){i[e]="_eventHandler"}),this._off(this.anchors.add(this.tabs).add(this.panels)),this._on(!0,this.anchors,{click:function(t){t.preventDefault()}}),this._on(this.anchors,i),this._on(this.tabs,{keydown:"_tabKeydown"}),this._on(this.panels,{keydown:"_panelKeydown"}),this._focusable(this.tabs),this._hoverable(this.tabs)},_setupHeightStyle:function(e){var i,s=this.element.parent();"fill"===e?(i=s.height(),i-=this.element.outerHeight()-this.element.height(),this.element.siblings(":visible").each(function(){var e=t(this),s=e.css("position");"absolute"!==s&&"fixed"!==s&&(i-=e.outerHeight(!0))}),this.element.children().not(this.panels).each(function(){i-=t(this).outerHeight(!0)}),this.panels.each(function(){t(this).height(Math.max(0,i-t(this).innerHeight()+t(this).height()))}).css("overflow","auto")):"auto"===e&&(i=0,this.panels.each(function(){i=Math.max(i,t(this).height("").height())}).height(i))},_eventHandler:function(e){var i=this.options,s=this.active,n=t(e.currentTarget),o=n.closest("li"),a=o[0]===s[0],r=a&&i.collapsible,h=r?t():this._getPanelForTab(o),l=s.length?this._getPanelForTab(s):t(),c={oldTab:s,oldPanel:l,newTab:r?t():o,newPanel:h};e.preventDefault(),o.hasClass("ui-state-disabled")||o.hasClass("ui-tabs-loading")||this.running||a&&!i.collapsible||this._trigger("beforeActivate",e,c)===!1||(i.active=r?!1:this.tabs.index(o),this.active=a?t():o,this.xhr&&this.xhr.abort(),l.length||h.length||t.error("jQuery UI Tabs: Mismatching fragment identifier."),h.length&&this.load(this.tabs.index(o),e),this._toggle(e,c))},_toggle:function(e,i){function s(){o.running=!1,o._trigger("activate",e,i)}function n(){o._addClass(i.newTab.closest("li"),"ui-tabs-active","ui-state-active"),a.length&&o.options.show?o._show(a,o.options.show,s):(a.show(),s())}var o=this,a=i.newPanel,r=i.oldPanel;this.running=!0,r.length&&this.options.hide?this._hide(r,this.options.hide,function(){o._removeClass(i.oldTab.closest("li"),"ui-tabs-active","ui-state-active"),n()}):(this._removeClass(i.oldTab.closest("li"),"ui-tabs-active","ui-state-active"),r.hide(),n()),r.attr("aria-hidden","true"),i.oldTab.attr({"aria-selected":"false","aria-expanded":"false"}),a.length&&r.length?i.oldTab.attr("tabIndex",-1):a.length&&this.tabs.filter(function(){return 0===t(this).attr("tabIndex")}).attr("tabIndex",-1),a.attr("aria-hidden","false"),i.newTab.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0})},_activate:function(e){var i,s=this._findActive(e);s[0]!==this.active[0]&&(s.length||(s=this.active),i=s.find(".ui-tabs-anchor")[0],this._eventHandler({target:i,currentTarget:i,preventDefault:t.noop}))},_findActive:function(e){return e===!1?t():this.tabs.eq(e)},_getIndex:function(e){return"string"==typeof e&&(e=this.anchors.index(this.anchors.filter("[href$='"+t.ui.escapeSelector(e)+"']"))),e},_destroy:function(){this.xhr&&this.xhr.abort(),this.tablist.removeAttr("role").off(this.eventNamespace),this.anchors.removeAttr("role tabIndex").removeUniqueId(),this.tabs.add(this.panels).each(function(){t.data(this,"ui-tabs-destroy")?t(this).remove():t(this).removeAttr("role tabIndex aria-live aria-busy aria-selected aria-labelledby aria-hidden aria-expanded")}),this.tabs.each(function(){var e=t(this),i=e.data("ui-tabs-aria-controls");i?e.attr("aria-controls",i).removeData("ui-tabs-aria-controls"):e.removeAttr("aria-controls")}),this.panels.show(),"content"!==this.options.heightStyle&&this.panels.css("height","")},enable:function(e){var i=this.options.disabled;i!==!1&&(void 0===e?i=!1:(e=this._getIndex(e),i=t.isArray(i)?t.map(i,function(t){return t!==e?t:null}):t.map(this.tabs,function(t,i){return i!==e?i:null})),this._setOptionDisabled(i))},disable:function(e){var i=this.options.disabled;if(i!==!0){if(void 0===e)i=!0;else{if(e=this._getIndex(e),-1!==t.inArray(e,i))return;i=t.isArray(i)?t.merge([e],i).sort():[e]}this._setOptionDisabled(i)}},load:function(e,i){e=this._getIndex(e);var s=this,n=this.tabs.eq(e),o=n.find(".ui-tabs-anchor"),a=this._getPanelForTab(n),r={tab:n,panel:a},h=function(t,e){"abort"===e&&s.panels.stop(!1,!0),s._removeClass(n,"ui-tabs-loading"),a.removeAttr("aria-busy"),t===s.xhr&&delete s.xhr};this._isLocal(o[0])||(this.xhr=t.ajax(this._ajaxSettings(o,i,r)),this.xhr&&"canceled"!==this.xhr.statusText&&(this._addClass(n,"ui-tabs-loading"),a.attr("aria-busy","true"),this.xhr.done(function(t,e,n){setTimeout(function(){a.html(t),s._trigger("load",i,r),h(n,e)},1)}).fail(function(t,e){setTimeout(function(){h(t,e)},1)})))},_ajaxSettings:function(e,i,s){var n=this;return{url:e.attr("href").replace(/#.*$/,""),beforeSend:function(e,o){return n._trigger("beforeLoad",i,t.extend({jqXHR:e,ajaxSettings:o},s))}}},_getPanelForTab:function(e){var i=t(e).attr("aria-controls");return this.element.find(this._sanitizeSelector("#"+i))}}),t.uiBackCompat!==!1&&t.widget("ui.tabs",t.ui.tabs,{_processTabs:function(){this._superApply(arguments),this._addClass(this.tabs,"ui-tab")}}),t.ui.tabs,t.widget("ui.tooltip",{version:"1.12.1",options:{classes:{"ui-tooltip":"ui-corner-all ui-widget-shadow"},content:function(){var e=t(this).attr("title")||"";return t("<a>").text(e).html()},hide:!0,items:"[title]:not([disabled])",position:{my:"left top+15",at:"left bottom",collision:"flipfit flip"},show:!0,track:!1,close:null,open:null},_addDescribedBy:function(e,i){var s=(e.attr("aria-describedby")||"").split(/\s+/);s.push(i),e.data("ui-tooltip-id",i).attr("aria-describedby",t.trim(s.join(" ")))},_removeDescribedBy:function(e){var i=e.data("ui-tooltip-id"),s=(e.attr("aria-describedby")||"").split(/\s+/),n=t.inArray(i,s);-1!==n&&s.splice(n,1),e.removeData("ui-tooltip-id"),s=t.trim(s.join(" ")),s?e.attr("aria-describedby",s):e.removeAttr("aria-describedby")},_create:function(){this._on({mouseover:"open",focusin:"open"}),this.tooltips={},this.parents={},this.liveRegion=t("<div>").attr({role:"log","aria-live":"assertive","aria-relevant":"additions"}).appendTo(this.document[0].body),this._addClass(this.liveRegion,null,"ui-helper-hidden-accessible"),this.disabledTitles=t([])},_setOption:function(e,i){var s=this;this._super(e,i),"content"===e&&t.each(this.tooltips,function(t,e){s._updateContent(e.element)})},_setOptionDisabled:function(t){this[t?"_disable":"_enable"]()},_disable:function(){var e=this;t.each(this.tooltips,function(i,s){var n=t.Event("blur");n.target=n.currentTarget=s.element[0],e.close(n,!0)}),this.disabledTitles=this.disabledTitles.add(this.element.find(this.options.items).addBack().filter(function(){var e=t(this);return e.is("[title]")?e.data("ui-tooltip-title",e.attr("title")).removeAttr("title"):void 0}))},_enable:function(){this.disabledTitles.each(function(){var e=t(this);e.data("ui-tooltip-title")&&e.attr("title",e.data("ui-tooltip-title"))}),this.disabledTitles=t([])},open:function(e){var i=this,s=t(e?e.target:this.element).closest(this.options.items);s.length&&!s.data("ui-tooltip-id")&&(s.attr("title")&&s.data("ui-tooltip-title",s.attr("title")),s.data("ui-tooltip-open",!0),e&&"mouseover"===e.type&&s.parents().each(function(){var e,s=t(this);s.data("ui-tooltip-open")&&(e=t.Event("blur"),e.target=e.currentTarget=this,i.close(e,!0)),s.attr("title")&&(s.uniqueId(),i.parents[this.id]={element:this,title:s.attr("title")},s.attr("title",""))}),this._registerCloseHandlers(e,s),this._updateContent(s,e))},_updateContent:function(t,e){var i,s=this.options.content,n=this,o=e?e.type:null;return"string"==typeof s||s.nodeType||s.jquery?this._open(e,t,s):(i=s.call(t[0],function(i){n._delay(function(){t.data("ui-tooltip-open")&&(e&&(e.type=o),this._open(e,t,i))})}),i&&this._open(e,t,i),void 0)},_open:function(e,i,s){function n(t){l.of=t,a.is(":hidden")||a.position(l)}var o,a,r,h,l=t.extend({},this.options.position);if(s){if(o=this._find(i))return o.tooltip.find(".ui-tooltip-content").html(s),void 0;i.is("[title]")&&(e&&"mouseover"===e.type?i.attr("title",""):i.removeAttr("title")),o=this._tooltip(i),a=o.tooltip,this._addDescribedBy(i,a.attr("id")),a.find(".ui-tooltip-content").html(s),this.liveRegion.children().hide(),h=t("<div>").html(a.find(".ui-tooltip-content").html()),h.removeAttr("name").find("[name]").removeAttr("name"),h.removeAttr("id").find("[id]").removeAttr("id"),h.appendTo(this.liveRegion),this.options.track&&e&&/^mouse/.test(e.type)?(this._on(this.document,{mousemove:n}),n(e)):a.position(t.extend({of:i},this.options.position)),a.hide(),this._show(a,this.options.show),this.options.track&&this.options.show&&this.options.show.delay&&(r=this.delayedShow=setInterval(function(){a.is(":visible")&&(n(l.of),clearInterval(r))},t.fx.interval)),this._trigger("open",e,{tooltip:a})}},_registerCloseHandlers:function(e,i){var s={keyup:function(e){if(e.keyCode===t.ui.keyCode.ESCAPE){var s=t.Event(e);s.currentTarget=i[0],this.close(s,!0)}}};i[0]!==this.element[0]&&(s.remove=function(){this._removeTooltip(this._find(i).tooltip)}),e&&"mouseover"!==e.type||(s.mouseleave="close"),e&&"focusin"!==e.type||(s.focusout="close"),this._on(!0,i,s)},close:function(e){var i,s=this,n=t(e?e.currentTarget:this.element),o=this._find(n);return o?(i=o.tooltip,o.closing||(clearInterval(this.delayedShow),n.data("ui-tooltip-title")&&!n.attr("title")&&n.attr("title",n.data("ui-tooltip-title")),this._removeDescribedBy(n),o.hiding=!0,i.stop(!0),this._hide(i,this.options.hide,function(){s._removeTooltip(t(this))}),n.removeData("ui-tooltip-open"),this._off(n,"mouseleave focusout keyup"),n[0]!==this.element[0]&&this._off(n,"remove"),this._off(this.document,"mousemove"),e&&"mouseleave"===e.type&&t.each(this.parents,function(e,i){t(i.element).attr("title",i.title),delete s.parents[e]}),o.closing=!0,this._trigger("close",e,{tooltip:i}),o.hiding||(o.closing=!1)),void 0):(n.removeData("ui-tooltip-open"),void 0)},_tooltip:function(e){var i=t("<div>").attr("role","tooltip"),s=t("<div>").appendTo(i),n=i.uniqueId().attr("id");return this._addClass(s,"ui-tooltip-content"),this._addClass(i,"ui-tooltip","ui-widget ui-widget-content"),i.appendTo(this._appendTo(e)),this.tooltips[n]={element:e,tooltip:i}},_find:function(t){var e=t.data("ui-tooltip-id");return e?this.tooltips[e]:null},_removeTooltip:function(t){t.remove(),delete this.tooltips[t.attr("id")]},_appendTo:function(t){var e=t.closest(".ui-front, dialog");return e.length||(e=this.document[0].body),e},_destroy:function(){var e=this;t.each(this.tooltips,function(i,s){var n=t.Event("blur"),o=s.element;n.target=n.currentTarget=o[0],e.close(n,!0),t("#"+i).remove(),o.data("ui-tooltip-title")&&(o.attr("title")||o.attr("title",o.data("ui-tooltip-title")),o.removeData("ui-tooltip-title"))}),this.liveRegion.remove()}}),t.uiBackCompat!==!1&&t.widget("ui.tooltip",t.ui.tooltip,{options:{tooltipClass:null},_tooltip:function(){var t=this._superApply(arguments);return this.options.tooltipClass&&t.tooltip.addClass(this.options.tooltipClass),t}}),t.ui.tooltip});</script>
42028 <script>/*! jQuery UI Virtual Keyboard v1.26.22 *//*
42029Author: Jeremy Satterfield
42030Maintained: Rob Garrison (Mottie on github)
42031Licensed under the MIT License
42032
42033An on-screen virtual keyboard embedded within the browser window which
42034will popup when a specified entry field is focused. The user can then
42035type and preview their input before Accepting or Canceling.
42036
42037This plugin adds default class names to match jQuery UI theme styling.
42038Bootstrap & custom themes may also be applied - See
42039https://github.com/Mottie/Keyboard#themes
42040
42041Requires:
42042 jQuery v1.4.3+
42043 Caret plugin (included)
42044Optional:
42045 jQuery UI (position utility only) & CSS theme
42046 jQuery mousewheel
42047
42048Setup/Usage:
42049 Please refer to https://github.com/Mottie/Keyboard/wiki
42050
42051-----------------------------------------
42052Caret code modified from jquery.caret.1.02.js
42053Licensed under the MIT License:
42054http://www.opensource.org/licenses/mit-license.php
42055-----------------------------------------
42056*/
42057/*jshint browser:true, jquery:true, unused:false */
42058/*global require:false, define:false, module:false */
42059;(function (factory) {
42060 if (typeof define === 'function' && define.amd) {
42061 define(['jquery'], factory);
42062 } else if (typeof module === 'object' && typeof module.exports === 'object') {
42063 module.exports = factory(require('jquery'));
42064 } else {
42065 factory(jQuery);
42066 }
42067}(function ($) {
42068 'use strict';
42069 var $keyboard = $.keyboard = function (el, options) {
42070 var o, base = this;
42071
42072 base.version = '1.26.22';
42073
42074 // Access to jQuery and DOM versions of element
42075 base.$el = $(el);
42076 base.el = el;
42077
42078 // Add a reverse reference to the DOM object
42079 base.$el.data('keyboard', base);
42080
42081 base.init = function () {
42082 base.initialized = false;
42083 var k, position, tmp,
42084 kbcss = $keyboard.css,
42085 kbevents = $keyboard.events;
42086 base.settings = options || {};
42087 // shallow copy position to prevent performance issues; see #357
42088 if (options && options.position) {
42089 position = $.extend({}, options.position);
42090 options.position = null;
42091 }
42092 base.options = o = $.extend(true, {}, $keyboard.defaultOptions, options);
42093 if (position) {
42094 o.position = position;
42095 options.position = position;
42096 }
42097
42098 // keyboard is active (not destroyed);
42099 base.el.active = true;
42100 // unique keyboard namespace
42101 base.namespace = '.keyboard' + Math.random().toString(16).slice(2);
42102 // extension namespaces added here (to unbind listeners on base.$el upon destroy)
42103 base.extensionNamespace = [];
42104 // Shift and Alt key toggles, sets is true if a layout has more than one keyset
42105 // used for mousewheel message
42106 base.shiftActive = base.altActive = base.metaActive = base.sets = base.capsLock = false;
42107 // Class names of the basic key set - meta keysets are handled by the keyname
42108 base.rows = ['', '-shift', '-alt', '-alt-shift'];
42109
42110 base.inPlaceholder = base.$el.attr('placeholder') || '';
42111 // html 5 placeholder/watermark
42112 base.watermark = $keyboard.watermark && base.inPlaceholder !== '';
42113 // convert mouse repeater rate (characters per second) into a time in milliseconds.
42114 base.repeatTime = 1000 / (o.repeatRate || 20);
42115 // delay in ms to prevent mousedown & touchstart from both firing events at the same time
42116 o.preventDoubleEventTime = o.preventDoubleEventTime || 100;
42117 // flag indication that a keyboard is open
42118 base.isOpen = false;
42119 // is mousewheel plugin loaded?
42120 base.wheel = $.isFunction($.fn.mousewheel);
42121 // special character in regex that need to be escaped
42122 base.escapeRegex = /[-\/\\^$*+?.()|[\]{}]/g;
42123
42124 // keyCode of keys always allowed to be typed
42125 k = $keyboard.keyCodes;
42126 // base.alwaysAllowed = [20,33,34,35,36,37,38,39,40,45,46];
42127 base.alwaysAllowed = [
42128 k.capsLock,
42129 k.pageUp,
42130 k.pageDown,
42131 k.end,
42132 k.home,
42133 k.left,
42134 k.up,
42135 k.right,
42136 k.down,
42137 k.insert,
42138 k.delete
42139 ];
42140 base.$keyboard = [];
42141 // keyboard enabled; set to false on destroy
42142 base.enabled = true;
42143
42144 base.checkCaret = (o.lockInput || $keyboard.checkCaretSupport());
42145
42146 base.last = {
42147 start: 0,
42148 end: 0,
42149 key: '',
42150 val: '',
42151 preVal: '',
42152 layout: '',
42153 virtual: true,
42154 keyset: [false, false, false], // [shift, alt, meta]
42155 wheel_$Keys: null,
42156 wheelIndex: 0,
42157 wheelLayers: []
42158 };
42159 // used when building the keyboard - [keyset element, row, index]
42160 base.temp = ['', 0, 0];
42161
42162 // Callbacks
42163 $.each([
42164 kbevents.kbInit,
42165 kbevents.kbBeforeVisible,
42166 kbevents.kbVisible,
42167 kbevents.kbHidden,
42168 kbevents.inputCanceled,
42169 kbevents.inputAccepted,
42170 kbevents.kbBeforeClose,
42171 kbevents.inputRestricted
42172 ], function (i, callback) {
42173 if ($.isFunction(o[callback])) {
42174 // bind callback functions within options to triggered events
42175 base.$el.bind(callback + base.namespace + 'callbacks', o[callback]);
42176 }
42177 });
42178
42179 // Close with esc key & clicking outside
42180 if (o.alwaysOpen) {
42181 o.stayOpen = true;
42182 }
42183
42184 tmp = $(document);
42185 if (base.el.ownerDocument !== document) {
42186 tmp = tmp.add(base.el.ownerDocument);
42187 }
42188
42189 var bindings = 'keyup checkkeyboard mousedown touchstart ';
42190 if (o.closeByClickEvent) {
42191 bindings += 'click ';
42192 }
42193 // debounce bindings... see #542
42194 tmp.bind(bindings.split(' ').join(base.namespace + ' '), function(e) {
42195 clearTimeout(base.timer3);
42196 base.timer3 = setTimeout(function() {
42197 base.checkClose(e);
42198 }, 1);
42199 });
42200
42201 // Display keyboard on focus
42202 base.$el
42203 .addClass(kbcss.input + ' ' + o.css.input)
42204 .attr({
42205 'aria-haspopup': 'true',
42206 'role': 'textbox'
42207 });
42208
42209 // set lockInput if the element is readonly; or make the element readonly if lockInput is set
42210 if (o.lockInput || base.el.readOnly) {
42211 o.lockInput = true;
42212 base.$el
42213 .addClass(kbcss.locked)
42214 .attr({
42215 'readonly': 'readonly'
42216 });
42217 }
42218 // add disabled/readonly class - dynamically updated on reveal
42219 if (base.$el.is(':disabled') || (base.$el.attr('readonly') &&
42220 !base.$el.hasClass(kbcss.locked))) {
42221 base.$el.addClass(kbcss.noKeyboard);
42222 }
42223 if (o.openOn) {
42224 base.bindFocus();
42225 }
42226
42227 // Add placeholder if not supported by the browser
42228 if (!base.watermark && base.$el.val() === '' && base.inPlaceholder !== '' &&
42229 base.$el.attr('placeholder') !== '') {
42230 base.$el
42231 .addClass(kbcss.placeholder) // css watermark style (darker text)
42232 .val(base.inPlaceholder);
42233 }
42234
42235 base.$el.trigger(kbevents.kbInit, [base, base.el]);
42236
42237 // initialized with keyboard open
42238 if (o.alwaysOpen) {
42239 base.reveal();
42240 }
42241 base.initialized = true;
42242 };
42243
42244 base.toggle = function () {
42245 if (!base.hasKeyboard()) { return; }
42246 var $toggle = base.$keyboard.find('.' + $keyboard.css.keyToggle),
42247 locked = !base.enabled;
42248 // prevent physical keyboard from working
42249 base.$preview.prop('readonly', locked || base.options.lockInput);
42250 // disable all buttons
42251 base.$keyboard
42252 .toggleClass($keyboard.css.keyDisabled, locked)
42253 .find('.' + $keyboard.css.keyButton)
42254 .not($toggle)
42255 .prop('disabled', locked)
42256 .attr('aria-disabled', locked);
42257 $toggle.toggleClass($keyboard.css.keyDisabled, locked);
42258 // stop auto typing
42259 if (locked && base.typing_options) {
42260 base.typing_options.text = '';
42261 }
42262 // allow chaining
42263 return base;
42264 };
42265
42266 base.setCurrent = function () {
42267 var kbcss = $keyboard.css,
42268 // close any "isCurrent" keyboard (just in case they are always open)
42269 $current = $('.' + kbcss.isCurrent),
42270 kb = $current.data('keyboard');
42271 // close keyboard, if not self
42272 if (!$.isEmptyObject(kb) && kb.el !== base.el) {
42273 kb.close(kb.options.autoAccept ? 'true' : false);
42274 }
42275 $current.removeClass(kbcss.isCurrent);
42276 // ui-keyboard-has-focus is applied in case multiple keyboards have
42277 // alwaysOpen = true and are stacked
42278 $('.' + kbcss.hasFocus).removeClass(kbcss.hasFocus);
42279
42280 base.$el.addClass(kbcss.isCurrent);
42281 base.$keyboard.addClass(kbcss.hasFocus);
42282 base.isCurrent(true);
42283 base.isOpen = true;
42284 };
42285
42286 base.isCurrent = function (set) {
42287 var cur = $keyboard.currentKeyboard || false;
42288 if (set) {
42289 cur = $keyboard.currentKeyboard = base.el;
42290 } else if (set === false && cur === base.el) {
42291 cur = $keyboard.currentKeyboard = '';
42292 }
42293 return cur === base.el;
42294 };
42295
42296 base.hasKeyboard = function () {
42297 return base.$keyboard && base.$keyboard.length > 0;
42298 };
42299
42300 base.isVisible = function () {
42301 return base.hasKeyboard() ? base.$keyboard.is(':visible') : false;
42302 };
42303
42304 base.focusOn = function () {
42305 if (!base && base.el.active) {
42306 // keyboard was destroyed
42307 return;
42308 }
42309 if (!base.isVisible()) {
42310 clearTimeout(base.timer);
42311 base.reveal();
42312 } else {
42313 // keyboard already open, make it the current keyboard
42314 base.setCurrent();
42315 }
42316 };
42317
42318 // add redraw method to make API more clear
42319 base.redraw = function (layout) {
42320 if (layout) {
42321 // allow updating the layout by calling redraw
42322 base.options.layout = layout;
42323 }
42324 // update keyboard after a layout change
42325 if (base.$keyboard.length) {
42326
42327 base.last.preVal = '' + base.last.val;
42328 base.last.val = base.$preview && base.$preview.val() || base.$el.val();
42329 base.$el.val( base.last.val );
42330
42331 base.removeKeyboard();
42332 base.shiftActive = base.altActive = base.metaActive = false;
42333 }
42334 base.isOpen = o.alwaysOpen;
42335 base.reveal(true);
42336 return base;
42337 };
42338
42339 base.reveal = function (redraw) {
42340 var alreadyOpen = base.isOpen,
42341 kbcss = $keyboard.css;
42342 base.opening = !alreadyOpen;
42343 // remove all 'extra' keyboards by calling close function
42344 $('.' + kbcss.keyboard).not('.' + kbcss.alwaysOpen).each(function(){
42345 var kb = $(this).data('keyboard');
42346 if (!$.isEmptyObject(kb)) {
42347 // this closes previous keyboard when clicking another input - see #515
42348 kb.close(kb.options.autoAccept ? 'true' : false);
42349 }
42350 });
42351
42352 // Don't open if disabled
42353 if (base.$el.is(':disabled') || (base.$el.attr('readonly') && !base.$el.hasClass(kbcss.locked))) {
42354 base.$el.addClass(kbcss.noKeyboard);
42355 return;
42356 } else {
42357 base.$el.removeClass(kbcss.noKeyboard);
42358 }
42359
42360 // Unbind focus to prevent recursion - openOn may be empty if keyboard is opened externally
42361 if (o.openOn) {
42362 base.$el.unbind($.trim((o.openOn + ' ').split(/\s+/).join(base.namespace + ' ')));
42363 }
42364
42365 // build keyboard if it doesn't exist; or attach keyboard if it was removed, but not cleared
42366 if (!base.$keyboard || base.$keyboard &&
42367 (!base.$keyboard.length || $.contains(document.body, base.$keyboard[0]))) {
42368 base.startup();
42369 }
42370
42371 // clear watermark
42372 if (!base.watermark && base.el.value === base.inPlaceholder) {
42373 base.$el
42374 .removeClass(kbcss.placeholder)
42375 .val('');
42376 }
42377 // save starting content, in case we cancel
42378 base.originalContent = base.$el.val();
42379 base.$preview.val(base.originalContent);
42380
42381 // disable/enable accept button
42382 if (o.acceptValid) {
42383 base.checkValid();
42384 }
42385
42386 if (o.resetDefault) {
42387 base.shiftActive = base.altActive = base.metaActive = false;
42388 }
42389 base.showSet();
42390
42391 // beforeVisible event
42392 if (!base.isVisible()) {
42393 base.$el.trigger($keyboard.events.kbBeforeVisible, [base, base.el]);
42394 }
42395 if (
42396 base.initialized ||
42397 o.initialFocus ||
42398 ( !o.initialFocus && base.$el.hasClass($keyboard.css.initialFocus) )
42399 ) {
42400 base.setCurrent();
42401 }
42402 // update keyboard - enabled or disabled?
42403 base.toggle();
42404
42405 // show keyboard
42406 base.$keyboard.show();
42407
42408 // adjust keyboard preview window width - save width so IE won't keep expanding (fix issue #6)
42409 if (o.usePreview && $keyboard.msie) {
42410 if (typeof base.width === 'undefined') {
42411 base.$preview.hide(); // preview is 100% browser width in IE7, so hide the damn thing
42412 base.width = Math.ceil(base.$keyboard.width()); // set input width to match the widest keyboard row
42413 base.$preview.show();
42414 }
42415 base.$preview.width(base.width);
42416 }
42417
42418 base.reposition();
42419
42420 base.checkDecimal();
42421
42422 // get preview area line height
42423 // add roughly 4px to get line height from font height, works well for font-sizes from 14-36px
42424 // needed for textareas
42425 base.lineHeight = parseInt(base.$preview.css('lineHeight'), 10) ||
42426 parseInt(base.$preview.css('font-size'), 10) + 4;
42427
42428 if (o.caretToEnd) {
42429 base.saveCaret(base.originalContent.length, base.originalContent.length);
42430 }
42431
42432 // IE caret haxx0rs
42433 if ($keyboard.allie) {
42434 // sometimes end = 0 while start is > 0
42435 if (base.last.end === 0 && base.last.start > 0) {
42436 base.last.end = base.last.start;
42437 }
42438 // IE will have start -1, end of 0 when not focused (see demo: https://jsfiddle.net/Mottie/fgryQ/3/)
42439 if (base.last.start < 0) {
42440 // ensure caret is at the end of the text (needed for IE)
42441 base.last.start = base.last.end = base.originalContent.length;
42442 }
42443 }
42444
42445 if (alreadyOpen || redraw) {
42446 // restore caret position (userClosed)
42447 $keyboard.caret(base.$preview, base.last);
42448 return base;
42449 }
42450
42451 // opening keyboard flag; delay allows switching between keyboards without immediately closing
42452 // the keyboard
42453 base.timer2 = setTimeout(function () {
42454 var undef;
42455 base.opening = false;
42456 // Number inputs don't support selectionStart and selectionEnd
42457 // Number/email inputs don't support selectionStart and selectionEnd
42458 if (!/(number|email)/i.test(base.el.type) && !o.caretToEnd) {
42459 // caret position is always 0,0 in webkit; and nothing is focused at this point... odd
42460 // save caret position in the input to transfer it to the preview
42461 // inside delay to get correct caret position
42462 base.saveCaret(undef, undef, base.$el);
42463 }
42464 if (o.initialFocus || base.$el.hasClass($keyboard.css.initialFocus)) {
42465 $keyboard.caret(base.$preview, base.last);
42466 }
42467 // save event time for keyboards with stayOpen: true
42468 base.last.eventTime = new Date().getTime();
42469 base.$el.trigger($keyboard.events.kbVisible, [base, base.el]);
42470 base.timer = setTimeout(function () {
42471 // get updated caret information after visible event - fixes #331
42472 if (base) { // Check if base exists, this is a case when destroy is called, before timers fire
42473 base.saveCaret();
42474 }
42475 }, 200);
42476 }, 10);
42477 // return base to allow chaining in typing extension
42478 return base;
42479 };
42480
42481 base.updateLanguage = function () {
42482 // change language if layout is named something like 'french-azerty-1'
42483 var layouts = $keyboard.layouts,
42484 lang = o.language || layouts[o.layout] && layouts[o.layout].lang &&
42485 layouts[o.layout].lang || [o.language || 'en'],
42486 kblang = $keyboard.language;
42487
42488 // some languages include a dash, e.g. 'en-gb' or 'fr-ca'
42489 // allow o.language to be a string or array...
42490 // array is for future expansion where a layout can be set for multiple languages
42491 lang = ($.isArray(lang) ? lang[0] : lang).split('-')[0];
42492
42493 // set keyboard language
42494 o.display = $.extend(true, {},
42495 kblang.en.display,
42496 kblang[lang] && kblang[lang].display || {},
42497 base.settings.display
42498 );
42499 o.combos = $.extend(true, {},
42500 kblang.en.combos,
42501 kblang[lang] && kblang[lang].combos || {},
42502 base.settings.combos
42503 );
42504 o.wheelMessage = kblang[lang] && kblang[lang].wheelMessage || kblang.en.wheelMessage;
42505 // rtl can be in the layout or in the language definition; defaults to false
42506 o.rtl = layouts[o.layout] && layouts[o.layout].rtl || kblang[lang] && kblang[lang].rtl || false;
42507
42508 // save default regex (in case loading another layout changes it)
42509 base.regex = kblang[lang] && kblang[lang].comboRegex || $keyboard.comboRegex;
42510 // determine if US '.' or European ',' system being used
42511 base.decimal = /^\./.test(o.display.dec);
42512 base.$el
42513 .toggleClass('rtl', o.rtl)
42514 .css('direction', o.rtl ? 'rtl' : '');
42515 };
42516
42517 base.startup = function () {
42518 var kbcss = $keyboard.css;
42519 // ensure base.$preview is defined; but don't overwrite it if keyboard is always visible
42520 if (!((o.alwaysOpen || o.userClosed) && base.$preview)) {
42521 base.makePreview();
42522 }
42523 if (!base.hasKeyboard()) {
42524 // custom layout - create a unique layout name based on the hash
42525 if (o.layout === 'custom') {
42526 o.layoutHash = 'custom' + base.customHash();
42527 }
42528 base.layout = o.layout === 'custom' ? o.layoutHash : o.layout;
42529 base.last.layout = base.layout;
42530
42531 base.updateLanguage();
42532 if (typeof $keyboard.builtLayouts[base.layout] === 'undefined') {
42533 if ($.isFunction(o.create)) {
42534 // create must call buildKeyboard() function; or create it's own keyboard
42535 base.$keyboard = o.create(base);
42536 } else if (!base.$keyboard.length) {
42537 base.buildKeyboard(base.layout, true);
42538 }
42539 }
42540 base.$keyboard = $keyboard.builtLayouts[base.layout].$keyboard.clone();
42541 base.$keyboard.data('keyboard', base);
42542 if ((base.el.id || '') !== '') {
42543 // add ID to keyboard for styling purposes
42544 base.$keyboard.attr('id', base.el.id + $keyboard.css.idSuffix);
42545 }
42546
42547 base.makePreview();
42548 }
42549
42550 base.$decBtn = base.$keyboard.find('.' + kbcss.keyPrefix + 'dec');
42551 // add enter to allowed keys; fixes #190
42552 if (o.enterNavigation || base.el.nodeName === 'TEXTAREA') {
42553 base.alwaysAllowed.push(13);
42554 }
42555
42556 base.bindKeyboard();
42557
42558 base.$keyboard.appendTo(o.appendLocally ? base.$el.parent() : o.appendTo || 'body');
42559
42560 base.bindKeys();
42561
42562 // reposition keyboard on window resize
42563 if (o.reposition && $.ui && $.ui.position && o.appendTo == 'body') {
42564 $(window).bind('resize' + base.namespace, function () {
42565 base.reposition();
42566 });
42567 }
42568
42569 };
42570
42571 base.reposition = function () {
42572 base.position = $.isEmptyObject(o.position) ? false : o.position;
42573 // position after keyboard is visible (required for UI position utility)
42574 // and appropriately sized
42575 if ($.ui && $.ui.position && base.position) {
42576 base.position.of =
42577 // get single target position
42578 base.position.of ||
42579 // OR target stored in element data (multiple targets)
42580 base.$el.data('keyboardPosition') ||
42581 // OR default @ element
42582 base.$el;
42583 base.position.collision = base.position.collision || 'flipfit flipfit';
42584 base.position.at = o.usePreview ? o.position.at : o.position.at2;
42585 if (base.isVisible()) {
42586 base.$keyboard.position(base.position);
42587 }
42588 }
42589 // make chainable
42590 return base;
42591 };
42592
42593 base.makePreview = function () {
42594 if (o.usePreview) {
42595 var indx, attrs, attr, removedAttr,
42596 kbcss = $keyboard.css;
42597 base.$preview = base.$el.clone(false)
42598 .data('keyboard', base)
42599 .removeClass(kbcss.placeholder + ' ' + kbcss.input)
42600 .addClass(kbcss.preview + ' ' + o.css.input)
42601 .attr('tabindex', '-1')
42602 .show(); // for hidden inputs
42603 base.preview = base.$preview[0];
42604
42605 // Switch the number input field to text so the caret positioning will work again
42606 if (base.preview.type === 'number') {
42607 base.preview.type = 'text';
42608 }
42609
42610 // remove extraneous attributes.
42611 removedAttr = /^(data-|id|aria-haspopup)/i;
42612 attrs = base.$preview.get(0).attributes;
42613 for (indx = attrs.length - 1; indx >= 0; indx--) {
42614 attr = attrs[indx] && attrs[indx].name;
42615 if (removedAttr.test(attr)) {
42616 // remove data-attributes - see #351
42617 base.preview.removeAttribute(attr);
42618 }
42619 }
42620 // build preview container and append preview display
42621 $('<div />')
42622 .addClass(kbcss.wrapper)
42623 .append(base.$preview)
42624 .prependTo(base.$keyboard);
42625 } else {
42626 base.$preview = base.$el;
42627 base.preview = base.el;
42628 }
42629 };
42630
42631 // Added in v1.26.8 to allow chaining of the caret function, e.g.
42632 // keyboard.reveal().caret(4,5).insertText('test').caret('end');
42633 base.caret = function(param1, param2) {
42634 $keyboard.caret(base.$preview, param1, param2);
42635 return base;
42636 };
42637
42638 base.saveCaret = function (start, end, $el) {
42639 if (base.isCurrent()) {
42640 var p = $keyboard.caret($el || base.$preview, start, end);
42641 base.last.start = typeof start === 'undefined' ? p.start : start;
42642 base.last.end = typeof end === 'undefined' ? p.end : end;
42643 }
42644 };
42645
42646 base.setScroll = function () {
42647 // Set scroll so caret & current text is in view
42648 // needed for virtual keyboard typing, NOT manual typing - fixes #23
42649 if (base.last.virtual) {
42650
42651 var scrollWidth, clientWidth, adjustment, direction,
42652 isTextarea = base.preview.nodeName === 'TEXTAREA',
42653 value = base.last.val.substring(0, Math.max(base.last.start, base.last.end));
42654
42655 if (!base.$previewCopy) {
42656 // clone preview
42657 base.$previewCopy = base.$preview.clone()
42658 .removeAttr('id') // fixes #334
42659 .css({
42660 position: 'absolute',
42661 left: 0,
42662 zIndex: -10,
42663 visibility: 'hidden'
42664 })
42665 .addClass($keyboard.css.inputClone);
42666 // prevent submitting content on form submission
42667 base.$previewCopy[0].disabled = true;
42668 if (!isTextarea) {
42669 // make input zero-width because we need an accurate scrollWidth
42670 base.$previewCopy.css({
42671 'white-space': 'pre',
42672 'width': 0
42673 });
42674 }
42675 if (o.usePreview) {
42676 // add clone inside of preview wrapper
42677 base.$preview.after(base.$previewCopy);
42678 } else {
42679 // just slap that thing in there somewhere
42680 base.$keyboard.prepend(base.$previewCopy);
42681 }
42682 }
42683
42684 if (isTextarea) {
42685 // need the textarea scrollHeight, so set the clone textarea height to be the line height
42686 base.$previewCopy
42687 .height(base.lineHeight)
42688 .val(value);
42689 // set scrollTop for Textarea
42690 base.preview.scrollTop = base.lineHeight *
42691 (Math.floor(base.$previewCopy[0].scrollHeight / base.lineHeight) - 1);
42692 } else {
42693 // add non-breaking spaces
42694 base.$previewCopy.val(value.replace(/\s/g, '\xa0'));
42695
42696 // if scrollAdjustment option is set to "c" or "center" then center the caret
42697 adjustment = /c/i.test(o.scrollAdjustment) ? base.preview.clientWidth / 2 : o.scrollAdjustment;
42698 scrollWidth = base.$previewCopy[0].scrollWidth - 1;
42699
42700 // set initial state as moving right
42701 if (typeof base.last.scrollWidth === 'undefined') {
42702 base.last.scrollWidth = scrollWidth;
42703 base.last.direction = true;
42704 }
42705 // if direction = true; we're scrolling to the right
42706 direction = base.last.scrollWidth === scrollWidth ?
42707 base.last.direction :
42708 base.last.scrollWidth < scrollWidth;
42709 clientWidth = base.preview.clientWidth - adjustment;
42710
42711 // set scrollLeft for inputs; try to mimic the inherit caret positioning + scrolling:
42712 // hug right while scrolling right...
42713 if (direction) {
42714 if (scrollWidth < clientWidth) {
42715 base.preview.scrollLeft = 0;
42716 } else {
42717 base.preview.scrollLeft = scrollWidth - clientWidth;
42718 }
42719 } else {
42720 // hug left while scrolling left...
42721 if (scrollWidth >= base.preview.scrollWidth - clientWidth) {
42722 base.preview.scrollLeft = base.preview.scrollWidth - adjustment;
42723 } else if (scrollWidth - adjustment > 0) {
42724 base.preview.scrollLeft = scrollWidth - adjustment;
42725 } else {
42726 base.preview.scrollLeft = 0;
42727 }
42728 }
42729
42730 base.last.scrollWidth = scrollWidth;
42731 base.last.direction = direction;
42732 }
42733 }
42734 };
42735
42736 base.bindFocus = function () {
42737 if (o.openOn) {
42738 // make sure keyboard isn't destroyed
42739 // Check if base exists, this is a case when destroy is called, before timers have fired
42740 if (base && base.el.active) {
42741 base.$el.bind(o.openOn + base.namespace, function () {
42742 base.focusOn();
42743 });
42744 // remove focus from element (needed for IE since blur doesn't seem to work)
42745 if ($(':focus')[0] === base.el) {
42746 base.$el.blur();
42747 }
42748 }
42749 }
42750 };
42751
42752 base.bindKeyboard = function () {
42753 var evt,
42754 keyCodes = $keyboard.keyCodes,
42755 layout = $keyboard.builtLayouts[base.layout];
42756 base.$preview
42757 .unbind(base.namespace)
42758 .bind('click' + base.namespace + ' touchstart' + base.namespace, function () {
42759 if (o.alwaysOpen && !base.isCurrent()) {
42760 base.reveal();
42761 }
42762 // update last caret position after user click, use at least 150ms or it doesn't work in IE
42763 base.timer2 = setTimeout(function () {
42764 if (base){
42765 base.saveCaret();
42766 }
42767 }, 150);
42768
42769 })
42770 .bind('keypress' + base.namespace, function (e) {
42771 if (o.lockInput) {
42772 return false;
42773 }
42774 if (!base.isCurrent()) {
42775 return;
42776 }
42777
42778 var k = e.charCode || e.which,
42779 // capsLock can only be checked while typing a-z
42780 k1 = k >= keyCodes.A && k <= keyCodes.Z,
42781 k2 = k >= keyCodes.a && k <= keyCodes.z,
42782 str = base.last.key = String.fromCharCode(k);
42783 base.last.virtual = false;
42784 base.last.event = e;
42785 base.last.$key = []; // not a virtual keyboard key
42786 if (base.checkCaret) {
42787 base.saveCaret();
42788 }
42789
42790 // update capsLock
42791 if (k !== keyCodes.capsLock && (k1 || k2)) {
42792 base.capsLock = (k1 && !e.shiftKey) || (k2 && e.shiftKey);
42793 // if shifted keyset not visible, then show it
42794 if (base.capsLock && !base.shiftActive) {
42795 base.shiftActive = true;
42796 base.showSet();
42797 }
42798 }
42799
42800 // restrict input - keyCode in keypress special keys:
42801 // see http://www.asquare.net/javascript/tests/KeyCode.html
42802 if (o.restrictInput) {
42803 // allow navigation keys to work - Chrome doesn't fire a keypress event (8 = bksp)
42804 if ((e.which === keyCodes.backSpace || e.which === 0) &&
42805 $.inArray(e.keyCode, base.alwaysAllowed)) {
42806 return;
42807 }
42808 // quick key check
42809 if ($.inArray(str, layout.acceptedKeys) === -1) {
42810 e.preventDefault();
42811 // copy event object in case e.preventDefault() breaks when changing the type
42812 evt = $.extend({}, e);
42813 evt.type = $keyboard.events.inputRestricted;
42814 base.$el.trigger(evt, [base, base.el]);
42815 }
42816 } else if ((e.ctrlKey || e.metaKey) &&
42817 (e.which === keyCodes.A || e.which === keyCodes.C || e.which === keyCodes.V ||
42818 (e.which >= keyCodes.X && e.which <= keyCodes.Z))) {
42819 // Allow select all (ctrl-a), copy (ctrl-c), paste (ctrl-v) & cut (ctrl-x) &
42820 // redo (ctrl-y)& undo (ctrl-z); meta key for mac
42821 return;
42822 }
42823 // Mapped Keys - allows typing on a regular keyboard and the mapped key is entered
42824 // Set up a key in the layout as follows: 'm(a):label'; m = key to map, (a) = actual keyboard key
42825 // to map to (optional), ':label' = title/tooltip (optional)
42826 // example: \u0391 or \u0391(A) or \u0391:alpha or \u0391(A):alpha
42827 if (layout.hasMappedKeys && layout.mappedKeys.hasOwnProperty(str)) {
42828 base.last.key = layout.mappedKeys[str];
42829 base.insertText(base.last.key);
42830 e.preventDefault();
42831 }
42832 if (typeof o.beforeInsert === 'function') {
42833 base.insertText(base.last.key);
42834 e.preventDefault();
42835 }
42836 base.checkMaxLength();
42837
42838 })
42839 .bind('keyup' + base.namespace, function (e) {
42840 if (!base.isCurrent()) { return; }
42841 base.last.virtual = false;
42842 switch (e.which) {
42843 // Insert tab key
42844 case keyCodes.tab:
42845 // Added a flag to prevent from tabbing into an input, keyboard opening, then adding the tab
42846 // to the keyboard preview area on keyup. Sadly it still happens if you don't release the tab
42847 // key immediately because keydown event auto-repeats
42848 if (base.tab && o.tabNavigation && !o.lockInput) {
42849 base.shiftActive = e.shiftKey;
42850 // when switching inputs, the tab keyaction returns false
42851 var notSwitching = $keyboard.keyaction.tab(base);
42852 base.tab = false;
42853 if (!notSwitching) {
42854 return false;
42855 }
42856 } else {
42857 e.preventDefault();
42858 }
42859 break;
42860
42861 // Escape will hide the keyboard
42862 case keyCodes.escape:
42863 if (!o.ignoreEsc) {
42864 base.close(o.autoAccept && o.autoAcceptOnEsc ? 'true' : false);
42865 }
42866 return false;
42867 }
42868
42869 // throttle the check combo function because fast typers will have an incorrectly positioned caret
42870 clearTimeout(base.throttled);
42871 base.throttled = setTimeout(function () {
42872 // fix error in OSX? see issue #102
42873 if (base && base.isVisible()) {
42874 base.checkCombos();
42875 }
42876 }, 100);
42877
42878 base.checkMaxLength();
42879
42880 base.last.preVal = '' + base.last.val;
42881 base.last.val = base.$preview.val();
42882
42883 // don't alter "e" or the "keyup" event never finishes processing; fixes #552
42884 var event = jQuery.Event( $keyboard.events.kbChange );
42885 // base.last.key may be empty string (shift, enter, tab, etc) when keyboard is first visible
42886 // use e.key instead, if browser supports it
42887 event.action = base.last.key;
42888 base.$el.trigger(event, [base, base.el]);
42889
42890 // change callback is no longer bound to the input element as the callback could be
42891 // called during an external change event with all the necessary parameters (issue #157)
42892 if ($.isFunction(o.change)) {
42893 event.type = $keyboard.events.inputChange;
42894 o.change(event, base, base.el);
42895 return false;
42896 }
42897 if (o.acceptValid && o.autoAcceptOnValid) {
42898 if ($.isFunction(o.validate) && o.validate(base, base.$preview.val())) {
42899 base.$preview.blur();
42900 base.accept();
42901 }
42902 }
42903 })
42904 .bind('keydown' + base.namespace, function (e) {
42905 base.last.keyPress = e.which;
42906 // ensure alwaysOpen keyboards are made active
42907 if (o.alwaysOpen && !base.isCurrent()) {
42908 base.reveal();
42909 }
42910 // prevent tab key from leaving the preview window
42911 if (e.which === keyCodes.tab) {
42912 // allow tab to pass through - tab to next input/shift-tab for prev
42913 base.tab = true;
42914 return false;
42915 }
42916
42917 if (o.lockInput) {
42918 return false;
42919 }
42920
42921 base.last.virtual = false;
42922 switch (e.which) {
42923
42924 case keyCodes.backSpace:
42925 $keyboard.keyaction.bksp(base, null, e);
42926 e.preventDefault();
42927 break;
42928
42929 case keyCodes.enter:
42930 $keyboard.keyaction.enter(base, null, e);
42931 break;
42932
42933 // Show capsLock
42934 case keyCodes.capsLock:
42935 base.shiftActive = base.capsLock = !base.capsLock;
42936 base.showSet();
42937 break;
42938
42939 case keyCodes.V:
42940 // prevent ctrl-v/cmd-v
42941 if (e.ctrlKey || e.metaKey) {
42942 if (o.preventPaste) {
42943 e.preventDefault();
42944 return;
42945 }
42946 base.checkCombos(); // check pasted content
42947 }
42948 break;
42949 }
42950 })
42951 .bind('mouseup touchend '.split(' ').join(base.namespace + ' '), function () {
42952 base.last.virtual = true;
42953 base.saveCaret();
42954 });
42955
42956 // prevent keyboard event bubbling
42957 base.$keyboard.bind('mousedown click touchstart '.split(' ').join(base.namespace + ' '), function (e) {
42958 e.stopPropagation();
42959 if (!base.isCurrent()) {
42960 base.reveal();
42961 $(document).trigger('checkkeyboard' + base.namespace);
42962 }
42963 if (!o.noFocus && base.$preview) {
42964 base.$preview.focus();
42965 }
42966 });
42967
42968 // If preventing paste, block context menu (right click)
42969 if (o.preventPaste) {
42970 base.$preview.bind('contextmenu' + base.namespace, function (e) {
42971 e.preventDefault();
42972 });
42973 base.$el.bind('contextmenu' + base.namespace, function (e) {
42974 e.preventDefault();
42975 });
42976 }
42977
42978 };
42979
42980 base.bindKeys = function () {
42981 var kbcss = $keyboard.css;
42982 base.$allKeys = base.$keyboard.find('button.' + kbcss.keyButton)
42983 .unbind(base.namespace + ' ' + base.namespace + 'kb')
42984 // Change hover class and tooltip - moved this touchstart before option.keyBinding touchstart
42985 // to prevent mousewheel lag/duplication - Fixes #379 & #411
42986 .bind('mouseenter mouseleave touchstart '.split(' ').join(base.namespace + ' '), function (e) {
42987 if ((o.alwaysOpen || o.userClosed) && e.type !== 'mouseleave' && !base.isCurrent()) {
42988 base.reveal();
42989 if (!o.noFocus) {
42990 base.$preview.focus();
42991 }
42992 $keyboard.caret(base.$preview, base.last);
42993 }
42994 if (!base.isCurrent()) {
42995 return;
42996 }
42997 var $keys, txt,
42998 last = base.last,
42999 $this = $(this),
43000 type = e.type;
43001
43002 if (o.useWheel && base.wheel) {
43003 $keys = base.getLayers($this);
43004 txt = ($keys.length ? $keys.map(function () {
43005 return $(this).attr('data-value') || '';
43006 })
43007 .get() : '') || [$this.text()];
43008 last.wheel_$Keys = $keys;
43009 last.wheelLayers = txt;
43010 last.wheelIndex = $.inArray($this.attr('data-value'), txt);
43011 }
43012
43013 if ((type === 'mouseenter' || type === 'touchstart') && base.el.type !== 'password' &&
43014 !$this.hasClass(o.css.buttonDisabled)) {
43015 $this.addClass(o.css.buttonHover);
43016 if (o.useWheel && base.wheel) {
43017 $this.attr('title', function (i, t) {
43018 // show mouse wheel message
43019 return (base.wheel && t === '' && base.sets && txt.length > 1 && type !== 'touchstart') ?
43020 o.wheelMessage : t;
43021 });
43022 }
43023 }
43024 if (type === 'mouseleave') {
43025 // needed or IE flickers really bad
43026 $this.removeClass((base.el.type === 'password') ? '' : o.css.buttonHover);
43027 if (o.useWheel && base.wheel) {
43028 last.wheelIndex = 0;
43029 last.wheelLayers = [];
43030 last.wheel_$Keys = null;
43031 $this
43032 .attr('title', function (i, t) {
43033 return (t === o.wheelMessage) ? '' : t;
43034 })
43035 .html($this.attr('data-html')); // restore original button text
43036 }
43037 }
43038 })
43039 // keyBinding = 'mousedown touchstart' by default
43040 .bind(o.keyBinding.split(' ').join(base.namespace + ' ') + base.namespace + ' ' +
43041 $keyboard.events.kbRepeater, function (e) {
43042 e.preventDefault();
43043 // prevent errors when external triggers attempt to 'type' - see issue #158
43044 if (!base.$keyboard.is(':visible')) {
43045 return false;
43046 }
43047 var action, $keys,
43048 last = base.last,
43049 key = this,
43050 $key = $(key),
43051 // prevent mousedown & touchstart from both firing events at the same time - see #184
43052 timer = new Date().getTime();
43053
43054 if (o.useWheel && base.wheel) {
43055 // get keys from other layers/keysets (shift, alt, meta, etc) that line up by data-position
43056 $keys = last.wheel_$Keys;
43057 // target mousewheel selected key
43058 $key = $keys && last.wheelIndex > -1 ? $keys.eq(last.wheelIndex) : $key;
43059 }
43060 action = $key.attr('data-action');
43061 if (timer - (last.eventTime || 0) < o.preventDoubleEventTime) {
43062 return;
43063 }
43064 last.eventTime = timer;
43065 last.event = e;
43066 last.virtual = true;
43067 if (!o.noFocus) {
43068 base.$preview.focus();
43069 }
43070 last.$key = $key;
43071 last.key = $key.attr('data-value');
43072 last.keyPress = "";
43073 // Start caret in IE when not focused (happens with each virtual keyboard button click
43074 if (base.checkCaret) {
43075 $keyboard.caret(base.$preview, last);
43076 }
43077 if (/^meta/.test(action)) {
43078 action = 'meta';
43079 }
43080 // keyaction is added as a string, override original action & text
43081 if (action === last.key && typeof $keyboard.keyaction[action] === 'string') {
43082 last.key = action = $keyboard.keyaction[action];
43083 } else if (action in $keyboard.keyaction && $.isFunction($keyboard.keyaction[action])) {
43084 // stop processing if action returns false (close & cancel)
43085 if ($keyboard.keyaction[action](base, this, e) === false) {
43086 return false;
43087 }
43088 action = null; // prevent inserting action name
43089 }
43090 // stop processing if keyboard closed and keyaction did not return false - see #536
43091 if (!base.hasKeyboard()) {
43092 return false;
43093 }
43094 if (typeof action !== 'undefined' && action !== null) {
43095 last.key = $(this).hasClass(kbcss.keyAction) ? action : last.key;
43096 base.insertText(last.key);
43097 if (!base.capsLock && !o.stickyShift && !e.shiftKey) {
43098 base.shiftActive = false;
43099 base.showSet($key.attr('data-name'));
43100 }
43101 }
43102 // set caret if caret moved by action function; also, attempt to fix issue #131
43103 $keyboard.caret(base.$preview, last);
43104 base.checkCombos();
43105 e.type = $keyboard.events.kbChange;
43106 e.action = last.key;
43107 base.$el.trigger(e, [base, base.el]);
43108 last.preVal = '' + last.val;
43109 last.val = base.$preview.val();
43110
43111 if ($.isFunction(o.change)) {
43112 e.type = $keyboard.events.inputChange;
43113 o.change(e, base, base.el);
43114 // return false to prevent reopening keyboard if base.accept() was called
43115 return false;
43116 }
43117
43118 })
43119 // using 'kb' namespace for mouse repeat functionality to keep it separate
43120 // I need to trigger a 'repeater.keyboard' to make it work
43121 .bind('mouseup' + base.namespace + ' ' + 'mouseleave touchend touchmove touchcancel '.split(' ')
43122 .join(base.namespace + 'kb '), function (e) {
43123 base.last.virtual = true;
43124 var offset,
43125 $this = $(this);
43126 if (e.type === 'touchmove') {
43127 // if moving within the same key, don't stop repeating
43128 offset = $this.offset();
43129 offset.right = offset.left + $this.outerWidth();
43130 offset.bottom = offset.top + $this.outerHeight();
43131 if (e.originalEvent.touches[0].pageX >= offset.left &&
43132 e.originalEvent.touches[0].pageX < offset.right &&
43133 e.originalEvent.touches[0].pageY >= offset.top &&
43134 e.originalEvent.touches[0].pageY < offset.bottom) {
43135 return true;
43136 }
43137 } else if (/(mouseleave|touchend|touchcancel)/i.test(e.type)) {
43138 $this.removeClass(o.css.buttonHover); // needed for touch devices
43139 } else {
43140 if (!o.noFocus && base.isCurrent() && base.isVisible()) {
43141 base.$preview.focus();
43142 }
43143 if (base.checkCaret) {
43144 $keyboard.caret(base.$preview, base.last);
43145 }
43146 }
43147 base.mouseRepeat = [false, ''];
43148 clearTimeout(base.repeater); // make sure key repeat stops!
43149 if (o.acceptValid && o.autoAcceptOnValid) {
43150 if ($.isFunction(o.validate) && o.validate(base, base.$preview.val())) {
43151 base.$preview.blur();
43152 base.accept();
43153 }
43154 }
43155 return false;
43156 })
43157 // prevent form submits when keyboard is bound locally - issue #64
43158 .bind('click' + base.namespace, function () {
43159 return false;
43160 })
43161 // no mouse repeat for action keys (shift, ctrl, alt, meta, etc)
43162 .not('.' + kbcss.keyAction)
43163 // Allow mousewheel to scroll through other keysets of the same (non-action) key
43164 .bind('mousewheel' + base.namespace, function (e, delta) {
43165 if (o.useWheel && base.wheel) {
43166 // deltaY used by newer versions of mousewheel plugin
43167 delta = delta || e.deltaY;
43168 var n,
43169 txt = base.last.wheelLayers || [];
43170 if (txt.length > 1) {
43171 n = base.last.wheelIndex + (delta > 0 ? -1 : 1);
43172 if (n > txt.length - 1) {
43173 n = 0;
43174 }
43175 if (n < 0) {
43176 n = txt.length - 1;
43177 }
43178 } else {
43179 n = 0;
43180 }
43181 base.last.wheelIndex = n;
43182 $(this).html(txt[n]);
43183 return false;
43184 }
43185 })
43186 // mouse repeated action key exceptions
43187 .add('.' + kbcss.keyPrefix + ('tab bksp space enter'.split(' ')
43188 .join(',.' + kbcss.keyPrefix)), base.$keyboard)
43189 .bind('mousedown touchstart '.split(' ').join(base.namespace + 'kb '), function () {
43190 if (o.repeatRate !== 0) {
43191 var key = $(this);
43192 // save the key, make sure we are repeating the right one (fast typers)
43193 base.mouseRepeat = [true, key];
43194 setTimeout(function () {
43195 // don't repeat keys if it is disabled - see #431
43196 if (base && base.mouseRepeat[0] && base.mouseRepeat[1] === key && !key[0].disabled) {
43197 base.repeatKey(key);
43198 }
43199 }, o.repeatDelay);
43200 }
43201 return false;
43202 });
43203 };
43204
43205 // Insert text at caret/selection - thanks to Derek Wickwire for fixing this up!
43206 base.insertText = function (txt) {
43207 if (!base.$preview) { return; }
43208 if (typeof o.beforeInsert === 'function') {
43209 txt = o.beforeInsert(base.last.event, base, base.el, txt);
43210 }
43211 if (typeof txt === 'undefined' || txt === false) {
43212 base.last.key = '';
43213 return;
43214 }
43215 var bksp, t,
43216 isBksp = txt === '\b',
43217 // use base.$preview.val() instead of base.preview.value (val.length includes carriage returns in IE).
43218 val = base.$preview.val(),
43219 pos = $keyboard.caret(base.$preview),
43220 len = val.length; // save original content length
43221
43222 // silly IE caret hacks... it should work correctly, but navigating using arrow keys in a textarea
43223 // is still difficult
43224 // in IE, pos.end can be zero after input loses focus
43225 if (pos.end < pos.start) {
43226 pos.end = pos.start;
43227 }
43228 if (pos.start > len) {
43229 pos.end = pos.start = len;
43230 }
43231
43232 if (base.preview.nodeName === 'TEXTAREA') {
43233 // This makes sure the caret moves to the next line after clicking on enter (manual typing works fine)
43234 if ($keyboard.msie && val.substr(pos.start, 1) === '\n') {
43235 pos.start += 1;
43236 pos.end += 1;
43237 }
43238 }
43239
43240 if (txt === '{d}') {
43241 txt = '';
43242 t = pos.start;
43243 pos.end += 1;
43244 }
43245
43246 bksp = isBksp && pos.start === pos.end;
43247 txt = isBksp ? '' : txt;
43248 val = val.substr(0, pos.start - (bksp ? 1 : 0)) + txt + val.substr(pos.end);
43249 t = pos.start + (bksp ? -1 : txt.length);
43250
43251 base.$preview.val(val);
43252 base.saveCaret(t, t); // save caret in case of bksp
43253 base.setScroll();
43254 // see #506.. allow chaining of insertText
43255 return base;
43256 };
43257
43258 // check max length
43259 base.checkMaxLength = function () {
43260 if (!base.$preview) { return; }
43261 var start, caret,
43262 val = base.$preview.val();
43263 if (o.maxLength !== false && val.length > o.maxLength) {
43264 start = $keyboard.caret(base.$preview).start;
43265 caret = Math.min(start, o.maxLength);
43266
43267 // prevent inserting new characters when maxed #289
43268 if (!o.maxInsert) {
43269 val = base.last.val;
43270 caret = start - 1; // move caret back one
43271 }
43272
43273 base.$preview.val(val.substring(0, o.maxLength));
43274 // restore caret on change, otherwise it ends up at the end.
43275 base.saveCaret(caret, caret);
43276 }
43277 if (base.$decBtn.length) {
43278 base.checkDecimal();
43279 }
43280 // allow chaining
43281 return base;
43282 };
43283
43284 // mousedown repeater
43285 base.repeatKey = function (key) {
43286 key.trigger($keyboard.events.kbRepeater);
43287 if (base.mouseRepeat[0]) {
43288 base.repeater = setTimeout(function () {
43289 if (base){
43290 base.repeatKey(key);
43291 }
43292 }, base.repeatTime);
43293 }
43294 };
43295
43296 base.getKeySet = function () {
43297 var sets = [];
43298 if (base.altActive) {
43299 sets.push('alt');
43300 }
43301 if (base.shiftActive) {
43302 sets.push('shift');
43303 }
43304 if (base.metaActive) {
43305 // base.metaActive contains the string name of the
43306 // current meta keyset
43307 sets.push(base.metaActive);
43308 }
43309 return sets.length ? sets.join('+') : 'normal';
43310 };
43311
43312 // make it easier to switch keysets via API
43313 // showKeySet('shift+alt+meta1')
43314 base.showKeySet = function (str) {
43315 if (typeof str === 'string') {
43316 base.last.keyset = [base.shiftActive, base.altActive, base.metaActive];
43317 base.shiftActive = /shift/i.test(str);
43318 base.altActive = /alt/i.test(str);
43319 if (/\bmeta/.test(str)) {
43320 base.metaActive = true;
43321 base.showSet(str.match(/\bmeta[\w-]+/i)[0]);
43322 } else {
43323 base.metaActive = false;
43324 base.showSet();
43325 }
43326 } else {
43327 base.showSet(str);
43328 }
43329 // allow chaining
43330 return base;
43331 };
43332
43333 base.showSet = function (name) {
43334 if (!base.hasKeyboard()) { return; }
43335 o = base.options; // refresh options
43336 var kbcss = $keyboard.css,
43337 prefix = '.' + kbcss.keyPrefix,
43338 active = o.css.buttonActive,
43339 key = '',
43340 toShow = (base.shiftActive ? 1 : 0) + (base.altActive ? 2 : 0);
43341 if (!base.shiftActive) {
43342 base.capsLock = false;
43343 }
43344 // check meta key set
43345 if (base.metaActive) {
43346 // remove "-shift" and "-alt" from meta name if it exists
43347 if (base.shiftActive) {
43348 name = (name || "").replace("-shift", "");
43349 }
43350 if (base.altActive) {
43351 name = (name || "").replace("-alt", "");
43352 }
43353 // the name attribute contains the meta set name 'meta99'
43354 key = (/^meta/i.test(name)) ? name : '';
43355 // save active meta keyset name
43356 if (key === '') {
43357 key = (base.metaActive === true) ? '' : base.metaActive;
43358 } else {
43359 base.metaActive = key;
43360 }
43361 // if meta keyset doesn't have a shift or alt keyset, then show just the meta key set
43362 if ((!o.stickyShift && base.last.keyset[2] !== base.metaActive) ||
43363 ((base.shiftActive || base.altActive) &&
43364 !base.$keyboard.find('.' + kbcss.keySet + '-' + key + base.rows[toShow]).length)) {
43365 base.shiftActive = base.altActive = false;
43366 }
43367 } else if (!o.stickyShift && base.last.keyset[2] !== base.metaActive && base.shiftActive) {
43368 // switching from meta key set back to default, reset shift & alt if using stickyShift
43369 base.shiftActive = base.altActive = false;
43370 }
43371 toShow = (base.shiftActive ? 1 : 0) + (base.altActive ? 2 : 0);
43372 key = (toShow === 0 && !base.metaActive) ? '-normal' : (key === '') ? '' : '-' + key;
43373 if (!base.$keyboard.find('.' + kbcss.keySet + key + base.rows[toShow]).length) {
43374 // keyset doesn't exist, so restore last keyset settings
43375 base.shiftActive = base.last.keyset[0];
43376 base.altActive = base.last.keyset[1];
43377 base.metaActive = base.last.keyset[2];
43378 return;
43379 }
43380 base.$keyboard
43381 .find(prefix + 'alt,' + prefix + 'shift,.' + kbcss.keyAction + '[class*=meta]')
43382 .removeClass(active)
43383 .end()
43384 .find(prefix + 'alt')
43385 .toggleClass(active, base.altActive)
43386 .end()
43387 .find(prefix + 'shift')
43388 .toggleClass(active, base.shiftActive)
43389 .end()
43390 .find(prefix + 'lock')
43391 .toggleClass(active, base.capsLock)
43392 .end()
43393 .find('.' + kbcss.keySet)
43394 .hide()
43395 .end()
43396 .find('.' + (kbcss.keyAction + prefix + key).replace("--", "-"))
43397 .addClass(active);
43398
43399 // show keyset using inline-block ( extender layout will then line up )
43400 base.$keyboard.find('.' + kbcss.keySet + key + base.rows[toShow])[0].style.display = 'inline-block';
43401 if (base.metaActive) {
43402 base.$keyboard.find(prefix + base.metaActive)
43403 // base.metaActive contains the string "meta#" or false
43404 // without the !== false, jQuery UI tries to transition the classes
43405 .toggleClass(active, base.metaActive !== false);
43406 }
43407 base.last.keyset = [base.shiftActive, base.altActive, base.metaActive];
43408 base.$el.trigger($keyboard.events.kbKeysetChange, [base, base.el]);
43409 if (o.reposition) {
43410 base.reposition();
43411 }
43412 };
43413
43414 // check for key combos (dead keys)
43415 base.checkCombos = function () {
43416 // return val for close function
43417 if ( !(
43418 base.isVisible() || (
43419 base.hasKeyboard() &&
43420 base.$keyboard.hasClass( $keyboard.css.hasFocus )
43421 )
43422 ) ) {
43423 return ( base.$preview || base.$el ).val();
43424 }
43425 var r, t, t2,
43426 // use base.$preview.val() instead of base.preview.value (val.length includes carriage returns in IE).
43427 val = base.$preview.val(),
43428 pos = $keyboard.caret(base.$preview),
43429 layout = $keyboard.builtLayouts[base.layout],
43430 len = val.length; // save original content length
43431 // return if val is empty; fixes #352
43432 if (val === '') {
43433 // check valid on empty string - see #429
43434 if (o.acceptValid) {
43435 base.checkValid();
43436 }
43437 return val;
43438 }
43439
43440 // silly IE caret hacks... it should work correctly, but navigating using arrow keys in a textarea
43441 // is still difficult
43442 // in IE, pos.end can be zero after input loses focus
43443 if (pos.end < pos.start) {
43444 pos.end = pos.start;
43445 }
43446 if (pos.start > len) {
43447 pos.end = pos.start = len;
43448 }
43449 // This makes sure the caret moves to the next line after clicking on enter (manual typing works fine)
43450 if ($keyboard.msie && val.substr(pos.start, 1) === '\n') {
43451 pos.start += 1;
43452 pos.end += 1;
43453 }
43454
43455 if (o.useCombos) {
43456 // keep 'a' and 'o' in the regex for ae and oe ligature (æ,œ)
43457 // thanks to KennyTM: http://stackoverflow.com/q/4275077
43458 // original regex /([`\'~\^\"ao])([a-z])/mig moved to $.keyboard.comboRegex
43459 if ($keyboard.msie) {
43460 // old IE may not have the caret positioned correctly, so just check the whole thing
43461 val = val.replace(base.regex, function (s, accent, letter) {
43462 return (o.combos.hasOwnProperty(accent)) ? o.combos[accent][letter] || s : s;
43463 });
43464 // prevent combo replace error, in case the keyboard closes - see issue #116
43465 } else if (base.$preview.length) {
43466 // Modern browsers - check for combos from last two characters left of the caret
43467 t = pos.start - (pos.start - 2 >= 0 ? 2 : 0);
43468 // target last two characters
43469 $keyboard.caret(base.$preview, t, pos.end);
43470 // do combo replace
43471 t2 = ($keyboard.caret(base.$preview).text || '').replace(base.regex, function (s, accent, letter) {
43472 return (o.combos.hasOwnProperty(accent)) ? o.combos[accent][letter] || s : s;
43473 });
43474 // add combo back
43475 t = $keyboard.caret(base.$preview);
43476 // prevent error if caret doesn't return a function
43477 if (t && t.replaceStr) {
43478 base.$preview.val(t.replaceStr(t2));
43479 }
43480 val = base.$preview.val();
43481 }
43482 }
43483
43484 // check input restrictions - in case content was pasted
43485 if (o.restrictInput && val !== '') {
43486 t = layout.acceptedKeys.length;
43487
43488 r = layout.acceptedKeysRegex;
43489 if (!r) {
43490 t2 = $.map(layout.acceptedKeys, function (v) {
43491 // escape any special characters
43492 return v.replace(base.escapeRegex, '\\$&');
43493 });
43494 r = layout.acceptedKeysRegex = new RegExp('(' + t2.join('|') + ')', 'g');
43495 }
43496
43497 // only save matching keys
43498 t2 = val.match(r);
43499 if (t2) {
43500 val = t2.join('');
43501 } else {
43502 // no valid characters
43503 val = '';
43504 len = 0;
43505 }
43506 }
43507
43508 // save changes, then reposition caret
43509 pos.start += val.length - len;
43510 pos.end += val.length - len;
43511 base.$preview.val(val);
43512 base.saveCaret(pos.start, pos.end);
43513 // set scroll to keep caret in view
43514 base.setScroll();
43515
43516 base.checkMaxLength();
43517
43518 if (o.acceptValid) {
43519 base.checkValid();
43520 }
43521
43522 return val; // return text, used for keyboard closing section
43523 };
43524
43525 // Toggle accept button classes, if validating
43526 base.checkValid = function () {
43527 var kbcss = $keyboard.css,
43528 $accept = base.$keyboard.find('.' + kbcss.keyPrefix + 'accept'),
43529 valid = true;
43530 if ($.isFunction(o.validate)) {
43531 valid = o.validate(base, base.$preview.val(), false);
43532 }
43533 // toggle accept button classes; defined in the css
43534 $accept
43535 .toggleClass(kbcss.inputInvalid, !valid)
43536 .toggleClass(kbcss.inputValid, valid)
43537 // update title to indicate that the entry is valid or invalid
43538 .attr('title', $accept.attr('data-title') + ' (' + o.display[valid ? 'valid' : 'invalid'] + ')');
43539 };
43540
43541 // Decimal button for num pad - only allow one (not used by default)
43542 base.checkDecimal = function () {
43543 // Check US '.' or European ',' format
43544 if ((base.decimal && /\./g.test(base.preview.value)) ||
43545 (!base.decimal && /\,/g.test(base.preview.value))) {
43546 base.$decBtn
43547 .attr({
43548 'disabled': 'disabled',
43549 'aria-disabled': 'true'
43550 })
43551 .removeClass(o.css.buttonHover)
43552 .addClass(o.css.buttonDisabled);
43553 } else {
43554 base.$decBtn
43555 .removeAttr('disabled')
43556 .attr({
43557 'aria-disabled': 'false'
43558 })
43559 .addClass(o.css.buttonDefault)
43560 .removeClass(o.css.buttonDisabled);
43561 }
43562 };
43563
43564 // get other layer values for a specific key
43565 base.getLayers = function ($el) {
43566 var kbcss = $keyboard.css,
43567 key = $el.attr('data-pos'),
43568 $keys = $el.closest('.' + kbcss.keyboard)
43569 .find('button[data-pos="' + key + '"]');
43570 return $keys.filter(function () {
43571 return $(this)
43572 .find('.' + kbcss.keyText)
43573 .text() !== '';
43574 })
43575 .add($el);
43576 };
43577
43578 // Go to next or prev inputs
43579 // goToNext = true, then go to next input; if false go to prev
43580 // isAccepted is from autoAccept option or true if user presses shift+enter
43581 base.switchInput = function (goToNext, isAccepted) {
43582 if ($.isFunction(o.switchInput)) {
43583 o.switchInput(base, goToNext, isAccepted);
43584 } else {
43585 // base.$keyboard may be an empty array - see #275 (apod42)
43586 if (base.$keyboard.length) {
43587 base.$keyboard.hide();
43588 }
43589 var kb,
43590 stopped = false,
43591 all = $('button, input, select, textarea, a')
43592 .filter(':visible')
43593 .not(':disabled'),
43594 indx = all.index(base.$el) + (goToNext ? 1 : -1);
43595 if (base.$keyboard.length) {
43596 base.$keyboard.show();
43597 }
43598 if (indx > all.length - 1) {
43599 stopped = o.stopAtEnd;
43600 indx = 0; // go to first input
43601 }
43602 if (indx < 0) {
43603 stopped = o.stopAtEnd;
43604 indx = all.length - 1; // stop or go to last
43605 }
43606 if (!stopped) {
43607 isAccepted = base.close(isAccepted);
43608 if (!isAccepted) {
43609 return;
43610 }
43611 kb = all.eq(indx).data('keyboard');
43612 if (kb && kb.options.openOn.length) {
43613 kb.focusOn();
43614 } else {
43615 all.eq(indx).focus();
43616 }
43617 }
43618 }
43619 return false;
43620 };
43621
43622 // Close the keyboard, if visible. Pass a status of true, if the content was accepted
43623 // (for the event trigger).
43624 base.close = function (accepted) {
43625 if (base.isOpen && base.$keyboard.length) {
43626 clearTimeout(base.throttled);
43627 var kbcss = $keyboard.css,
43628 kbevents = $keyboard.events,
43629 val = (accepted) ? base.checkCombos() : base.originalContent;
43630 // validate input if accepted
43631 if (accepted && $.isFunction(o.validate) && !o.validate(base, val, true)) {
43632 val = base.originalContent;
43633 accepted = false;
43634 if (o.cancelClose) {
43635 return;
43636 }
43637 }
43638 base.isCurrent(false);
43639 base.isOpen = o.alwaysOpen || o.userClosed;
43640 // update value for always open keyboards
43641 base.$preview.val(val);
43642 base.$el
43643 .removeClass(kbcss.isCurrent + ' ' + kbcss.inputAutoAccepted)
43644 // add 'ui-keyboard-autoaccepted' to inputs - see issue #66
43645 .addClass((accepted || false) ? accepted === true ? '' : kbcss.inputAutoAccepted : '')
43646 .val(val)
43647 // trigger default change event - see issue #146
43648 .trigger(kbevents.inputChange);
43649 // don't trigger an empty event - see issue #463
43650 if (!o.alwaysOpen) {
43651 // don't trigger beforeClose if keyboard is always open
43652 base.$el.trigger(kbevents.kbBeforeClose, [base, base.el, (accepted || false)]);
43653 }
43654 // save caret after updating value (fixes userClosed issue with changing focus)
43655 $keyboard.caret(base.$preview, base.last);
43656
43657 base.$el
43658 .trigger(((accepted || false) ? kbevents.inputAccepted : kbevents.inputCanceled), [base, base.el])
43659 .trigger((o.alwaysOpen) ? kbevents.kbInactive : kbevents.kbHidden, [base, base.el])
43660 .blur();
43661
43662 // base is undefined if keyboard was destroyed - fixes #358
43663 if (base) {
43664 // add close event time
43665 base.last.eventTime = new Date().getTime();
43666 if (!(o.alwaysOpen || o.userClosed && accepted === 'true') && base.$keyboard.length) {
43667 // free up memory
43668 base.removeKeyboard();
43669 // rebind input focus - delayed to fix IE issue #72
43670 base.timer = setTimeout(function () {
43671 if (base) {
43672 base.bindFocus();
43673 }
43674 }, 500);
43675 }
43676 if (!base.watermark && base.el.value === '' && base.inPlaceholder !== '') {
43677 base.$el
43678 .addClass(kbcss.placeholder)
43679 .val(base.inPlaceholder);
43680 }
43681 }
43682 }
43683 return !!accepted;
43684 };
43685
43686 base.accept = function () {
43687 return base.close(true);
43688 };
43689
43690 base.checkClose = function (e) {
43691 if (base.opening) {
43692 return;
43693 }
43694 base.escClose(e);
43695 var kbcss = $.keyboard.css,
43696 $target = $(e.target);
43697 // needed for IE to allow switching between keyboards smoothly
43698 if ($target.hasClass(kbcss.input)) {
43699 var kb = $target.data('keyboard');
43700 // only trigger on self
43701 if (
43702 kb !== base &&
43703 !kb.$el.hasClass(kbcss.isCurrent) &&
43704 kb.options.openOn &&
43705 e.type === o.openOn
43706 ) {
43707 kb.focusOn();
43708 }
43709 }
43710 };
43711
43712 base.escClose = function (e) {
43713 if (e && e.type === 'keyup') {
43714 return (e.which === $keyboard.keyCodes.escape && !o.ignoreEsc) ?
43715 base.close(o.autoAccept && o.autoAcceptOnEsc ? 'true' : false) :
43716 '';
43717 }
43718 // keep keyboard open if alwaysOpen or stayOpen is true - fixes mutliple always open keyboards or
43719 // single stay open keyboard
43720 if (!base.isOpen) {
43721 return;
43722 }
43723 // ignore autoaccept if using escape - good idea?
43724 if (!base.isCurrent() && base.isOpen || base.isOpen && e.target !== base.el) {
43725 // don't close if stayOpen is set; but close if a different keyboard is being opened
43726 if ((o.stayOpen || o.userClosed) && !$(e.target).hasClass($keyboard.css.input)) {
43727 return;
43728 }
43729 // stop propogation in IE - an input getting focus doesn't open a keyboard if one is already open
43730 if ($keyboard.allie) {
43731 e.preventDefault();
43732 }
43733 if (o.closeByClickEvent) {
43734 // only close the keyboard if the user is clicking on an input or if he causes a click
43735 // event (touchstart/mousedown will not force the close with this setting)
43736 var name = e.target.nodeName.toLowerCase();
43737 if (name === 'input' || name === 'textarea' || e.type === 'click') {
43738 base.close(o.autoAccept ? 'true' : false);
43739 }
43740 } else {
43741 // send 'true' instead of a true (boolean), the input won't get a 'ui-keyboard-autoaccepted'
43742 // class name - see issue #66
43743 base.close(o.autoAccept ? 'true' : false);
43744 }
43745 }
43746 };
43747
43748 // Build default button
43749 base.keyBtn = $('<button />')
43750 .attr({
43751 'role': 'button',
43752 'type': 'button',
43753 'aria-disabled': 'false',
43754 'tabindex': '-1'
43755 })
43756 .addClass($keyboard.css.keyButton);
43757
43758 // convert key names into a class name
43759 base.processName = function (name) {
43760 var index, n,
43761 process = (name || '').replace(/[^a-z0-9-_]/gi, ''),
43762 len = process.length,
43763 newName = [];
43764 if (len > 1 && name === process) {
43765 // return name if basic text
43766 return name;
43767 }
43768 // return character code sequence
43769 len = name.length;
43770 if (len) {
43771 for (index = 0; index < len; index++) {
43772 n = name[index];
43773 // keep '-' and '_'... so for dash, we get two dashes in a row
43774 newName.push(/[a-z0-9-_]/i.test(n) ?
43775 (/[-_]/.test(n) && index !== 0 ? '' : n) :
43776 (index === 0 ? '' : '-') + n.charCodeAt(0)
43777 );
43778 }
43779 return newName.join('');
43780 } else {
43781 return name;
43782 }
43783 };
43784
43785 base.processKeys = function (name) {
43786 var tmp,
43787 parts = name.split(':'),
43788 data = {
43789 name: null,
43790 map: '',
43791 title: ''
43792 };
43793 /* map defined keys
43794 format 'key(A):Label_for_key_(ignore_parentheses_here)'
43795 'key' = key that is seen (can any character(s); but it might need to be escaped using '\'
43796 or entered as unicode '\u####'
43797 '(A)' = the actual key on the real keyboard to remap
43798 ':Label_for_key' ends up in the title/tooltip
43799 Examples:
43800 '\u0391(A):alpha', 'x(y):this_(might)_cause_problems
43801 or edge cases of ':(x)', 'x(:)', 'x(()' or 'x())'
43802 Enhancement (if I can get alt keys to work):
43803 A mapped key will include the mod key, e.g. 'x(alt-x)' or 'x(alt-shift-x)'
43804 */
43805 if (/\(.+\)/.test(parts[0]) || /^:\(.+\)/.test(name) || /\([(:)]\)/.test(name)) {
43806 // edge cases 'x(:)', 'x(()' or 'x())'
43807 if (/\([(:)]\)/.test(name)) {
43808 tmp = parts[0].match(/([^(]+)\((.+)\)/);
43809 if (tmp && tmp.length) {
43810 data.name = tmp[1];
43811 data.map = tmp[2];
43812 data.title = parts.length > 1 ? parts.slice(1).join(':') : '';
43813 } else {
43814 // edge cases 'x(:)', ':(x)' or ':(:)'
43815 data.name = name.match(/([^(]+)/)[0];
43816 if (data.name === ':') {
43817 // ':(:):test' => parts = [ '', '(', ')', 'title' ] need to slice 1
43818 parts = parts.slice(1);
43819 }
43820 if (tmp === null) {
43821 // 'x(:):test' => parts = [ 'x(', ')', 'title' ] need to slice 2
43822 data.map = ':';
43823 parts = parts.slice(2);
43824 }
43825 data.title = parts.length ? parts.join(':') : '';
43826 }
43827 } else {
43828 // example: \u0391(A):alpha; extract 'A' from '(A)'
43829 data.map = name.match(/\(([^()]+?)\)/)[1];
43830 // remove '(A)', left with '\u0391:alpha'
43831 name = name.replace(/\(([^()]+)\)/, '');
43832 tmp = name.split(':');
43833 // get '\u0391' from '\u0391:alpha'
43834 if (tmp[0] === '') {
43835 data.name = ':';
43836 parts = parts.slice(1);
43837 } else {
43838 data.name = tmp[0];
43839 }
43840 data.title = parts.length > 1 ? parts.slice(1).join(':') : '';
43841 }
43842 } else {
43843 // find key label
43844 // corner case of '::;' reduced to ':;', split as ['', ';']
43845 if (name !== '' && parts[0] === '') {
43846 data.name = ':';
43847 parts = parts.slice(1);
43848 } else {
43849 data.name = parts[0];
43850 }
43851 data.title = parts.length > 1 ? parts.slice(1).join(':') : '';
43852 }
43853 data.title = $.trim(data.title).replace(/_/g, ' ');
43854 return data;
43855 };
43856
43857 // Add key function
43858 // keyName = the name of the function called in $.keyboard.keyaction when the button is clicked
43859 // name = name added to key, or cross-referenced in the display options
43860 // base.temp[0] = keyset to attach the new button
43861 // regKey = true when it is not an action key
43862 base.addKey = function (keyName, action, regKey) {
43863 var keyClass, tmp, keys,
43864 data = {},
43865 txt = base.processKeys(regKey ? keyName : action),
43866 kbcss = $keyboard.css;
43867
43868 if (!regKey && o.display[txt.name]) {
43869 keys = base.processKeys(o.display[txt.name]);
43870 // action contained in "keyName" (e.g. keyName = "accept",
43871 // action = "a" (use checkmark instead of text))
43872 keys.action = base.processKeys(keyName).name;
43873 } else {
43874 // when regKey is true, keyName is the same as action
43875 keys = txt;
43876 keys.action = txt.name;
43877 }
43878
43879 data.name = base.processName(txt.name);
43880
43881 if (keys.map !== '') {
43882 $keyboard.builtLayouts[base.layout].mappedKeys[keys.map] = keys.name;
43883 $keyboard.builtLayouts[base.layout].acceptedKeys.push(keys.name);
43884 } else if (regKey) {
43885 $keyboard.builtLayouts[base.layout].acceptedKeys.push(keys.name);
43886 }
43887
43888 if (regKey) {
43889 keyClass = data.name === '' ? '' : kbcss.keyPrefix + data.name;
43890 } else {
43891 // Action keys will have the 'ui-keyboard-actionkey' class
43892 keyClass = kbcss.keyAction + ' ' + kbcss.keyPrefix + keys.action;
43893 }
43894 // '\u2190'.length = 1 because the unicode is converted, so if more than one character,
43895 // add the wide class
43896 keyClass += (keys.name.length > 2 ? ' ' + kbcss.keyWide : '') + ' ' + o.css.buttonDefault;
43897
43898 data.html = '<span class="' + kbcss.keyText + '">' +
43899 // this prevents HTML from being added to the key
43900 keys.name.replace(/[\u00A0-\u9999]/gim, function (i) {
43901 return '&#' + i.charCodeAt(0) + ';';
43902 }) +
43903 '</span>';
43904
43905 data.$key = base.keyBtn
43906 .clone()
43907 .attr({
43908 'data-value': regKey ? keys.name : keys.action, // value
43909 'data-name': keys.action,
43910 'data-pos': base.temp[1] + ',' + base.temp[2],
43911 'data-action': keys.action,
43912 'data-html': data.html
43913 })
43914 // add 'ui-keyboard-' + data.name for all keys
43915 // (e.g. 'Bksp' will have 'ui-keyboard-bskp' class)
43916 // any non-alphanumeric characters will be replaced with
43917 // their decimal unicode value
43918 // (e.g. '~' is a regular key, class = 'ui-keyboard-126'
43919 // (126 is the unicode decimal value - same as &#126;)
43920 // See https://en.wikipedia.org/wiki/List_of_Unicode_characters#Control_codes
43921 .addClass(keyClass)
43922 .html(data.html)
43923 .appendTo(base.temp[0]);
43924
43925 if (keys.map) {
43926 data.$key.attr('data-mapped', keys.map);
43927 }
43928 if (keys.title || txt.title) {
43929 data.$key.attr({
43930 'data-title': txt.title || keys.title, // used to allow adding content to title
43931 'title': txt.title || keys.title
43932 });
43933 }
43934
43935 if (typeof o.buildKey === 'function') {
43936 data = o.buildKey(base, data);
43937 // copy html back to attributes
43938 tmp = data.$key.html();
43939 data.$key.attr('data-html', tmp);
43940 }
43941 return data.$key;
43942 };
43943
43944 base.customHash = function (layout) {
43945 /*jshint bitwise:false */
43946 var i, array, hash, character, len,
43947 arrays = [],
43948 merged = [];
43949 // pass layout to allow for testing
43950 layout = typeof layout === 'undefined' ? o.customLayout : layout;
43951 // get all layout arrays
43952 for (array in layout) {
43953 if (layout.hasOwnProperty(array)) {
43954 arrays.push(layout[array]);
43955 }
43956 }
43957 // flatten array
43958 merged = merged.concat.apply(merged, arrays).join(' ');
43959 // produce hash name - http://stackoverflow.com/a/7616484/145346
43960 hash = 0;
43961 len = merged.length;
43962 if (len === 0) {
43963 return hash;
43964 }
43965 for (i = 0; i < len; i++) {
43966 character = merged.charCodeAt(i);
43967 hash = ((hash << 5) - hash) + character;
43968 hash = hash & hash; // Convert to 32bit integer
43969 }
43970 return hash;
43971 };
43972
43973 base.buildKeyboard = function (name, internal) {
43974 // o.display is empty when this is called from the scramble extension (when alwaysOpen:true)
43975 if ($.isEmptyObject(o.display)) {
43976 // set keyboard language
43977 base.updateLanguage();
43978 }
43979 var row, $row, currentSet,
43980 kbcss = $keyboard.css,
43981 sets = 0,
43982 layout = $keyboard.builtLayouts[name || base.layout || o.layout] = {
43983 mappedKeys: {},
43984 acceptedKeys: []
43985 },
43986 acceptedKeys = layout.acceptedKeys = o.restrictInclude ?
43987 ('' + o.restrictInclude).split(/\s+/) || [] :
43988 [],
43989 // using $layout temporarily to hold keyboard popup classnames
43990 $layout = kbcss.keyboard + ' ' + o.css.popup + ' ' + o.css.container +
43991 (o.alwaysOpen || o.userClosed ? ' ' + kbcss.alwaysOpen : ''),
43992
43993 container = $('<div />')
43994 .addClass($layout)
43995 .attr({
43996 'role': 'textbox'
43997 })
43998 .hide();
43999 // verify layout or setup custom keyboard
44000 if ((internal && o.layout === 'custom') || !$keyboard.layouts.hasOwnProperty(o.layout)) {
44001 o.layout = 'custom';
44002 $layout = $keyboard.layouts.custom = o.customLayout || {
44003 'normal': ['{cancel}']
44004 };
44005 } else {
44006 $layout = $keyboard.layouts[internal ? o.layout : name || base.layout || o.layout];
44007 }
44008
44009 // Main keyboard building loop
44010 $.each($layout, function (set, keySet) {
44011 // skip layout name & lang settings
44012 if (set !== '' && !/^(name|lang|rtl)$/i.test(set)) {
44013 // keep backwards compatibility for change from default to normal naming
44014 if (set === 'default') {
44015 set = 'normal';
44016 }
44017 sets++;
44018 $row = $('<div />')
44019 .attr('name', set) // added for typing extension
44020 .addClass(kbcss.keySet + ' ' + kbcss.keySet + '-' + set)
44021 .appendTo(container)
44022 .toggle(set === 'normal');
44023
44024 for (row = 0; row < keySet.length; row++) {
44025 // remove extra spaces before spliting (regex probably could be improved)
44026 currentSet = $.trim(keySet[row]).replace(/\{(\.?)[\s+]?:[\s+]?(\.?)\}/g, '{$1:$2}');
44027 base.buildRow($row, row, currentSet.split(/\s+/), acceptedKeys);
44028 $row.find('.' + kbcss.keyButton + ',.' + kbcss.keySpacer)
44029 .filter(':last')
44030 .after('<br class="' + kbcss.endRow + '"/>');
44031 }
44032 }
44033 });
44034
44035 if (sets > 1) {
44036 base.sets = true;
44037 }
44038 layout.hasMappedKeys = !($.isEmptyObject(layout.mappedKeys));
44039 layout.$keyboard = container;
44040 return container;
44041 };
44042
44043 base.buildRow = function ($row, row, keys, acceptedKeys) {
44044 var t, txt, key, isAction, action, margin,
44045 kbcss = $keyboard.css;
44046 for (key = 0; key < keys.length; key++) {
44047 // used by addKey function
44048 base.temp = [$row, row, key];
44049 isAction = false;
44050
44051 // ignore empty keys
44052 if (keys[key].length === 0) {
44053 continue;
44054 }
44055
44056 // process here if it's an action key
44057 if (/^\{\S+\}$/.test(keys[key])) {
44058 action = keys[key].match(/^\{(\S+)\}$/)[1];
44059 // add active class if there are double exclamation points in the name
44060 if (/\!\!/.test(action)) {
44061 action = action.replace('!!', '');
44062 isAction = true;
44063 }
44064
44065 // add empty space
44066 if (/^sp:((\d+)?([\.|,]\d+)?)(em|px)?$/i.test(action)) {
44067 // not perfect globalization, but allows you to use {sp:1,1em}, {sp:1.2em} or {sp:15px}
44068 margin = parseFloat(action
44069 .replace(/,/, '.')
44070 .match(/^sp:((\d+)?([\.|,]\d+)?)(em|px)?$/i)[1] || 0
44071 );
44072 $('<span class="' + kbcss.keyText + '"></span>')
44073 // previously {sp:1} would add 1em margin to each side of a 0 width span
44074 // now Firefox doesn't seem to render 0px dimensions, so now we set the
44075 // 1em margin x 2 for the width
44076 .width((action.match(/px/i) ? margin + 'px' : (margin * 2) + 'em'))
44077 .addClass(kbcss.keySpacer)
44078 .appendTo($row);
44079 }
44080
44081 // add empty button
44082 if (/^empty(:((\d+)?([\.|,]\d+)?)(em|px)?)?$/i.test(action)) {
44083 margin = (/:/.test(action)) ? parseFloat(action
44084 .replace(/,/, '.')
44085 .match(/^empty:((\d+)?([\.|,]\d+)?)(em|px)?$/i)[1] || 0
44086 ) : '';
44087 base
44088 .addKey('', ' ', true)
44089 .addClass(o.css.buttonDisabled + ' ' + o.css.buttonEmpty)
44090 .attr('aria-disabled', true)
44091 .width(margin ? (action.match('px') ? margin + 'px' : (margin * 2) + 'em') : '');
44092 continue;
44093 }
44094
44095 // meta keys
44096 if (/^meta[\w-]+\:?(\w+)?/i.test(action)) {
44097 base
44098 .addKey(action.split(':')[0], action)
44099 .addClass(kbcss.keyHasActive);
44100 continue;
44101 }
44102
44103 // switch needed for action keys with multiple names/shortcuts or
44104 // default will catch all others
44105 txt = action.split(':');
44106 switch (txt[0].toLowerCase()) {
44107
44108 case 'a':
44109 case 'accept':
44110 base
44111 .addKey('accept', action)
44112 .addClass(o.css.buttonAction + ' ' + kbcss.keyAction);
44113 break;
44114
44115 case 'alt':
44116 case 'altgr':
44117 base
44118 .addKey('alt', action)
44119 .addClass(kbcss.keyHasActive);
44120 break;
44121
44122 case 'b':
44123 case 'bksp':
44124 base.addKey('bksp', action);
44125 break;
44126
44127 case 'c':
44128 case 'cancel':
44129 base
44130 .addKey('cancel', action)
44131 .addClass(o.css.buttonAction + ' ' + kbcss.keyAction);
44132 break;
44133
44134 // toggle combo/diacritic key
44135 /*jshint -W083 */
44136 case 'combo':
44137 base
44138 .addKey('combo', action)
44139 .addClass(kbcss.keyHasActive)
44140 .attr('title', function (indx, title) {
44141 // add combo key state to title
44142 return title + ' ' + o.display[o.useCombos ? 'active' : 'disabled'];
44143 })
44144 .toggleClass(o.css.buttonActive, o.useCombos);
44145 break;
44146
44147 // Decimal - unique decimal point (num pad layout)
44148 case 'dec':
44149 acceptedKeys.push((base.decimal) ? '.' : ',');
44150 base.addKey('dec', action);
44151 break;
44152
44153 case 'e':
44154 case 'enter':
44155 base
44156 .addKey('enter', action)
44157 .addClass(o.css.buttonAction + ' ' + kbcss.keyAction);
44158 break;
44159
44160 case 'lock':
44161 base
44162 .addKey('lock', action)
44163 .addClass(kbcss.keyHasActive);
44164 break;
44165
44166 case 's':
44167 case 'shift':
44168 base
44169 .addKey('shift', action)
44170 .addClass(kbcss.keyHasActive);
44171 break;
44172
44173 // Change sign (for num pad layout)
44174 case 'sign':
44175 acceptedKeys.push('-');
44176 base.addKey('sign', action);
44177 break;
44178
44179 case 'space':
44180 acceptedKeys.push(' ');
44181 base.addKey('space', action);
44182 break;
44183
44184 case 't':
44185 case 'tab':
44186 base.addKey('tab', action);
44187 break;
44188
44189 default:
44190 if ($keyboard.keyaction.hasOwnProperty(txt[0])) {
44191 base
44192 .addKey(txt[0], action)
44193 .toggleClass(o.css.buttonAction + ' ' + kbcss.keyAction, isAction);
44194 }
44195
44196 }
44197
44198 } else {
44199
44200 // regular button (not an action key)
44201 t = keys[key];
44202 base.addKey(t, t, true);
44203 }
44204 }
44205 };
44206
44207 base.removeBindings = function (namespace) {
44208 $(document).unbind(namespace);
44209 if (base.el.ownerDocument !== document) {
44210 $(base.el.ownerDocument).unbind(namespace);
44211 }
44212 $(window).unbind(namespace);
44213 base.$el.unbind(namespace);
44214 };
44215
44216 base.removeKeyboard = function () {
44217 base.$allKeys = [];
44218 base.$decBtn = [];
44219 // base.$preview === base.$el when o.usePreview is false - fixes #442
44220 if (o.usePreview) {
44221 base.$preview.removeData('keyboard');
44222 }
44223 base.preview = null;
44224 base.$preview = null;
44225 base.$previewCopy = null;
44226 base.$keyboard.removeData('keyboard');
44227 base.$keyboard.remove();
44228 base.$keyboard = [];
44229 base.isOpen = false;
44230 base.isCurrent(false);
44231 };
44232
44233 base.destroy = function (callback) {
44234 var index,
44235 kbcss = $keyboard.css,
44236 len = base.extensionNamespace.length,
44237 tmp = [
44238 kbcss.input,
44239 kbcss.locked,
44240 kbcss.placeholder,
44241 kbcss.noKeyboard,
44242 kbcss.alwaysOpen,
44243 o.css.input,
44244 kbcss.isCurrent
44245 ].join(' ');
44246 clearTimeout(base.timer);
44247 clearTimeout(base.timer2);
44248 if (base.$keyboard.length) {
44249 base.removeKeyboard();
44250 }
44251 base.removeBindings(base.namespace);
44252 base.removeBindings(base.namespace + 'callbacks');
44253 for (index = 0; index < len; index++) {
44254 base.removeBindings(base.extensionNamespace[index]);
44255 }
44256 base.el.active = false;
44257
44258 base.$el
44259 .removeClass(tmp)
44260 .removeAttr('aria-haspopup')
44261 .removeAttr('role')
44262 .removeData('keyboard');
44263 base = null;
44264
44265 if (typeof callback === 'function') {
44266 callback();
44267 }
44268 };
44269
44270 // Run initializer
44271 base.init();
44272
44273 }; // end $.keyboard definition
44274
44275 // event.which & ASCII values
44276 $keyboard.keyCodes = {
44277 backSpace: 8,
44278 tab: 9,
44279 enter: 13,
44280 capsLock: 20,
44281 escape: 27,
44282 space: 32,
44283 pageUp: 33,
44284 pageDown: 34,
44285 end: 35,
44286 home: 36,
44287 left: 37,
44288 up: 38,
44289 right: 39,
44290 down: 40,
44291 insert: 45,
44292 delete: 46,
44293 // event.which keyCodes (uppercase letters)
44294 A: 65,
44295 Z: 90,
44296 V: 86,
44297 C: 67,
44298 X: 88,
44299
44300 // ASCII lowercase a & z
44301 a: 97,
44302 z: 122
44303 };
44304
44305 $keyboard.css = {
44306 // keyboard id suffix
44307 idSuffix: '_keyboard',
44308 // class name to set initial focus
44309 initialFocus: 'keyboard-init-focus',
44310 // element class names
44311 input: 'ui-keyboard-input',
44312 inputClone: 'ui-keyboard-preview-clone',
44313 wrapper: 'ui-keyboard-preview-wrapper',
44314 preview: 'ui-keyboard-preview',
44315 keyboard: 'ui-keyboard',
44316 keySet: 'ui-keyboard-keyset',
44317 keyButton: 'ui-keyboard-button',
44318 keyWide: 'ui-keyboard-widekey',
44319 keyPrefix: 'ui-keyboard-',
44320 keyText: 'ui-keyboard-text', // span with button text
44321 keyHasActive: 'ui-keyboard-hasactivestate',
44322 keyAction: 'ui-keyboard-actionkey',
44323 keySpacer: 'ui-keyboard-spacer', // empty keys
44324 keyToggle: 'ui-keyboard-toggle',
44325 keyDisabled: 'ui-keyboard-disabled',
44326 // states
44327 locked: 'ui-keyboard-lockedinput',
44328 alwaysOpen: 'ui-keyboard-always-open',
44329 noKeyboard: 'ui-keyboard-nokeyboard',
44330 placeholder: 'ui-keyboard-placeholder',
44331 hasFocus: 'ui-keyboard-has-focus',
44332 isCurrent: 'ui-keyboard-input-current',
44333 // validation & autoaccept
44334 inputValid: 'ui-keyboard-valid-input',
44335 inputInvalid: 'ui-keyboard-invalid-input',
44336 inputAutoAccepted: 'ui-keyboard-autoaccepted',
44337 endRow: 'ui-keyboard-button-endrow' // class added to <br>
44338 };
44339
44340 $keyboard.events = {
44341 // keyboard events
44342 kbChange: 'keyboardChange',
44343 kbBeforeClose: 'beforeClose',
44344 kbBeforeVisible: 'beforeVisible',
44345 kbVisible: 'visible',
44346 kbInit: 'initialized',
44347 kbInactive: 'inactive',
44348 kbHidden: 'hidden',
44349 kbRepeater: 'repeater',
44350 kbKeysetChange: 'keysetChange',
44351 // input events
44352 inputAccepted: 'accepted',
44353 inputCanceled: 'canceled',
44354 inputChange: 'change',
44355 inputRestricted: 'restricted'
44356 };
44357
44358 // Action key function list
44359 $keyboard.keyaction = {
44360 accept: function (base) {
44361 base.close(true); // same as base.accept();
44362 return false; // return false prevents further processing
44363 },
44364 alt: function (base) {
44365 base.altActive = !base.altActive;
44366 base.showSet();
44367 },
44368 bksp: function (base) {
44369 // the script looks for the '\b' string and initiates a backspace
44370 base.insertText('\b');
44371 },
44372 cancel: function (base) {
44373 base.close();
44374 return false; // return false prevents further processing
44375 },
44376 clear: function (base) {
44377 base.$preview.val('');
44378 if (base.$decBtn.length) {
44379 base.checkDecimal();
44380 }
44381 },
44382 combo: function (base) {
44383 var o = base.options,
44384 c = !o.useCombos,
44385 $combo = base.$keyboard.find('.' + $keyboard.css.keyPrefix + 'combo');
44386 o.useCombos = c;
44387 $combo
44388 .toggleClass(o.css.buttonActive, c)
44389 // update combo key state
44390 .attr('title', $combo.attr('data-title') + ' (' + o.display[c ? 'active' : 'disabled'] + ')');
44391 if (c) {
44392 base.checkCombos();
44393 }
44394 return false;
44395 },
44396 dec: function (base) {
44397 base.insertText((base.decimal) ? '.' : ',');
44398 },
44399 del: function (base) {
44400 // the script looks for the '{d}' string and initiates a delete
44401 base.insertText('{d}');
44402 },
44403 // resets to base keyset (deprecated because "default" is a reserved word)
44404 'default': function (base) {
44405 base.shiftActive = base.altActive = base.metaActive = false;
44406 base.showSet();
44407 },
44408 // el is the pressed key (button) object; it is null when the real keyboard enter is pressed
44409 enter: function (base, el, e) {
44410 var tag = base.el.nodeName,
44411 o = base.options;
44412 // shift+enter in textareas
44413 if (e.shiftKey || base.shiftActive) {
44414 // textarea & input - enterMod + shift + enter = accept, then go to prev;
44415 // base.switchInput(goToNext, autoAccept)
44416 // textarea & input - shift + enter = accept (no navigation)
44417 return (o.enterNavigation) ? base.switchInput(!e[o.enterMod], true) : base.close(true);
44418 }
44419 // input only - enterMod + enter to navigate
44420 if (o.enterNavigation && (tag !== 'TEXTAREA' || e[o.enterMod])) {
44421 return base.switchInput(!e[o.enterMod], o.autoAccept ? 'true' : false);
44422 }
44423 // pressing virtual enter button inside of a textarea - add a carriage return
44424 // e.target is span when clicking on text and button at other times
44425 if (tag === 'TEXTAREA' && $(e.target).closest('button').length) {
44426 // IE8 fix (space + \n) - fixes #71 thanks Blookie!
44427 base.insertText(($keyboard.msie ? ' ' : '') + '\n');
44428 }
44429 },
44430 // caps lock key
44431 lock: function (base) {
44432 base.last.keyset[0] = base.shiftActive = base.capsLock = !base.capsLock;
44433 base.showSet();
44434 },
44435 left: function (base) {
44436 var p = $keyboard.caret(base.$preview);
44437 if (p.start - 1 >= 0) {
44438 // move both start and end of caret (prevents text selection) & save caret position
44439 base.last.start = base.last.end = p.start - 1;
44440 $keyboard.caret(base.$preview, base.last);
44441 base.setScroll();
44442 }
44443 },
44444 meta: function (base, el) {
44445 var $el = $(el);
44446 base.metaActive = !$el.hasClass(base.options.css.buttonActive);
44447 base.showSet($el.attr('data-name'));
44448 },
44449 next: function (base) {
44450 base.switchInput(true, base.options.autoAccept);
44451 return false;
44452 },
44453 // same as 'default' - resets to base keyset
44454 normal: function (base) {
44455 base.shiftActive = base.altActive = base.metaActive = false;
44456 base.showSet();
44457 },
44458 prev: function (base) {
44459 base.switchInput(false, base.options.autoAccept);
44460 return false;
44461 },
44462 right: function (base) {
44463 var p = $keyboard.caret(base.$preview);
44464 if (p.start + 1 <= base.$preview.val().length) {
44465 // move both start and end of caret (prevents text selection) && save caret position
44466 base.last.start = base.last.end = p.start + 1;
44467 $keyboard.caret(base.$preview, base.last);
44468 base.setScroll();
44469 }
44470 },
44471 shift: function (base) {
44472 base.last.keyset[0] = base.shiftActive = !base.shiftActive;
44473 base.showSet();
44474 },
44475 sign: function (base) {
44476 if (/^\-?\d*\.?\d*$/.test(base.$preview.val())) {
44477 base.$preview.val((base.$preview.val() * -1));
44478 }
44479 },
44480 space: function (base) {
44481 base.insertText(' ');
44482 },
44483 tab: function (base) {
44484 var tag = base.el.nodeName,
44485 o = base.options;
44486 if (tag === 'INPUT') {
44487 if (o.tabNavigation) {
44488 return base.switchInput(!base.shiftActive, true);
44489 } else {
44490 // ignore tab key in input
44491 return false;
44492 }
44493 }
44494 base.insertText('\t');
44495 },
44496 toggle: function (base) {
44497 base.enabled = !base.enabled;
44498 base.toggle();
44499 },
44500 // *** Special action keys: NBSP & zero-width characters ***
44501 // Non-breaking space
44502 NBSP: '\u00a0',
44503 // zero width space
44504 ZWSP: '\u200b',
44505 // Zero width non-joiner
44506 ZWNJ: '\u200c',
44507 // Zero width joiner
44508 ZWJ: '\u200d',
44509 // Left-to-right Mark
44510 LRM: '\u200e',
44511 // Right-to-left Mark
44512 RLM: '\u200f'
44513 };
44514
44515 // Default keyboard layouts
44516 $keyboard.builtLayouts = {};
44517 $keyboard.layouts = {
44518 'alpha': {
44519 'normal': [
44520 '` 1 2 3 4 5 6 7 8 9 0 - = {bksp}',
44521 '{tab} a b c d e f g h i j [ ] \\',
44522 'k l m n o p q r s ; \' {enter}',
44523 '{shift} t u v w x y z , . / {shift}',
44524 '{accept} {space} {cancel}'
44525 ],
44526 'shift': [
44527 '~ ! @ # $ % ^ & * ( ) _ + {bksp}',
44528 '{tab} A B C D E F G H I J { } |',
44529 'K L M N O P Q R S : " {enter}',
44530 '{shift} T U V W X Y Z < > ? {shift}',
44531 '{accept} {space} {cancel}'
44532 ]
44533 },
44534 'qwerty': {
44535 'normal': [
44536 '` 1 2 3 4 5 6 7 8 9 0 - = {bksp}',
44537 '{tab} q w e r t y u i o p [ ] \\',
44538 'a s d f g h j k l ; \' {enter}',
44539 '{shift} z x c v b n m , . / {shift}',
44540 '{accept} {space} {cancel}'
44541 ],
44542 'shift': [
44543 '~ ! @ # $ % ^ & * ( ) _ + {bksp}',
44544 '{tab} Q W E R T Y U I O P { } |',
44545 'A S D F G H J K L : " {enter}',
44546 '{shift} Z X C V B N M < > ? {shift}',
44547 '{accept} {space} {cancel}'
44548 ]
44549 },
44550 'international': {
44551 'normal': [
44552 '` 1 2 3 4 5 6 7 8 9 0 - = {bksp}',
44553 '{tab} q w e r t y u i o p [ ] \\',
44554 'a s d f g h j k l ; \' {enter}',
44555 '{shift} z x c v b n m , . / {shift}',
44556 '{accept} {alt} {space} {alt} {cancel}'
44557 ],
44558 'shift': [
44559 '~ ! @ # $ % ^ & * ( ) _ + {bksp}',
44560 '{tab} Q W E R T Y U I O P { } |',
44561 'A S D F G H J K L : " {enter}',
44562 '{shift} Z X C V B N M < > ? {shift}',
44563 '{accept} {alt} {space} {alt} {cancel}'
44564 ],
44565 'alt': [
44566 '~ \u00a1 \u00b2 \u00b3 \u00a4 \u20ac \u00bc \u00bd \u00be \u2018 \u2019 \u00a5 \u00d7 {bksp}',
44567 '{tab} \u00e4 \u00e5 \u00e9 \u00ae \u00fe \u00fc \u00fa \u00ed \u00f3 \u00f6 \u00ab \u00bb \u00ac',
44568 '\u00e1 \u00df \u00f0 f g h j k \u00f8 \u00b6 \u00b4 {enter}',
44569 '{shift} \u00e6 x \u00a9 v b \u00f1 \u00b5 \u00e7 > \u00bf {shift}',
44570 '{accept} {alt} {space} {alt} {cancel}'
44571 ],
44572 'alt-shift': [
44573 '~ \u00b9 \u00b2 \u00b3 \u00a3 \u20ac \u00bc \u00bd \u00be \u2018 \u2019 \u00a5 \u00f7 {bksp}',
44574 '{tab} \u00c4 \u00c5 \u00c9 \u00ae \u00de \u00dc \u00da \u00cd \u00d3 \u00d6 \u00ab \u00bb \u00a6',
44575 '\u00c4 \u00a7 \u00d0 F G H J K \u00d8 \u00b0 \u00a8 {enter}',
44576 '{shift} \u00c6 X \u00a2 V B \u00d1 \u00b5 \u00c7 . \u00bf {shift}',
44577 '{accept} {alt} {space} {alt} {cancel}'
44578 ]
44579 },
44580 'colemak': {
44581 'normal': [
44582 '` 1 2 3 4 5 6 7 8 9 0 - = {bksp}',
44583 '{tab} q w f p g j l u y ; [ ] \\',
44584 '{bksp} a r s t d h n e i o \' {enter}',
44585 '{shift} z x c v b k m , . / {shift}',
44586 '{accept} {space} {cancel}'
44587 ],
44588 'shift': [
44589 '~ ! @ # $ % ^ & * ( ) _ + {bksp}',
44590 '{tab} Q W F P G J L U Y : { } |',
44591 '{bksp} A R S T D H N E I O " {enter}',
44592 '{shift} Z X C V B K M < > ? {shift}',
44593 '{accept} {space} {cancel}'
44594 ]
44595 },
44596 'dvorak': {
44597 'normal': [
44598 '` 1 2 3 4 5 6 7 8 9 0 [ ] {bksp}',
44599 '{tab} \' , . p y f g c r l / = \\',
44600 'a o e u i d h t n s - {enter}',
44601 '{shift} ; q j k x b m w v z {shift}',
44602 '{accept} {space} {cancel}'
44603 ],
44604 'shift': [
44605 '~ ! @ # $ % ^ & * ( ) { } {bksp}',
44606 '{tab} " < > P Y F G C R L ? + |',
44607 'A O E U I D H T N S _ {enter}',
44608 '{shift} : Q J K X B M W V Z {shift}',
44609 '{accept} {space} {cancel}'
44610 ]
44611 },
44612 'num': {
44613 'normal': [
44614 '= ( ) {b}',
44615 '{clear} / * -',
44616 '7 8 9 +',
44617 '4 5 6 {sign}',
44618 '1 2 3 %',
44619 '0 {dec} {a} {c}'
44620 ]
44621 }
44622 };
44623
44624 $keyboard.language = {
44625 en: {
44626 display: {
44627 // check mark - same action as accept
44628 'a': '\u2714:Accept (Shift+Enter)',
44629 'accept': 'Accept:Accept (Shift+Enter)',
44630 // other alternatives \u2311
44631 'alt': 'Alt:\u2325 AltGr',
44632 // Left arrow (same as &larr;)
44633 'b': '\u232b:Backspace',
44634 'bksp': 'Bksp:Backspace',
44635 // big X, close - same action as cancel
44636 'c': '\u2716:Cancel (Esc)',
44637 'cancel': 'Cancel:Cancel (Esc)',
44638 // clear num pad
44639 'clear': 'C:Clear',
44640 'combo': '\u00f6:Toggle Combo Keys',
44641 // decimal point for num pad (optional), change '.' to ',' for European format
44642 'dec': '.:Decimal',
44643 // down, then left arrow - enter symbol
44644 'e': '\u23ce:Enter',
44645 'empty': '\u00a0',
44646 'enter': 'Enter:Enter \u23ce',
44647 // left arrow (move caret)
44648 'left': '\u2190',
44649 // caps lock
44650 'lock': 'Lock:\u21ea Caps Lock',
44651 'next': 'Next \u21e8',
44652 'prev': '\u21e6 Prev',
44653 // right arrow (move caret)
44654 'right': '\u2192',
44655 // thick hollow up arrow
44656 's': '\u21e7:Shift',
44657 'shift': 'Shift:Shift',
44658 // +/- sign for num pad
44659 'sign': '\u00b1:Change Sign',
44660 'space': '\u00a0:Space',
44661 // right arrow to bar (used since this virtual keyboard works with one directional tabs)
44662 't': '\u21e5:Tab',
44663 // \u21b9 is the true tab symbol (left & right arrows)
44664 'tab': '\u21e5 Tab:Tab',
44665 // replaced by an image
44666 'toggle': ' ',
44667
44668 // added to titles of keys
44669 // accept key status when acceptValid:true
44670 'valid': 'valid',
44671 'invalid': 'invalid',
44672 // combo key states
44673 'active': 'active',
44674 'disabled': 'disabled'
44675 },
44676
44677 // Message added to the key title while hovering, if the mousewheel plugin exists
44678 wheelMessage: 'Use mousewheel to see other keys',
44679
44680 comboRegex: /([`\'~\^\"ao])([a-z])/mig,
44681 combos: {
44682 // grave
44683 '`': { a: '\u00e0', A: '\u00c0', e: '\u00e8', E: '\u00c8', i: '\u00ec', I: '\u00cc', o: '\u00f2',
44684 O: '\u00d2', u: '\u00f9', U: '\u00d9', y: '\u1ef3', Y: '\u1ef2' },
44685 // acute & cedilla
44686 "'": { a: '\u00e1', A: '\u00c1', e: '\u00e9', E: '\u00c9', i: '\u00ed', I: '\u00cd', o: '\u00f3',
44687 O: '\u00d3', u: '\u00fa', U: '\u00da', y: '\u00fd', Y: '\u00dd' },
44688 // umlaut/trema
44689 '"': { a: '\u00e4', A: '\u00c4', e: '\u00eb', E: '\u00cb', i: '\u00ef', I: '\u00cf', o: '\u00f6',
44690 O: '\u00d6', u: '\u00fc', U: '\u00dc', y: '\u00ff', Y: '\u0178' },
44691 // circumflex
44692 '^': { a: '\u00e2', A: '\u00c2', e: '\u00ea', E: '\u00ca', i: '\u00ee', I: '\u00ce', o: '\u00f4',
44693 O: '\u00d4', u: '\u00fb', U: '\u00db', y: '\u0177', Y: '\u0176' },
44694 // tilde
44695 '~': { a: '\u00e3', A: '\u00c3', e: '\u1ebd', E: '\u1ebc', i: '\u0129', I: '\u0128', o: '\u00f5',
44696 O: '\u00d5', u: '\u0169', U: '\u0168', y: '\u1ef9', Y: '\u1ef8', n: '\u00f1', N: '\u00d1' }
44697 }
44698 }
44699 };
44700
44701 $keyboard.defaultOptions = {
44702 // set this to ISO 639-1 language code to override language set by the layout
44703 // http://en.wikipedia.org/wiki/List_of_ISO_639-1_codes
44704 // language defaults to 'en' if not found
44705 language: null,
44706 rtl: false,
44707
44708 // *** choose layout & positioning ***
44709 layout: 'qwerty',
44710 customLayout: null,
44711
44712 position: {
44713 // optional - null (attach to input/textarea) or a jQuery object (attach elsewhere)
44714 of: null,
44715 my: 'center top',
44716 at: 'center top',
44717 // used when 'usePreview' is false (centers the keyboard at the bottom of the input/textarea)
44718 at2: 'center bottom'
44719 },
44720
44721 // allow jQuery position utility to reposition the keyboard on window resize
44722 reposition: true,
44723
44724 // preview added above keyboard if true, original input/textarea used if false
44725 usePreview: true,
44726
44727 // if true, the keyboard will always be visible
44728 alwaysOpen: false,
44729
44730 // give the preview initial focus when the keyboard becomes visible
44731 initialFocus: true,
44732
44733 // avoid changing the focus (hardware keyboard probably won't work)
44734 noFocus: false,
44735
44736 // if true, keyboard will remain open even if the input loses focus, but closes on escape
44737 // or when another keyboard opens.
44738 stayOpen: false,
44739
44740 // Prevents the keyboard from closing when the user clicks or presses outside the keyboard
44741 // the `autoAccept` option must also be set to true when this option is true or changes are lost
44742 userClosed: false,
44743
44744 // if true, keyboard will not close if you press escape.
44745 ignoreEsc: false,
44746
44747 // if true, keyboard will only closed on click event instead of mousedown and touchstart
44748 closeByClickEvent: false,
44749
44750 css: {
44751 // input & preview
44752 input: 'ui-widget-content ui-corner-all',
44753 // keyboard container
44754 container: 'ui-widget-content ui-widget ui-corner-all ui-helper-clearfix',
44755 // keyboard container extra class (same as container, but separate)
44756 popup: '',
44757 // default state
44758 buttonDefault: 'ui-state-default ui-corner-all',
44759 // hovered button
44760 buttonHover: 'ui-state-hover',
44761 // Action keys (e.g. Accept, Cancel, Tab, etc); this replaces 'actionClass' option
44762 buttonAction: 'ui-state-active',
44763 // Active keys (e.g. shift down, meta keyset active, combo keys active)
44764 buttonActive: 'ui-state-active',
44765 // used when disabling the decimal button {dec} when a decimal exists in the input area
44766 buttonDisabled: 'ui-state-disabled',
44767 buttonEmpty: 'ui-keyboard-empty'
44768 },
44769
44770 // *** Useability ***
44771 // Auto-accept content when clicking outside the keyboard (popup will close)
44772 autoAccept: false,
44773 // Auto-accept content even if the user presses escape (only works if `autoAccept` is `true`)
44774 autoAcceptOnEsc: false,
44775
44776 // Prevents direct input in the preview window when true
44777 lockInput: false,
44778
44779 // Prevent keys not in the displayed keyboard from being typed in
44780 restrictInput: false,
44781 // Additional allowed characters while restrictInput is true
44782 restrictInclude: '', // e.g. 'a b foo \ud83d\ude38'
44783
44784 // Check input against validate function, if valid the accept button gets a class name of
44785 // 'ui-keyboard-valid-input'. If invalid, the accept button gets a class name of
44786 // 'ui-keyboard-invalid-input'
44787 acceptValid: false,
44788 // Auto-accept when input is valid; requires `acceptValid` set `true` & validate callback
44789 autoAcceptOnValid: false,
44790
44791 // if acceptValid is true & the validate function returns a false, this option will cancel
44792 // a keyboard close only after the accept button is pressed
44793 cancelClose: true,
44794
44795 // tab to go to next, shift-tab for previous (default behavior)
44796 tabNavigation: false,
44797
44798 // enter for next input; shift+enter accepts content & goes to next
44799 // shift + 'enterMod' + enter ('enterMod' is the alt as set below) will accept content and go
44800 // to previous in a textarea
44801 enterNavigation: false,
44802 // mod key options: 'ctrlKey', 'shiftKey', 'altKey', 'metaKey' (MAC only)
44803 enterMod: 'altKey', // alt-enter to go to previous; shift-alt-enter to accept & go to previous
44804
44805 // if true, the next button will stop on the last keyboard input/textarea; prev button stops at first
44806 // if false, the next button will wrap to target the first input/textarea; prev will go to the last
44807 stopAtEnd: true,
44808
44809 // Set this to append the keyboard after the input/textarea (appended to the input/textarea parent).
44810 // This option works best when the input container doesn't have a set width & when the 'tabNavigation'
44811 // option is true.
44812 appendLocally: false,
44813 // When appendLocally is false, the keyboard will be appended to this object
44814 appendTo: 'body',
44815
44816 // If false, the shift key will remain active until the next key is (mouse) clicked on; if true it will
44817 // stay active until pressed again
44818 stickyShift: true,
44819
44820 // Prevent pasting content into the area
44821 preventPaste: false,
44822
44823 // caret placed at the end of any text when keyboard becomes visible
44824 caretToEnd: false,
44825
44826 // caret stays this many pixels from the edge of the input while scrolling left/right;
44827 // use "c" or "center" to center the caret while scrolling
44828 scrollAdjustment: 10,
44829
44830 // Set the max number of characters allowed in the input, setting it to false disables this option
44831 maxLength: false,
44832 // allow inserting characters @ caret when maxLength is set
44833 maxInsert: true,
44834
44835 // Mouse repeat delay - when clicking/touching a virtual keyboard key, after this delay the key will
44836 // start repeating
44837 repeatDelay: 500,
44838
44839 // Mouse repeat rate - after the repeatDelay, this is the rate (characters per second) at which the
44840 // key is repeated Added to simulate holding down a real keyboard key and having it repeat. I haven't
44841 // calculated the upper limit of this rate, but it is limited to how fast the javascript can process
44842 // the keys. And for me, in Firefox, it's around 20.
44843 repeatRate: 20,
44844
44845 // resets the keyboard to the default keyset when visible
44846 resetDefault: true,
44847
44848 // Event (namespaced) on the input to reveal the keyboard. To disable it, just set it to ''.
44849 openOn: 'focus',
44850
44851 // Event (namepaced) for when the character is added to the input (clicking on the keyboard)
44852 keyBinding: 'mousedown touchstart',
44853
44854 // enable/disable mousewheel functionality
44855 // enabling still depends on the mousewheel plugin
44856 useWheel: true,
44857
44858 // combos (emulate dead keys : http://en.wikipedia.org/wiki/Keyboard_layout#US-International)
44859 // if user inputs `a the script converts it to à, ^o becomes ô, etc.
44860 useCombos: true,
44861
44862 /*
44863 // *** Methods ***
44864 // commenting these out to reduce the size of the minified version
44865 // Callbacks - attach a function to any of these callbacks as desired
44866 initialized : function(e, keyboard, el) {},
44867 beforeVisible : function(e, keyboard, el) {},
44868 visible : function(e, keyboard, el) {},
44869 beforeInsert : function(e, keyboard, el, textToAdd) { return textToAdd; },
44870 change : function(e, keyboard, el) {},
44871 beforeClose : function(e, keyboard, el, accepted) {},
44872 accepted : function(e, keyboard, el) {},
44873 canceled : function(e, keyboard, el) {},
44874 restricted : function(e, keyboard, el) {},
44875 hidden : function(e, keyboard, el) {},
44876 // called instead of base.switchInput
44877 switchInput : function(keyboard, goToNext, isAccepted) {},
44878 // used if you want to create a custom layout or modify the built-in keyboard
44879 create : function(keyboard) { return keyboard.buildKeyboard(); },
44880
44881 // build key callback
44882 buildKey : function( keyboard, data ) {
44883 / *
44884 data = {
44885 // READ ONLY
44886 isAction : [boolean] true if key is an action key
44887 name : [string] key class name suffix ( prefix = 'ui-keyboard-' );
44888 may include decimal ascii value of character
44889 value : [string] text inserted (non-action keys)
44890 title : [string] title attribute of key
44891 action : [string] keyaction name
44892 html : [string] HTML of the key; it includes a <span> wrapping the text
44893 // use to modify key HTML
44894 $key : [object] jQuery selector of key which is already appended to keyboard
44895 }
44896 * /
44897 return data;
44898 },
44899 */
44900
44901 // this callback is called, if the acceptValid is true, and just before the 'beforeClose' to check
44902 // the value if the value is valid, return true and the keyboard will continue as it should
44903 // (close if not always open, etc). If the value is not valid, return false and clear the keyboard
44904 // value ( like this "keyboard.$preview.val('');" ), if desired. The validate function is called after
44905 // each input, the 'isClosing' value will be false; when the accept button is clicked,
44906 // 'isClosing' is true
44907 validate: function (keyboard, value, isClosing) {
44908 return true;
44909 }
44910
44911 };
44912
44913 // for checking combos
44914 $keyboard.comboRegex = /([`\'~\^\"ao])([a-z])/mig;
44915
44916 // store current keyboard element; used by base.isCurrent()
44917 $keyboard.currentKeyboard = '';
44918
44919 $('<!--[if lte IE 8]><script>jQuery("body").addClass("oldie");</script><![endif]--><!--[if IE]>' +
44920 '<script>jQuery("body").addClass("ie");</script><![endif]-->')
44921 .appendTo('body')
44922 .remove();
44923 $keyboard.msie = $('body').hasClass('oldie'); // Old IE flag, used for caret positioning
44924 $keyboard.allie = $('body').hasClass('ie');
44925
44926 $keyboard.watermark = (typeof (document.createElement('input').placeholder) !== 'undefined');
44927
44928 $keyboard.checkCaretSupport = function () {
44929 if (typeof $keyboard.checkCaret !== 'boolean') {
44930 // Check if caret position is saved when input is hidden or loses focus
44931 // (*cough* all versions of IE and I think Opera has/had an issue as well
44932 var $temp = $('<div style="height:0px;width:0px;overflow:hidden;position:fixed;top:0;left:-100px;">' +
44933 '<input type="text" value="testing"/></div>').prependTo('body'); // stop page scrolling
44934 $keyboard.caret($temp.find('input'), 3, 3);
44935 // Also save caret position of the input if it is locked
44936 $keyboard.checkCaret = $keyboard.caret($temp.find('input').hide().show()).start !== 3;
44937 $temp.remove();
44938 }
44939 return $keyboard.checkCaret;
44940 };
44941
44942 $keyboard.caret = function ($el, param1, param2) {
44943 if (!$el || !$el.length || $el.is(':hidden') || $el.css('visibility') === 'hidden') {
44944 return {};
44945 }
44946 var start, end, txt, pos,
44947 kb = $el.data('keyboard'),
44948 noFocus = kb && kb.options.noFocus;
44949 if (!noFocus) {
44950 $el.focus();
44951 }
44952 // set caret position
44953 if (typeof param1 !== 'undefined') {
44954 // allow setting caret using ( $el, { start: x, end: y } )
44955 if (typeof param1 === 'object' && 'start' in param1 && 'end' in param1) {
44956 start = param1.start;
44957 end = param1.end;
44958 } else if (typeof param2 === 'undefined') {
44959 param2 = param1; // set caret using start position
44960 }
44961 // set caret using ( $el, start, end );
44962 if (typeof param1 === 'number' && typeof param2 === 'number') {
44963 start = param1;
44964 end = param2;
44965 } else if (param1 === 'start') {
44966 start = end = 0;
44967 } else if (typeof param1 === 'string') {
44968 // unknown string setting, move caret to end
44969 start = end = $el.val().length;
44970 }
44971
44972 // *** SET CARET POSITION ***
44973 // modify the line below to adapt to other caret plugins
44974 return $el.caret(start, end, noFocus);
44975 }
44976 // *** GET CARET POSITION ***
44977 // modify the line below to adapt to other caret plugins
44978 pos = $el.caret();
44979 start = pos.start;
44980 end = pos.end;
44981
44982 // *** utilities ***
44983 txt = ($el[0].value || $el.text() || '');
44984 return {
44985 start: start,
44986 end: end,
44987 // return selected text
44988 text: txt.substring(start, end),
44989 // return a replace selected string method
44990 replaceStr: function (str) {
44991 return txt.substring(0, start) + str + txt.substring(end, txt.length);
44992 }
44993 };
44994 };
44995
44996 $.fn.keyboard = function (options) {
44997 return this.each(function () {
44998 if (!$(this).data('keyboard')) {
44999 /*jshint nonew:false */
45000 (new $.keyboard(this, options));
45001 }
45002 });
45003 };
45004
45005 $.fn.getkeyboard = function () {
45006 return this.data('keyboard');
45007 };
45008
45009 /* Copyright (c) 2010 C. F., Wong (<a href="http://cloudgen.w0ng.hk">Cloudgen Examplet Store</a>)
45010 * Licensed under the MIT License:
45011 * http://www.opensource.org/licenses/mit-license.php
45012 * Highly modified from the original
45013 */
45014
45015 $.fn.caret = function (start, end, noFocus) {
45016 if (typeof this[0] === 'undefined' || this.is(':hidden') || this.css('visibility') === 'hidden') {
45017 return this;
45018 }
45019 var selRange, range, stored_range, txt, val,
45020 selection = document.selection,
45021 $el = this,
45022 el = $el[0],
45023 sTop = el.scrollTop,
45024 ss = false,
45025 supportCaret = true;
45026 try {
45027 ss = 'selectionStart' in el;
45028 } catch (err) {
45029 supportCaret = false;
45030 }
45031 if (supportCaret && typeof start !== 'undefined') {
45032 if (!/(email|number)/i.test(el.type)) {
45033 if (ss) {
45034 el.selectionStart = start;
45035 el.selectionEnd = end;
45036 } else {
45037 selRange = el.createTextRange();
45038 selRange.collapse(true);
45039 selRange.moveStart('character', start);
45040 selRange.moveEnd('character', end - start);
45041 selRange.select();
45042 }
45043 }
45044 // must be visible or IE8 crashes; IE9 in compatibility mode works fine - issue #56
45045 if (!noFocus && ($el.is(':visible') || $el.css('visibility') !== 'hidden')) {
45046 el.focus();
45047 }
45048 el.scrollTop = sTop;
45049 return this;
45050 } else {
45051 if (/(email|number)/i.test(el.type)) {
45052 // fix suggested by raduanastase (https://github.com/Mottie/Keyboard/issues/105#issuecomment-40456535)
45053 start = end = $el.val().length;
45054 } else if (ss) {
45055 start = el.selectionStart;
45056 end = el.selectionEnd;
45057 } else if (selection) {
45058 if (el.nodeName === 'TEXTAREA') {
45059 val = $el.val();
45060 range = selection.createRange();
45061 stored_range = range.duplicate();
45062 stored_range.moveToElementText(el);
45063 stored_range.setEndPoint('EndToEnd', range);
45064 // thanks to the awesome comments in the rangy plugin
45065 start = stored_range.text.replace(/\r/g, '\n').length;
45066 end = start + range.text.replace(/\r/g, '\n').length;
45067 } else {
45068 val = $el.val().replace(/\r/g, '\n');
45069 range = selection.createRange().duplicate();
45070 range.moveEnd('character', val.length);
45071 start = (range.text === '' ? val.length : val.lastIndexOf(range.text));
45072 range = selection.createRange().duplicate();
45073 range.moveStart('character', -val.length);
45074 end = range.text.length;
45075 }
45076 } else {
45077 // caret positioning not supported
45078 start = end = (el.value || '').length;
45079 }
45080 txt = (el.value || '');
45081 return {
45082 start: start,
45083 end: end,
45084 text: txt.substring(start, end),
45085 replace: function (str) {
45086 return txt.substring(0, start) + str + txt.substring(end, txt.length);
45087 }
45088 };
45089 }
45090 };
45091
45092 return $keyboard;
45093
45094}));
45095</script>
45096 <script>jQuery(function($) {
45097 $('.virtual-keyboard').keyboard({
45098
45099 autoAccept : true,
45100
45101 accepted : function(event, keyboard, el) {
45102 $('.virtual-keyboard').trigger('input');
45103 },
45104
45105 display: {
45106 'bksp' : '\u2190',
45107 },
45108
45109 layout: 'custom',
45110
45111 customLayout: {
45112
45113 'normal': [
45114 '` 1 2 3 4 5 6 7 8 9 0 - = {bksp}',
45115 'q w e r t y u i o p [ ] \\',
45116 'a s d f g h j k l ; \'',
45117 '{s} z x c v b n m , . / {s}',
45118 '{space}'
45119 ],
45120 'shift': [
45121 '~ ! @ # $ % ^ & * ( ) _ + {bksp}',
45122 'Q W E R T Y U I O P { } |',
45123 'A S D F G H J K L : "',
45124 '{s} Z X C V B N M < > ? {s}',
45125 '{space}'
45126 ]
45127
45128 }
45129
45130 });
45131});
c6624d51
IC
45132</script>
45133 <script>(function() {
45134
45135 // mnemonics is populated as required by getLanguage
45136 var mnemonics = { "english": new Mnemonic("english") };
45137 var mnemonic = mnemonics["english"];
3725abb5 45138 var seed = null;
c6624d51
IC
45139 var bip32RootKey = null;
45140 var bip32ExtendedKey = null;
45141 var network = bitcoin.networks.bitcoin;
45142 var addressRowTemplate = $("#address-row-template");
45143
45144 var showIndex = true;
45145 var showAddress = true;
45146 var showPubKey = true;
45147 var showPrivKey = true;
52da415f 45148 var showQr = false;
c6624d51
IC
45149
45150 var entropyChangeTimeoutEvent = null;
45151 var phraseChangeTimeoutEvent = null;
45152 var rootKeyChangedTimeoutEvent = null;
45153
40892aba
IC
45154 var generationProcesses = [];
45155
c6624d51
IC
45156 var DOM = {};
45157 DOM.network = $(".network");
56530adc 45158 DOM.bip32Client = $("#bip32-client");
c6624d51
IC
45159 DOM.phraseNetwork = $("#network-phrase");
45160 DOM.useEntropy = $(".use-entropy");
45161 DOM.entropyContainer = $(".entropy-container");
45162 DOM.entropy = $(".entropy");
2a6dd137
IC
45163 DOM.entropyFiltered = DOM.entropyContainer.find(".filtered");
45164 DOM.entropyType = DOM.entropyContainer.find(".type");
45165 DOM.entropyStrength = DOM.entropyContainer.find(".strength");
45166 DOM.entropyEventCount = DOM.entropyContainer.find(".event-count");
45167 DOM.entropyBits = DOM.entropyContainer.find(".bits");
45168 DOM.entropyBitsPerEvent = DOM.entropyContainer.find(".bits-per-event");
45169 DOM.entropyWordCount = DOM.entropyContainer.find(".word-count");
45170 DOM.entropyBinary = DOM.entropyContainer.find(".binary");
45171 DOM.entropyMnemonicLength = DOM.entropyContainer.find(".mnemonic-length");
c6624d51
IC
45172 DOM.phrase = $(".phrase");
45173 DOM.passphrase = $(".passphrase");
45174 DOM.generateContainer = $(".generate-container");
45175 DOM.generate = $(".generate");
45176 DOM.seed = $(".seed");
45177 DOM.rootKey = $(".root-key");
45178 DOM.extendedPrivKey = $(".extended-priv-key");
45179 DOM.extendedPubKey = $(".extended-pub-key");
45180 DOM.bip32tab = $("#bip32-tab");
45181 DOM.bip44tab = $("#bip44-tab");
45182 DOM.bip32panel = $("#bip32");
45183 DOM.bip44panel = $("#bip44");
45184 DOM.bip32path = $("#bip32-path");
45185 DOM.bip44path = $("#bip44-path");
45186 DOM.bip44purpose = $("#bip44 .purpose");
45187 DOM.bip44coin = $("#bip44 .coin");
45188 DOM.bip44account = $("#bip44 .account");
20083ab9
IC
45189 DOM.bip44accountXprv = $("#bip44 .account-xprv");
45190 DOM.bip44accountXpub = $("#bip44 .account-xpub");
c6624d51 45191 DOM.bip44change = $("#bip44 .change");
18abe53b 45192 DOM.generatedStrength = $(".generate-container .strength");
c6624d51
IC
45193 DOM.hardenedAddresses = $(".hardened-addresses");
45194 DOM.addresses = $(".addresses");
45195 DOM.rowsToAdd = $(".rows-to-add");
45196 DOM.more = $(".more");
45197 DOM.feedback = $(".feedback");
45198 DOM.tab = $(".derivation-type a");
45199 DOM.indexToggle = $(".index-toggle");
45200 DOM.addressToggle = $(".address-toggle");
45201 DOM.publicKeyToggle = $(".public-key-toggle");
45202 DOM.privateKeyToggle = $(".private-key-toggle");
45203 DOM.languages = $(".languages a");
e00964cc 45204 DOM.qrContainer = $(".qr-container");
52da415f 45205 DOM.qrHider = DOM.qrContainer.find(".qr-hider");
e00964cc
IC
45206 DOM.qrImage = DOM.qrContainer.find(".qr-image");
45207 DOM.qrHint = DOM.qrContainer.find(".qr-hint");
45208 DOM.showQrEls = $("[data-show-qr]");
c6624d51
IC
45209
45210 function init() {
45211 // Events
45212 DOM.network.on("change", networkChanged);
56530adc 45213 DOM.bip32Client.on("change", bip32ClientChanged);
c6624d51
IC
45214 DOM.useEntropy.on("change", setEntropyVisibility);
45215 DOM.entropy.on("input", delayedEntropyChanged);
18abe53b 45216 DOM.entropyMnemonicLength.on("change", entropyChanged);
c6624d51
IC
45217 DOM.phrase.on("input", delayedPhraseChanged);
45218 DOM.passphrase.on("input", delayedPhraseChanged);
45219 DOM.generate.on("click", generateClicked);
45220 DOM.more.on("click", showMore);
45221 DOM.rootKey.on("input", delayedRootKeyChanged);
45222 DOM.bip32path.on("input", calcForDerivationPath);
45223 DOM.bip44purpose.on("input", calcForDerivationPath);
45224 DOM.bip44coin.on("input", calcForDerivationPath);
45225 DOM.bip44account.on("input", calcForDerivationPath);
45226 DOM.bip44change.on("input", calcForDerivationPath);
45227 DOM.tab.on("shown.bs.tab", calcForDerivationPath);
45228 DOM.hardenedAddresses.on("change", calcForDerivationPath);
45229 DOM.indexToggle.on("click", toggleIndexes);
45230 DOM.addressToggle.on("click", toggleAddresses);
45231 DOM.publicKeyToggle.on("click", togglePublicKeys);
45232 DOM.privateKeyToggle.on("click", togglePrivateKeys);
45233 DOM.languages.on("click", languageChanged);
e00964cc 45234 setQrEvents(DOM.showQrEls);
c6624d51
IC
45235 disableForms();
45236 hidePending();
45237 hideValidationError();
45238 populateNetworkSelect();
56530adc 45239 populateClientSelect();
c6624d51
IC
45240 }
45241
45242 // Event handlers
45243
45244 function networkChanged(e) {
45245 var networkIndex = e.target.value;
45246 networks[networkIndex].onSelect();
45247 if (seed != null) {
45248 phraseChanged();
45249 }
45250 else {
45251 rootKeyChanged();
45252 }
45253 }
45254
56530adc
IC
45255 function bip32ClientChanged(e) {
45256 var clientIndex = DOM.bip32Client.val();
45257 if (clientIndex == "custom") {
45258 DOM.bip32path.prop("readonly", false);
45259 }
45260 else {
45261 DOM.bip32path.prop("readonly", true);
45262 clients[clientIndex].onSelect();
45263 if (seed != null) {
45264 phraseChanged();
45265 }
45266 else {
45267 rootKeyChanged();
45268 }
45269 }
45270 }
45271
c6624d51
IC
45272 function setEntropyVisibility() {
45273 if (isUsingOwnEntropy()) {
45274 DOM.entropyContainer.removeClass("hidden");
45275 DOM.generateContainer.addClass("hidden");
45276 DOM.phrase.prop("readonly", true);
45277 DOM.entropy.focus();
45278 entropyChanged();
45279 }
45280 else {
45281 DOM.entropyContainer.addClass("hidden");
45282 DOM.generateContainer.removeClass("hidden");
45283 DOM.phrase.prop("readonly", false);
18abe53b 45284 hidePending();
c6624d51
IC
45285 }
45286 }
45287
45288 function delayedPhraseChanged() {
45289 hideValidationError();
45290 showPending();
45291 if (phraseChangeTimeoutEvent != null) {
45292 clearTimeout(phraseChangeTimeoutEvent);
45293 }
45294 phraseChangeTimeoutEvent = setTimeout(phraseChanged, 400);
45295 }
45296
45297 function phraseChanged() {
45298 showPending();
45299 hideValidationError();
45300 setMnemonicLanguage();
45301 // Get the mnemonic phrase
45302 var phrase = DOM.phrase.val();
45303 var errorText = findPhraseErrors(phrase);
45304 if (errorText) {
45305 showValidationError(errorText);
45306 return;
45307 }
45308 // Calculate and display
45309 var passphrase = DOM.passphrase.val();
45310 calcBip32RootKeyFromSeed(phrase, passphrase);
45311 calcForDerivationPath();
45312 hidePending();
45313 }
45314
45315 function delayedEntropyChanged() {
45316 hideValidationError();
45317 showPending();
45318 if (entropyChangeTimeoutEvent != null) {
45319 clearTimeout(entropyChangeTimeoutEvent);
45320 }
45321 entropyChangeTimeoutEvent = setTimeout(entropyChanged, 400);
45322 }
45323
45324 function entropyChanged() {
18abe53b
IC
45325 // If blank entropy, clear mnemonic, addresses, errors
45326 if (DOM.entropy.val().trim().length == 0) {
45327 clearDisplay();
2a6dd137 45328 clearEntropyFeedback();
18abe53b
IC
45329 DOM.phrase.val("");
45330 showValidationError("Blank entropy");
45331 return;
45332 }
45333 // Get the current phrase to detect changes
45334 var phrase = DOM.phrase.val();
45335 // Set the phrase from the entropy
c6624d51 45336 setMnemonicFromEntropy();
18abe53b
IC
45337 // Recalc addresses if the phrase has changed
45338 var newPhrase = DOM.phrase.val();
45339 if (newPhrase != phrase) {
45340 if (newPhrase.length == 0) {
45341 clearDisplay();
45342 }
45343 else {
45344 phraseChanged();
45345 }
45346 }
45347 else {
45348 hidePending();
45349 }
c6624d51
IC
45350 }
45351
45352 function delayedRootKeyChanged() {
45353 // Warn if there is an existing mnemonic or passphrase.
45354 if (DOM.phrase.val().length > 0 || DOM.passphrase.val().length > 0) {
45355 if (!confirm("This will clear existing mnemonic and passphrase")) {
45356 DOM.rootKey.val(bip32RootKey);
45357 return
45358 }
45359 }
45360 hideValidationError();
45361 showPending();
45362 // Clear existing mnemonic and passphrase
45363 DOM.phrase.val("");
45364 DOM.passphrase.val("");
45365 seed = null;
45366 if (rootKeyChangedTimeoutEvent != null) {
45367 clearTimeout(rootKeyChangedTimeoutEvent);
45368 }
45369 rootKeyChangedTimeoutEvent = setTimeout(rootKeyChanged, 400);
45370 }
45371
45372 function rootKeyChanged() {
45373 showPending();
45374 hideValidationError();
45375 // Validate the root key TODO
45376 var rootKeyBase58 = DOM.rootKey.val();
45377 var errorText = validateRootKey(rootKeyBase58);
45378 if (errorText) {
45379 showValidationError(errorText);
45380 return;
45381 }
45382 // Calculate and display
45383 calcBip32RootKeyFromBase58(rootKeyBase58);
45384 calcForDerivationPath();
c6624d51
IC
45385 }
45386
45387 function calcForDerivationPath() {
45388 showPending();
ba3cb9ec 45389 clearAddressesList();
c6624d51
IC
45390 hideValidationError();
45391 // Get the derivation path
45392 var derivationPath = getDerivationPath();
45393 var errorText = findDerivationPathErrors(derivationPath);
45394 if (errorText) {
45395 showValidationError(errorText);
45396 return;
45397 }
20083ab9
IC
45398 bip32ExtendedKey = calcBip32ExtendedKey(derivationPath);
45399 if (bip44TabSelected()) {
45400 displayBip44Info();
45401 }
c6624d51
IC
45402 displayBip32Info();
45403 hidePending();
45404 }
45405
45406 function generateClicked() {
45407 if (isUsingOwnEntropy()) {
45408 return;
45409 }
45410 clearDisplay();
45411 showPending();
45412 setTimeout(function() {
45413 setMnemonicLanguage();
45414 var phrase = generateRandomPhrase();
45415 if (!phrase) {
45416 return;
45417 }
45418 phraseChanged();
45419 }, 50);
45420 }
45421
45422 function languageChanged() {
45423 setTimeout(function() {
45424 setMnemonicLanguage();
45425 if (DOM.phrase.val().length > 0) {
45426 var newPhrase = convertPhraseToNewLanguage();
45427 DOM.phrase.val(newPhrase);
45428 phraseChanged();
45429 }
45430 else {
45431 DOM.generate.trigger("click");
45432 }
45433 }, 50);
45434 }
45435
45436 function toggleIndexes() {
45437 showIndex = !showIndex;
45438 $("td.index span").toggleClass("invisible");
45439 }
45440
45441 function toggleAddresses() {
45442 showAddress = !showAddress;
45443 $("td.address span").toggleClass("invisible");
45444 }
45445
45446 function togglePublicKeys() {
45447 showPubKey = !showPubKey;
45448 $("td.pubkey span").toggleClass("invisible");
45449 }
45450
45451 function togglePrivateKeys() {
45452 showPrivKey = !showPrivKey;
45453 $("td.privkey span").toggleClass("invisible");
45454 }
45455
45456 // Private methods
45457
45458 function generateRandomPhrase() {
45459 if (!hasStrongRandom()) {
45460 var errorText = "This browser does not support strong randomness";
45461 showValidationError(errorText);
45462 return;
45463 }
18abe53b 45464 var numWords = parseInt(DOM.generatedStrength.val());
c6624d51
IC
45465 var strength = numWords / 3 * 32;
45466 var words = mnemonic.generate(strength);
45467 DOM.phrase.val(words);
45468 return words;
45469 }
45470
45471 function calcBip32RootKeyFromSeed(phrase, passphrase) {
45472 seed = mnemonic.toSeed(phrase, passphrase);
45473 bip32RootKey = bitcoin.HDNode.fromSeedHex(seed, network);
45474 }
45475
45476 function calcBip32RootKeyFromBase58(rootKeyBase58) {
45477 bip32RootKey = bitcoin.HDNode.fromBase58(rootKeyBase58, network);
45478 }
45479
45480 function calcBip32ExtendedKey(path) {
0a1f0259
IC
45481 // Check there's a root key to derive from
45482 if (!bip32RootKey) {
45483 return bip32RootKey;
45484 }
20083ab9 45485 var extendedKey = bip32RootKey;
c6624d51
IC
45486 // Derive the key from the path
45487 var pathBits = path.split("/");
ebd8d4e8
IC
45488 for (var i=0; i<pathBits.length; i++) {
45489 var bit = pathBits[i];
45490 var index = parseInt(bit);
45491 if (isNaN(index)) {
45492 continue;
45493 }
45494 var hardened = bit[bit.length-1] == "'";
ba3cb9ec
IC
45495 var isPriv = "privKey" in extendedKey;
45496 var invalidDerivationPath = hardened && !isPriv;
45497 if (invalidDerivationPath) {
45498 extendedKey = null;
45499 }
45500 else if (hardened) {
20083ab9 45501 extendedKey = extendedKey.deriveHardened(index);
ebd8d4e8
IC
45502 }
45503 else {
20083ab9 45504 extendedKey = extendedKey.derive(index);
ebd8d4e8
IC
45505 }
45506 }
20083ab9 45507 return extendedKey
ebd8d4e8
IC
45508 }
45509
45510 function showValidationError(errorText) {
45511 DOM.feedback
45512 .text(errorText)
45513 .show();
45514 }
45515
45516 function hideValidationError() {
45517 DOM.feedback
45518 .text("")
45519 .hide();
45520 }
45521
45522 function findPhraseErrors(phrase) {
ebd8d4e8 45523 // Preprocess the words
783981de 45524 phrase = mnemonic.normalizeString(phrase);
0515eeec 45525 var words = phraseToWordArray(phrase);
18abe53b
IC
45526 // Detect blank phrase
45527 if (words.length == 0) {
45528 return "Blank mnemonic";
45529 }
563e401a 45530 // Check each word
0515eeec
IC
45531 for (var i=0; i<words.length; i++) {
45532 var word = words[i];
45533 var language = getLanguage();
45534 if (WORDLISTS[language].indexOf(word) == -1) {
563e401a
IC
45535 console.log("Finding closest match to " + word);
45536 var nearestWord = findNearestWord(word);
45537 return word + " not in wordlist, did you mean " + nearestWord + "?";
45538 }
45539 }
ebd8d4e8 45540 // Check the words are valid
0515eeec 45541 var properPhrase = wordArrayToPhrase(words);
ebd8d4e8
IC
45542 var isValid = mnemonic.check(properPhrase);
45543 if (!isValid) {
45544 return "Invalid mnemonic";
45545 }
45546 return false;
45547 }
45548
efe41586
IC
45549 function validateRootKey(rootKeyBase58) {
45550 try {
45551 bitcoin.HDNode.fromBase58(rootKeyBase58);
45552 }
45553 catch (e) {
45554 return "Invalid root key";
45555 }
45556 return "";
45557 }
45558
38523d36 45559 function getDerivationPath() {
20083ab9 45560 if (bip44TabSelected()) {
38523d36
IC
45561 var purpose = parseIntNoNaN(DOM.bip44purpose.val(), 44);
45562 var coin = parseIntNoNaN(DOM.bip44coin.val(), 0);
45563 var account = parseIntNoNaN(DOM.bip44account.val(), 0);
45564 var change = parseIntNoNaN(DOM.bip44change.val(), 0);
45565 var path = "m/";
45566 path += purpose + "'/";
45567 path += coin + "'/";
45568 path += account + "'/";
45569 path += change;
45570 DOM.bip44path.val(path);
45571 var derivationPath = DOM.bip44path.val();
45572 console.log("Using derivation path from BIP44 tab: " + derivationPath);
45573 return derivationPath;
45574 }
20083ab9 45575 else if (bip32TabSelected()) {
38523d36
IC
45576 var derivationPath = DOM.bip32path.val();
45577 console.log("Using derivation path from BIP32 tab: " + derivationPath);
45578 return derivationPath;
45579 }
45580 else {
45581 console.log("Unknown derivation path");
45582 }
45583 }
45584
ebd8d4e8 45585 function findDerivationPathErrors(path) {
30c9e79d
IC
45586 // TODO is not perfect but is better than nothing
45587 // Inspired by
45588 // https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#test-vectors
45589 // and
45590 // https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#extended-keys
45591 var maxDepth = 255; // TODO verify this!!
45592 var maxIndexValue = Math.pow(2, 31); // TODO verify this!!
45593 if (path[0] != "m") {
45594 return "First character must be 'm'";
45595 }
45596 if (path.length > 1) {
45597 if (path[1] != "/") {
45598 return "Separator must be '/'";
45599 }
45600 var indexes = path.split("/");
45601 if (indexes.length > maxDepth) {
45602 return "Derivation depth is " + indexes.length + ", must be less than " + maxDepth;
45603 }
45604 for (var depth = 1; depth<indexes.length; depth++) {
45605 var index = indexes[depth];
45606 var invalidChars = index.replace(/^[0-9]+'?$/g, "")
45607 if (invalidChars.length > 0) {
45608 return "Invalid characters " + invalidChars + " found at depth " + depth;
45609 }
45610 var indexValue = parseInt(index.replace("'", ""));
45611 if (isNaN(depth)) {
45612 return "Invalid number at depth " + depth;
45613 }
45614 if (indexValue > maxIndexValue) {
45615 return "Value of " + indexValue + " at depth " + depth + " must be less than " + maxIndexValue;
45616 }
45617 }
45618 }
0a1f0259
IC
45619 // Check root key exists or else derivation path is useless!
45620 if (!bip32RootKey) {
45621 return "No root key";
45622 }
ba3cb9ec
IC
45623 // Check no hardened derivation path when using xpub keys
45624 var hardened = path.indexOf("'") > -1;
45625 var isXpubkey = !("privKey" in bip32RootKey);
45626 if (hardened && isXpubkey) {
45627 return "Hardened derivation path is invalid with xpub key";
45628 }
ebd8d4e8
IC
45629 return false;
45630 }
45631
20083ab9
IC
45632 function displayBip44Info() {
45633 // Get the derivation path for the account
45634 var purpose = parseIntNoNaN(DOM.bip44purpose.val(), 44);
45635 var coin = parseIntNoNaN(DOM.bip44coin.val(), 0);
45636 var account = parseIntNoNaN(DOM.bip44account.val(), 0);
45637 var path = "m/";
45638 path += purpose + "'/";
45639 path += coin + "'/";
45640 path += account + "'/";
45641 // Calculate the account extended keys
45642 var accountExtendedKey = calcBip32ExtendedKey(path);
45643 var accountXprv = accountExtendedKey.toBase58();
45644 var accountXpub = accountExtendedKey.toBase58(false);
45645 // Display the extended keys
45646 DOM.bip44accountXprv.val(accountXprv);
45647 DOM.bip44accountXpub.val(accountXpub);
45648 }
45649
ebd8d4e8
IC
45650 function displayBip32Info() {
45651 // Display the key
73161a92 45652 DOM.seed.val(seed);
ebd8d4e8
IC
45653 var rootKey = bip32RootKey.toBase58();
45654 DOM.rootKey.val(rootKey);
ba3cb9ec
IC
45655 var xprvkeyB58 = "NA";
45656 if (bip32ExtendedKey.privKey) {
45657 xprvkeyB58 = bip32ExtendedKey.toBase58();
45658 }
45659 var extendedPrivKey = xprvkeyB58;
ebd8d4e8
IC
45660 DOM.extendedPrivKey.val(extendedPrivKey);
45661 var extendedPubKey = bip32ExtendedKey.toBase58(false);
45662 DOM.extendedPubKey.val(extendedPubKey);
45663 // Display the addresses and privkeys
45664 clearAddressesList();
45665 displayAddresses(0, 20);
45666 }
45667
45668 function displayAddresses(start, total) {
40892aba
IC
45669 generationProcesses.push(new (function() {
45670
45671 var rows = [];
45672
45673 this.stop = function() {
45674 for (var i=0; i<rows.length; i++) {
45675 rows[i].shouldGenerate = false;
45676 }
45677 }
45678
45679 for (var i=0; i<total; i++) {
45680 var index = i + start;
45681 rows.push(new TableRow(index));
45682 }
45683
45684 })());
80c4dd2a
IC
45685 }
45686
45687 function TableRow(index) {
45688
40892aba
IC
45689 var self = this;
45690 this.shouldGenerate = true;
1975bfbc
IC
45691 var useHardenedAddresses = DOM.hardenedAddresses.prop("checked");
45692
80c4dd2a
IC
45693 function init() {
45694 calculateValues();
45695 }
45696
45697 function calculateValues() {
45698 setTimeout(function() {
40892aba
IC
45699 if (!self.shouldGenerate) {
45700 return;
45701 }
1975bfbc
IC
45702 var key = "";
45703 if (useHardenedAddresses) {
45704 key = bip32ExtendedKey.deriveHardened(index);
45705 }
45706 else {
45707 key = bip32ExtendedKey.derive(index);
45708 }
80c4dd2a 45709 var address = key.getAddress().toString();
ba3cb9ec
IC
45710 var privkey = "NA";
45711 if (key.privKey) {
45712 privkey = key.privKey.toWIF(network);
45713 }
1b12b2f5 45714 var pubkey = key.pubKey.toHex();
38523d36 45715 var indexText = getDerivationPath() + "/" + index;
1975bfbc
IC
45716 if (useHardenedAddresses) {
45717 indexText = indexText + "'";
45718 }
8b095871
IC
45719 // Ethereum values are different
45720 if (networks[DOM.network.val()].name == "Ethereum") {
45721 var privKeyBuffer = key.privKey.d.toBuffer();
45722 privkey = privKeyBuffer.toString('hex');
45723 var addressBuffer = ethUtil.privateToAddress(privKeyBuffer);
49b21f12
IC
45724 var hexAddress = addressBuffer.toString('hex');
45725 var checksumAddress = ethUtil.toChecksumAddress(hexAddress);
45726 address = ethUtil.addHexPrefix(checksumAddress);
8b095871 45727 }
1b12b2f5 45728 addAddressToList(indexText, address, pubkey, privkey);
80c4dd2a 45729 }, 50)
ebd8d4e8 45730 }
80c4dd2a
IC
45731
45732 init();
45733
ebd8d4e8
IC
45734 }
45735
45736 function showMore() {
45737 var start = DOM.addresses.children().length;
45738 var rowsToAdd = parseInt(DOM.rowsToAdd.val());
45739 if (isNaN(rowsToAdd)) {
45740 rowsToAdd = 20;
45741 DOM.rowsToAdd.val("20");
45742 }
45743 if (rowsToAdd > 200) {
45744 var msg = "Generating " + rowsToAdd + " rows could take a while. ";
45745 msg += "Do you want to continue?";
45746 if (!confirm(msg)) {
45747 return;
45748 }
45749 }
ebd8d4e8 45750 displayAddresses(start, rowsToAdd);
ebd8d4e8
IC
45751 }
45752
45753 function clearDisplay() {
45754 clearAddressesList();
45755 clearKey();
45756 hideValidationError();
45757 }
45758
45759 function clearAddressesList() {
45760 DOM.addresses.empty();
40892aba
IC
45761 stopGenerating();
45762 }
45763
45764 function stopGenerating() {
45765 while (generationProcesses.length > 0) {
45766 var generation = generationProcesses.shift();
45767 generation.stop();
45768 }
ebd8d4e8
IC
45769 }
45770
45771 function clearKey() {
45772 DOM.rootKey.val("");
45773 DOM.extendedPrivKey.val("");
45774 DOM.extendedPubKey.val("");
45775 }
45776
1b12b2f5 45777 function addAddressToList(indexText, address, pubkey, privkey) {
ebd8d4e8 45778 var row = $(addressRowTemplate.html());
80c4dd2a
IC
45779 // Elements
45780 var indexCell = row.find(".index span");
45781 var addressCell = row.find(".address span");
1b12b2f5 45782 var pubkeyCell = row.find(".pubkey span");
80c4dd2a
IC
45783 var privkeyCell = row.find(".privkey span");
45784 // Content
ae30fed8 45785 indexCell.text(indexText);
80c4dd2a 45786 addressCell.text(address);
1b12b2f5 45787 pubkeyCell.text(pubkey);
80c4dd2a
IC
45788 privkeyCell.text(privkey);
45789 // Visibility
45790 if (!showIndex) {
45791 indexCell.addClass("invisible");
45792 }
45793 if (!showAddress) {
45794 addressCell.addClass("invisible");
45795 }
1b12b2f5
IC
45796 if (!showPubKey) {
45797 pubkeyCell.addClass("invisible");
45798 }
80c4dd2a 45799 if (!showPrivKey) {
6d628db7 45800 privkeyCell.addClass("invisible");
80c4dd2a 45801 }
ebd8d4e8 45802 DOM.addresses.append(row);
e00964cc
IC
45803 var rowShowQrEls = row.find("[data-show-qr]");
45804 setQrEvents(rowShowQrEls);
ebd8d4e8
IC
45805 }
45806
45807 function hasStrongRandom() {
45808 return 'crypto' in window && window['crypto'] !== null;
45809 }
45810
45811 function disableForms() {
45812 $("form").on("submit", function(e) {
45813 e.preventDefault();
45814 });
45815 }
45816
ebd8d4e8
IC
45817 function parseIntNoNaN(val, defaultVal) {
45818 var v = parseInt(val);
45819 if (isNaN(v)) {
45820 return defaultVal;
45821 }
45822 return v;
45823 }
45824
45825 function showPending() {
45826 DOM.feedback
45827 .text("Calculating...")
45828 .show();
45829 }
45830
563e401a 45831 function findNearestWord(word) {
0515eeec
IC
45832 var language = getLanguage();
45833 var words = WORDLISTS[language];
563e401a
IC
45834 var minDistance = 99;
45835 var closestWord = words[0];
45836 for (var i=0; i<words.length; i++) {
45837 var comparedTo = words[i];
6ea15134
IC
45838 if (comparedTo.indexOf(word) == 0) {
45839 return comparedTo;
45840 }
563e401a
IC
45841 var distance = Levenshtein.get(word, comparedTo);
45842 if (distance < minDistance) {
45843 closestWord = comparedTo;
45844 minDistance = distance;
45845 }
45846 }
45847 return closestWord;
45848 }
45849
ebd8d4e8
IC
45850 function hidePending() {
45851 DOM.feedback
45852 .text("")
45853 .hide();
45854 }
45855
ab78acc6
IC
45856 function populateNetworkSelect() {
45857 for (var i=0; i<networks.length; i++) {
45858 var network = networks[i];
45859 var option = $("<option>");
45860 option.attr("value", i);
45861 option.text(network.name);
45862 DOM.phraseNetwork.append(option);
45863 }
45864 }
45865
56530adc
IC
45866 function populateClientSelect() {
45867 for (var i=0; i<clients.length; i++) {
45868 var client = clients[i];
45869 var option = $("<option>");
45870 option.attr("value", i);
45871 option.text(client.name);
45872 DOM.bip32Client.append(option);
45873 }
45874 }
45875
0515eeec
IC
45876 function getLanguage() {
45877 var defaultLanguage = "english";
45878 // Try to get from existing phrase
45879 var language = getLanguageFromPhrase();
45880 // Try to get from url if not from phrase
45881 if (language.length == 0) {
45882 language = getLanguageFromUrl();
45883 }
45884 // Default to English if no other option
45885 if (language.length == 0) {
45886 language = defaultLanguage;
45887 }
45888 return language;
45889 }
45890
45891 function getLanguageFromPhrase(phrase) {
45892 // Check if how many words from existing phrase match a language.
45893 var language = "";
45894 if (!phrase) {
45895 phrase = DOM.phrase.val();
45896 }
45897 if (phrase.length > 0) {
45898 var words = phraseToWordArray(phrase);
45899 var languageMatches = {};
45900 for (l in WORDLISTS) {
45901 // Track how many words match in this language
45902 languageMatches[l] = 0;
45903 for (var i=0; i<words.length; i++) {
45904 var wordInLanguage = WORDLISTS[l].indexOf(words[i]) > -1;
45905 if (wordInLanguage) {
45906 languageMatches[l]++;
45907 }
45908 }
45909 // Find languages with most word matches.
45910 // This is made difficult due to commonalities between Chinese
45911 // simplified vs traditional.
45912 var mostMatches = 0;
45913 var mostMatchedLanguages = [];
45914 for (var l in languageMatches) {
45915 var numMatches = languageMatches[l];
45916 if (numMatches > mostMatches) {
45917 mostMatches = numMatches;
45918 mostMatchedLanguages = [l];
45919 }
45920 else if (numMatches == mostMatches) {
45921 mostMatchedLanguages.push(l);
45922 }
45923 }
45924 }
45925 if (mostMatchedLanguages.length > 0) {
45926 // Use first language and warn if multiple detected
45927 language = mostMatchedLanguages[0];
45928 if (mostMatchedLanguages.length > 1) {
45929 console.warn("Multiple possible languages");
45930 console.warn(mostMatchedLanguages);
45931 }
45932 }
45933 }
45934 return language;
45935 }
45936
45937 function getLanguageFromUrl() {
c6624d51
IC
45938 for (var language in WORDLISTS) {
45939 if (window.location.hash.indexOf(language) > -1) {
45940 return language;
45941 }
45942 }
45943 return "";
0515eeec
IC
45944 }
45945
45946 function setMnemonicLanguage() {
45947 var language = getLanguage();
45948 // Load the bip39 mnemonic generator for this language if required
45949 if (!(language in mnemonics)) {
45950 mnemonics[language] = new Mnemonic(language);
45951 }
45952 mnemonic = mnemonics[language];
45953 }
45954
45955 function convertPhraseToNewLanguage() {
45956 var oldLanguage = getLanguageFromPhrase();
45957 var newLanguage = getLanguageFromUrl();
45958 var oldPhrase = DOM.phrase.val();
45959 var oldWords = phraseToWordArray(oldPhrase);
45960 var newWords = [];
45961 for (var i=0; i<oldWords.length; i++) {
45962 var oldWord = oldWords[i];
45963 var index = WORDLISTS[oldLanguage].indexOf(oldWord);
45964 var newWord = WORDLISTS[newLanguage][index];
45965 newWords.push(newWord);
45966 }
45967 newPhrase = wordArrayToPhrase(newWords);
45968 return newPhrase;
45969 }
45970
45971 // TODO look at jsbip39 - mnemonic.splitWords
45972 function phraseToWordArray(phrase) {
45973 var words = phrase.split(/\s/g);
45974 var noBlanks = [];
45975 for (var i=0; i<words.length; i++) {
45976 var word = words[i];
45977 if (word.length > 0) {
45978 noBlanks.push(word);
45979 }
45980 }
45981 return noBlanks;
45982 }
45983
45984 // TODO look at jsbip39 - mnemonic.joinWords
45985 function wordArrayToPhrase(words) {
45986 var phrase = words.join(" ");
45987 var language = getLanguageFromPhrase(phrase);
45988 if (language == "japanese") {
45989 phrase = words.join("\u3000");
45990 }
45991 return phrase;
45992 }
45993
c6624d51
IC
45994 function isUsingOwnEntropy() {
45995 return DOM.useEntropy.prop("checked");
45996 }
45997
45998 function setMnemonicFromEntropy() {
2a6dd137 45999 clearEntropyFeedback();
18abe53b 46000 // Get entropy value
c6624d51 46001 var entropyStr = DOM.entropy.val();
18abe53b 46002 // Work out minimum base for entropy
c6624d51 46003 var entropy = Entropy.fromString(entropyStr);
18abe53b 46004 if (entropy.binaryStr.length == 0) {
c6624d51
IC
46005 return;
46006 }
46007 // Show entropy details
18abe53b
IC
46008 showEntropyFeedback(entropy);
46009 // Use entropy hash if not using raw entropy
46010 var bits = entropy.binaryStr;
46011 var mnemonicLength = DOM.entropyMnemonicLength.val();
46012 if (mnemonicLength != "raw") {
46013 // Get bits by hashing entropy with SHA256
46014 var hash = sjcl.hash.sha256.hash(entropy.cleanStr);
46015 var hex = sjcl.codec.hex.fromBits(hash);
46016 bits = BigInteger.parse(hex, 16).toString(2);
53aaab27 46017 while (bits.length % 256 != 0) {
18abe53b
IC
46018 bits = "0" + bits;
46019 }
46020 // Truncate hash to suit number of words
46021 mnemonicLength = parseInt(mnemonicLength);
46022 var numberOfBits = 32 * mnemonicLength / 3;
46023 bits = bits.substring(0, numberOfBits);
c6624d51 46024 }
c6624d51 46025 // Discard trailing entropy
18abe53b 46026 var bitsToUse = Math.floor(bits.length / 32) * 32;
2a6dd137
IC
46027 var start = bits.length - bitsToUse;
46028 var binaryStr = bits.substring(start);
c6624d51
IC
46029 // Convert entropy string to numeric array
46030 var entropyArr = [];
18abe53b
IC
46031 for (var i=0; i<binaryStr.length / 8; i++) {
46032 var byteAsBits = binaryStr.substring(i*8, i*8+8);
46033 var entropyByte = parseInt(byteAsBits, 2);
c6624d51
IC
46034 entropyArr.push(entropyByte)
46035 }
46036 // Convert entropy array to mnemonic
46037 var phrase = mnemonic.toMnemonic(entropyArr);
46038 // Set the mnemonic in the UI
46039 DOM.phrase.val(phrase);
46040 }
46041
2a6dd137
IC
46042 function clearEntropyFeedback() {
46043 DOM.entropyStrength.text("...");
18abe53b 46044 DOM.entropyType.text("");
2a6dd137
IC
46045 DOM.entropyWordCount.text("0");
46046 DOM.entropyEventCount.text("0");
46047 DOM.entropyBitsPerEvent.text("0");
46048 DOM.entropyBits.text("0");
46049 DOM.entropyFiltered.html("&nbsp;");
46050 DOM.entropyBinary.html("&nbsp;");
c6624d51
IC
46051 }
46052
18abe53b 46053 function showEntropyFeedback(entropy) {
9e97eb76 46054 var numberOfBits = entropy.binaryStr.length;
18abe53b 46055 var strength = "extremely weak";
9e97eb76 46056 if (numberOfBits >= 64) {
18abe53b
IC
46057 strength = "very weak";
46058 }
9e97eb76 46059 if (numberOfBits >= 96) {
18abe53b
IC
46060 strength = "weak";
46061 }
9e97eb76 46062 if (numberOfBits >= 128) {
18abe53b
IC
46063 strength = "strong";
46064 }
9e97eb76 46065 if (numberOfBits >= 160) {
18abe53b
IC
46066 strength = "very strong";
46067 }
9e97eb76 46068 if (numberOfBits >= 192) {
18abe53b
IC
46069 strength = "extremely strong";
46070 }
46071 // If time to crack is less than one day, and password is considered
46072 // strong or better based on the number of bits, rename strength to
46073 // 'easily cracked'.
95f04905
IC
46074 try {
46075 var z = zxcvbn(entropy.base.parts.join(""));
46076 var timeToCrack = z.crack_times_seconds.offline_fast_hashing_1e10_per_second;
46077 if (timeToCrack < 86400 && entropy.binaryStr.length >= 128) {
46078 strength = "easily cracked";
46079 if (z.feedback.warning != "") {
46080 strength = strength + " - " + z.feedback.warning;
46081 };
46082 }
18abe53b 46083 }
95f04905
IC
46084 catch (e) {
46085 strength = "unknown";
46086 console.log("Error detecting entropy strength with zxcvbn:");
46087 console.log(e);
46088 }
95f04905 46089 var entropyTypeStr = getEntropyTypeStr(entropy);
9e97eb76 46090 var wordCount = Math.floor(numberOfBits / 32) * 3;
94959756 46091 var bitsPerEvent = entropy.bitsPerEvent.toFixed(2);
2a6dd137 46092 DOM.entropyFiltered.html(entropy.cleanHtml);
95f04905 46093 DOM.entropyType.text(entropyTypeStr);
18abe53b
IC
46094 DOM.entropyStrength.text(strength);
46095 DOM.entropyEventCount.text(entropy.base.ints.length);
9e97eb76 46096 DOM.entropyBits.text(numberOfBits);
2a6dd137
IC
46097 DOM.entropyWordCount.text(wordCount);
46098 DOM.entropyBinary.text(entropy.binaryStr);
9e97eb76 46099 DOM.entropyBitsPerEvent.text(bitsPerEvent);
95f04905
IC
46100 }
46101
46102 function getEntropyTypeStr(entropy) {
46103 var typeStr = entropy.base.str;
46104 // Add some detail if these are cards
46105 if (entropy.base.asInt == 52) {
46106 var cardDetail = []; // array of message strings
46107 // Detect duplicates
46108 var dupes = [];
46109 var dupeTracker = {};
46110 for (var i=0; i<entropy.base.parts.length; i++) {
46111 var card = entropy.base.parts[i];
9e97eb76
IC
46112 var cardUpper = card.toUpperCase();
46113 if (cardUpper in dupeTracker) {
95f04905
IC
46114 dupes.push(card);
46115 }
9e97eb76 46116 dupeTracker[cardUpper] = true;
95f04905
IC
46117 }
46118 if (dupes.length > 0) {
46119 var dupeWord = "duplicates";
46120 if (dupes.length == 1) {
46121 dupeWord = "duplicate";
46122 }
46123 var msg = dupes.length + " " + dupeWord + ": " + dupes.slice(0,3).join(" ");
46124 if (dupes.length > 3) {
46125 msg += "...";
46126 }
46127 cardDetail.push(msg);
46128 }
46129 // Detect full deck
46130 var uniqueCards = [];
46131 for (var uniqueCard in dupeTracker) {
46132 uniqueCards.push(uniqueCard);
46133 }
46134 if (uniqueCards.length == 52) {
46135 cardDetail.unshift("full deck");
46136 }
9e97eb76
IC
46137 // Detect missing cards
46138 var values = "A23456789TJQK";
46139 var suits = "CDHS";
46140 var missingCards = [];
46141 for (var i=0; i<suits.length; i++) {
46142 for (var j=0; j<values.length; j++) {
46143 var card = values[j] + suits[i];
46144 if (!(card in dupeTracker)) {
46145 missingCards.push(card);
46146 }
46147 }
46148 }
46149 // Display missing cards if six or less, ie clearly going for full deck
46150 if (missingCards.length > 0 && missingCards.length <= 6) {
46151 var msg = missingCards.length + " missing: " + missingCards.slice(0,3).join(" ");
46152 if (missingCards.length > 3) {
46153 msg += "...";
46154 }
46155 cardDetail.push(msg);
46156 }
95f04905
IC
46157 // Add card details to typeStr
46158 if (cardDetail.length > 0) {
46159 typeStr += " (" + cardDetail.join(", ") + ")";
46160 }
46161 }
46162 return typeStr;
46163 }
46164
e00964cc
IC
46165 function setQrEvents(els) {
46166 els.on("mouseenter", createQr);
46167 els.on("mouseleave", destroyQr);
46168 els.on("click", toggleQr);
46169 }
46170
46171 function createQr(e) {
46172 var content = e.target.textContent || e.target.value;
46173 if (content) {
46174 var size = 130;
46175 DOM.qrImage.qrcode({width: size, height: size, text: content});
46176 if (!showQr) {
52da415f
IC
46177 DOM.qrHider.addClass("hidden");
46178 }
46179 else {
46180 DOM.qrHider.removeClass("hidden");
e00964cc
IC
46181 }
46182 DOM.qrContainer.removeClass("hidden");
46183 }
46184 }
46185
46186 function destroyQr() {
46187 DOM.qrImage.text("");
46188 DOM.qrContainer.addClass("hidden");
46189 }
46190
46191 function toggleQr() {
46192 showQr = !showQr;
52da415f 46193 DOM.qrHider.toggleClass("hidden");
e00964cc
IC
46194 DOM.qrHint.toggleClass("hidden");
46195 }
46196
20083ab9
IC
46197 function bip44TabSelected() {
46198 return DOM.bip44tab.hasClass("active");
46199 }
46200
46201 function bip32TabSelected() {
46202 return DOM.bip32tab.hasClass("active");
46203 }
46204
ab78acc6
IC
46205 var networks = [
46206 {
46207 name: "Bitcoin",
46208 onSelect: function() {
46209 network = bitcoin.networks.bitcoin;
46210 DOM.bip44coin.val(0);
ab78acc6
IC
46211 },
46212 },
46213 {
46214 name: "Bitcoin Testnet",
46215 onSelect: function() {
46216 network = bitcoin.networks.testnet;
46217 DOM.bip44coin.val(1);
ab78acc6
IC
46218 },
46219 },
46220 {
52d589ea 46221 name: "CLAM",
ab78acc6 46222 onSelect: function() {
52d589ea
IC
46223 network = bitcoin.networks.clam;
46224 DOM.bip44coin.val(23);
ab78acc6
IC
46225 },
46226 },
46227 {
46228 name: "Dogecoin",
46229 onSelect: function() {
46230 network = bitcoin.networks.dogecoin;
46231 DOM.bip44coin.val(3);
46232 },
46233 },
d5dc92fd 46234 {
52d589ea 46235 name: "DASH",
d5dc92fd 46236 onSelect: function() {
52d589ea
IC
46237 network = bitcoin.networks.dash;
46238 DOM.bip44coin.val(5);
d5dc92fd
IC
46239 },
46240 },
46241 {
52d589ea 46242 name: "Ethereum",
d5dc92fd 46243 onSelect: function() {
52d589ea
IC
46244 network = bitcoin.networks.bitcoin;
46245 DOM.bip44coin.val(60);
d5dc92fd
IC
46246 },
46247 },
f88fab20 46248 {
46249 name: "GAME",
46250 onSelect: function() {
46251 network = bitcoin.networks.game;
46252 DOM.bip44coin.val(101);
46253 },
46254 },
a3baa26e 46255 {
52d589ea 46256 name: "Jumbucks",
a3baa26e 46257 onSelect: function() {
52d589ea
IC
46258 network = bitcoin.networks.jumbucks;
46259 DOM.bip44coin.val(26);
a3baa26e
IC
46260 },
46261 },
46262 {
52d589ea 46263 name: "Litecoin",
a3baa26e 46264 onSelect: function() {
52d589ea
IC
46265 network = bitcoin.networks.litecoin;
46266 DOM.bip44coin.val(2);
a3baa26e
IC
46267 },
46268 },
46269 {
52d589ea 46270 name: "Namecoin",
a3baa26e 46271 onSelect: function() {
52d589ea
IC
46272 network = bitcoin.networks.namecoin;
46273 DOM.bip44coin.val(7);
a3baa26e
IC
46274 },
46275 },
5c434a8a 46276 {
52d589ea 46277 name: "Peercoin",
5c434a8a 46278 onSelect: function() {
52d589ea
IC
46279 network = bitcoin.networks.peercoin;
46280 DOM.bip44coin.val(6);
5c434a8a
CM
46281 },
46282 },
5493efc3 46283 {
52d589ea 46284 name: "ShadowCash",
5493efc3 46285 onSelect: function() {
52d589ea
IC
46286 network = bitcoin.networks.shadow;
46287 DOM.bip44coin.val(35);
5493efc3 46288 },
46289 },
07ac4350 46290 {
52d589ea 46291 name: "ShadowCash Testnet",
07ac4350 46292 onSelect: function() {
52d589ea
IC
46293 network = bitcoin.networks.shadowtn;
46294 DOM.bip44coin.val(1);
07ac4350 46295 },
46296 },
46297 {
52d589ea 46298 name: "Viacoin",
07ac4350 46299 onSelect: function() {
52d589ea
IC
46300 network = bitcoin.networks.viacoin;
46301 DOM.bip44coin.val(14);
07ac4350 46302 },
46303 },
8b095871 46304 {
52d589ea 46305 name: "Viacoin Testnet",
8b095871 46306 onSelect: function() {
52d589ea
IC
46307 network = bitcoin.networks.viacointestnet;
46308 DOM.bip44coin.val(1);
8b095871
IC
46309 },
46310 },
ab78acc6
IC
46311 ]
46312
56530adc
IC
46313 var clients = [
46314 {
46315 name: "Bitcoin Core",
46316 onSelect: function() {
46317 DOM.bip32path.val("m/0'/0'");
46318 DOM.hardenedAddresses.prop('checked', true);
46319 },
46320 },
46321 {
46322 name: "blockchain.info",
46323 onSelect: function() {
46324 DOM.bip32path.val("m/44'/0'/0'");
46325 DOM.hardenedAddresses.prop('checked', false);
46326 },
46327 },
46328 {
46329 name: "MultiBit HD",
46330 onSelect: function() {
46331 DOM.bip32path.val("m/0'/0");
46332 DOM.hardenedAddresses.prop('checked', false);
46333 },
46334 }
46335 ]
46336
ebd8d4e8
IC
46337 init();
46338
46339})();
dc55c6b0 46340</script>
ebd8d4e8
IC
46341 </body>
46342</html>