]> git.immae.eu Git - perso/Immae/Projets/Cryptomonnaies/BIP39.git/blob - bip39-standalone.html
Languages compiled into bip39-standalone.html
[perso/Immae/Projets/Cryptomonnaies/BIP39.git] / bip39-standalone.html
1 <!DOCTYPE html>
2 <html>
3 <head lang="en">
4 <meta charset="utf-8" />
5 <title>BIP39 - Mnemonic Code</title>
6 <style>/*!
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)
10 *//*! normalize.css v3.0.1 | MIT License | git.io/normalize */html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background:0 0}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}@media print{*{color:#000!important;text-shadow:none!important;background:transparent!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100%!important}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}select{background:#fff!important}.navbar{display:none}.table td,.table th{background-color:#fff!important}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table-bordered th,.table-bordered td{border:1px solid #ddd!important}}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\2a"}.glyphicon-plus:before{content:"\2b"}.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:before,:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#428bca;text-decoration:none}a:hover,a:focus{color:#2a6496;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.img-responsive,.thumbnail>img,.thumbnail a>img,.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;width:100% \9;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;width:100% \9;max-width:100%;height:auto;padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small,.h1 small,.h2 small,.h3 small,.h4 small,.h5 small,.h6 small,h1 .small,h2 .small,h3 .small,h4 .small,h5 .small,h6 .small,.h1 .small,.h2 .small,.h3 .small,.h4 .small,.h5 .small,.h6 .small{font-weight:400;line-height:1;color:#777}h1,.h1,h2,.h2,h3,.h3{margin-top:20px;margin-bottom:10px}h1 small,.h1 small,h2 small,.h2 small,h3 small,.h3 small,h1 .small,.h1 .small,h2 .small,.h2 .small,h3 .small,.h3 .small{font-size:65%}h4,.h4,h5,.h5,h6,.h6{margin-top:10px;margin-bottom:10px}h4 small,.h4 small,h5 small,.h5 small,h6 small,.h6 small,h4 .small,.h4 .small,h5 .small,.h5 .small,h6 .small,.h6 .small{font-size:75%}h1,.h1{font-size:36px}h2,.h2{font-size:30px}h3,.h3{font-size:24px}h4,.h4{font-size:18px}h5,.h5{font-size:14px}h6,.h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}small,.small{font-size:85%}cite{font-style:normal}mark,.mark{padding:.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#428bca}a.text-primary:hover{color:#3071a9}.text-success{color:#3c763d}a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#428bca}a.bg-primary:hover{background-color:#3071a9}.bg-success{background-color:#dff0d8}a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ul,ol{margin-top:0;margin-bottom:10px}ul ul,ol ul,ul ol,ol ol{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;margin-left:-5px;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dt,dd{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:0}blockquote footer,blockquote small,blockquote .small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote footer:before,blockquote small:before,blockquote .small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.blockquote-reverse footer:before,blockquote.pull-right footer:before,.blockquote-reverse small:before,blockquote.pull-right small:before,.blockquote-reverse .small:before,blockquote.pull-right .small:before{content:''}.blockquote-reverse footer:after,blockquote.pull-right footer:after,.blockquote-reverse small:after,blockquote.pull-right small:after,.blockquote-reverse .small:after,blockquote.pull-right .small:after{content:'\00A0 \2014'}blockquote:before,blockquote:after{content:""}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.col-xs-1,.col-sm-1,.col-md-1,.col-lg-1,.col-xs-2,.col-sm-2,.col-md-2,.col-lg-2,.col-xs-3,.col-sm-3,.col-md-3,.col-lg-3,.col-xs-4,.col-sm-4,.col-md-4,.col-lg-4,.col-xs-5,.col-sm-5,.col-md-5,.col-lg-5,.col-xs-6,.col-sm-6,.col-md-6,.col-lg-6,.col-xs-7,.col-sm-7,.col-md-7,.col-lg-7,.col-xs-8,.col-sm-8,.col-md-8,.col-lg-8,.col-xs-9,.col-sm-9,.col-md-9,.col-lg-9,.col-xs-10,.col-sm-10,.col-md-10,.col-lg-10,.col-xs-11,.col-sm-11,.col-md-11,.col-lg-11,.col-xs-12,.col-sm-12,.col-md-12,.col-lg-12{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11,.col-xs-12{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>thead>tr>th,.table>tbody>tr>th,.table>tfoot>tr>th,.table>thead>tr>td,.table>tbody>tr>td,.table>tfoot>tr>td{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>th,.table>caption+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>td,.table>thead:first-child>tr:first-child>td{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>thead>tr>th,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>tbody>tr>td,.table-condensed>tfoot>tr>td{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>td{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table-striped>tbody>tr:nth-child(odd)>td,.table-striped>tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.table-hover>tbody>tr:hover>td,.table-hover>tbody>tr:hover>th{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table>thead>tr>td.active,.table>tbody>tr>td.active,.table>tfoot>tr>td.active,.table>thead>tr>th.active,.table>tbody>tr>th.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>tbody>tr.active>td,.table>tfoot>tr.active>td,.table>thead>tr.active>th,.table>tbody>tr.active>th,.table>tfoot>tr.active>th{background-color:#f5f5f5}.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover,.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr.active:hover>th{background-color:#e8e8e8}.table>thead>tr>td.success,.table>tbody>tr>td.success,.table>tfoot>tr>td.success,.table>thead>tr>th.success,.table>tbody>tr>th.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>tbody>tr.success>td,.table>tfoot>tr.success>td,.table>thead>tr.success>th,.table>tbody>tr.success>th,.table>tfoot>tr.success>th{background-color:#dff0d8}.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover,.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr.success:hover>th{background-color:#d0e9c6}.table>thead>tr>td.info,.table>tbody>tr>td.info,.table>tfoot>tr>td.info,.table>thead>tr>th.info,.table>tbody>tr>th.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>tbody>tr.info>td,.table>tfoot>tr.info>td,.table>thead>tr.info>th,.table>tbody>tr.info>th,.table>tfoot>tr.info>th{background-color:#d9edf7}.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover,.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr.info:hover>th{background-color:#c4e3f3}.table>thead>tr>td.warning,.table>tbody>tr>td.warning,.table>tfoot>tr>td.warning,.table>thead>tr>th.warning,.table>tbody>tr>th.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>tbody>tr.warning>td,.table>tfoot>tr.warning>td,.table>thead>tr.warning>th,.table>tbody>tr.warning>th,.table>tfoot>tr.warning>th{background-color:#fcf8e3}.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover,.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr.warning:hover>th{background-color:#faf2cc}.table>thead>tr>td.danger,.table>tbody>tr>td.danger,.table>tfoot>tr>td.danger,.table>thead>tr>th.danger,.table>tbody>tr>th.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>tbody>tr.danger>td,.table>tfoot>tr.danger>td,.table>thead>tr.danger>th,.table>tbody>tr.danger>th,.table>tfoot>tr.danger>th{background-color:#f2dede}.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover,.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr.danger:hover>th{background-color:#ebcccc}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>thead>tr>th,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tfoot>tr>td{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>thead>tr>th:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.table-responsive>.table-bordered>thead>tr>th:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>th,.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=radio],input[type=checkbox]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=radio]:focus,input[type=checkbox]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#777;opacity:1}.form-control:-ms-input-placeholder{color:#777}.form-control::-webkit-input-placeholder{color:#777}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{cursor:not-allowed;background-color:#eee;opacity:1}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}input[type=date],input[type=time],input[type=datetime-local],input[type=month]{line-height:34px;line-height:1.42857143 \0}input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}.form-group{margin-bottom:15px}.radio,.checkbox{position:relative;display:block;min-height:20px;margin-top:10px;margin-bottom:10px}.radio label,.checkbox label{padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.radio input[type=radio],.radio-inline input[type=radio],.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox]{position:absolute;margin-top:4px \9;margin-left:-20px}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}input[type=radio][disabled],input[type=checkbox][disabled],input[type=radio].disabled,input[type=checkbox].disabled,fieldset[disabled] input[type=radio],fieldset[disabled] input[type=checkbox]{cursor:not-allowed}.radio-inline.disabled,.checkbox-inline.disabled,fieldset[disabled] .radio-inline,fieldset[disabled] .checkbox-inline{cursor:not-allowed}.radio.disabled label,.checkbox.disabled label,fieldset[disabled] .radio label,fieldset[disabled] .checkbox label{cursor:not-allowed}.form-control-static{padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm,.form-horizontal .form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}textarea.input-sm,select[multiple].input-sm{height:auto}.input-lg,.form-horizontal .form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-lg{height:46px;line-height:46px}textarea.input-lg,select[multiple].input-lg{height:auto}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:25px;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center}.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn,.form-inline .input-group .form-control{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .radio,.form-inline .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .radio label,.form-inline .checkbox label{padding-left:0}.form-inline .radio input[type=radio],.form-inline .checkbox input[type=checkbox]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .radio,.form-horizontal .checkbox{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{top:0;right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:14.3px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px}.btn:focus,.btn:active:focus,.btn.active:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus{color:#333;text-decoration:none}.btn:active,.btn.active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{pointer-events:none;cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default:hover,.btn-default:focus,.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled,.btn-default[disabled],fieldset[disabled] .btn-default,.btn-default.disabled:hover,.btn-default[disabled]:hover,fieldset[disabled] .btn-default:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,fieldset[disabled] .btn-default:focus,.btn-default.disabled:active,.btn-default[disabled]:active,fieldset[disabled] .btn-default:active,.btn-default.disabled.active,.btn-default[disabled].active,fieldset[disabled] .btn-default.active{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#428bca;border-color:#357ebd}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#3071a9;border-color:#285e8e}.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary[disabled],fieldset[disabled] .btn-primary,.btn-primary.disabled:hover,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary:hover,.btn-primary.disabled:focus,.btn-primary[disabled]:focus,fieldset[disabled] .btn-primary:focus,.btn-primary.disabled:active,.btn-primary[disabled]:active,fieldset[disabled] .btn-primary:active,.btn-primary.disabled.active,.btn-primary[disabled].active,fieldset[disabled] .btn-primary.active{background-color:#428bca;border-color:#357ebd}.btn-primary .badge{color:#428bca;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success[disabled],fieldset[disabled] .btn-success,.btn-success.disabled:hover,.btn-success[disabled]:hover,fieldset[disabled] .btn-success:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,fieldset[disabled] .btn-success:focus,.btn-success.disabled:active,.btn-success[disabled]:active,fieldset[disabled] .btn-success:active,.btn-success.disabled.active,.btn-success[disabled].active,fieldset[disabled] .btn-success.active{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled,.btn-info[disabled],fieldset[disabled] .btn-info,.btn-info.disabled:hover,.btn-info[disabled]:hover,fieldset[disabled] .btn-info:hover,.btn-info.disabled:focus,.btn-info[disabled]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled:active,.btn-info[disabled]:active,fieldset[disabled] .btn-info:active,.btn-info.disabled.active,.btn-info[disabled].active,fieldset[disabled] .btn-info.active{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-warning,.btn-warning.disabled:hover,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,fieldset[disabled] .btn-warning:focus,.btn-warning.disabled:active,.btn-warning[disabled]:active,fieldset[disabled] .btn-warning:active,.btn-warning.disabled.active,.btn-warning[disabled].active,fieldset[disabled] .btn-warning.active{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled,.btn-danger[disabled],fieldset[disabled] .btn-danger,.btn-danger.disabled:hover,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,fieldset[disabled] .btn-danger:focus,.btn-danger.disabled:active,.btn-danger[disabled]:active,fieldset[disabled] .btn-danger:active,.btn-danger.disabled.active,.btn-danger[disabled].active,fieldset[disabled] .btn-danger.active{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#428bca;cursor:pointer;border-radius:0}.btn-link,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#2a6496;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,fieldset[disabled] .btn-link:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:focus{color:#777;text-decoration:none}.btn-lg,.btn-group-lg>.btn{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.btn-sm,.btn-group-sm>.btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-xs,.btn-group-xs>.btn{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=submit].btn-block,input[type=reset].btn-block,input[type=button].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;-o-transition:height .35s ease;transition:height .35s ease}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;background-color:#428bca;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#777}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px solid}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;float:left}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover,.btn-group>.btn:focus,.btn-group-vertical>.btn:focus,.btn-group>.btn:active,.btn-group-vertical>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn.active{z-index:2}.btn-group>.btn:focus,.btn-group-vertical>.btn:focus{outline:0}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child>.btn:last-child,.btn-group>.btn-group:first-child>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn>input[type=radio],[data-toggle=buttons]>.btn>input[type=checkbox]{position:absolute;z-index:-1;filter:alpha(opacity=0);opacity:0}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn,select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn,select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn{height:auto}.input-group-addon,.input-group-btn,.input-group .form-control{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=radio],.input-group-addon input[type=checkbox]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group-btn:last-child>.btn-group:not(:last-child)>.btn{border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:first-child>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:hover,.input-group-btn>.btn:focus,.input-group-btn>.btn:active{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{background-color:#eee;border-color:#428bca}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:hover,.nav-tabs>li.active>a:focus{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{color:#fff;background-color:#428bca}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:340px}@media (max-width:480px) and (orientation:landscape){.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:200px}}.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030;-webkit-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}@media (min-width:768px){.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;height:50px;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu>li>a,.navbar-nav .open .dropdown-menu .dropdown-header{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:hover,.navbar-nav .open .dropdown-menu>li>a:focus{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}.navbar-nav.navbar-right:last-child{margin-right:-15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn,.navbar-form .input-group .form-control{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .radio,.navbar-form .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .radio label,.navbar-form .checkbox label{padding-left:0}.navbar-form .radio input[type=radio],.navbar-form .checkbox input[type=checkbox]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-form.navbar-right:last-child{margin-right:-15px}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}.navbar-text.navbar-right:last-child{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:hover,.navbar-default .navbar-nav>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:hover,.navbar-default .navbar-nav>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:hover,.navbar-default .navbar-nav>.disabled>a:focus{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:hover,.navbar-default .navbar-nav>.open>a:focus{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:hover,.navbar-default .btn-link:focus{color:#333}.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:hover,.navbar-default .btn-link[disabled]:focus,fieldset[disabled] .navbar-default .btn-link:focus{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#777}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#777}.navbar-inverse .navbar-nav>li>a{color:#777}.navbar-inverse .navbar-nav>li>a:hover,.navbar-inverse .navbar-nav>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:hover,.navbar-inverse .navbar-nav>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:hover,.navbar-inverse .navbar-nav>.disabled>a:focus{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:hover,.navbar-inverse .navbar-nav>.open>a:focus{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#777}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#777}.navbar-inverse .btn-link:hover,.navbar-inverse .btn-link:focus{color:#fff}.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:hover,.navbar-inverse .btn-link[disabled]:focus,fieldset[disabled] .navbar-inverse .btn-link:focus{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#428bca;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:hover,.pagination>li>span:hover,.pagination>li>a:focus,.pagination>li>span:focus{color:#2a6496;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>span,.pagination>.active>a:hover,.pagination>.active>span:hover,.pagination>.active>a:focus,.pagination>.active>span:focus{z-index:2;color:#fff;cursor:default;background-color:#428bca;border-color:#428bca}.pagination>.disabled>span,.pagination>.disabled>span:hover,.pagination>.disabled>span:focus,.pagination>.disabled>a,.pagination>.disabled>a:hover,.pagination>.disabled>a:focus{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:hover,a.label:focus{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:hover,.label-default[href]:focus{background-color:#5e5e5e}.label-primary{background-color:#428bca}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#3071a9}.label-success{background-color:#5cb85c}.label-success[href]:hover,.label-success[href]:focus{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:hover,.label-info[href]:focus{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:hover,.label-warning[href]:focus{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:hover,.label-danger[href]:focus{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-xs .badge{top:0;padding:1px 5px}a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}a.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#428bca;background-color:#fff}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron h1,.jumbotron .h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron{border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron{padding-right:60px;padding-left:60px}.jumbotron h1,.jumbotron .h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.thumbnail>img,.thumbnail a>img{margin-right:auto;margin-left:auto}a.thumbnail:hover,a.thumbnail:focus,a.thumbnail.active{border-color:#428bca}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#428bca;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-striped .progress-bar,.progress-bar-striped{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress.active .progress-bar,.progress-bar.active{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar[aria-valuenow="1"],.progress-bar[aria-valuenow="2"]{min-width:30px}.progress-bar[aria-valuenow="0"]{min-width:30px;color:#777;background-color:transparent;background-image:none;-webkit-box-shadow:none;box-shadow:none}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media,.media-body{overflow:hidden;zoom:1}.media,.media .media{margin-top:15px}.media:first-child{margin-top:0}.media-object{display:block}.media-heading{margin:0 0 5px}.media>.pull-left{margin-right:10px}.media>.pull-right{margin-left:10px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}a.list-group-item{color:#555}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item:hover,a.list-group-item:focus{color:#555;text-decoration:none;background-color:#f5f5f5}.list-group-item.disabled,.list-group-item.disabled:hover,.list-group-item.disabled:focus{color:#777;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{z-index:2;color:#fff;background-color:#428bca;border-color:#428bca}.list-group-item.active .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>.small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:hover .list-group-item-text,.list-group-item.active:focus .list-group-item-text{color:#e1edf7}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:hover,a.list-group-item-success:focus{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:hover,a.list-group-item-success.active:focus{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:hover,a.list-group-item-info:focus{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:hover,a.list-group-item-info.active:focus{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:hover,a.list-group-item-warning:focus{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:hover,a.list-group-item-warning.active:focus{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:hover,a.list-group-item-danger:focus{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:hover,a.list-group-item-danger.active:focus{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group{margin-bottom:0}.panel>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.table,.panel>.table-responsive>.table,.panel>.panel-collapse>.table{margin-bottom:0}.panel>.table:first-child,.panel>.table-responsive:first-child>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table:last-child,.panel>.table-responsive:last-child>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child th,.panel>.table>tbody:first-child>tr:first-child td{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#428bca}.panel-primary>.panel-heading{color:#fff;background-color:#428bca;border-color:#428bca}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#428bca}.panel-primary>.panel-heading .badge{color:#428bca;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#428bca}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive iframe,.embed-responsive embed,.embed-responsive object{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate3d(0,-25%,0);-o-transform:translate3d(0,-25%,0);transform:translate3d(0,-25%,0)}.modal.in .modal-dialog{-webkit-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{min-height:16.43px;padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-size:12px;line-height:1.4;visibility:visible;filter:alpha(opacity=0);opacity:0}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{bottom:0;left:5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{right:5px;bottom:0;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;left:5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;right:5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;text-align:left;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2)}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;font-weight:400;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{line-height:1}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:hover,.carousel-control:focus{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9}.carousel-control .icon-prev,.carousel-control .icon-next,.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right{position:absolute;top:50%;z-index:5;display:inline-block}.carousel-control .icon-prev,.carousel-control .glyphicon-chevron-left{left:50%;margin-left:-10px}.carousel-control .icon-next,.carousel-control .glyphicon-chevron-right{right:50%;margin-right:-10px}.carousel-control .icon-prev,.carousel-control .icon-next{width:20px;height:20px;margin-top:-10px;font-family:serif}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000 \9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-prev,.carousel-control .icon-next{width:30px;height:30px;margin-top:-15px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-15px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-15px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.clearfix:before,.clearfix:after,.dl-horizontal dd:before,.dl-horizontal dd:after,.container:before,.container:after,.container-fluid:before,.container-fluid:after,.row:before,.row:after,.form-horizontal .form-group:before,.form-horizontal .form-group:after,.btn-toolbar:before,.btn-toolbar:after,.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after,.nav:before,.nav:after,.navbar:before,.navbar:after,.navbar-header:before,.navbar-header:after,.navbar-collapse:before,.navbar-collapse:after,.pager:before,.pager:after,.panel-body:before,.panel-body:after,.modal-footer:before,.modal-footer:after{display:table;content:" "}.clearfix:after,.dl-horizontal dd:after,.container:after,.container-fluid:after,.row:after,.form-horizontal .form-group:after,.btn-toolbar:after,.btn-group-vertical>.btn-group:after,.nav:after,.navbar:after,.navbar-header:after,.navbar-collapse:after,.pager:after,.panel-body:after,.modal-footer:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important;visibility:hidden!important}.affix{position:fixed;-webkit-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}@-ms-viewport{width:device-width}.visible-xs,.visible-sm,.visible-md,.visible-lg{display:none!important}.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table}tr.visible-xs{display:table-row!important}th.visible-xs,td.visible-xs{display:table-cell!important}}@media (max-width:767px){.visible-xs-block{display:block!important}}@media (max-width:767px){.visible-xs-inline{display:inline!important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table}tr.visible-sm{display:table-row!important}th.visible-sm,td.visible-sm{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table}tr.visible-md{display:table-row!important}th.visible-md,td.visible-md{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table}tr.visible-lg{display:table-row!important}th.visible-lg,td.visible-lg{display:table-cell!important}}@media (min-width:1200px){.visible-lg-block{display:block!important}}@media (min-width:1200px){.visible-lg-inline{display:inline!important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table}tr.visible-print{display:table-row!important}th.visible-print,td.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}}</style>
11 <meta content="Mnemonic code for generating deterministic keys" name="description"/>
12 <meta content="width=device-width, initial-scale=1.0" name="viewport" />
13 <meta content="bitcoin mnemonic converter" name="description" />
14 <meta content="Ian Coleman" name="author" />
15
16 <style>
17 body {
18 padding-bottom: 32px;
19 }
20 .form-control[readonly] {
21 cursor: text;
22 }
23 .feedback-container {
24 position: fixed;
25 top: 0;
26 width: 100%;
27 text-align: center;
28 z-index: 4;
29 }
30 .feedback {
31 display: table;
32 padding: 0.5em 1em;
33 background-color: orange;
34 margin: 0 auto;
35 font-size: 2em;
36 color: #444;
37 border: 2px solid #555;
38 border-top: 0;
39 border-bottom-left-radius: 20px 20px;
40 border-bottom-right-radius: 20px 20px;
41 }
42 .no-border {
43 border: 0;
44 box-shadow: inset 0 1px 1px rgba(0,0,0,.0);
45 -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.0);
46 }
47 .phrase {
48 word-break: keep-all;
49 }
50 .strength {
51 /* override mobile width from bootstrap */
52 width: auto!important;
53 display: inline-block;
54 }
55 .languages * {
56 padding-left: 10px;
57 }
58 </style>
59 </head>
60 <body>
61 <div class="container">
62
63 <h1 class="text-center">Mnemonic Code Converter</h1>
64 <hr>
65 <div class="row">
66 <div class="col-md-12">
67 <h2>Mnemonic</h2>
68 <form class="form-horizontal" role="form">
69 <div class="col-sm-2"></div>
70 <div class="col-sm-10">
71 <p>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>
72 <p>For more info see the <a href="https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki" target="_blank">BIP39 spec</a></p>
73 </div>
74 <div class="form-group">
75 <label class="col-sm-2 control-label"></label>
76 <div class="col-sm-10">
77 <div class="form-inline">
78 <div class="input-group-inline">
79 <button class="btn generate">Generate</button>
80 <span>a random</span>
81 <select id="strength" class="strength form-control">
82 <option value="3">3</option>
83 <option value="6">6</option>
84 <option value="9">9</option>
85 <option value="12">12</option>
86 <option value="15" selected>15</option>
87 <option value="18">18</option>
88 <option value="21">21</option>
89 <option value="24">24</option>
90 </select>
91 word mnemonic, or enter your own below.
92 </div>
93 </div>
94 </div>
95 </div>
96 <div class="form-group">
97 <label class="col-sm-2 control-label"></label>
98 <div class="col-sm-10 languages">
99 <a href="#english">English</a>
100 <a href="#japanese" title="Japanese">日本語</a>
101 <span title="Pending availability of BIP39 unit tests">Experimental:</span>
102 <a href="#spanish" title="Spanish">Español</a>
103 <a href="#chinese_simplified" title="Chinese (Simplified)">中文(简体)</a>
104 <a href="#chinese_traditional" title="Chinese (Traditional)">中文(繁體)</a>
105 <a href="#french" title="French">Français</a>
106 <a href="#italian" title="Italian">Italiano</a>
107 </div>
108 </div>
109 <div class="form-group">
110 <label for="phrase" class="col-sm-2 control-label">BIP39 Mnemonic</label>
111 <div class="col-sm-10">
112 <textarea id="phrase" class="phrase form-control"></textarea>
113 </div>
114 </div>
115 <div class="form-group">
116 <label for="passphrase" class="col-sm-2 control-label">BIP39 Passphrase (optional)</label>
117 <div class="col-sm-10">
118 <textarea id="passphrase" class="passphrase form-control"></textarea>
119 </div>
120 </div>
121 <div class="form-group">
122 <label for="seed" class="col-sm-2 control-label">BIP39 Seed</label>
123 <div class="col-sm-10">
124 <textarea id="seed" class="seed form-control" readonly="readonly"></textarea>
125 </div>
126 </div>
127 <div class="form-group">
128 <label for="network-phrase" class="col-sm-2 control-label">Coin</label>
129 <div class="col-sm-10">
130 <select id="network-phrase" class="network form-control">
131 <!-- populated by javascript -->
132 </select>
133 </div>
134 </div>
135 <div class="form-group">
136 <label for="root-key" class="col-sm-2 control-label">BIP32 Root Key</label>
137 <div class="col-sm-10">
138 <textarea id="root-key" class="root-key form-control"></textarea>
139 </div>
140 </div>
141 </form>
142 </div>
143 </div>
144
145 <hr>
146
147 <div class="row">
148 <div class="col-md-12">
149 <h2>Derivation Path</h2>
150 <ul class="derivation-type nav nav-tabs" role="tablist">
151 <li id="bip44-tab" class="active">
152 <a href="#bip44" role="tab" data-toggle="tab">BIP44</a>
153 </li>
154 <li id="bip32-tab">
155 <a href="#bip32" role="tab" data-toggle="tab">BIP32</a>
156 </li>
157 </ul>
158 <div class="derivation-type tab-content">
159 <div id="bip44" class="tab-pane active">
160 <form class="form-horizontal" role="form">
161 <br>
162 <div class="col-sm-2"></div>
163 <div class="col-sm-10">
164 <p>For more info see the <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target="_blank">BIP44 spec</a></p>
165 </div>
166 <div class="form-group">
167 <label for="purpose" class="col-sm-2 control-label">
168 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#purpose" target="_blank">Purpose</a>
169 </label>
170 <div class="col-sm-10">
171 <input id="purpose" type="text" class="purpose form-control" value="44">
172 </div>
173 </div>
174 <div class="form-group">
175 <label for="coin" class="col-sm-2 control-label">
176 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#registered-coin-types" target="_blank">Coin</a>
177 </label>
178 <div class="col-sm-10">
179 <input id="coin" type="text" class="coin form-control" value="0">
180 </div>
181 </div>
182 <div class="form-group">
183 <label for="account" class="col-sm-2 control-label">
184 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#account" target="_blank">Account</a>
185 </label>
186 <div class="col-sm-10">
187 <input id="account" type="text" class="account form-control" value="0">
188 </div>
189 </div>
190 <div class="form-group">
191 <label for="change" class="col-sm-2 control-label">
192 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#change" target="_blank">External / Internal</a>
193 </label>
194 <div class="col-sm-10">
195 <input id="change" type="text" class="change form-control" value="0">
196 </div>
197 </div>
198 <div class="form-group">
199 <label for="bip44-path" class="col-sm-2 control-label">BIP32 Derivation Path</label>
200 <div class="col-sm-10">
201 <input id="bip44-path" type="text" class="path form-control" value="m/44'/0'/0'/0" readonly="readonly">
202 </div>
203 </div>
204 </form>
205 </div>
206 <div id="bip32" class="tab-pane">
207 <form class="form-horizontal" role="form">
208 <br>
209 <div class="col-sm-2"></div>
210 <div class="col-sm-10">
211 <p>For more info see the <a href="https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target="_blank">BIP32 spec</a></p>
212 </div>
213 <div class="form-group">
214 <label for="bip32-path" class="col-sm-2 control-label">BIP32 Derivation Path</label>
215 <div class="col-sm-10">
216 <input id="bip32-path" type="text" class="path form-control" value="m/0">
217 </div>
218 </div>
219 <div class="form-group">
220 <div class="col-sm-2"></div>
221 <label class="col-sm-10">
222 <input class="hardened-addresses" type="checkbox">
223 Use hardened addresses
224 </label>
225 </div>
226 <div class="form-group">
227 <label class="col-sm-2 control-label">Hive Wallet</label>
228 <div class="col-sm-10">
229 <p class="form-control no-border">
230 Use path <code>m/0'/0</code>.
231 For more info see the <a href="https://www.hivewallet.com/" target="_blank">Hive Wallet homepage</a>
232 </p>
233 </div>
234 </div>
235 <div class="form-group">
236 <label for="mycelium-path" class="col-sm-2 control-label">Mycelium Wallet</label>
237 <div class="col-sm-10">
238 <p class="form-control no-border">
239 Use path <code>m/44'/0'/0'/0</code>.
240 For more info see the <a href="http://www.mycelium.com/" target="_blank">Mycelium Wallet homepage</a>
241 </p>
242 </div>
243 </div>
244 <div class="form-group">
245 <label for="core-path" class="col-sm-2 control-label">Bitcoin Core</label>
246 <div class="col-sm-10">
247 <p class="form-control no-border">
248 Use path <code>m/0'/0'</code> with hardened addresses.
249 For more info see the <a href="https://github.com/bitcoin/bitcoin/pull/8035" target="_blank">Bitcoin Core BIP32 implementation</a>
250 </p>
251 </div>
252 </div>
253 <div class="form-group">
254 <label class="col-sm-2 control-label">Block Explorers</label>
255 <div class="col-sm-10">
256 <p class="form-control no-border">
257 Use path <code>m/44'/0'/0'</code>.
258 Only enter the <code>xpub</code> extended key into block explorer search fields, never the <code>xpriv</code> key.
259 </p>
260 </div>
261 </div>
262 </form>
263 </div>
264 </div>
265 <form class="form-horizontal" role="form">
266 <div class="form-group">
267 <label for="extended-priv-key" class="col-sm-2 control-label">BIP32 Extended Key</label>
268 <div class="col-sm-10">
269 <textarea id="extended-priv-key" class="extended-priv-key form-control" readonly="readonly"></textarea>
270 </div>
271 </div>
272 <div class="form-group">
273 <label for="extended-pub-key" class="col-sm-2 control-label">BIP32 Extended Key (addresses only)</label>
274 <div class="col-sm-10">
275 <textarea id="extended-pub-key" class="extended-pub-key form-control" readonly="readonly"></textarea>
276 </div>
277 </div>
278 </form>
279 </div>
280 </div>
281
282 <hr>
283
284 <div class="row">
285 <div class="col-md-12">
286 <h2>Derived Addresses</h2>
287 <p>Note these addreses are derived from the <strong>BIP32 Extended Key</strong></p>
288 <table class="table table-striped">
289 <thead>
290 <th>
291 <div class="input-group">
292 Path&nbsp;&nbsp;
293 <button class="index-toggle">Toggle</button>
294 </div>
295 </th>
296 <th>
297 <div class="input-group">
298 Address&nbsp;&nbsp;
299 <button class="address-toggle">Toggle</button>
300 </div>
301 </th>
302 <th>
303 <div class="input-group">
304 Private Key&nbsp;&nbsp;
305 <button class="private-key-toggle">Toggle</button>
306 </div>
307 </th>
308 </thead>
309 <tbody class="addresses">
310 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
311 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
312 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
313 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
314 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
315 </tbody>
316 </table>
317 </div>
318 </div>
319 <span>Show next </button>
320 <input type="number" class="rows-to-add" value="20">
321 <button class="more">Show</button>
322
323 <hr>
324
325 <div class="row">
326 <div class="col-md-12">
327 <h2>More info</h2>
328 <h3>BIP39 <span class="small">Mnemonic code for generating deterministic keys</span></h3>
329 <p>
330 Read more at the
331 <a href="https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki">official BIP39 spec</a>
332 </p>
333 <h3>BIP32 <span class="small">Hierarchical Deterministic Wallets</span></h3>
334 <p>
335 Read more at the
336 <a href="https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target="_blank">official BIP32 spec</a>
337 and see the demo at
338 <a href="http://bip32.org/" target="_blank">bip32.org</a>
339 </p>
340 <h3>BIP44 <span class="small">Multi-Account Hierarchy for Deterministic Wallets</span></h3>
341 <p>
342 Read more at the
343 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target="_blank">official BIP44 spec</a>
344 </p>
345 <h3>Private Keys</h3>
346 <p>
347 Use private keys at
348 <a href="https://web.archive.org/web/20150707020924/https://brainwallet.org/" target="_blank">brainwallet.org</a>,
349 but be careful - it can be easy to make mistakes if you
350 don't know what you're doing
351 </p>
352 </div>
353 </div>
354
355 <hr>
356
357 <div class="row">
358 <div class="col-md-12">
359
360 <h2>Offline Usage</h2>
361
362 <p>
363 You can use this tool without having to be online.
364 </p>
365 <p>
366 In your browser, select file save-as, and save this page
367 as a file.
368 </p>
369 <p>
370 Double-click that file to open it in a browser
371 on any offline computer.
372 </p>
373 <p>
374 Alternatively, download it from
375 <a href="https://github.com/iancoleman/bip39">
376 https://github.com/iancoleman/bip39
377 </a>
378
379 </div>
380 </div>
381
382 <hr>
383
384 <div class="row">
385 <div class="col-md-12">
386
387 <h2>This project is 100% open-source code</h2>
388
389 <p>
390 <span>Get the source code at - </span>
391 <a href="https://github.com/iancoleman/bip39" target="_blank">
392 https://github.com/iancoleman/bip39
393 </a>
394 </p>
395
396 <h3>Libraries</h3>
397
398 <p>
399 <span>BitcoinJS - </span>
400 <a href="https://github.com/bitcoinjs/bitcoinjs-lib" target="_blank">
401 https://github.com/bitcoinjs/bitcoinjs-lib
402 </a>
403 </p>
404
405 <p>
406 <span>jsBIP39 - </span>
407 <a href="https://github.com/iancoleman/jsbip39" target="_blank">
408 https://github.com/iancoleman/jsbip39
409 </a>
410 </p>
411
412 <p>
413 <span>sjcl - </span>
414 <a href="https://github.com/bitwiseshiftleft/sjcl" target="_blank">
415 https://github.com/bitwiseshiftleft/sjcl
416 </a>
417 </p>
418
419 <p>
420 <span>jQuery - </span>
421 <a href="https://jquery.com/" target="_blank">
422 https://jquery.com/
423 </a>
424 </p>
425
426 <p>
427 <span>Twitter Bootstrap - </span>
428 <a href="http://getbootstrap.com/" target="_blank">
429 http://getbootstrap.com/
430 </a>
431 </p>
432
433 </div>
434 </div>
435
436 </div>
437
438 <div class="feedback-container">
439 <div class="feedback">Loading...</div>
440 </div>
441
442 <script type="text/template" id="address-row-template">
443 <tr>
444 <td class="index"><span></span></td>
445 <td class="address"><span></span></td>
446 <td class="privkey"><span></span></td>
447 </tr>
448 </script>
449 <script>/*! jQuery v2.1.1 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */
450 !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)
451 },_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))
452 },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});
453 </script>
454 <script>/*!
455 * Bootstrap v3.2.0 (http://getbootstrap.com)
456 * Copyright 2011-2014 Twitter, Inc.
457 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
458 */
459 if("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>
460 <script>(function() {
461 'use strict';
462
463 /**
464 * Extend an Object with another Object's properties.
465 *
466 * The source objects are specified as additional arguments.
467 *
468 * @param dst Object the object to extend.
469 *
470 * @return Object the final object.
471 */
472 var _extend = function(dst) {
473 var sources = Array.prototype.slice.call(arguments, 1);
474 for (var i=0; i<sources.length; ++i) {
475 var src = sources[i];
476 for (var p in src) {
477 if (src.hasOwnProperty(p)) dst[p] = src[p];
478 }
479 }
480 return dst;
481 };
482
483
484 /**
485 * Defer execution of given function.
486 * @param {Function} func
487 */
488 var _defer = function(func) {
489 if (typeof setImmediate === 'function') {
490 return setImmediate(func);
491 } else {
492 return setTimeout(func, 0);
493 }
494 };
495
496 /**
497 * Based on the algorithm at http://en.wikipedia.org/wiki/Levenshtein_distance.
498 */
499 var Levenshtein = {
500 /**
501 * Calculate levenshtein distance of the two strings.
502 *
503 * @param str1 String the first string.
504 * @param str2 String the second string.
505 * @return Integer the levenshtein distance (0 and above).
506 */
507 get: function(str1, str2) {
508 // base cases
509 if (str1 === str2) return 0;
510 if (str1.length === 0) return str2.length;
511 if (str2.length === 0) return str1.length;
512
513 // two rows
514 var prevRow = new Array(str2.length + 1),
515 curCol, nextCol, i, j, tmp;
516
517 // initialise previous row
518 for (i=0; i<prevRow.length; ++i) {
519 prevRow[i] = i;
520 }
521
522 // calculate current row distance from previous row
523 for (i=0; i<str1.length; ++i) {
524 nextCol = i + 1;
525
526 for (j=0; j<str2.length; ++j) {
527 curCol = nextCol;
528
529 // substution
530 nextCol = prevRow[j] + ( (str1.charAt(i) === str2.charAt(j)) ? 0 : 1 );
531 // insertion
532 tmp = curCol + 1;
533 if (nextCol > tmp) {
534 nextCol = tmp;
535 }
536 // deletion
537 tmp = prevRow[j + 1] + 1;
538 if (nextCol > tmp) {
539 nextCol = tmp;
540 }
541
542 // copy current col value into previous (in preparation for next iteration)
543 prevRow[j] = curCol;
544 }
545
546 // copy last col value into previous (in preparation for next iteration)
547 prevRow[j] = nextCol;
548 }
549
550 return nextCol;
551 },
552
553 /**
554 * Asynchronously calculate levenshtein distance of the two strings.
555 *
556 * @param str1 String the first string.
557 * @param str2 String the second string.
558 * @param cb Function callback function with signature: function(Error err, int distance)
559 * @param [options] Object additional options.
560 * @param [options.progress] Function progress callback with signature: function(percentComplete)
561 */
562 getAsync: function(str1, str2, cb, options) {
563 options = _extend({}, {
564 progress: null
565 }, options);
566
567 // base cases
568 if (str1 === str2) return cb(null, 0);
569 if (str1.length === 0) return cb(null, str2.length);
570 if (str2.length === 0) return cb(null, str1.length);
571
572 // two rows
573 var prevRow = new Array(str2.length + 1),
574 curCol, nextCol,
575 i, j, tmp,
576 startTime, currentTime;
577
578 // initialise previous row
579 for (i=0; i<prevRow.length; ++i) {
580 prevRow[i] = i;
581 }
582
583 nextCol = 1;
584 i = 0;
585 j = -1;
586
587 var __calculate = function() {
588 // reset timer
589 startTime = new Date().valueOf();
590 currentTime = startTime;
591
592 // keep going until one second has elapsed
593 while (currentTime - startTime < 1000) {
594 // reached end of current row?
595 if (str2.length <= (++j)) {
596 // copy current into previous (in preparation for next iteration)
597 prevRow[j] = nextCol;
598
599 // if already done all chars
600 if (str1.length <= (++i)) {
601 return cb(null, nextCol);
602 }
603 // else if we have more left to do
604 else {
605 nextCol = i + 1;
606 j = 0;
607 }
608 }
609
610 // calculation
611 curCol = nextCol;
612
613 // substution
614 nextCol = prevRow[j] + ( (str1.charAt(i) === str2.charAt(j)) ? 0 : 1 );
615 // insertion
616 tmp = curCol + 1;
617 if (nextCol > tmp) {
618 nextCol = tmp;
619 }
620 // deletion
621 tmp = prevRow[j + 1] + 1;
622 if (nextCol > tmp) {
623 nextCol = tmp;
624 }
625
626 // copy current into previous (in preparation for next iteration)
627 prevRow[j] = curCol;
628
629 // get current time
630 currentTime = new Date().valueOf();
631 }
632
633 // send a progress update?
634 if (null !== options.progress) {
635 try {
636 options.progress.call(null, (i * 100.0/ str1.length));
637 } catch (err) {
638 return cb('Progress callback: ' + err.toString());
639 }
640 }
641
642 // next iteration
643 _defer(__calculate);
644 };
645
646 __calculate();
647 }
648
649 };
650
651 // amd
652 if (typeof define !== "undefined" && define !== null && define.amd) {
653 define(function() {
654 return Levenshtein;
655 });
656 }
657 // commonjs
658 else if (typeof module !== "undefined" && module !== null && typeof exports !== "undefined" && module.exports === exports) {
659 module.exports = Levenshtein;
660 }
661 // web worker
662 else if (typeof self !== "undefined" && typeof self.postMessage === 'function' && typeof self.importScripts === 'function') {
663 self.Levenshtein = Levenshtein;
664 }
665 // browser main thread
666 else if (typeof window !== "undefined" && window !== null) {
667 window.Levenshtein = Levenshtein;
668 }
669 }());
670
671 </script>
672 <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){
673 // (public) Constructor
674 function BigInteger(a, b, c) {
675 if (!(this instanceof BigInteger))
676 return new BigInteger(a, b, c)
677
678 if (a != null) {
679 if ("number" == typeof a) this.fromNumber(a, b, c)
680 else if (b == null && "string" != typeof a) this.fromString(a, 256)
681 else this.fromString(a, b)
682 }
683 }
684
685 var proto = BigInteger.prototype
686
687 // duck-typed isBigInteger
688 proto.__bigi = require('../package.json').version
689 BigInteger.isBigInteger = function (obj, check_ver) {
690 return obj && obj.__bigi && (!check_ver || obj.__bigi === proto.__bigi)
691 }
692
693 // Bits per digit
694 var dbits
695
696 // am: Compute w_j += (x*this_i), propagate carries,
697 // c is initial carry, returns final carry.
698 // c < 3*dvalue, x < 2*dvalue, this_i < dvalue
699 // We need to select the fastest one that works in this environment.
700
701 // am1: use a single mult and divide to get the high bits,
702 // max digit bits should be 26 because
703 // max internal value = 2*dvalue^2-2*dvalue (< 2^53)
704 function am1(i, x, w, j, c, n) {
705 while (--n >= 0) {
706 var v = x * this[i++] + w[j] + c
707 c = Math.floor(v / 0x4000000)
708 w[j++] = v & 0x3ffffff
709 }
710 return c
711 }
712 // am2 avoids a big mult-and-extract completely.
713 // Max digit bits should be <= 30 because we do bitwise ops
714 // on values up to 2*hdvalue^2-hdvalue-1 (< 2^31)
715 function am2(i, x, w, j, c, n) {
716 var xl = x & 0x7fff,
717 xh = x >> 15
718 while (--n >= 0) {
719 var l = this[i] & 0x7fff
720 var h = this[i++] >> 15
721 var m = xh * l + h * xl
722 l = xl * l + ((m & 0x7fff) << 15) + w[j] + (c & 0x3fffffff)
723 c = (l >>> 30) + (m >>> 15) + xh * h + (c >>> 30)
724 w[j++] = l & 0x3fffffff
725 }
726 return c
727 }
728 // Alternately, set max digit bits to 28 since some
729 // browsers slow down when dealing with 32-bit numbers.
730 function am3(i, x, w, j, c, n) {
731 var xl = x & 0x3fff,
732 xh = x >> 14
733 while (--n >= 0) {
734 var l = this[i] & 0x3fff
735 var h = this[i++] >> 14
736 var m = xh * l + h * xl
737 l = xl * l + ((m & 0x3fff) << 14) + w[j] + c
738 c = (l >> 28) + (m >> 14) + xh * h
739 w[j++] = l & 0xfffffff
740 }
741 return c
742 }
743
744 // wtf?
745 BigInteger.prototype.am = am1
746 dbits = 26
747
748 BigInteger.prototype.DB = dbits
749 BigInteger.prototype.DM = ((1 << dbits) - 1)
750 var DV = BigInteger.prototype.DV = (1 << dbits)
751
752 var BI_FP = 52
753 BigInteger.prototype.FV = Math.pow(2, BI_FP)
754 BigInteger.prototype.F1 = BI_FP - dbits
755 BigInteger.prototype.F2 = 2 * dbits - BI_FP
756
757 // Digit conversions
758 var BI_RM = "0123456789abcdefghijklmnopqrstuvwxyz"
759 var BI_RC = new Array()
760 var rr, vv
761 rr = "0".charCodeAt(0)
762 for (vv = 0; vv <= 9; ++vv) BI_RC[rr++] = vv
763 rr = "a".charCodeAt(0)
764 for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv
765 rr = "A".charCodeAt(0)
766 for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv
767
768 function int2char(n) {
769 return BI_RM.charAt(n)
770 }
771
772 function intAt(s, i) {
773 var c = BI_RC[s.charCodeAt(i)]
774 return (c == null) ? -1 : c
775 }
776
777 // (protected) copy this to r
778 function bnpCopyTo(r) {
779 for (var i = this.t - 1; i >= 0; --i) r[i] = this[i]
780 r.t = this.t
781 r.s = this.s
782 }
783
784 // (protected) set from integer value x, -DV <= x < DV
785 function bnpFromInt(x) {
786 this.t = 1
787 this.s = (x < 0) ? -1 : 0
788 if (x > 0) this[0] = x
789 else if (x < -1) this[0] = x + DV
790 else this.t = 0
791 }
792
793 // return bigint initialized to value
794 function nbv(i) {
795 var r = new BigInteger()
796 r.fromInt(i)
797 return r
798 }
799
800 // (protected) set from string and radix
801 function bnpFromString(s, b) {
802 var self = this
803
804 var k
805 if (b == 16) k = 4
806 else if (b == 8) k = 3
807 else if (b == 256) k = 8; // byte array
808 else if (b == 2) k = 1
809 else if (b == 32) k = 5
810 else if (b == 4) k = 2
811 else {
812 self.fromRadix(s, b)
813 return
814 }
815 self.t = 0
816 self.s = 0
817 var i = s.length,
818 mi = false,
819 sh = 0
820 while (--i >= 0) {
821 var x = (k == 8) ? s[i] & 0xff : intAt(s, i)
822 if (x < 0) {
823 if (s.charAt(i) == "-") mi = true
824 continue
825 }
826 mi = false
827 if (sh == 0)
828 self[self.t++] = x
829 else if (sh + k > self.DB) {
830 self[self.t - 1] |= (x & ((1 << (self.DB - sh)) - 1)) << sh
831 self[self.t++] = (x >> (self.DB - sh))
832 } else
833 self[self.t - 1] |= x << sh
834 sh += k
835 if (sh >= self.DB) sh -= self.DB
836 }
837 if (k == 8 && (s[0] & 0x80) != 0) {
838 self.s = -1
839 if (sh > 0) self[self.t - 1] |= ((1 << (self.DB - sh)) - 1) << sh
840 }
841 self.clamp()
842 if (mi) BigInteger.ZERO.subTo(self, self)
843 }
844
845 // (protected) clamp off excess high words
846 function bnpClamp() {
847 var c = this.s & this.DM
848 while (this.t > 0 && this[this.t - 1] == c)--this.t
849 }
850
851 // (public) return string representation in given radix
852 function bnToString(b) {
853 var self = this
854 if (self.s < 0) return "-" + self.negate()
855 .toString(b)
856 var k
857 if (b == 16) k = 4
858 else if (b == 8) k = 3
859 else if (b == 2) k = 1
860 else if (b == 32) k = 5
861 else if (b == 4) k = 2
862 else return self.toRadix(b)
863 var km = (1 << k) - 1,
864 d, m = false,
865 r = "",
866 i = self.t
867 var p = self.DB - (i * self.DB) % k
868 if (i-- > 0) {
869 if (p < self.DB && (d = self[i] >> p) > 0) {
870 m = true
871 r = int2char(d)
872 }
873 while (i >= 0) {
874 if (p < k) {
875 d = (self[i] & ((1 << p) - 1)) << (k - p)
876 d |= self[--i] >> (p += self.DB - k)
877 } else {
878 d = (self[i] >> (p -= k)) & km
879 if (p <= 0) {
880 p += self.DB
881 --i
882 }
883 }
884 if (d > 0) m = true
885 if (m) r += int2char(d)
886 }
887 }
888 return m ? r : "0"
889 }
890
891 // (public) -this
892 function bnNegate() {
893 var r = new BigInteger()
894 BigInteger.ZERO.subTo(this, r)
895 return r
896 }
897
898 // (public) |this|
899 function bnAbs() {
900 return (this.s < 0) ? this.negate() : this
901 }
902
903 // (public) return + if this > a, - if this < a, 0 if equal
904 function bnCompareTo(a) {
905 var r = this.s - a.s
906 if (r != 0) return r
907 var i = this.t
908 r = i - a.t
909 if (r != 0) return (this.s < 0) ? -r : r
910 while (--i >= 0)
911 if ((r = this[i] - a[i]) != 0) return r
912 return 0
913 }
914
915 // returns bit length of the integer x
916 function nbits(x) {
917 var r = 1,
918 t
919 if ((t = x >>> 16) != 0) {
920 x = t
921 r += 16
922 }
923 if ((t = x >> 8) != 0) {
924 x = t
925 r += 8
926 }
927 if ((t = x >> 4) != 0) {
928 x = t
929 r += 4
930 }
931 if ((t = x >> 2) != 0) {
932 x = t
933 r += 2
934 }
935 if ((t = x >> 1) != 0) {
936 x = t
937 r += 1
938 }
939 return r
940 }
941
942 // (public) return the number of bits in "this"
943 function bnBitLength() {
944 if (this.t <= 0) return 0
945 return this.DB * (this.t - 1) + nbits(this[this.t - 1] ^ (this.s & this.DM))
946 }
947
948 // (public) return the number of bytes in "this"
949 function bnByteLength() {
950 return this.bitLength() >> 3
951 }
952
953 // (protected) r = this << n*DB
954 function bnpDLShiftTo(n, r) {
955 var i
956 for (i = this.t - 1; i >= 0; --i) r[i + n] = this[i]
957 for (i = n - 1; i >= 0; --i) r[i] = 0
958 r.t = this.t + n
959 r.s = this.s
960 }
961
962 // (protected) r = this >> n*DB
963 function bnpDRShiftTo(n, r) {
964 for (var i = n; i < this.t; ++i) r[i - n] = this[i]
965 r.t = Math.max(this.t - n, 0)
966 r.s = this.s
967 }
968
969 // (protected) r = this << n
970 function bnpLShiftTo(n, r) {
971 var self = this
972 var bs = n % self.DB
973 var cbs = self.DB - bs
974 var bm = (1 << cbs) - 1
975 var ds = Math.floor(n / self.DB),
976 c = (self.s << bs) & self.DM,
977 i
978 for (i = self.t - 1; i >= 0; --i) {
979 r[i + ds + 1] = (self[i] >> cbs) | c
980 c = (self[i] & bm) << bs
981 }
982 for (i = ds - 1; i >= 0; --i) r[i] = 0
983 r[ds] = c
984 r.t = self.t + ds + 1
985 r.s = self.s
986 r.clamp()
987 }
988
989 // (protected) r = this >> n
990 function bnpRShiftTo(n, r) {
991 var self = this
992 r.s = self.s
993 var ds = Math.floor(n / self.DB)
994 if (ds >= self.t) {
995 r.t = 0
996 return
997 }
998 var bs = n % self.DB
999 var cbs = self.DB - bs
1000 var bm = (1 << bs) - 1
1001 r[0] = self[ds] >> bs
1002 for (var i = ds + 1; i < self.t; ++i) {
1003 r[i - ds - 1] |= (self[i] & bm) << cbs
1004 r[i - ds] = self[i] >> bs
1005 }
1006 if (bs > 0) r[self.t - ds - 1] |= (self.s & bm) << cbs
1007 r.t = self.t - ds
1008 r.clamp()
1009 }
1010
1011 // (protected) r = this - a
1012 function bnpSubTo(a, r) {
1013 var self = this
1014 var i = 0,
1015 c = 0,
1016 m = Math.min(a.t, self.t)
1017 while (i < m) {
1018 c += self[i] - a[i]
1019 r[i++] = c & self.DM
1020 c >>= self.DB
1021 }
1022 if (a.t < self.t) {
1023 c -= a.s
1024 while (i < self.t) {
1025 c += self[i]
1026 r[i++] = c & self.DM
1027 c >>= self.DB
1028 }
1029 c += self.s
1030 } else {
1031 c += self.s
1032 while (i < a.t) {
1033 c -= a[i]
1034 r[i++] = c & self.DM
1035 c >>= self.DB
1036 }
1037 c -= a.s
1038 }
1039 r.s = (c < 0) ? -1 : 0
1040 if (c < -1) r[i++] = self.DV + c
1041 else if (c > 0) r[i++] = c
1042 r.t = i
1043 r.clamp()
1044 }
1045
1046 // (protected) r = this * a, r != this,a (HAC 14.12)
1047 // "this" should be the larger one if appropriate.
1048 function bnpMultiplyTo(a, r) {
1049 var x = this.abs(),
1050 y = a.abs()
1051 var i = x.t
1052 r.t = i + y.t
1053 while (--i >= 0) r[i] = 0
1054 for (i = 0; i < y.t; ++i) r[i + x.t] = x.am(0, y[i], r, i, 0, x.t)
1055 r.s = 0
1056 r.clamp()
1057 if (this.s != a.s) BigInteger.ZERO.subTo(r, r)
1058 }
1059
1060 // (protected) r = this^2, r != this (HAC 14.16)
1061 function bnpSquareTo(r) {
1062 var x = this.abs()
1063 var i = r.t = 2 * x.t
1064 while (--i >= 0) r[i] = 0
1065 for (i = 0; i < x.t - 1; ++i) {
1066 var c = x.am(i, x[i], r, 2 * i, 0, 1)
1067 if ((r[i + x.t] += x.am(i + 1, 2 * x[i], r, 2 * i + 1, c, x.t - i - 1)) >= x.DV) {
1068 r[i + x.t] -= x.DV
1069 r[i + x.t + 1] = 1
1070 }
1071 }
1072 if (r.t > 0) r[r.t - 1] += x.am(i, x[i], r, 2 * i, 0, 1)
1073 r.s = 0
1074 r.clamp()
1075 }
1076
1077 // (protected) divide this by m, quotient and remainder to q, r (HAC 14.20)
1078 // r != q, this != m. q or r may be null.
1079 function bnpDivRemTo(m, q, r) {
1080 var self = this
1081 var pm = m.abs()
1082 if (pm.t <= 0) return
1083 var pt = self.abs()
1084 if (pt.t < pm.t) {
1085 if (q != null) q.fromInt(0)
1086 if (r != null) self.copyTo(r)
1087 return
1088 }
1089 if (r == null) r = new BigInteger()
1090 var y = new BigInteger(),
1091 ts = self.s,
1092 ms = m.s
1093 var nsh = self.DB - nbits(pm[pm.t - 1]); // normalize modulus
1094 if (nsh > 0) {
1095 pm.lShiftTo(nsh, y)
1096 pt.lShiftTo(nsh, r)
1097 } else {
1098 pm.copyTo(y)
1099 pt.copyTo(r)
1100 }
1101 var ys = y.t
1102 var y0 = y[ys - 1]
1103 if (y0 == 0) return
1104 var yt = y0 * (1 << self.F1) + ((ys > 1) ? y[ys - 2] >> self.F2 : 0)
1105 var d1 = self.FV / yt,
1106 d2 = (1 << self.F1) / yt,
1107 e = 1 << self.F2
1108 var i = r.t,
1109 j = i - ys,
1110 t = (q == null) ? new BigInteger() : q
1111 y.dlShiftTo(j, t)
1112 if (r.compareTo(t) >= 0) {
1113 r[r.t++] = 1
1114 r.subTo(t, r)
1115 }
1116 BigInteger.ONE.dlShiftTo(ys, t)
1117 t.subTo(y, y); // "negative" y so we can replace sub with am later
1118 while (y.t < ys) y[y.t++] = 0
1119 while (--j >= 0) {
1120 // Estimate quotient digit
1121 var qd = (r[--i] == y0) ? self.DM : Math.floor(r[i] * d1 + (r[i - 1] + e) * d2)
1122 if ((r[i] += y.am(0, qd, r, j, 0, ys)) < qd) { // Try it out
1123 y.dlShiftTo(j, t)
1124 r.subTo(t, r)
1125 while (r[i] < --qd) r.subTo(t, r)
1126 }
1127 }
1128 if (q != null) {
1129 r.drShiftTo(ys, q)
1130 if (ts != ms) BigInteger.ZERO.subTo(q, q)
1131 }
1132 r.t = ys
1133 r.clamp()
1134 if (nsh > 0) r.rShiftTo(nsh, r); // Denormalize remainder
1135 if (ts < 0) BigInteger.ZERO.subTo(r, r)
1136 }
1137
1138 // (public) this mod a
1139 function bnMod(a) {
1140 var r = new BigInteger()
1141 this.abs()
1142 .divRemTo(a, null, r)
1143 if (this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) a.subTo(r, r)
1144 return r
1145 }
1146
1147 // Modular reduction using "classic" algorithm
1148 function Classic(m) {
1149 this.m = m
1150 }
1151
1152 function cConvert(x) {
1153 if (x.s < 0 || x.compareTo(this.m) >= 0) return x.mod(this.m)
1154 else return x
1155 }
1156
1157 function cRevert(x) {
1158 return x
1159 }
1160
1161 function cReduce(x) {
1162 x.divRemTo(this.m, null, x)
1163 }
1164
1165 function cMulTo(x, y, r) {
1166 x.multiplyTo(y, r)
1167 this.reduce(r)
1168 }
1169
1170 function cSqrTo(x, r) {
1171 x.squareTo(r)
1172 this.reduce(r)
1173 }
1174
1175 Classic.prototype.convert = cConvert
1176 Classic.prototype.revert = cRevert
1177 Classic.prototype.reduce = cReduce
1178 Classic.prototype.mulTo = cMulTo
1179 Classic.prototype.sqrTo = cSqrTo
1180
1181 // (protected) return "-1/this % 2^DB"; useful for Mont. reduction
1182 // justification:
1183 // xy == 1 (mod m)
1184 // xy = 1+km
1185 // xy(2-xy) = (1+km)(1-km)
1186 // x[y(2-xy)] = 1-k^2m^2
1187 // x[y(2-xy)] == 1 (mod m^2)
1188 // if y is 1/x mod m, then y(2-xy) is 1/x mod m^2
1189 // should reduce x and y(2-xy) by m^2 at each step to keep size bounded.
1190 // JS multiply "overflows" differently from C/C++, so care is needed here.
1191 function bnpInvDigit() {
1192 if (this.t < 1) return 0
1193 var x = this[0]
1194 if ((x & 1) == 0) return 0
1195 var y = x & 3; // y == 1/x mod 2^2
1196 y = (y * (2 - (x & 0xf) * y)) & 0xf; // y == 1/x mod 2^4
1197 y = (y * (2 - (x & 0xff) * y)) & 0xff; // y == 1/x mod 2^8
1198 y = (y * (2 - (((x & 0xffff) * y) & 0xffff))) & 0xffff; // y == 1/x mod 2^16
1199 // last step - calculate inverse mod DV directly
1200 // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints
1201 y = (y * (2 - x * y % this.DV)) % this.DV; // y == 1/x mod 2^dbits
1202 // we really want the negative inverse, and -DV < y < DV
1203 return (y > 0) ? this.DV - y : -y
1204 }
1205
1206 // Montgomery reduction
1207 function Montgomery(m) {
1208 this.m = m
1209 this.mp = m.invDigit()
1210 this.mpl = this.mp & 0x7fff
1211 this.mph = this.mp >> 15
1212 this.um = (1 << (m.DB - 15)) - 1
1213 this.mt2 = 2 * m.t
1214 }
1215
1216 // xR mod m
1217 function montConvert(x) {
1218 var r = new BigInteger()
1219 x.abs()
1220 .dlShiftTo(this.m.t, r)
1221 r.divRemTo(this.m, null, r)
1222 if (x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) this.m.subTo(r, r)
1223 return r
1224 }
1225
1226 // x/R mod m
1227 function montRevert(x) {
1228 var r = new BigInteger()
1229 x.copyTo(r)
1230 this.reduce(r)
1231 return r
1232 }
1233
1234 // x = x/R mod m (HAC 14.32)
1235 function montReduce(x) {
1236 while (x.t <= this.mt2) // pad x so am has enough room later
1237 x[x.t++] = 0
1238 for (var i = 0; i < this.m.t; ++i) {
1239 // faster way of calculating u0 = x[i]*mp mod DV
1240 var j = x[i] & 0x7fff
1241 var u0 = (j * this.mpl + (((j * this.mph + (x[i] >> 15) * this.mpl) & this.um) << 15)) & x.DM
1242 // use am to combine the multiply-shift-add into one call
1243 j = i + this.m.t
1244 x[j] += this.m.am(0, u0, x, i, 0, this.m.t)
1245 // propagate carry
1246 while (x[j] >= x.DV) {
1247 x[j] -= x.DV
1248 x[++j]++
1249 }
1250 }
1251 x.clamp()
1252 x.drShiftTo(this.m.t, x)
1253 if (x.compareTo(this.m) >= 0) x.subTo(this.m, x)
1254 }
1255
1256 // r = "x^2/R mod m"; x != r
1257 function montSqrTo(x, r) {
1258 x.squareTo(r)
1259 this.reduce(r)
1260 }
1261
1262 // r = "xy/R mod m"; x,y != r
1263 function montMulTo(x, y, r) {
1264 x.multiplyTo(y, r)
1265 this.reduce(r)
1266 }
1267
1268 Montgomery.prototype.convert = montConvert
1269 Montgomery.prototype.revert = montRevert
1270 Montgomery.prototype.reduce = montReduce
1271 Montgomery.prototype.mulTo = montMulTo
1272 Montgomery.prototype.sqrTo = montSqrTo
1273
1274 // (protected) true iff this is even
1275 function bnpIsEven() {
1276 return ((this.t > 0) ? (this[0] & 1) : this.s) == 0
1277 }
1278
1279 // (protected) this^e, e < 2^32, doing sqr and mul with "r" (HAC 14.79)
1280 function bnpExp(e, z) {
1281 if (e > 0xffffffff || e < 1) return BigInteger.ONE
1282 var r = new BigInteger(),
1283 r2 = new BigInteger(),
1284 g = z.convert(this),
1285 i = nbits(e) - 1
1286 g.copyTo(r)
1287 while (--i >= 0) {
1288 z.sqrTo(r, r2)
1289 if ((e & (1 << i)) > 0) z.mulTo(r2, g, r)
1290 else {
1291 var t = r
1292 r = r2
1293 r2 = t
1294 }
1295 }
1296 return z.revert(r)
1297 }
1298
1299 // (public) this^e % m, 0 <= e < 2^32
1300 function bnModPowInt(e, m) {
1301 var z
1302 if (e < 256 || m.isEven()) z = new Classic(m)
1303 else z = new Montgomery(m)
1304 return this.exp(e, z)
1305 }
1306
1307 // protected
1308 proto.copyTo = bnpCopyTo
1309 proto.fromInt = bnpFromInt
1310 proto.fromString = bnpFromString
1311 proto.clamp = bnpClamp
1312 proto.dlShiftTo = bnpDLShiftTo
1313 proto.drShiftTo = bnpDRShiftTo
1314 proto.lShiftTo = bnpLShiftTo
1315 proto.rShiftTo = bnpRShiftTo
1316 proto.subTo = bnpSubTo
1317 proto.multiplyTo = bnpMultiplyTo
1318 proto.squareTo = bnpSquareTo
1319 proto.divRemTo = bnpDivRemTo
1320 proto.invDigit = bnpInvDigit
1321 proto.isEven = bnpIsEven
1322 proto.exp = bnpExp
1323
1324 // public
1325 proto.toString = bnToString
1326 proto.negate = bnNegate
1327 proto.abs = bnAbs
1328 proto.compareTo = bnCompareTo
1329 proto.bitLength = bnBitLength
1330 proto.byteLength = bnByteLength
1331 proto.mod = bnMod
1332 proto.modPowInt = bnModPowInt
1333
1334 // (public)
1335 function bnClone() {
1336 var r = new BigInteger()
1337 this.copyTo(r)
1338 return r
1339 }
1340
1341 // (public) return value as integer
1342 function bnIntValue() {
1343 if (this.s < 0) {
1344 if (this.t == 1) return this[0] - this.DV
1345 else if (this.t == 0) return -1
1346 } else if (this.t == 1) return this[0]
1347 else if (this.t == 0) return 0
1348 // assumes 16 < DB < 32
1349 return ((this[1] & ((1 << (32 - this.DB)) - 1)) << this.DB) | this[0]
1350 }
1351
1352 // (public) return value as byte
1353 function bnByteValue() {
1354 return (this.t == 0) ? this.s : (this[0] << 24) >> 24
1355 }
1356
1357 // (public) return value as short (assumes DB>=16)
1358 function bnShortValue() {
1359 return (this.t == 0) ? this.s : (this[0] << 16) >> 16
1360 }
1361
1362 // (protected) return x s.t. r^x < DV
1363 function bnpChunkSize(r) {
1364 return Math.floor(Math.LN2 * this.DB / Math.log(r))
1365 }
1366
1367 // (public) 0 if this == 0, 1 if this > 0
1368 function bnSigNum() {
1369 if (this.s < 0) return -1
1370 else if (this.t <= 0 || (this.t == 1 && this[0] <= 0)) return 0
1371 else return 1
1372 }
1373
1374 // (protected) convert to radix string
1375 function bnpToRadix(b) {
1376 if (b == null) b = 10
1377 if (this.signum() == 0 || b < 2 || b > 36) return "0"
1378 var cs = this.chunkSize(b)
1379 var a = Math.pow(b, cs)
1380 var d = nbv(a),
1381 y = new BigInteger(),
1382 z = new BigInteger(),
1383 r = ""
1384 this.divRemTo(d, y, z)
1385 while (y.signum() > 0) {
1386 r = (a + z.intValue())
1387 .toString(b)
1388 .substr(1) + r
1389 y.divRemTo(d, y, z)
1390 }
1391 return z.intValue()
1392 .toString(b) + r
1393 }
1394
1395 // (protected) convert from radix string
1396 function bnpFromRadix(s, b) {
1397 var self = this
1398 self.fromInt(0)
1399 if (b == null) b = 10
1400 var cs = self.chunkSize(b)
1401 var d = Math.pow(b, cs),
1402 mi = false,
1403 j = 0,
1404 w = 0
1405 for (var i = 0; i < s.length; ++i) {
1406 var x = intAt(s, i)
1407 if (x < 0) {
1408 if (s.charAt(i) == "-" && self.signum() == 0) mi = true
1409 continue
1410 }
1411 w = b * w + x
1412 if (++j >= cs) {
1413 self.dMultiply(d)
1414 self.dAddOffset(w, 0)
1415 j = 0
1416 w = 0
1417 }
1418 }
1419 if (j > 0) {
1420 self.dMultiply(Math.pow(b, j))
1421 self.dAddOffset(w, 0)
1422 }
1423 if (mi) BigInteger.ZERO.subTo(self, self)
1424 }
1425
1426 // (protected) alternate constructor
1427 function bnpFromNumber(a, b, c) {
1428 var self = this
1429 if ("number" == typeof b) {
1430 // new BigInteger(int,int,RNG)
1431 if (a < 2) self.fromInt(1)
1432 else {
1433 self.fromNumber(a, c)
1434 if (!self.testBit(a - 1)) // force MSB set
1435 self.bitwiseTo(BigInteger.ONE.shiftLeft(a - 1), op_or, self)
1436 if (self.isEven()) self.dAddOffset(1, 0); // force odd
1437 while (!self.isProbablePrime(b)) {
1438 self.dAddOffset(2, 0)
1439 if (self.bitLength() > a) self.subTo(BigInteger.ONE.shiftLeft(a - 1), self)
1440 }
1441 }
1442 } else {
1443 // new BigInteger(int,RNG)
1444 var x = new Array(),
1445 t = a & 7
1446 x.length = (a >> 3) + 1
1447 b.nextBytes(x)
1448 if (t > 0) x[0] &= ((1 << t) - 1)
1449 else x[0] = 0
1450 self.fromString(x, 256)
1451 }
1452 }
1453
1454 // (public) convert to bigendian byte array
1455 function bnToByteArray() {
1456 var self = this
1457 var i = self.t,
1458 r = new Array()
1459 r[0] = self.s
1460 var p = self.DB - (i * self.DB) % 8,
1461 d, k = 0
1462 if (i-- > 0) {
1463 if (p < self.DB && (d = self[i] >> p) != (self.s & self.DM) >> p)
1464 r[k++] = d | (self.s << (self.DB - p))
1465 while (i >= 0) {
1466 if (p < 8) {
1467 d = (self[i] & ((1 << p) - 1)) << (8 - p)
1468 d |= self[--i] >> (p += self.DB - 8)
1469 } else {
1470 d = (self[i] >> (p -= 8)) & 0xff
1471 if (p <= 0) {
1472 p += self.DB
1473 --i
1474 }
1475 }
1476 if ((d & 0x80) != 0) d |= -256
1477 if (k === 0 && (self.s & 0x80) != (d & 0x80))++k
1478 if (k > 0 || d != self.s) r[k++] = d
1479 }
1480 }
1481 return r
1482 }
1483
1484 function bnEquals(a) {
1485 return (this.compareTo(a) == 0)
1486 }
1487
1488 function bnMin(a) {
1489 return (this.compareTo(a) < 0) ? this : a
1490 }
1491
1492 function bnMax(a) {
1493 return (this.compareTo(a) > 0) ? this : a
1494 }
1495
1496 // (protected) r = this op a (bitwise)
1497 function bnpBitwiseTo(a, op, r) {
1498 var self = this
1499 var i, f, m = Math.min(a.t, self.t)
1500 for (i = 0; i < m; ++i) r[i] = op(self[i], a[i])
1501 if (a.t < self.t) {
1502 f = a.s & self.DM
1503 for (i = m; i < self.t; ++i) r[i] = op(self[i], f)
1504 r.t = self.t
1505 } else {
1506 f = self.s & self.DM
1507 for (i = m; i < a.t; ++i) r[i] = op(f, a[i])
1508 r.t = a.t
1509 }
1510 r.s = op(self.s, a.s)
1511 r.clamp()
1512 }
1513
1514 // (public) this & a
1515 function op_and(x, y) {
1516 return x & y
1517 }
1518
1519 function bnAnd(a) {
1520 var r = new BigInteger()
1521 this.bitwiseTo(a, op_and, r)
1522 return r
1523 }
1524
1525 // (public) this | a
1526 function op_or(x, y) {
1527 return x | y
1528 }
1529
1530 function bnOr(a) {
1531 var r = new BigInteger()
1532 this.bitwiseTo(a, op_or, r)
1533 return r
1534 }
1535
1536 // (public) this ^ a
1537 function op_xor(x, y) {
1538 return x ^ y
1539 }
1540
1541 function bnXor(a) {
1542 var r = new BigInteger()
1543 this.bitwiseTo(a, op_xor, r)
1544 return r
1545 }
1546
1547 // (public) this & ~a
1548 function op_andnot(x, y) {
1549 return x & ~y
1550 }
1551
1552 function bnAndNot(a) {
1553 var r = new BigInteger()
1554 this.bitwiseTo(a, op_andnot, r)
1555 return r
1556 }
1557
1558 // (public) ~this
1559 function bnNot() {
1560 var r = new BigInteger()
1561 for (var i = 0; i < this.t; ++i) r[i] = this.DM & ~this[i]
1562 r.t = this.t
1563 r.s = ~this.s
1564 return r
1565 }
1566
1567 // (public) this << n
1568 function bnShiftLeft(n) {
1569 var r = new BigInteger()
1570 if (n < 0) this.rShiftTo(-n, r)
1571 else this.lShiftTo(n, r)
1572 return r
1573 }
1574
1575 // (public) this >> n
1576 function bnShiftRight(n) {
1577 var r = new BigInteger()
1578 if (n < 0) this.lShiftTo(-n, r)
1579 else this.rShiftTo(n, r)
1580 return r
1581 }
1582
1583 // return index of lowest 1-bit in x, x < 2^31
1584 function lbit(x) {
1585 if (x == 0) return -1
1586 var r = 0
1587 if ((x & 0xffff) == 0) {
1588 x >>= 16
1589 r += 16
1590 }
1591 if ((x & 0xff) == 0) {
1592 x >>= 8
1593 r += 8
1594 }
1595 if ((x & 0xf) == 0) {
1596 x >>= 4
1597 r += 4
1598 }
1599 if ((x & 3) == 0) {
1600 x >>= 2
1601 r += 2
1602 }
1603 if ((x & 1) == 0)++r
1604 return r
1605 }
1606
1607 // (public) returns index of lowest 1-bit (or -1 if none)
1608 function bnGetLowestSetBit() {
1609 for (var i = 0; i < this.t; ++i)
1610 if (this[i] != 0) return i * this.DB + lbit(this[i])
1611 if (this.s < 0) return this.t * this.DB
1612 return -1
1613 }
1614
1615 // return number of 1 bits in x
1616 function cbit(x) {
1617 var r = 0
1618 while (x != 0) {
1619 x &= x - 1
1620 ++r
1621 }
1622 return r
1623 }
1624
1625 // (public) return number of set bits
1626 function bnBitCount() {
1627 var r = 0,
1628 x = this.s & this.DM
1629 for (var i = 0; i < this.t; ++i) r += cbit(this[i] ^ x)
1630 return r
1631 }
1632
1633 // (public) true iff nth bit is set
1634 function bnTestBit(n) {
1635 var j = Math.floor(n / this.DB)
1636 if (j >= this.t) return (this.s != 0)
1637 return ((this[j] & (1 << (n % this.DB))) != 0)
1638 }
1639
1640 // (protected) this op (1<<n)
1641 function bnpChangeBit(n, op) {
1642 var r = BigInteger.ONE.shiftLeft(n)
1643 this.bitwiseTo(r, op, r)
1644 return r
1645 }
1646
1647 // (public) this | (1<<n)
1648 function bnSetBit(n) {
1649 return this.changeBit(n, op_or)
1650 }
1651
1652 // (public) this & ~(1<<n)
1653 function bnClearBit(n) {
1654 return this.changeBit(n, op_andnot)
1655 }
1656
1657 // (public) this ^ (1<<n)
1658 function bnFlipBit(n) {
1659 return this.changeBit(n, op_xor)
1660 }
1661
1662 // (protected) r = this + a
1663 function bnpAddTo(a, r) {
1664 var self = this
1665
1666 var i = 0,
1667 c = 0,
1668 m = Math.min(a.t, self.t)
1669 while (i < m) {
1670 c += self[i] + a[i]
1671 r[i++] = c & self.DM
1672 c >>= self.DB
1673 }
1674 if (a.t < self.t) {
1675 c += a.s
1676 while (i < self.t) {
1677 c += self[i]
1678 r[i++] = c & self.DM
1679 c >>= self.DB
1680 }
1681 c += self.s
1682 } else {
1683 c += self.s
1684 while (i < a.t) {
1685 c += a[i]
1686 r[i++] = c & self.DM
1687 c >>= self.DB
1688 }
1689 c += a.s
1690 }
1691 r.s = (c < 0) ? -1 : 0
1692 if (c > 0) r[i++] = c
1693 else if (c < -1) r[i++] = self.DV + c
1694 r.t = i
1695 r.clamp()
1696 }
1697
1698 // (public) this + a
1699 function bnAdd(a) {
1700 var r = new BigInteger()
1701 this.addTo(a, r)
1702 return r
1703 }
1704
1705 // (public) this - a
1706 function bnSubtract(a) {
1707 var r = new BigInteger()
1708 this.subTo(a, r)
1709 return r
1710 }
1711
1712 // (public) this * a
1713 function bnMultiply(a) {
1714 var r = new BigInteger()
1715 this.multiplyTo(a, r)
1716 return r
1717 }
1718
1719 // (public) this^2
1720 function bnSquare() {
1721 var r = new BigInteger()
1722 this.squareTo(r)
1723 return r
1724 }
1725
1726 // (public) this / a
1727 function bnDivide(a) {
1728 var r = new BigInteger()
1729 this.divRemTo(a, r, null)
1730 return r
1731 }
1732
1733 // (public) this % a
1734 function bnRemainder(a) {
1735 var r = new BigInteger()
1736 this.divRemTo(a, null, r)
1737 return r
1738 }
1739
1740 // (public) [this/a,this%a]
1741 function bnDivideAndRemainder(a) {
1742 var q = new BigInteger(),
1743 r = new BigInteger()
1744 this.divRemTo(a, q, r)
1745 return new Array(q, r)
1746 }
1747
1748 // (protected) this *= n, this >= 0, 1 < n < DV
1749 function bnpDMultiply(n) {
1750 this[this.t] = this.am(0, n - 1, this, 0, 0, this.t)
1751 ++this.t
1752 this.clamp()
1753 }
1754
1755 // (protected) this += n << w words, this >= 0
1756 function bnpDAddOffset(n, w) {
1757 if (n == 0) return
1758 while (this.t <= w) this[this.t++] = 0
1759 this[w] += n
1760 while (this[w] >= this.DV) {
1761 this[w] -= this.DV
1762 if (++w >= this.t) this[this.t++] = 0
1763 ++this[w]
1764 }
1765 }
1766
1767 // A "null" reducer
1768 function NullExp() {}
1769
1770 function nNop(x) {
1771 return x
1772 }
1773
1774 function nMulTo(x, y, r) {
1775 x.multiplyTo(y, r)
1776 }
1777
1778 function nSqrTo(x, r) {
1779 x.squareTo(r)
1780 }
1781
1782 NullExp.prototype.convert = nNop
1783 NullExp.prototype.revert = nNop
1784 NullExp.prototype.mulTo = nMulTo
1785 NullExp.prototype.sqrTo = nSqrTo
1786
1787 // (public) this^e
1788 function bnPow(e) {
1789 return this.exp(e, new NullExp())
1790 }
1791
1792 // (protected) r = lower n words of "this * a", a.t <= n
1793 // "this" should be the larger one if appropriate.
1794 function bnpMultiplyLowerTo(a, n, r) {
1795 var i = Math.min(this.t + a.t, n)
1796 r.s = 0; // assumes a,this >= 0
1797 r.t = i
1798 while (i > 0) r[--i] = 0
1799 var j
1800 for (j = r.t - this.t; i < j; ++i) r[i + this.t] = this.am(0, a[i], r, i, 0, this.t)
1801 for (j = Math.min(a.t, n); i < j; ++i) this.am(0, a[i], r, i, 0, n - i)
1802 r.clamp()
1803 }
1804
1805 // (protected) r = "this * a" without lower n words, n > 0
1806 // "this" should be the larger one if appropriate.
1807 function bnpMultiplyUpperTo(a, n, r) {
1808 --n
1809 var i = r.t = this.t + a.t - n
1810 r.s = 0; // assumes a,this >= 0
1811 while (--i >= 0) r[i] = 0
1812 for (i = Math.max(n - this.t, 0); i < a.t; ++i)
1813 r[this.t + i - n] = this.am(n - i, a[i], r, 0, 0, this.t + i - n)
1814 r.clamp()
1815 r.drShiftTo(1, r)
1816 }
1817
1818 // Barrett modular reduction
1819 function Barrett(m) {
1820 // setup Barrett
1821 this.r2 = new BigInteger()
1822 this.q3 = new BigInteger()
1823 BigInteger.ONE.dlShiftTo(2 * m.t, this.r2)
1824 this.mu = this.r2.divide(m)
1825 this.m = m
1826 }
1827
1828 function barrettConvert(x) {
1829 if (x.s < 0 || x.t > 2 * this.m.t) return x.mod(this.m)
1830 else if (x.compareTo(this.m) < 0) return x
1831 else {
1832 var r = new BigInteger()
1833 x.copyTo(r)
1834 this.reduce(r)
1835 return r
1836 }
1837 }
1838
1839 function barrettRevert(x) {
1840 return x
1841 }
1842
1843 // x = x mod m (HAC 14.42)
1844 function barrettReduce(x) {
1845 var self = this
1846 x.drShiftTo(self.m.t - 1, self.r2)
1847 if (x.t > self.m.t + 1) {
1848 x.t = self.m.t + 1
1849 x.clamp()
1850 }
1851 self.mu.multiplyUpperTo(self.r2, self.m.t + 1, self.q3)
1852 self.m.multiplyLowerTo(self.q3, self.m.t + 1, self.r2)
1853 while (x.compareTo(self.r2) < 0) x.dAddOffset(1, self.m.t + 1)
1854 x.subTo(self.r2, x)
1855 while (x.compareTo(self.m) >= 0) x.subTo(self.m, x)
1856 }
1857
1858 // r = x^2 mod m; x != r
1859 function barrettSqrTo(x, r) {
1860 x.squareTo(r)
1861 this.reduce(r)
1862 }
1863
1864 // r = x*y mod m; x,y != r
1865 function barrettMulTo(x, y, r) {
1866 x.multiplyTo(y, r)
1867 this.reduce(r)
1868 }
1869
1870 Barrett.prototype.convert = barrettConvert
1871 Barrett.prototype.revert = barrettRevert
1872 Barrett.prototype.reduce = barrettReduce
1873 Barrett.prototype.mulTo = barrettMulTo
1874 Barrett.prototype.sqrTo = barrettSqrTo
1875
1876 // (public) this^e % m (HAC 14.85)
1877 function bnModPow(e, m) {
1878 var i = e.bitLength(),
1879 k, r = nbv(1),
1880 z
1881 if (i <= 0) return r
1882 else if (i < 18) k = 1
1883 else if (i < 48) k = 3
1884 else if (i < 144) k = 4
1885 else if (i < 768) k = 5
1886 else k = 6
1887 if (i < 8)
1888 z = new Classic(m)
1889 else if (m.isEven())
1890 z = new Barrett(m)
1891 else
1892 z = new Montgomery(m)
1893
1894 // precomputation
1895 var g = new Array(),
1896 n = 3,
1897 k1 = k - 1,
1898 km = (1 << k) - 1
1899 g[1] = z.convert(this)
1900 if (k > 1) {
1901 var g2 = new BigInteger()
1902 z.sqrTo(g[1], g2)
1903 while (n <= km) {
1904 g[n] = new BigInteger()
1905 z.mulTo(g2, g[n - 2], g[n])
1906 n += 2
1907 }
1908 }
1909
1910 var j = e.t - 1,
1911 w, is1 = true,
1912 r2 = new BigInteger(),
1913 t
1914 i = nbits(e[j]) - 1
1915 while (j >= 0) {
1916 if (i >= k1) w = (e[j] >> (i - k1)) & km
1917 else {
1918 w = (e[j] & ((1 << (i + 1)) - 1)) << (k1 - i)
1919 if (j > 0) w |= e[j - 1] >> (this.DB + i - k1)
1920 }
1921
1922 n = k
1923 while ((w & 1) == 0) {
1924 w >>= 1
1925 --n
1926 }
1927 if ((i -= n) < 0) {
1928 i += this.DB
1929 --j
1930 }
1931 if (is1) { // ret == 1, don't bother squaring or multiplying it
1932 g[w].copyTo(r)
1933 is1 = false
1934 } else {
1935 while (n > 1) {
1936 z.sqrTo(r, r2)
1937 z.sqrTo(r2, r)
1938 n -= 2
1939 }
1940 if (n > 0) z.sqrTo(r, r2)
1941 else {
1942 t = r
1943 r = r2
1944 r2 = t
1945 }
1946 z.mulTo(r2, g[w], r)
1947 }
1948
1949 while (j >= 0 && (e[j] & (1 << i)) == 0) {
1950 z.sqrTo(r, r2)
1951 t = r
1952 r = r2
1953 r2 = t
1954 if (--i < 0) {
1955 i = this.DB - 1
1956 --j
1957 }
1958 }
1959 }
1960 return z.revert(r)
1961 }
1962
1963 // (public) gcd(this,a) (HAC 14.54)
1964 function bnGCD(a) {
1965 var x = (this.s < 0) ? this.negate() : this.clone()
1966 var y = (a.s < 0) ? a.negate() : a.clone()
1967 if (x.compareTo(y) < 0) {
1968 var t = x
1969 x = y
1970 y = t
1971 }
1972 var i = x.getLowestSetBit(),
1973 g = y.getLowestSetBit()
1974 if (g < 0) return x
1975 if (i < g) g = i
1976 if (g > 0) {
1977 x.rShiftTo(g, x)
1978 y.rShiftTo(g, y)
1979 }
1980 while (x.signum() > 0) {
1981 if ((i = x.getLowestSetBit()) > 0) x.rShiftTo(i, x)
1982 if ((i = y.getLowestSetBit()) > 0) y.rShiftTo(i, y)
1983 if (x.compareTo(y) >= 0) {
1984 x.subTo(y, x)
1985 x.rShiftTo(1, x)
1986 } else {
1987 y.subTo(x, y)
1988 y.rShiftTo(1, y)
1989 }
1990 }
1991 if (g > 0) y.lShiftTo(g, y)
1992 return y
1993 }
1994
1995 // (protected) this % n, n < 2^26
1996 function bnpModInt(n) {
1997 if (n <= 0) return 0
1998 var d = this.DV % n,
1999 r = (this.s < 0) ? n - 1 : 0
2000 if (this.t > 0)
2001 if (d == 0) r = this[0] % n
2002 else
2003 for (var i = this.t - 1; i >= 0; --i) r = (d * r + this[i]) % n
2004 return r
2005 }
2006
2007 // (public) 1/this % m (HAC 14.61)
2008 function bnModInverse(m) {
2009 var ac = m.isEven()
2010 if ((this.isEven() && ac) || m.signum() == 0) return BigInteger.ZERO
2011 var u = m.clone(),
2012 v = this.clone()
2013 var a = nbv(1),
2014 b = nbv(0),
2015 c = nbv(0),
2016 d = nbv(1)
2017 while (u.signum() != 0) {
2018 while (u.isEven()) {
2019 u.rShiftTo(1, u)
2020 if (ac) {
2021 if (!a.isEven() || !b.isEven()) {
2022 a.addTo(this, a)
2023 b.subTo(m, b)
2024 }
2025 a.rShiftTo(1, a)
2026 } else if (!b.isEven()) b.subTo(m, b)
2027 b.rShiftTo(1, b)
2028 }
2029 while (v.isEven()) {
2030 v.rShiftTo(1, v)
2031 if (ac) {
2032 if (!c.isEven() || !d.isEven()) {
2033 c.addTo(this, c)
2034 d.subTo(m, d)
2035 }
2036 c.rShiftTo(1, c)
2037 } else if (!d.isEven()) d.subTo(m, d)
2038 d.rShiftTo(1, d)
2039 }
2040 if (u.compareTo(v) >= 0) {
2041 u.subTo(v, u)
2042 if (ac) a.subTo(c, a)
2043 b.subTo(d, b)
2044 } else {
2045 v.subTo(u, v)
2046 if (ac) c.subTo(a, c)
2047 d.subTo(b, d)
2048 }
2049 }
2050 if (v.compareTo(BigInteger.ONE) != 0) return BigInteger.ZERO
2051 if (d.compareTo(m) >= 0) return d.subtract(m)
2052 if (d.signum() < 0) d.addTo(m, d)
2053 else return d
2054 if (d.signum() < 0) return d.add(m)
2055 else return d
2056 }
2057
2058 var lowprimes = [
2059 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71,
2060 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151,
2061 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233,
2062 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317,
2063 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419,
2064 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503,
2065 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607,
2066 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701,
2067 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811,
2068 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911,
2069 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997
2070 ]
2071
2072 var lplim = (1 << 26) / lowprimes[lowprimes.length - 1]
2073
2074 // (public) test primality with certainty >= 1-.5^t
2075 function bnIsProbablePrime(t) {
2076 var i, x = this.abs()
2077 if (x.t == 1 && x[0] <= lowprimes[lowprimes.length - 1]) {
2078 for (i = 0; i < lowprimes.length; ++i)
2079 if (x[0] == lowprimes[i]) return true
2080 return false
2081 }
2082 if (x.isEven()) return false
2083 i = 1
2084 while (i < lowprimes.length) {
2085 var m = lowprimes[i],
2086 j = i + 1
2087 while (j < lowprimes.length && m < lplim) m *= lowprimes[j++]
2088 m = x.modInt(m)
2089 while (i < j) if (m % lowprimes[i++] == 0) return false
2090 }
2091 return x.millerRabin(t)
2092 }
2093
2094 // (protected) true if probably prime (HAC 4.24, Miller-Rabin)
2095 function bnpMillerRabin(t) {
2096 var n1 = this.subtract(BigInteger.ONE)
2097 var k = n1.getLowestSetBit()
2098 if (k <= 0) return false
2099 var r = n1.shiftRight(k)
2100 t = (t + 1) >> 1
2101 if (t > lowprimes.length) t = lowprimes.length
2102 var a = new BigInteger(null)
2103 var j, bases = []
2104 for (var i = 0; i < t; ++i) {
2105 for (;;) {
2106 j = lowprimes[Math.floor(Math.random() * lowprimes.length)]
2107 if (bases.indexOf(j) == -1) break
2108 }
2109 bases.push(j)
2110 a.fromInt(j)
2111 var y = a.modPow(r, this)
2112 if (y.compareTo(BigInteger.ONE) != 0 && y.compareTo(n1) != 0) {
2113 var j = 1
2114 while (j++ < k && y.compareTo(n1) != 0) {
2115 y = y.modPowInt(2, this)
2116 if (y.compareTo(BigInteger.ONE) == 0) return false
2117 }
2118 if (y.compareTo(n1) != 0) return false
2119 }
2120 }
2121 return true
2122 }
2123
2124 // protected
2125 proto.chunkSize = bnpChunkSize
2126 proto.toRadix = bnpToRadix
2127 proto.fromRadix = bnpFromRadix
2128 proto.fromNumber = bnpFromNumber
2129 proto.bitwiseTo = bnpBitwiseTo
2130 proto.changeBit = bnpChangeBit
2131 proto.addTo = bnpAddTo
2132 proto.dMultiply = bnpDMultiply
2133 proto.dAddOffset = bnpDAddOffset
2134 proto.multiplyLowerTo = bnpMultiplyLowerTo
2135 proto.multiplyUpperTo = bnpMultiplyUpperTo
2136 proto.modInt = bnpModInt
2137 proto.millerRabin = bnpMillerRabin
2138
2139 // public
2140 proto.clone = bnClone
2141 proto.intValue = bnIntValue
2142 proto.byteValue = bnByteValue
2143 proto.shortValue = bnShortValue
2144 proto.signum = bnSigNum
2145 proto.toByteArray = bnToByteArray
2146 proto.equals = bnEquals
2147 proto.min = bnMin
2148 proto.max = bnMax
2149 proto.and = bnAnd
2150 proto.or = bnOr
2151 proto.xor = bnXor
2152 proto.andNot = bnAndNot
2153 proto.not = bnNot
2154 proto.shiftLeft = bnShiftLeft
2155 proto.shiftRight = bnShiftRight
2156 proto.getLowestSetBit = bnGetLowestSetBit
2157 proto.bitCount = bnBitCount
2158 proto.testBit = bnTestBit
2159 proto.setBit = bnSetBit
2160 proto.clearBit = bnClearBit
2161 proto.flipBit = bnFlipBit
2162 proto.add = bnAdd
2163 proto.subtract = bnSubtract
2164 proto.multiply = bnMultiply
2165 proto.divide = bnDivide
2166 proto.remainder = bnRemainder
2167 proto.divideAndRemainder = bnDivideAndRemainder
2168 proto.modPow = bnModPow
2169 proto.modInverse = bnModInverse
2170 proto.pow = bnPow
2171 proto.gcd = bnGCD
2172 proto.isProbablePrime = bnIsProbablePrime
2173
2174 // JSBN-specific extension
2175 proto.square = bnSquare
2176
2177 // constants
2178 BigInteger.ZERO = nbv(0)
2179 BigInteger.ONE = nbv(1)
2180 BigInteger.valueOf = nbv
2181
2182 module.exports = BigInteger
2183
2184 },{"../package.json":4}],2:[function(require,module,exports){
2185 (function (Buffer){
2186 // FIXME: Kind of a weird way to throw exceptions, consider removing
2187 var assert = require('assert')
2188 var BigInteger = require('./bigi')
2189
2190 /**
2191 * Turns a byte array into a big integer.
2192 *
2193 * This function will interpret a byte array as a big integer in big
2194 * endian notation.
2195 */
2196 BigInteger.fromByteArrayUnsigned = function(byteArray) {
2197 // BigInteger expects a DER integer conformant byte array
2198 if (byteArray[0] & 0x80) {
2199 return new BigInteger([0].concat(byteArray))
2200 }
2201
2202 return new BigInteger(byteArray)
2203 }
2204
2205 /**
2206 * Returns a byte array representation of the big integer.
2207 *
2208 * This returns the absolute of the contained value in big endian
2209 * form. A value of zero results in an empty array.
2210 */
2211 BigInteger.prototype.toByteArrayUnsigned = function() {
2212 var byteArray = this.toByteArray()
2213 return byteArray[0] === 0 ? byteArray.slice(1) : byteArray
2214 }
2215
2216 BigInteger.fromDERInteger = function(byteArray) {
2217 return new BigInteger(byteArray)
2218 }
2219
2220 /*
2221 * Converts BigInteger to a DER integer representation.
2222 *
2223 * The format for this value uses the most significant bit as a sign
2224 * bit. If the most significant bit is already set and the integer is
2225 * positive, a 0x00 is prepended.
2226 *
2227 * Examples:
2228 *
2229 * 0 => 0x00
2230 * 1 => 0x01
2231 * -1 => 0xff
2232 * 127 => 0x7f
2233 * -127 => 0x81
2234 * 128 => 0x0080
2235 * -128 => 0x80
2236 * 255 => 0x00ff
2237 * -255 => 0xff01
2238 * 16300 => 0x3fac
2239 * -16300 => 0xc054
2240 * 62300 => 0x00f35c
2241 * -62300 => 0xff0ca4
2242 */
2243 BigInteger.prototype.toDERInteger = BigInteger.prototype.toByteArray
2244
2245 BigInteger.fromBuffer = function(buffer) {
2246 // BigInteger expects a DER integer conformant byte array
2247 if (buffer[0] & 0x80) {
2248 var byteArray = Array.prototype.slice.call(buffer)
2249
2250 return new BigInteger([0].concat(byteArray))
2251 }
2252
2253 return new BigInteger(buffer)
2254 }
2255
2256 BigInteger.fromHex = function(hex) {
2257 if (hex === '') return BigInteger.ZERO
2258
2259 assert.equal(hex, hex.match(/^[A-Fa-f0-9]+/), 'Invalid hex string')
2260 assert.equal(hex.length % 2, 0, 'Incomplete hex')
2261 return new BigInteger(hex, 16)
2262 }
2263
2264 BigInteger.prototype.toBuffer = function(size) {
2265 var byteArray = this.toByteArrayUnsigned()
2266 var zeros = []
2267
2268 var padding = size - byteArray.length
2269 while (zeros.length < padding) zeros.push(0)
2270
2271 return new Buffer(zeros.concat(byteArray))
2272 }
2273
2274 BigInteger.prototype.toHex = function(size) {
2275 return this.toBuffer(size).toString('hex')
2276 }
2277
2278 }).call(this,require("buffer").Buffer)
2279 },{"./bigi":1,"assert":5,"buffer":7}],3:[function(require,module,exports){
2280 var BigInteger = require('./bigi')
2281
2282 //addons
2283 require('./convert')
2284
2285 module.exports = BigInteger
2286 },{"./bigi":1,"./convert":2}],4:[function(require,module,exports){
2287 module.exports={
2288 "name": "bigi",
2289 "version": "1.4.0",
2290 "description": "Big integers.",
2291 "keywords": [
2292 "cryptography",
2293 "math",
2294 "bitcoin",
2295 "arbitrary",
2296 "precision",
2297 "arithmetic",
2298 "big",
2299 "integer",
2300 "int",
2301 "number",
2302 "biginteger",
2303 "bigint",
2304 "bignumber",
2305 "decimal",
2306 "float"
2307 ],
2308 "devDependencies": {
2309 "mocha": "^1.20.1",
2310 "jshint": "^2.5.1",
2311 "coveralls": "^2.10.0",
2312 "istanbul": "^0.2.11"
2313 },
2314 "repository": {
2315 "url": "https://github.com/cryptocoinjs/bigi",
2316 "type": "git"
2317 },
2318 "main": "./lib/index.js",
2319 "scripts": {
2320 "test": "_mocha -- test/*.js",
2321 "jshint": "jshint --config jshint.json lib/*.js ; true",
2322 "unit": "mocha",
2323 "coverage": "istanbul cover ./node_modules/.bin/_mocha -- --reporter list test/*.js",
2324 "coveralls": "npm run-script coverage && node ./node_modules/.bin/coveralls < coverage/lcov.info"
2325 },
2326 "dependencies": {},
2327 "testling": {
2328 "files": "test/*.js",
2329 "harness": "mocha",
2330 "browsers": [
2331 "ie/9..latest",
2332 "firefox/latest",
2333 "chrome/latest",
2334 "safari/6.0..latest",
2335 "iphone/6.0..latest",
2336 "android-browser/4.2..latest"
2337 ]
2338 },
2339 "bugs": {
2340 "url": "https://github.com/cryptocoinjs/bigi/issues"
2341 },
2342 "homepage": "https://github.com/cryptocoinjs/bigi",
2343 "_id": "bigi@1.4.0",
2344 "dist": {
2345 "shasum": "90ac1aeac0a531216463bdb58f42c1e05c8407ac",
2346 "tarball": "http://registry.npmjs.org/bigi/-/bigi-1.4.0.tgz"
2347 },
2348 "_from": "bigi@^1.4.0",
2349 "_npmVersion": "1.4.3",
2350 "_npmUser": {
2351 "name": "jp",
2352 "email": "jprichardson@gmail.com"
2353 },
2354 "maintainers": [
2355 {
2356 "name": "jp",
2357 "email": "jprichardson@gmail.com"
2358 },
2359 {
2360 "name": "midnightlightning",
2361 "email": "boydb@midnightdesign.ws"
2362 },
2363 {
2364 "name": "sidazhang",
2365 "email": "sidazhang89@gmail.com"
2366 },
2367 {
2368 "name": "nadav",
2369 "email": "npm@shesek.info"
2370 }
2371 ],
2372 "directories": {},
2373 "_shasum": "90ac1aeac0a531216463bdb58f42c1e05c8407ac",
2374 "_resolved": "https://registry.npmjs.org/bigi/-/bigi-1.4.0.tgz"
2375 }
2376
2377 },{}],5:[function(require,module,exports){
2378 // http://wiki.commonjs.org/wiki/Unit_Testing/1.0
2379 //
2380 // THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!
2381 //
2382 // Originally from narwhal.js (http://narwhaljs.org)
2383 // Copyright (c) 2009 Thomas Robinson <280north.com>
2384 //
2385 // Permission is hereby granted, free of charge, to any person obtaining a copy
2386 // of this software and associated documentation files (the 'Software'), to
2387 // deal in the Software without restriction, including without limitation the
2388 // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
2389 // sell copies of the Software, and to permit persons to whom the Software is
2390 // furnished to do so, subject to the following conditions:
2391 //
2392 // The above copyright notice and this permission notice shall be included in
2393 // all copies or substantial portions of the Software.
2394 //
2395 // THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
2396 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
2397 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
2398 // AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
2399 // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
2400 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
2401
2402 // when used in node, this will actually load the util module we depend on
2403 // versus loading the builtin util module as happens otherwise
2404 // this is a bug in node module loading as far as I am concerned
2405 var util = require('util/');
2406
2407 var pSlice = Array.prototype.slice;
2408 var hasOwn = Object.prototype.hasOwnProperty;
2409
2410 // 1. The assert module provides functions that throw
2411 // AssertionError's when particular conditions are not met. The
2412 // assert module must conform to the following interface.
2413
2414 var assert = module.exports = ok;
2415
2416 // 2. The AssertionError is defined in assert.
2417 // new assert.AssertionError({ message: message,
2418 // actual: actual,
2419 // expected: expected })
2420
2421 assert.AssertionError = function AssertionError(options) {
2422 this.name = 'AssertionError';
2423 this.actual = options.actual;
2424 this.expected = options.expected;
2425 this.operator = options.operator;
2426 if (options.message) {
2427 this.message = options.message;
2428 this.generatedMessage = false;
2429 } else {
2430 this.message = getMessage(this);
2431 this.generatedMessage = true;
2432 }
2433 var stackStartFunction = options.stackStartFunction || fail;
2434
2435 if (Error.captureStackTrace) {
2436 Error.captureStackTrace(this, stackStartFunction);
2437 }
2438 else {
2439 // non v8 browsers so we can have a stacktrace
2440 var err = new Error();
2441 if (err.stack) {
2442 var out = err.stack;
2443
2444 // try to strip useless frames
2445 var fn_name = stackStartFunction.name;
2446 var idx = out.indexOf('\n' + fn_name);
2447 if (idx >= 0) {
2448 // once we have located the function frame
2449 // we need to strip out everything before it (and its line)
2450 var next_line = out.indexOf('\n', idx + 1);
2451 out = out.substring(next_line + 1);
2452 }
2453
2454 this.stack = out;
2455 }
2456 }
2457 };
2458
2459 // assert.AssertionError instanceof Error
2460 util.inherits(assert.AssertionError, Error);
2461
2462 function replacer(key, value) {
2463 if (util.isUndefined(value)) {
2464 return '' + value;
2465 }
2466 if (util.isNumber(value) && !isFinite(value)) {
2467 return value.toString();
2468 }
2469 if (util.isFunction(value) || util.isRegExp(value)) {
2470 return value.toString();
2471 }
2472 return value;
2473 }
2474
2475 function truncate(s, n) {
2476 if (util.isString(s)) {
2477 return s.length < n ? s : s.slice(0, n);
2478 } else {
2479 return s;
2480 }
2481 }
2482
2483 function getMessage(self) {
2484 return truncate(JSON.stringify(self.actual, replacer), 128) + ' ' +
2485 self.operator + ' ' +
2486 truncate(JSON.stringify(self.expected, replacer), 128);
2487 }
2488
2489 // At present only the three keys mentioned above are used and
2490 // understood by the spec. Implementations or sub modules can pass
2491 // other keys to the AssertionError's constructor - they will be
2492 // ignored.
2493
2494 // 3. All of the following functions must throw an AssertionError
2495 // when a corresponding condition is not met, with a message that
2496 // may be undefined if not provided. All assertion methods provide
2497 // both the actual and expected values to the assertion error for
2498 // display purposes.
2499
2500 function fail(actual, expected, message, operator, stackStartFunction) {
2501 throw new assert.AssertionError({
2502 message: message,
2503 actual: actual,
2504 expected: expected,
2505 operator: operator,
2506 stackStartFunction: stackStartFunction
2507 });
2508 }
2509
2510 // EXTENSION! allows for well behaved errors defined elsewhere.
2511 assert.fail = fail;
2512
2513 // 4. Pure assertion tests whether a value is truthy, as determined
2514 // by !!guard.
2515 // assert.ok(guard, message_opt);
2516 // This statement is equivalent to assert.equal(true, !!guard,
2517 // message_opt);. To test strictly for the value true, use
2518 // assert.strictEqual(true, guard, message_opt);.
2519
2520 function ok(value, message) {
2521 if (!value) fail(value, true, message, '==', assert.ok);
2522 }
2523 assert.ok = ok;
2524
2525 // 5. The equality assertion tests shallow, coercive equality with
2526 // ==.
2527 // assert.equal(actual, expected, message_opt);
2528
2529 assert.equal = function equal(actual, expected, message) {
2530 if (actual != expected) fail(actual, expected, message, '==', assert.equal);
2531 };
2532
2533 // 6. The non-equality assertion tests for whether two objects are not equal
2534 // with != assert.notEqual(actual, expected, message_opt);
2535
2536 assert.notEqual = function notEqual(actual, expected, message) {
2537 if (actual == expected) {
2538 fail(actual, expected, message, '!=', assert.notEqual);
2539 }
2540 };
2541
2542 // 7. The equivalence assertion tests a deep equality relation.
2543 // assert.deepEqual(actual, expected, message_opt);
2544
2545 assert.deepEqual = function deepEqual(actual, expected, message) {
2546 if (!_deepEqual(actual, expected)) {
2547 fail(actual, expected, message, 'deepEqual', assert.deepEqual);
2548 }
2549 };
2550
2551 function _deepEqual(actual, expected) {
2552 // 7.1. All identical values are equivalent, as determined by ===.
2553 if (actual === expected) {
2554 return true;
2555
2556 } else if (util.isBuffer(actual) && util.isBuffer(expected)) {
2557 if (actual.length != expected.length) return false;
2558
2559 for (var i = 0; i < actual.length; i++) {
2560 if (actual[i] !== expected[i]) return false;
2561 }
2562
2563 return true;
2564
2565 // 7.2. If the expected value is a Date object, the actual value is
2566 // equivalent if it is also a Date object that refers to the same time.
2567 } else if (util.isDate(actual) && util.isDate(expected)) {
2568 return actual.getTime() === expected.getTime();
2569
2570 // 7.3 If the expected value is a RegExp object, the actual value is
2571 // equivalent if it is also a RegExp object with the same source and
2572 // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).
2573 } else if (util.isRegExp(actual) && util.isRegExp(expected)) {
2574 return actual.source === expected.source &&
2575 actual.global === expected.global &&
2576 actual.multiline === expected.multiline &&
2577 actual.lastIndex === expected.lastIndex &&
2578 actual.ignoreCase === expected.ignoreCase;
2579
2580 // 7.4. Other pairs that do not both pass typeof value == 'object',
2581 // equivalence is determined by ==.
2582 } else if (!util.isObject(actual) && !util.isObject(expected)) {
2583 return actual == expected;
2584
2585 // 7.5 For all other Object pairs, including Array objects, equivalence is
2586 // determined by having the same number of owned properties (as verified
2587 // with Object.prototype.hasOwnProperty.call), the same set of keys
2588 // (although not necessarily the same order), equivalent values for every
2589 // corresponding key, and an identical 'prototype' property. Note: this
2590 // accounts for both named and indexed properties on Arrays.
2591 } else {
2592 return objEquiv(actual, expected);
2593 }
2594 }
2595
2596 function isArguments(object) {
2597 return Object.prototype.toString.call(object) == '[object Arguments]';
2598 }
2599
2600 function objEquiv(a, b) {
2601 if (util.isNullOrUndefined(a) || util.isNullOrUndefined(b))
2602 return false;
2603 // an identical 'prototype' property.
2604 if (a.prototype !== b.prototype) return false;
2605 // if one is a primitive, the other must be same
2606 if (util.isPrimitive(a) || util.isPrimitive(b)) {
2607 return a === b;
2608 }
2609 var aIsArgs = isArguments(a),
2610 bIsArgs = isArguments(b);
2611 if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))
2612 return false;
2613 if (aIsArgs) {
2614 a = pSlice.call(a);
2615 b = pSlice.call(b);
2616 return _deepEqual(a, b);
2617 }
2618 var ka = objectKeys(a),
2619 kb = objectKeys(b),
2620 key, i;
2621 // having the same number of owned properties (keys incorporates
2622 // hasOwnProperty)
2623 if (ka.length != kb.length)
2624 return false;
2625 //the same set of keys (although not necessarily the same order),
2626 ka.sort();
2627 kb.sort();
2628 //~~~cheap key test
2629 for (i = ka.length - 1; i >= 0; i--) {
2630 if (ka[i] != kb[i])
2631 return false;
2632 }
2633 //equivalent values for every corresponding key, and
2634 //~~~possibly expensive deep test
2635 for (i = ka.length - 1; i >= 0; i--) {
2636 key = ka[i];
2637 if (!_deepEqual(a[key], b[key])) return false;
2638 }
2639 return true;
2640 }
2641
2642 // 8. The non-equivalence assertion tests for any deep inequality.
2643 // assert.notDeepEqual(actual, expected, message_opt);
2644
2645 assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
2646 if (_deepEqual(actual, expected)) {
2647 fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
2648 }
2649 };
2650
2651 // 9. The strict equality assertion tests strict equality, as determined by ===.
2652 // assert.strictEqual(actual, expected, message_opt);
2653
2654 assert.strictEqual = function strictEqual(actual, expected, message) {
2655 if (actual !== expected) {
2656 fail(actual, expected, message, '===', assert.strictEqual);
2657 }
2658 };
2659
2660 // 10. The strict non-equality assertion tests for strict inequality, as
2661 // determined by !==. assert.notStrictEqual(actual, expected, message_opt);
2662
2663 assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
2664 if (actual === expected) {
2665 fail(actual, expected, message, '!==', assert.notStrictEqual);
2666 }
2667 };
2668
2669 function expectedException(actual, expected) {
2670 if (!actual || !expected) {
2671 return false;
2672 }
2673
2674 if (Object.prototype.toString.call(expected) == '[object RegExp]') {
2675 return expected.test(actual);
2676 } else if (actual instanceof expected) {
2677 return true;
2678 } else if (expected.call({}, actual) === true) {
2679 return true;
2680 }
2681
2682 return false;
2683 }
2684
2685 function _throws(shouldThrow, block, expected, message) {
2686 var actual;
2687
2688 if (util.isString(expected)) {
2689 message = expected;
2690 expected = null;
2691 }
2692
2693 try {
2694 block();
2695 } catch (e) {
2696 actual = e;
2697 }
2698
2699 message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
2700 (message ? ' ' + message : '.');
2701
2702 if (shouldThrow && !actual) {
2703 fail(actual, expected, 'Missing expected exception' + message);
2704 }
2705
2706 if (!shouldThrow && expectedException(actual, expected)) {
2707 fail(actual, expected, 'Got unwanted exception' + message);
2708 }
2709
2710 if ((shouldThrow && actual && expected &&
2711 !expectedException(actual, expected)) || (!shouldThrow && actual)) {
2712 throw actual;
2713 }
2714 }
2715
2716 // 11. Expected to throw an error:
2717 // assert.throws(block, Error_opt, message_opt);
2718
2719 assert.throws = function(block, /*optional*/error, /*optional*/message) {
2720 _throws.apply(this, [true].concat(pSlice.call(arguments)));
2721 };
2722
2723 // EXTENSION! This is annoying to write outside this module.
2724 assert.doesNotThrow = function(block, /*optional*/message) {
2725 _throws.apply(this, [false].concat(pSlice.call(arguments)));
2726 };
2727
2728 assert.ifError = function(err) { if (err) {throw err;}};
2729
2730 var objectKeys = Object.keys || function (obj) {
2731 var keys = [];
2732 for (var key in obj) {
2733 if (hasOwn.call(obj, key)) keys.push(key);
2734 }
2735 return keys;
2736 };
2737
2738 },{"util/":29}],6:[function(require,module,exports){
2739
2740 },{}],7:[function(require,module,exports){
2741 /*!
2742 * The buffer module from node.js, for the browser.
2743 *
2744 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
2745 * @license MIT
2746 */
2747
2748 var base64 = require('base64-js')
2749 var ieee754 = require('ieee754')
2750 var isArray = require('is-array')
2751
2752 exports.Buffer = Buffer
2753 exports.SlowBuffer = SlowBuffer
2754 exports.INSPECT_MAX_BYTES = 50
2755 Buffer.poolSize = 8192 // not used by this implementation
2756
2757 var rootParent = {}
2758
2759 /**
2760 * If `Buffer.TYPED_ARRAY_SUPPORT`:
2761 * === true Use Uint8Array implementation (fastest)
2762 * === false Use Object implementation (most compatible, even IE6)
2763 *
2764 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
2765 * Opera 11.6+, iOS 4.2+.
2766 *
2767 * Due to various browser bugs, sometimes the Object implementation will be used even
2768 * when the browser supports typed arrays.
2769 *
2770 * Note:
2771 *
2772 * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,
2773 * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.
2774 *
2775 * - Safari 5-7 lacks support for changing the `Object.prototype.constructor` property
2776 * on objects.
2777 *
2778 * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.
2779 *
2780 * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of
2781 * incorrect length in some situations.
2782
2783 * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they
2784 * get the Object implementation, which is slower but behaves correctly.
2785 */
2786 Buffer.TYPED_ARRAY_SUPPORT = (function () {
2787 function Bar () {}
2788 try {
2789 var arr = new Uint8Array(1)
2790 arr.foo = function () { return 42 }
2791 arr.constructor = Bar
2792 return arr.foo() === 42 && // typed array instances can be augmented
2793 arr.constructor === Bar && // constructor can be set
2794 typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`
2795 arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`
2796 } catch (e) {
2797 return false
2798 }
2799 })()
2800
2801 function kMaxLength () {
2802 return Buffer.TYPED_ARRAY_SUPPORT
2803 ? 0x7fffffff
2804 : 0x3fffffff
2805 }
2806
2807 /**
2808 * Class: Buffer
2809 * =============
2810 *
2811 * The Buffer constructor returns instances of `Uint8Array` that are augmented
2812 * with function properties for all the node `Buffer` API functions. We use
2813 * `Uint8Array` so that square bracket notation works as expected -- it returns
2814 * a single octet.
2815 *
2816 * By augmenting the instances, we can avoid modifying the `Uint8Array`
2817 * prototype.
2818 */
2819 function Buffer (arg) {
2820 if (!(this instanceof Buffer)) {
2821 // Avoid going through an ArgumentsAdaptorTrampoline in the common case.
2822 if (arguments.length > 1) return new Buffer(arg, arguments[1])
2823 return new Buffer(arg)
2824 }
2825
2826 this.length = 0
2827 this.parent = undefined
2828
2829 // Common case.
2830 if (typeof arg === 'number') {
2831 return fromNumber(this, arg)
2832 }
2833
2834 // Slightly less common case.
2835 if (typeof arg === 'string') {
2836 return fromString(this, arg, arguments.length > 1 ? arguments[1] : 'utf8')
2837 }
2838
2839 // Unusual.
2840 return fromObject(this, arg)
2841 }
2842
2843 function fromNumber (that, length) {
2844 that = allocate(that, length < 0 ? 0 : checked(length) | 0)
2845 if (!Buffer.TYPED_ARRAY_SUPPORT) {
2846 for (var i = 0; i < length; i++) {
2847 that[i] = 0
2848 }
2849 }
2850 return that
2851 }
2852
2853 function fromString (that, string, encoding) {
2854 if (typeof encoding !== 'string' || encoding === '') encoding = 'utf8'
2855
2856 // Assumption: byteLength() return value is always < kMaxLength.
2857 var length = byteLength(string, encoding) | 0
2858 that = allocate(that, length)
2859
2860 that.write(string, encoding)
2861 return that
2862 }
2863
2864 function fromObject (that, object) {
2865 if (Buffer.isBuffer(object)) return fromBuffer(that, object)
2866
2867 if (isArray(object)) return fromArray(that, object)
2868
2869 if (object == null) {
2870 throw new TypeError('must start with number, buffer, array or string')
2871 }
2872
2873 if (typeof ArrayBuffer !== 'undefined') {
2874 if (object.buffer instanceof ArrayBuffer) {
2875 return fromTypedArray(that, object)
2876 }
2877 if (object instanceof ArrayBuffer) {
2878 return fromArrayBuffer(that, object)
2879 }
2880 }
2881
2882 if (object.length) return fromArrayLike(that, object)
2883
2884 return fromJsonObject(that, object)
2885 }
2886
2887 function fromBuffer (that, buffer) {
2888 var length = checked(buffer.length) | 0
2889 that = allocate(that, length)
2890 buffer.copy(that, 0, 0, length)
2891 return that
2892 }
2893
2894 function fromArray (that, array) {
2895 var length = checked(array.length) | 0
2896 that = allocate(that, length)
2897 for (var i = 0; i < length; i += 1) {
2898 that[i] = array[i] & 255
2899 }
2900 return that
2901 }
2902
2903 // Duplicate of fromArray() to keep fromArray() monomorphic.
2904 function fromTypedArray (that, array) {
2905 var length = checked(array.length) | 0
2906 that = allocate(that, length)
2907 // Truncating the elements is probably not what people expect from typed
2908 // arrays with BYTES_PER_ELEMENT > 1 but it's compatible with the behavior
2909 // of the old Buffer constructor.
2910 for (var i = 0; i < length; i += 1) {
2911 that[i] = array[i] & 255
2912 }
2913 return that
2914 }
2915
2916 function fromArrayBuffer (that, array) {
2917 if (Buffer.TYPED_ARRAY_SUPPORT) {
2918 // Return an augmented `Uint8Array` instance, for best performance
2919 array.byteLength
2920 that = Buffer._augment(new Uint8Array(array))
2921 } else {
2922 // Fallback: Return an object instance of the Buffer class
2923 that = fromTypedArray(that, new Uint8Array(array))
2924 }
2925 return that
2926 }
2927
2928 function fromArrayLike (that, array) {
2929 var length = checked(array.length) | 0
2930 that = allocate(that, length)
2931 for (var i = 0; i < length; i += 1) {
2932 that[i] = array[i] & 255
2933 }
2934 return that
2935 }
2936
2937 // Deserialize { type: 'Buffer', data: [1,2,3,...] } into a Buffer object.
2938 // Returns a zero-length buffer for inputs that don't conform to the spec.
2939 function fromJsonObject (that, object) {
2940 var array
2941 var length = 0
2942
2943 if (object.type === 'Buffer' && isArray(object.data)) {
2944 array = object.data
2945 length = checked(array.length) | 0
2946 }
2947 that = allocate(that, length)
2948
2949 for (var i = 0; i < length; i += 1) {
2950 that[i] = array[i] & 255
2951 }
2952 return that
2953 }
2954
2955 function allocate (that, length) {
2956 if (Buffer.TYPED_ARRAY_SUPPORT) {
2957 // Return an augmented `Uint8Array` instance, for best performance
2958 that = Buffer._augment(new Uint8Array(length))
2959 } else {
2960 // Fallback: Return an object instance of the Buffer class
2961 that.length = length
2962 that._isBuffer = true
2963 }
2964
2965 var fromPool = length !== 0 && length <= Buffer.poolSize >>> 1
2966 if (fromPool) that.parent = rootParent
2967
2968 return that
2969 }
2970
2971 function checked (length) {
2972 // Note: cannot use `length < kMaxLength` here because that fails when
2973 // length is NaN (which is otherwise coerced to zero.)
2974 if (length >= kMaxLength()) {
2975 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
2976 'size: 0x' + kMaxLength().toString(16) + ' bytes')
2977 }
2978 return length | 0
2979 }
2980
2981 function SlowBuffer (subject, encoding) {
2982 if (!(this instanceof SlowBuffer)) return new SlowBuffer(subject, encoding)
2983
2984 var buf = new Buffer(subject, encoding)
2985 delete buf.parent
2986 return buf
2987 }
2988
2989 Buffer.isBuffer = function isBuffer (b) {
2990 return !!(b != null && b._isBuffer)
2991 }
2992
2993 Buffer.compare = function compare (a, b) {
2994 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
2995 throw new TypeError('Arguments must be Buffers')
2996 }
2997
2998 if (a === b) return 0
2999
3000 var x = a.length
3001 var y = b.length
3002
3003 var i = 0
3004 var len = Math.min(x, y)
3005 while (i < len) {
3006 if (a[i] !== b[i]) break
3007
3008 ++i
3009 }
3010
3011 if (i !== len) {
3012 x = a[i]
3013 y = b[i]
3014 }
3015
3016 if (x < y) return -1
3017 if (y < x) return 1
3018 return 0
3019 }
3020
3021 Buffer.isEncoding = function isEncoding (encoding) {
3022 switch (String(encoding).toLowerCase()) {
3023 case 'hex':
3024 case 'utf8':
3025 case 'utf-8':
3026 case 'ascii':
3027 case 'binary':
3028 case 'base64':
3029 case 'raw':
3030 case 'ucs2':
3031 case 'ucs-2':
3032 case 'utf16le':
3033 case 'utf-16le':
3034 return true
3035 default:
3036 return false
3037 }
3038 }
3039
3040 Buffer.concat = function concat (list, length) {
3041 if (!isArray(list)) throw new TypeError('list argument must be an Array of Buffers.')
3042
3043 if (list.length === 0) {
3044 return new Buffer(0)
3045 }
3046
3047 var i
3048 if (length === undefined) {
3049 length = 0
3050 for (i = 0; i < list.length; i++) {
3051 length += list[i].length
3052 }
3053 }
3054
3055 var buf = new Buffer(length)
3056 var pos = 0
3057 for (i = 0; i < list.length; i++) {
3058 var item = list[i]
3059 item.copy(buf, pos)
3060 pos += item.length
3061 }
3062 return buf
3063 }
3064
3065 function byteLength (string, encoding) {
3066 if (typeof string !== 'string') string = '' + string
3067
3068 var len = string.length
3069 if (len === 0) return 0
3070
3071 // Use a for loop to avoid recursion
3072 var loweredCase = false
3073 for (;;) {
3074 switch (encoding) {
3075 case 'ascii':
3076 case 'binary':
3077 // Deprecated
3078 case 'raw':
3079 case 'raws':
3080 return len
3081 case 'utf8':
3082 case 'utf-8':
3083 return utf8ToBytes(string).length
3084 case 'ucs2':
3085 case 'ucs-2':
3086 case 'utf16le':
3087 case 'utf-16le':
3088 return len * 2
3089 case 'hex':
3090 return len >>> 1
3091 case 'base64':
3092 return base64ToBytes(string).length
3093 default:
3094 if (loweredCase) return utf8ToBytes(string).length // assume utf8
3095 encoding = ('' + encoding).toLowerCase()
3096 loweredCase = true
3097 }
3098 }
3099 }
3100 Buffer.byteLength = byteLength
3101
3102 // pre-set for values that may exist in the future
3103 Buffer.prototype.length = undefined
3104 Buffer.prototype.parent = undefined
3105
3106 function slowToString (encoding, start, end) {
3107 var loweredCase = false
3108
3109 start = start | 0
3110 end = end === undefined || end === Infinity ? this.length : end | 0
3111
3112 if (!encoding) encoding = 'utf8'
3113 if (start < 0) start = 0
3114 if (end > this.length) end = this.length
3115 if (end <= start) return ''
3116
3117 while (true) {
3118 switch (encoding) {
3119 case 'hex':
3120 return hexSlice(this, start, end)
3121
3122 case 'utf8':
3123 case 'utf-8':
3124 return utf8Slice(this, start, end)
3125
3126 case 'ascii':
3127 return asciiSlice(this, start, end)
3128
3129 case 'binary':
3130 return binarySlice(this, start, end)
3131
3132 case 'base64':
3133 return base64Slice(this, start, end)
3134
3135 case 'ucs2':
3136 case 'ucs-2':
3137 case 'utf16le':
3138 case 'utf-16le':
3139 return utf16leSlice(this, start, end)
3140
3141 default:
3142 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
3143 encoding = (encoding + '').toLowerCase()
3144 loweredCase = true
3145 }
3146 }
3147 }
3148
3149 Buffer.prototype.toString = function toString () {
3150 var length = this.length | 0
3151 if (length === 0) return ''
3152 if (arguments.length === 0) return utf8Slice(this, 0, length)
3153 return slowToString.apply(this, arguments)
3154 }
3155
3156 Buffer.prototype.equals = function equals (b) {
3157 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
3158 if (this === b) return true
3159 return Buffer.compare(this, b) === 0
3160 }
3161
3162 Buffer.prototype.inspect = function inspect () {
3163 var str = ''
3164 var max = exports.INSPECT_MAX_BYTES
3165 if (this.length > 0) {
3166 str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
3167 if (this.length > max) str += ' ... '
3168 }
3169 return '<Buffer ' + str + '>'
3170 }
3171
3172 Buffer.prototype.compare = function compare (b) {
3173 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
3174 if (this === b) return 0
3175 return Buffer.compare(this, b)
3176 }
3177
3178 Buffer.prototype.indexOf = function indexOf (val, byteOffset) {
3179 if (byteOffset > 0x7fffffff) byteOffset = 0x7fffffff
3180 else if (byteOffset < -0x80000000) byteOffset = -0x80000000
3181 byteOffset >>= 0
3182
3183 if (this.length === 0) return -1
3184 if (byteOffset >= this.length) return -1
3185
3186 // Negative offsets start from the end of the buffer
3187 if (byteOffset < 0) byteOffset = Math.max(this.length + byteOffset, 0)
3188
3189 if (typeof val === 'string') {
3190 if (val.length === 0) return -1 // special case: looking for empty string always fails
3191 return String.prototype.indexOf.call(this, val, byteOffset)
3192 }
3193 if (Buffer.isBuffer(val)) {
3194 return arrayIndexOf(this, val, byteOffset)
3195 }
3196 if (typeof val === 'number') {
3197 if (Buffer.TYPED_ARRAY_SUPPORT && Uint8Array.prototype.indexOf === 'function') {
3198 return Uint8Array.prototype.indexOf.call(this, val, byteOffset)
3199 }
3200 return arrayIndexOf(this, [ val ], byteOffset)
3201 }
3202
3203 function arrayIndexOf (arr, val, byteOffset) {
3204 var foundIndex = -1
3205 for (var i = 0; byteOffset + i < arr.length; i++) {
3206 if (arr[byteOffset + i] === val[foundIndex === -1 ? 0 : i - foundIndex]) {
3207 if (foundIndex === -1) foundIndex = i
3208 if (i - foundIndex + 1 === val.length) return byteOffset + foundIndex
3209 } else {
3210 foundIndex = -1
3211 }
3212 }
3213 return -1
3214 }
3215
3216 throw new TypeError('val must be string, number or Buffer')
3217 }
3218
3219 // `get` is deprecated
3220 Buffer.prototype.get = function get (offset) {
3221 console.log('.get() is deprecated. Access using array indexes instead.')
3222 return this.readUInt8(offset)
3223 }
3224
3225 // `set` is deprecated
3226 Buffer.prototype.set = function set (v, offset) {
3227 console.log('.set() is deprecated. Access using array indexes instead.')
3228 return this.writeUInt8(v, offset)
3229 }
3230
3231 function hexWrite (buf, string, offset, length) {
3232 offset = Number(offset) || 0
3233 var remaining = buf.length - offset
3234 if (!length) {
3235 length = remaining
3236 } else {
3237 length = Number(length)
3238 if (length > remaining) {
3239 length = remaining
3240 }
3241 }
3242
3243 // must be an even number of digits
3244 var strLen = string.length
3245 if (strLen % 2 !== 0) throw new Error('Invalid hex string')
3246
3247 if (length > strLen / 2) {
3248 length = strLen / 2
3249 }
3250 for (var i = 0; i < length; i++) {
3251 var parsed = parseInt(string.substr(i * 2, 2), 16)
3252 if (isNaN(parsed)) throw new Error('Invalid hex string')
3253 buf[offset + i] = parsed
3254 }
3255 return i
3256 }
3257
3258 function utf8Write (buf, string, offset, length) {
3259 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
3260 }
3261
3262 function asciiWrite (buf, string, offset, length) {
3263 return blitBuffer(asciiToBytes(string), buf, offset, length)
3264 }
3265
3266 function binaryWrite (buf, string, offset, length) {
3267 return asciiWrite(buf, string, offset, length)
3268 }
3269
3270 function base64Write (buf, string, offset, length) {
3271 return blitBuffer(base64ToBytes(string), buf, offset, length)
3272 }
3273
3274 function ucs2Write (buf, string, offset, length) {
3275 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
3276 }
3277
3278 Buffer.prototype.write = function write (string, offset, length, encoding) {
3279 // Buffer#write(string)
3280 if (offset === undefined) {
3281 encoding = 'utf8'
3282 length = this.length
3283 offset = 0
3284 // Buffer#write(string, encoding)
3285 } else if (length === undefined && typeof offset === 'string') {
3286 encoding = offset
3287 length = this.length
3288 offset = 0
3289 // Buffer#write(string, offset[, length][, encoding])
3290 } else if (isFinite(offset)) {
3291 offset = offset | 0
3292 if (isFinite(length)) {
3293 length = length | 0
3294 if (encoding === undefined) encoding = 'utf8'
3295 } else {
3296 encoding = length
3297 length = undefined
3298 }
3299 // legacy write(string, encoding, offset, length) - remove in v0.13
3300 } else {
3301 var swap = encoding
3302 encoding = offset
3303 offset = length | 0
3304 length = swap
3305 }
3306
3307 var remaining = this.length - offset
3308 if (length === undefined || length > remaining) length = remaining
3309
3310 if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
3311 throw new RangeError('attempt to write outside buffer bounds')
3312 }
3313
3314 if (!encoding) encoding = 'utf8'
3315
3316 var loweredCase = false
3317 for (;;) {
3318 switch (encoding) {
3319 case 'hex':
3320 return hexWrite(this, string, offset, length)
3321
3322 case 'utf8':
3323 case 'utf-8':
3324 return utf8Write(this, string, offset, length)
3325
3326 case 'ascii':
3327 return asciiWrite(this, string, offset, length)
3328
3329 case 'binary':
3330 return binaryWrite(this, string, offset, length)
3331
3332 case 'base64':
3333 // Warning: maxLength not taken into account in base64Write
3334 return base64Write(this, string, offset, length)
3335
3336 case 'ucs2':
3337 case 'ucs-2':
3338 case 'utf16le':
3339 case 'utf-16le':
3340 return ucs2Write(this, string, offset, length)
3341
3342 default:
3343 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
3344 encoding = ('' + encoding).toLowerCase()
3345 loweredCase = true
3346 }
3347 }
3348 }
3349
3350 Buffer.prototype.toJSON = function toJSON () {
3351 return {
3352 type: 'Buffer',
3353 data: Array.prototype.slice.call(this._arr || this, 0)
3354 }
3355 }
3356
3357 function base64Slice (buf, start, end) {
3358 if (start === 0 && end === buf.length) {
3359 return base64.fromByteArray(buf)
3360 } else {
3361 return base64.fromByteArray(buf.slice(start, end))
3362 }
3363 }
3364
3365 function utf8Slice (buf, start, end) {
3366 end = Math.min(buf.length, end)
3367 var firstByte
3368 var secondByte
3369 var thirdByte
3370 var fourthByte
3371 var bytesPerSequence
3372 var tempCodePoint
3373 var codePoint
3374 var res = []
3375 var i = start
3376
3377 for (; i < end; i += bytesPerSequence) {
3378 firstByte = buf[i]
3379 codePoint = 0xFFFD
3380
3381 if (firstByte > 0xEF) {
3382 bytesPerSequence = 4
3383 } else if (firstByte > 0xDF) {
3384 bytesPerSequence = 3
3385 } else if (firstByte > 0xBF) {
3386 bytesPerSequence = 2
3387 } else {
3388 bytesPerSequence = 1
3389 }
3390
3391 if (i + bytesPerSequence <= end) {
3392 switch (bytesPerSequence) {
3393 case 1:
3394 if (firstByte < 0x80) {
3395 codePoint = firstByte
3396 }
3397 break
3398 case 2:
3399 secondByte = buf[i + 1]
3400 if ((secondByte & 0xC0) === 0x80) {
3401 tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
3402 if (tempCodePoint > 0x7F) {
3403 codePoint = tempCodePoint
3404 }
3405 }
3406 break
3407 case 3:
3408 secondByte = buf[i + 1]
3409 thirdByte = buf[i + 2]
3410 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
3411 tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
3412 if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
3413 codePoint = tempCodePoint
3414 }
3415 }
3416 break
3417 case 4:
3418 secondByte = buf[i + 1]
3419 thirdByte = buf[i + 2]
3420 fourthByte = buf[i + 3]
3421 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
3422 tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
3423 if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
3424 codePoint = tempCodePoint
3425 }
3426 }
3427 }
3428 }
3429
3430 if (codePoint === 0xFFFD) {
3431 // we generated an invalid codePoint so make sure to only advance by 1 byte
3432 bytesPerSequence = 1
3433 } else if (codePoint > 0xFFFF) {
3434 // encode to utf16 (surrogate pair dance)
3435 codePoint -= 0x10000
3436 res.push(codePoint >>> 10 & 0x3FF | 0xD800)
3437 codePoint = 0xDC00 | codePoint & 0x3FF
3438 }
3439
3440 res.push(codePoint)
3441 }
3442
3443 return String.fromCharCode.apply(String, res)
3444 }
3445
3446 function asciiSlice (buf, start, end) {
3447 var ret = ''
3448 end = Math.min(buf.length, end)
3449
3450 for (var i = start; i < end; i++) {
3451 ret += String.fromCharCode(buf[i] & 0x7F)
3452 }
3453 return ret
3454 }
3455
3456 function binarySlice (buf, start, end) {
3457 var ret = ''
3458 end = Math.min(buf.length, end)
3459
3460 for (var i = start; i < end; i++) {
3461 ret += String.fromCharCode(buf[i])
3462 }
3463 return ret
3464 }
3465
3466 function hexSlice (buf, start, end) {
3467 var len = buf.length
3468
3469 if (!start || start < 0) start = 0
3470 if (!end || end < 0 || end > len) end = len
3471
3472 var out = ''
3473 for (var i = start; i < end; i++) {
3474 out += toHex(buf[i])
3475 }
3476 return out
3477 }
3478
3479 function utf16leSlice (buf, start, end) {
3480 var bytes = buf.slice(start, end)
3481 var res = ''
3482 for (var i = 0; i < bytes.length; i += 2) {
3483 res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)
3484 }
3485 return res
3486 }
3487
3488 Buffer.prototype.slice = function slice (start, end) {
3489 var len = this.length
3490 start = ~~start
3491 end = end === undefined ? len : ~~end
3492
3493 if (start < 0) {
3494 start += len
3495 if (start < 0) start = 0
3496 } else if (start > len) {
3497 start = len
3498 }
3499
3500 if (end < 0) {
3501 end += len
3502 if (end < 0) end = 0
3503 } else if (end > len) {
3504 end = len
3505 }
3506
3507 if (end < start) end = start
3508
3509 var newBuf
3510 if (Buffer.TYPED_ARRAY_SUPPORT) {
3511 newBuf = Buffer._augment(this.subarray(start, end))
3512 } else {
3513 var sliceLen = end - start
3514 newBuf = new Buffer(sliceLen, undefined)
3515 for (var i = 0; i < sliceLen; i++) {
3516 newBuf[i] = this[i + start]
3517 }
3518 }
3519
3520 if (newBuf.length) newBuf.parent = this.parent || this
3521
3522 return newBuf
3523 }
3524
3525 /*
3526 * Need to make sure that buffer isn't trying to write out of bounds.
3527 */
3528 function checkOffset (offset, ext, length) {
3529 if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
3530 if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
3531 }
3532
3533 Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
3534 offset = offset | 0
3535 byteLength = byteLength | 0
3536 if (!noAssert) checkOffset(offset, byteLength, this.length)
3537
3538 var val = this[offset]
3539 var mul = 1
3540 var i = 0
3541 while (++i < byteLength && (mul *= 0x100)) {
3542 val += this[offset + i] * mul
3543 }
3544
3545 return val
3546 }
3547
3548 Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
3549 offset = offset | 0
3550 byteLength = byteLength | 0
3551 if (!noAssert) {
3552 checkOffset(offset, byteLength, this.length)
3553 }
3554
3555 var val = this[offset + --byteLength]
3556 var mul = 1
3557 while (byteLength > 0 && (mul *= 0x100)) {
3558 val += this[offset + --byteLength] * mul
3559 }
3560
3561 return val
3562 }
3563
3564 Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
3565 if (!noAssert) checkOffset(offset, 1, this.length)
3566 return this[offset]
3567 }
3568
3569 Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
3570 if (!noAssert) checkOffset(offset, 2, this.length)
3571 return this[offset] | (this[offset + 1] << 8)
3572 }
3573
3574 Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
3575 if (!noAssert) checkOffset(offset, 2, this.length)
3576 return (this[offset] << 8) | this[offset + 1]
3577 }
3578
3579 Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
3580 if (!noAssert) checkOffset(offset, 4, this.length)
3581
3582 return ((this[offset]) |
3583 (this[offset + 1] << 8) |
3584 (this[offset + 2] << 16)) +
3585 (this[offset + 3] * 0x1000000)
3586 }
3587
3588 Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
3589 if (!noAssert) checkOffset(offset, 4, this.length)
3590
3591 return (this[offset] * 0x1000000) +
3592 ((this[offset + 1] << 16) |
3593 (this[offset + 2] << 8) |
3594 this[offset + 3])
3595 }
3596
3597 Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
3598 offset = offset | 0
3599 byteLength = byteLength | 0
3600 if (!noAssert) checkOffset(offset, byteLength, this.length)
3601
3602 var val = this[offset]
3603 var mul = 1
3604 var i = 0
3605 while (++i < byteLength && (mul *= 0x100)) {
3606 val += this[offset + i] * mul
3607 }
3608 mul *= 0x80
3609
3610 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
3611
3612 return val
3613 }
3614
3615 Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
3616 offset = offset | 0
3617 byteLength = byteLength | 0
3618 if (!noAssert) checkOffset(offset, byteLength, this.length)
3619
3620 var i = byteLength
3621 var mul = 1
3622 var val = this[offset + --i]
3623 while (i > 0 && (mul *= 0x100)) {
3624 val += this[offset + --i] * mul
3625 }
3626 mul *= 0x80
3627
3628 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
3629
3630 return val
3631 }
3632
3633 Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
3634 if (!noAssert) checkOffset(offset, 1, this.length)
3635 if (!(this[offset] & 0x80)) return (this[offset])
3636 return ((0xff - this[offset] + 1) * -1)
3637 }
3638
3639 Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
3640 if (!noAssert) checkOffset(offset, 2, this.length)
3641 var val = this[offset] | (this[offset + 1] << 8)
3642 return (val & 0x8000) ? val | 0xFFFF0000 : val
3643 }
3644
3645 Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
3646 if (!noAssert) checkOffset(offset, 2, this.length)
3647 var val = this[offset + 1] | (this[offset] << 8)
3648 return (val & 0x8000) ? val | 0xFFFF0000 : val
3649 }
3650
3651 Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
3652 if (!noAssert) checkOffset(offset, 4, this.length)
3653
3654 return (this[offset]) |
3655 (this[offset + 1] << 8) |
3656 (this[offset + 2] << 16) |
3657 (this[offset + 3] << 24)
3658 }
3659
3660 Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
3661 if (!noAssert) checkOffset(offset, 4, this.length)
3662
3663 return (this[offset] << 24) |
3664 (this[offset + 1] << 16) |
3665 (this[offset + 2] << 8) |
3666 (this[offset + 3])
3667 }
3668
3669 Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
3670 if (!noAssert) checkOffset(offset, 4, this.length)
3671 return ieee754.read(this, offset, true, 23, 4)
3672 }
3673
3674 Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
3675 if (!noAssert) checkOffset(offset, 4, this.length)
3676 return ieee754.read(this, offset, false, 23, 4)
3677 }
3678
3679 Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
3680 if (!noAssert) checkOffset(offset, 8, this.length)
3681 return ieee754.read(this, offset, true, 52, 8)
3682 }
3683
3684 Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
3685 if (!noAssert) checkOffset(offset, 8, this.length)
3686 return ieee754.read(this, offset, false, 52, 8)
3687 }
3688
3689 function checkInt (buf, value, offset, ext, max, min) {
3690 if (!Buffer.isBuffer(buf)) throw new TypeError('buffer must be a Buffer instance')
3691 if (value > max || value < min) throw new RangeError('value is out of bounds')
3692 if (offset + ext > buf.length) throw new RangeError('index out of range')
3693 }
3694
3695 Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
3696 value = +value
3697 offset = offset | 0
3698 byteLength = byteLength | 0
3699 if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0)
3700
3701 var mul = 1
3702 var i = 0
3703 this[offset] = value & 0xFF
3704 while (++i < byteLength && (mul *= 0x100)) {
3705 this[offset + i] = (value / mul) & 0xFF
3706 }
3707
3708 return offset + byteLength
3709 }
3710
3711 Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
3712 value = +value
3713 offset = offset | 0
3714 byteLength = byteLength | 0
3715 if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0)
3716
3717 var i = byteLength - 1
3718 var mul = 1
3719 this[offset + i] = value & 0xFF
3720 while (--i >= 0 && (mul *= 0x100)) {
3721 this[offset + i] = (value / mul) & 0xFF
3722 }
3723
3724 return offset + byteLength
3725 }
3726
3727 Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
3728 value = +value
3729 offset = offset | 0
3730 if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
3731 if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
3732 this[offset] = value
3733 return offset + 1
3734 }
3735
3736 function objectWriteUInt16 (buf, value, offset, littleEndian) {
3737 if (value < 0) value = 0xffff + value + 1
3738 for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; i++) {
3739 buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>
3740 (littleEndian ? i : 1 - i) * 8
3741 }
3742 }
3743
3744 Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
3745 value = +value
3746 offset = offset | 0
3747 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
3748 if (Buffer.TYPED_ARRAY_SUPPORT) {
3749 this[offset] = value
3750 this[offset + 1] = (value >>> 8)
3751 } else {
3752 objectWriteUInt16(this, value, offset, true)
3753 }
3754 return offset + 2
3755 }
3756
3757 Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
3758 value = +value
3759 offset = offset | 0
3760 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
3761 if (Buffer.TYPED_ARRAY_SUPPORT) {
3762 this[offset] = (value >>> 8)
3763 this[offset + 1] = value
3764 } else {
3765 objectWriteUInt16(this, value, offset, false)
3766 }
3767 return offset + 2
3768 }
3769
3770 function objectWriteUInt32 (buf, value, offset, littleEndian) {
3771 if (value < 0) value = 0xffffffff + value + 1
3772 for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; i++) {
3773 buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff
3774 }
3775 }
3776
3777 Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
3778 value = +value
3779 offset = offset | 0
3780 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
3781 if (Buffer.TYPED_ARRAY_SUPPORT) {
3782 this[offset + 3] = (value >>> 24)
3783 this[offset + 2] = (value >>> 16)
3784 this[offset + 1] = (value >>> 8)
3785 this[offset] = value
3786 } else {
3787 objectWriteUInt32(this, value, offset, true)
3788 }
3789 return offset + 4
3790 }
3791
3792 Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
3793 value = +value
3794 offset = offset | 0
3795 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
3796 if (Buffer.TYPED_ARRAY_SUPPORT) {
3797 this[offset] = (value >>> 24)
3798 this[offset + 1] = (value >>> 16)
3799 this[offset + 2] = (value >>> 8)
3800 this[offset + 3] = value
3801 } else {
3802 objectWriteUInt32(this, value, offset, false)
3803 }
3804 return offset + 4
3805 }
3806
3807 Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
3808 value = +value
3809 offset = offset | 0
3810 if (!noAssert) {
3811 var limit = Math.pow(2, 8 * byteLength - 1)
3812
3813 checkInt(this, value, offset, byteLength, limit - 1, -limit)
3814 }
3815
3816 var i = 0
3817 var mul = 1
3818 var sub = value < 0 ? 1 : 0
3819 this[offset] = value & 0xFF
3820 while (++i < byteLength && (mul *= 0x100)) {
3821 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
3822 }
3823
3824 return offset + byteLength
3825 }
3826
3827 Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
3828 value = +value
3829 offset = offset | 0
3830 if (!noAssert) {
3831 var limit = Math.pow(2, 8 * byteLength - 1)
3832
3833 checkInt(this, value, offset, byteLength, limit - 1, -limit)
3834 }
3835
3836 var i = byteLength - 1
3837 var mul = 1
3838 var sub = value < 0 ? 1 : 0
3839 this[offset + i] = value & 0xFF
3840 while (--i >= 0 && (mul *= 0x100)) {
3841 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
3842 }
3843
3844 return offset + byteLength
3845 }
3846
3847 Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
3848 value = +value
3849 offset = offset | 0
3850 if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
3851 if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
3852 if (value < 0) value = 0xff + value + 1
3853 this[offset] = value
3854 return offset + 1
3855 }
3856
3857 Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
3858 value = +value
3859 offset = offset | 0
3860 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
3861 if (Buffer.TYPED_ARRAY_SUPPORT) {
3862 this[offset] = value
3863 this[offset + 1] = (value >>> 8)
3864 } else {
3865 objectWriteUInt16(this, value, offset, true)
3866 }
3867 return offset + 2
3868 }
3869
3870 Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
3871 value = +value
3872 offset = offset | 0
3873 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
3874 if (Buffer.TYPED_ARRAY_SUPPORT) {
3875 this[offset] = (value >>> 8)
3876 this[offset + 1] = value
3877 } else {
3878 objectWriteUInt16(this, value, offset, false)
3879 }
3880 return offset + 2
3881 }
3882
3883 Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
3884 value = +value
3885 offset = offset | 0
3886 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
3887 if (Buffer.TYPED_ARRAY_SUPPORT) {
3888 this[offset] = value
3889 this[offset + 1] = (value >>> 8)
3890 this[offset + 2] = (value >>> 16)
3891 this[offset + 3] = (value >>> 24)
3892 } else {
3893 objectWriteUInt32(this, value, offset, true)
3894 }
3895 return offset + 4
3896 }
3897
3898 Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
3899 value = +value
3900 offset = offset | 0
3901 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
3902 if (value < 0) value = 0xffffffff + value + 1
3903 if (Buffer.TYPED_ARRAY_SUPPORT) {
3904 this[offset] = (value >>> 24)
3905 this[offset + 1] = (value >>> 16)
3906 this[offset + 2] = (value >>> 8)
3907 this[offset + 3] = value
3908 } else {
3909 objectWriteUInt32(this, value, offset, false)
3910 }
3911 return offset + 4
3912 }
3913
3914 function checkIEEE754 (buf, value, offset, ext, max, min) {
3915 if (value > max || value < min) throw new RangeError('value is out of bounds')
3916 if (offset + ext > buf.length) throw new RangeError('index out of range')
3917 if (offset < 0) throw new RangeError('index out of range')
3918 }
3919
3920 function writeFloat (buf, value, offset, littleEndian, noAssert) {
3921 if (!noAssert) {
3922 checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
3923 }
3924 ieee754.write(buf, value, offset, littleEndian, 23, 4)
3925 return offset + 4
3926 }
3927
3928 Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
3929 return writeFloat(this, value, offset, true, noAssert)
3930 }
3931
3932 Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
3933 return writeFloat(this, value, offset, false, noAssert)
3934 }
3935
3936 function writeDouble (buf, value, offset, littleEndian, noAssert) {
3937 if (!noAssert) {
3938 checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
3939 }
3940 ieee754.write(buf, value, offset, littleEndian, 52, 8)
3941 return offset + 8
3942 }
3943
3944 Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
3945 return writeDouble(this, value, offset, true, noAssert)
3946 }
3947
3948 Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
3949 return writeDouble(this, value, offset, false, noAssert)
3950 }
3951
3952 // copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
3953 Buffer.prototype.copy = function copy (target, targetStart, start, end) {
3954 if (!start) start = 0
3955 if (!end && end !== 0) end = this.length
3956 if (targetStart >= target.length) targetStart = target.length
3957 if (!targetStart) targetStart = 0
3958 if (end > 0 && end < start) end = start
3959
3960 // Copy 0 bytes; we're done
3961 if (end === start) return 0
3962 if (target.length === 0 || this.length === 0) return 0
3963
3964 // Fatal error conditions
3965 if (targetStart < 0) {
3966 throw new RangeError('targetStart out of bounds')
3967 }
3968 if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
3969 if (end < 0) throw new RangeError('sourceEnd out of bounds')
3970
3971 // Are we oob?
3972 if (end > this.length) end = this.length
3973 if (target.length - targetStart < end - start) {
3974 end = target.length - targetStart + start
3975 }
3976
3977 var len = end - start
3978 var i
3979
3980 if (this === target && start < targetStart && targetStart < end) {
3981 // descending copy from end
3982 for (i = len - 1; i >= 0; i--) {
3983 target[i + targetStart] = this[i + start]
3984 }
3985 } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {
3986 // ascending copy from start
3987 for (i = 0; i < len; i++) {
3988 target[i + targetStart] = this[i + start]
3989 }
3990 } else {
3991 target._set(this.subarray(start, start + len), targetStart)
3992 }
3993
3994 return len
3995 }
3996
3997 // fill(value, start=0, end=buffer.length)
3998 Buffer.prototype.fill = function fill (value, start, end) {
3999 if (!value) value = 0
4000 if (!start) start = 0
4001 if (!end) end = this.length
4002
4003 if (end < start) throw new RangeError('end < start')
4004
4005 // Fill 0 bytes; we're done
4006 if (end === start) return
4007 if (this.length === 0) return
4008
4009 if (start < 0 || start >= this.length) throw new RangeError('start out of bounds')
4010 if (end < 0 || end > this.length) throw new RangeError('end out of bounds')
4011
4012 var i
4013 if (typeof value === 'number') {
4014 for (i = start; i < end; i++) {
4015 this[i] = value
4016 }
4017 } else {
4018 var bytes = utf8ToBytes(value.toString())
4019 var len = bytes.length
4020 for (i = start; i < end; i++) {
4021 this[i] = bytes[i % len]
4022 }
4023 }
4024
4025 return this
4026 }
4027
4028 /**
4029 * Creates a new `ArrayBuffer` with the *copied* memory of the buffer instance.
4030 * Added in Node 0.12. Only available in browsers that support ArrayBuffer.
4031 */
4032 Buffer.prototype.toArrayBuffer = function toArrayBuffer () {
4033 if (typeof Uint8Array !== 'undefined') {
4034 if (Buffer.TYPED_ARRAY_SUPPORT) {
4035 return (new Buffer(this)).buffer
4036 } else {
4037 var buf = new Uint8Array(this.length)
4038 for (var i = 0, len = buf.length; i < len; i += 1) {
4039 buf[i] = this[i]
4040 }
4041 return buf.buffer
4042 }
4043 } else {
4044 throw new TypeError('Buffer.toArrayBuffer not supported in this browser')
4045 }
4046 }
4047
4048 // HELPER FUNCTIONS
4049 // ================
4050
4051 var BP = Buffer.prototype
4052
4053 /**
4054 * Augment a Uint8Array *instance* (not the Uint8Array class!) with Buffer methods
4055 */
4056 Buffer._augment = function _augment (arr) {
4057 arr.constructor = Buffer
4058 arr._isBuffer = true
4059
4060 // save reference to original Uint8Array set method before overwriting
4061 arr._set = arr.set
4062
4063 // deprecated
4064 arr.get = BP.get
4065 arr.set = BP.set
4066
4067 arr.write = BP.write
4068 arr.toString = BP.toString
4069 arr.toLocaleString = BP.toString
4070 arr.toJSON = BP.toJSON
4071 arr.equals = BP.equals
4072 arr.compare = BP.compare
4073 arr.indexOf = BP.indexOf
4074 arr.copy = BP.copy
4075 arr.slice = BP.slice
4076 arr.readUIntLE = BP.readUIntLE
4077 arr.readUIntBE = BP.readUIntBE
4078 arr.readUInt8 = BP.readUInt8
4079 arr.readUInt16LE = BP.readUInt16LE
4080 arr.readUInt16BE = BP.readUInt16BE
4081 arr.readUInt32LE = BP.readUInt32LE
4082 arr.readUInt32BE = BP.readUInt32BE
4083 arr.readIntLE = BP.readIntLE
4084 arr.readIntBE = BP.readIntBE
4085 arr.readInt8 = BP.readInt8
4086 arr.readInt16LE = BP.readInt16LE
4087 arr.readInt16BE = BP.readInt16BE
4088 arr.readInt32LE = BP.readInt32LE
4089 arr.readInt32BE = BP.readInt32BE
4090 arr.readFloatLE = BP.readFloatLE
4091 arr.readFloatBE = BP.readFloatBE
4092 arr.readDoubleLE = BP.readDoubleLE
4093 arr.readDoubleBE = BP.readDoubleBE
4094 arr.writeUInt8 = BP.writeUInt8
4095 arr.writeUIntLE = BP.writeUIntLE
4096 arr.writeUIntBE = BP.writeUIntBE
4097 arr.writeUInt16LE = BP.writeUInt16LE
4098 arr.writeUInt16BE = BP.writeUInt16BE
4099 arr.writeUInt32LE = BP.writeUInt32LE
4100 arr.writeUInt32BE = BP.writeUInt32BE
4101 arr.writeIntLE = BP.writeIntLE
4102 arr.writeIntBE = BP.writeIntBE
4103 arr.writeInt8 = BP.writeInt8
4104 arr.writeInt16LE = BP.writeInt16LE
4105 arr.writeInt16BE = BP.writeInt16BE
4106 arr.writeInt32LE = BP.writeInt32LE
4107 arr.writeInt32BE = BP.writeInt32BE
4108 arr.writeFloatLE = BP.writeFloatLE
4109 arr.writeFloatBE = BP.writeFloatBE
4110 arr.writeDoubleLE = BP.writeDoubleLE
4111 arr.writeDoubleBE = BP.writeDoubleBE
4112 arr.fill = BP.fill
4113 arr.inspect = BP.inspect
4114 arr.toArrayBuffer = BP.toArrayBuffer
4115
4116 return arr
4117 }
4118
4119 var INVALID_BASE64_RE = /[^+\/0-9A-Za-z-_]/g
4120
4121 function base64clean (str) {
4122 // Node strips out invalid characters like \n and \t from the string, base64-js does not
4123 str = stringtrim(str).replace(INVALID_BASE64_RE, '')
4124 // Node converts strings with length < 2 to ''
4125 if (str.length < 2) return ''
4126 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
4127 while (str.length % 4 !== 0) {
4128 str = str + '='
4129 }
4130 return str
4131 }
4132
4133 function stringtrim (str) {
4134 if (str.trim) return str.trim()
4135 return str.replace(/^\s+|\s+$/g, '')
4136 }
4137
4138 function toHex (n) {
4139 if (n < 16) return '0' + n.toString(16)
4140 return n.toString(16)
4141 }
4142
4143 function utf8ToBytes (string, units) {
4144 units = units || Infinity
4145 var codePoint
4146 var length = string.length
4147 var leadSurrogate = null
4148 var bytes = []
4149
4150 for (var i = 0; i < length; i++) {
4151 codePoint = string.charCodeAt(i)
4152
4153 // is surrogate component
4154 if (codePoint > 0xD7FF && codePoint < 0xE000) {
4155 // last char was a lead
4156 if (!leadSurrogate) {
4157 // no lead yet
4158 if (codePoint > 0xDBFF) {
4159 // unexpected trail
4160 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
4161 continue
4162
4163 } else if (i + 1 === length) {
4164 // unpaired lead
4165 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
4166 continue
4167 }
4168
4169 // valid lead
4170 leadSurrogate = codePoint
4171
4172 continue
4173 }
4174
4175 // 2 leads in a row
4176 if (codePoint < 0xDC00) {
4177 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
4178 leadSurrogate = codePoint
4179 continue
4180 }
4181
4182 // valid surrogate pair
4183 codePoint = leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00 | 0x10000
4184
4185 } else if (leadSurrogate) {
4186 // valid bmp char, but last char was a lead
4187 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
4188 }
4189
4190 leadSurrogate = null
4191
4192 // encode utf8
4193 if (codePoint < 0x80) {
4194 if ((units -= 1) < 0) break
4195 bytes.push(codePoint)
4196 } else if (codePoint < 0x800) {
4197 if ((units -= 2) < 0) break
4198 bytes.push(
4199 codePoint >> 0x6 | 0xC0,
4200 codePoint & 0x3F | 0x80
4201 )
4202 } else if (codePoint < 0x10000) {
4203 if ((units -= 3) < 0) break
4204 bytes.push(
4205 codePoint >> 0xC | 0xE0,
4206 codePoint >> 0x6 & 0x3F | 0x80,
4207 codePoint & 0x3F | 0x80
4208 )
4209 } else if (codePoint < 0x110000) {
4210 if ((units -= 4) < 0) break
4211 bytes.push(
4212 codePoint >> 0x12 | 0xF0,
4213 codePoint >> 0xC & 0x3F | 0x80,
4214 codePoint >> 0x6 & 0x3F | 0x80,
4215 codePoint & 0x3F | 0x80
4216 )
4217 } else {
4218 throw new Error('Invalid code point')
4219 }
4220 }
4221
4222 return bytes
4223 }
4224
4225 function asciiToBytes (str) {
4226 var byteArray = []
4227 for (var i = 0; i < str.length; i++) {
4228 // Node's code seems to be doing this and not & 0x7F..
4229 byteArray.push(str.charCodeAt(i) & 0xFF)
4230 }
4231 return byteArray
4232 }
4233
4234 function utf16leToBytes (str, units) {
4235 var c, hi, lo
4236 var byteArray = []
4237 for (var i = 0; i < str.length; i++) {
4238 if ((units -= 2) < 0) break
4239
4240 c = str.charCodeAt(i)
4241 hi = c >> 8
4242 lo = c % 256
4243 byteArray.push(lo)
4244 byteArray.push(hi)
4245 }
4246
4247 return byteArray
4248 }
4249
4250 function base64ToBytes (str) {
4251 return base64.toByteArray(base64clean(str))
4252 }
4253
4254 function blitBuffer (src, dst, offset, length) {
4255 for (var i = 0; i < length; i++) {
4256 if ((i + offset >= dst.length) || (i >= src.length)) break
4257 dst[i + offset] = src[i]
4258 }
4259 return i
4260 }
4261
4262 },{"base64-js":8,"ieee754":9,"is-array":10}],8:[function(require,module,exports){
4263 var lookup = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
4264
4265 ;(function (exports) {
4266 'use strict';
4267
4268 var Arr = (typeof Uint8Array !== 'undefined')
4269 ? Uint8Array
4270 : Array
4271
4272 var PLUS = '+'.charCodeAt(0)
4273 var SLASH = '/'.charCodeAt(0)
4274 var NUMBER = '0'.charCodeAt(0)
4275 var LOWER = 'a'.charCodeAt(0)
4276 var UPPER = 'A'.charCodeAt(0)
4277 var PLUS_URL_SAFE = '-'.charCodeAt(0)
4278 var SLASH_URL_SAFE = '_'.charCodeAt(0)
4279
4280 function decode (elt) {
4281 var code = elt.charCodeAt(0)
4282 if (code === PLUS ||
4283 code === PLUS_URL_SAFE)
4284 return 62 // '+'
4285 if (code === SLASH ||
4286 code === SLASH_URL_SAFE)
4287 return 63 // '/'
4288 if (code < NUMBER)
4289 return -1 //no match
4290 if (code < NUMBER + 10)
4291 return code - NUMBER + 26 + 26
4292 if (code < UPPER + 26)
4293 return code - UPPER
4294 if (code < LOWER + 26)
4295 return code - LOWER + 26
4296 }
4297
4298 function b64ToByteArray (b64) {
4299 var i, j, l, tmp, placeHolders, arr
4300
4301 if (b64.length % 4 > 0) {
4302 throw new Error('Invalid string. Length must be a multiple of 4')
4303 }
4304
4305 // the number of equal signs (place holders)
4306 // if there are two placeholders, than the two characters before it
4307 // represent one byte
4308 // if there is only one, then the three characters before it represent 2 bytes
4309 // this is just a cheap hack to not do indexOf twice
4310 var len = b64.length
4311 placeHolders = '=' === b64.charAt(len - 2) ? 2 : '=' === b64.charAt(len - 1) ? 1 : 0
4312
4313 // base64 is 4/3 + up to two characters of the original data
4314 arr = new Arr(b64.length * 3 / 4 - placeHolders)
4315
4316 // if there are placeholders, only get up to the last complete 4 chars
4317 l = placeHolders > 0 ? b64.length - 4 : b64.length
4318
4319 var L = 0
4320
4321 function push (v) {
4322 arr[L++] = v
4323 }
4324
4325 for (i = 0, j = 0; i < l; i += 4, j += 3) {
4326 tmp = (decode(b64.charAt(i)) << 18) | (decode(b64.charAt(i + 1)) << 12) | (decode(b64.charAt(i + 2)) << 6) | decode(b64.charAt(i + 3))
4327 push((tmp & 0xFF0000) >> 16)
4328 push((tmp & 0xFF00) >> 8)
4329 push(tmp & 0xFF)
4330 }
4331
4332 if (placeHolders === 2) {
4333 tmp = (decode(b64.charAt(i)) << 2) | (decode(b64.charAt(i + 1)) >> 4)
4334 push(tmp & 0xFF)
4335 } else if (placeHolders === 1) {
4336 tmp = (decode(b64.charAt(i)) << 10) | (decode(b64.charAt(i + 1)) << 4) | (decode(b64.charAt(i + 2)) >> 2)
4337 push((tmp >> 8) & 0xFF)
4338 push(tmp & 0xFF)
4339 }
4340
4341 return arr
4342 }
4343
4344 function uint8ToBase64 (uint8) {
4345 var i,
4346 extraBytes = uint8.length % 3, // if we have 1 byte left, pad 2 bytes
4347 output = "",
4348 temp, length
4349
4350 function encode (num) {
4351 return lookup.charAt(num)
4352 }
4353
4354 function tripletToBase64 (num) {
4355 return encode(num >> 18 & 0x3F) + encode(num >> 12 & 0x3F) + encode(num >> 6 & 0x3F) + encode(num & 0x3F)
4356 }
4357
4358 // go through the array every three bytes, we'll deal with trailing stuff later
4359 for (i = 0, length = uint8.length - extraBytes; i < length; i += 3) {
4360 temp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
4361 output += tripletToBase64(temp)
4362 }
4363
4364 // pad the end with zeros, but make sure to not forget the extra bytes
4365 switch (extraBytes) {
4366 case 1:
4367 temp = uint8[uint8.length - 1]
4368 output += encode(temp >> 2)
4369 output += encode((temp << 4) & 0x3F)
4370 output += '=='
4371 break
4372 case 2:
4373 temp = (uint8[uint8.length - 2] << 8) + (uint8[uint8.length - 1])
4374 output += encode(temp >> 10)
4375 output += encode((temp >> 4) & 0x3F)
4376 output += encode((temp << 2) & 0x3F)
4377 output += '='
4378 break
4379 }
4380
4381 return output
4382 }
4383
4384 exports.toByteArray = b64ToByteArray
4385 exports.fromByteArray = uint8ToBase64
4386 }(typeof exports === 'undefined' ? (this.base64js = {}) : exports))
4387
4388 },{}],9:[function(require,module,exports){
4389 exports.read = function (buffer, offset, isLE, mLen, nBytes) {
4390 var e, m
4391 var eLen = nBytes * 8 - mLen - 1
4392 var eMax = (1 << eLen) - 1
4393 var eBias = eMax >> 1
4394 var nBits = -7
4395 var i = isLE ? (nBytes - 1) : 0
4396 var d = isLE ? -1 : 1
4397 var s = buffer[offset + i]
4398
4399 i += d
4400
4401 e = s & ((1 << (-nBits)) - 1)
4402 s >>= (-nBits)
4403 nBits += eLen
4404 for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
4405
4406 m = e & ((1 << (-nBits)) - 1)
4407 e >>= (-nBits)
4408 nBits += mLen
4409 for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
4410
4411 if (e === 0) {
4412 e = 1 - eBias
4413 } else if (e === eMax) {
4414 return m ? NaN : ((s ? -1 : 1) * Infinity)
4415 } else {
4416 m = m + Math.pow(2, mLen)
4417 e = e - eBias
4418 }
4419 return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
4420 }
4421
4422 exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
4423 var e, m, c
4424 var eLen = nBytes * 8 - mLen - 1
4425 var eMax = (1 << eLen) - 1
4426 var eBias = eMax >> 1
4427 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
4428 var i = isLE ? 0 : (nBytes - 1)
4429 var d = isLE ? 1 : -1
4430 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
4431
4432 value = Math.abs(value)
4433
4434 if (isNaN(value) || value === Infinity) {
4435 m = isNaN(value) ? 1 : 0
4436 e = eMax
4437 } else {
4438 e = Math.floor(Math.log(value) / Math.LN2)
4439 if (value * (c = Math.pow(2, -e)) < 1) {
4440 e--
4441 c *= 2
4442 }
4443 if (e + eBias >= 1) {
4444 value += rt / c
4445 } else {
4446 value += rt * Math.pow(2, 1 - eBias)
4447 }
4448 if (value * c >= 2) {
4449 e++
4450 c /= 2
4451 }
4452
4453 if (e + eBias >= eMax) {
4454 m = 0
4455 e = eMax
4456 } else if (e + eBias >= 1) {
4457 m = (value * c - 1) * Math.pow(2, mLen)
4458 e = e + eBias
4459 } else {
4460 m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
4461 e = 0
4462 }
4463 }
4464
4465 for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
4466
4467 e = (e << mLen) | m
4468 eLen += mLen
4469 for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
4470
4471 buffer[offset + i - d] |= s * 128
4472 }
4473
4474 },{}],10:[function(require,module,exports){
4475
4476 /**
4477 * isArray
4478 */
4479
4480 var isArray = Array.isArray;
4481
4482 /**
4483 * toString
4484 */
4485
4486 var str = Object.prototype.toString;
4487
4488 /**
4489 * Whether or not the given `val`
4490 * is an array.
4491 *
4492 * example:
4493 *
4494 * isArray([]);
4495 * // > true
4496 * isArray(arguments);
4497 * // > false
4498 * isArray('');
4499 * // > false
4500 *
4501 * @param {mixed} val
4502 * @return {bool}
4503 */
4504
4505 module.exports = isArray || function (val) {
4506 return !! val && '[object Array]' == str.call(val);
4507 };
4508
4509 },{}],11:[function(require,module,exports){
4510 // Copyright Joyent, Inc. and other Node contributors.
4511 //
4512 // Permission is hereby granted, free of charge, to any person obtaining a
4513 // copy of this software and associated documentation files (the
4514 // "Software"), to deal in the Software without restriction, including
4515 // without limitation the rights to use, copy, modify, merge, publish,
4516 // distribute, sublicense, and/or sell copies of the Software, and to permit
4517 // persons to whom the Software is furnished to do so, subject to the
4518 // following conditions:
4519 //
4520 // The above copyright notice and this permission notice shall be included
4521 // in all copies or substantial portions of the Software.
4522 //
4523 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
4524 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
4525 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
4526 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
4527 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
4528 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
4529 // USE OR OTHER DEALINGS IN THE SOFTWARE.
4530
4531 function EventEmitter() {
4532 this._events = this._events || {};
4533 this._maxListeners = this._maxListeners || undefined;
4534 }
4535 module.exports = EventEmitter;
4536
4537 // Backwards-compat with node 0.10.x
4538 EventEmitter.EventEmitter = EventEmitter;
4539
4540 EventEmitter.prototype._events = undefined;
4541 EventEmitter.prototype._maxListeners = undefined;
4542
4543 // By default EventEmitters will print a warning if more than 10 listeners are
4544 // added to it. This is a useful default which helps finding memory leaks.
4545 EventEmitter.defaultMaxListeners = 10;
4546
4547 // Obviously not all Emitters should be limited to 10. This function allows
4548 // that to be increased. Set to zero for unlimited.
4549 EventEmitter.prototype.setMaxListeners = function(n) {
4550 if (!isNumber(n) || n < 0 || isNaN(n))
4551 throw TypeError('n must be a positive number');
4552 this._maxListeners = n;
4553 return this;
4554 };
4555
4556 EventEmitter.prototype.emit = function(type) {
4557 var er, handler, len, args, i, listeners;
4558
4559 if (!this._events)
4560 this._events = {};
4561
4562 // If there is no 'error' event listener then throw.
4563 if (type === 'error') {
4564 if (!this._events.error ||
4565 (isObject(this._events.error) && !this._events.error.length)) {
4566 er = arguments[1];
4567 if (er instanceof Error) {
4568 throw er; // Unhandled 'error' event
4569 }
4570 throw TypeError('Uncaught, unspecified "error" event.');
4571 }
4572 }
4573
4574 handler = this._events[type];
4575
4576 if (isUndefined(handler))
4577 return false;
4578
4579 if (isFunction(handler)) {
4580 switch (arguments.length) {
4581 // fast cases
4582 case 1:
4583 handler.call(this);
4584 break;
4585 case 2:
4586 handler.call(this, arguments[1]);
4587 break;
4588 case 3:
4589 handler.call(this, arguments[1], arguments[2]);
4590 break;
4591 // slower
4592 default:
4593 len = arguments.length;
4594 args = new Array(len - 1);
4595 for (i = 1; i < len; i++)
4596 args[i - 1] = arguments[i];
4597 handler.apply(this, args);
4598 }
4599 } else if (isObject(handler)) {
4600 len = arguments.length;
4601 args = new Array(len - 1);
4602 for (i = 1; i < len; i++)
4603 args[i - 1] = arguments[i];
4604
4605 listeners = handler.slice();
4606 len = listeners.length;
4607 for (i = 0; i < len; i++)
4608 listeners[i].apply(this, args);
4609 }
4610
4611 return true;
4612 };
4613
4614 EventEmitter.prototype.addListener = function(type, listener) {
4615 var m;
4616
4617 if (!isFunction(listener))
4618 throw TypeError('listener must be a function');
4619
4620 if (!this._events)
4621 this._events = {};
4622
4623 // To avoid recursion in the case that type === "newListener"! Before
4624 // adding it to the listeners, first emit "newListener".
4625 if (this._events.newListener)
4626 this.emit('newListener', type,
4627 isFunction(listener.listener) ?
4628 listener.listener : listener);
4629
4630 if (!this._events[type])
4631 // Optimize the case of one listener. Don't need the extra array object.
4632 this._events[type] = listener;
4633 else if (isObject(this._events[type]))
4634 // If we've already got an array, just append.
4635 this._events[type].push(listener);
4636 else
4637 // Adding the second element, need to change to array.
4638 this._events[type] = [this._events[type], listener];
4639
4640 // Check for listener leak
4641 if (isObject(this._events[type]) && !this._events[type].warned) {
4642 var m;
4643 if (!isUndefined(this._maxListeners)) {
4644 m = this._maxListeners;
4645 } else {
4646 m = EventEmitter.defaultMaxListeners;
4647 }
4648
4649 if (m && m > 0 && this._events[type].length > m) {
4650 this._events[type].warned = true;
4651 console.error('(node) warning: possible EventEmitter memory ' +
4652 'leak detected. %d listeners added. ' +
4653 'Use emitter.setMaxListeners() to increase limit.',
4654 this._events[type].length);
4655 if (typeof console.trace === 'function') {
4656 // not supported in IE 10
4657 console.trace();
4658 }
4659 }
4660 }
4661
4662 return this;
4663 };
4664
4665 EventEmitter.prototype.on = EventEmitter.prototype.addListener;
4666
4667 EventEmitter.prototype.once = function(type, listener) {
4668 if (!isFunction(listener))
4669 throw TypeError('listener must be a function');
4670
4671 var fired = false;
4672
4673 function g() {
4674 this.removeListener(type, g);
4675
4676 if (!fired) {
4677 fired = true;
4678 listener.apply(this, arguments);
4679 }
4680 }
4681
4682 g.listener = listener;
4683 this.on(type, g);
4684
4685 return this;
4686 };
4687
4688 // emits a 'removeListener' event iff the listener was removed
4689 EventEmitter.prototype.removeListener = function(type, listener) {
4690 var list, position, length, i;
4691
4692 if (!isFunction(listener))
4693 throw TypeError('listener must be a function');
4694
4695 if (!this._events || !this._events[type])
4696 return this;
4697
4698 list = this._events[type];
4699 length = list.length;
4700 position = -1;
4701
4702 if (list === listener ||
4703 (isFunction(list.listener) && list.listener === listener)) {
4704 delete this._events[type];
4705 if (this._events.removeListener)
4706 this.emit('removeListener', type, listener);
4707
4708 } else if (isObject(list)) {
4709 for (i = length; i-- > 0;) {
4710 if (list[i] === listener ||
4711 (list[i].listener && list[i].listener === listener)) {
4712 position = i;
4713 break;
4714 }
4715 }
4716
4717 if (position < 0)
4718 return this;
4719
4720 if (list.length === 1) {
4721 list.length = 0;
4722 delete this._events[type];
4723 } else {
4724 list.splice(position, 1);
4725 }
4726
4727 if (this._events.removeListener)
4728 this.emit('removeListener', type, listener);
4729 }
4730
4731 return this;
4732 };
4733
4734 EventEmitter.prototype.removeAllListeners = function(type) {
4735 var key, listeners;
4736
4737 if (!this._events)
4738 return this;
4739
4740 // not listening for removeListener, no need to emit
4741 if (!this._events.removeListener) {
4742 if (arguments.length === 0)
4743 this._events = {};
4744 else if (this._events[type])
4745 delete this._events[type];
4746 return this;
4747 }
4748
4749 // emit removeListener for all listeners on all events
4750 if (arguments.length === 0) {
4751 for (key in this._events) {
4752 if (key === 'removeListener') continue;
4753 this.removeAllListeners(key);
4754 }
4755 this.removeAllListeners('removeListener');
4756 this._events = {};
4757 return this;
4758 }
4759
4760 listeners = this._events[type];
4761
4762 if (isFunction(listeners)) {
4763 this.removeListener(type, listeners);
4764 } else {
4765 // LIFO order
4766 while (listeners.length)
4767 this.removeListener(type, listeners[listeners.length - 1]);
4768 }
4769 delete this._events[type];
4770
4771 return this;
4772 };
4773
4774 EventEmitter.prototype.listeners = function(type) {
4775 var ret;
4776 if (!this._events || !this._events[type])
4777 ret = [];
4778 else if (isFunction(this._events[type]))
4779 ret = [this._events[type]];
4780 else
4781 ret = this._events[type].slice();
4782 return ret;
4783 };
4784
4785 EventEmitter.listenerCount = function(emitter, type) {
4786 var ret;
4787 if (!emitter._events || !emitter._events[type])
4788 ret = 0;
4789 else if (isFunction(emitter._events[type]))
4790 ret = 1;
4791 else
4792 ret = emitter._events[type].length;
4793 return ret;
4794 };
4795
4796 function isFunction(arg) {
4797 return typeof arg === 'function';
4798 }
4799
4800 function isNumber(arg) {
4801 return typeof arg === 'number';
4802 }
4803
4804 function isObject(arg) {
4805 return typeof arg === 'object' && arg !== null;
4806 }
4807
4808 function isUndefined(arg) {
4809 return arg === void 0;
4810 }
4811
4812 },{}],12:[function(require,module,exports){
4813 if (typeof Object.create === 'function') {
4814 // implementation from standard node.js 'util' module
4815 module.exports = function inherits(ctor, superCtor) {
4816 ctor.super_ = superCtor
4817 ctor.prototype = Object.create(superCtor.prototype, {
4818 constructor: {
4819 value: ctor,
4820 enumerable: false,
4821 writable: true,
4822 configurable: true
4823 }
4824 });
4825 };
4826 } else {
4827 // old school shim for old browsers
4828 module.exports = function inherits(ctor, superCtor) {
4829 ctor.super_ = superCtor
4830 var TempCtor = function () {}
4831 TempCtor.prototype = superCtor.prototype
4832 ctor.prototype = new TempCtor()
4833 ctor.prototype.constructor = ctor
4834 }
4835 }
4836
4837 },{}],13:[function(require,module,exports){
4838 module.exports = Array.isArray || function (arr) {
4839 return Object.prototype.toString.call(arr) == '[object Array]';
4840 };
4841
4842 },{}],14:[function(require,module,exports){
4843 // shim for using process in browser
4844
4845 var process = module.exports = {};
4846 var queue = [];
4847 var draining = false;
4848 var currentQueue;
4849 var queueIndex = -1;
4850
4851 function cleanUpNextTick() {
4852 draining = false;
4853 if (currentQueue.length) {
4854 queue = currentQueue.concat(queue);
4855 } else {
4856 queueIndex = -1;
4857 }
4858 if (queue.length) {
4859 drainQueue();
4860 }
4861 }
4862
4863 function drainQueue() {
4864 if (draining) {
4865 return;
4866 }
4867 var timeout = setTimeout(cleanUpNextTick);
4868 draining = true;
4869
4870 var len = queue.length;
4871 while(len) {
4872 currentQueue = queue;
4873 queue = [];
4874 while (++queueIndex < len) {
4875 currentQueue[queueIndex].run();
4876 }
4877 queueIndex = -1;
4878 len = queue.length;
4879 }
4880 currentQueue = null;
4881 draining = false;
4882 clearTimeout(timeout);
4883 }
4884
4885 process.nextTick = function (fun) {
4886 var args = new Array(arguments.length - 1);
4887 if (arguments.length > 1) {
4888 for (var i = 1; i < arguments.length; i++) {
4889 args[i - 1] = arguments[i];
4890 }
4891 }
4892 queue.push(new Item(fun, args));
4893 if (queue.length === 1 && !draining) {
4894 setTimeout(drainQueue, 0);
4895 }
4896 };
4897
4898 // v8 likes predictible objects
4899 function Item(fun, array) {
4900 this.fun = fun;
4901 this.array = array;
4902 }
4903 Item.prototype.run = function () {
4904 this.fun.apply(null, this.array);
4905 };
4906 process.title = 'browser';
4907 process.browser = true;
4908 process.env = {};
4909 process.argv = [];
4910 process.version = ''; // empty string to avoid regexp issues
4911 process.versions = {};
4912
4913 function noop() {}
4914
4915 process.on = noop;
4916 process.addListener = noop;
4917 process.once = noop;
4918 process.off = noop;
4919 process.removeListener = noop;
4920 process.removeAllListeners = noop;
4921 process.emit = noop;
4922
4923 process.binding = function (name) {
4924 throw new Error('process.binding is not supported');
4925 };
4926
4927 // TODO(shtylman)
4928 process.cwd = function () { return '/' };
4929 process.chdir = function (dir) {
4930 throw new Error('process.chdir is not supported');
4931 };
4932 process.umask = function() { return 0; };
4933
4934 },{}],15:[function(require,module,exports){
4935 module.exports = require("./lib/_stream_duplex.js")
4936
4937 },{"./lib/_stream_duplex.js":16}],16:[function(require,module,exports){
4938 (function (process){
4939 // Copyright Joyent, Inc. and other Node contributors.
4940 //
4941 // Permission is hereby granted, free of charge, to any person obtaining a
4942 // copy of this software and associated documentation files (the
4943 // "Software"), to deal in the Software without restriction, including
4944 // without limitation the rights to use, copy, modify, merge, publish,
4945 // distribute, sublicense, and/or sell copies of the Software, and to permit
4946 // persons to whom the Software is furnished to do so, subject to the
4947 // following conditions:
4948 //
4949 // The above copyright notice and this permission notice shall be included
4950 // in all copies or substantial portions of the Software.
4951 //
4952 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
4953 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
4954 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
4955 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
4956 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
4957 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
4958 // USE OR OTHER DEALINGS IN THE SOFTWARE.
4959
4960 // a duplex stream is just a stream that is both readable and writable.
4961 // Since JS doesn't have multiple prototypal inheritance, this class
4962 // prototypally inherits from Readable, and then parasitically from
4963 // Writable.
4964
4965 module.exports = Duplex;
4966
4967 /*<replacement>*/
4968 var objectKeys = Object.keys || function (obj) {
4969 var keys = [];
4970 for (var key in obj) keys.push(key);
4971 return keys;
4972 }
4973 /*</replacement>*/
4974
4975
4976 /*<replacement>*/
4977 var util = require('core-util-is');
4978 util.inherits = require('inherits');
4979 /*</replacement>*/
4980
4981 var Readable = require('./_stream_readable');
4982 var Writable = require('./_stream_writable');
4983
4984 util.inherits(Duplex, Readable);
4985
4986 forEach(objectKeys(Writable.prototype), function(method) {
4987 if (!Duplex.prototype[method])
4988 Duplex.prototype[method] = Writable.prototype[method];
4989 });
4990
4991 function Duplex(options) {
4992 if (!(this instanceof Duplex))
4993 return new Duplex(options);
4994
4995 Readable.call(this, options);
4996 Writable.call(this, options);
4997
4998 if (options && options.readable === false)
4999 this.readable = false;
5000
5001 if (options && options.writable === false)
5002 this.writable = false;
5003
5004 this.allowHalfOpen = true;
5005 if (options && options.allowHalfOpen === false)
5006 this.allowHalfOpen = false;
5007
5008 this.once('end', onend);
5009 }
5010
5011 // the no-half-open enforcer
5012 function onend() {
5013 // if we allow half-open state, or if the writable side ended,
5014 // then we're ok.
5015 if (this.allowHalfOpen || this._writableState.ended)
5016 return;
5017
5018 // no more data can be written.
5019 // But allow more writes to happen in this tick.
5020 process.nextTick(this.end.bind(this));
5021 }
5022
5023 function forEach (xs, f) {
5024 for (var i = 0, l = xs.length; i < l; i++) {
5025 f(xs[i], i);
5026 }
5027 }
5028
5029 }).call(this,require('_process'))
5030 },{"./_stream_readable":18,"./_stream_writable":20,"_process":14,"core-util-is":21,"inherits":12}],17:[function(require,module,exports){
5031 // Copyright Joyent, Inc. and other Node contributors.
5032 //
5033 // Permission is hereby granted, free of charge, to any person obtaining a
5034 // copy of this software and associated documentation files (the
5035 // "Software"), to deal in the Software without restriction, including
5036 // without limitation the rights to use, copy, modify, merge, publish,
5037 // distribute, sublicense, and/or sell copies of the Software, and to permit
5038 // persons to whom the Software is furnished to do so, subject to the
5039 // following conditions:
5040 //
5041 // The above copyright notice and this permission notice shall be included
5042 // in all copies or substantial portions of the Software.
5043 //
5044 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
5045 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
5046 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
5047 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
5048 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
5049 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
5050 // USE OR OTHER DEALINGS IN THE SOFTWARE.
5051
5052 // a passthrough stream.
5053 // basically just the most minimal sort of Transform stream.
5054 // Every written chunk gets output as-is.
5055
5056 module.exports = PassThrough;
5057
5058 var Transform = require('./_stream_transform');
5059
5060 /*<replacement>*/
5061 var util = require('core-util-is');
5062 util.inherits = require('inherits');
5063 /*</replacement>*/
5064
5065 util.inherits(PassThrough, Transform);
5066
5067 function PassThrough(options) {
5068 if (!(this instanceof PassThrough))
5069 return new PassThrough(options);
5070
5071 Transform.call(this, options);
5072 }
5073
5074 PassThrough.prototype._transform = function(chunk, encoding, cb) {
5075 cb(null, chunk);
5076 };
5077
5078 },{"./_stream_transform":19,"core-util-is":21,"inherits":12}],18:[function(require,module,exports){
5079 (function (process){
5080 // Copyright Joyent, Inc. and other Node contributors.
5081 //
5082 // Permission is hereby granted, free of charge, to any person obtaining a
5083 // copy of this software and associated documentation files (the
5084 // "Software"), to deal in the Software without restriction, including
5085 // without limitation the rights to use, copy, modify, merge, publish,
5086 // distribute, sublicense, and/or sell copies of the Software, and to permit
5087 // persons to whom the Software is furnished to do so, subject to the
5088 // following conditions:
5089 //
5090 // The above copyright notice and this permission notice shall be included
5091 // in all copies or substantial portions of the Software.
5092 //
5093 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
5094 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
5095 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
5096 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
5097 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
5098 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
5099 // USE OR OTHER DEALINGS IN THE SOFTWARE.
5100
5101 module.exports = Readable;
5102
5103 /*<replacement>*/
5104 var isArray = require('isarray');
5105 /*</replacement>*/
5106
5107
5108 /*<replacement>*/
5109 var Buffer = require('buffer').Buffer;
5110 /*</replacement>*/
5111
5112 Readable.ReadableState = ReadableState;
5113
5114 var EE = require('events').EventEmitter;
5115
5116 /*<replacement>*/
5117 if (!EE.listenerCount) EE.listenerCount = function(emitter, type) {
5118 return emitter.listeners(type).length;
5119 };
5120 /*</replacement>*/
5121
5122 var Stream = require('stream');
5123
5124 /*<replacement>*/
5125 var util = require('core-util-is');
5126 util.inherits = require('inherits');
5127 /*</replacement>*/
5128
5129 var StringDecoder;
5130
5131
5132 /*<replacement>*/
5133 var debug = require('util');
5134 if (debug && debug.debuglog) {
5135 debug = debug.debuglog('stream');
5136 } else {
5137 debug = function () {};
5138 }
5139 /*</replacement>*/
5140
5141
5142 util.inherits(Readable, Stream);
5143
5144 function ReadableState(options, stream) {
5145 var Duplex = require('./_stream_duplex');
5146
5147 options = options || {};
5148
5149 // the point at which it stops calling _read() to fill the buffer
5150 // Note: 0 is a valid value, means "don't call _read preemptively ever"
5151 var hwm = options.highWaterMark;
5152 var defaultHwm = options.objectMode ? 16 : 16 * 1024;
5153 this.highWaterMark = (hwm || hwm === 0) ? hwm : defaultHwm;
5154
5155 // cast to ints.
5156 this.highWaterMark = ~~this.highWaterMark;
5157
5158 this.buffer = [];
5159 this.length = 0;
5160 this.pipes = null;
5161 this.pipesCount = 0;
5162 this.flowing = null;
5163 this.ended = false;
5164 this.endEmitted = false;
5165 this.reading = false;
5166
5167 // a flag to be able to tell if the onwrite cb is called immediately,
5168 // or on a later tick. We set this to true at first, because any
5169 // actions that shouldn't happen until "later" should generally also
5170 // not happen before the first write call.
5171 this.sync = true;
5172
5173 // whenever we return null, then we set a flag to say
5174 // that we're awaiting a 'readable' event emission.
5175 this.needReadable = false;
5176 this.emittedReadable = false;
5177 this.readableListening = false;
5178
5179
5180 // object stream flag. Used to make read(n) ignore n and to
5181 // make all the buffer merging and length checks go away
5182 this.objectMode = !!options.objectMode;
5183
5184 if (stream instanceof Duplex)
5185 this.objectMode = this.objectMode || !!options.readableObjectMode;
5186
5187 // Crypto is kind of old and crusty. Historically, its default string
5188 // encoding is 'binary' so we have to make this configurable.
5189 // Everything else in the universe uses 'utf8', though.
5190 this.defaultEncoding = options.defaultEncoding || 'utf8';
5191
5192 // when piping, we only care about 'readable' events that happen
5193 // after read()ing all the bytes and not getting any pushback.
5194 this.ranOut = false;
5195
5196 // the number of writers that are awaiting a drain event in .pipe()s
5197 this.awaitDrain = 0;
5198
5199 // if true, a maybeReadMore has been scheduled
5200 this.readingMore = false;
5201
5202 this.decoder = null;
5203 this.encoding = null;
5204 if (options.encoding) {
5205 if (!StringDecoder)
5206 StringDecoder = require('string_decoder/').StringDecoder;
5207 this.decoder = new StringDecoder(options.encoding);
5208 this.encoding = options.encoding;
5209 }
5210 }
5211
5212 function Readable(options) {
5213 var Duplex = require('./_stream_duplex');
5214
5215 if (!(this instanceof Readable))
5216 return new Readable(options);
5217
5218 this._readableState = new ReadableState(options, this);
5219
5220 // legacy
5221 this.readable = true;
5222
5223 Stream.call(this);
5224 }
5225
5226 // Manually shove something into the read() buffer.
5227 // This returns true if the highWaterMark has not been hit yet,
5228 // similar to how Writable.write() returns true if you should
5229 // write() some more.
5230 Readable.prototype.push = function(chunk, encoding) {
5231 var state = this._readableState;
5232
5233 if (util.isString(chunk) && !state.objectMode) {
5234 encoding = encoding || state.defaultEncoding;
5235 if (encoding !== state.encoding) {
5236 chunk = new Buffer(chunk, encoding);
5237 encoding = '';
5238 }
5239 }
5240
5241 return readableAddChunk(this, state, chunk, encoding, false);
5242 };
5243
5244 // Unshift should *always* be something directly out of read()
5245 Readable.prototype.unshift = function(chunk) {
5246 var state = this._readableState;
5247 return readableAddChunk(this, state, chunk, '', true);
5248 };
5249
5250 function readableAddChunk(stream, state, chunk, encoding, addToFront) {
5251 var er = chunkInvalid(state, chunk);
5252 if (er) {
5253 stream.emit('error', er);
5254 } else if (util.isNullOrUndefined(chunk)) {
5255 state.reading = false;
5256 if (!state.ended)
5257 onEofChunk(stream, state);
5258 } else if (state.objectMode || chunk && chunk.length > 0) {
5259 if (state.ended && !addToFront) {
5260 var e = new Error('stream.push() after EOF');
5261 stream.emit('error', e);
5262 } else if (state.endEmitted && addToFront) {
5263 var e = new Error('stream.unshift() after end event');
5264 stream.emit('error', e);
5265 } else {
5266 if (state.decoder && !addToFront && !encoding)
5267 chunk = state.decoder.write(chunk);
5268
5269 if (!addToFront)
5270 state.reading = false;
5271
5272 // if we want the data now, just emit it.
5273 if (state.flowing && state.length === 0 && !state.sync) {
5274 stream.emit('data', chunk);
5275 stream.read(0);
5276 } else {
5277 // update the buffer info.
5278 state.length += state.objectMode ? 1 : chunk.length;
5279 if (addToFront)
5280 state.buffer.unshift(chunk);
5281 else
5282 state.buffer.push(chunk);
5283
5284 if (state.needReadable)
5285 emitReadable(stream);
5286 }
5287
5288 maybeReadMore(stream, state);
5289 }
5290 } else if (!addToFront) {
5291 state.reading = false;
5292 }
5293
5294 return needMoreData(state);
5295 }
5296
5297
5298
5299 // if it's past the high water mark, we can push in some more.
5300 // Also, if we have no data yet, we can stand some
5301 // more bytes. This is to work around cases where hwm=0,
5302 // such as the repl. Also, if the push() triggered a
5303 // readable event, and the user called read(largeNumber) such that
5304 // needReadable was set, then we ought to push more, so that another
5305 // 'readable' event will be triggered.
5306 function needMoreData(state) {
5307 return !state.ended &&
5308 (state.needReadable ||
5309 state.length < state.highWaterMark ||
5310 state.length === 0);
5311 }
5312
5313 // backwards compatibility.
5314 Readable.prototype.setEncoding = function(enc) {
5315 if (!StringDecoder)
5316 StringDecoder = require('string_decoder/').StringDecoder;
5317 this._readableState.decoder = new StringDecoder(enc);
5318 this._readableState.encoding = enc;
5319 return this;
5320 };
5321
5322 // Don't raise the hwm > 128MB
5323 var MAX_HWM = 0x800000;
5324 function roundUpToNextPowerOf2(n) {
5325 if (n >= MAX_HWM) {
5326 n = MAX_HWM;
5327 } else {
5328 // Get the next highest power of 2
5329 n--;
5330 for (var p = 1; p < 32; p <<= 1) n |= n >> p;
5331 n++;
5332 }
5333 return n;
5334 }
5335
5336 function howMuchToRead(n, state) {
5337 if (state.length === 0 && state.ended)
5338 return 0;
5339
5340 if (state.objectMode)
5341 return n === 0 ? 0 : 1;
5342
5343 if (isNaN(n) || util.isNull(n)) {
5344 // only flow one buffer at a time
5345 if (state.flowing && state.buffer.length)
5346 return state.buffer[0].length;
5347 else
5348 return state.length;
5349 }
5350
5351 if (n <= 0)
5352 return 0;
5353
5354 // If we're asking for more than the target buffer level,
5355 // then raise the water mark. Bump up to the next highest
5356 // power of 2, to prevent increasing it excessively in tiny
5357 // amounts.
5358 if (n > state.highWaterMark)
5359 state.highWaterMark = roundUpToNextPowerOf2(n);
5360
5361 // don't have that much. return null, unless we've ended.
5362 if (n > state.length) {
5363 if (!state.ended) {
5364 state.needReadable = true;
5365 return 0;
5366 } else
5367 return state.length;
5368 }
5369
5370 return n;
5371 }
5372
5373 // you can override either this method, or the async _read(n) below.
5374 Readable.prototype.read = function(n) {
5375 debug('read', n);
5376 var state = this._readableState;
5377 var nOrig = n;
5378
5379 if (!util.isNumber(n) || n > 0)
5380 state.emittedReadable = false;
5381
5382 // if we're doing read(0) to trigger a readable event, but we
5383 // already have a bunch of data in the buffer, then just trigger
5384 // the 'readable' event and move on.
5385 if (n === 0 &&
5386 state.needReadable &&
5387 (state.length >= state.highWaterMark || state.ended)) {
5388 debug('read: emitReadable', state.length, state.ended);
5389 if (state.length === 0 && state.ended)
5390 endReadable(this);
5391 else
5392 emitReadable(this);
5393 return null;
5394 }
5395
5396 n = howMuchToRead(n, state);
5397
5398 // if we've ended, and we're now clear, then finish it up.
5399 if (n === 0 && state.ended) {
5400 if (state.length === 0)
5401 endReadable(this);
5402 return null;
5403 }
5404
5405 // All the actual chunk generation logic needs to be
5406 // *below* the call to _read. The reason is that in certain
5407 // synthetic stream cases, such as passthrough streams, _read
5408 // may be a completely synchronous operation which may change
5409 // the state of the read buffer, providing enough data when
5410 // before there was *not* enough.
5411 //
5412 // So, the steps are:
5413 // 1. Figure out what the state of things will be after we do
5414 // a read from the buffer.
5415 //
5416 // 2. If that resulting state will trigger a _read, then call _read.
5417 // Note that this may be asynchronous, or synchronous. Yes, it is
5418 // deeply ugly to write APIs this way, but that still doesn't mean
5419 // that the Readable class should behave improperly, as streams are
5420 // designed to be sync/async agnostic.
5421 // Take note if the _read call is sync or async (ie, if the read call
5422 // has returned yet), so that we know whether or not it's safe to emit
5423 // 'readable' etc.
5424 //
5425 // 3. Actually pull the requested chunks out of the buffer and return.
5426
5427 // if we need a readable event, then we need to do some reading.
5428 var doRead = state.needReadable;
5429 debug('need readable', doRead);
5430
5431 // if we currently have less than the highWaterMark, then also read some
5432 if (state.length === 0 || state.length - n < state.highWaterMark) {
5433 doRead = true;
5434 debug('length less than watermark', doRead);
5435 }
5436
5437 // however, if we've ended, then there's no point, and if we're already
5438 // reading, then it's unnecessary.
5439 if (state.ended || state.reading) {
5440 doRead = false;
5441 debug('reading or ended', doRead);
5442 }
5443
5444 if (doRead) {
5445 debug('do read');
5446 state.reading = true;
5447 state.sync = true;
5448 // if the length is currently zero, then we *need* a readable event.
5449 if (state.length === 0)
5450 state.needReadable = true;
5451 // call internal read method
5452 this._read(state.highWaterMark);
5453 state.sync = false;
5454 }
5455
5456 // If _read pushed data synchronously, then `reading` will be false,
5457 // and we need to re-evaluate how much data we can return to the user.
5458 if (doRead && !state.reading)
5459 n = howMuchToRead(nOrig, state);
5460
5461 var ret;
5462 if (n > 0)
5463 ret = fromList(n, state);
5464 else
5465 ret = null;
5466
5467 if (util.isNull(ret)) {
5468 state.needReadable = true;
5469 n = 0;
5470 }
5471
5472 state.length -= n;
5473
5474 // If we have nothing in the buffer, then we want to know
5475 // as soon as we *do* get something into the buffer.
5476 if (state.length === 0 && !state.ended)
5477 state.needReadable = true;
5478
5479 // If we tried to read() past the EOF, then emit end on the next tick.
5480 if (nOrig !== n && state.ended && state.length === 0)
5481 endReadable(this);
5482
5483 if (!util.isNull(ret))
5484 this.emit('data', ret);
5485
5486 return ret;
5487 };
5488
5489 function chunkInvalid(state, chunk) {
5490 var er = null;
5491 if (!util.isBuffer(chunk) &&
5492 !util.isString(chunk) &&
5493 !util.isNullOrUndefined(chunk) &&
5494 !state.objectMode) {
5495 er = new TypeError('Invalid non-string/buffer chunk');
5496 }
5497 return er;
5498 }
5499
5500
5501 function onEofChunk(stream, state) {
5502 if (state.decoder && !state.ended) {
5503 var chunk = state.decoder.end();
5504 if (chunk && chunk.length) {
5505 state.buffer.push(chunk);
5506 state.length += state.objectMode ? 1 : chunk.length;
5507 }
5508 }
5509 state.ended = true;
5510
5511 // emit 'readable' now to make sure it gets picked up.
5512 emitReadable(stream);
5513 }
5514
5515 // Don't emit readable right away in sync mode, because this can trigger
5516 // another read() call => stack overflow. This way, it might trigger
5517 // a nextTick recursion warning, but that's not so bad.
5518 function emitReadable(stream) {
5519 var state = stream._readableState;
5520 state.needReadable = false;
5521 if (!state.emittedReadable) {
5522 debug('emitReadable', state.flowing);
5523 state.emittedReadable = true;
5524 if (state.sync)
5525 process.nextTick(function() {
5526 emitReadable_(stream);
5527 });
5528 else
5529 emitReadable_(stream);
5530 }
5531 }
5532
5533 function emitReadable_(stream) {
5534 debug('emit readable');
5535 stream.emit('readable');
5536 flow(stream);
5537 }
5538
5539
5540 // at this point, the user has presumably seen the 'readable' event,
5541 // and called read() to consume some data. that may have triggered
5542 // in turn another _read(n) call, in which case reading = true if
5543 // it's in progress.
5544 // However, if we're not ended, or reading, and the length < hwm,
5545 // then go ahead and try to read some more preemptively.
5546 function maybeReadMore(stream, state) {
5547 if (!state.readingMore) {
5548 state.readingMore = true;
5549 process.nextTick(function() {
5550 maybeReadMore_(stream, state);
5551 });
5552 }
5553 }
5554
5555 function maybeReadMore_(stream, state) {
5556 var len = state.length;
5557 while (!state.reading && !state.flowing && !state.ended &&
5558 state.length < state.highWaterMark) {
5559 debug('maybeReadMore read 0');
5560 stream.read(0);
5561 if (len === state.length)
5562 // didn't get any data, stop spinning.
5563 break;
5564 else
5565 len = state.length;
5566 }
5567 state.readingMore = false;
5568 }
5569
5570 // abstract method. to be overridden in specific implementation classes.
5571 // call cb(er, data) where data is <= n in length.
5572 // for virtual (non-string, non-buffer) streams, "length" is somewhat
5573 // arbitrary, and perhaps not very meaningful.
5574 Readable.prototype._read = function(n) {
5575 this.emit('error', new Error('not implemented'));
5576 };
5577
5578 Readable.prototype.pipe = function(dest, pipeOpts) {
5579 var src = this;
5580 var state = this._readableState;
5581
5582 switch (state.pipesCount) {
5583 case 0:
5584 state.pipes = dest;
5585 break;
5586 case 1:
5587 state.pipes = [state.pipes, dest];
5588 break;
5589 default:
5590 state.pipes.push(dest);
5591 break;
5592 }
5593 state.pipesCount += 1;
5594 debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
5595
5596 var doEnd = (!pipeOpts || pipeOpts.end !== false) &&
5597 dest !== process.stdout &&
5598 dest !== process.stderr;
5599
5600 var endFn = doEnd ? onend : cleanup;
5601 if (state.endEmitted)
5602 process.nextTick(endFn);
5603 else
5604 src.once('end', endFn);
5605
5606 dest.on('unpipe', onunpipe);
5607 function onunpipe(readable) {
5608 debug('onunpipe');
5609 if (readable === src) {
5610 cleanup();
5611 }
5612 }
5613
5614 function onend() {
5615 debug('onend');
5616 dest.end();
5617 }
5618
5619 // when the dest drains, it reduces the awaitDrain counter
5620 // on the source. This would be more elegant with a .once()
5621 // handler in flow(), but adding and removing repeatedly is
5622 // too slow.
5623 var ondrain = pipeOnDrain(src);
5624 dest.on('drain', ondrain);
5625
5626 function cleanup() {
5627 debug('cleanup');
5628 // cleanup event handlers once the pipe is broken
5629 dest.removeListener('close', onclose);
5630 dest.removeListener('finish', onfinish);
5631 dest.removeListener('drain', ondrain);
5632 dest.removeListener('error', onerror);
5633 dest.removeListener('unpipe', onunpipe);
5634 src.removeListener('end', onend);
5635 src.removeListener('end', cleanup);
5636 src.removeListener('data', ondata);
5637
5638 // if the reader is waiting for a drain event from this
5639 // specific writer, then it would cause it to never start
5640 // flowing again.
5641 // So, if this is awaiting a drain, then we just call it now.
5642 // If we don't know, then assume that we are waiting for one.
5643 if (state.awaitDrain &&
5644 (!dest._writableState || dest._writableState.needDrain))
5645 ondrain();
5646 }
5647
5648 src.on('data', ondata);
5649 function ondata(chunk) {
5650 debug('ondata');
5651 var ret = dest.write(chunk);
5652 if (false === ret) {
5653 debug('false write response, pause',
5654 src._readableState.awaitDrain);
5655 src._readableState.awaitDrain++;
5656 src.pause();
5657 }
5658 }
5659
5660 // if the dest has an error, then stop piping into it.
5661 // however, don't suppress the throwing behavior for this.
5662 function onerror(er) {
5663 debug('onerror', er);
5664 unpipe();
5665 dest.removeListener('error', onerror);
5666 if (EE.listenerCount(dest, 'error') === 0)
5667 dest.emit('error', er);
5668 }
5669 // This is a brutally ugly hack to make sure that our error handler
5670 // is attached before any userland ones. NEVER DO THIS.
5671 if (!dest._events || !dest._events.error)
5672 dest.on('error', onerror);
5673 else if (isArray(dest._events.error))
5674 dest._events.error.unshift(onerror);
5675 else
5676 dest._events.error = [onerror, dest._events.error];
5677
5678
5679
5680 // Both close and finish should trigger unpipe, but only once.
5681 function onclose() {
5682 dest.removeListener('finish', onfinish);
5683 unpipe();
5684 }
5685 dest.once('close', onclose);
5686 function onfinish() {
5687 debug('onfinish');
5688 dest.removeListener('close', onclose);
5689 unpipe();
5690 }
5691 dest.once('finish', onfinish);
5692
5693 function unpipe() {
5694 debug('unpipe');
5695 src.unpipe(dest);
5696 }
5697
5698 // tell the dest that it's being piped to
5699 dest.emit('pipe', src);
5700
5701 // start the flow if it hasn't been started already.
5702 if (!state.flowing) {
5703 debug('pipe resume');
5704 src.resume();
5705 }
5706
5707 return dest;
5708 };
5709
5710 function pipeOnDrain(src) {
5711 return function() {
5712 var state = src._readableState;
5713 debug('pipeOnDrain', state.awaitDrain);
5714 if (state.awaitDrain)
5715 state.awaitDrain--;
5716 if (state.awaitDrain === 0 && EE.listenerCount(src, 'data')) {
5717 state.flowing = true;
5718 flow(src);
5719 }
5720 };
5721 }
5722
5723
5724 Readable.prototype.unpipe = function(dest) {
5725 var state = this._readableState;
5726
5727 // if we're not piping anywhere, then do nothing.
5728 if (state.pipesCount === 0)
5729 return this;
5730
5731 // just one destination. most common case.
5732 if (state.pipesCount === 1) {
5733 // passed in one, but it's not the right one.
5734 if (dest && dest !== state.pipes)
5735 return this;
5736
5737 if (!dest)
5738 dest = state.pipes;
5739
5740 // got a match.
5741 state.pipes = null;
5742 state.pipesCount = 0;
5743 state.flowing = false;
5744 if (dest)
5745 dest.emit('unpipe', this);
5746 return this;
5747 }
5748
5749 // slow case. multiple pipe destinations.
5750
5751 if (!dest) {
5752 // remove all.
5753 var dests = state.pipes;
5754 var len = state.pipesCount;
5755 state.pipes = null;
5756 state.pipesCount = 0;
5757 state.flowing = false;
5758
5759 for (var i = 0; i < len; i++)
5760 dests[i].emit('unpipe', this);
5761 return this;
5762 }
5763
5764 // try to find the right one.
5765 var i = indexOf(state.pipes, dest);
5766 if (i === -1)
5767 return this;
5768
5769 state.pipes.splice(i, 1);
5770 state.pipesCount -= 1;
5771 if (state.pipesCount === 1)
5772 state.pipes = state.pipes[0];
5773
5774 dest.emit('unpipe', this);
5775
5776 return this;
5777 };
5778
5779 // set up data events if they are asked for
5780 // Ensure readable listeners eventually get something
5781 Readable.prototype.on = function(ev, fn) {
5782 var res = Stream.prototype.on.call(this, ev, fn);
5783
5784 // If listening to data, and it has not explicitly been paused,
5785 // then call resume to start the flow of data on the next tick.
5786 if (ev === 'data' && false !== this._readableState.flowing) {
5787 this.resume();
5788 }
5789
5790 if (ev === 'readable' && this.readable) {
5791 var state = this._readableState;
5792 if (!state.readableListening) {
5793 state.readableListening = true;
5794 state.emittedReadable = false;
5795 state.needReadable = true;
5796 if (!state.reading) {
5797 var self = this;
5798 process.nextTick(function() {
5799 debug('readable nexttick read 0');
5800 self.read(0);
5801 });
5802 } else if (state.length) {
5803 emitReadable(this, state);
5804 }
5805 }
5806 }
5807
5808 return res;
5809 };
5810 Readable.prototype.addListener = Readable.prototype.on;
5811
5812 // pause() and resume() are remnants of the legacy readable stream API
5813 // If the user uses them, then switch into old mode.
5814 Readable.prototype.resume = function() {
5815 var state = this._readableState;
5816 if (!state.flowing) {
5817 debug('resume');
5818 state.flowing = true;
5819 if (!state.reading) {
5820 debug('resume read 0');
5821 this.read(0);
5822 }
5823 resume(this, state);
5824 }
5825 return this;
5826 };
5827
5828 function resume(stream, state) {
5829 if (!state.resumeScheduled) {
5830 state.resumeScheduled = true;
5831 process.nextTick(function() {
5832 resume_(stream, state);
5833 });
5834 }
5835 }
5836
5837 function resume_(stream, state) {
5838 state.resumeScheduled = false;
5839 stream.emit('resume');
5840 flow(stream);
5841 if (state.flowing && !state.reading)
5842 stream.read(0);
5843 }
5844
5845 Readable.prototype.pause = function() {
5846 debug('call pause flowing=%j', this._readableState.flowing);
5847 if (false !== this._readableState.flowing) {
5848 debug('pause');
5849 this._readableState.flowing = false;
5850 this.emit('pause');
5851 }
5852 return this;
5853 };
5854
5855 function flow(stream) {
5856 var state = stream._readableState;
5857 debug('flow', state.flowing);
5858 if (state.flowing) {
5859 do {
5860 var chunk = stream.read();
5861 } while (null !== chunk && state.flowing);
5862 }
5863 }
5864
5865 // wrap an old-style stream as the async data source.
5866 // This is *not* part of the readable stream interface.
5867 // It is an ugly unfortunate mess of history.
5868 Readable.prototype.wrap = function(stream) {
5869 var state = this._readableState;
5870 var paused = false;
5871
5872 var self = this;
5873 stream.on('end', function() {
5874 debug('wrapped end');
5875 if (state.decoder && !state.ended) {
5876 var chunk = state.decoder.end();
5877 if (chunk && chunk.length)
5878 self.push(chunk);
5879 }
5880
5881 self.push(null);
5882 });
5883
5884 stream.on('data', function(chunk) {
5885 debug('wrapped data');
5886 if (state.decoder)
5887 chunk = state.decoder.write(chunk);
5888 if (!chunk || !state.objectMode && !chunk.length)
5889 return;
5890
5891 var ret = self.push(chunk);
5892 if (!ret) {
5893 paused = true;
5894 stream.pause();
5895 }
5896 });
5897
5898 // proxy all the other methods.
5899 // important when wrapping filters and duplexes.
5900 for (var i in stream) {
5901 if (util.isFunction(stream[i]) && util.isUndefined(this[i])) {
5902 this[i] = function(method) { return function() {
5903 return stream[method].apply(stream, arguments);
5904 }}(i);
5905 }
5906 }
5907
5908 // proxy certain important events.
5909 var events = ['error', 'close', 'destroy', 'pause', 'resume'];
5910 forEach(events, function(ev) {
5911 stream.on(ev, self.emit.bind(self, ev));
5912 });
5913
5914 // when we try to consume some more bytes, simply unpause the
5915 // underlying stream.
5916 self._read = function(n) {
5917 debug('wrapped _read', n);
5918 if (paused) {
5919 paused = false;
5920 stream.resume();
5921 }
5922 };
5923
5924 return self;
5925 };
5926
5927
5928
5929 // exposed for testing purposes only.
5930 Readable._fromList = fromList;
5931
5932 // Pluck off n bytes from an array of buffers.
5933 // Length is the combined lengths of all the buffers in the list.
5934 function fromList(n, state) {
5935 var list = state.buffer;
5936 var length = state.length;
5937 var stringMode = !!state.decoder;
5938 var objectMode = !!state.objectMode;
5939 var ret;
5940
5941 // nothing in the list, definitely empty.
5942 if (list.length === 0)
5943 return null;
5944
5945 if (length === 0)
5946 ret = null;
5947 else if (objectMode)
5948 ret = list.shift();
5949 else if (!n || n >= length) {
5950 // read it all, truncate the array.
5951 if (stringMode)
5952 ret = list.join('');
5953 else
5954 ret = Buffer.concat(list, length);
5955 list.length = 0;
5956 } else {
5957 // read just some of it.
5958 if (n < list[0].length) {
5959 // just take a part of the first list item.
5960 // slice is the same for buffers and strings.
5961 var buf = list[0];
5962 ret = buf.slice(0, n);
5963 list[0] = buf.slice(n);
5964 } else if (n === list[0].length) {
5965 // first list is a perfect match
5966 ret = list.shift();
5967 } else {
5968 // complex case.
5969 // we have enough to cover it, but it spans past the first buffer.
5970 if (stringMode)
5971 ret = '';
5972 else
5973 ret = new Buffer(n);
5974
5975 var c = 0;
5976 for (var i = 0, l = list.length; i < l && c < n; i++) {
5977 var buf = list[0];
5978 var cpy = Math.min(n - c, buf.length);
5979
5980 if (stringMode)
5981 ret += buf.slice(0, cpy);
5982 else
5983 buf.copy(ret, c, 0, cpy);
5984
5985 if (cpy < buf.length)
5986 list[0] = buf.slice(cpy);
5987 else
5988 list.shift();
5989
5990 c += cpy;
5991 }
5992 }
5993 }
5994
5995 return ret;
5996 }
5997
5998 function endReadable(stream) {
5999 var state = stream._readableState;
6000
6001 // If we get here before consuming all the bytes, then that is a
6002 // bug in node. Should never happen.
6003 if (state.length > 0)
6004 throw new Error('endReadable called on non-empty stream');
6005
6006 if (!state.endEmitted) {
6007 state.ended = true;
6008 process.nextTick(function() {
6009 // Check that we didn't get one last unshift.
6010 if (!state.endEmitted && state.length === 0) {
6011 state.endEmitted = true;
6012 stream.readable = false;
6013 stream.emit('end');
6014 }
6015 });
6016 }
6017 }
6018
6019 function forEach (xs, f) {
6020 for (var i = 0, l = xs.length; i < l; i++) {
6021 f(xs[i], i);
6022 }
6023 }
6024
6025 function indexOf (xs, x) {
6026 for (var i = 0, l = xs.length; i < l; i++) {
6027 if (xs[i] === x) return i;
6028 }
6029 return -1;
6030 }
6031
6032 }).call(this,require('_process'))
6033 },{"./_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){
6034 // Copyright Joyent, Inc. and other Node contributors.
6035 //
6036 // Permission is hereby granted, free of charge, to any person obtaining a
6037 // copy of this software and associated documentation files (the
6038 // "Software"), to deal in the Software without restriction, including
6039 // without limitation the rights to use, copy, modify, merge, publish,
6040 // distribute, sublicense, and/or sell copies of the Software, and to permit
6041 // persons to whom the Software is furnished to do so, subject to the
6042 // following conditions:
6043 //
6044 // The above copyright notice and this permission notice shall be included
6045 // in all copies or substantial portions of the Software.
6046 //
6047 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6048 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6049 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6050 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6051 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6052 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6053 // USE OR OTHER DEALINGS IN THE SOFTWARE.
6054
6055
6056 // a transform stream is a readable/writable stream where you do
6057 // something with the data. Sometimes it's called a "filter",
6058 // but that's not a great name for it, since that implies a thing where
6059 // some bits pass through, and others are simply ignored. (That would
6060 // be a valid example of a transform, of course.)
6061 //
6062 // While the output is causally related to the input, it's not a
6063 // necessarily symmetric or synchronous transformation. For example,
6064 // a zlib stream might take multiple plain-text writes(), and then
6065 // emit a single compressed chunk some time in the future.
6066 //
6067 // Here's how this works:
6068 //
6069 // The Transform stream has all the aspects of the readable and writable
6070 // stream classes. When you write(chunk), that calls _write(chunk,cb)
6071 // internally, and returns false if there's a lot of pending writes
6072 // buffered up. When you call read(), that calls _read(n) until
6073 // there's enough pending readable data buffered up.
6074 //
6075 // In a transform stream, the written data is placed in a buffer. When
6076 // _read(n) is called, it transforms the queued up data, calling the
6077 // buffered _write cb's as it consumes chunks. If consuming a single
6078 // written chunk would result in multiple output chunks, then the first
6079 // outputted bit calls the readcb, and subsequent chunks just go into
6080 // the read buffer, and will cause it to emit 'readable' if necessary.
6081 //
6082 // This way, back-pressure is actually determined by the reading side,
6083 // since _read has to be called to start processing a new chunk. However,
6084 // a pathological inflate type of transform can cause excessive buffering
6085 // here. For example, imagine a stream where every byte of input is
6086 // interpreted as an integer from 0-255, and then results in that many
6087 // bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in
6088 // 1kb of data being output. In this case, you could write a very small
6089 // amount of input, and end up with a very large amount of output. In
6090 // such a pathological inflating mechanism, there'd be no way to tell
6091 // the system to stop doing the transform. A single 4MB write could
6092 // cause the system to run out of memory.
6093 //
6094 // However, even in such a pathological case, only a single written chunk
6095 // would be consumed, and then the rest would wait (un-transformed) until
6096 // the results of the previous transformed chunk were consumed.
6097
6098 module.exports = Transform;
6099
6100 var Duplex = require('./_stream_duplex');
6101
6102 /*<replacement>*/
6103 var util = require('core-util-is');
6104 util.inherits = require('inherits');
6105 /*</replacement>*/
6106
6107 util.inherits(Transform, Duplex);
6108
6109
6110 function TransformState(options, stream) {
6111 this.afterTransform = function(er, data) {
6112 return afterTransform(stream, er, data);
6113 };
6114
6115 this.needTransform = false;
6116 this.transforming = false;
6117 this.writecb = null;
6118 this.writechunk = null;
6119 }
6120
6121 function afterTransform(stream, er, data) {
6122 var ts = stream._transformState;
6123 ts.transforming = false;
6124
6125 var cb = ts.writecb;
6126
6127 if (!cb)
6128 return stream.emit('error', new Error('no writecb in Transform class'));
6129
6130 ts.writechunk = null;
6131 ts.writecb = null;
6132
6133 if (!util.isNullOrUndefined(data))
6134 stream.push(data);
6135
6136 if (cb)
6137 cb(er);
6138
6139 var rs = stream._readableState;
6140 rs.reading = false;
6141 if (rs.needReadable || rs.length < rs.highWaterMark) {
6142 stream._read(rs.highWaterMark);
6143 }
6144 }
6145
6146
6147 function Transform(options) {
6148 if (!(this instanceof Transform))
6149 return new Transform(options);
6150
6151 Duplex.call(this, options);
6152
6153 this._transformState = new TransformState(options, this);
6154
6155 // when the writable side finishes, then flush out anything remaining.
6156 var stream = this;
6157
6158 // start out asking for a readable event once data is transformed.
6159 this._readableState.needReadable = true;
6160
6161 // we have implemented the _read method, and done the other things
6162 // that Readable wants before the first _read call, so unset the
6163 // sync guard flag.
6164 this._readableState.sync = false;
6165
6166 this.once('prefinish', function() {
6167 if (util.isFunction(this._flush))
6168 this._flush(function(er) {
6169 done(stream, er);
6170 });
6171 else
6172 done(stream);
6173 });
6174 }
6175
6176 Transform.prototype.push = function(chunk, encoding) {
6177 this._transformState.needTransform = false;
6178 return Duplex.prototype.push.call(this, chunk, encoding);
6179 };
6180
6181 // This is the part where you do stuff!
6182 // override this function in implementation classes.
6183 // 'chunk' is an input chunk.
6184 //
6185 // Call `push(newChunk)` to pass along transformed output
6186 // to the readable side. You may call 'push' zero or more times.
6187 //
6188 // Call `cb(err)` when you are done with this chunk. If you pass
6189 // an error, then that'll put the hurt on the whole operation. If you
6190 // never call cb(), then you'll never get another chunk.
6191 Transform.prototype._transform = function(chunk, encoding, cb) {
6192 throw new Error('not implemented');
6193 };
6194
6195 Transform.prototype._write = function(chunk, encoding, cb) {
6196 var ts = this._transformState;
6197 ts.writecb = cb;
6198 ts.writechunk = chunk;
6199 ts.writeencoding = encoding;
6200 if (!ts.transforming) {
6201 var rs = this._readableState;
6202 if (ts.needTransform ||
6203 rs.needReadable ||
6204 rs.length < rs.highWaterMark)
6205 this._read(rs.highWaterMark);
6206 }
6207 };
6208
6209 // Doesn't matter what the args are here.
6210 // _transform does all the work.
6211 // That we got here means that the readable side wants more data.
6212 Transform.prototype._read = function(n) {
6213 var ts = this._transformState;
6214
6215 if (!util.isNull(ts.writechunk) && ts.writecb && !ts.transforming) {
6216 ts.transforming = true;
6217 this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
6218 } else {
6219 // mark that we need a transform, so that any data that comes in
6220 // will get processed, now that we've asked for it.
6221 ts.needTransform = true;
6222 }
6223 };
6224
6225
6226 function done(stream, er) {
6227 if (er)
6228 return stream.emit('error', er);
6229
6230 // if there's nothing in the write buffer, then that means
6231 // that nothing more will ever be provided
6232 var ws = stream._writableState;
6233 var ts = stream._transformState;
6234
6235 if (ws.length)
6236 throw new Error('calling transform done when ws.length != 0');
6237
6238 if (ts.transforming)
6239 throw new Error('calling transform done when still transforming');
6240
6241 return stream.push(null);
6242 }
6243
6244 },{"./_stream_duplex":16,"core-util-is":21,"inherits":12}],20:[function(require,module,exports){
6245 (function (process){
6246 // Copyright Joyent, Inc. and other Node contributors.
6247 //
6248 // Permission is hereby granted, free of charge, to any person obtaining a
6249 // copy of this software and associated documentation files (the
6250 // "Software"), to deal in the Software without restriction, including
6251 // without limitation the rights to use, copy, modify, merge, publish,
6252 // distribute, sublicense, and/or sell copies of the Software, and to permit
6253 // persons to whom the Software is furnished to do so, subject to the
6254 // following conditions:
6255 //
6256 // The above copyright notice and this permission notice shall be included
6257 // in all copies or substantial portions of the Software.
6258 //
6259 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6260 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6261 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6262 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6263 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6264 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6265 // USE OR OTHER DEALINGS IN THE SOFTWARE.
6266
6267 // A bit simpler than readable streams.
6268 // Implement an async ._write(chunk, cb), and it'll handle all
6269 // the drain event emission and buffering.
6270
6271 module.exports = Writable;
6272
6273 /*<replacement>*/
6274 var Buffer = require('buffer').Buffer;
6275 /*</replacement>*/
6276
6277 Writable.WritableState = WritableState;
6278
6279
6280 /*<replacement>*/
6281 var util = require('core-util-is');
6282 util.inherits = require('inherits');
6283 /*</replacement>*/
6284
6285 var Stream = require('stream');
6286
6287 util.inherits(Writable, Stream);
6288
6289 function WriteReq(chunk, encoding, cb) {
6290 this.chunk = chunk;
6291 this.encoding = encoding;
6292 this.callback = cb;
6293 }
6294
6295 function WritableState(options, stream) {
6296 var Duplex = require('./_stream_duplex');
6297
6298 options = options || {};
6299
6300 // the point at which write() starts returning false
6301 // Note: 0 is a valid value, means that we always return false if
6302 // the entire buffer is not flushed immediately on write()
6303 var hwm = options.highWaterMark;
6304 var defaultHwm = options.objectMode ? 16 : 16 * 1024;
6305 this.highWaterMark = (hwm || hwm === 0) ? hwm : defaultHwm;
6306
6307 // object stream flag to indicate whether or not this stream
6308 // contains buffers or objects.
6309 this.objectMode = !!options.objectMode;
6310
6311 if (stream instanceof Duplex)
6312 this.objectMode = this.objectMode || !!options.writableObjectMode;
6313
6314 // cast to ints.
6315 this.highWaterMark = ~~this.highWaterMark;
6316
6317 this.needDrain = false;
6318 // at the start of calling end()
6319 this.ending = false;
6320 // when end() has been called, and returned
6321 this.ended = false;
6322 // when 'finish' is emitted
6323 this.finished = false;
6324
6325 // should we decode strings into buffers before passing to _write?
6326 // this is here so that some node-core streams can optimize string
6327 // handling at a lower level.
6328 var noDecode = options.decodeStrings === false;
6329 this.decodeStrings = !noDecode;
6330
6331 // Crypto is kind of old and crusty. Historically, its default string
6332 // encoding is 'binary' so we have to make this configurable.
6333 // Everything else in the universe uses 'utf8', though.
6334 this.defaultEncoding = options.defaultEncoding || 'utf8';
6335
6336 // not an actual buffer we keep track of, but a measurement
6337 // of how much we're waiting to get pushed to some underlying
6338 // socket or file.
6339 this.length = 0;
6340
6341 // a flag to see when we're in the middle of a write.
6342 this.writing = false;
6343
6344 // when true all writes will be buffered until .uncork() call
6345 this.corked = 0;
6346
6347 // a flag to be able to tell if the onwrite cb is called immediately,
6348 // or on a later tick. We set this to true at first, because any
6349 // actions that shouldn't happen until "later" should generally also
6350 // not happen before the first write call.
6351 this.sync = true;
6352
6353 // a flag to know if we're processing previously buffered items, which
6354 // may call the _write() callback in the same tick, so that we don't
6355 // end up in an overlapped onwrite situation.
6356 this.bufferProcessing = false;
6357
6358 // the callback that's passed to _write(chunk,cb)
6359 this.onwrite = function(er) {
6360 onwrite(stream, er);
6361 };
6362
6363 // the callback that the user supplies to write(chunk,encoding,cb)
6364 this.writecb = null;
6365
6366 // the amount that is being written when _write is called.
6367 this.writelen = 0;
6368
6369 this.buffer = [];
6370
6371 // number of pending user-supplied write callbacks
6372 // this must be 0 before 'finish' can be emitted
6373 this.pendingcb = 0;
6374
6375 // emit prefinish if the only thing we're waiting for is _write cbs
6376 // This is relevant for synchronous Transform streams
6377 this.prefinished = false;
6378
6379 // True if the error was already emitted and should not be thrown again
6380 this.errorEmitted = false;
6381 }
6382
6383 function Writable(options) {
6384 var Duplex = require('./_stream_duplex');
6385
6386 // Writable ctor is applied to Duplexes, though they're not
6387 // instanceof Writable, they're instanceof Readable.
6388 if (!(this instanceof Writable) && !(this instanceof Duplex))
6389 return new Writable(options);
6390
6391 this._writableState = new WritableState(options, this);
6392
6393 // legacy.
6394 this.writable = true;
6395
6396 Stream.call(this);
6397 }
6398
6399 // Otherwise people can pipe Writable streams, which is just wrong.
6400 Writable.prototype.pipe = function() {
6401 this.emit('error', new Error('Cannot pipe. Not readable.'));
6402 };
6403
6404
6405 function writeAfterEnd(stream, state, cb) {
6406 var er = new Error('write after end');
6407 // TODO: defer error events consistently everywhere, not just the cb
6408 stream.emit('error', er);
6409 process.nextTick(function() {
6410 cb(er);
6411 });
6412 }
6413
6414 // If we get something that is not a buffer, string, null, or undefined,
6415 // and we're not in objectMode, then that's an error.
6416 // Otherwise stream chunks are all considered to be of length=1, and the
6417 // watermarks determine how many objects to keep in the buffer, rather than
6418 // how many bytes or characters.
6419 function validChunk(stream, state, chunk, cb) {
6420 var valid = true;
6421 if (!util.isBuffer(chunk) &&
6422 !util.isString(chunk) &&
6423 !util.isNullOrUndefined(chunk) &&
6424 !state.objectMode) {
6425 var er = new TypeError('Invalid non-string/buffer chunk');
6426 stream.emit('error', er);
6427 process.nextTick(function() {
6428 cb(er);
6429 });
6430 valid = false;
6431 }
6432 return valid;
6433 }
6434
6435 Writable.prototype.write = function(chunk, encoding, cb) {
6436 var state = this._writableState;
6437 var ret = false;
6438
6439 if (util.isFunction(encoding)) {
6440 cb = encoding;
6441 encoding = null;
6442 }
6443
6444 if (util.isBuffer(chunk))
6445 encoding = 'buffer';
6446 else if (!encoding)
6447 encoding = state.defaultEncoding;
6448
6449 if (!util.isFunction(cb))
6450 cb = function() {};
6451
6452 if (state.ended)
6453 writeAfterEnd(this, state, cb);
6454 else if (validChunk(this, state, chunk, cb)) {
6455 state.pendingcb++;
6456 ret = writeOrBuffer(this, state, chunk, encoding, cb);
6457 }
6458
6459 return ret;
6460 };
6461
6462 Writable.prototype.cork = function() {
6463 var state = this._writableState;
6464
6465 state.corked++;
6466 };
6467
6468 Writable.prototype.uncork = function() {
6469 var state = this._writableState;
6470
6471 if (state.corked) {
6472 state.corked--;
6473
6474 if (!state.writing &&
6475 !state.corked &&
6476 !state.finished &&
6477 !state.bufferProcessing &&
6478 state.buffer.length)
6479 clearBuffer(this, state);
6480 }
6481 };
6482
6483 function decodeChunk(state, chunk, encoding) {
6484 if (!state.objectMode &&
6485 state.decodeStrings !== false &&
6486 util.isString(chunk)) {
6487 chunk = new Buffer(chunk, encoding);
6488 }
6489 return chunk;
6490 }
6491
6492 // if we're already writing something, then just put this
6493 // in the queue, and wait our turn. Otherwise, call _write
6494 // If we return false, then we need a drain event, so set that flag.
6495 function writeOrBuffer(stream, state, chunk, encoding, cb) {
6496 chunk = decodeChunk(state, chunk, encoding);
6497 if (util.isBuffer(chunk))
6498 encoding = 'buffer';
6499 var len = state.objectMode ? 1 : chunk.length;
6500
6501 state.length += len;
6502
6503 var ret = state.length < state.highWaterMark;
6504 // we must ensure that previous needDrain will not be reset to false.
6505 if (!ret)
6506 state.needDrain = true;
6507
6508 if (state.writing || state.corked)
6509 state.buffer.push(new WriteReq(chunk, encoding, cb));
6510 else
6511 doWrite(stream, state, false, len, chunk, encoding, cb);
6512
6513 return ret;
6514 }
6515
6516 function doWrite(stream, state, writev, len, chunk, encoding, cb) {
6517 state.writelen = len;
6518 state.writecb = cb;
6519 state.writing = true;
6520 state.sync = true;
6521 if (writev)
6522 stream._writev(chunk, state.onwrite);
6523 else
6524 stream._write(chunk, encoding, state.onwrite);
6525 state.sync = false;
6526 }
6527
6528 function onwriteError(stream, state, sync, er, cb) {
6529 if (sync)
6530 process.nextTick(function() {
6531 state.pendingcb--;
6532 cb(er);
6533 });
6534 else {
6535 state.pendingcb--;
6536 cb(er);
6537 }
6538
6539 stream._writableState.errorEmitted = true;
6540 stream.emit('error', er);
6541 }
6542
6543 function onwriteStateUpdate(state) {
6544 state.writing = false;
6545 state.writecb = null;
6546 state.length -= state.writelen;
6547 state.writelen = 0;
6548 }
6549
6550 function onwrite(stream, er) {
6551 var state = stream._writableState;
6552 var sync = state.sync;
6553 var cb = state.writecb;
6554
6555 onwriteStateUpdate(state);
6556
6557 if (er)
6558 onwriteError(stream, state, sync, er, cb);
6559 else {
6560 // Check if we're actually ready to finish, but don't emit yet
6561 var finished = needFinish(stream, state);
6562
6563 if (!finished &&
6564 !state.corked &&
6565 !state.bufferProcessing &&
6566 state.buffer.length) {
6567 clearBuffer(stream, state);
6568 }
6569
6570 if (sync) {
6571 process.nextTick(function() {
6572 afterWrite(stream, state, finished, cb);
6573 });
6574 } else {
6575 afterWrite(stream, state, finished, cb);
6576 }
6577 }
6578 }
6579
6580 function afterWrite(stream, state, finished, cb) {
6581 if (!finished)
6582 onwriteDrain(stream, state);
6583 state.pendingcb--;
6584 cb();
6585 finishMaybe(stream, state);
6586 }
6587
6588 // Must force callback to be called on nextTick, so that we don't
6589 // emit 'drain' before the write() consumer gets the 'false' return
6590 // value, and has a chance to attach a 'drain' listener.
6591 function onwriteDrain(stream, state) {
6592 if (state.length === 0 && state.needDrain) {
6593 state.needDrain = false;
6594 stream.emit('drain');
6595 }
6596 }
6597
6598
6599 // if there's something in the buffer waiting, then process it
6600 function clearBuffer(stream, state) {
6601 state.bufferProcessing = true;
6602
6603 if (stream._writev && state.buffer.length > 1) {
6604 // Fast case, write everything using _writev()
6605 var cbs = [];
6606 for (var c = 0; c < state.buffer.length; c++)
6607 cbs.push(state.buffer[c].callback);
6608
6609 // count the one we are adding, as well.
6610 // TODO(isaacs) clean this up
6611 state.pendingcb++;
6612 doWrite(stream, state, true, state.length, state.buffer, '', function(err) {
6613 for (var i = 0; i < cbs.length; i++) {
6614 state.pendingcb--;
6615 cbs[i](err);
6616 }
6617 });
6618
6619 // Clear buffer
6620 state.buffer = [];
6621 } else {
6622 // Slow case, write chunks one-by-one
6623 for (var c = 0; c < state.buffer.length; c++) {
6624 var entry = state.buffer[c];
6625 var chunk = entry.chunk;
6626 var encoding = entry.encoding;
6627 var cb = entry.callback;
6628 var len = state.objectMode ? 1 : chunk.length;
6629
6630 doWrite(stream, state, false, len, chunk, encoding, cb);
6631
6632 // if we didn't call the onwrite immediately, then
6633 // it means that we need to wait until it does.
6634 // also, that means that the chunk and cb are currently
6635 // being processed, so move the buffer counter past them.
6636 if (state.writing) {
6637 c++;
6638 break;
6639 }
6640 }
6641
6642 if (c < state.buffer.length)
6643 state.buffer = state.buffer.slice(c);
6644 else
6645 state.buffer.length = 0;
6646 }
6647
6648 state.bufferProcessing = false;
6649 }
6650
6651 Writable.prototype._write = function(chunk, encoding, cb) {
6652 cb(new Error('not implemented'));
6653
6654 };
6655
6656 Writable.prototype._writev = null;
6657
6658 Writable.prototype.end = function(chunk, encoding, cb) {
6659 var state = this._writableState;
6660
6661 if (util.isFunction(chunk)) {
6662 cb = chunk;
6663 chunk = null;
6664 encoding = null;
6665 } else if (util.isFunction(encoding)) {
6666 cb = encoding;
6667 encoding = null;
6668 }
6669
6670 if (!util.isNullOrUndefined(chunk))
6671 this.write(chunk, encoding);
6672
6673 // .end() fully uncorks
6674 if (state.corked) {
6675 state.corked = 1;
6676 this.uncork();
6677 }
6678
6679 // ignore unnecessary end() calls.
6680 if (!state.ending && !state.finished)
6681 endWritable(this, state, cb);
6682 };
6683
6684
6685 function needFinish(stream, state) {
6686 return (state.ending &&
6687 state.length === 0 &&
6688 !state.finished &&
6689 !state.writing);
6690 }
6691
6692 function prefinish(stream, state) {
6693 if (!state.prefinished) {
6694 state.prefinished = true;
6695 stream.emit('prefinish');
6696 }
6697 }
6698
6699 function finishMaybe(stream, state) {
6700 var need = needFinish(stream, state);
6701 if (need) {
6702 if (state.pendingcb === 0) {
6703 prefinish(stream, state);
6704 state.finished = true;
6705 stream.emit('finish');
6706 } else
6707 prefinish(stream, state);
6708 }
6709 return need;
6710 }
6711
6712 function endWritable(stream, state, cb) {
6713 state.ending = true;
6714 finishMaybe(stream, state);
6715 if (cb) {
6716 if (state.finished)
6717 process.nextTick(cb);
6718 else
6719 stream.once('finish', cb);
6720 }
6721 state.ended = true;
6722 }
6723
6724 }).call(this,require('_process'))
6725 },{"./_stream_duplex":16,"_process":14,"buffer":7,"core-util-is":21,"inherits":12,"stream":26}],21:[function(require,module,exports){
6726 (function (Buffer){
6727 // Copyright Joyent, Inc. and other Node contributors.
6728 //
6729 // Permission is hereby granted, free of charge, to any person obtaining a
6730 // copy of this software and associated documentation files (the
6731 // "Software"), to deal in the Software without restriction, including
6732 // without limitation the rights to use, copy, modify, merge, publish,
6733 // distribute, sublicense, and/or sell copies of the Software, and to permit
6734 // persons to whom the Software is furnished to do so, subject to the
6735 // following conditions:
6736 //
6737 // The above copyright notice and this permission notice shall be included
6738 // in all copies or substantial portions of the Software.
6739 //
6740 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6741 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6742 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6743 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6744 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6745 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6746 // USE OR OTHER DEALINGS IN THE SOFTWARE.
6747
6748 // NOTE: These type checking functions intentionally don't use `instanceof`
6749 // because it is fragile and can be easily faked with `Object.create()`.
6750 function isArray(ar) {
6751 return Array.isArray(ar);
6752 }
6753 exports.isArray = isArray;
6754
6755 function isBoolean(arg) {
6756 return typeof arg === 'boolean';
6757 }
6758 exports.isBoolean = isBoolean;
6759
6760 function isNull(arg) {
6761 return arg === null;
6762 }
6763 exports.isNull = isNull;
6764
6765 function isNullOrUndefined(arg) {
6766 return arg == null;
6767 }
6768 exports.isNullOrUndefined = isNullOrUndefined;
6769
6770 function isNumber(arg) {
6771 return typeof arg === 'number';
6772 }
6773 exports.isNumber = isNumber;
6774
6775 function isString(arg) {
6776 return typeof arg === 'string';
6777 }
6778 exports.isString = isString;
6779
6780 function isSymbol(arg) {
6781 return typeof arg === 'symbol';
6782 }
6783 exports.isSymbol = isSymbol;
6784
6785 function isUndefined(arg) {
6786 return arg === void 0;
6787 }
6788 exports.isUndefined = isUndefined;
6789
6790 function isRegExp(re) {
6791 return isObject(re) && objectToString(re) === '[object RegExp]';
6792 }
6793 exports.isRegExp = isRegExp;
6794
6795 function isObject(arg) {
6796 return typeof arg === 'object' && arg !== null;
6797 }
6798 exports.isObject = isObject;
6799
6800 function isDate(d) {
6801 return isObject(d) && objectToString(d) === '[object Date]';
6802 }
6803 exports.isDate = isDate;
6804
6805 function isError(e) {
6806 return isObject(e) &&
6807 (objectToString(e) === '[object Error]' || e instanceof Error);
6808 }
6809 exports.isError = isError;
6810
6811 function isFunction(arg) {
6812 return typeof arg === 'function';
6813 }
6814 exports.isFunction = isFunction;
6815
6816 function isPrimitive(arg) {
6817 return arg === null ||
6818 typeof arg === 'boolean' ||
6819 typeof arg === 'number' ||
6820 typeof arg === 'string' ||
6821 typeof arg === 'symbol' || // ES6 symbol
6822 typeof arg === 'undefined';
6823 }
6824 exports.isPrimitive = isPrimitive;
6825
6826 function isBuffer(arg) {
6827 return Buffer.isBuffer(arg);
6828 }
6829 exports.isBuffer = isBuffer;
6830
6831 function objectToString(o) {
6832 return Object.prototype.toString.call(o);
6833 }
6834 }).call(this,require("buffer").Buffer)
6835 },{"buffer":7}],22:[function(require,module,exports){
6836 module.exports = require("./lib/_stream_passthrough.js")
6837
6838 },{"./lib/_stream_passthrough.js":17}],23:[function(require,module,exports){
6839 exports = module.exports = require('./lib/_stream_readable.js');
6840 exports.Stream = require('stream');
6841 exports.Readable = exports;
6842 exports.Writable = require('./lib/_stream_writable.js');
6843 exports.Duplex = require('./lib/_stream_duplex.js');
6844 exports.Transform = require('./lib/_stream_transform.js');
6845 exports.PassThrough = require('./lib/_stream_passthrough.js');
6846
6847 },{"./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){
6848 module.exports = require("./lib/_stream_transform.js")
6849
6850 },{"./lib/_stream_transform.js":19}],25:[function(require,module,exports){
6851 module.exports = require("./lib/_stream_writable.js")
6852
6853 },{"./lib/_stream_writable.js":20}],26:[function(require,module,exports){
6854 // Copyright Joyent, Inc. and other Node contributors.
6855 //
6856 // Permission is hereby granted, free of charge, to any person obtaining a
6857 // copy of this software and associated documentation files (the
6858 // "Software"), to deal in the Software without restriction, including
6859 // without limitation the rights to use, copy, modify, merge, publish,
6860 // distribute, sublicense, and/or sell copies of the Software, and to permit
6861 // persons to whom the Software is furnished to do so, subject to the
6862 // following conditions:
6863 //
6864 // The above copyright notice and this permission notice shall be included
6865 // in all copies or substantial portions of the Software.
6866 //
6867 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6868 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6869 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6870 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6871 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6872 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6873 // USE OR OTHER DEALINGS IN THE SOFTWARE.
6874
6875 module.exports = Stream;
6876
6877 var EE = require('events').EventEmitter;
6878 var inherits = require('inherits');
6879
6880 inherits(Stream, EE);
6881 Stream.Readable = require('readable-stream/readable.js');
6882 Stream.Writable = require('readable-stream/writable.js');
6883 Stream.Duplex = require('readable-stream/duplex.js');
6884 Stream.Transform = require('readable-stream/transform.js');
6885 Stream.PassThrough = require('readable-stream/passthrough.js');
6886
6887 // Backwards-compat with node 0.4.x
6888 Stream.Stream = Stream;
6889
6890
6891
6892 // old-style streams. Note that the pipe method (the only relevant
6893 // part of this class) is overridden in the Readable class.
6894
6895 function Stream() {
6896 EE.call(this);
6897 }
6898
6899 Stream.prototype.pipe = function(dest, options) {
6900 var source = this;
6901
6902 function ondata(chunk) {
6903 if (dest.writable) {
6904 if (false === dest.write(chunk) && source.pause) {
6905 source.pause();
6906 }
6907 }
6908 }
6909
6910 source.on('data', ondata);
6911
6912 function ondrain() {
6913 if (source.readable && source.resume) {
6914 source.resume();
6915 }
6916 }
6917
6918 dest.on('drain', ondrain);
6919
6920 // If the 'end' option is not supplied, dest.end() will be called when
6921 // source gets the 'end' or 'close' events. Only dest.end() once.
6922 if (!dest._isStdio && (!options || options.end !== false)) {
6923 source.on('end', onend);
6924 source.on('close', onclose);
6925 }
6926
6927 var didOnEnd = false;
6928 function onend() {
6929 if (didOnEnd) return;
6930 didOnEnd = true;
6931
6932 dest.end();
6933 }
6934
6935
6936 function onclose() {
6937 if (didOnEnd) return;
6938 didOnEnd = true;
6939
6940 if (typeof dest.destroy === 'function') dest.destroy();
6941 }
6942
6943 // don't leave dangling pipes when there are errors.
6944 function onerror(er) {
6945 cleanup();
6946 if (EE.listenerCount(this, 'error') === 0) {
6947 throw er; // Unhandled stream error in pipe.
6948 }
6949 }
6950
6951 source.on('error', onerror);
6952 dest.on('error', onerror);
6953
6954 // remove all the event listeners that were added.
6955 function cleanup() {
6956 source.removeListener('data', ondata);
6957 dest.removeListener('drain', ondrain);
6958
6959 source.removeListener('end', onend);
6960 source.removeListener('close', onclose);
6961
6962 source.removeListener('error', onerror);
6963 dest.removeListener('error', onerror);
6964
6965 source.removeListener('end', cleanup);
6966 source.removeListener('close', cleanup);
6967
6968 dest.removeListener('close', cleanup);
6969 }
6970
6971 source.on('end', cleanup);
6972 source.on('close', cleanup);
6973
6974 dest.on('close', cleanup);
6975
6976 dest.emit('pipe', source);
6977
6978 // Allow for unix-like usage: A.pipe(B).pipe(C)
6979 return dest;
6980 };
6981
6982 },{"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){
6983 // Copyright Joyent, Inc. and other Node contributors.
6984 //
6985 // Permission is hereby granted, free of charge, to any person obtaining a
6986 // copy of this software and associated documentation files (the
6987 // "Software"), to deal in the Software without restriction, including
6988 // without limitation the rights to use, copy, modify, merge, publish,
6989 // distribute, sublicense, and/or sell copies of the Software, and to permit
6990 // persons to whom the Software is furnished to do so, subject to the
6991 // following conditions:
6992 //
6993 // The above copyright notice and this permission notice shall be included
6994 // in all copies or substantial portions of the Software.
6995 //
6996 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6997 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6998 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6999 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
7000 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
7001 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
7002 // USE OR OTHER DEALINGS IN THE SOFTWARE.
7003
7004 var Buffer = require('buffer').Buffer;
7005
7006 var isBufferEncoding = Buffer.isEncoding
7007 || function(encoding) {
7008 switch (encoding && encoding.toLowerCase()) {
7009 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;
7010 default: return false;
7011 }
7012 }
7013
7014
7015 function assertEncoding(encoding) {
7016 if (encoding && !isBufferEncoding(encoding)) {
7017 throw new Error('Unknown encoding: ' + encoding);
7018 }
7019 }
7020
7021 // StringDecoder provides an interface for efficiently splitting a series of
7022 // buffers into a series of JS strings without breaking apart multi-byte
7023 // characters. CESU-8 is handled as part of the UTF-8 encoding.
7024 //
7025 // @TODO Handling all encodings inside a single object makes it very difficult
7026 // to reason about this code, so it should be split up in the future.
7027 // @TODO There should be a utf8-strict encoding that rejects invalid UTF-8 code
7028 // points as used by CESU-8.
7029 var StringDecoder = exports.StringDecoder = function(encoding) {
7030 this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, '');
7031 assertEncoding(encoding);
7032 switch (this.encoding) {
7033 case 'utf8':
7034 // CESU-8 represents each of Surrogate Pair by 3-bytes
7035 this.surrogateSize = 3;
7036 break;
7037 case 'ucs2':
7038 case 'utf16le':
7039 // UTF-16 represents each of Surrogate Pair by 2-bytes
7040 this.surrogateSize = 2;
7041 this.detectIncompleteChar = utf16DetectIncompleteChar;
7042 break;
7043 case 'base64':
7044 // Base-64 stores 3 bytes in 4 chars, and pads the remainder.
7045 this.surrogateSize = 3;
7046 this.detectIncompleteChar = base64DetectIncompleteChar;
7047 break;
7048 default:
7049 this.write = passThroughWrite;
7050 return;
7051 }
7052
7053 // Enough space to store all bytes of a single character. UTF-8 needs 4
7054 // bytes, but CESU-8 may require up to 6 (3 bytes per surrogate).
7055 this.charBuffer = new Buffer(6);
7056 // Number of bytes received for the current incomplete multi-byte character.
7057 this.charReceived = 0;
7058 // Number of bytes expected for the current incomplete multi-byte character.
7059 this.charLength = 0;
7060 };
7061
7062
7063 // write decodes the given buffer and returns it as JS string that is
7064 // guaranteed to not contain any partial multi-byte characters. Any partial
7065 // character found at the end of the buffer is buffered up, and will be
7066 // returned when calling write again with the remaining bytes.
7067 //
7068 // Note: Converting a Buffer containing an orphan surrogate to a String
7069 // currently works, but converting a String to a Buffer (via `new Buffer`, or
7070 // Buffer#write) will replace incomplete surrogates with the unicode
7071 // replacement character. See https://codereview.chromium.org/121173009/ .
7072 StringDecoder.prototype.write = function(buffer) {
7073 var charStr = '';
7074 // if our last write ended with an incomplete multibyte character
7075 while (this.charLength) {
7076 // determine how many remaining bytes this buffer has to offer for this char
7077 var available = (buffer.length >= this.charLength - this.charReceived) ?
7078 this.charLength - this.charReceived :
7079 buffer.length;
7080
7081 // add the new bytes to the char buffer
7082 buffer.copy(this.charBuffer, this.charReceived, 0, available);
7083 this.charReceived += available;
7084
7085 if (this.charReceived < this.charLength) {
7086 // still not enough chars in this buffer? wait for more ...
7087 return '';
7088 }
7089
7090 // remove bytes belonging to the current character from the buffer
7091 buffer = buffer.slice(available, buffer.length);
7092
7093 // get the character that was split
7094 charStr = this.charBuffer.slice(0, this.charLength).toString(this.encoding);
7095
7096 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
7097 var charCode = charStr.charCodeAt(charStr.length - 1);
7098 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
7099 this.charLength += this.surrogateSize;
7100 charStr = '';
7101 continue;
7102 }
7103 this.charReceived = this.charLength = 0;
7104
7105 // if there are no more bytes in this buffer, just emit our char
7106 if (buffer.length === 0) {
7107 return charStr;
7108 }
7109 break;
7110 }
7111
7112 // determine and set charLength / charReceived
7113 this.detectIncompleteChar(buffer);
7114
7115 var end = buffer.length;
7116 if (this.charLength) {
7117 // buffer the incomplete character bytes we got
7118 buffer.copy(this.charBuffer, 0, buffer.length - this.charReceived, end);
7119 end -= this.charReceived;
7120 }
7121
7122 charStr += buffer.toString(this.encoding, 0, end);
7123
7124 var end = charStr.length - 1;
7125 var charCode = charStr.charCodeAt(end);
7126 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
7127 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
7128 var size = this.surrogateSize;
7129 this.charLength += size;
7130 this.charReceived += size;
7131 this.charBuffer.copy(this.charBuffer, size, 0, size);
7132 buffer.copy(this.charBuffer, 0, 0, size);
7133 return charStr.substring(0, end);
7134 }
7135
7136 // or just emit the charStr
7137 return charStr;
7138 };
7139
7140 // detectIncompleteChar determines if there is an incomplete UTF-8 character at
7141 // the end of the given buffer. If so, it sets this.charLength to the byte
7142 // length that character, and sets this.charReceived to the number of bytes
7143 // that are available for this character.
7144 StringDecoder.prototype.detectIncompleteChar = function(buffer) {
7145 // determine how many bytes we have to check at the end of this buffer
7146 var i = (buffer.length >= 3) ? 3 : buffer.length;
7147
7148 // Figure out if one of the last i bytes of our buffer announces an
7149 // incomplete char.
7150 for (; i > 0; i--) {
7151 var c = buffer[buffer.length - i];
7152
7153 // See http://en.wikipedia.org/wiki/UTF-8#Description
7154
7155 // 110XXXXX
7156 if (i == 1 && c >> 5 == 0x06) {
7157 this.charLength = 2;
7158 break;
7159 }
7160
7161 // 1110XXXX
7162 if (i <= 2 && c >> 4 == 0x0E) {
7163 this.charLength = 3;
7164 break;
7165 }
7166
7167 // 11110XXX
7168 if (i <= 3 && c >> 3 == 0x1E) {
7169 this.charLength = 4;
7170 break;
7171 }
7172 }
7173 this.charReceived = i;
7174 };
7175
7176 StringDecoder.prototype.end = function(buffer) {
7177 var res = '';
7178 if (buffer && buffer.length)
7179 res = this.write(buffer);
7180
7181 if (this.charReceived) {
7182 var cr = this.charReceived;
7183 var buf = this.charBuffer;
7184 var enc = this.encoding;
7185 res += buf.slice(0, cr).toString(enc);
7186 }
7187
7188 return res;
7189 };
7190
7191 function passThroughWrite(buffer) {
7192 return buffer.toString(this.encoding);
7193 }
7194
7195 function utf16DetectIncompleteChar(buffer) {
7196 this.charReceived = buffer.length % 2;
7197 this.charLength = this.charReceived ? 2 : 0;
7198 }
7199
7200 function base64DetectIncompleteChar(buffer) {
7201 this.charReceived = buffer.length % 3;
7202 this.charLength = this.charReceived ? 3 : 0;
7203 }
7204
7205 },{"buffer":7}],28:[function(require,module,exports){
7206 module.exports = function isBuffer(arg) {
7207 return arg && typeof arg === 'object'
7208 && typeof arg.copy === 'function'
7209 && typeof arg.fill === 'function'
7210 && typeof arg.readUInt8 === 'function';
7211 }
7212 },{}],29:[function(require,module,exports){
7213 (function (process,global){
7214 // Copyright Joyent, Inc. and other Node contributors.
7215 //
7216 // Permission is hereby granted, free of charge, to any person obtaining a
7217 // copy of this software and associated documentation files (the
7218 // "Software"), to deal in the Software without restriction, including
7219 // without limitation the rights to use, copy, modify, merge, publish,
7220 // distribute, sublicense, and/or sell copies of the Software, and to permit
7221 // persons to whom the Software is furnished to do so, subject to the
7222 // following conditions:
7223 //
7224 // The above copyright notice and this permission notice shall be included
7225 // in all copies or substantial portions of the Software.
7226 //
7227 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
7228 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
7229 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
7230 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
7231 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
7232 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
7233 // USE OR OTHER DEALINGS IN THE SOFTWARE.
7234
7235 var formatRegExp = /%[sdj%]/g;
7236 exports.format = function(f) {
7237 if (!isString(f)) {
7238 var objects = [];
7239 for (var i = 0; i < arguments.length; i++) {
7240 objects.push(inspect(arguments[i]));
7241 }
7242 return objects.join(' ');
7243 }
7244
7245 var i = 1;
7246 var args = arguments;
7247 var len = args.length;
7248 var str = String(f).replace(formatRegExp, function(x) {
7249 if (x === '%%') return '%';
7250 if (i >= len) return x;
7251 switch (x) {
7252 case '%s': return String(args[i++]);
7253 case '%d': return Number(args[i++]);
7254 case '%j':
7255 try {
7256 return JSON.stringify(args[i++]);
7257 } catch (_) {
7258 return '[Circular]';
7259 }
7260 default:
7261 return x;
7262 }
7263 });
7264 for (var x = args[i]; i < len; x = args[++i]) {
7265 if (isNull(x) || !isObject(x)) {
7266 str += ' ' + x;
7267 } else {
7268 str += ' ' + inspect(x);
7269 }
7270 }
7271 return str;
7272 };
7273
7274
7275 // Mark that a method should not be used.
7276 // Returns a modified function which warns once by default.
7277 // If --no-deprecation is set, then it is a no-op.
7278 exports.deprecate = function(fn, msg) {
7279 // Allow for deprecating things in the process of starting up.
7280 if (isUndefined(global.process)) {
7281 return function() {
7282 return exports.deprecate(fn, msg).apply(this, arguments);
7283 };
7284 }
7285
7286 if (process.noDeprecation === true) {
7287 return fn;
7288 }
7289
7290 var warned = false;
7291 function deprecated() {
7292 if (!warned) {
7293 if (process.throwDeprecation) {
7294 throw new Error(msg);
7295 } else if (process.traceDeprecation) {
7296 console.trace(msg);
7297 } else {
7298 console.error(msg);
7299 }
7300 warned = true;
7301 }
7302 return fn.apply(this, arguments);
7303 }
7304
7305 return deprecated;
7306 };
7307
7308
7309 var debugs = {};
7310 var debugEnviron;
7311 exports.debuglog = function(set) {
7312 if (isUndefined(debugEnviron))
7313 debugEnviron = process.env.NODE_DEBUG || '';
7314 set = set.toUpperCase();
7315 if (!debugs[set]) {
7316 if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
7317 var pid = process.pid;
7318 debugs[set] = function() {
7319 var msg = exports.format.apply(exports, arguments);
7320 console.error('%s %d: %s', set, pid, msg);
7321 };
7322 } else {
7323 debugs[set] = function() {};
7324 }
7325 }
7326 return debugs[set];
7327 };
7328
7329
7330 /**
7331 * Echos the value of a value. Trys to print the value out
7332 * in the best way possible given the different types.
7333 *
7334 * @param {Object} obj The object to print out.
7335 * @param {Object} opts Optional options object that alters the output.
7336 */
7337 /* legacy: obj, showHidden, depth, colors*/
7338 function inspect(obj, opts) {
7339 // default options
7340 var ctx = {
7341 seen: [],
7342 stylize: stylizeNoColor
7343 };
7344 // legacy...
7345 if (arguments.length >= 3) ctx.depth = arguments[2];
7346 if (arguments.length >= 4) ctx.colors = arguments[3];
7347 if (isBoolean(opts)) {
7348 // legacy...
7349 ctx.showHidden = opts;
7350 } else if (opts) {
7351 // got an "options" object
7352 exports._extend(ctx, opts);
7353 }
7354 // set default options
7355 if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
7356 if (isUndefined(ctx.depth)) ctx.depth = 2;
7357 if (isUndefined(ctx.colors)) ctx.colors = false;
7358 if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
7359 if (ctx.colors) ctx.stylize = stylizeWithColor;
7360 return formatValue(ctx, obj, ctx.depth);
7361 }
7362 exports.inspect = inspect;
7363
7364
7365 // http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
7366 inspect.colors = {
7367 'bold' : [1, 22],
7368 'italic' : [3, 23],
7369 'underline' : [4, 24],
7370 'inverse' : [7, 27],
7371 'white' : [37, 39],
7372 'grey' : [90, 39],
7373 'black' : [30, 39],
7374 'blue' : [34, 39],
7375 'cyan' : [36, 39],
7376 'green' : [32, 39],
7377 'magenta' : [35, 39],
7378 'red' : [31, 39],
7379 'yellow' : [33, 39]
7380 };
7381
7382 // Don't use 'blue' not visible on cmd.exe
7383 inspect.styles = {
7384 'special': 'cyan',
7385 'number': 'yellow',
7386 'boolean': 'yellow',
7387 'undefined': 'grey',
7388 'null': 'bold',
7389 'string': 'green',
7390 'date': 'magenta',
7391 // "name": intentionally not styling
7392 'regexp': 'red'
7393 };
7394
7395
7396 function stylizeWithColor(str, styleType) {
7397 var style = inspect.styles[styleType];
7398
7399 if (style) {
7400 return '\u001b[' + inspect.colors[style][0] + 'm' + str +
7401 '\u001b[' + inspect.colors[style][1] + 'm';
7402 } else {
7403 return str;
7404 }
7405 }
7406
7407
7408 function stylizeNoColor(str, styleType) {
7409 return str;
7410 }
7411
7412
7413 function arrayToHash(array) {
7414 var hash = {};
7415
7416 array.forEach(function(val, idx) {
7417 hash[val] = true;
7418 });
7419
7420 return hash;
7421 }
7422
7423
7424 function formatValue(ctx, value, recurseTimes) {
7425 // Provide a hook for user-specified inspect functions.
7426 // Check that value is an object with an inspect function on it
7427 if (ctx.customInspect &&
7428 value &&
7429 isFunction(value.inspect) &&
7430 // Filter out the util module, it's inspect function is special
7431 value.inspect !== exports.inspect &&
7432 // Also filter out any prototype objects using the circular check.
7433 !(value.constructor && value.constructor.prototype === value)) {
7434 var ret = value.inspect(recurseTimes, ctx);
7435 if (!isString(ret)) {
7436 ret = formatValue(ctx, ret, recurseTimes);
7437 }
7438 return ret;
7439 }
7440
7441 // Primitive types cannot have properties
7442 var primitive = formatPrimitive(ctx, value);
7443 if (primitive) {
7444 return primitive;
7445 }
7446
7447 // Look up the keys of the object.
7448 var keys = Object.keys(value);
7449 var visibleKeys = arrayToHash(keys);
7450
7451 if (ctx.showHidden) {
7452 keys = Object.getOwnPropertyNames(value);
7453 }
7454
7455 // IE doesn't make error fields non-enumerable
7456 // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx
7457 if (isError(value)
7458 && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {
7459 return formatError(value);
7460 }
7461
7462 // Some type of object without properties can be shortcutted.
7463 if (keys.length === 0) {
7464 if (isFunction(value)) {
7465 var name = value.name ? ': ' + value.name : '';
7466 return ctx.stylize('[Function' + name + ']', 'special');
7467 }
7468 if (isRegExp(value)) {
7469 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
7470 }
7471 if (isDate(value)) {
7472 return ctx.stylize(Date.prototype.toString.call(value), 'date');
7473 }
7474 if (isError(value)) {
7475 return formatError(value);
7476 }
7477 }
7478
7479 var base = '', array = false, braces = ['{', '}'];
7480
7481 // Make Array say that they are Array
7482 if (isArray(value)) {
7483 array = true;
7484 braces = ['[', ']'];
7485 }
7486
7487 // Make functions say that they are functions
7488 if (isFunction(value)) {
7489 var n = value.name ? ': ' + value.name : '';
7490 base = ' [Function' + n + ']';
7491 }
7492
7493 // Make RegExps say that they are RegExps
7494 if (isRegExp(value)) {
7495 base = ' ' + RegExp.prototype.toString.call(value);
7496 }
7497
7498 // Make dates with properties first say the date
7499 if (isDate(value)) {
7500 base = ' ' + Date.prototype.toUTCString.call(value);
7501 }
7502
7503 // Make error with message first say the error
7504 if (isError(value)) {
7505 base = ' ' + formatError(value);
7506 }
7507
7508 if (keys.length === 0 && (!array || value.length == 0)) {
7509 return braces[0] + base + braces[1];
7510 }
7511
7512 if (recurseTimes < 0) {
7513 if (isRegExp(value)) {
7514 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
7515 } else {
7516 return ctx.stylize('[Object]', 'special');
7517 }
7518 }
7519
7520 ctx.seen.push(value);
7521
7522 var output;
7523 if (array) {
7524 output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
7525 } else {
7526 output = keys.map(function(key) {
7527 return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
7528 });
7529 }
7530
7531 ctx.seen.pop();
7532
7533 return reduceToSingleString(output, base, braces);
7534 }
7535
7536
7537 function formatPrimitive(ctx, value) {
7538 if (isUndefined(value))
7539 return ctx.stylize('undefined', 'undefined');
7540 if (isString(value)) {
7541 var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
7542 .replace(/'/g, "\\'")
7543 .replace(/\\"/g, '"') + '\'';
7544 return ctx.stylize(simple, 'string');
7545 }
7546 if (isNumber(value))
7547 return ctx.stylize('' + value, 'number');
7548 if (isBoolean(value))
7549 return ctx.stylize('' + value, 'boolean');
7550 // For some reason typeof null is "object", so special case here.
7551 if (isNull(value))
7552 return ctx.stylize('null', 'null');
7553 }
7554
7555
7556 function formatError(value) {
7557 return '[' + Error.prototype.toString.call(value) + ']';
7558 }
7559
7560
7561 function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
7562 var output = [];
7563 for (var i = 0, l = value.length; i < l; ++i) {
7564 if (hasOwnProperty(value, String(i))) {
7565 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
7566 String(i), true));
7567 } else {
7568 output.push('');
7569 }
7570 }
7571 keys.forEach(function(key) {
7572 if (!key.match(/^\d+$/)) {
7573 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
7574 key, true));
7575 }
7576 });
7577 return output;
7578 }
7579
7580
7581 function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
7582 var name, str, desc;
7583 desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
7584 if (desc.get) {
7585 if (desc.set) {
7586 str = ctx.stylize('[Getter/Setter]', 'special');
7587 } else {
7588 str = ctx.stylize('[Getter]', 'special');
7589 }
7590 } else {
7591 if (desc.set) {
7592 str = ctx.stylize('[Setter]', 'special');
7593 }
7594 }
7595 if (!hasOwnProperty(visibleKeys, key)) {
7596 name = '[' + key + ']';
7597 }
7598 if (!str) {
7599 if (ctx.seen.indexOf(desc.value) < 0) {
7600 if (isNull(recurseTimes)) {
7601 str = formatValue(ctx, desc.value, null);
7602 } else {
7603 str = formatValue(ctx, desc.value, recurseTimes - 1);
7604 }
7605 if (str.indexOf('\n') > -1) {
7606 if (array) {
7607 str = str.split('\n').map(function(line) {
7608 return ' ' + line;
7609 }).join('\n').substr(2);
7610 } else {
7611 str = '\n' + str.split('\n').map(function(line) {
7612 return ' ' + line;
7613 }).join('\n');
7614 }
7615 }
7616 } else {
7617 str = ctx.stylize('[Circular]', 'special');
7618 }
7619 }
7620 if (isUndefined(name)) {
7621 if (array && key.match(/^\d+$/)) {
7622 return str;
7623 }
7624 name = JSON.stringify('' + key);
7625 if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
7626 name = name.substr(1, name.length - 2);
7627 name = ctx.stylize(name, 'name');
7628 } else {
7629 name = name.replace(/'/g, "\\'")
7630 .replace(/\\"/g, '"')
7631 .replace(/(^"|"$)/g, "'");
7632 name = ctx.stylize(name, 'string');
7633 }
7634 }
7635
7636 return name + ': ' + str;
7637 }
7638
7639
7640 function reduceToSingleString(output, base, braces) {
7641 var numLinesEst = 0;
7642 var length = output.reduce(function(prev, cur) {
7643 numLinesEst++;
7644 if (cur.indexOf('\n') >= 0) numLinesEst++;
7645 return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;
7646 }, 0);
7647
7648 if (length > 60) {
7649 return braces[0] +
7650 (base === '' ? '' : base + '\n ') +
7651 ' ' +
7652 output.join(',\n ') +
7653 ' ' +
7654 braces[1];
7655 }
7656
7657 return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
7658 }
7659
7660
7661 // NOTE: These type checking functions intentionally don't use `instanceof`
7662 // because it is fragile and can be easily faked with `Object.create()`.
7663 function isArray(ar) {
7664 return Array.isArray(ar);
7665 }
7666 exports.isArray = isArray;
7667
7668 function isBoolean(arg) {
7669 return typeof arg === 'boolean';
7670 }
7671 exports.isBoolean = isBoolean;
7672
7673 function isNull(arg) {
7674 return arg === null;
7675 }
7676 exports.isNull = isNull;
7677
7678 function isNullOrUndefined(arg) {
7679 return arg == null;
7680 }
7681 exports.isNullOrUndefined = isNullOrUndefined;
7682
7683 function isNumber(arg) {
7684 return typeof arg === 'number';
7685 }
7686 exports.isNumber = isNumber;
7687
7688 function isString(arg) {
7689 return typeof arg === 'string';
7690 }
7691 exports.isString = isString;
7692
7693 function isSymbol(arg) {
7694 return typeof arg === 'symbol';
7695 }
7696 exports.isSymbol = isSymbol;
7697
7698 function isUndefined(arg) {
7699 return arg === void 0;
7700 }
7701 exports.isUndefined = isUndefined;
7702
7703 function isRegExp(re) {
7704 return isObject(re) && objectToString(re) === '[object RegExp]';
7705 }
7706 exports.isRegExp = isRegExp;
7707
7708 function isObject(arg) {
7709 return typeof arg === 'object' && arg !== null;
7710 }
7711 exports.isObject = isObject;
7712
7713 function isDate(d) {
7714 return isObject(d) && objectToString(d) === '[object Date]';
7715 }
7716 exports.isDate = isDate;
7717
7718 function isError(e) {
7719 return isObject(e) &&
7720 (objectToString(e) === '[object Error]' || e instanceof Error);
7721 }
7722 exports.isError = isError;
7723
7724 function isFunction(arg) {
7725 return typeof arg === 'function';
7726 }
7727 exports.isFunction = isFunction;
7728
7729 function isPrimitive(arg) {
7730 return arg === null ||
7731 typeof arg === 'boolean' ||
7732 typeof arg === 'number' ||
7733 typeof arg === 'string' ||
7734 typeof arg === 'symbol' || // ES6 symbol
7735 typeof arg === 'undefined';
7736 }
7737 exports.isPrimitive = isPrimitive;
7738
7739 exports.isBuffer = require('./support/isBuffer');
7740
7741 function objectToString(o) {
7742 return Object.prototype.toString.call(o);
7743 }
7744
7745
7746 function pad(n) {
7747 return n < 10 ? '0' + n.toString(10) : n.toString(10);
7748 }
7749
7750
7751 var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
7752 'Oct', 'Nov', 'Dec'];
7753
7754 // 26 Feb 16:19:34
7755 function timestamp() {
7756 var d = new Date();
7757 var time = [pad(d.getHours()),
7758 pad(d.getMinutes()),
7759 pad(d.getSeconds())].join(':');
7760 return [d.getDate(), months[d.getMonth()], time].join(' ');
7761 }
7762
7763
7764 // log is just a thin wrapper to console.log that prepends a timestamp
7765 exports.log = function() {
7766 console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
7767 };
7768
7769
7770 /**
7771 * Inherit the prototype methods from one constructor into another.
7772 *
7773 * The Function.prototype.inherits from lang.js rewritten as a standalone
7774 * function (not on Function.prototype). NOTE: If this file is to be loaded
7775 * during bootstrapping this function needs to be rewritten using some native
7776 * functions as prototype setup using normal JavaScript does not work as
7777 * expected during bootstrapping (see mirror.js in r114903).
7778 *
7779 * @param {function} ctor Constructor function which needs to inherit the
7780 * prototype.
7781 * @param {function} superCtor Constructor function to inherit prototype from.
7782 */
7783 exports.inherits = require('inherits');
7784
7785 exports._extend = function(origin, add) {
7786 // Don't do anything if add isn't an object
7787 if (!add || !isObject(add)) return origin;
7788
7789 var keys = Object.keys(add);
7790 var i = keys.length;
7791 while (i--) {
7792 origin[keys[i]] = add[keys[i]];
7793 }
7794 return origin;
7795 };
7796
7797 function hasOwnProperty(obj, prop) {
7798 return Object.prototype.hasOwnProperty.call(obj, prop);
7799 }
7800
7801 }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
7802 },{"./support/isBuffer":28,"_process":14,"inherits":12}],30:[function(require,module,exports){
7803 // Base58 encoding/decoding
7804 // Originally written by Mike Hearn for BitcoinJ
7805 // Copyright (c) 2011 Google Inc
7806 // Ported to JavaScript by Stefan Thomas
7807 // Merged Buffer refactorings from base58-native by Stephen Pair
7808 // Copyright (c) 2013 BitPay Inc
7809
7810 var ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
7811 var ALPHABET_MAP = {}
7812 for(var i = 0; i < ALPHABET.length; i++) {
7813 ALPHABET_MAP[ALPHABET.charAt(i)] = i
7814 }
7815 var BASE = 58
7816
7817 function encode(buffer) {
7818 if (buffer.length === 0) return ''
7819
7820 var i, j, digits = [0]
7821 for (i = 0; i < buffer.length; i++) {
7822 for (j = 0; j < digits.length; j++) digits[j] <<= 8
7823
7824 digits[0] += buffer[i]
7825
7826 var carry = 0
7827 for (j = 0; j < digits.length; ++j) {
7828 digits[j] += carry
7829
7830 carry = (digits[j] / BASE) | 0
7831 digits[j] %= BASE
7832 }
7833
7834 while (carry) {
7835 digits.push(carry % BASE)
7836
7837 carry = (carry / BASE) | 0
7838 }
7839 }
7840
7841 // deal with leading zeros
7842 for (i = 0; buffer[i] === 0 && i < buffer.length - 1; i++) digits.push(0)
7843
7844 // convert digits to a string
7845 var stringOutput = ""
7846 for (var i = digits.length - 1; i >= 0; i--) {
7847 stringOutput = stringOutput + ALPHABET[digits[i]]
7848 }
7849 return stringOutput
7850 }
7851
7852 function decode(string) {
7853 if (string.length === 0) return []
7854
7855 var i, j, bytes = [0]
7856 for (i = 0; i < string.length; i++) {
7857 var c = string[i]
7858 if (!(c in ALPHABET_MAP)) throw new Error('Non-base58 character')
7859
7860 for (j = 0; j < bytes.length; j++) bytes[j] *= BASE
7861 bytes[0] += ALPHABET_MAP[c]
7862
7863 var carry = 0
7864 for (j = 0; j < bytes.length; ++j) {
7865 bytes[j] += carry
7866
7867 carry = bytes[j] >> 8
7868 bytes[j] &= 0xff
7869 }
7870
7871 while (carry) {
7872 bytes.push(carry & 0xff)
7873
7874 carry >>= 8
7875 }
7876 }
7877
7878 // deal with leading zeros
7879 for (i = 0; string[i] === '1' && i < string.length - 1; i++) bytes.push(0)
7880
7881 return bytes.reverse()
7882 }
7883
7884 module.exports = {
7885 encode: encode,
7886 decode: decode
7887 }
7888
7889 },{}],31:[function(require,module,exports){
7890 (function (Buffer){
7891 'use strict'
7892
7893 var base58 = require('bs58')
7894 var createHash = require('create-hash')
7895
7896 // SHA256(SHA256(buffer))
7897 function sha256x2 (buffer) {
7898 buffer = createHash('sha256').update(buffer).digest()
7899 return createHash('sha256').update(buffer).digest()
7900 }
7901
7902 // Encode a buffer as a base58-check encoded string
7903 function encode (payload) {
7904 var checksum = sha256x2(payload).slice(0, 4)
7905
7906 return base58.encode(Buffer.concat([
7907 payload,
7908 checksum
7909 ]))
7910 }
7911
7912 // Decode a base58-check encoded string to a buffer
7913 function decode (string) {
7914 var buffer = new Buffer(base58.decode(string))
7915
7916 var payload = buffer.slice(0, -4)
7917 var checksum = buffer.slice(-4)
7918 var newChecksum = sha256x2(payload).slice(0, 4)
7919
7920 for (var i = 0; i < newChecksum.length; ++i) {
7921 if (newChecksum[i] === checksum[i]) continue
7922
7923 throw new Error('Invalid checksum')
7924 }
7925
7926 return payload
7927 }
7928
7929 module.exports = {
7930 encode: encode,
7931 decode: decode
7932 }
7933
7934 }).call(this,require("buffer").Buffer)
7935 },{"bs58":30,"buffer":7,"create-hash":32}],32:[function(require,module,exports){
7936 (function (Buffer){
7937 'use strict';
7938 var inherits = require('inherits')
7939 var md5 = require('./md5')
7940 var rmd160 = require('ripemd160')
7941 var sha = require('sha.js')
7942
7943 var Transform = require('stream').Transform
7944
7945 function HashNoConstructor(hash) {
7946 Transform.call(this)
7947
7948 this._hash = hash
7949 this.buffers = []
7950 }
7951
7952 inherits(HashNoConstructor, Transform)
7953
7954 HashNoConstructor.prototype._transform = function (data, _, next) {
7955 this.buffers.push(data)
7956
7957 next()
7958 }
7959
7960 HashNoConstructor.prototype._flush = function (next) {
7961 this.push(this.digest())
7962 next()
7963 }
7964
7965 HashNoConstructor.prototype.update = function (data, enc) {
7966 if (typeof data === 'string') {
7967 data = new Buffer(data, enc)
7968 }
7969
7970 this.buffers.push(data)
7971 return this
7972 }
7973
7974 HashNoConstructor.prototype.digest = function (enc) {
7975 var buf = Buffer.concat(this.buffers)
7976 var r = this._hash(buf)
7977 this.buffers = null
7978
7979 return enc ? r.toString(enc) : r
7980 }
7981
7982 function Hash(hash) {
7983 Transform.call(this)
7984
7985 this._hash = hash
7986 }
7987
7988 inherits(Hash, Transform)
7989
7990 Hash.prototype._transform = function (data, enc, next) {
7991 if (enc) data = new Buffer(data, enc)
7992
7993 this._hash.update(data)
7994
7995 next()
7996 }
7997
7998 Hash.prototype._flush = function (next) {
7999 this.push(this._hash.digest())
8000 this._hash = null
8001
8002 next()
8003 }
8004
8005 Hash.prototype.update = function (data, enc) {
8006 if (typeof data === 'string') {
8007 data = new Buffer(data, enc)
8008 }
8009
8010 this._hash.update(data)
8011 return this
8012 }
8013
8014 Hash.prototype.digest = function (enc) {
8015 var outData = this._hash.digest()
8016
8017 return enc ? outData.toString(enc) : outData
8018 }
8019
8020 module.exports = function createHash (alg) {
8021 if ('md5' === alg) return new HashNoConstructor(md5)
8022 if ('rmd160' === alg) return new HashNoConstructor(rmd160)
8023
8024 return new Hash(sha(alg))
8025 }
8026
8027 }).call(this,require("buffer").Buffer)
8028 },{"./md5":34,"buffer":7,"inherits":35,"ripemd160":36,"sha.js":38,"stream":26}],33:[function(require,module,exports){
8029 (function (Buffer){
8030 'use strict';
8031 var intSize = 4;
8032 var zeroBuffer = new Buffer(intSize); zeroBuffer.fill(0);
8033 var chrsz = 8;
8034
8035 function toArray(buf, bigEndian) {
8036 if ((buf.length % intSize) !== 0) {
8037 var len = buf.length + (intSize - (buf.length % intSize));
8038 buf = Buffer.concat([buf, zeroBuffer], len);
8039 }
8040
8041 var arr = [];
8042 var fn = bigEndian ? buf.readInt32BE : buf.readInt32LE;
8043 for (var i = 0; i < buf.length; i += intSize) {
8044 arr.push(fn.call(buf, i));
8045 }
8046 return arr;
8047 }
8048
8049 function toBuffer(arr, size, bigEndian) {
8050 var buf = new Buffer(size);
8051 var fn = bigEndian ? buf.writeInt32BE : buf.writeInt32LE;
8052 for (var i = 0; i < arr.length; i++) {
8053 fn.call(buf, arr[i], i * 4, true);
8054 }
8055 return buf;
8056 }
8057
8058 function hash(buf, fn, hashSize, bigEndian) {
8059 if (!Buffer.isBuffer(buf)) buf = new Buffer(buf);
8060 var arr = fn(toArray(buf, bigEndian), buf.length * chrsz);
8061 return toBuffer(arr, hashSize, bigEndian);
8062 }
8063 exports.hash = hash;
8064 }).call(this,require("buffer").Buffer)
8065 },{"buffer":7}],34:[function(require,module,exports){
8066 'use strict';
8067 /*
8068 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
8069 * Digest Algorithm, as defined in RFC 1321.
8070 * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
8071 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8072 * Distributed under the BSD License
8073 * See http://pajhome.org.uk/crypt/md5 for more info.
8074 */
8075
8076 var helpers = require('./helpers');
8077
8078 /*
8079 * Calculate the MD5 of an array of little-endian words, and a bit length
8080 */
8081 function core_md5(x, len)
8082 {
8083 /* append padding */
8084 x[len >> 5] |= 0x80 << ((len) % 32);
8085 x[(((len + 64) >>> 9) << 4) + 14] = len;
8086
8087 var a = 1732584193;
8088 var b = -271733879;
8089 var c = -1732584194;
8090 var d = 271733878;
8091
8092 for(var i = 0; i < x.length; i += 16)
8093 {
8094 var olda = a;
8095 var oldb = b;
8096 var oldc = c;
8097 var oldd = d;
8098
8099 a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936);
8100 d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586);
8101 c = md5_ff(c, d, a, b, x[i+ 2], 17, 606105819);
8102 b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330);
8103 a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897);
8104 d = md5_ff(d, a, b, c, x[i+ 5], 12, 1200080426);
8105 c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341);
8106 b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983);
8107 a = md5_ff(a, b, c, d, x[i+ 8], 7 , 1770035416);
8108 d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417);
8109 c = md5_ff(c, d, a, b, x[i+10], 17, -42063);
8110 b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162);
8111 a = md5_ff(a, b, c, d, x[i+12], 7 , 1804603682);
8112 d = md5_ff(d, a, b, c, x[i+13], 12, -40341101);
8113 c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290);
8114 b = md5_ff(b, c, d, a, x[i+15], 22, 1236535329);
8115
8116 a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510);
8117 d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632);
8118 c = md5_gg(c, d, a, b, x[i+11], 14, 643717713);
8119 b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302);
8120 a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691);
8121 d = md5_gg(d, a, b, c, x[i+10], 9 , 38016083);
8122 c = md5_gg(c, d, a, b, x[i+15], 14, -660478335);
8123 b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848);
8124 a = md5_gg(a, b, c, d, x[i+ 9], 5 , 568446438);
8125 d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690);
8126 c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961);
8127 b = md5_gg(b, c, d, a, x[i+ 8], 20, 1163531501);
8128 a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467);
8129 d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784);
8130 c = md5_gg(c, d, a, b, x[i+ 7], 14, 1735328473);
8131 b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734);
8132
8133 a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558);
8134 d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463);
8135 c = md5_hh(c, d, a, b, x[i+11], 16, 1839030562);
8136 b = md5_hh(b, c, d, a, x[i+14], 23, -35309556);
8137 a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060);
8138 d = md5_hh(d, a, b, c, x[i+ 4], 11, 1272893353);
8139 c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632);
8140 b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640);
8141 a = md5_hh(a, b, c, d, x[i+13], 4 , 681279174);
8142 d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222);
8143 c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979);
8144 b = md5_hh(b, c, d, a, x[i+ 6], 23, 76029189);
8145 a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487);
8146 d = md5_hh(d, a, b, c, x[i+12], 11, -421815835);
8147 c = md5_hh(c, d, a, b, x[i+15], 16, 530742520);
8148 b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651);
8149
8150 a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844);
8151 d = md5_ii(d, a, b, c, x[i+ 7], 10, 1126891415);
8152 c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905);
8153 b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055);
8154 a = md5_ii(a, b, c, d, x[i+12], 6 , 1700485571);
8155 d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606);
8156 c = md5_ii(c, d, a, b, x[i+10], 15, -1051523);
8157 b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799);
8158 a = md5_ii(a, b, c, d, x[i+ 8], 6 , 1873313359);
8159 d = md5_ii(d, a, b, c, x[i+15], 10, -30611744);
8160 c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380);
8161 b = md5_ii(b, c, d, a, x[i+13], 21, 1309151649);
8162 a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070);
8163 d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379);
8164 c = md5_ii(c, d, a, b, x[i+ 2], 15, 718787259);
8165 b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551);
8166
8167 a = safe_add(a, olda);
8168 b = safe_add(b, oldb);
8169 c = safe_add(c, oldc);
8170 d = safe_add(d, oldd);
8171 }
8172 return Array(a, b, c, d);
8173
8174 }
8175
8176 /*
8177 * These functions implement the four basic operations the algorithm uses.
8178 */
8179 function md5_cmn(q, a, b, x, s, t)
8180 {
8181 return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b);
8182 }
8183 function md5_ff(a, b, c, d, x, s, t)
8184 {
8185 return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
8186 }
8187 function md5_gg(a, b, c, d, x, s, t)
8188 {
8189 return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
8190 }
8191 function md5_hh(a, b, c, d, x, s, t)
8192 {
8193 return md5_cmn(b ^ c ^ d, a, b, x, s, t);
8194 }
8195 function md5_ii(a, b, c, d, x, s, t)
8196 {
8197 return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
8198 }
8199
8200 /*
8201 * Add integers, wrapping at 2^32. This uses 16-bit operations internally
8202 * to work around bugs in some JS interpreters.
8203 */
8204 function safe_add(x, y)
8205 {
8206 var lsw = (x & 0xFFFF) + (y & 0xFFFF);
8207 var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
8208 return (msw << 16) | (lsw & 0xFFFF);
8209 }
8210
8211 /*
8212 * Bitwise rotate a 32-bit number to the left.
8213 */
8214 function bit_rol(num, cnt)
8215 {
8216 return (num << cnt) | (num >>> (32 - cnt));
8217 }
8218
8219 module.exports = function md5(buf) {
8220 return helpers.hash(buf, core_md5, 16);
8221 };
8222 },{"./helpers":33}],35:[function(require,module,exports){
8223 arguments[4][12][0].apply(exports,arguments)
8224 },{"dup":12}],36:[function(require,module,exports){
8225 (function (Buffer){
8226 /*
8227 CryptoJS v3.1.2
8228 code.google.com/p/crypto-js
8229 (c) 2009-2013 by Jeff Mott. All rights reserved.
8230 code.google.com/p/crypto-js/wiki/License
8231 */
8232 /** @preserve
8233 (c) 2012 by Cédric Mesnil. All rights reserved.
8234
8235 Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
8236
8237 - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
8238 - 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.
8239
8240 THIS 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.
8241 */
8242
8243 // constants table
8244 var zl = [
8245 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
8246 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
8247 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
8248 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
8249 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
8250 ]
8251
8252 var zr = [
8253 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
8254 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
8255 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
8256 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
8257 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
8258 ]
8259
8260 var sl = [
8261 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
8262 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
8263 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
8264 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
8265 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
8266 ]
8267
8268 var sr = [
8269 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
8270 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
8271 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
8272 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
8273 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
8274 ]
8275
8276 var hl = [0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]
8277 var hr = [0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]
8278
8279 function bytesToWords (bytes) {
8280 var words = []
8281 for (var i = 0, b = 0; i < bytes.length; i++, b += 8) {
8282 words[b >>> 5] |= bytes[i] << (24 - b % 32)
8283 }
8284 return words
8285 }
8286
8287 function wordsToBytes (words) {
8288 var bytes = []
8289 for (var b = 0; b < words.length * 32; b += 8) {
8290 bytes.push((words[b >>> 5] >>> (24 - b % 32)) & 0xFF)
8291 }
8292 return bytes
8293 }
8294
8295 function processBlock (H, M, offset) {
8296 // swap endian
8297 for (var i = 0; i < 16; i++) {
8298 var offset_i = offset + i
8299 var M_offset_i = M[offset_i]
8300
8301 // Swap
8302 M[offset_i] = (
8303 (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |
8304 (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)
8305 )
8306 }
8307
8308 // Working variables
8309 var al, bl, cl, dl, el
8310 var ar, br, cr, dr, er
8311
8312 ar = al = H[0]
8313 br = bl = H[1]
8314 cr = cl = H[2]
8315 dr = dl = H[3]
8316 er = el = H[4]
8317
8318 // computation
8319 var t
8320 for (i = 0; i < 80; i += 1) {
8321 t = (al + M[offset + zl[i]]) | 0
8322 if (i < 16) {
8323 t += f1(bl, cl, dl) + hl[0]
8324 } else if (i < 32) {
8325 t += f2(bl, cl, dl) + hl[1]
8326 } else if (i < 48) {
8327 t += f3(bl, cl, dl) + hl[2]
8328 } else if (i < 64) {
8329 t += f4(bl, cl, dl) + hl[3]
8330 } else {// if (i<80) {
8331 t += f5(bl, cl, dl) + hl[4]
8332 }
8333 t = t | 0
8334 t = rotl(t, sl[i])
8335 t = (t + el) | 0
8336 al = el
8337 el = dl
8338 dl = rotl(cl, 10)
8339 cl = bl
8340 bl = t
8341
8342 t = (ar + M[offset + zr[i]]) | 0
8343 if (i < 16) {
8344 t += f5(br, cr, dr) + hr[0]
8345 } else if (i < 32) {
8346 t += f4(br, cr, dr) + hr[1]
8347 } else if (i < 48) {
8348 t += f3(br, cr, dr) + hr[2]
8349 } else if (i < 64) {
8350 t += f2(br, cr, dr) + hr[3]
8351 } else {// if (i<80) {
8352 t += f1(br, cr, dr) + hr[4]
8353 }
8354
8355 t = t | 0
8356 t = rotl(t, sr[i])
8357 t = (t + er) | 0
8358 ar = er
8359 er = dr
8360 dr = rotl(cr, 10)
8361 cr = br
8362 br = t
8363 }
8364
8365 // intermediate hash value
8366 t = (H[1] + cl + dr) | 0
8367 H[1] = (H[2] + dl + er) | 0
8368 H[2] = (H[3] + el + ar) | 0
8369 H[3] = (H[4] + al + br) | 0
8370 H[4] = (H[0] + bl + cr) | 0
8371 H[0] = t
8372 }
8373
8374 function f1 (x, y, z) {
8375 return ((x) ^ (y) ^ (z))
8376 }
8377
8378 function f2 (x, y, z) {
8379 return (((x) & (y)) | ((~x) & (z)))
8380 }
8381
8382 function f3 (x, y, z) {
8383 return (((x) | (~(y))) ^ (z))
8384 }
8385
8386 function f4 (x, y, z) {
8387 return (((x) & (z)) | ((y) & (~(z))))
8388 }
8389
8390 function f5 (x, y, z) {
8391 return ((x) ^ ((y) | (~(z))))
8392 }
8393
8394 function rotl (x, n) {
8395 return (x << n) | (x >>> (32 - n))
8396 }
8397
8398 function ripemd160 (message) {
8399 var H = [0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]
8400
8401 if (typeof message === 'string') {
8402 message = new Buffer(message, 'utf8')
8403 }
8404
8405 var m = bytesToWords(message)
8406
8407 var nBitsLeft = message.length * 8
8408 var nBitsTotal = message.length * 8
8409
8410 // Add padding
8411 m[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32)
8412 m[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (
8413 (((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff) |
8414 (((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00)
8415 )
8416
8417 for (var i = 0; i < m.length; i += 16) {
8418 processBlock(H, m, i)
8419 }
8420
8421 // swap endian
8422 for (i = 0; i < 5; i++) {
8423 // shortcut
8424 var H_i = H[i]
8425
8426 // Swap
8427 H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |
8428 (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00)
8429 }
8430
8431 var digestbytes = wordsToBytes(H)
8432 return new Buffer(digestbytes)
8433 }
8434
8435 module.exports = ripemd160
8436
8437 }).call(this,require("buffer").Buffer)
8438 },{"buffer":7}],37:[function(require,module,exports){
8439 (function (Buffer){
8440 // prototype class for hash functions
8441 function Hash (blockSize, finalSize) {
8442 this._block = new Buffer(blockSize)
8443 this._finalSize = finalSize
8444 this._blockSize = blockSize
8445 this._len = 0
8446 this._s = 0
8447 }
8448
8449 Hash.prototype.update = function (data, enc) {
8450 if (typeof data === 'string') {
8451 enc = enc || 'utf8'
8452 data = new Buffer(data, enc)
8453 }
8454
8455 var l = this._len += data.length
8456 var s = this._s || 0
8457 var f = 0
8458 var buffer = this._block
8459
8460 while (s < l) {
8461 var t = Math.min(data.length, f + this._blockSize - (s % this._blockSize))
8462 var ch = (t - f)
8463
8464 for (var i = 0; i < ch; i++) {
8465 buffer[(s % this._blockSize) + i] = data[i + f]
8466 }
8467
8468 s += ch
8469 f += ch
8470
8471 if ((s % this._blockSize) === 0) {
8472 this._update(buffer)
8473 }
8474 }
8475 this._s = s
8476
8477 return this
8478 }
8479
8480 Hash.prototype.digest = function (enc) {
8481 // Suppose the length of the message M, in bits, is l
8482 var l = this._len * 8
8483
8484 // Append the bit 1 to the end of the message
8485 this._block[this._len % this._blockSize] = 0x80
8486
8487 // and then k zero bits, where k is the smallest non-negative solution to the equation (l + 1 + k) === finalSize mod blockSize
8488 this._block.fill(0, this._len % this._blockSize + 1)
8489
8490 if (l % (this._blockSize * 8) >= this._finalSize * 8) {
8491 this._update(this._block)
8492 this._block.fill(0)
8493 }
8494
8495 // to this append the block which is equal to the number l written in binary
8496 // TODO: handle case where l is > Math.pow(2, 29)
8497 this._block.writeInt32BE(l, this._blockSize - 4)
8498
8499 var hash = this._update(this._block) || this._hash()
8500
8501 return enc ? hash.toString(enc) : hash
8502 }
8503
8504 Hash.prototype._update = function () {
8505 throw new Error('_update must be implemented by subclass')
8506 }
8507
8508 module.exports = Hash
8509
8510 }).call(this,require("buffer").Buffer)
8511 },{"buffer":7}],38:[function(require,module,exports){
8512 var exports = module.exports = function SHA (algorithm) {
8513 algorithm = algorithm.toLowerCase()
8514
8515 var Algorithm = exports[algorithm]
8516 if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')
8517
8518 return new Algorithm()
8519 }
8520
8521 exports.sha = require('./sha')
8522 exports.sha1 = require('./sha1')
8523 exports.sha224 = require('./sha224')
8524 exports.sha256 = require('./sha256')
8525 exports.sha384 = require('./sha384')
8526 exports.sha512 = require('./sha512')
8527
8528 },{"./sha":39,"./sha1":40,"./sha224":41,"./sha256":42,"./sha384":43,"./sha512":44}],39:[function(require,module,exports){
8529 (function (Buffer){
8530 /*
8531 * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined
8532 * in FIPS PUB 180-1
8533 * This source code is derived from sha1.js of the same repository.
8534 * The difference between SHA-0 and SHA-1 is just a bitwise rotate left
8535 * operation was added.
8536 */
8537
8538 var inherits = require('inherits')
8539 var Hash = require('./hash')
8540
8541 var W = new Array(80)
8542
8543 function Sha () {
8544 this.init()
8545 this._w = W
8546
8547 Hash.call(this, 64, 56)
8548 }
8549
8550 inherits(Sha, Hash)
8551
8552 Sha.prototype.init = function () {
8553 this._a = 0x67452301 | 0
8554 this._b = 0xefcdab89 | 0
8555 this._c = 0x98badcfe | 0
8556 this._d = 0x10325476 | 0
8557 this._e = 0xc3d2e1f0 | 0
8558
8559 return this
8560 }
8561
8562 /*
8563 * Bitwise rotate a 32-bit number to the left.
8564 */
8565 function rol (num, cnt) {
8566 return (num << cnt) | (num >>> (32 - cnt))
8567 }
8568
8569 Sha.prototype._update = function (M) {
8570 var W = this._w
8571
8572 var a = this._a
8573 var b = this._b
8574 var c = this._c
8575 var d = this._d
8576 var e = this._e
8577
8578 var j = 0, k
8579
8580 /*
8581 * SHA-1 has a bitwise rotate left operation. But, SHA is not
8582 * function calcW() { return rol(W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16], 1) }
8583 */
8584 function calcW () { return W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16] }
8585 function loop (w, f) {
8586 W[j] = w
8587
8588 var t = rol(a, 5) + f + e + w + k
8589
8590 e = d
8591 d = c
8592 c = rol(b, 30)
8593 b = a
8594 a = t
8595 j++
8596 }
8597
8598 k = 1518500249
8599 while (j < 16) loop(M.readInt32BE(j * 4), (b & c) | ((~b) & d))
8600 while (j < 20) loop(calcW(), (b & c) | ((~b) & d))
8601 k = 1859775393
8602 while (j < 40) loop(calcW(), b ^ c ^ d)
8603 k = -1894007588
8604 while (j < 60) loop(calcW(), (b & c) | (b & d) | (c & d))
8605 k = -899497514
8606 while (j < 80) loop(calcW(), b ^ c ^ d)
8607
8608 this._a = (a + this._a) | 0
8609 this._b = (b + this._b) | 0
8610 this._c = (c + this._c) | 0
8611 this._d = (d + this._d) | 0
8612 this._e = (e + this._e) | 0
8613 }
8614
8615 Sha.prototype._hash = function () {
8616 var H = new Buffer(20)
8617
8618 H.writeInt32BE(this._a | 0, 0)
8619 H.writeInt32BE(this._b | 0, 4)
8620 H.writeInt32BE(this._c | 0, 8)
8621 H.writeInt32BE(this._d | 0, 12)
8622 H.writeInt32BE(this._e | 0, 16)
8623
8624 return H
8625 }
8626
8627 module.exports = Sha
8628
8629
8630 }).call(this,require("buffer").Buffer)
8631 },{"./hash":37,"buffer":7,"inherits":35}],40:[function(require,module,exports){
8632 (function (Buffer){
8633 /*
8634 * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
8635 * in FIPS PUB 180-1
8636 * Version 2.1a Copyright Paul Johnston 2000 - 2002.
8637 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8638 * Distributed under the BSD License
8639 * See http://pajhome.org.uk/crypt/md5 for details.
8640 */
8641
8642 var inherits = require('inherits')
8643 var Hash = require('./hash')
8644
8645 var W = new Array(80)
8646
8647 function Sha1 () {
8648 this.init()
8649 this._w = W
8650
8651 Hash.call(this, 64, 56)
8652 }
8653
8654 inherits(Sha1, Hash)
8655
8656 Sha1.prototype.init = function () {
8657 this._a = 0x67452301 | 0
8658 this._b = 0xefcdab89 | 0
8659 this._c = 0x98badcfe | 0
8660 this._d = 0x10325476 | 0
8661 this._e = 0xc3d2e1f0 | 0
8662
8663 return this
8664 }
8665
8666 /*
8667 * Bitwise rotate a 32-bit number to the left.
8668 */
8669 function rol (num, cnt) {
8670 return (num << cnt) | (num >>> (32 - cnt))
8671 }
8672
8673 Sha1.prototype._update = function (M) {
8674 var W = this._w
8675
8676 var a = this._a
8677 var b = this._b
8678 var c = this._c
8679 var d = this._d
8680 var e = this._e
8681
8682 var j = 0, k
8683
8684 function calcW () { return rol(W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16], 1) }
8685 function loop (w, f) {
8686 W[j] = w
8687
8688 var t = rol(a, 5) + f + e + w + k
8689
8690 e = d
8691 d = c
8692 c = rol(b, 30)
8693 b = a
8694 a = t
8695 j++
8696 }
8697
8698 k = 1518500249
8699 while (j < 16) loop(M.readInt32BE(j * 4), (b & c) | ((~b) & d))
8700 while (j < 20) loop(calcW(), (b & c) | ((~b) & d))
8701 k = 1859775393
8702 while (j < 40) loop(calcW(), b ^ c ^ d)
8703 k = -1894007588
8704 while (j < 60) loop(calcW(), (b & c) | (b & d) | (c & d))
8705 k = -899497514
8706 while (j < 80) loop(calcW(), b ^ c ^ d)
8707
8708 this._a = (a + this._a) | 0
8709 this._b = (b + this._b) | 0
8710 this._c = (c + this._c) | 0
8711 this._d = (d + this._d) | 0
8712 this._e = (e + this._e) | 0
8713 }
8714
8715 Sha1.prototype._hash = function () {
8716 var H = new Buffer(20)
8717
8718 H.writeInt32BE(this._a | 0, 0)
8719 H.writeInt32BE(this._b | 0, 4)
8720 H.writeInt32BE(this._c | 0, 8)
8721 H.writeInt32BE(this._d | 0, 12)
8722 H.writeInt32BE(this._e | 0, 16)
8723
8724 return H
8725 }
8726
8727 module.exports = Sha1
8728
8729 }).call(this,require("buffer").Buffer)
8730 },{"./hash":37,"buffer":7,"inherits":35}],41:[function(require,module,exports){
8731 (function (Buffer){
8732 /**
8733 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
8734 * in FIPS 180-2
8735 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
8736 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8737 *
8738 */
8739
8740 var inherits = require('inherits')
8741 var Sha256 = require('./sha256')
8742 var Hash = require('./hash')
8743
8744 var W = new Array(64)
8745
8746 function Sha224 () {
8747 this.init()
8748
8749 this._w = W // new Array(64)
8750
8751 Hash.call(this, 64, 56)
8752 }
8753
8754 inherits(Sha224, Sha256)
8755
8756 Sha224.prototype.init = function () {
8757 this._a = 0xc1059ed8 | 0
8758 this._b = 0x367cd507 | 0
8759 this._c = 0x3070dd17 | 0
8760 this._d = 0xf70e5939 | 0
8761 this._e = 0xffc00b31 | 0
8762 this._f = 0x68581511 | 0
8763 this._g = 0x64f98fa7 | 0
8764 this._h = 0xbefa4fa4 | 0
8765
8766 return this
8767 }
8768
8769 Sha224.prototype._hash = function () {
8770 var H = new Buffer(28)
8771
8772 H.writeInt32BE(this._a, 0)
8773 H.writeInt32BE(this._b, 4)
8774 H.writeInt32BE(this._c, 8)
8775 H.writeInt32BE(this._d, 12)
8776 H.writeInt32BE(this._e, 16)
8777 H.writeInt32BE(this._f, 20)
8778 H.writeInt32BE(this._g, 24)
8779
8780 return H
8781 }
8782
8783 module.exports = Sha224
8784
8785 }).call(this,require("buffer").Buffer)
8786 },{"./hash":37,"./sha256":42,"buffer":7,"inherits":35}],42:[function(require,module,exports){
8787 (function (Buffer){
8788 /**
8789 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
8790 * in FIPS 180-2
8791 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
8792 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8793 *
8794 */
8795
8796 var inherits = require('inherits')
8797 var Hash = require('./hash')
8798
8799 var K = [
8800 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,
8801 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,
8802 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,
8803 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,
8804 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,
8805 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,
8806 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,
8807 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,
8808 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,
8809 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,
8810 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,
8811 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,
8812 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,
8813 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,
8814 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,
8815 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2
8816 ]
8817
8818 var W = new Array(64)
8819
8820 function Sha256 () {
8821 this.init()
8822
8823 this._w = W // new Array(64)
8824
8825 Hash.call(this, 64, 56)
8826 }
8827
8828 inherits(Sha256, Hash)
8829
8830 Sha256.prototype.init = function () {
8831 this._a = 0x6a09e667 | 0
8832 this._b = 0xbb67ae85 | 0
8833 this._c = 0x3c6ef372 | 0
8834 this._d = 0xa54ff53a | 0
8835 this._e = 0x510e527f | 0
8836 this._f = 0x9b05688c | 0
8837 this._g = 0x1f83d9ab | 0
8838 this._h = 0x5be0cd19 | 0
8839
8840 return this
8841 }
8842
8843 function S (X, n) {
8844 return (X >>> n) | (X << (32 - n))
8845 }
8846
8847 function R (X, n) {
8848 return (X >>> n)
8849 }
8850
8851 function Ch (x, y, z) {
8852 return ((x & y) ^ ((~x) & z))
8853 }
8854
8855 function Maj (x, y, z) {
8856 return ((x & y) ^ (x & z) ^ (y & z))
8857 }
8858
8859 function Sigma0256 (x) {
8860 return (S(x, 2) ^ S(x, 13) ^ S(x, 22))
8861 }
8862
8863 function Sigma1256 (x) {
8864 return (S(x, 6) ^ S(x, 11) ^ S(x, 25))
8865 }
8866
8867 function Gamma0256 (x) {
8868 return (S(x, 7) ^ S(x, 18) ^ R(x, 3))
8869 }
8870
8871 function Gamma1256 (x) {
8872 return (S(x, 17) ^ S(x, 19) ^ R(x, 10))
8873 }
8874
8875 Sha256.prototype._update = function (M) {
8876 var W = this._w
8877
8878 var a = this._a | 0
8879 var b = this._b | 0
8880 var c = this._c | 0
8881 var d = this._d | 0
8882 var e = this._e | 0
8883 var f = this._f | 0
8884 var g = this._g | 0
8885 var h = this._h | 0
8886
8887 var j = 0
8888
8889 function calcW () { return Gamma1256(W[j - 2]) + W[j - 7] + Gamma0256(W[j - 15]) + W[j - 16] }
8890 function loop (w) {
8891 W[j] = w
8892
8893 var T1 = h + Sigma1256(e) + Ch(e, f, g) + K[j] + w
8894 var T2 = Sigma0256(a) + Maj(a, b, c)
8895
8896 h = g
8897 g = f
8898 f = e
8899 e = d + T1
8900 d = c
8901 c = b
8902 b = a
8903 a = T1 + T2
8904
8905 j++
8906 }
8907
8908 while (j < 16) loop(M.readInt32BE(j * 4))
8909 while (j < 64) loop(calcW())
8910
8911 this._a = (a + this._a) | 0
8912 this._b = (b + this._b) | 0
8913 this._c = (c + this._c) | 0
8914 this._d = (d + this._d) | 0
8915 this._e = (e + this._e) | 0
8916 this._f = (f + this._f) | 0
8917 this._g = (g + this._g) | 0
8918 this._h = (h + this._h) | 0
8919 }
8920
8921 Sha256.prototype._hash = function () {
8922 var H = new Buffer(32)
8923
8924 H.writeInt32BE(this._a, 0)
8925 H.writeInt32BE(this._b, 4)
8926 H.writeInt32BE(this._c, 8)
8927 H.writeInt32BE(this._d, 12)
8928 H.writeInt32BE(this._e, 16)
8929 H.writeInt32BE(this._f, 20)
8930 H.writeInt32BE(this._g, 24)
8931 H.writeInt32BE(this._h, 28)
8932
8933 return H
8934 }
8935
8936 module.exports = Sha256
8937
8938 }).call(this,require("buffer").Buffer)
8939 },{"./hash":37,"buffer":7,"inherits":35}],43:[function(require,module,exports){
8940 (function (Buffer){
8941 var inherits = require('inherits')
8942 var SHA512 = require('./sha512')
8943 var Hash = require('./hash')
8944
8945 var W = new Array(160)
8946
8947 function Sha384 () {
8948 this.init()
8949 this._w = W
8950
8951 Hash.call(this, 128, 112)
8952 }
8953
8954 inherits(Sha384, SHA512)
8955
8956 Sha384.prototype.init = function () {
8957 this._a = 0xcbbb9d5d | 0
8958 this._b = 0x629a292a | 0
8959 this._c = 0x9159015a | 0
8960 this._d = 0x152fecd8 | 0
8961 this._e = 0x67332667 | 0
8962 this._f = 0x8eb44a87 | 0
8963 this._g = 0xdb0c2e0d | 0
8964 this._h = 0x47b5481d | 0
8965
8966 this._al = 0xc1059ed8 | 0
8967 this._bl = 0x367cd507 | 0
8968 this._cl = 0x3070dd17 | 0
8969 this._dl = 0xf70e5939 | 0
8970 this._el = 0xffc00b31 | 0
8971 this._fl = 0x68581511 | 0
8972 this._gl = 0x64f98fa7 | 0
8973 this._hl = 0xbefa4fa4 | 0
8974
8975 return this
8976 }
8977
8978 Sha384.prototype._hash = function () {
8979 var H = new Buffer(48)
8980
8981 function writeInt64BE (h, l, offset) {
8982 H.writeInt32BE(h, offset)
8983 H.writeInt32BE(l, offset + 4)
8984 }
8985
8986 writeInt64BE(this._a, this._al, 0)
8987 writeInt64BE(this._b, this._bl, 8)
8988 writeInt64BE(this._c, this._cl, 16)
8989 writeInt64BE(this._d, this._dl, 24)
8990 writeInt64BE(this._e, this._el, 32)
8991 writeInt64BE(this._f, this._fl, 40)
8992
8993 return H
8994 }
8995
8996 module.exports = Sha384
8997
8998 }).call(this,require("buffer").Buffer)
8999 },{"./hash":37,"./sha512":44,"buffer":7,"inherits":35}],44:[function(require,module,exports){
9000 (function (Buffer){
9001 var inherits = require('inherits')
9002 var Hash = require('./hash')
9003
9004 var K = [
9005 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
9006 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
9007 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
9008 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
9009 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
9010 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
9011 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
9012 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
9013 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
9014 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
9015 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
9016 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
9017 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
9018 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
9019 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
9020 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
9021 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
9022 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
9023 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
9024 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
9025 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
9026 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
9027 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
9028 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
9029 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
9030 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
9031 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
9032 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
9033 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
9034 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
9035 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
9036 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
9037 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
9038 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
9039 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
9040 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
9041 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
9042 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
9043 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
9044 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
9045 ]
9046
9047 var W = new Array(160)
9048
9049 function Sha512 () {
9050 this.init()
9051 this._w = W
9052
9053 Hash.call(this, 128, 112)
9054 }
9055
9056 inherits(Sha512, Hash)
9057
9058 Sha512.prototype.init = function () {
9059 this._a = 0x6a09e667 | 0
9060 this._b = 0xbb67ae85 | 0
9061 this._c = 0x3c6ef372 | 0
9062 this._d = 0xa54ff53a | 0
9063 this._e = 0x510e527f | 0
9064 this._f = 0x9b05688c | 0
9065 this._g = 0x1f83d9ab | 0
9066 this._h = 0x5be0cd19 | 0
9067
9068 this._al = 0xf3bcc908 | 0
9069 this._bl = 0x84caa73b | 0
9070 this._cl = 0xfe94f82b | 0
9071 this._dl = 0x5f1d36f1 | 0
9072 this._el = 0xade682d1 | 0
9073 this._fl = 0x2b3e6c1f | 0
9074 this._gl = 0xfb41bd6b | 0
9075 this._hl = 0x137e2179 | 0
9076
9077 return this
9078 }
9079
9080 function S (X, Xl, n) {
9081 return (X >>> n) | (Xl << (32 - n))
9082 }
9083
9084 function Ch (x, y, z) {
9085 return ((x & y) ^ ((~x) & z))
9086 }
9087
9088 function Maj (x, y, z) {
9089 return ((x & y) ^ (x & z) ^ (y & z))
9090 }
9091
9092 Sha512.prototype._update = function (M) {
9093 var W = this._w
9094
9095 var a = this._a | 0
9096 var b = this._b | 0
9097 var c = this._c | 0
9098 var d = this._d | 0
9099 var e = this._e | 0
9100 var f = this._f | 0
9101 var g = this._g | 0
9102 var h = this._h | 0
9103
9104 var al = this._al | 0
9105 var bl = this._bl | 0
9106 var cl = this._cl | 0
9107 var dl = this._dl | 0
9108 var el = this._el | 0
9109 var fl = this._fl | 0
9110 var gl = this._gl | 0
9111 var hl = this._hl | 0
9112
9113 var i = 0, j = 0
9114 var Wi, Wil
9115 function calcW () {
9116 var x = W[j - 15 * 2]
9117 var xl = W[j - 15 * 2 + 1]
9118 var gamma0 = S(x, xl, 1) ^ S(x, xl, 8) ^ (x >>> 7)
9119 var gamma0l = S(xl, x, 1) ^ S(xl, x, 8) ^ S(xl, x, 7)
9120
9121 x = W[j - 2 * 2]
9122 xl = W[j - 2 * 2 + 1]
9123 var gamma1 = S(x, xl, 19) ^ S(xl, x, 29) ^ (x >>> 6)
9124 var gamma1l = S(xl, x, 19) ^ S(x, xl, 29) ^ S(xl, x, 6)
9125
9126 // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]
9127 var Wi7 = W[j - 7 * 2]
9128 var Wi7l = W[j - 7 * 2 + 1]
9129
9130 var Wi16 = W[j - 16 * 2]
9131 var Wi16l = W[j - 16 * 2 + 1]
9132
9133 Wil = gamma0l + Wi7l
9134 Wi = gamma0 + Wi7 + ((Wil >>> 0) < (gamma0l >>> 0) ? 1 : 0)
9135 Wil = Wil + gamma1l
9136 Wi = Wi + gamma1 + ((Wil >>> 0) < (gamma1l >>> 0) ? 1 : 0)
9137 Wil = Wil + Wi16l
9138 Wi = Wi + Wi16 + ((Wil >>> 0) < (Wi16l >>> 0) ? 1 : 0)
9139 }
9140
9141 function loop () {
9142 W[j] = Wi
9143 W[j + 1] = Wil
9144
9145 var maj = Maj(a, b, c)
9146 var majl = Maj(al, bl, cl)
9147
9148 var sigma0h = S(a, al, 28) ^ S(al, a, 2) ^ S(al, a, 7)
9149 var sigma0l = S(al, a, 28) ^ S(a, al, 2) ^ S(a, al, 7)
9150 var sigma1h = S(e, el, 14) ^ S(e, el, 18) ^ S(el, e, 9)
9151 var sigma1l = S(el, e, 14) ^ S(el, e, 18) ^ S(e, el, 9)
9152
9153 // t1 = h + sigma1 + ch + K[i] + W[i]
9154 var Ki = K[j]
9155 var Kil = K[j + 1]
9156
9157 var ch = Ch(e, f, g)
9158 var chl = Ch(el, fl, gl)
9159
9160 var t1l = hl + sigma1l
9161 var t1 = h + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0)
9162 t1l = t1l + chl
9163 t1 = t1 + ch + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0)
9164 t1l = t1l + Kil
9165 t1 = t1 + Ki + ((t1l >>> 0) < (Kil >>> 0) ? 1 : 0)
9166 t1l = t1l + Wil
9167 t1 = t1 + Wi + ((t1l >>> 0) < (Wil >>> 0) ? 1 : 0)
9168
9169 // t2 = sigma0 + maj
9170 var t2l = sigma0l + majl
9171 var t2 = sigma0h + maj + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0)
9172
9173 h = g
9174 hl = gl
9175 g = f
9176 gl = fl
9177 f = e
9178 fl = el
9179 el = (dl + t1l) | 0
9180 e = (d + t1 + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0
9181 d = c
9182 dl = cl
9183 c = b
9184 cl = bl
9185 b = a
9186 bl = al
9187 al = (t1l + t2l) | 0
9188 a = (t1 + t2 + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0
9189
9190 i++
9191 j += 2
9192 }
9193
9194 while (i < 16) {
9195 Wi = M.readInt32BE(j * 4)
9196 Wil = M.readInt32BE(j * 4 + 4)
9197
9198 loop()
9199 }
9200
9201 while (i < 80) {
9202 calcW()
9203 loop()
9204 }
9205
9206 this._al = (this._al + al) | 0
9207 this._bl = (this._bl + bl) | 0
9208 this._cl = (this._cl + cl) | 0
9209 this._dl = (this._dl + dl) | 0
9210 this._el = (this._el + el) | 0
9211 this._fl = (this._fl + fl) | 0
9212 this._gl = (this._gl + gl) | 0
9213 this._hl = (this._hl + hl) | 0
9214
9215 this._a = (this._a + a + ((this._al >>> 0) < (al >>> 0) ? 1 : 0)) | 0
9216 this._b = (this._b + b + ((this._bl >>> 0) < (bl >>> 0) ? 1 : 0)) | 0
9217 this._c = (this._c + c + ((this._cl >>> 0) < (cl >>> 0) ? 1 : 0)) | 0
9218 this._d = (this._d + d + ((this._dl >>> 0) < (dl >>> 0) ? 1 : 0)) | 0
9219 this._e = (this._e + e + ((this._el >>> 0) < (el >>> 0) ? 1 : 0)) | 0
9220 this._f = (this._f + f + ((this._fl >>> 0) < (fl >>> 0) ? 1 : 0)) | 0
9221 this._g = (this._g + g + ((this._gl >>> 0) < (gl >>> 0) ? 1 : 0)) | 0
9222 this._h = (this._h + h + ((this._hl >>> 0) < (hl >>> 0) ? 1 : 0)) | 0
9223 }
9224
9225 Sha512.prototype._hash = function () {
9226 var H = new Buffer(64)
9227
9228 function writeInt64BE (h, l, offset) {
9229 H.writeInt32BE(h, offset)
9230 H.writeInt32BE(l, offset + 4)
9231 }
9232
9233 writeInt64BE(this._a, this._al, 0)
9234 writeInt64BE(this._b, this._bl, 8)
9235 writeInt64BE(this._c, this._cl, 16)
9236 writeInt64BE(this._d, this._dl, 24)
9237 writeInt64BE(this._e, this._el, 32)
9238 writeInt64BE(this._f, this._fl, 40)
9239 writeInt64BE(this._g, this._gl, 48)
9240 writeInt64BE(this._h, this._hl, 56)
9241
9242 return H
9243 }
9244
9245 module.exports = Sha512
9246
9247 }).call(this,require("buffer").Buffer)
9248 },{"./hash":37,"buffer":7,"inherits":35}],45:[function(require,module,exports){
9249 (function (Buffer){
9250 'use strict';
9251 var createHash = require('create-hash/browser');
9252 var inherits = require('inherits')
9253
9254 var Transform = require('stream').Transform
9255
9256 var ZEROS = new Buffer(128)
9257 ZEROS.fill(0)
9258
9259 function Hmac(alg, key) {
9260 Transform.call(this)
9261
9262 if (typeof key === 'string') {
9263 key = new Buffer(key)
9264 }
9265
9266 var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64
9267
9268 this._alg = alg
9269 this._key = key
9270
9271 if (key.length > blocksize) {
9272 key = createHash(alg).update(key).digest()
9273
9274 } else if (key.length < blocksize) {
9275 key = Buffer.concat([key, ZEROS], blocksize)
9276 }
9277
9278 var ipad = this._ipad = new Buffer(blocksize)
9279 var opad = this._opad = new Buffer(blocksize)
9280
9281 for (var i = 0; i < blocksize; i++) {
9282 ipad[i] = key[i] ^ 0x36
9283 opad[i] = key[i] ^ 0x5C
9284 }
9285
9286 this._hash = createHash(alg).update(ipad)
9287 }
9288
9289 inherits(Hmac, Transform)
9290
9291 Hmac.prototype.update = function (data, enc) {
9292 this._hash.update(data, enc)
9293
9294 return this
9295 }
9296
9297 Hmac.prototype._transform = function (data, _, next) {
9298 this._hash.update(data)
9299
9300 next()
9301 }
9302
9303 Hmac.prototype._flush = function (next) {
9304 this.push(this.digest())
9305
9306 next()
9307 }
9308
9309 Hmac.prototype.digest = function (enc) {
9310 var h = this._hash.digest()
9311
9312 return createHash(this._alg).update(this._opad).update(h).digest(enc)
9313 }
9314
9315 module.exports = function createHmac(alg, key) {
9316 return new Hmac(alg, key)
9317 }
9318
9319 }).call(this,require("buffer").Buffer)
9320 },{"buffer":7,"create-hash/browser":32,"inherits":46,"stream":26}],46:[function(require,module,exports){
9321 arguments[4][12][0].apply(exports,arguments)
9322 },{"dup":12}],47:[function(require,module,exports){
9323 var assert = require('assert')
9324 var BigInteger = require('bigi')
9325
9326 var Point = require('./point')
9327
9328 function Curve(p, a, b, Gx, Gy, n, h) {
9329 this.p = p
9330 this.a = a
9331 this.b = b
9332 this.G = Point.fromAffine(this, Gx, Gy)
9333 this.n = n
9334 this.h = h
9335
9336 this.infinity = new Point(this, null, null, BigInteger.ZERO)
9337
9338 // result caching
9339 this.pOverFour = p.add(BigInteger.ONE).shiftRight(2)
9340 }
9341
9342 Curve.prototype.pointFromX = function(isOdd, x) {
9343 var alpha = x.pow(3).add(this.a.multiply(x)).add(this.b).mod(this.p)
9344 var beta = alpha.modPow(this.pOverFour, this.p) // XXX: not compatible with all curves
9345
9346 var y = beta
9347 if (beta.isEven() ^ !isOdd) {
9348 y = this.p.subtract(y) // -y % p
9349 }
9350
9351 return Point.fromAffine(this, x, y)
9352 }
9353
9354 Curve.prototype.isInfinity = function(Q) {
9355 if (Q === this.infinity) return true
9356
9357 return Q.z.signum() === 0 && Q.y.signum() !== 0
9358 }
9359
9360 Curve.prototype.isOnCurve = function(Q) {
9361 if (this.isInfinity(Q)) return true
9362
9363 var x = Q.affineX
9364 var y = Q.affineY
9365 var a = this.a
9366 var b = this.b
9367 var p = this.p
9368
9369 // Check that xQ and yQ are integers in the interval [0, p - 1]
9370 if (x.signum() < 0 || x.compareTo(p) >= 0) return false
9371 if (y.signum() < 0 || y.compareTo(p) >= 0) return false
9372
9373 // and check that y^2 = x^3 + ax + b (mod p)
9374 var lhs = y.square().mod(p)
9375 var rhs = x.pow(3).add(a.multiply(x)).add(b).mod(p)
9376 return lhs.equals(rhs)
9377 }
9378
9379 /**
9380 * Validate an elliptic curve point.
9381 *
9382 * See SEC 1, section 3.2.2.1: Elliptic Curve Public Key Validation Primitive
9383 */
9384 Curve.prototype.validate = function(Q) {
9385 // Check Q != O
9386 assert(!this.isInfinity(Q), 'Point is at infinity')
9387 assert(this.isOnCurve(Q), 'Point is not on the curve')
9388
9389 // Check nQ = O (where Q is a scalar multiple of G)
9390 var nQ = Q.multiply(this.n)
9391 assert(this.isInfinity(nQ), 'Point is not a scalar multiple of G')
9392
9393 return true
9394 }
9395
9396 module.exports = Curve
9397
9398 },{"./point":51,"assert":5,"bigi":3}],48:[function(require,module,exports){
9399 module.exports={
9400 "secp128r1": {
9401 "p": "fffffffdffffffffffffffffffffffff",
9402 "a": "fffffffdfffffffffffffffffffffffc",
9403 "b": "e87579c11079f43dd824993c2cee5ed3",
9404 "n": "fffffffe0000000075a30d1b9038a115",
9405 "h": "01",
9406 "Gx": "161ff7528b899b2d0c28607ca52c5b86",
9407 "Gy": "cf5ac8395bafeb13c02da292dded7a83"
9408 },
9409 "secp160k1": {
9410 "p": "fffffffffffffffffffffffffffffffeffffac73",
9411 "a": "00",
9412 "b": "07",
9413 "n": "0100000000000000000001b8fa16dfab9aca16b6b3",
9414 "h": "01",
9415 "Gx": "3b4c382ce37aa192a4019e763036f4f5dd4d7ebb",
9416 "Gy": "938cf935318fdced6bc28286531733c3f03c4fee"
9417 },
9418 "secp160r1": {
9419 "p": "ffffffffffffffffffffffffffffffff7fffffff",
9420 "a": "ffffffffffffffffffffffffffffffff7ffffffc",
9421 "b": "1c97befc54bd7a8b65acf89f81d4d4adc565fa45",
9422 "n": "0100000000000000000001f4c8f927aed3ca752257",
9423 "h": "01",
9424 "Gx": "4a96b5688ef573284664698968c38bb913cbfc82",
9425 "Gy": "23a628553168947d59dcc912042351377ac5fb32"
9426 },
9427 "secp192k1": {
9428 "p": "fffffffffffffffffffffffffffffffffffffffeffffee37",
9429 "a": "00",
9430 "b": "03",
9431 "n": "fffffffffffffffffffffffe26f2fc170f69466a74defd8d",
9432 "h": "01",
9433 "Gx": "db4ff10ec057e9ae26b07d0280b7f4341da5d1b1eae06c7d",
9434 "Gy": "9b2f2f6d9c5628a7844163d015be86344082aa88d95e2f9d"
9435 },
9436 "secp192r1": {
9437 "p": "fffffffffffffffffffffffffffffffeffffffffffffffff",
9438 "a": "fffffffffffffffffffffffffffffffefffffffffffffffc",
9439 "b": "64210519e59c80e70fa7e9ab72243049feb8deecc146b9b1",
9440 "n": "ffffffffffffffffffffffff99def836146bc9b1b4d22831",
9441 "h": "01",
9442 "Gx": "188da80eb03090f67cbf20eb43a18800f4ff0afd82ff1012",
9443 "Gy": "07192b95ffc8da78631011ed6b24cdd573f977a11e794811"
9444 },
9445 "secp256k1": {
9446 "p": "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f",
9447 "a": "00",
9448 "b": "07",
9449 "n": "fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141",
9450 "h": "01",
9451 "Gx": "79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
9452 "Gy": "483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8"
9453 },
9454 "secp256r1": {
9455 "p": "ffffffff00000001000000000000000000000000ffffffffffffffffffffffff",
9456 "a": "ffffffff00000001000000000000000000000000fffffffffffffffffffffffc",
9457 "b": "5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b",
9458 "n": "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551",
9459 "h": "01",
9460 "Gx": "6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
9461 "Gy": "4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5"
9462 }
9463 }
9464
9465 },{}],49:[function(require,module,exports){
9466 var Point = require('./point')
9467 var Curve = require('./curve')
9468
9469 var getCurveByName = require('./names')
9470
9471 module.exports = {
9472 Curve: Curve,
9473 Point: Point,
9474 getCurveByName: getCurveByName
9475 }
9476
9477 },{"./curve":47,"./names":50,"./point":51}],50:[function(require,module,exports){
9478 var BigInteger = require('bigi')
9479
9480 var curves = require('./curves')
9481 var Curve = require('./curve')
9482
9483 function getCurveByName(name) {
9484 var curve = curves[name]
9485 if (!curve) return null
9486
9487 var p = new BigInteger(curve.p, 16)
9488 var a = new BigInteger(curve.a, 16)
9489 var b = new BigInteger(curve.b, 16)
9490 var n = new BigInteger(curve.n, 16)
9491 var h = new BigInteger(curve.h, 16)
9492 var Gx = new BigInteger(curve.Gx, 16)
9493 var Gy = new BigInteger(curve.Gy, 16)
9494
9495 return new Curve(p, a, b, Gx, Gy, n, h)
9496 }
9497
9498 module.exports = getCurveByName
9499
9500 },{"./curve":47,"./curves":48,"bigi":3}],51:[function(require,module,exports){
9501 (function (Buffer){
9502 var assert = require('assert')
9503 var BigInteger = require('bigi')
9504
9505 var THREE = BigInteger.valueOf(3)
9506
9507 function Point(curve, x, y, z) {
9508 assert.notStrictEqual(z, undefined, 'Missing Z coordinate')
9509
9510 this.curve = curve
9511 this.x = x
9512 this.y = y
9513 this.z = z
9514 this._zInv = null
9515
9516 this.compressed = true
9517 }
9518
9519 Object.defineProperty(Point.prototype, 'zInv', {
9520 get: function() {
9521 if (this._zInv === null) {
9522 this._zInv = this.z.modInverse(this.curve.p)
9523 }
9524
9525 return this._zInv
9526 }
9527 })
9528
9529 Object.defineProperty(Point.prototype, 'affineX', {
9530 get: function() {
9531 return this.x.multiply(this.zInv).mod(this.curve.p)
9532 }
9533 })
9534
9535 Object.defineProperty(Point.prototype, 'affineY', {
9536 get: function() {
9537 return this.y.multiply(this.zInv).mod(this.curve.p)
9538 }
9539 })
9540
9541 Point.fromAffine = function(curve, x, y) {
9542 return new Point(curve, x, y, BigInteger.ONE)
9543 }
9544
9545 Point.prototype.equals = function(other) {
9546 if (other === this) return true
9547 if (this.curve.isInfinity(this)) return this.curve.isInfinity(other)
9548 if (this.curve.isInfinity(other)) return this.curve.isInfinity(this)
9549
9550 // u = Y2 * Z1 - Y1 * Z2
9551 var u = other.y.multiply(this.z).subtract(this.y.multiply(other.z)).mod(this.curve.p)
9552
9553 if (u.signum() !== 0) return false
9554
9555 // v = X2 * Z1 - X1 * Z2
9556 var v = other.x.multiply(this.z).subtract(this.x.multiply(other.z)).mod(this.curve.p)
9557
9558 return v.signum() === 0
9559 }
9560
9561 Point.prototype.negate = function() {
9562 var y = this.curve.p.subtract(this.y)
9563
9564 return new Point(this.curve, this.x, y, this.z)
9565 }
9566
9567 Point.prototype.add = function(b) {
9568 if (this.curve.isInfinity(this)) return b
9569 if (this.curve.isInfinity(b)) return this
9570
9571 var x1 = this.x
9572 var y1 = this.y
9573 var x2 = b.x
9574 var y2 = b.y
9575
9576 // u = Y2 * Z1 - Y1 * Z2
9577 var u = y2.multiply(this.z).subtract(y1.multiply(b.z)).mod(this.curve.p)
9578 // v = X2 * Z1 - X1 * Z2
9579 var v = x2.multiply(this.z).subtract(x1.multiply(b.z)).mod(this.curve.p)
9580
9581 if (v.signum() === 0) {
9582 if (u.signum() === 0) {
9583 return this.twice() // this == b, so double
9584 }
9585
9586 return this.curve.infinity // this = -b, so infinity
9587 }
9588
9589 var v2 = v.square()
9590 var v3 = v2.multiply(v)
9591 var x1v2 = x1.multiply(v2)
9592 var zu2 = u.square().multiply(this.z)
9593
9594 // x3 = v * (z2 * (z1 * u^2 - 2 * x1 * v^2) - v^3)
9595 var x3 = zu2.subtract(x1v2.shiftLeft(1)).multiply(b.z).subtract(v3).multiply(v).mod(this.curve.p)
9596 // y3 = z2 * (3 * x1 * u * v^2 - y1 * v^3 - z1 * u^3) + u * v^3
9597 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)
9598 // z3 = v^3 * z1 * z2
9599 var z3 = v3.multiply(this.z).multiply(b.z).mod(this.curve.p)
9600
9601 return new Point(this.curve, x3, y3, z3)
9602 }
9603
9604 Point.prototype.twice = function() {
9605 if (this.curve.isInfinity(this)) return this
9606 if (this.y.signum() === 0) return this.curve.infinity
9607
9608 var x1 = this.x
9609 var y1 = this.y
9610
9611 var y1z1 = y1.multiply(this.z)
9612 var y1sqz1 = y1z1.multiply(y1).mod(this.curve.p)
9613 var a = this.curve.a
9614
9615 // w = 3 * x1^2 + a * z1^2
9616 var w = x1.square().multiply(THREE)
9617
9618 if (a.signum() !== 0) {
9619 w = w.add(this.z.square().multiply(a))
9620 }
9621
9622 w = w.mod(this.curve.p)
9623 // x3 = 2 * y1 * z1 * (w^2 - 8 * x1 * y1^2 * z1)
9624 var x3 = w.square().subtract(x1.shiftLeft(3).multiply(y1sqz1)).shiftLeft(1).multiply(y1z1).mod(this.curve.p)
9625 // y3 = 4 * y1^2 * z1 * (3 * w * x1 - 2 * y1^2 * z1) - w^3
9626 var y3 = w.multiply(THREE).multiply(x1).subtract(y1sqz1.shiftLeft(1)).shiftLeft(2).multiply(y1sqz1).subtract(w.pow(3)).mod(this.curve.p)
9627 // z3 = 8 * (y1 * z1)^3
9628 var z3 = y1z1.pow(3).shiftLeft(3).mod(this.curve.p)
9629
9630 return new Point(this.curve, x3, y3, z3)
9631 }
9632
9633 // Simple NAF (Non-Adjacent Form) multiplication algorithm
9634 // TODO: modularize the multiplication algorithm
9635 Point.prototype.multiply = function(k) {
9636 if (this.curve.isInfinity(this)) return this
9637 if (k.signum() === 0) return this.curve.infinity
9638
9639 var e = k
9640 var h = e.multiply(THREE)
9641
9642 var neg = this.negate()
9643 var R = this
9644
9645 for (var i = h.bitLength() - 2; i > 0; --i) {
9646 R = R.twice()
9647
9648 var hBit = h.testBit(i)
9649 var eBit = e.testBit(i)
9650
9651 if (hBit != eBit) {
9652 R = R.add(hBit ? this : neg)
9653 }
9654 }
9655
9656 return R
9657 }
9658
9659 // Compute this*j + x*k (simultaneous multiplication)
9660 Point.prototype.multiplyTwo = function(j, x, k) {
9661 var i
9662
9663 if (j.bitLength() > k.bitLength())
9664 i = j.bitLength() - 1
9665 else
9666 i = k.bitLength() - 1
9667
9668 var R = this.curve.infinity
9669 var both = this.add(x)
9670
9671 while (i >= 0) {
9672 R = R.twice()
9673
9674 var jBit = j.testBit(i)
9675 var kBit = k.testBit(i)
9676
9677 if (jBit) {
9678 if (kBit) {
9679 R = R.add(both)
9680
9681 } else {
9682 R = R.add(this)
9683 }
9684
9685 } else {
9686 if (kBit) {
9687 R = R.add(x)
9688 }
9689 }
9690 --i
9691 }
9692
9693 return R
9694 }
9695
9696 Point.prototype.getEncoded = function(compressed) {
9697 if (compressed == undefined) compressed = this.compressed
9698 if (this.curve.isInfinity(this)) return new Buffer('00', 'hex') // Infinity point encoded is simply '00'
9699
9700 var x = this.affineX
9701 var y = this.affineY
9702
9703 var buffer
9704
9705 // Determine size of q in bytes
9706 var byteLength = Math.floor((this.curve.p.bitLength() + 7) / 8)
9707
9708 // 0x02/0x03 | X
9709 if (compressed) {
9710 buffer = new Buffer(1 + byteLength)
9711 buffer.writeUInt8(y.isEven() ? 0x02 : 0x03, 0)
9712
9713 // 0x04 | X | Y
9714 } else {
9715 buffer = new Buffer(1 + byteLength + byteLength)
9716 buffer.writeUInt8(0x04, 0)
9717
9718 y.toBuffer(byteLength).copy(buffer, 1 + byteLength)
9719 }
9720
9721 x.toBuffer(byteLength).copy(buffer, 1)
9722
9723 return buffer
9724 }
9725
9726 Point.decodeFrom = function(curve, buffer) {
9727 var type = buffer.readUInt8(0)
9728 var compressed = (type !== 4)
9729
9730 var byteLength = Math.floor((curve.p.bitLength() + 7) / 8)
9731 var x = BigInteger.fromBuffer(buffer.slice(1, 1 + byteLength))
9732
9733 var Q
9734 if (compressed) {
9735 assert.equal(buffer.length, byteLength + 1, 'Invalid sequence length')
9736 assert(type === 0x02 || type === 0x03, 'Invalid sequence tag')
9737
9738 var isOdd = (type === 0x03)
9739 Q = curve.pointFromX(isOdd, x)
9740
9741 } else {
9742 assert.equal(buffer.length, 1 + byteLength + byteLength, 'Invalid sequence length')
9743
9744 var y = BigInteger.fromBuffer(buffer.slice(1 + byteLength))
9745 Q = Point.fromAffine(curve, x, y)
9746 }
9747
9748 Q.compressed = compressed
9749 return Q
9750 }
9751
9752 Point.prototype.toString = function () {
9753 if (this.curve.isInfinity(this)) return '(INFINITY)'
9754
9755 return '(' + this.affineX.toString() + ',' + this.affineY.toString() + ')'
9756 }
9757
9758 module.exports = Point
9759
9760 }).call(this,require("buffer").Buffer)
9761 },{"assert":5,"bigi":3,"buffer":7}],52:[function(require,module,exports){
9762 (function (process,global,Buffer){
9763 'use strict';
9764
9765 var crypto = global.crypto || global.msCrypto
9766 if(crypto && crypto.getRandomValues) {
9767 module.exports = randomBytes;
9768 } else {
9769 module.exports = oldBrowser;
9770 }
9771 function randomBytes(size, cb) {
9772 var bytes = new Buffer(size); //in browserify, this is an extended Uint8Array
9773 /* This will not work in older browsers.
9774 * See https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues
9775 */
9776
9777 crypto.getRandomValues(bytes);
9778 if (typeof cb === 'function') {
9779 return process.nextTick(function () {
9780 cb(null, bytes);
9781 });
9782 }
9783 return bytes;
9784 }
9785 function oldBrowser() {
9786 throw new Error(
9787 'secure random number generation not supported by this browser\n'+
9788 'use chrome, FireFox or Internet Explorer 11'
9789 )
9790 }
9791
9792 }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer)
9793 },{"_process":14,"buffer":7}],53:[function(require,module,exports){
9794 (function (Buffer){
9795 'use strict';
9796
9797 function getFunctionName(fn) {
9798 return fn.name || fn.toString().match(/function (.*?)\s*\(/)[1];
9799 }
9800
9801 function getTypeTypeName(type) {
9802 if (nativeTypes.Function(type)) {
9803 type = type.toJSON ? type.toJSON() : getFunctionName(type);
9804 }
9805 if (nativeTypes.Object(type)) return JSON.stringify(type);
9806
9807 return type;
9808 }
9809
9810 function getValueTypeName(value) {
9811 if (nativeTypes.Null(value)) return '';
9812
9813 return getFunctionName(value.constructor);
9814 }
9815
9816 function tfErrorString(type, value) {
9817 var typeTypeName = getTypeTypeName(type);
9818 var valueTypeName = getValueTypeName(value);
9819
9820 return 'Expected ' + typeTypeName + ', got ' + (valueTypeName && valueTypeName + ' ') + JSON.stringify(value);
9821 }
9822
9823 function tfPropertyErrorString(type, name, value) {
9824 return tfErrorString('property \"' + name + '\" of type ' + getTypeTypeName(type), value);
9825 }
9826
9827 var nativeTypes = {
9828 Array: (function (_Array) {
9829 function Array(_x) {
9830 return _Array.apply(this, arguments);
9831 }
9832
9833 Array.toString = function () {
9834 return _Array.toString();
9835 };
9836
9837 return Array;
9838 })(function (value) {
9839 return value !== null && value !== undefined && value.constructor === Array;
9840 }),
9841 Boolean: function Boolean(value) {
9842 return typeof value === 'boolean';
9843 },
9844 Buffer: (function (_Buffer) {
9845 function Buffer(_x2) {
9846 return _Buffer.apply(this, arguments);
9847 }
9848
9849 Buffer.toString = function () {
9850 return _Buffer.toString();
9851 };
9852
9853 return Buffer;
9854 })(function (value) {
9855 return Buffer.isBuffer(value);
9856 }),
9857 Function: function Function(value) {
9858 return typeof value === 'function';
9859 },
9860 Null: function Null(value) {
9861 return value === undefined || value === null;
9862 },
9863 Number: function Number(value) {
9864 return typeof value === 'number';
9865 },
9866 Object: function Object(value) {
9867 return typeof value === 'object';
9868 },
9869 String: function String(value) {
9870 return typeof value === 'string';
9871 },
9872 '': function _() {
9873 return true;
9874 }
9875 };
9876
9877 function tJSON(type) {
9878 return type && type.toJSON ? type.toJSON() : type;
9879 }
9880
9881 function sJSON(type) {
9882 var json = tJSON(type);
9883 return nativeTypes.Object(json) ? JSON.stringify(json) : json;
9884 }
9885
9886 var otherTypes = {
9887 arrayOf: function arrayOf(type) {
9888 function arrayOf(value, strict) {
9889 try {
9890 return nativeTypes.Array(value) && value.every(function (x) {
9891 return typeforce(type, x, strict);
9892 });
9893 } catch (e) {
9894 return false;
9895 }
9896 }
9897 arrayOf.toJSON = function () {
9898 return [tJSON(type)];
9899 };
9900
9901 return arrayOf;
9902 },
9903
9904 maybe: function maybe(type) {
9905 function maybe(value, strict) {
9906 return nativeTypes.Null(value) || typeforce(type, value, strict);
9907 }
9908 maybe.toJSON = function () {
9909 return '?' + sJSON(type);
9910 };
9911
9912 return maybe;
9913 },
9914
9915 object: function object(type) {
9916 function object(value, strict) {
9917 typeforce(nativeTypes.Object, value, strict);
9918
9919 var propertyName, propertyType, propertyValue;
9920
9921 try {
9922 for (propertyName in type) {
9923 propertyType = type[propertyName];
9924 propertyValue = value[propertyName];
9925
9926 typeforce(propertyType, propertyValue, strict);
9927 }
9928 } catch (e) {
9929 throw new TypeError(tfPropertyErrorString(propertyType, propertyName, propertyValue));
9930 }
9931
9932 if (strict) {
9933 for (propertyName in value) {
9934 if (type[propertyName]) continue;
9935
9936 throw new TypeError('Unexpected property "' + propertyName + '"');
9937 }
9938 }
9939
9940 return true;
9941 }
9942 object.toJSON = function () {
9943 return type;
9944 };
9945
9946 return object;
9947 },
9948
9949 oneOf: function oneOf() {
9950 for (var _len = arguments.length, types = Array(_len), _key = 0; _key < _len; _key++) {
9951 types[_key] = arguments[_key];
9952 }
9953
9954 function oneOf(value, strict) {
9955 return types.some(function (type) {
9956 try {
9957 return typeforce(type, value, strict);
9958 } catch (e) {
9959 return false;
9960 }
9961 });
9962 }
9963 oneOf.toJSON = function () {
9964 return types.map(sJSON).join('|');
9965 };
9966
9967 return oneOf;
9968 },
9969
9970 quacksLike: function quacksLike(type) {
9971 function quacksLike(value, strict) {
9972 return type === getValueTypeName(value);
9973 }
9974 quacksLike.toJSON = function () {
9975 return type;
9976 };
9977
9978 return quacksLike;
9979 },
9980
9981 tuple: function tuple() {
9982 for (var _len2 = arguments.length, types = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
9983 types[_key2] = arguments[_key2];
9984 }
9985
9986 function tuple(value, strict) {
9987 return types.every(function (type, i) {
9988 return typeforce(type, value[i], strict);
9989 });
9990 }
9991 tuple.toJSON = function () {
9992 return '(' + types.map(sJSON).join(', ') + ')';
9993 };
9994
9995 return tuple;
9996 },
9997
9998 value: function value(expected) {
9999 function value(actual) {
10000 return actual === expected;
10001 }
10002 value.toJSON = function () {
10003 return expected;
10004 };
10005
10006 return value;
10007 }
10008 };
10009
10010 function compile(type) {
10011 if (nativeTypes.String(type)) {
10012 if (type[0] === '?') return otherTypes.maybe(compile(type.slice(1)));
10013
10014 return nativeTypes[type] || otherTypes.quacksLike(type);
10015 } else if (type && nativeTypes.Object(type)) {
10016 if (nativeTypes.Array(type)) return otherTypes.arrayOf(compile(type[0]));
10017
10018 var compiled = {};
10019
10020 for (var propertyName in type) {
10021 compiled[propertyName] = compile(type[propertyName]);
10022 }
10023
10024 return otherTypes.object(compiled);
10025 } else if (nativeTypes.Function(type)) {
10026 return type;
10027 }
10028
10029 return otherTypes.value(type);
10030 }
10031
10032 function typeforce(_x3, _x4, _x5) {
10033 var _again = true;
10034
10035 _function: while (_again) {
10036 var type = _x3,
10037 value = _x4,
10038 strict = _x5;
10039 _again = false;
10040
10041 if (nativeTypes.Function(type)) {
10042 if (type(value, strict)) return true;
10043
10044 throw new TypeError(tfErrorString(type, value));
10045 }
10046
10047 // JIT
10048 _x3 = compile(type);
10049 _x4 = value;
10050 _x5 = strict;
10051 _again = true;
10052 continue _function;
10053 }
10054 }
10055
10056 // assign all types to typeforce function
10057 var typeName;
10058 Object.keys(nativeTypes).forEach(function (typeName) {
10059 var nativeType = nativeTypes[typeName];
10060 nativeType.toJSON = function () {
10061 return typeName;
10062 };
10063
10064 typeforce[typeName] = nativeType;
10065 });
10066
10067 for (typeName in otherTypes) {
10068 typeforce[typeName] = otherTypes[typeName];
10069 }
10070
10071 module.exports = typeforce;
10072 module.exports.compile = compile;
10073 }).call(this,require("buffer").Buffer)
10074 },{"buffer":7}],54:[function(require,module,exports){
10075 (function (Buffer){
10076 var assert = require('assert')
10077 var base58check = require('bs58check')
10078 var typeForce = require('typeforce')
10079 var networks = require('./networks')
10080 var scripts = require('./scripts')
10081
10082 function findScriptTypeByVersion (version) {
10083 for (var networkName in networks) {
10084 var network = networks[networkName]
10085
10086 if (version === network.pubKeyHash) return 'pubkeyhash'
10087 if (version === network.scriptHash) return 'scripthash'
10088 }
10089 }
10090
10091 function Address (hash, version) {
10092 typeForce('Buffer', hash)
10093
10094 assert.strictEqual(hash.length, 20, 'Invalid hash length')
10095 assert.strictEqual(version & 0xff, version, 'Invalid version byte')
10096
10097 this.hash = hash
10098 this.version = version
10099 }
10100
10101 Address.fromBase58Check = function (string) {
10102 var payload = base58check.decode(string)
10103 var version = payload.readUInt8(0)
10104 var hash = payload.slice(1)
10105
10106 return new Address(hash, version)
10107 }
10108
10109 Address.fromOutputScript = function (script, network) {
10110 network = network || networks.bitcoin
10111
10112 if (scripts.isPubKeyHashOutput(script)) return new Address(script.chunks[2], network.pubKeyHash)
10113 if (scripts.isScriptHashOutput(script)) return new Address(script.chunks[1], network.scriptHash)
10114
10115 assert(false, script.toASM() + ' has no matching Address')
10116 }
10117
10118 Address.prototype.toBase58Check = function () {
10119 var payload = new Buffer(21)
10120 payload.writeUInt8(this.version, 0)
10121 this.hash.copy(payload, 1)
10122
10123 return base58check.encode(payload)
10124 }
10125
10126 Address.prototype.toOutputScript = function () {
10127 var scriptType = findScriptTypeByVersion(this.version)
10128
10129 if (scriptType === 'pubkeyhash') return scripts.pubKeyHashOutput(this.hash)
10130 if (scriptType === 'scripthash') return scripts.scriptHashOutput(this.hash)
10131
10132 assert(false, this.toString() + ' has no matching Script')
10133 }
10134
10135 Address.prototype.toString = Address.prototype.toBase58Check
10136
10137 module.exports = Address
10138
10139 }).call(this,require("buffer").Buffer)
10140 },{"./networks":66,"./scripts":69,"assert":5,"bs58check":31,"buffer":7,"typeforce":53}],55:[function(require,module,exports){
10141 var bs58check = require('bs58check')
10142
10143 function decode () {
10144 console.warn('bs58check will be removed in 2.0.0. require("bs58check") instead.')
10145
10146 return bs58check.decode.apply(undefined, arguments)
10147 }
10148
10149 function encode () {
10150 console.warn('bs58check will be removed in 2.0.0. require("bs58check") instead.')
10151
10152 return bs58check.encode.apply(undefined, arguments)
10153 }
10154
10155 module.exports = {
10156 decode: decode,
10157 encode: encode
10158 }
10159
10160 },{"bs58check":31}],56:[function(require,module,exports){
10161 (function (Buffer){
10162 var assert = require('assert')
10163 var bufferutils = require('./bufferutils')
10164 var crypto = require('./crypto')
10165
10166 var Transaction = require('./transaction')
10167
10168 function Block () {
10169 this.version = 1
10170 this.prevHash = null
10171 this.merkleRoot = null
10172 this.timestamp = 0
10173 this.bits = 0
10174 this.nonce = 0
10175 }
10176
10177 Block.fromBuffer = function (buffer) {
10178 assert(buffer.length >= 80, 'Buffer too small (< 80 bytes)')
10179
10180 var offset = 0
10181 function readSlice (n) {
10182 offset += n
10183 return buffer.slice(offset - n, offset)
10184 }
10185
10186 function readUInt32 () {
10187 var i = buffer.readUInt32LE(offset)
10188 offset += 4
10189 return i
10190 }
10191
10192 var block = new Block()
10193 block.version = readUInt32()
10194 block.prevHash = readSlice(32)
10195 block.merkleRoot = readSlice(32)
10196 block.timestamp = readUInt32()
10197 block.bits = readUInt32()
10198 block.nonce = readUInt32()
10199
10200 if (buffer.length === 80) return block
10201
10202 function readVarInt () {
10203 var vi = bufferutils.readVarInt(buffer, offset)
10204 offset += vi.size
10205 return vi.number
10206 }
10207
10208 // FIXME: poor performance
10209 function readTransaction () {
10210 var tx = Transaction.fromBuffer(buffer.slice(offset), true)
10211
10212 offset += tx.toBuffer().length
10213 return tx
10214 }
10215
10216 var nTransactions = readVarInt()
10217 block.transactions = []
10218
10219 for (var i = 0; i < nTransactions; ++i) {
10220 var tx = readTransaction()
10221 block.transactions.push(tx)
10222 }
10223
10224 return block
10225 }
10226
10227 Block.fromHex = function (hex) {
10228 return Block.fromBuffer(new Buffer(hex, 'hex'))
10229 }
10230
10231 Block.prototype.getHash = function () {
10232 return crypto.hash256(this.toBuffer(true))
10233 }
10234
10235 Block.prototype.getId = function () {
10236 return bufferutils.reverse(this.getHash()).toString('hex')
10237 }
10238
10239 Block.prototype.getUTCDate = function () {
10240 var date = new Date(0) // epoch
10241 date.setUTCSeconds(this.timestamp)
10242
10243 return date
10244 }
10245
10246 Block.prototype.toBuffer = function (headersOnly) {
10247 var buffer = new Buffer(80)
10248
10249 var offset = 0
10250 function writeSlice (slice) {
10251 slice.copy(buffer, offset)
10252 offset += slice.length
10253 }
10254
10255 function writeUInt32 (i) {
10256 buffer.writeUInt32LE(i, offset)
10257 offset += 4
10258 }
10259
10260 writeUInt32(this.version)
10261 writeSlice(this.prevHash)
10262 writeSlice(this.merkleRoot)
10263 writeUInt32(this.timestamp)
10264 writeUInt32(this.bits)
10265 writeUInt32(this.nonce)
10266
10267 if (headersOnly || !this.transactions) return buffer
10268
10269 var txLenBuffer = bufferutils.varIntBuffer(this.transactions.length)
10270 var txBuffers = this.transactions.map(function (tx) {
10271 return tx.toBuffer()
10272 })
10273
10274 return Buffer.concat([buffer, txLenBuffer].concat(txBuffers))
10275 }
10276
10277 Block.prototype.toHex = function (headersOnly) {
10278 return this.toBuffer(headersOnly).toString('hex')
10279 }
10280
10281 module.exports = Block
10282
10283 }).call(this,require("buffer").Buffer)
10284 },{"./bufferutils":57,"./crypto":58,"./transaction":70,"assert":5,"buffer":7}],57:[function(require,module,exports){
10285 (function (Buffer){
10286 var assert = require('assert')
10287 var opcodes = require('./opcodes')
10288
10289 // https://github.com/feross/buffer/blob/master/index.js#L1127
10290 function verifuint (value, max) {
10291 assert(typeof value === 'number', 'cannot write a non-number as a number')
10292 assert(value >= 0, 'specified a negative value for writing an unsigned value')
10293 assert(value <= max, 'value is larger than maximum value for type')
10294 assert(Math.floor(value) === value, 'value has a fractional component')
10295 }
10296
10297 function pushDataSize (i) {
10298 return i < opcodes.OP_PUSHDATA1 ? 1
10299 : i < 0xff ? 2
10300 : i < 0xffff ? 3
10301 : 5
10302 }
10303
10304 function readPushDataInt (buffer, offset) {
10305 var opcode = buffer.readUInt8(offset)
10306 var number, size
10307
10308 // ~6 bit
10309 if (opcode < opcodes.OP_PUSHDATA1) {
10310 number = opcode
10311 size = 1
10312
10313 // 8 bit
10314 } else if (opcode === opcodes.OP_PUSHDATA1) {
10315 if (offset + 2 > buffer.length) return null
10316 number = buffer.readUInt8(offset + 1)
10317 size = 2
10318
10319 // 16 bit
10320 } else if (opcode === opcodes.OP_PUSHDATA2) {
10321 if (offset + 3 > buffer.length) return null
10322 number = buffer.readUInt16LE(offset + 1)
10323 size = 3
10324
10325 // 32 bit
10326 } else {
10327 if (offset + 5 > buffer.length) return null
10328 assert.equal(opcode, opcodes.OP_PUSHDATA4, 'Unexpected opcode')
10329
10330 number = buffer.readUInt32LE(offset + 1)
10331 size = 5
10332 }
10333
10334 return {
10335 opcode: opcode,
10336 number: number,
10337 size: size
10338 }
10339 }
10340
10341 function readUInt64LE (buffer, offset) {
10342 var a = buffer.readUInt32LE(offset)
10343 var b = buffer.readUInt32LE(offset + 4)
10344 b *= 0x100000000
10345
10346 verifuint(b + a, 0x001fffffffffffff)
10347
10348 return b + a
10349 }
10350
10351 function readVarInt (buffer, offset) {
10352 var t = buffer.readUInt8(offset)
10353 var number, size
10354
10355 // 8 bit
10356 if (t < 253) {
10357 number = t
10358 size = 1
10359
10360 // 16 bit
10361 } else if (t < 254) {
10362 number = buffer.readUInt16LE(offset + 1)
10363 size = 3
10364
10365 // 32 bit
10366 } else if (t < 255) {
10367 number = buffer.readUInt32LE(offset + 1)
10368 size = 5
10369
10370 // 64 bit
10371 } else {
10372 number = readUInt64LE(buffer, offset + 1)
10373 size = 9
10374 }
10375
10376 return {
10377 number: number,
10378 size: size
10379 }
10380 }
10381
10382 function writePushDataInt (buffer, number, offset) {
10383 var size = pushDataSize(number)
10384
10385 // ~6 bit
10386 if (size === 1) {
10387 buffer.writeUInt8(number, offset)
10388
10389 // 8 bit
10390 } else if (size === 2) {
10391 buffer.writeUInt8(opcodes.OP_PUSHDATA1, offset)
10392 buffer.writeUInt8(number, offset + 1)
10393
10394 // 16 bit
10395 } else if (size === 3) {
10396 buffer.writeUInt8(opcodes.OP_PUSHDATA2, offset)
10397 buffer.writeUInt16LE(number, offset + 1)
10398
10399 // 32 bit
10400 } else {
10401 buffer.writeUInt8(opcodes.OP_PUSHDATA4, offset)
10402 buffer.writeUInt32LE(number, offset + 1)
10403 }
10404
10405 return size
10406 }
10407
10408 function writeUInt64LE (buffer, value, offset) {
10409 verifuint(value, 0x001fffffffffffff)
10410
10411 buffer.writeInt32LE(value & -1, offset)
10412 buffer.writeUInt32LE(Math.floor(value / 0x100000000), offset + 4)
10413 }
10414
10415 function varIntSize (i) {
10416 return i < 253 ? 1
10417 : i < 0x10000 ? 3
10418 : i < 0x100000000 ? 5
10419 : 9
10420 }
10421
10422 function writeVarInt (buffer, number, offset) {
10423 var size = varIntSize(number)
10424
10425 // 8 bit
10426 if (size === 1) {
10427 buffer.writeUInt8(number, offset)
10428
10429 // 16 bit
10430 } else if (size === 3) {
10431 buffer.writeUInt8(253, offset)
10432 buffer.writeUInt16LE(number, offset + 1)
10433
10434 // 32 bit
10435 } else if (size === 5) {
10436 buffer.writeUInt8(254, offset)
10437 buffer.writeUInt32LE(number, offset + 1)
10438
10439 // 64 bit
10440 } else {
10441 buffer.writeUInt8(255, offset)
10442 writeUInt64LE(buffer, number, offset + 1)
10443 }
10444
10445 return size
10446 }
10447
10448 function varIntBuffer (i) {
10449 var size = varIntSize(i)
10450 var buffer = new Buffer(size)
10451 writeVarInt(buffer, i, 0)
10452
10453 return buffer
10454 }
10455
10456 function reverse (buffer) {
10457 var buffer2 = new Buffer(buffer)
10458 Array.prototype.reverse.call(buffer2)
10459 return buffer2
10460 }
10461
10462 module.exports = {
10463 pushDataSize: pushDataSize,
10464 readPushDataInt: readPushDataInt,
10465 readUInt64LE: readUInt64LE,
10466 readVarInt: readVarInt,
10467 reverse: reverse,
10468 varIntBuffer: varIntBuffer,
10469 varIntSize: varIntSize,
10470 writePushDataInt: writePushDataInt,
10471 writeUInt64LE: writeUInt64LE,
10472 writeVarInt: writeVarInt
10473 }
10474
10475 }).call(this,require("buffer").Buffer)
10476 },{"./opcodes":67,"assert":5,"buffer":7}],58:[function(require,module,exports){
10477 var createHash = require('create-hash')
10478
10479 function hash160 (buffer) {
10480 return ripemd160(sha256(buffer))
10481 }
10482
10483 function hash256 (buffer) {
10484 return sha256(sha256(buffer))
10485 }
10486
10487 function ripemd160 (buffer) {
10488 return createHash('rmd160').update(buffer).digest()
10489 }
10490
10491 function sha1 (buffer) {
10492 return createHash('sha1').update(buffer).digest()
10493 }
10494
10495 function sha256 (buffer) {
10496 return createHash('sha256').update(buffer).digest()
10497 }
10498
10499 // FIXME: Name not consistent with others
10500 var createHmac = require('create-hmac')
10501
10502 function HmacSHA256 (buffer, secret) {
10503 console.warn('Hmac* functions are deprecated for removal in 2.0.0, use node crypto instead')
10504 return createHmac('sha256', secret).update(buffer).digest()
10505 }
10506
10507 function HmacSHA512 (buffer, secret) {
10508 console.warn('Hmac* functions are deprecated for removal in 2.0.0, use node crypto instead')
10509 return createHmac('sha512', secret).update(buffer).digest()
10510 }
10511
10512 module.exports = {
10513 ripemd160: ripemd160,
10514 sha1: sha1,
10515 sha256: sha256,
10516 hash160: hash160,
10517 hash256: hash256,
10518 HmacSHA256: HmacSHA256,
10519 HmacSHA512: HmacSHA512
10520 }
10521
10522 },{"create-hash":32,"create-hmac":45}],59:[function(require,module,exports){
10523 (function (Buffer){
10524 var assert = require('assert')
10525 var createHmac = require('create-hmac')
10526 var typeForce = require('typeforce')
10527
10528 var BigInteger = require('bigi')
10529 var ECSignature = require('./ecsignature')
10530
10531 var ZERO = new Buffer([0])
10532 var ONE = new Buffer([1])
10533
10534 // https://tools.ietf.org/html/rfc6979#section-3.2
10535 function deterministicGenerateK (curve, hash, d, checkSig) {
10536 typeForce('Buffer', hash)
10537 typeForce('BigInteger', d)
10538
10539 // FIXME: remove/uncomment for 2.0.0
10540 // typeForce('Function', checkSig)
10541
10542 if (typeof checkSig !== 'function') {
10543 console.warn('deterministicGenerateK requires a checkSig callback in 2.0.0, see #337 for more information')
10544
10545 checkSig = function (k) {
10546 var G = curve.G
10547 var n = curve.n
10548 var e = BigInteger.fromBuffer(hash)
10549
10550 var Q = G.multiply(k)
10551
10552 if (curve.isInfinity(Q))
10553 return false
10554
10555 var r = Q.affineX.mod(n)
10556 if (r.signum() === 0)
10557 return false
10558
10559 var s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n)
10560 if (s.signum() === 0)
10561 return false
10562
10563 return true
10564 }
10565 }
10566
10567 // sanity check
10568 assert.equal(hash.length, 32, 'Hash must be 256 bit')
10569
10570 var x = d.toBuffer(32)
10571 var k = new Buffer(32)
10572 var v = new Buffer(32)
10573
10574 // Step A, ignored as hash already provided
10575 // Step B
10576 v.fill(1)
10577
10578 // Step C
10579 k.fill(0)
10580
10581 // Step D
10582 k = createHmac('sha256', k)
10583 .update(v)
10584 .update(ZERO)
10585 .update(x)
10586 .update(hash)
10587 .digest()
10588
10589 // Step E
10590 v = createHmac('sha256', k).update(v).digest()
10591
10592 // Step F
10593 k = createHmac('sha256', k)
10594 .update(v)
10595 .update(ONE)
10596 .update(x)
10597 .update(hash)
10598 .digest()
10599
10600 // Step G
10601 v = createHmac('sha256', k).update(v).digest()
10602
10603 // Step H1/H2a, ignored as tlen === qlen (256 bit)
10604 // Step H2b
10605 v = createHmac('sha256', k).update(v).digest()
10606
10607 var T = BigInteger.fromBuffer(v)
10608
10609 // Step H3, repeat until T is within the interval [1, n - 1] and is suitable for ECDSA
10610 while ((T.signum() <= 0) || (T.compareTo(curve.n) >= 0) || !checkSig(T)) {
10611 k = createHmac('sha256', k)
10612 .update(v)
10613 .update(ZERO)
10614 .digest()
10615
10616 v = createHmac('sha256', k).update(v).digest()
10617
10618 // Step H1/H2a, again, ignored as tlen === qlen (256 bit)
10619 // Step H2b again
10620 v = createHmac('sha256', k).update(v).digest()
10621 T = BigInteger.fromBuffer(v)
10622 }
10623
10624 return T
10625 }
10626
10627 function sign (curve, hash, d) {
10628 var r, s
10629
10630 var e = BigInteger.fromBuffer(hash)
10631 var n = curve.n
10632 var G = curve.G
10633
10634 deterministicGenerateK(curve, hash, d, function (k) {
10635 var Q = G.multiply(k)
10636
10637 if (curve.isInfinity(Q))
10638 return false
10639
10640 r = Q.affineX.mod(n)
10641 if (r.signum() === 0)
10642 return false
10643
10644 s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n)
10645 if (s.signum() === 0)
10646 return false
10647
10648 return true
10649 })
10650
10651 var N_OVER_TWO = n.shiftRight(1)
10652
10653 // enforce low S values, see bip62: 'low s values in signatures'
10654 if (s.compareTo(N_OVER_TWO) > 0) {
10655 s = n.subtract(s)
10656 }
10657
10658 return new ECSignature(r, s)
10659 }
10660
10661 function verifyRaw (curve, e, signature, Q) {
10662 var n = curve.n
10663 var G = curve.G
10664
10665 var r = signature.r
10666 var s = signature.s
10667
10668 // 1.4.1 Enforce r and s are both integers in the interval [1, n − 1]
10669 if (r.signum() <= 0 || r.compareTo(n) >= 0) return false
10670 if (s.signum() <= 0 || s.compareTo(n) >= 0) return false
10671
10672 // c = s^-1 mod n
10673 var c = s.modInverse(n)
10674
10675 // 1.4.4 Compute u1 = es^−1 mod n
10676 // u2 = rs^−1 mod n
10677 var u1 = e.multiply(c).mod(n)
10678 var u2 = r.multiply(c).mod(n)
10679
10680 // 1.4.5 Compute R = (xR, yR) = u1G + u2Q
10681 var R = G.multiplyTwo(u1, Q, u2)
10682 var v = R.affineX.mod(n)
10683
10684 // 1.4.5 (cont.) Enforce R is not at infinity
10685 if (curve.isInfinity(R)) return false
10686
10687 // 1.4.8 If v = r, output "valid", and if v != r, output "invalid"
10688 return v.equals(r)
10689 }
10690
10691 function verify (curve, hash, signature, Q) {
10692 // 1.4.2 H = Hash(M), already done by the user
10693 // 1.4.3 e = H
10694 var e = BigInteger.fromBuffer(hash)
10695
10696 return verifyRaw(curve, e, signature, Q)
10697 }
10698
10699 /**
10700 * Recover a public key from a signature.
10701 *
10702 * See SEC 1: Elliptic Curve Cryptography, section 4.1.6, "Public
10703 * Key Recovery Operation".
10704 *
10705 * http://www.secg.org/download/aid-780/sec1-v2.pdf
10706 */
10707 function recoverPubKey (curve, e, signature, i) {
10708 assert.strictEqual(i & 3, i, 'Recovery param is more than two bits')
10709
10710 var n = curve.n
10711 var G = curve.G
10712
10713 var r = signature.r
10714 var s = signature.s
10715
10716 assert(r.signum() > 0 && r.compareTo(n) < 0, 'Invalid r value')
10717 assert(s.signum() > 0 && s.compareTo(n) < 0, 'Invalid s value')
10718
10719 // A set LSB signifies that the y-coordinate is odd
10720 var isYOdd = i & 1
10721
10722 // The more significant bit specifies whether we should use the
10723 // first or second candidate key.
10724 var isSecondKey = i >> 1
10725
10726 // 1.1 Let x = r + jn
10727 var x = isSecondKey ? r.add(n) : r
10728 var R = curve.pointFromX(isYOdd, x)
10729
10730 // 1.4 Check that nR is at infinity
10731 var nR = R.multiply(n)
10732 assert(curve.isInfinity(nR), 'nR is not a valid curve point')
10733
10734 // Compute -e from e
10735 var eNeg = e.negate().mod(n)
10736
10737 // 1.6.1 Compute Q = r^-1 (sR - eG)
10738 // Q = r^-1 (sR + -eG)
10739 var rInv = r.modInverse(n)
10740
10741 var Q = R.multiplyTwo(s, G, eNeg).multiply(rInv)
10742 curve.validate(Q)
10743
10744 return Q
10745 }
10746
10747 /**
10748 * Calculate pubkey extraction parameter.
10749 *
10750 * When extracting a pubkey from a signature, we have to
10751 * distinguish four different cases. Rather than putting this
10752 * burden on the verifier, Bitcoin includes a 2-bit value with the
10753 * signature.
10754 *
10755 * This function simply tries all four cases and returns the value
10756 * that resulted in a successful pubkey recovery.
10757 */
10758 function calcPubKeyRecoveryParam (curve, e, signature, Q) {
10759 for (var i = 0; i < 4; i++) {
10760 var Qprime = recoverPubKey(curve, e, signature, i)
10761
10762 // 1.6.2 Verify Q
10763 if (Qprime.equals(Q)) {
10764 return i
10765 }
10766 }
10767
10768 throw new Error('Unable to find valid recovery factor')
10769 }
10770
10771 module.exports = {
10772 calcPubKeyRecoveryParam: calcPubKeyRecoveryParam,
10773 deterministicGenerateK: deterministicGenerateK,
10774 recoverPubKey: recoverPubKey,
10775 sign: sign,
10776 verify: verify,
10777 verifyRaw: verifyRaw
10778 }
10779
10780 }).call(this,require("buffer").Buffer)
10781 },{"./ecsignature":62,"assert":5,"bigi":3,"buffer":7,"create-hmac":45,"typeforce":53}],60:[function(require,module,exports){
10782 (function (Buffer){
10783 var assert = require('assert')
10784 var base58check = require('bs58check')
10785 var ecdsa = require('./ecdsa')
10786 var networks = require('./networks')
10787 var randomBytes = require('randombytes')
10788 var typeForce = require('typeforce')
10789
10790 var BigInteger = require('bigi')
10791 var ECPubKey = require('./ecpubkey')
10792
10793 var ecurve = require('ecurve')
10794 var secp256k1 = ecurve.getCurveByName('secp256k1')
10795
10796 function ECKey (d, compressed) {
10797 assert(d.signum() > 0, 'Private key must be greater than 0')
10798 assert(d.compareTo(ECKey.curve.n) < 0, 'Private key must be less than the curve order')
10799
10800 var Q = ECKey.curve.G.multiply(d)
10801
10802 this.d = d
10803 this.pub = new ECPubKey(Q, compressed)
10804 }
10805
10806 // Constants
10807 ECKey.curve = secp256k1
10808
10809 // Static constructors
10810 ECKey.fromWIF = function (string) {
10811 var payload = base58check.decode(string)
10812 var compressed = false
10813
10814 // Ignore the version byte
10815 payload = payload.slice(1)
10816
10817 if (payload.length === 33) {
10818 assert.strictEqual(payload[32], 0x01, 'Invalid compression flag')
10819
10820 // Truncate the compression flag
10821 payload = payload.slice(0, -1)
10822 compressed = true
10823 }
10824
10825 assert.equal(payload.length, 32, 'Invalid WIF payload length')
10826
10827 var d = BigInteger.fromBuffer(payload)
10828 return new ECKey(d, compressed)
10829 }
10830
10831 ECKey.makeRandom = function (compressed, rng) {
10832 rng = rng || randomBytes
10833
10834 var buffer = rng(32)
10835 typeForce('Buffer', buffer)
10836 assert.equal(buffer.length, 32, 'Expected 256-bit Buffer from RNG')
10837
10838 var d = BigInteger.fromBuffer(buffer)
10839 d = d.mod(ECKey.curve.n)
10840
10841 return new ECKey(d, compressed)
10842 }
10843
10844 // Export functions
10845 ECKey.prototype.toWIF = function (network) {
10846 network = network || networks.bitcoin
10847
10848 var bufferLen = this.pub.compressed ? 34 : 33
10849 var buffer = new Buffer(bufferLen)
10850
10851 buffer.writeUInt8(network.wif, 0)
10852 this.d.toBuffer(32).copy(buffer, 1)
10853
10854 if (this.pub.compressed) {
10855 buffer.writeUInt8(0x01, 33)
10856 }
10857
10858 return base58check.encode(buffer)
10859 }
10860
10861 // Operations
10862 ECKey.prototype.sign = function (hash) {
10863 return ecdsa.sign(ECKey.curve, hash, this.d)
10864 }
10865
10866 module.exports = ECKey
10867
10868 }).call(this,require("buffer").Buffer)
10869 },{"./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){
10870 (function (Buffer){
10871 var crypto = require('./crypto')
10872 var ecdsa = require('./ecdsa')
10873 var typeForce = require('typeforce')
10874 var networks = require('./networks')
10875
10876 var Address = require('./address')
10877
10878 var ecurve = require('ecurve')
10879 var secp256k1 = ecurve.getCurveByName('secp256k1')
10880
10881 function ECPubKey (Q, compressed) {
10882 if (compressed === undefined) {
10883 compressed = true
10884 }
10885
10886 typeForce('Point', Q)
10887 typeForce('Boolean', compressed)
10888
10889 this.compressed = compressed
10890 this.Q = Q
10891 }
10892
10893 // Constants
10894 ECPubKey.curve = secp256k1
10895
10896 // Static constructors
10897 ECPubKey.fromBuffer = function (buffer) {
10898 var Q = ecurve.Point.decodeFrom(ECPubKey.curve, buffer)
10899 return new ECPubKey(Q, Q.compressed)
10900 }
10901
10902 ECPubKey.fromHex = function (hex) {
10903 return ECPubKey.fromBuffer(new Buffer(hex, 'hex'))
10904 }
10905
10906 // Operations
10907 ECPubKey.prototype.getAddress = function (network) {
10908 network = network || networks.bitcoin
10909
10910 return new Address(crypto.hash160(this.toBuffer()), network.pubKeyHash)
10911 }
10912
10913 ECPubKey.prototype.verify = function (hash, signature) {
10914 return ecdsa.verify(ECPubKey.curve, hash, signature, this.Q)
10915 }
10916
10917 // Export functions
10918 ECPubKey.prototype.toBuffer = function () {
10919 return this.Q.getEncoded(this.compressed)
10920 }
10921
10922 ECPubKey.prototype.toHex = function () {
10923 return this.toBuffer().toString('hex')
10924 }
10925
10926 module.exports = ECPubKey
10927
10928 }).call(this,require("buffer").Buffer)
10929 },{"./address":54,"./crypto":58,"./ecdsa":59,"./networks":66,"buffer":7,"ecurve":49,"typeforce":53}],62:[function(require,module,exports){
10930 (function (Buffer){
10931 var assert = require('assert')
10932 var typeForce = require('typeforce')
10933
10934 var BigInteger = require('bigi')
10935
10936 function ECSignature (r, s) {
10937 typeForce('BigInteger', r)
10938 typeForce('BigInteger', s)
10939
10940 this.r = r
10941 this.s = s
10942 }
10943
10944 ECSignature.parseCompact = function (buffer) {
10945 assert.equal(buffer.length, 65, 'Invalid signature length')
10946 var i = buffer.readUInt8(0) - 27
10947
10948 // At most 3 bits
10949 assert.equal(i, i & 7, 'Invalid signature parameter')
10950 var compressed = !!(i & 4)
10951
10952 // Recovery param only
10953 i = i & 3
10954
10955 var r = BigInteger.fromBuffer(buffer.slice(1, 33))
10956 var s = BigInteger.fromBuffer(buffer.slice(33))
10957
10958 return {
10959 compressed: compressed,
10960 i: i,
10961 signature: new ECSignature(r, s)
10962 }
10963 }
10964
10965 ECSignature.fromDER = function (buffer) {
10966 assert.equal(buffer.readUInt8(0), 0x30, 'Not a DER sequence')
10967 assert.equal(buffer.readUInt8(1), buffer.length - 2, 'Invalid sequence length')
10968 assert.equal(buffer.readUInt8(2), 0x02, 'Expected a DER integer')
10969
10970 var rLen = buffer.readUInt8(3)
10971 assert(rLen > 0, 'R length is zero')
10972
10973 var offset = 4 + rLen
10974 assert.equal(buffer.readUInt8(offset), 0x02, 'Expected a DER integer (2)')
10975
10976 var sLen = buffer.readUInt8(offset + 1)
10977 assert(sLen > 0, 'S length is zero')
10978
10979 var rB = buffer.slice(4, offset)
10980 var sB = buffer.slice(offset + 2)
10981 offset += 2 + sLen
10982
10983 if (rLen > 1 && rB.readUInt8(0) === 0x00) {
10984 assert(rB.readUInt8(1) & 0x80, 'R value excessively padded')
10985 }
10986
10987 if (sLen > 1 && sB.readUInt8(0) === 0x00) {
10988 assert(sB.readUInt8(1) & 0x80, 'S value excessively padded')
10989 }
10990
10991 assert.equal(offset, buffer.length, 'Invalid DER encoding')
10992 var r = BigInteger.fromDERInteger(rB)
10993 var s = BigInteger.fromDERInteger(sB)
10994
10995 assert(r.signum() >= 0, 'R value is negative')
10996 assert(s.signum() >= 0, 'S value is negative')
10997
10998 return new ECSignature(r, s)
10999 }
11000
11001 // BIP62: 1 byte hashType flag (only 0x01, 0x02, 0x03, 0x81, 0x82 and 0x83 are allowed)
11002 ECSignature.parseScriptSignature = function (buffer) {
11003 var hashType = buffer.readUInt8(buffer.length - 1)
11004 var hashTypeMod = hashType & ~0x80
11005
11006 assert(hashTypeMod > 0x00 && hashTypeMod < 0x04, 'Invalid hashType ' + hashType)
11007
11008 return {
11009 signature: ECSignature.fromDER(buffer.slice(0, -1)),
11010 hashType: hashType
11011 }
11012 }
11013
11014 ECSignature.prototype.toCompact = function (i, compressed) {
11015 if (compressed) {
11016 i += 4
11017 }
11018
11019 i += 27
11020
11021 var buffer = new Buffer(65)
11022 buffer.writeUInt8(i, 0)
11023
11024 this.r.toBuffer(32).copy(buffer, 1)
11025 this.s.toBuffer(32).copy(buffer, 33)
11026
11027 return buffer
11028 }
11029
11030 ECSignature.prototype.toDER = function () {
11031 var rBa = this.r.toDERInteger()
11032 var sBa = this.s.toDERInteger()
11033
11034 var sequence = []
11035
11036 // INTEGER
11037 sequence.push(0x02, rBa.length)
11038 sequence = sequence.concat(rBa)
11039
11040 // INTEGER
11041 sequence.push(0x02, sBa.length)
11042 sequence = sequence.concat(sBa)
11043
11044 // SEQUENCE
11045 sequence.unshift(0x30, sequence.length)
11046
11047 return new Buffer(sequence)
11048 }
11049
11050 ECSignature.prototype.toScriptSignature = function (hashType) {
11051 var hashTypeMod = hashType & ~0x80
11052 assert(hashTypeMod > 0x00 && hashTypeMod < 0x04, 'Invalid hashType ' + hashType)
11053
11054 var hashTypeBuffer = new Buffer(1)
11055 hashTypeBuffer.writeUInt8(hashType, 0)
11056
11057 return Buffer.concat([this.toDER(), hashTypeBuffer])
11058 }
11059
11060 module.exports = ECSignature
11061
11062 }).call(this,require("buffer").Buffer)
11063 },{"assert":5,"bigi":3,"buffer":7,"typeforce":53}],63:[function(require,module,exports){
11064 (function (Buffer){
11065 var assert = require('assert')
11066 var base58check = require('bs58check')
11067 var bcrypto = require('./crypto')
11068 var createHmac = require('create-hmac')
11069 var typeForce = require('typeforce')
11070 var networks = require('./networks')
11071
11072 var BigInteger = require('bigi')
11073 var ECKey = require('./eckey')
11074 var ECPubKey = require('./ecpubkey')
11075
11076 var ecurve = require('ecurve')
11077 var curve = ecurve.getCurveByName('secp256k1')
11078
11079 function findBIP32NetworkByVersion (version) {
11080 for (var name in networks) {
11081 var network = networks[name]
11082
11083 if (version === network.bip32.private || version === network.bip32.public) {
11084 return network
11085 }
11086 }
11087
11088 assert(false, 'Could not find network for ' + version.toString(16))
11089 }
11090
11091 function HDNode (K, chainCode, network) {
11092 network = network || networks.bitcoin
11093
11094 typeForce('Buffer', chainCode)
11095
11096 assert.equal(chainCode.length, 32, 'Expected chainCode length of 32, got ' + chainCode.length)
11097 assert(network.bip32, 'Unknown BIP32 constants for network')
11098
11099 this.chainCode = chainCode
11100 this.depth = 0
11101 this.index = 0
11102 this.parentFingerprint = 0x00000000
11103 this.network = network
11104
11105 if (K instanceof BigInteger) {
11106 this.privKey = new ECKey(K, true)
11107 this.pubKey = this.privKey.pub
11108 } else if (K instanceof ECKey) {
11109 assert(K.pub.compressed, 'ECKey must be compressed')
11110 this.privKey = K
11111 this.pubKey = K.pub
11112 } else if (K instanceof ECPubKey) {
11113 assert(K.compressed, 'ECPubKey must be compressed')
11114 this.pubKey = K
11115 } else {
11116 this.pubKey = new ECPubKey(K, true)
11117 }
11118 }
11119
11120 HDNode.MASTER_SECRET = new Buffer('Bitcoin seed')
11121 HDNode.HIGHEST_BIT = 0x80000000
11122 HDNode.LENGTH = 78
11123
11124 HDNode.fromSeedBuffer = function (seed, network) {
11125 typeForce('Buffer', seed)
11126
11127 assert(seed.length >= 16, 'Seed should be at least 128 bits')
11128 assert(seed.length <= 64, 'Seed should be at most 512 bits')
11129
11130 var I = createHmac('sha512', HDNode.MASTER_SECRET).update(seed).digest()
11131 var IL = I.slice(0, 32)
11132 var IR = I.slice(32)
11133
11134 // In case IL is 0 or >= n, the master key is invalid
11135 // This is handled by `new ECKey` in the HDNode constructor
11136 var pIL = BigInteger.fromBuffer(IL)
11137
11138 return new HDNode(pIL, IR, network)
11139 }
11140
11141 HDNode.fromSeedHex = function (hex, network) {
11142 return HDNode.fromSeedBuffer(new Buffer(hex, 'hex'), network)
11143 }
11144
11145 HDNode.fromBase58 = function (string, network) {
11146 return HDNode.fromBuffer(base58check.decode(string), network, true)
11147 }
11148
11149 // FIXME: remove in 2.x.y
11150 HDNode.fromBuffer = function (buffer, network, __ignoreDeprecation) {
11151 if (!__ignoreDeprecation) {
11152 console.warn('HDNode.fromBuffer() is deprecated for removal in 2.x.y, use fromBase58 instead')
11153 }
11154
11155 assert.strictEqual(buffer.length, HDNode.LENGTH, 'Invalid buffer length')
11156
11157 // 4 byte: version bytes
11158 var version = buffer.readUInt32BE(0)
11159
11160 if (network) {
11161 assert(version === network.bip32.private || version === network.bip32.public, "Network doesn't match")
11162
11163 // auto-detect
11164 } else {
11165 network = findBIP32NetworkByVersion(version)
11166 }
11167
11168 // 1 byte: depth: 0x00 for master nodes, 0x01 for level-1 descendants, ...
11169 var depth = buffer.readUInt8(4)
11170
11171 // 4 bytes: the fingerprint of the parent's key (0x00000000 if master key)
11172 var parentFingerprint = buffer.readUInt32BE(5)
11173 if (depth === 0) {
11174 assert.strictEqual(parentFingerprint, 0x00000000, 'Invalid parent fingerprint')
11175 }
11176
11177 // 4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
11178 // This is encoded in MSB order. (0x00000000 if master key)
11179 var index = buffer.readUInt32BE(9)
11180 assert(depth > 0 || index === 0, 'Invalid index')
11181
11182 // 32 bytes: the chain code
11183 var chainCode = buffer.slice(13, 45)
11184 var data, hd
11185
11186 // 33 bytes: private key data (0x00 + k)
11187 if (version === network.bip32.private) {
11188 assert.strictEqual(buffer.readUInt8(45), 0x00, 'Invalid private key')
11189 data = buffer.slice(46, 78)
11190 var d = BigInteger.fromBuffer(data)
11191 hd = new HDNode(d, chainCode, network)
11192
11193 // 33 bytes: public key data (0x02 + X or 0x03 + X)
11194 } else {
11195 data = buffer.slice(45, 78)
11196 var Q = ecurve.Point.decodeFrom(curve, data)
11197 assert.equal(Q.compressed, true, 'Invalid public key')
11198
11199 // Verify that the X coordinate in the public point corresponds to a point on the curve.
11200 // If not, the extended public key is invalid.
11201 curve.validate(Q)
11202
11203 hd = new HDNode(Q, chainCode, network)
11204 }
11205
11206 hd.depth = depth
11207 hd.index = index
11208 hd.parentFingerprint = parentFingerprint
11209
11210 return hd
11211 }
11212
11213 // FIXME: remove in 2.x.y
11214 HDNode.fromHex = function (hex, network) {
11215 return HDNode.fromBuffer(new Buffer(hex, 'hex'), network)
11216 }
11217
11218 HDNode.prototype.getIdentifier = function () {
11219 return bcrypto.hash160(this.pubKey.toBuffer())
11220 }
11221
11222 HDNode.prototype.getFingerprint = function () {
11223 return this.getIdentifier().slice(0, 4)
11224 }
11225
11226 HDNode.prototype.getAddress = function () {
11227 return this.pubKey.getAddress(this.network)
11228 }
11229
11230 HDNode.prototype.neutered = function () {
11231 var neutered = new HDNode(this.pubKey.Q, this.chainCode, this.network)
11232 neutered.depth = this.depth
11233 neutered.index = this.index
11234 neutered.parentFingerprint = this.parentFingerprint
11235
11236 return neutered
11237 }
11238
11239 HDNode.prototype.toBase58 = function (isPrivate) {
11240 return base58check.encode(this.toBuffer(isPrivate, true))
11241 }
11242
11243 // FIXME: remove in 2.x.y
11244 HDNode.prototype.toBuffer = function (isPrivate, __ignoreDeprecation) {
11245 if (isPrivate === undefined) {
11246 isPrivate = !!this.privKey
11247
11248 // FIXME: remove in 2.x.y
11249 } else {
11250 console.warn('isPrivate flag is deprecated, please use the .neutered() method instead')
11251 }
11252
11253 if (!__ignoreDeprecation) {
11254 console.warn('HDNode.toBuffer() is deprecated for removal in 2.x.y, use toBase58 instead')
11255 }
11256
11257 // Version
11258 var version = isPrivate ? this.network.bip32.private : this.network.bip32.public
11259 var buffer = new Buffer(HDNode.LENGTH)
11260
11261 // 4 bytes: version bytes
11262 buffer.writeUInt32BE(version, 0)
11263
11264 // Depth
11265 // 1 byte: depth: 0x00 for master nodes, 0x01 for level-1 descendants, ....
11266 buffer.writeUInt8(this.depth, 4)
11267
11268 // 4 bytes: the fingerprint of the parent's key (0x00000000 if master key)
11269 buffer.writeUInt32BE(this.parentFingerprint, 5)
11270
11271 // 4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
11272 // This is encoded in Big endian. (0x00000000 if master key)
11273 buffer.writeUInt32BE(this.index, 9)
11274
11275 // 32 bytes: the chain code
11276 this.chainCode.copy(buffer, 13)
11277
11278 // 33 bytes: the public key or private key data
11279 if (isPrivate) {
11280 // FIXME: remove in 2.x.y
11281 assert(this.privKey, 'Missing private key')
11282
11283 // 0x00 + k for private keys
11284 buffer.writeUInt8(0, 45)
11285 this.privKey.d.toBuffer(32).copy(buffer, 46)
11286 } else {
11287 // X9.62 encoding for public keys
11288 this.pubKey.toBuffer().copy(buffer, 45)
11289 }
11290
11291 return buffer
11292 }
11293
11294 // FIXME: remove in 2.x.y
11295 HDNode.prototype.toHex = function (isPrivate) {
11296 return this.toBuffer(isPrivate).toString('hex')
11297 }
11298
11299 // https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#child-key-derivation-ckd-functions
11300 HDNode.prototype.derive = function (index) {
11301 var isHardened = index >= HDNode.HIGHEST_BIT
11302 var indexBuffer = new Buffer(4)
11303 indexBuffer.writeUInt32BE(index, 0)
11304
11305 var data
11306
11307 // Hardened child
11308 if (isHardened) {
11309 assert(this.privKey, 'Could not derive hardened child key')
11310
11311 // data = 0x00 || ser256(kpar) || ser32(index)
11312 data = Buffer.concat([
11313 this.privKey.d.toBuffer(33),
11314 indexBuffer
11315 ])
11316
11317 // Normal child
11318 } else {
11319 // data = serP(point(kpar)) || ser32(index)
11320 // = serP(Kpar) || ser32(index)
11321 data = Buffer.concat([
11322 this.pubKey.toBuffer(),
11323 indexBuffer
11324 ])
11325 }
11326
11327 var I = createHmac('sha512', this.chainCode).update(data).digest()
11328 var IL = I.slice(0, 32)
11329 var IR = I.slice(32)
11330
11331 var pIL = BigInteger.fromBuffer(IL)
11332
11333 // In case parse256(IL) >= n, proceed with the next value for i
11334 if (pIL.compareTo(curve.n) >= 0) {
11335 return this.derive(index + 1)
11336 }
11337
11338 // Private parent key -> private child key
11339 var hd
11340 if (this.privKey) {
11341 // ki = parse256(IL) + kpar (mod n)
11342 var ki = pIL.add(this.privKey.d).mod(curve.n)
11343
11344 // In case ki == 0, proceed with the next value for i
11345 if (ki.signum() === 0) {
11346 return this.derive(index + 1)
11347 }
11348
11349 hd = new HDNode(ki, IR, this.network)
11350
11351 // Public parent key -> public child key
11352 } else {
11353 // Ki = point(parse256(IL)) + Kpar
11354 // = G*IL + Kpar
11355 var Ki = curve.G.multiply(pIL).add(this.pubKey.Q)
11356
11357 // In case Ki is the point at infinity, proceed with the next value for i
11358 if (curve.isInfinity(Ki)) {
11359 return this.derive(index + 1)
11360 }
11361
11362 hd = new HDNode(Ki, IR, this.network)
11363 }
11364
11365 hd.depth = this.depth + 1
11366 hd.index = index
11367 hd.parentFingerprint = this.getFingerprint().readUInt32BE(0)
11368
11369 return hd
11370 }
11371
11372 HDNode.prototype.deriveHardened = function (index) {
11373 // Only derives hardened private keys by default
11374 return this.derive(index + HDNode.HIGHEST_BIT)
11375 }
11376
11377 HDNode.prototype.toString = HDNode.prototype.toBase58
11378
11379 module.exports = HDNode
11380
11381 }).call(this,require("buffer").Buffer)
11382 },{"./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){
11383 module.exports = {
11384 Address: require('./address'),
11385 base58check: require('./base58check'),
11386 Block: require('./block'),
11387 bufferutils: require('./bufferutils'),
11388 crypto: require('./crypto'),
11389 ecdsa: require('./ecdsa'),
11390 ECKey: require('./eckey'),
11391 ECPubKey: require('./ecpubkey'),
11392 ECSignature: require('./ecsignature'),
11393 Message: require('./message'),
11394 opcodes: require('./opcodes'),
11395 HDNode: require('./hdnode'),
11396 Script: require('./script'),
11397 scripts: require('./scripts'),
11398 Transaction: require('./transaction'),
11399 TransactionBuilder: require('./transaction_builder'),
11400 networks: require('./networks'),
11401 Wallet: require('./wallet')
11402 }
11403
11404 },{"./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){
11405 (function (Buffer){
11406 var bufferutils = require('./bufferutils')
11407 var crypto = require('./crypto')
11408 var ecdsa = require('./ecdsa')
11409 var networks = require('./networks')
11410
11411 var BigInteger = require('bigi')
11412 var ECPubKey = require('./ecpubkey')
11413 var ECSignature = require('./ecsignature')
11414
11415 var ecurve = require('ecurve')
11416 var ecparams = ecurve.getCurveByName('secp256k1')
11417
11418 function magicHash (message, network) {
11419 var magicPrefix = new Buffer(network.magicPrefix)
11420 var messageBuffer = new Buffer(message)
11421 var lengthBuffer = bufferutils.varIntBuffer(messageBuffer.length)
11422
11423 var buffer = Buffer.concat([magicPrefix, lengthBuffer, messageBuffer])
11424 return crypto.hash256(buffer)
11425 }
11426
11427 function sign (privKey, message, network) {
11428 network = network || networks.bitcoin
11429
11430 var hash = magicHash(message, network)
11431 var signature = privKey.sign(hash)
11432 var e = BigInteger.fromBuffer(hash)
11433 var i = ecdsa.calcPubKeyRecoveryParam(ecparams, e, signature, privKey.pub.Q)
11434
11435 return signature.toCompact(i, privKey.pub.compressed)
11436 }
11437
11438 // TODO: network could be implied from address
11439 function verify (address, signature, message, network) {
11440 if (!Buffer.isBuffer(signature)) {
11441 signature = new Buffer(signature, 'base64')
11442 }
11443
11444 network = network || networks.bitcoin
11445
11446 var hash = magicHash(message, network)
11447 var parsed = ECSignature.parseCompact(signature)
11448 var e = BigInteger.fromBuffer(hash)
11449 var Q = ecdsa.recoverPubKey(ecparams, e, parsed.signature, parsed.i)
11450
11451 var pubKey = new ECPubKey(Q, parsed.compressed)
11452 return pubKey.getAddress(network).toString() === address.toString()
11453 }
11454
11455 module.exports = {
11456 magicHash: magicHash,
11457 sign: sign,
11458 verify: verify
11459 }
11460
11461 }).call(this,require("buffer").Buffer)
11462 },{"./bufferutils":57,"./crypto":58,"./ecdsa":59,"./ecpubkey":61,"./ecsignature":62,"./networks":66,"bigi":3,"buffer":7,"ecurve":49}],66:[function(require,module,exports){
11463 // https://en.bitcoin.it/wiki/List_of_address_prefixes
11464 // Dogecoin BIP32 is a proposed standard: https://bitcointalk.org/index.php?topic=409731
11465
11466 var networks = {
11467 bitcoin: {
11468 magicPrefix: '\x18Bitcoin Signed Message:\n',
11469 bip32: {
11470 public: 0x0488b21e,
11471 private: 0x0488ade4
11472 },
11473 pubKeyHash: 0x00,
11474 scriptHash: 0x05,
11475 wif: 0x80,
11476 dustThreshold: 546, // https://github.com/bitcoin/bitcoin/blob/v0.9.2/src/core.h#L151-L162
11477 feePerKb: 10000, // https://github.com/bitcoin/bitcoin/blob/v0.9.2/src/main.cpp#L53
11478 estimateFee: estimateFee('bitcoin')
11479 },
11480 testnet: {
11481 magicPrefix: '\x18Bitcoin Signed Message:\n',
11482 bip32: {
11483 public: 0x043587cf,
11484 private: 0x04358394
11485 },
11486 pubKeyHash: 0x6f,
11487 scriptHash: 0xc4,
11488 wif: 0xef,
11489 dustThreshold: 546,
11490 feePerKb: 10000,
11491 estimateFee: estimateFee('testnet')
11492 },
11493 litecoin: {
11494 magicPrefix: '\x19Litecoin Signed Message:\n',
11495 bip32: {
11496 public: 0x019da462,
11497 private: 0x019d9cfe
11498 },
11499 pubKeyHash: 0x30,
11500 scriptHash: 0x05,
11501 wif: 0xb0,
11502 dustThreshold: 0, // https://github.com/litecoin-project/litecoin/blob/v0.8.7.2/src/main.cpp#L360-L365
11503 dustSoftThreshold: 100000, // https://github.com/litecoin-project/litecoin/blob/v0.8.7.2/src/main.h#L53
11504 feePerKb: 100000, // https://github.com/litecoin-project/litecoin/blob/v0.8.7.2/src/main.cpp#L56
11505 estimateFee: estimateFee('litecoin')
11506 },
11507 dogecoin: {
11508 magicPrefix: '\x19Dogecoin Signed Message:\n',
11509 bip32: {
11510 public: 0x02facafd,
11511 private: 0x02fac398
11512 },
11513 pubKeyHash: 0x1e,
11514 scriptHash: 0x16,
11515 wif: 0x9e,
11516 dustThreshold: 0, // https://github.com/dogecoin/dogecoin/blob/v1.7.1/src/core.h#L155-L160
11517 dustSoftThreshold: 100000000, // https://github.com/dogecoin/dogecoin/blob/v1.7.1/src/main.h#L62
11518 feePerKb: 100000000, // https://github.com/dogecoin/dogecoin/blob/v1.7.1/src/main.cpp#L58
11519 estimateFee: estimateFee('dogecoin')
11520 },
11521 viacoin: {
11522 magicPrefix: '\x18Viacoin Signed Message:\n',
11523 bip32: {
11524 public: 0x0488b21e,
11525 private: 0x0488ade4
11526 },
11527 pubKeyHash: 0x47,
11528 scriptHash: 0x21,
11529 wif: 0xc7,
11530 dustThreshold: 560,
11531 dustSoftThreshold: 100000,
11532 feePerKb: 100000, //
11533 estimateFee: estimateFee('viacoin')
11534 },
11535 viacointestnet: {
11536 magicPrefix: '\x18Viacoin Signed Message:\n',
11537 bip32: {
11538 public: 0x043587cf,
11539 private: 0x04358394
11540 },
11541 pubKeyHash: 0x7f,
11542 scriptHash: 0xc4,
11543 wif: 0xff,
11544 dustThreshold: 560,
11545 dustSoftThreshold: 100000,
11546 feePerKb: 100000,
11547 estimateFee: estimateFee('viacointestnet')
11548 },
11549 gamerscoin: {
11550 magicPrefix: '\x19Gamerscoin Signed Message:\n',
11551 bip32: {
11552 public: 0x019da462,
11553 private: 0x019d9cfe
11554 },
11555 pubKeyHash: 0x26,
11556 scriptHash: 0x05,
11557 wif: 0xA6,
11558 dustThreshold: 0, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L358-L363
11559 dustSoftThreshold: 100000, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L51
11560 feePerKb: 100000, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L54
11561 estimateFee: estimateFee('gamerscoin')
11562 },
11563 jumbucks: {
11564 magicPrefix: '\x19Jumbucks Signed Message:\n',
11565 bip32: {
11566 public: 0x037a689a,
11567 private: 0x037a6460
11568 },
11569 pubKeyHash: 0x2b,
11570 scriptHash: 0x05,
11571 wif: 0xab,
11572 dustThreshold: 0,
11573 dustSoftThreshold: 10000,
11574 feePerKb: 10000,
11575 estimateFee: estimateFee('jumbucks')
11576 },
11577 zetacoin: {
11578 magicPrefix: '\x18Zetacoin Signed Message:\n',
11579 bip32: {
11580 public: 0x0488b21e,
11581 private: 0x0488ade4
11582 },
11583 pubKeyHash: 0x50,
11584 scriptHash: 0x09,
11585 wif: 0xe0,
11586 dustThreshold: 546, // https://github.com/zetacoin/zetacoin/blob/master/src/core.h#L159
11587 feePerKb: 10000, // https://github.com/zetacoin/zetacoin/blob/master/src/main.cpp#L54
11588 estimateFee: estimateFee('zetacoin')
11589 }
11590 }
11591
11592 function estimateFee (type) {
11593 return function (tx) {
11594 var network = networks[type]
11595 var baseFee = network.feePerKb
11596 var byteSize = tx.toBuffer().length
11597
11598 var fee = baseFee * Math.ceil(byteSize / 1000)
11599 if (network.dustSoftThreshold === undefined) return fee
11600
11601 tx.outs.forEach(function (e) {
11602 if (e.value < network.dustSoftThreshold) {
11603 fee += baseFee
11604 }
11605 })
11606
11607 return fee
11608 }
11609 }
11610
11611 module.exports = networks
11612
11613 },{}],67:[function(require,module,exports){
11614 module.exports = {
11615 // push value
11616 OP_FALSE: 0,
11617 OP_0: 0,
11618 OP_PUSHDATA1: 76,
11619 OP_PUSHDATA2: 77,
11620 OP_PUSHDATA4: 78,
11621 OP_1NEGATE: 79,
11622 OP_RESERVED: 80,
11623 OP_1: 81,
11624 OP_TRUE: 81,
11625 OP_2: 82,
11626 OP_3: 83,
11627 OP_4: 84,
11628 OP_5: 85,
11629 OP_6: 86,
11630 OP_7: 87,
11631 OP_8: 88,
11632 OP_9: 89,
11633 OP_10: 90,
11634 OP_11: 91,
11635 OP_12: 92,
11636 OP_13: 93,
11637 OP_14: 94,
11638 OP_15: 95,
11639 OP_16: 96,
11640
11641 // control
11642 OP_NOP: 97,
11643 OP_VER: 98,
11644 OP_IF: 99,
11645 OP_NOTIF: 100,
11646 OP_VERIF: 101,
11647 OP_VERNOTIF: 102,
11648 OP_ELSE: 103,
11649 OP_ENDIF: 104,
11650 OP_VERIFY: 105,
11651 OP_RETURN: 106,
11652
11653 // stack ops
11654 OP_TOALTSTACK: 107,
11655 OP_FROMALTSTACK: 108,
11656 OP_2DROP: 109,
11657 OP_2DUP: 110,
11658 OP_3DUP: 111,
11659 OP_2OVER: 112,
11660 OP_2ROT: 113,
11661 OP_2SWAP: 114,
11662 OP_IFDUP: 115,
11663 OP_DEPTH: 116,
11664 OP_DROP: 117,
11665 OP_DUP: 118,
11666 OP_NIP: 119,
11667 OP_OVER: 120,
11668 OP_PICK: 121,
11669 OP_ROLL: 122,
11670 OP_ROT: 123,
11671 OP_SWAP: 124,
11672 OP_TUCK: 125,
11673
11674 // splice ops
11675 OP_CAT: 126,
11676 OP_SUBSTR: 127,
11677 OP_LEFT: 128,
11678 OP_RIGHT: 129,
11679 OP_SIZE: 130,
11680
11681 // bit logic
11682 OP_INVERT: 131,
11683 OP_AND: 132,
11684 OP_OR: 133,
11685 OP_XOR: 134,
11686 OP_EQUAL: 135,
11687 OP_EQUALVERIFY: 136,
11688 OP_RESERVED1: 137,
11689 OP_RESERVED2: 138,
11690
11691 // numeric
11692 OP_1ADD: 139,
11693 OP_1SUB: 140,
11694 OP_2MUL: 141,
11695 OP_2DIV: 142,
11696 OP_NEGATE: 143,
11697 OP_ABS: 144,
11698 OP_NOT: 145,
11699 OP_0NOTEQUAL: 146,
11700
11701 OP_ADD: 147,
11702 OP_SUB: 148,
11703 OP_MUL: 149,
11704 OP_DIV: 150,
11705 OP_MOD: 151,
11706 OP_LSHIFT: 152,
11707 OP_RSHIFT: 153,
11708
11709 OP_BOOLAND: 154,
11710 OP_BOOLOR: 155,
11711 OP_NUMEQUAL: 156,
11712 OP_NUMEQUALVERIFY: 157,
11713 OP_NUMNOTEQUAL: 158,
11714 OP_LESSTHAN: 159,
11715 OP_GREATERTHAN: 160,
11716 OP_LESSTHANOREQUAL: 161,
11717 OP_GREATERTHANOREQUAL: 162,
11718 OP_MIN: 163,
11719 OP_MAX: 164,
11720
11721 OP_WITHIN: 165,
11722
11723 // crypto
11724 OP_RIPEMD160: 166,
11725 OP_SHA1: 167,
11726 OP_SHA256: 168,
11727 OP_HASH160: 169,
11728 OP_HASH256: 170,
11729 OP_CODESEPARATOR: 171,
11730 OP_CHECKSIG: 172,
11731 OP_CHECKSIGVERIFY: 173,
11732 OP_CHECKMULTISIG: 174,
11733 OP_CHECKMULTISIGVERIFY: 175,
11734
11735 // expansion
11736 OP_NOP1: 176,
11737 OP_NOP2: 177,
11738 OP_NOP3: 178,
11739 OP_NOP4: 179,
11740 OP_NOP5: 180,
11741 OP_NOP6: 181,
11742 OP_NOP7: 182,
11743 OP_NOP8: 183,
11744 OP_NOP9: 184,
11745 OP_NOP10: 185,
11746
11747 // template matching params
11748 OP_PUBKEYHASH: 253,
11749 OP_PUBKEY: 254,
11750 OP_INVALIDOPCODE: 255
11751 }
11752
11753 },{}],68:[function(require,module,exports){
11754 (function (Buffer){
11755 var assert = require('assert')
11756 var bufferutils = require('./bufferutils')
11757 var crypto = require('./crypto')
11758 var typeForce = require('typeforce')
11759 var opcodes = require('./opcodes')
11760
11761 function Script (buffer, chunks) {
11762 typeForce('Buffer', buffer)
11763 typeForce('Array', chunks)
11764
11765 this.buffer = buffer
11766 this.chunks = chunks
11767 }
11768
11769 Script.fromASM = function (asm) {
11770 var strChunks = asm.split(' ')
11771 var chunks = strChunks.map(function (strChunk) {
11772 // opcode
11773 if (strChunk in opcodes) {
11774 return opcodes[strChunk]
11775
11776 // data chunk
11777 } else {
11778 return new Buffer(strChunk, 'hex')
11779 }
11780 })
11781
11782 return Script.fromChunks(chunks)
11783 }
11784
11785 Script.fromBuffer = function (buffer) {
11786 var chunks = []
11787 var i = 0
11788
11789 while (i < buffer.length) {
11790 var opcode = buffer.readUInt8(i)
11791
11792 // data chunk
11793 if ((opcode > opcodes.OP_0) && (opcode <= opcodes.OP_PUSHDATA4)) {
11794 var d = bufferutils.readPushDataInt(buffer, i)
11795
11796 // did reading a pushDataInt fail? return non-chunked script
11797 if (d === null) return new Script(buffer, [])
11798 i += d.size
11799
11800 // attempt to read too much data?
11801 if (i + d.number > buffer.length) return new Script(buffer, [])
11802
11803 var data = buffer.slice(i, i + d.number)
11804 i += d.number
11805
11806 chunks.push(data)
11807
11808 // opcode
11809 } else {
11810 chunks.push(opcode)
11811
11812 i += 1
11813 }
11814 }
11815
11816 return new Script(buffer, chunks)
11817 }
11818
11819 Script.fromChunks = function (chunks) {
11820 typeForce('Array', chunks)
11821
11822 var bufferSize = chunks.reduce(function (accum, chunk) {
11823 // data chunk
11824 if (Buffer.isBuffer(chunk)) {
11825 return accum + bufferutils.pushDataSize(chunk.length) + chunk.length
11826 }
11827
11828 // opcode
11829 return accum + 1
11830 }, 0.0)
11831
11832 var buffer = new Buffer(bufferSize)
11833 var offset = 0
11834
11835 chunks.forEach(function (chunk) {
11836 // data chunk
11837 if (Buffer.isBuffer(chunk)) {
11838 offset += bufferutils.writePushDataInt(buffer, chunk.length, offset)
11839
11840 chunk.copy(buffer, offset)
11841 offset += chunk.length
11842
11843 // opcode
11844 } else {
11845 buffer.writeUInt8(chunk, offset)
11846 offset += 1
11847 }
11848 })
11849
11850 assert.equal(offset, buffer.length, 'Could not decode chunks')
11851 return new Script(buffer, chunks)
11852 }
11853
11854 Script.fromHex = function (hex) {
11855 return Script.fromBuffer(new Buffer(hex, 'hex'))
11856 }
11857
11858 Script.EMPTY = Script.fromChunks([])
11859
11860 Script.prototype.getHash = function () {
11861 return crypto.hash160(this.buffer)
11862 }
11863
11864 // FIXME: doesn't work for data chunks, maybe time to use buffertools.compare...
11865 Script.prototype.without = function (needle) {
11866 return Script.fromChunks(this.chunks.filter(function (op) {
11867 return op !== needle
11868 }))
11869 }
11870
11871 var reverseOps = []
11872 for (var op in opcodes) {
11873 var code = opcodes[op]
11874 reverseOps[code] = op
11875 }
11876
11877 Script.prototype.toASM = function () {
11878 return this.chunks.map(function (chunk) {
11879 // data chunk
11880 if (Buffer.isBuffer(chunk)) {
11881 return chunk.toString('hex')
11882
11883 // opcode
11884 } else {
11885 return reverseOps[chunk]
11886 }
11887 }).join(' ')
11888 }
11889
11890 Script.prototype.toBuffer = function () {
11891 return this.buffer
11892 }
11893
11894 Script.prototype.toHex = function () {
11895 return this.toBuffer().toString('hex')
11896 }
11897
11898 module.exports = Script
11899
11900 }).call(this,require("buffer").Buffer)
11901 },{"./bufferutils":57,"./crypto":58,"./opcodes":67,"assert":5,"buffer":7,"typeforce":53}],69:[function(require,module,exports){
11902 (function (Buffer){
11903 var assert = require('assert')
11904 var ops = require('./opcodes')
11905 var typeForce = require('typeforce')
11906
11907 var ecurve = require('ecurve')
11908 var curve = ecurve.getCurveByName('secp256k1')
11909
11910 var ECSignature = require('./ecsignature')
11911 var Script = require('./script')
11912
11913 function isCanonicalPubKey (buffer) {
11914 if (!Buffer.isBuffer(buffer)) return false
11915
11916 try {
11917 ecurve.Point.decodeFrom(curve, buffer)
11918 } catch (e) {
11919 if (!(e.message.match(/Invalid sequence (length|tag)/)))
11920 throw e
11921
11922 return false
11923 }
11924
11925 return true
11926 }
11927
11928 function isCanonicalSignature (buffer) {
11929 if (!Buffer.isBuffer(buffer)) return false
11930
11931 try {
11932 ECSignature.parseScriptSignature(buffer)
11933 } catch (e) {
11934 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/))) {
11935 throw e
11936 }
11937
11938 return false
11939 }
11940
11941 return true
11942 }
11943
11944 function isPubKeyHashInput (script) {
11945 return script.chunks.length === 2 &&
11946 isCanonicalSignature(script.chunks[0]) &&
11947 isCanonicalPubKey(script.chunks[1])
11948 }
11949
11950 function isPubKeyHashOutput (script) {
11951 return script.chunks.length === 5 &&
11952 script.chunks[0] === ops.OP_DUP &&
11953 script.chunks[1] === ops.OP_HASH160 &&
11954 Buffer.isBuffer(script.chunks[2]) &&
11955 script.chunks[2].length === 20 &&
11956 script.chunks[3] === ops.OP_EQUALVERIFY &&
11957 script.chunks[4] === ops.OP_CHECKSIG
11958 }
11959
11960 function isPubKeyInput (script) {
11961 return script.chunks.length === 1 &&
11962 isCanonicalSignature(script.chunks[0])
11963 }
11964
11965 function isPubKeyOutput (script) {
11966 return script.chunks.length === 2 &&
11967 isCanonicalPubKey(script.chunks[0]) &&
11968 script.chunks[1] === ops.OP_CHECKSIG
11969 }
11970
11971 function isScriptHashInput (script, allowIncomplete) {
11972 if (script.chunks.length < 2) return false
11973
11974 var lastChunk = script.chunks[script.chunks.length - 1]
11975 if (!Buffer.isBuffer(lastChunk)) return false
11976
11977 var scriptSig = Script.fromChunks(script.chunks.slice(0, -1))
11978 var redeemScript = Script.fromBuffer(lastChunk)
11979
11980 // is redeemScript a valid script?
11981 if (redeemScript.chunks.length === 0) return false
11982
11983 return classifyInput(scriptSig, allowIncomplete) === classifyOutput(redeemScript)
11984 }
11985
11986 function isScriptHashOutput (script) {
11987 return script.chunks.length === 3 &&
11988 script.chunks[0] === ops.OP_HASH160 &&
11989 Buffer.isBuffer(script.chunks[1]) &&
11990 script.chunks[1].length === 20 &&
11991 script.chunks[2] === ops.OP_EQUAL
11992 }
11993
11994 // allowIncomplete is to account for combining signatures
11995 // See https://github.com/bitcoin/bitcoin/blob/f425050546644a36b0b8e0eb2f6934a3e0f6f80f/src/script/sign.cpp#L195-L197
11996 function isMultisigInput (script, allowIncomplete) {
11997 if (script.chunks.length < 2) return false
11998 if (script.chunks[0] !== ops.OP_0) return false
11999
12000 if (allowIncomplete) {
12001 return script.chunks.slice(1).every(function (chunk) {
12002 return chunk === ops.OP_0 || isCanonicalSignature(chunk)
12003 })
12004 }
12005
12006 return script.chunks.slice(1).every(isCanonicalSignature)
12007 }
12008
12009 function isMultisigOutput (script) {
12010 if (script.chunks.length < 4) return false
12011 if (script.chunks[script.chunks.length - 1] !== ops.OP_CHECKMULTISIG) return false
12012
12013 var mOp = script.chunks[0]
12014 if (mOp === ops.OP_0) return false
12015 if (mOp < ops.OP_1) return false
12016 if (mOp > ops.OP_16) return false
12017
12018 var nOp = script.chunks[script.chunks.length - 2]
12019 if (nOp === ops.OP_0) return false
12020 if (nOp < ops.OP_1) return false
12021 if (nOp > ops.OP_16) return false
12022
12023 var m = mOp - (ops.OP_1 - 1)
12024 var n = nOp - (ops.OP_1 - 1)
12025 if (n < m) return false
12026
12027 var pubKeys = script.chunks.slice(1, -2)
12028 if (n < pubKeys.length) return false
12029
12030 return pubKeys.every(isCanonicalPubKey)
12031 }
12032
12033 function isNullDataOutput (script) {
12034 return script.chunks[0] === ops.OP_RETURN
12035 }
12036
12037 function classifyOutput (script) {
12038 typeForce('Script', script)
12039
12040 if (isPubKeyHashOutput(script)) {
12041 return 'pubkeyhash'
12042 } else if (isScriptHashOutput(script)) {
12043 return 'scripthash'
12044 } else if (isMultisigOutput(script)) {
12045 return 'multisig'
12046 } else if (isPubKeyOutput(script)) {
12047 return 'pubkey'
12048 } else if (isNullDataOutput(script)) {
12049 return 'nulldata'
12050 }
12051
12052 return 'nonstandard'
12053 }
12054
12055 function classifyInput (script, allowIncomplete) {
12056 typeForce('Script', script)
12057
12058 if (isPubKeyHashInput(script)) {
12059 return 'pubkeyhash'
12060 } else if (isMultisigInput(script, allowIncomplete)) {
12061 return 'multisig'
12062 } else if (isScriptHashInput(script, allowIncomplete)) {
12063 return 'scripthash'
12064 } else if (isPubKeyInput(script)) {
12065 return 'pubkey'
12066 }
12067
12068 return 'nonstandard'
12069 }
12070
12071 // Standard Script Templates
12072 // {pubKey} OP_CHECKSIG
12073 function pubKeyOutput (pubKey) {
12074 return Script.fromChunks([
12075 pubKey.toBuffer(),
12076 ops.OP_CHECKSIG
12077 ])
12078 }
12079
12080 // OP_DUP OP_HASH160 {pubKeyHash} OP_EQUALVERIFY OP_CHECKSIG
12081 function pubKeyHashOutput (hash) {
12082 typeForce('Buffer', hash)
12083
12084 return Script.fromChunks([
12085 ops.OP_DUP,
12086 ops.OP_HASH160,
12087 hash,
12088 ops.OP_EQUALVERIFY,
12089 ops.OP_CHECKSIG
12090 ])
12091 }
12092
12093 // OP_HASH160 {scriptHash} OP_EQUAL
12094 function scriptHashOutput (hash) {
12095 typeForce('Buffer', hash)
12096
12097 return Script.fromChunks([
12098 ops.OP_HASH160,
12099 hash,
12100 ops.OP_EQUAL
12101 ])
12102 }
12103
12104 // m [pubKeys ...] n OP_CHECKMULTISIG
12105 function multisigOutput (m, pubKeys) {
12106 typeForce(['ECPubKey'], pubKeys)
12107
12108 assert(pubKeys.length >= m, 'Not enough pubKeys provided')
12109
12110 var pubKeyBuffers = pubKeys.map(function (pubKey) {
12111 return pubKey.toBuffer()
12112 })
12113 var n = pubKeys.length
12114
12115 return Script.fromChunks([].concat(
12116 (ops.OP_1 - 1) + m,
12117 pubKeyBuffers,
12118 (ops.OP_1 - 1) + n,
12119 ops.OP_CHECKMULTISIG
12120 ))
12121 }
12122
12123 // {signature}
12124 function pubKeyInput (signature) {
12125 typeForce('Buffer', signature)
12126
12127 return Script.fromChunks([signature])
12128 }
12129
12130 // {signature} {pubKey}
12131 function pubKeyHashInput (signature, pubKey) {
12132 typeForce('Buffer', signature)
12133
12134 return Script.fromChunks([signature, pubKey.toBuffer()])
12135 }
12136
12137 // <scriptSig> {serialized scriptPubKey script}
12138 function scriptHashInput (scriptSig, scriptPubKey) {
12139 return Script.fromChunks([].concat(
12140 scriptSig.chunks,
12141 scriptPubKey.toBuffer()
12142 ))
12143 }
12144
12145 // OP_0 [signatures ...]
12146 function multisigInput (signatures, scriptPubKey) {
12147 if (scriptPubKey) {
12148 assert(isMultisigOutput(scriptPubKey))
12149
12150 var mOp = scriptPubKey.chunks[0]
12151 var nOp = scriptPubKey.chunks[scriptPubKey.chunks.length - 2]
12152 var m = mOp - (ops.OP_1 - 1)
12153 var n = nOp - (ops.OP_1 - 1)
12154
12155 assert(signatures.length >= m, 'Not enough signatures provided')
12156 assert(signatures.length <= n, 'Too many signatures provided')
12157 }
12158
12159 return Script.fromChunks([].concat(ops.OP_0, signatures))
12160 }
12161
12162 function nullDataOutput (data) {
12163 return Script.fromChunks([ops.OP_RETURN, data])
12164 }
12165
12166 module.exports = {
12167 isCanonicalPubKey: isCanonicalPubKey,
12168 isCanonicalSignature: isCanonicalSignature,
12169 isPubKeyHashInput: isPubKeyHashInput,
12170 isPubKeyHashOutput: isPubKeyHashOutput,
12171 isPubKeyInput: isPubKeyInput,
12172 isPubKeyOutput: isPubKeyOutput,
12173 isScriptHashInput: isScriptHashInput,
12174 isScriptHashOutput: isScriptHashOutput,
12175 isMultisigInput: isMultisigInput,
12176 isMultisigOutput: isMultisigOutput,
12177 isNullDataOutput: isNullDataOutput,
12178 classifyOutput: classifyOutput,
12179 classifyInput: classifyInput,
12180 pubKeyOutput: pubKeyOutput,
12181 pubKeyHashOutput: pubKeyHashOutput,
12182 scriptHashOutput: scriptHashOutput,
12183 multisigOutput: multisigOutput,
12184 pubKeyInput: pubKeyInput,
12185 pubKeyHashInput: pubKeyHashInput,
12186 scriptHashInput: scriptHashInput,
12187 multisigInput: multisigInput,
12188 dataOutput: function (data) {
12189 console.warn('dataOutput is deprecated, use nullDataOutput by 2.0.0')
12190 return nullDataOutput(data)
12191 },
12192 nullDataOutput: nullDataOutput
12193 }
12194
12195 }).call(this,require("buffer").Buffer)
12196 },{"./ecsignature":62,"./opcodes":67,"./script":68,"assert":5,"buffer":7,"ecurve":49,"typeforce":53}],70:[function(require,module,exports){
12197 (function (Buffer){
12198 var assert = require('assert')
12199 var bufferutils = require('./bufferutils')
12200 var crypto = require('./crypto')
12201 var typeForce = require('typeforce')
12202 var opcodes = require('./opcodes')
12203 var scripts = require('./scripts')
12204
12205 var Address = require('./address')
12206 var ECSignature = require('./ecsignature')
12207 var Script = require('./script')
12208
12209 function Transaction () {
12210 this.version = 1
12211 this.locktime = 0
12212 this.ins = []
12213 this.outs = []
12214 }
12215
12216 Transaction.DEFAULT_SEQUENCE = 0xffffffff
12217 Transaction.SIGHASH_ALL = 0x01
12218 Transaction.SIGHASH_NONE = 0x02
12219 Transaction.SIGHASH_SINGLE = 0x03
12220 Transaction.SIGHASH_ANYONECANPAY = 0x80
12221
12222 Transaction.fromBuffer = function (buffer, __disableAssert) {
12223 var offset = 0
12224 function readSlice (n) {
12225 offset += n
12226 return buffer.slice(offset - n, offset)
12227 }
12228
12229 function readUInt32 () {
12230 var i = buffer.readUInt32LE(offset)
12231 offset += 4
12232 return i
12233 }
12234
12235 function readUInt64 () {
12236 var i = bufferutils.readUInt64LE(buffer, offset)
12237 offset += 8
12238 return i
12239 }
12240
12241 function readVarInt () {
12242 var vi = bufferutils.readVarInt(buffer, offset)
12243 offset += vi.size
12244 return vi.number
12245 }
12246
12247 function readScript () {
12248 return Script.fromBuffer(readSlice(readVarInt()))
12249 }
12250
12251 function readGenerationScript () {
12252 return new Script(readSlice(readVarInt()), [])
12253 }
12254
12255 var tx = new Transaction()
12256 tx.version = readUInt32()
12257
12258 var vinLen = readVarInt()
12259 for (var i = 0; i < vinLen; ++i) {
12260 var hash = readSlice(32)
12261
12262 if (Transaction.isCoinbaseHash(hash)) {
12263 tx.ins.push({
12264 hash: hash,
12265 index: readUInt32(),
12266 script: readGenerationScript(),
12267 sequence: readUInt32()
12268 })
12269 } else {
12270 tx.ins.push({
12271 hash: hash,
12272 index: readUInt32(),
12273 script: readScript(),
12274 sequence: readUInt32()
12275 })
12276 }
12277 }
12278
12279 var voutLen = readVarInt()
12280 for (i = 0; i < voutLen; ++i) {
12281 tx.outs.push({
12282 value: readUInt64(),
12283 script: readScript()
12284 })
12285 }
12286
12287 tx.locktime = readUInt32()
12288
12289 if (!__disableAssert) {
12290 assert.equal(offset, buffer.length, 'Transaction has unexpected data')
12291 }
12292
12293 return tx
12294 }
12295
12296 Transaction.fromHex = function (hex) {
12297 return Transaction.fromBuffer(new Buffer(hex, 'hex'))
12298 }
12299
12300 Transaction.isCoinbaseHash = function (buffer) {
12301 return Array.prototype.every.call(buffer, function (x) {
12302 return x === 0
12303 })
12304 }
12305
12306 /**
12307 * Create a new txIn.
12308 *
12309 * Can be called with any of:
12310 *
12311 * - A transaction and an index
12312 * - A transaction hash and an index
12313 *
12314 * Note that this method does not sign the created input.
12315 */
12316 Transaction.prototype.addInput = function (hash, index, sequence, script) {
12317 if (sequence === undefined || sequence === null) {
12318 sequence = Transaction.DEFAULT_SEQUENCE
12319 }
12320
12321 script = script || Script.EMPTY
12322
12323 if (typeof hash === 'string') {
12324 // TxId hex is big-endian, we need little-endian
12325 hash = bufferutils.reverse(new Buffer(hash, 'hex'))
12326 } else if (hash instanceof Transaction) {
12327 hash = hash.getHash()
12328 }
12329
12330 typeForce('Buffer', hash)
12331 typeForce('Number', index)
12332 typeForce('Number', sequence)
12333 typeForce('Script', script)
12334
12335 assert.equal(hash.length, 32, 'Expected hash length of 32, got ' + hash.length)
12336
12337 // Add the input and return the input's index
12338 return (this.ins.push({
12339 hash: hash,
12340 index: index,
12341 script: script,
12342 sequence: sequence
12343 }) - 1)
12344 }
12345
12346 /**
12347 * Create a new txOut.
12348 *
12349 * Can be called with:
12350 *
12351 * - A base58 address string and a value
12352 * - An Address object and a value
12353 * - A scriptPubKey Script and a value
12354 */
12355 Transaction.prototype.addOutput = function (scriptPubKey, value) {
12356 // Attempt to get a valid address if it's a base58 address string
12357 if (typeof scriptPubKey === 'string') {
12358 scriptPubKey = Address.fromBase58Check(scriptPubKey)
12359 }
12360
12361 // Attempt to get a valid script if it's an Address object
12362 if (scriptPubKey instanceof Address) {
12363 scriptPubKey = scriptPubKey.toOutputScript()
12364 }
12365
12366 typeForce('Script', scriptPubKey)
12367 typeForce('Number', value)
12368
12369 // Add the output and return the output's index
12370 return (this.outs.push({
12371 script: scriptPubKey,
12372 value: value
12373 }) - 1)
12374 }
12375
12376 Transaction.prototype.clone = function () {
12377 var newTx = new Transaction()
12378 newTx.version = this.version
12379 newTx.locktime = this.locktime
12380
12381 newTx.ins = this.ins.map(function (txIn) {
12382 return {
12383 hash: txIn.hash,
12384 index: txIn.index,
12385 script: txIn.script,
12386 sequence: txIn.sequence
12387 }
12388 })
12389
12390 newTx.outs = this.outs.map(function (txOut) {
12391 return {
12392 script: txOut.script,
12393 value: txOut.value
12394 }
12395 })
12396
12397 return newTx
12398 }
12399
12400 /**
12401 * Hash transaction for signing a specific input.
12402 *
12403 * Bitcoin uses a different hash for each signed transaction input. This
12404 * method copies the transaction, makes the necessary changes based on the
12405 * hashType, serializes and finally hashes the result. This hash can then be
12406 * used to sign the transaction input in question.
12407 */
12408 Transaction.prototype.hashForSignature = function (inIndex, prevOutScript, hashType) {
12409 // FIXME: remove in 2.x.y
12410 if (arguments[0] instanceof Script) {
12411 console.warn('hashForSignature(prevOutScript, inIndex, ...) has been deprecated. Use hashForSignature(inIndex, prevOutScript, ...)')
12412
12413 // swap the arguments (must be stored in tmp, arguments is special)
12414 var tmp = arguments[0]
12415 inIndex = arguments[1]
12416 prevOutScript = tmp
12417 }
12418
12419 typeForce('Number', inIndex)
12420 typeForce('Script', prevOutScript)
12421 typeForce('Number', hashType)
12422
12423 assert(inIndex >= 0, 'Invalid vin index')
12424 assert(inIndex < this.ins.length, 'Invalid vin index')
12425
12426 var txTmp = this.clone()
12427 var hashScript = prevOutScript.without(opcodes.OP_CODESEPARATOR)
12428
12429 // Blank out other inputs' signatures
12430 txTmp.ins.forEach(function (txIn) {
12431 txIn.script = Script.EMPTY
12432 })
12433 txTmp.ins[inIndex].script = hashScript
12434
12435 var hashTypeModifier = hashType & 0x1f
12436
12437 if (hashTypeModifier === Transaction.SIGHASH_NONE) {
12438 assert(false, 'SIGHASH_NONE not yet supported')
12439 } else if (hashTypeModifier === Transaction.SIGHASH_SINGLE) {
12440 assert(false, 'SIGHASH_SINGLE not yet supported')
12441 }
12442
12443 if (hashType & Transaction.SIGHASH_ANYONECANPAY) {
12444 assert(false, 'SIGHASH_ANYONECANPAY not yet supported')
12445 }
12446
12447 var hashTypeBuffer = new Buffer(4)
12448 hashTypeBuffer.writeInt32LE(hashType, 0)
12449
12450 var buffer = Buffer.concat([txTmp.toBuffer(), hashTypeBuffer])
12451 return crypto.hash256(buffer)
12452 }
12453
12454 Transaction.prototype.getHash = function () {
12455 return crypto.hash256(this.toBuffer())
12456 }
12457
12458 Transaction.prototype.getId = function () {
12459 // TxHash is little-endian, we need big-endian
12460 return bufferutils.reverse(this.getHash()).toString('hex')
12461 }
12462
12463 Transaction.prototype.toBuffer = function () {
12464 function scriptSize (script) {
12465 var length = script.buffer.length
12466
12467 return bufferutils.varIntSize(length) + length
12468 }
12469
12470 var buffer = new Buffer(
12471 8 +
12472 bufferutils.varIntSize(this.ins.length) +
12473 bufferutils.varIntSize(this.outs.length) +
12474 this.ins.reduce(function (sum, input) { return sum + 40 + scriptSize(input.script) }, 0) +
12475 this.outs.reduce(function (sum, output) { return sum + 8 + scriptSize(output.script) }, 0)
12476 )
12477
12478 var offset = 0
12479 function writeSlice (slice) {
12480 slice.copy(buffer, offset)
12481 offset += slice.length
12482 }
12483
12484 function writeUInt32 (i) {
12485 buffer.writeUInt32LE(i, offset)
12486 offset += 4
12487 }
12488
12489 function writeUInt64 (i) {
12490 bufferutils.writeUInt64LE(buffer, i, offset)
12491 offset += 8
12492 }
12493
12494 function writeVarInt (i) {
12495 var n = bufferutils.writeVarInt(buffer, i, offset)
12496 offset += n
12497 }
12498
12499 writeUInt32(this.version)
12500 writeVarInt(this.ins.length)
12501
12502 this.ins.forEach(function (txIn) {
12503 writeSlice(txIn.hash)
12504 writeUInt32(txIn.index)
12505 writeVarInt(txIn.script.buffer.length)
12506 writeSlice(txIn.script.buffer)
12507 writeUInt32(txIn.sequence)
12508 })
12509
12510 writeVarInt(this.outs.length)
12511 this.outs.forEach(function (txOut) {
12512 writeUInt64(txOut.value)
12513 writeVarInt(txOut.script.buffer.length)
12514 writeSlice(txOut.script.buffer)
12515 })
12516
12517 writeUInt32(this.locktime)
12518
12519 return buffer
12520 }
12521
12522 Transaction.prototype.toHex = function () {
12523 return this.toBuffer().toString('hex')
12524 }
12525
12526 Transaction.prototype.setInputScript = function (index, script) {
12527 typeForce('Number', index)
12528 typeForce('Script', script)
12529
12530 this.ins[index].script = script
12531 }
12532
12533 // FIXME: remove in 2.x.y
12534 Transaction.prototype.sign = function (index, privKey, hashType) {
12535 console.warn('Transaction.prototype.sign is deprecated. Use TransactionBuilder instead.')
12536
12537 var prevOutScript = privKey.pub.getAddress().toOutputScript()
12538 var signature = this.signInput(index, prevOutScript, privKey, hashType)
12539
12540 var scriptSig = scripts.pubKeyHashInput(signature, privKey.pub)
12541 this.setInputScript(index, scriptSig)
12542 }
12543
12544 // FIXME: remove in 2.x.y
12545 Transaction.prototype.signInput = function (index, prevOutScript, privKey, hashType) {
12546 console.warn('Transaction.prototype.signInput is deprecated. Use TransactionBuilder instead.')
12547
12548 hashType = hashType || Transaction.SIGHASH_ALL
12549
12550 var hash = this.hashForSignature(index, prevOutScript, hashType)
12551 var signature = privKey.sign(hash)
12552
12553 return signature.toScriptSignature(hashType)
12554 }
12555
12556 // FIXME: remove in 2.x.y
12557 Transaction.prototype.validateInput = function (index, prevOutScript, pubKey, buffer) {
12558 console.warn('Transaction.prototype.validateInput is deprecated. Use TransactionBuilder instead.')
12559
12560 var parsed = ECSignature.parseScriptSignature(buffer)
12561 var hash = this.hashForSignature(index, prevOutScript, parsed.hashType)
12562
12563 return pubKey.verify(hash, parsed.signature)
12564 }
12565
12566 module.exports = Transaction
12567
12568 }).call(this,require("buffer").Buffer)
12569 },{"./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){
12570 (function (Buffer){
12571 var assert = require('assert')
12572 var ops = require('./opcodes')
12573 var scripts = require('./scripts')
12574
12575 var ECPubKey = require('./ecpubkey')
12576 var ECSignature = require('./ecsignature')
12577 var Script = require('./script')
12578 var Transaction = require('./transaction')
12579
12580 function extractInput (txIn) {
12581 var redeemScript
12582 var scriptSig = txIn.script
12583 var prevOutScript
12584 var prevOutType = scripts.classifyInput(scriptSig, true)
12585 var scriptType
12586
12587 // Re-classify if scriptHash
12588 if (prevOutType === 'scripthash') {
12589 redeemScript = Script.fromBuffer(scriptSig.chunks.slice(-1)[0])
12590 prevOutScript = scripts.scriptHashOutput(redeemScript.getHash())
12591
12592 scriptSig = Script.fromChunks(scriptSig.chunks.slice(0, -1))
12593 scriptType = scripts.classifyInput(scriptSig, true)
12594 } else {
12595 scriptType = prevOutType
12596 }
12597
12598 // Extract hashType, pubKeys and signatures
12599 var hashType, parsed, pubKeys, signatures
12600
12601 switch (scriptType) {
12602 case 'pubkeyhash': {
12603 parsed = ECSignature.parseScriptSignature(scriptSig.chunks[0])
12604 hashType = parsed.hashType
12605 pubKeys = [ECPubKey.fromBuffer(scriptSig.chunks[1])]
12606 signatures = [parsed.signature]
12607 prevOutScript = pubKeys[0].getAddress().toOutputScript()
12608
12609 break
12610 }
12611
12612 case 'pubkey': {
12613 parsed = ECSignature.parseScriptSignature(scriptSig.chunks[0])
12614 hashType = parsed.hashType
12615 signatures = [parsed.signature]
12616
12617 if (redeemScript) {
12618 pubKeys = [ECPubKey.fromBuffer(redeemScript.chunks[0])]
12619 }
12620
12621 break
12622 }
12623
12624 case 'multisig': {
12625 signatures = scriptSig.chunks.slice(1).map(function (chunk) {
12626 if (chunk === ops.OP_0) return chunk
12627
12628 var parsed = ECSignature.parseScriptSignature(chunk)
12629 hashType = parsed.hashType
12630
12631 return parsed.signature
12632 })
12633
12634 if (redeemScript) {
12635 pubKeys = redeemScript.chunks.slice(1, -2).map(ECPubKey.fromBuffer)
12636 }
12637
12638 break
12639 }
12640 }
12641
12642 return {
12643 hashType: hashType,
12644 prevOutScript: prevOutScript,
12645 prevOutType: prevOutType,
12646 pubKeys: pubKeys,
12647 redeemScript: redeemScript,
12648 scriptType: scriptType,
12649 signatures: signatures
12650 }
12651 }
12652
12653 function TransactionBuilder () {
12654 this.prevTxMap = {}
12655 this.prevOutScripts = {}
12656 this.prevOutTypes = {}
12657
12658 this.inputs = []
12659 this.tx = new Transaction()
12660 }
12661
12662 TransactionBuilder.fromTransaction = function (transaction) {
12663 var txb = new TransactionBuilder()
12664
12665 // Copy other transaction fields
12666 txb.tx.version = transaction.version
12667 txb.tx.locktime = transaction.locktime
12668
12669 // Extract/add inputs
12670 transaction.ins.forEach(function (txIn) {
12671 txb.addInput(txIn.hash, txIn.index, txIn.sequence)
12672 })
12673
12674 // Extract/add outputs
12675 transaction.outs.forEach(function (txOut) {
12676 txb.addOutput(txOut.script, txOut.value)
12677 })
12678
12679 // Extract/add signatures
12680 txb.inputs = transaction.ins.map(function (txIn) {
12681 // TODO: remove me after testcase added
12682 assert(!Transaction.isCoinbaseHash(txIn.hash), 'coinbase inputs not supported')
12683
12684 // Ignore empty scripts
12685 if (txIn.script.buffer.length === 0) return {}
12686
12687 return extractInput(txIn)
12688 })
12689
12690 return txb
12691 }
12692
12693 TransactionBuilder.prototype.addInput = function (prevTx, index, sequence, prevOutScript) {
12694 var prevOutHash
12695
12696 // txId
12697 if (typeof prevTx === 'string') {
12698 prevOutHash = new Buffer(prevTx, 'hex')
12699
12700 // TxId hex is big-endian, we want little-endian hash
12701 Array.prototype.reverse.call(prevOutHash)
12702
12703 // Transaction
12704 } else if (prevTx instanceof Transaction) {
12705 prevOutHash = prevTx.getHash()
12706 prevOutScript = prevTx.outs[index].script
12707
12708 // txHash
12709 } else {
12710 prevOutHash = prevTx
12711 }
12712
12713 var input = {}
12714 if (prevOutScript) {
12715 var prevOutType = scripts.classifyOutput(prevOutScript)
12716
12717 // if we can, extract pubKey information
12718 switch (prevOutType) {
12719 case 'multisig': {
12720 input.pubKeys = prevOutScript.chunks.slice(1, -2).map(ECPubKey.fromBuffer)
12721 break
12722 }
12723
12724 case 'pubkey': {
12725 input.pubKeys = prevOutScript.chunks.slice(0, 1).map(ECPubKey.fromBuffer)
12726 break
12727 }
12728 }
12729
12730 if (prevOutType !== 'scripthash') {
12731 input.scriptType = prevOutType
12732 }
12733
12734 input.prevOutScript = prevOutScript
12735 input.prevOutType = prevOutType
12736 }
12737
12738 assert(this.inputs.every(function (input2) {
12739 if (input2.hashType === undefined) return true
12740
12741 return input2.hashType & Transaction.SIGHASH_ANYONECANPAY
12742 }), 'No, this would invalidate signatures')
12743
12744 var prevOut = prevOutHash.toString('hex') + ':' + index
12745 assert(!(prevOut in this.prevTxMap), 'Transaction is already an input')
12746
12747 var vin = this.tx.addInput(prevOutHash, index, sequence)
12748 this.inputs[vin] = input
12749 this.prevTxMap[prevOut] = vin
12750
12751 return vin
12752 }
12753
12754 TransactionBuilder.prototype.addOutput = function (scriptPubKey, value) {
12755 assert(this.inputs.every(function (input) {
12756 if (input.hashType === undefined) return true
12757
12758 return (input.hashType & 0x1f) === Transaction.SIGHASH_SINGLE
12759 }), 'No, this would invalidate signatures')
12760
12761 return this.tx.addOutput(scriptPubKey, value)
12762 }
12763
12764 TransactionBuilder.prototype.build = function () {
12765 return this.__build(false)
12766 }
12767 TransactionBuilder.prototype.buildIncomplete = function () {
12768 return this.__build(true)
12769 }
12770
12771 var canSignTypes = {
12772 'pubkeyhash': true,
12773 'multisig': true,
12774 'pubkey': true
12775 }
12776
12777 TransactionBuilder.prototype.__build = function (allowIncomplete) {
12778 if (!allowIncomplete) {
12779 assert(this.tx.ins.length > 0, 'Transaction has no inputs')
12780 assert(this.tx.outs.length > 0, 'Transaction has no outputs')
12781 }
12782
12783 var tx = this.tx.clone()
12784
12785 // Create script signatures from signature meta-data
12786 this.inputs.forEach(function (input, index) {
12787 var scriptType = input.scriptType
12788 var scriptSig
12789
12790 if (!allowIncomplete) {
12791 assert(!!scriptType, 'Transaction is not complete')
12792 assert(scriptType in canSignTypes, scriptType + ' not supported')
12793 assert(input.signatures, 'Transaction is missing signatures')
12794 }
12795
12796 if (input.signatures) {
12797 switch (scriptType) {
12798 case 'pubkeyhash': {
12799 var pkhSignature = input.signatures[0].toScriptSignature(input.hashType)
12800 scriptSig = scripts.pubKeyHashInput(pkhSignature, input.pubKeys[0])
12801 break
12802 }
12803
12804 case 'multisig': {
12805 // Array.prototype.map is sparse-compatible
12806 var msSignatures = input.signatures.map(function (signature) {
12807 return signature && signature.toScriptSignature(input.hashType)
12808 })
12809
12810 // fill in blanks with OP_0
12811 if (allowIncomplete) {
12812 for (var i = 0; i < msSignatures.length; ++i) {
12813 if (msSignatures[i]) continue
12814
12815 msSignatures[i] = ops.OP_0
12816 }
12817 } else {
12818 // Array.prototype.filter returns non-sparse array
12819 msSignatures = msSignatures.filter(function (x) { return x })
12820 }
12821
12822 var redeemScript = allowIncomplete ? undefined : input.redeemScript
12823 scriptSig = scripts.multisigInput(msSignatures, redeemScript)
12824 break
12825 }
12826
12827 case 'pubkey': {
12828 var pkSignature = input.signatures[0].toScriptSignature(input.hashType)
12829 scriptSig = scripts.pubKeyInput(pkSignature)
12830 break
12831 }
12832 }
12833 }
12834
12835 // did we build a scriptSig?
12836 if (scriptSig) {
12837 // wrap as scriptHash if necessary
12838 if (input.prevOutType === 'scripthash') {
12839 scriptSig = scripts.scriptHashInput(scriptSig, input.redeemScript)
12840 }
12841
12842 tx.setInputScript(index, scriptSig)
12843 }
12844 })
12845
12846 return tx
12847 }
12848
12849 TransactionBuilder.prototype.sign = function (index, privKey, redeemScript, hashType) {
12850 assert(index in this.inputs, 'No input at index: ' + index)
12851 hashType = hashType || Transaction.SIGHASH_ALL
12852
12853 var input = this.inputs[index]
12854 var canSign = input.hashType &&
12855 input.prevOutScript &&
12856 input.prevOutType &&
12857 input.pubKeys &&
12858 input.scriptType &&
12859 input.signatures
12860
12861 // are we almost ready to sign?
12862 if (canSign) {
12863 // if redeemScript was provided, enforce consistency
12864 if (redeemScript) {
12865 assert.deepEqual(input.redeemScript, redeemScript, 'Inconsistent redeemScript')
12866 }
12867
12868 assert.equal(input.hashType, hashType, 'Inconsistent hashType')
12869
12870 // no? prepare
12871 } else {
12872 // must be pay-to-scriptHash?
12873 if (redeemScript) {
12874 // if we have a prevOutScript, enforce scriptHash equality to the redeemScript
12875 if (input.prevOutScript) {
12876 assert.equal(input.prevOutType, 'scripthash', 'PrevOutScript must be P2SH')
12877
12878 var scriptHash = input.prevOutScript.chunks[1]
12879 assert.deepEqual(scriptHash, redeemScript.getHash(), 'RedeemScript does not match ' + scriptHash.toString('hex'))
12880 }
12881
12882 var scriptType = scripts.classifyOutput(redeemScript)
12883 assert(scriptType in canSignTypes, 'RedeemScript not supported (' + scriptType + ')')
12884
12885 var pubKeys = []
12886 switch (scriptType) {
12887 case 'multisig': {
12888 pubKeys = redeemScript.chunks.slice(1, -2).map(ECPubKey.fromBuffer)
12889 break
12890 }
12891
12892 case 'pubkeyhash': {
12893 var pkh1 = redeemScript.chunks[2]
12894 var pkh2 = privKey.pub.getAddress().hash
12895
12896 assert.deepEqual(pkh1, pkh2, 'privateKey cannot sign for this input')
12897 pubKeys = [privKey.pub]
12898 break
12899 }
12900
12901 case 'pubkey': {
12902 pubKeys = redeemScript.chunks.slice(0, 1).map(ECPubKey.fromBuffer)
12903 break
12904 }
12905 }
12906
12907 if (!input.prevOutScript) {
12908 input.prevOutScript = scripts.scriptHashOutput(redeemScript.getHash())
12909 input.prevOutType = 'scripthash'
12910 }
12911
12912 input.pubKeys = pubKeys
12913 input.redeemScript = redeemScript
12914 input.scriptType = scriptType
12915
12916 // cannot be pay-to-scriptHash
12917 } else {
12918 assert.notEqual(input.prevOutType, 'scripthash', 'PrevOutScript is P2SH, missing redeemScript')
12919
12920 // can we otherwise sign this?
12921 if (input.scriptType) {
12922 assert(input.pubKeys, input.scriptType + ' not supported')
12923
12924 // we know nothin' Jon Snow, assume pubKeyHash
12925 } else {
12926 input.prevOutScript = privKey.pub.getAddress().toOutputScript()
12927 input.prevOutType = 'pubkeyhash'
12928 input.pubKeys = [privKey.pub]
12929 input.scriptType = input.prevOutType
12930 }
12931 }
12932
12933 input.hashType = hashType
12934 input.signatures = input.signatures || []
12935 }
12936
12937 var signatureScript = input.redeemScript || input.prevOutScript
12938 var signatureHash = this.tx.hashForSignature(index, signatureScript, hashType)
12939
12940 // enforce signature order matches public keys
12941 if (input.scriptType === 'multisig' && input.redeemScript && input.signatures.length !== input.pubKeys.length) {
12942 // maintain a local copy of unmatched signatures
12943 var unmatched = input.signatures.slice()
12944
12945 input.signatures = input.pubKeys.map(function (pubKey) {
12946 var match
12947
12948 // check for any matching signatures
12949 unmatched.some(function (signature, i) {
12950 if (!pubKey.verify(signatureHash, signature)) return false
12951 match = signature
12952
12953 // remove matched signature from unmatched
12954 unmatched.splice(i, 1)
12955
12956 return true
12957 })
12958
12959 return match || undefined
12960 })
12961 }
12962
12963 // enforce in order signing of public keys
12964 assert(input.pubKeys.some(function (pubKey, i) {
12965 if (!privKey.pub.Q.equals(pubKey.Q)) return false
12966
12967 assert(!input.signatures[i], 'Signature already exists')
12968 var signature = privKey.sign(signatureHash)
12969 input.signatures[i] = signature
12970
12971 return true
12972 }, this), 'privateKey cannot sign for this input')
12973 }
12974
12975 module.exports = TransactionBuilder
12976
12977 }).call(this,require("buffer").Buffer)
12978 },{"./ecpubkey":61,"./ecsignature":62,"./opcodes":67,"./script":68,"./scripts":69,"./transaction":70,"assert":5,"buffer":7}],72:[function(require,module,exports){
12979 (function (Buffer){
12980 var assert = require('assert')
12981 var bufferutils = require('./bufferutils')
12982 var typeForce = require('typeforce')
12983 var networks = require('./networks')
12984 var randomBytes = require('randombytes')
12985
12986 var Address = require('./address')
12987 var HDNode = require('./hdnode')
12988 var TransactionBuilder = require('./transaction_builder')
12989 var Script = require('./script')
12990
12991 function Wallet (seed, network) {
12992 console.warn('Wallet is deprecated and will be removed in 2.0.0, see #296')
12993
12994 seed = seed || randomBytes(32)
12995 network = network || networks.bitcoin
12996
12997 // Stored in a closure to make accidental serialization less likely
12998 var masterKey = HDNode.fromSeedBuffer(seed, network)
12999
13000 // HD first-level child derivation method should be hardened
13001 // See https://bitcointalk.org/index.php?topic=405179.msg4415254#msg4415254
13002 var accountZero = masterKey.deriveHardened(0)
13003 var externalAccount = accountZero.derive(0)
13004 var internalAccount = accountZero.derive(1)
13005
13006 this.addresses = []
13007 this.changeAddresses = []
13008 this.network = network
13009 this.unspents = []
13010
13011 // FIXME: remove in 2.0.0
13012 this.unspentMap = {}
13013
13014 // FIXME: remove in 2.0.0
13015 var me = this
13016 this.newMasterKey = function (seed) {
13017 console.warn('newMasterKey is deprecated, please make a new Wallet instance instead')
13018
13019 seed = seed || randomBytes(32)
13020 masterKey = HDNode.fromSeedBuffer(seed, network)
13021
13022 accountZero = masterKey.deriveHardened(0)
13023 externalAccount = accountZero.derive(0)
13024 internalAccount = accountZero.derive(1)
13025
13026 me.addresses = []
13027 me.changeAddresses = []
13028
13029 me.unspents = []
13030 me.unspentMap = {}
13031 }
13032
13033 this.getMasterKey = function () {
13034 return masterKey
13035 }
13036 this.getAccountZero = function () {
13037 return accountZero
13038 }
13039 this.getExternalAccount = function () {
13040 return externalAccount
13041 }
13042 this.getInternalAccount = function () {
13043 return internalAccount
13044 }
13045 }
13046
13047 Wallet.prototype.createTransaction = function (to, value, options) {
13048 // FIXME: remove in 2.0.0
13049 if (typeof options !== 'object') {
13050 if (options !== undefined) {
13051 console.warn('Non options object parameters are deprecated, use options object instead')
13052
13053 options = {
13054 fixedFee: arguments[2],
13055 changeAddress: arguments[3]
13056 }
13057 }
13058 }
13059
13060 options = options || {}
13061
13062 assert(value > this.network.dustThreshold, value + ' must be above dust threshold (' + this.network.dustThreshold + ' Satoshis)')
13063
13064 var changeAddress = options.changeAddress
13065 var fixedFee = options.fixedFee
13066 var minConf = options.minConf === undefined ? 0 : options.minConf // FIXME: change minConf:1 by default in 2.0.0
13067
13068 // filter by minConf, then pending and sort by descending value
13069 var unspents = this.unspents.filter(function (unspent) {
13070 return unspent.confirmations >= minConf
13071 }).filter(function (unspent) {
13072 return !unspent.pending
13073 }).sort(function (o1, o2) {
13074 return o2.value - o1.value
13075 })
13076
13077 var accum = 0
13078 var addresses = []
13079 var subTotal = value
13080
13081 var txb = new TransactionBuilder()
13082 txb.addOutput(to, value)
13083
13084 for (var i = 0; i < unspents.length; ++i) {
13085 var unspent = unspents[i]
13086 addresses.push(unspent.address)
13087
13088 txb.addInput(unspent.txHash, unspent.index)
13089
13090 var fee = fixedFee === undefined ? estimatePaddedFee(txb.buildIncomplete(), this.network) : fixedFee
13091
13092 accum += unspent.value
13093 subTotal = value + fee
13094
13095 if (accum >= subTotal) {
13096 var change = accum - subTotal
13097
13098 if (change > this.network.dustThreshold) {
13099 txb.addOutput(changeAddress || this.getChangeAddress(), change)
13100 }
13101
13102 break
13103 }
13104 }
13105
13106 assert(accum >= subTotal, 'Not enough funds (incl. fee): ' + accum + ' < ' + subTotal)
13107
13108 return this.signWith(txb, addresses).build()
13109 }
13110
13111 // FIXME: remove in 2.0.0
13112 Wallet.prototype.processPendingTx = function (tx) {
13113 this.__processTx(tx, true)
13114 }
13115
13116 // FIXME: remove in 2.0.0
13117 Wallet.prototype.processConfirmedTx = function (tx) {
13118 this.__processTx(tx, false)
13119 }
13120
13121 // FIXME: remove in 2.0.0
13122 Wallet.prototype.__processTx = function (tx, isPending) {
13123 console.warn('processTransaction is considered harmful, see issue #260 for more information')
13124
13125 var txId = tx.getId()
13126 var txHash = tx.getHash()
13127
13128 tx.outs.forEach(function (txOut, i) {
13129 var address
13130
13131 try {
13132 address = Address.fromOutputScript(txOut.script, this.network).toString()
13133 } catch (e) {
13134 if (!(e.message.match(/has no matching Address/)))
13135 throw e
13136 }
13137
13138 var myAddresses = this.addresses.concat(this.changeAddresses)
13139 if (myAddresses.indexOf(address) > -1) {
13140 var lookup = txId + ':' + i
13141 if (lookup in this.unspentMap) return
13142
13143 // its unique, add it
13144 var unspent = {
13145 address: address,
13146 confirmations: 0, // no way to determine this without more information
13147 index: i,
13148 txHash: txHash,
13149 txId: txId,
13150 value: txOut.value,
13151 pending: isPending
13152 }
13153
13154 this.unspentMap[lookup] = unspent
13155 this.unspents.push(unspent)
13156 }
13157 }, this)
13158
13159 tx.ins.forEach(function (txIn) {
13160 // copy and convert to big-endian hex
13161 var txInId = bufferutils.reverse(txIn.hash).toString('hex')
13162
13163 var lookup = txInId + ':' + txIn.index
13164 if (!(lookup in this.unspentMap)) return
13165
13166 var unspent = this.unspentMap[lookup]
13167
13168 if (isPending) {
13169 unspent.pending = true
13170 unspent.spent = true
13171 } else {
13172 delete this.unspentMap[lookup]
13173
13174 this.unspents = this.unspents.filter(function (unspent2) {
13175 return unspent !== unspent2
13176 })
13177 }
13178 }, this)
13179 }
13180
13181 Wallet.prototype.generateAddress = function () {
13182 var k = this.addresses.length
13183 var address = this.getExternalAccount().derive(k).getAddress()
13184
13185 this.addresses.push(address.toString())
13186
13187 return this.getReceiveAddress()
13188 }
13189
13190 Wallet.prototype.generateChangeAddress = function () {
13191 var k = this.changeAddresses.length
13192 var address = this.getInternalAccount().derive(k).getAddress()
13193
13194 this.changeAddresses.push(address.toString())
13195
13196 return this.getChangeAddress()
13197 }
13198
13199 Wallet.prototype.getAddress = function () {
13200 if (this.addresses.length === 0) {
13201 this.generateAddress()
13202 }
13203
13204 return this.addresses[this.addresses.length - 1]
13205 }
13206
13207 Wallet.prototype.getBalance = function (minConf) {
13208 minConf = minConf || 0
13209
13210 return this.unspents.filter(function (unspent) {
13211 return unspent.confirmations >= minConf
13212
13213 // FIXME: remove spent filter in 2.0.0
13214 }).filter(function (unspent) {
13215 return !unspent.spent
13216 }).reduce(function (accum, unspent) {
13217 return accum + unspent.value
13218 }, 0)
13219 }
13220
13221 Wallet.prototype.getChangeAddress = function () {
13222 if (this.changeAddresses.length === 0) {
13223 this.generateChangeAddress()
13224 }
13225
13226 return this.changeAddresses[this.changeAddresses.length - 1]
13227 }
13228
13229 Wallet.prototype.getInternalPrivateKey = function (index) {
13230 return this.getInternalAccount().derive(index).privKey
13231 }
13232
13233 Wallet.prototype.getPrivateKey = function (index) {
13234 return this.getExternalAccount().derive(index).privKey
13235 }
13236
13237 Wallet.prototype.getPrivateKeyForAddress = function (address) {
13238 var index
13239
13240 if ((index = this.addresses.indexOf(address)) > -1) {
13241 return this.getPrivateKey(index)
13242 }
13243
13244 if ((index = this.changeAddresses.indexOf(address)) > -1) {
13245 return this.getInternalPrivateKey(index)
13246 }
13247
13248 assert(false, 'Unknown address. Make sure the address is from the keychain and has been generated')
13249 }
13250
13251 Wallet.prototype.getUnspentOutputs = function (minConf) {
13252 minConf = minConf || 0
13253
13254 return this.unspents.filter(function (unspent) {
13255 return unspent.confirmations >= minConf
13256
13257 // FIXME: remove spent filter in 2.0.0
13258 }).filter(function (unspent) {
13259 return !unspent.spent
13260 }).map(function (unspent) {
13261 return {
13262 address: unspent.address,
13263 confirmations: unspent.confirmations,
13264 index: unspent.index,
13265 txId: unspent.txId,
13266 value: unspent.value,
13267
13268 // FIXME: remove in 2.0.0
13269 hash: unspent.txId,
13270 pending: unspent.pending
13271 }
13272 })
13273 }
13274
13275 Wallet.prototype.setUnspentOutputs = function (unspents) {
13276 this.unspentMap = {}
13277 this.unspents = unspents.map(function (unspent) {
13278 // FIXME: remove unspent.hash in 2.0.0
13279 var txId = unspent.txId || unspent.hash
13280 var index = unspent.index
13281
13282 // FIXME: remove in 2.0.0
13283 if (unspent.hash !== undefined) {
13284 console.warn('unspent.hash is deprecated, use unspent.txId instead')
13285 }
13286
13287 // FIXME: remove in 2.0.0
13288 if (index === undefined) {
13289 console.warn('unspent.outputIndex is deprecated, use unspent.index instead')
13290 index = unspent.outputIndex
13291 }
13292
13293 typeForce('String', txId)
13294 typeForce('Number', index)
13295 typeForce('Number', unspent.value)
13296
13297 assert.equal(txId.length, 64, 'Expected valid txId, got ' + txId)
13298 assert.doesNotThrow(function () {
13299 Address.fromBase58Check(unspent.address)
13300 }, 'Expected Base58 Address, got ' + unspent.address)
13301 assert(isFinite(index), 'Expected finite index, got ' + index)
13302
13303 // FIXME: remove branch in 2.0.0
13304 if (unspent.confirmations !== undefined) {
13305 typeForce('Number', unspent.confirmations)
13306 }
13307
13308 var txHash = bufferutils.reverse(new Buffer(txId, 'hex'))
13309
13310 unspent = {
13311 address: unspent.address,
13312 confirmations: unspent.confirmations || 0,
13313 index: index,
13314 txHash: txHash,
13315 txId: txId,
13316 value: unspent.value,
13317
13318 // FIXME: remove in 2.0.0
13319 pending: unspent.pending || false
13320 }
13321
13322 // FIXME: remove in 2.0.0
13323 this.unspentMap[txId + ':' + index] = unspent
13324
13325 return unspent
13326 }, this)
13327 }
13328
13329 Wallet.prototype.signWith = function (tx, addresses) {
13330 addresses.forEach(function (address, i) {
13331 var privKey = this.getPrivateKeyForAddress(address)
13332
13333 tx.sign(i, privKey)
13334 }, this)
13335
13336 return tx
13337 }
13338
13339 function estimatePaddedFee (tx, network) {
13340 var tmpTx = tx.clone()
13341 tmpTx.addOutput(Script.EMPTY, network.dustSoftThreshold || 0)
13342
13343 return network.estimateFee(tmpTx)
13344 }
13345
13346 // FIXME: 1.0.0 shims, remove in 2.0.0
13347 Wallet.prototype.getReceiveAddress = Wallet.prototype.getAddress
13348 Wallet.prototype.createTx = Wallet.prototype.createTransaction
13349
13350 module.exports = Wallet
13351
13352 }).call(this,require("buffer").Buffer)
13353 },{"./address":54,"./bufferutils":57,"./hdnode":63,"./networks":66,"./script":68,"./transaction_builder":71,"assert":5,"buffer":7,"randombytes":52,"typeforce":53}]},{},[64])(64)
13354 });</script>
13355 <script>bitcoin.networks.shadow = {
13356 magicPrefix: '\x19ShadowCash Signed Message:\n',
13357 bip32: {
13358 public: 0xEE80286A,
13359 private: 0xEE8031E8
13360 },
13361 pubKeyHash: 0x3f,
13362 scriptHash: 0x7d,
13363 wif: 0xbf,
13364 dustThreshold: 0,
13365 feePerKb: 1000,
13366 estimateFee: function() { return "unused in this app" },
13367 };
13368
13369 bitcoin.networks.shadowtn = {
13370 magicPrefix: '\x19ShadowCash Signed Message:\n',
13371 bip32: {
13372 public: 0x76C0FDFB,
13373 private: 0x76C1077A
13374 },
13375 pubKeyHash: 0x7f,
13376 scriptHash: 0xc4,
13377 wif: 0xff,
13378 dustThreshold: 0,
13379 feePerKb: 1000,
13380 estimateFee: function() { return "unused in this app" },
13381 };
13382
13383 bitcoin.networks.clam = {
13384 bip32: {
13385 public: 0xa8c26d64,
13386 private: 0xa8c17826
13387 },
13388 pubKeyHash: 0x89,
13389 wif: 0x85,
13390 };
13391
13392 bitcoin.networks.dash = {
13393 bip32: {
13394 public: 0x0488b21e,
13395 private: 0x0488ade4
13396 },
13397 pubKeyHash: 0x4c,
13398 scriptHash: 0x10,
13399 wif: 0xcc,
13400 };
13401
13402 bitcoin.networks.namecoin = {
13403 bip32: {
13404 public: 0x0488b21e,
13405 private: 0x0488ade4
13406 },
13407 pubKeyHash: 0x34,
13408 //scriptHash: 0x10,
13409 wif: 0x80,
13410 };
13411
13412 bitcoin.networks.peercoin = {
13413 bip32: {
13414 public: 0x0488b21e,
13415 private: 0x0488ade4
13416 },
13417 pubKeyHash: 0x37,
13418 //scriptHash: 0x10,
13419 wif: 0xb7,
13420 };
13421
13422 </script>
13423 <script>// Select components from sjcl to suit the crypto operations bip39 requires.
13424
13425 //// base.js
13426
13427 /** @fileOverview Javascript cryptography implementation.
13428 *
13429 * Crush to remove comments, shorten variable names and
13430 * generally reduce transmission size.
13431 *
13432 * @author Emily Stark
13433 * @author Mike Hamburg
13434 * @author Dan Boneh
13435 */
13436
13437 "use strict";
13438 /*jslint indent: 2, bitwise: false, nomen: false, plusplus: false, white: false, regexp: false */
13439 /*global document, window, escape, unescape, module, require, Uint32Array */
13440
13441 /** @namespace The Stanford Javascript Crypto Library, top-level namespace. */
13442 var sjcl = {
13443 /** @namespace Symmetric ciphers. */
13444 cipher: {},
13445
13446 /** @namespace Hash functions. Right now only SHA256 is implemented. */
13447 hash: {},
13448
13449 /** @namespace Key exchange functions. Right now only SRP is implemented. */
13450 keyexchange: {},
13451
13452 /** @namespace Block cipher modes of operation. */
13453 mode: {},
13454
13455 /** @namespace Miscellaneous. HMAC and PBKDF2. */
13456 misc: {},
13457
13458 /**
13459 * @namespace Bit array encoders and decoders.
13460 *
13461 * @description
13462 * The members of this namespace are functions which translate between
13463 * SJCL's bitArrays and other objects (usually strings). Because it
13464 * isn't always clear which direction is encoding and which is decoding,
13465 * the method names are "fromBits" and "toBits".
13466 */
13467 codec: {},
13468
13469 /** @namespace Exceptions. */
13470 exception: {
13471 /** @constructor Ciphertext is corrupt. */
13472 corrupt: function(message) {
13473 this.toString = function() { return "CORRUPT: "+this.message; };
13474 this.message = message;
13475 },
13476
13477 /** @constructor Invalid parameter. */
13478 invalid: function(message) {
13479 this.toString = function() { return "INVALID: "+this.message; };
13480 this.message = message;
13481 },
13482
13483 /** @constructor Bug or missing feature in SJCL. @constructor */
13484 bug: function(message) {
13485 this.toString = function() { return "BUG: "+this.message; };
13486 this.message = message;
13487 },
13488
13489 /** @constructor Something isn't ready. */
13490 notReady: function(message) {
13491 this.toString = function() { return "NOT READY: "+this.message; };
13492 this.message = message;
13493 }
13494 }
13495 };
13496
13497 if(typeof module !== 'undefined' && module.exports){
13498 module.exports = sjcl;
13499 }
13500 if (typeof define === "function") {
13501 define([], function () {
13502 return sjcl;
13503 });
13504 }
13505
13506
13507 //// bitArray.js
13508
13509 /** @fileOverview Arrays of bits, encoded as arrays of Numbers.
13510 *
13511 * @author Emily Stark
13512 * @author Mike Hamburg
13513 * @author Dan Boneh
13514 */
13515
13516 /** @namespace Arrays of bits, encoded as arrays of Numbers.
13517 *
13518 * @description
13519 * <p>
13520 * These objects are the currency accepted by SJCL's crypto functions.
13521 * </p>
13522 *
13523 * <p>
13524 * Most of our crypto primitives operate on arrays of 4-byte words internally,
13525 * but many of them can take arguments that are not a multiple of 4 bytes.
13526 * This library encodes arrays of bits (whose size need not be a multiple of 8
13527 * bits) as arrays of 32-bit words. The bits are packed, big-endian, into an
13528 * array of words, 32 bits at a time. Since the words are double-precision
13529 * floating point numbers, they fit some extra data. We use this (in a private,
13530 * possibly-changing manner) to encode the number of bits actually present
13531 * in the last word of the array.
13532 * </p>
13533 *
13534 * <p>
13535 * Because bitwise ops clear this out-of-band data, these arrays can be passed
13536 * to ciphers like AES which want arrays of words.
13537 * </p>
13538 */
13539 sjcl.bitArray = {
13540 /**
13541 * Array slices in units of bits.
13542 * @param {bitArray} a The array to slice.
13543 * @param {Number} bstart The offset to the start of the slice, in bits.
13544 * @param {Number} bend The offset to the end of the slice, in bits. If this is undefined,
13545 * slice until the end of the array.
13546 * @return {bitArray} The requested slice.
13547 */
13548 bitSlice: function (a, bstart, bend) {
13549 a = sjcl.bitArray._shiftRight(a.slice(bstart/32), 32 - (bstart & 31)).slice(1);
13550 return (bend === undefined) ? a : sjcl.bitArray.clamp(a, bend-bstart);
13551 },
13552
13553 /**
13554 * Extract a number packed into a bit array.
13555 * @param {bitArray} a The array to slice.
13556 * @param {Number} bstart The offset to the start of the slice, in bits.
13557 * @param {Number} length The length of the number to extract.
13558 * @return {Number} The requested slice.
13559 */
13560 extract: function(a, bstart, blength) {
13561 // FIXME: this Math.floor is not necessary at all, but for some reason
13562 // seems to suppress a bug in the Chromium JIT.
13563 var x, sh = Math.floor((-bstart-blength) & 31);
13564 if ((bstart + blength - 1 ^ bstart) & -32) {
13565 // it crosses a boundary
13566 x = (a[bstart/32|0] << (32 - sh)) ^ (a[bstart/32+1|0] >>> sh);
13567 } else {
13568 // within a single word
13569 x = a[bstart/32|0] >>> sh;
13570 }
13571 return x & ((1<<blength) - 1);
13572 },
13573
13574 /**
13575 * Concatenate two bit arrays.
13576 * @param {bitArray} a1 The first array.
13577 * @param {bitArray} a2 The second array.
13578 * @return {bitArray} The concatenation of a1 and a2.
13579 */
13580 concat: function (a1, a2) {
13581 if (a1.length === 0 || a2.length === 0) {
13582 return a1.concat(a2);
13583 }
13584
13585 var last = a1[a1.length-1], shift = sjcl.bitArray.getPartial(last);
13586 if (shift === 32) {
13587 return a1.concat(a2);
13588 } else {
13589 return sjcl.bitArray._shiftRight(a2, shift, last|0, a1.slice(0,a1.length-1));
13590 }
13591 },
13592
13593 /**
13594 * Find the length of an array of bits.
13595 * @param {bitArray} a The array.
13596 * @return {Number} The length of a, in bits.
13597 */
13598 bitLength: function (a) {
13599 var l = a.length, x;
13600 if (l === 0) { return 0; }
13601 x = a[l - 1];
13602 return (l-1) * 32 + sjcl.bitArray.getPartial(x);
13603 },
13604
13605 /**
13606 * Truncate an array.
13607 * @param {bitArray} a The array.
13608 * @param {Number} len The length to truncate to, in bits.
13609 * @return {bitArray} A new array, truncated to len bits.
13610 */
13611 clamp: function (a, len) {
13612 if (a.length * 32 < len) { return a; }
13613 a = a.slice(0, Math.ceil(len / 32));
13614 var l = a.length;
13615 len = len & 31;
13616 if (l > 0 && len) {
13617 a[l-1] = sjcl.bitArray.partial(len, a[l-1] & 0x80000000 >> (len-1), 1);
13618 }
13619 return a;
13620 },
13621
13622 /**
13623 * Make a partial word for a bit array.
13624 * @param {Number} len The number of bits in the word.
13625 * @param {Number} x The bits.
13626 * @param {Number} [0] _end Pass 1 if x has already been shifted to the high side.
13627 * @return {Number} The partial word.
13628 */
13629 partial: function (len, x, _end) {
13630 if (len === 32) { return x; }
13631 return (_end ? x|0 : x << (32-len)) + len * 0x10000000000;
13632 },
13633
13634 /**
13635 * Get the number of bits used by a partial word.
13636 * @param {Number} x The partial word.
13637 * @return {Number} The number of bits used by the partial word.
13638 */
13639 getPartial: function (x) {
13640 return Math.round(x/0x10000000000) || 32;
13641 },
13642
13643 /**
13644 * Compare two arrays for equality in a predictable amount of time.
13645 * @param {bitArray} a The first array.
13646 * @param {bitArray} b The second array.
13647 * @return {boolean} true if a == b; false otherwise.
13648 */
13649 equal: function (a, b) {
13650 if (sjcl.bitArray.bitLength(a) !== sjcl.bitArray.bitLength(b)) {
13651 return false;
13652 }
13653 var x = 0, i;
13654 for (i=0; i<a.length; i++) {
13655 x |= a[i]^b[i];
13656 }
13657 return (x === 0);
13658 },
13659
13660 /** Shift an array right.
13661 * @param {bitArray} a The array to shift.
13662 * @param {Number} shift The number of bits to shift.
13663 * @param {Number} [carry=0] A byte to carry in
13664 * @param {bitArray} [out=[]] An array to prepend to the output.
13665 * @private
13666 */
13667 _shiftRight: function (a, shift, carry, out) {
13668 var i, last2=0, shift2;
13669 if (out === undefined) { out = []; }
13670
13671 for (; shift >= 32; shift -= 32) {
13672 out.push(carry);
13673 carry = 0;
13674 }
13675 if (shift === 0) {
13676 return out.concat(a);
13677 }
13678
13679 for (i=0; i<a.length; i++) {
13680 out.push(carry | a[i]>>>shift);
13681 carry = a[i] << (32-shift);
13682 }
13683 last2 = a.length ? a[a.length-1] : 0;
13684 shift2 = sjcl.bitArray.getPartial(last2);
13685 out.push(sjcl.bitArray.partial(shift+shift2 & 31, (shift + shift2 > 32) ? carry : out.pop(),1));
13686 return out;
13687 },
13688
13689 /** xor a block of 4 words together.
13690 * @private
13691 */
13692 _xor4: function(x,y) {
13693 return [x[0]^y[0],x[1]^y[1],x[2]^y[2],x[3]^y[3]];
13694 },
13695
13696 /** byteswap a word array inplace.
13697 * (does not handle partial words)
13698 * @param {sjcl.bitArray} a word array
13699 * @return {sjcl.bitArray} byteswapped array
13700 */
13701 byteswapM: function(a) {
13702 var i, v, m = 0xff00;
13703 for (i = 0; i < a.length; ++i) {
13704 v = a[i];
13705 a[i] = (v >>> 24) | ((v >>> 8) & m) | ((v & m) << 8) | (v << 24);
13706 }
13707 return a;
13708 }
13709 };
13710
13711
13712 //// codecString.js
13713
13714 /** @fileOverview Bit array codec implementations.
13715 *
13716 * @author Emily Stark
13717 * @author Mike Hamburg
13718 * @author Dan Boneh
13719 */
13720
13721 /** @namespace UTF-8 strings */
13722 sjcl.codec.utf8String = {
13723 /** Convert from a bitArray to a UTF-8 string. */
13724 fromBits: function (arr) {
13725 var out = "", bl = sjcl.bitArray.bitLength(arr), i, tmp;
13726 for (i=0; i<bl/8; i++) {
13727 if ((i&3) === 0) {
13728 tmp = arr[i/4];
13729 }
13730 out += String.fromCharCode(tmp >>> 24);
13731 tmp <<= 8;
13732 }
13733 return decodeURIComponent(escape(out));
13734 },
13735
13736 /** Convert from a UTF-8 string to a bitArray. */
13737 toBits: function (str) {
13738 str = unescape(encodeURIComponent(str));
13739 var out = [], i, tmp=0;
13740 for (i=0; i<str.length; i++) {
13741 tmp = tmp << 8 | str.charCodeAt(i);
13742 if ((i&3) === 3) {
13743 out.push(tmp);
13744 tmp = 0;
13745 }
13746 }
13747 if (i&3) {
13748 out.push(sjcl.bitArray.partial(8*(i&3), tmp));
13749 }
13750 return out;
13751 }
13752 };
13753
13754
13755 //// codecHex.js
13756
13757 /** @fileOverview Bit array codec implementations.
13758 *
13759 * @author Emily Stark
13760 * @author Mike Hamburg
13761 * @author Dan Boneh
13762 */
13763
13764 /** @namespace Hexadecimal */
13765 sjcl.codec.hex = {
13766 /** Convert from a bitArray to a hex string. */
13767 fromBits: function (arr) {
13768 var out = "", i;
13769 for (i=0; i<arr.length; i++) {
13770 out += ((arr[i]|0)+0xF00000000000).toString(16).substr(4);
13771 }
13772 return out.substr(0, sjcl.bitArray.bitLength(arr)/4);//.replace(/(.{8})/g, "$1 ");
13773 },
13774 /** Convert from a hex string to a bitArray. */
13775 toBits: function (str) {
13776 var i, out=[], len;
13777 str = str.replace(/\s|0x/g, "");
13778 len = str.length;
13779 str = str + "00000000";
13780 for (i=0; i<str.length; i+=8) {
13781 out.push(parseInt(str.substr(i,8),16)^0);
13782 }
13783 return sjcl.bitArray.clamp(out, len*4);
13784 }
13785 };
13786
13787
13788 //// sha512.js
13789
13790 /** @fileOverview Javascript SHA-512 implementation.
13791 *
13792 * This implementation was written for CryptoJS by Jeff Mott and adapted for
13793 * SJCL by Stefan Thomas.
13794 *
13795 * CryptoJS (c) 20092012 by Jeff Mott. All rights reserved.
13796 * Released with New BSD License
13797 *
13798 * @author Emily Stark
13799 * @author Mike Hamburg
13800 * @author Dan Boneh
13801 * @author Jeff Mott
13802 * @author Stefan Thomas
13803 */
13804
13805 /**
13806 * Context for a SHA-512 operation in progress.
13807 * @constructor
13808 * @class Secure Hash Algorithm, 512 bits.
13809 */
13810 sjcl.hash.sha512 = function (hash) {
13811 if (!this._key[0]) { this._precompute(); }
13812 if (hash) {
13813 this._h = hash._h.slice(0);
13814 this._buffer = hash._buffer.slice(0);
13815 this._length = hash._length;
13816 } else {
13817 this.reset();
13818 }
13819 };
13820
13821 /**
13822 * Hash a string or an array of words.
13823 * @static
13824 * @param {bitArray|String} data the data to hash.
13825 * @return {bitArray} The hash value, an array of 16 big-endian words.
13826 */
13827 sjcl.hash.sha512.hash = function (data) {
13828 return (new sjcl.hash.sha512()).update(data).finalize();
13829 };
13830
13831 sjcl.hash.sha512.prototype = {
13832 /**
13833 * The hash's block size, in bits.
13834 * @constant
13835 */
13836 blockSize: 1024,
13837
13838 /**
13839 * Reset the hash state.
13840 * @return this
13841 */
13842 reset:function () {
13843 this._h = this._init.slice(0);
13844 this._buffer = [];
13845 this._length = 0;
13846 return this;
13847 },
13848
13849 /**
13850 * Input several words to the hash.
13851 * @param {bitArray|String} data the data to hash.
13852 * @return this
13853 */
13854 update: function (data) {
13855 if (typeof data === "string") {
13856 data = sjcl.codec.utf8String.toBits(data);
13857 }
13858 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
13859 ol = this._length,
13860 nl = this._length = ol + sjcl.bitArray.bitLength(data);
13861 for (i = 1024+ol & -1024; i <= nl; i+= 1024) {
13862 this._block(b.splice(0,32));
13863 }
13864 return this;
13865 },
13866
13867 /**
13868 * Complete hashing and output the hash value.
13869 * @return {bitArray} The hash value, an array of 16 big-endian words.
13870 */
13871 finalize:function () {
13872 var i, b = this._buffer, h = this._h;
13873
13874 // Round out and push the buffer
13875 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(1,1)]);
13876
13877 // Round out the buffer to a multiple of 32 words, less the 4 length words.
13878 for (i = b.length + 4; i & 31; i++) {
13879 b.push(0);
13880 }
13881
13882 // append the length
13883 b.push(0);
13884 b.push(0);
13885 b.push(Math.floor(this._length / 0x100000000));
13886 b.push(this._length | 0);
13887
13888 while (b.length) {
13889 this._block(b.splice(0,32));
13890 }
13891
13892 this.reset();
13893 return h;
13894 },
13895
13896 /**
13897 * The SHA-512 initialization vector, to be precomputed.
13898 * @private
13899 */
13900 _init:[],
13901
13902 /**
13903 * Least significant 24 bits of SHA512 initialization values.
13904 *
13905 * Javascript only has 53 bits of precision, so we compute the 40 most
13906 * significant bits and add the remaining 24 bits as constants.
13907 *
13908 * @private
13909 */
13910 _initr: [ 0xbcc908, 0xcaa73b, 0x94f82b, 0x1d36f1, 0xe682d1, 0x3e6c1f, 0x41bd6b, 0x7e2179 ],
13911
13912 /*
13913 _init:
13914 [0x6a09e667, 0xf3bcc908, 0xbb67ae85, 0x84caa73b, 0x3c6ef372, 0xfe94f82b, 0xa54ff53a, 0x5f1d36f1,
13915 0x510e527f, 0xade682d1, 0x9b05688c, 0x2b3e6c1f, 0x1f83d9ab, 0xfb41bd6b, 0x5be0cd19, 0x137e2179],
13916 */
13917
13918 /**
13919 * The SHA-512 hash key, to be precomputed.
13920 * @private
13921 */
13922 _key:[],
13923
13924 /**
13925 * Least significant 24 bits of SHA512 key values.
13926 * @private
13927 */
13928 _keyr:
13929 [0x28ae22, 0xef65cd, 0x4d3b2f, 0x89dbbc, 0x48b538, 0x05d019, 0x194f9b, 0x6d8118,
13930 0x030242, 0x706fbe, 0xe4b28c, 0xffb4e2, 0x7b896f, 0x1696b1, 0xc71235, 0x692694,
13931 0xf14ad2, 0x4f25e3, 0x8cd5b5, 0xac9c65, 0x2b0275, 0xa6e483, 0x41fbd4, 0x1153b5,
13932 0x66dfab, 0xb43210, 0xfb213f, 0xef0ee4, 0xa88fc2, 0x0aa725, 0x03826f, 0x0e6e70,
13933 0xd22ffc, 0x26c926, 0xc42aed, 0x95b3df, 0xaf63de, 0x77b2a8, 0xedaee6, 0x82353b,
13934 0xf10364, 0x423001, 0xf89791, 0x54be30, 0xef5218, 0x65a910, 0x71202a, 0xbbd1b8,
13935 0xd2d0c8, 0x41ab53, 0x8eeb99, 0x9b48a8, 0xc95a63, 0x418acb, 0x63e373, 0xb2b8a3,
13936 0xefb2fc, 0x172f60, 0xf0ab72, 0x6439ec, 0x631e28, 0x82bde9, 0xc67915, 0x72532b,
13937 0x26619c, 0xc0c207, 0xe0eb1e, 0x6ed178, 0x176fba, 0xc898a6, 0xf90dae, 0x1c471b,
13938 0x047d84, 0xc72493, 0xc9bebc, 0x100d4c, 0x3e42b6, 0x657e2a, 0xd6faec, 0x475817],
13939
13940 /*
13941 _key:
13942 [0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd, 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
13943 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019, 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
13944 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe, 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
13945 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1, 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
13946 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3, 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
13947 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483, 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
13948 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210, 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
13949 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725, 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
13950 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926, 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
13951 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8, 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
13952 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001, 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
13953 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910, 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
13954 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53, 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
13955 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb, 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
13956 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60, 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
13957 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9, 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
13958 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207, 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
13959 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6, 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
13960 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493, 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
13961 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a, 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817],
13962 */
13963
13964 /**
13965 * Function to precompute _init and _key.
13966 * @private
13967 */
13968 _precompute: function () {
13969 // XXX: This code is for precomputing the SHA256 constants, change for
13970 // SHA512 and re-enable.
13971 var i = 0, prime = 2, factor;
13972
13973 function frac(x) { return (x-Math.floor(x)) * 0x100000000 | 0; }
13974 function frac2(x) { return (x-Math.floor(x)) * 0x10000000000 & 0xff; }
13975
13976 outer: for (; i<80; prime++) {
13977 for (factor=2; factor*factor <= prime; factor++) {
13978 if (prime % factor === 0) {
13979 // not a prime
13980 continue outer;
13981 }
13982 }
13983
13984 if (i<8) {
13985 this._init[i*2] = frac(Math.pow(prime, 1/2));
13986 this._init[i*2+1] = (frac2(Math.pow(prime, 1/2)) << 24) | this._initr[i];
13987 }
13988 this._key[i*2] = frac(Math.pow(prime, 1/3));
13989 this._key[i*2+1] = (frac2(Math.pow(prime, 1/3)) << 24) | this._keyr[i];
13990 i++;
13991 }
13992 },
13993
13994 /**
13995 * Perform one cycle of SHA-512.
13996 * @param {bitArray} words one block of words.
13997 * @private
13998 */
13999 _block:function (words) {
14000 var i, wrh, wrl,
14001 w = words.slice(0),
14002 h = this._h,
14003 k = this._key,
14004 h0h = h[ 0], h0l = h[ 1], h1h = h[ 2], h1l = h[ 3],
14005 h2h = h[ 4], h2l = h[ 5], h3h = h[ 6], h3l = h[ 7],
14006 h4h = h[ 8], h4l = h[ 9], h5h = h[10], h5l = h[11],
14007 h6h = h[12], h6l = h[13], h7h = h[14], h7l = h[15];
14008
14009 // Working variables
14010 var ah = h0h, al = h0l, bh = h1h, bl = h1l,
14011 ch = h2h, cl = h2l, dh = h3h, dl = h3l,
14012 eh = h4h, el = h4l, fh = h5h, fl = h5l,
14013 gh = h6h, gl = h6l, hh = h7h, hl = h7l;
14014
14015 for (i=0; i<80; i++) {
14016 // load up the input word for this round
14017 if (i<16) {
14018 wrh = w[i * 2];
14019 wrl = w[i * 2 + 1];
14020 } else {
14021 // Gamma0
14022 var gamma0xh = w[(i-15) * 2];
14023 var gamma0xl = w[(i-15) * 2 + 1];
14024 var gamma0h =
14025 ((gamma0xl << 31) | (gamma0xh >>> 1)) ^
14026 ((gamma0xl << 24) | (gamma0xh >>> 8)) ^
14027 (gamma0xh >>> 7);
14028 var gamma0l =
14029 ((gamma0xh << 31) | (gamma0xl >>> 1)) ^
14030 ((gamma0xh << 24) | (gamma0xl >>> 8)) ^
14031 ((gamma0xh << 25) | (gamma0xl >>> 7));
14032
14033 // Gamma1
14034 var gamma1xh = w[(i-2) * 2];
14035 var gamma1xl = w[(i-2) * 2 + 1];
14036 var gamma1h =
14037 ((gamma1xl << 13) | (gamma1xh >>> 19)) ^
14038 ((gamma1xh << 3) | (gamma1xl >>> 29)) ^
14039 (gamma1xh >>> 6);
14040 var gamma1l =
14041 ((gamma1xh << 13) | (gamma1xl >>> 19)) ^
14042 ((gamma1xl << 3) | (gamma1xh >>> 29)) ^
14043 ((gamma1xh << 26) | (gamma1xl >>> 6));
14044
14045 // Shortcuts
14046 var wr7h = w[(i-7) * 2];
14047 var wr7l = w[(i-7) * 2 + 1];
14048
14049 var wr16h = w[(i-16) * 2];
14050 var wr16l = w[(i-16) * 2 + 1];
14051
14052 // W(round) = gamma0 + W(round - 7) + gamma1 + W(round - 16)
14053 wrl = gamma0l + wr7l;
14054 wrh = gamma0h + wr7h + ((wrl >>> 0) < (gamma0l >>> 0) ? 1 : 0);
14055 wrl += gamma1l;
14056 wrh += gamma1h + ((wrl >>> 0) < (gamma1l >>> 0) ? 1 : 0);
14057 wrl += wr16l;
14058 wrh += wr16h + ((wrl >>> 0) < (wr16l >>> 0) ? 1 : 0);
14059 }
14060
14061 w[i*2] = wrh |= 0;
14062 w[i*2 + 1] = wrl |= 0;
14063
14064 // Ch
14065 var chh = (eh & fh) ^ (~eh & gh);
14066 var chl = (el & fl) ^ (~el & gl);
14067
14068 // Maj
14069 var majh = (ah & bh) ^ (ah & ch) ^ (bh & ch);
14070 var majl = (al & bl) ^ (al & cl) ^ (bl & cl);
14071
14072 // Sigma0
14073 var sigma0h = ((al << 4) | (ah >>> 28)) ^ ((ah << 30) | (al >>> 2)) ^ ((ah << 25) | (al >>> 7));
14074 var sigma0l = ((ah << 4) | (al >>> 28)) ^ ((al << 30) | (ah >>> 2)) ^ ((al << 25) | (ah >>> 7));
14075
14076 // Sigma1
14077 var sigma1h = ((el << 18) | (eh >>> 14)) ^ ((el << 14) | (eh >>> 18)) ^ ((eh << 23) | (el >>> 9));
14078 var sigma1l = ((eh << 18) | (el >>> 14)) ^ ((eh << 14) | (el >>> 18)) ^ ((el << 23) | (eh >>> 9));
14079
14080 // K(round)
14081 var krh = k[i*2];
14082 var krl = k[i*2+1];
14083
14084 // t1 = h + sigma1 + ch + K(round) + W(round)
14085 var t1l = hl + sigma1l;
14086 var t1h = hh + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0);
14087 t1l += chl;
14088 t1h += chh + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0);
14089 t1l += krl;
14090 t1h += krh + ((t1l >>> 0) < (krl >>> 0) ? 1 : 0);
14091 t1l = t1l + wrl|0; // FF32..FF34 perf issue https://bugzilla.mozilla.org/show_bug.cgi?id=1054972
14092 t1h += wrh + ((t1l >>> 0) < (wrl >>> 0) ? 1 : 0);
14093
14094 // t2 = sigma0 + maj
14095 var t2l = sigma0l + majl;
14096 var t2h = sigma0h + majh + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0);
14097
14098 // Update working variables
14099 hh = gh;
14100 hl = gl;
14101 gh = fh;
14102 gl = fl;
14103 fh = eh;
14104 fl = el;
14105 el = (dl + t1l) | 0;
14106 eh = (dh + t1h + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;
14107 dh = ch;
14108 dl = cl;
14109 ch = bh;
14110 cl = bl;
14111 bh = ah;
14112 bl = al;
14113 al = (t1l + t2l) | 0;
14114 ah = (t1h + t2h + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0;
14115 }
14116
14117 // Intermediate hash
14118 h0l = h[1] = (h0l + al) | 0;
14119 h[0] = (h0h + ah + ((h0l >>> 0) < (al >>> 0) ? 1 : 0)) | 0;
14120 h1l = h[3] = (h1l + bl) | 0;
14121 h[2] = (h1h + bh + ((h1l >>> 0) < (bl >>> 0) ? 1 : 0)) | 0;
14122 h2l = h[5] = (h2l + cl) | 0;
14123 h[4] = (h2h + ch + ((h2l >>> 0) < (cl >>> 0) ? 1 : 0)) | 0;
14124 h3l = h[7] = (h3l + dl) | 0;
14125 h[6] = (h3h + dh + ((h3l >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;
14126 h4l = h[9] = (h4l + el) | 0;
14127 h[8] = (h4h + eh + ((h4l >>> 0) < (el >>> 0) ? 1 : 0)) | 0;
14128 h5l = h[11] = (h5l + fl) | 0;
14129 h[10] = (h5h + fh + ((h5l >>> 0) < (fl >>> 0) ? 1 : 0)) | 0;
14130 h6l = h[13] = (h6l + gl) | 0;
14131 h[12] = (h6h + gh + ((h6l >>> 0) < (gl >>> 0) ? 1 : 0)) | 0;
14132 h7l = h[15] = (h7l + hl) | 0;
14133 h[14] = (h7h + hh + ((h7l >>> 0) < (hl >>> 0) ? 1 : 0)) | 0;
14134 }
14135 };
14136
14137
14138 //// hmac.js
14139
14140 /** @fileOverview HMAC implementation.
14141 *
14142 * @author Emily Stark
14143 * @author Mike Hamburg
14144 * @author Dan Boneh
14145 */
14146
14147 /** HMAC with the specified hash function.
14148 * @constructor
14149 * @param {bitArray} key the key for HMAC.
14150 * @param {Object} [hash=sjcl.hash.sha256] The hash function to use.
14151 */
14152 sjcl.misc.hmac = function (key, Hash) {
14153 this._hash = Hash = Hash || sjcl.hash.sha256;
14154 var exKey = [[],[]], i,
14155 bs = Hash.prototype.blockSize / 32;
14156 this._baseHash = [new Hash(), new Hash()];
14157
14158 if (key.length > bs) {
14159 key = Hash.hash(key);
14160 }
14161
14162 for (i=0; i<bs; i++) {
14163 exKey[0][i] = key[i]^0x36363636;
14164 exKey[1][i] = key[i]^0x5C5C5C5C;
14165 }
14166
14167 this._baseHash[0].update(exKey[0]);
14168 this._baseHash[1].update(exKey[1]);
14169 this._resultHash = new Hash(this._baseHash[0]);
14170 };
14171
14172 /** HMAC with the specified hash function. Also called encrypt since it's a prf.
14173 * @param {bitArray|String} data The data to mac.
14174 */
14175 sjcl.misc.hmac.prototype.encrypt = sjcl.misc.hmac.prototype.mac = function (data) {
14176 if (!this._updated) {
14177 this.update(data);
14178 return this.digest(data);
14179 } else {
14180 throw new sjcl.exception.invalid("encrypt on already updated hmac called!");
14181 }
14182 };
14183
14184 sjcl.misc.hmac.prototype.reset = function () {
14185 this._resultHash = new this._hash(this._baseHash[0]);
14186 this._updated = false;
14187 };
14188
14189 sjcl.misc.hmac.prototype.update = function (data) {
14190 this._updated = true;
14191 this._resultHash.update(data);
14192 };
14193
14194 sjcl.misc.hmac.prototype.digest = function () {
14195 var w = this._resultHash.finalize(), result = new (this._hash)(this._baseHash[1]).update(w).finalize();
14196
14197 this.reset();
14198
14199 return result;
14200 };
14201
14202
14203 //// pbkdf2.js
14204
14205
14206 /** @fileOverview Password-based key-derivation function, version 2.0.
14207 *
14208 * @author Emily Stark
14209 * @author Mike Hamburg
14210 * @author Dan Boneh
14211 */
14212
14213 /** Password-Based Key-Derivation Function, version 2.0.
14214 *
14215 * Generate keys from passwords using PBKDF2-HMAC-SHA256.
14216 *
14217 * This is the method specified by RSA's PKCS #5 standard.
14218 *
14219 * @param {bitArray|String} password The password.
14220 * @param {bitArray|String} salt The salt. Should have lots of entropy.
14221 * @param {Number} [count=1000] The number of iterations. Higher numbers make the function slower but more secure.
14222 * @param {Number} [length] The length of the derived key. Defaults to the
14223 output size of the hash function.
14224 * @param {Object} [Prff=sjcl.misc.hmac] The pseudorandom function family.
14225 * @return {bitArray} the derived key.
14226 */
14227 sjcl.misc.pbkdf2 = function (password, salt, count, length, Prff) {
14228 count = count || 1000;
14229
14230 if (length < 0 || count < 0) {
14231 throw sjcl.exception.invalid("invalid params to pbkdf2");
14232 }
14233
14234 if (typeof password === "string") {
14235 password = sjcl.codec.utf8String.toBits(password);
14236 }
14237
14238 if (typeof salt === "string") {
14239 salt = sjcl.codec.utf8String.toBits(salt);
14240 }
14241
14242 Prff = Prff || sjcl.misc.hmac;
14243
14244 var prf = new Prff(password),
14245 u, ui, i, j, k, out = [], b = sjcl.bitArray;
14246
14247 for (k = 1; 32 * out.length < (length || 1); k++) {
14248 u = ui = prf.encrypt(b.concat(salt,[k]));
14249
14250 for (i=1; i<count; i++) {
14251 ui = prf.encrypt(ui);
14252 for (j=0; j<ui.length; j++) {
14253 u[j] ^= ui[j];
14254 }
14255 }
14256
14257 out = out.concat(u);
14258 }
14259
14260 if (length) { out = b.clamp(out, length); }
14261
14262 return out;
14263 };
14264
14265
14266 //// sha256.js
14267
14268 /** @fileOverview Javascript SHA-256 implementation.
14269 *
14270 * An older version of this implementation is available in the public
14271 * domain, but this one is (c) Emily Stark, Mike Hamburg, Dan Boneh,
14272 * Stanford University 2008-2010 and BSD-licensed for liability
14273 * reasons.
14274 *
14275 * Special thanks to Aldo Cortesi for pointing out several bugs in
14276 * this code.
14277 *
14278 * @author Emily Stark
14279 * @author Mike Hamburg
14280 * @author Dan Boneh
14281 */
14282
14283 /**
14284 * Context for a SHA-256 operation in progress.
14285 * @constructor
14286 * @class Secure Hash Algorithm, 256 bits.
14287 */
14288 sjcl.hash.sha256 = function (hash) {
14289 if (!this._key[0]) { this._precompute(); }
14290 if (hash) {
14291 this._h = hash._h.slice(0);
14292 this._buffer = hash._buffer.slice(0);
14293 this._length = hash._length;
14294 } else {
14295 this.reset();
14296 }
14297 };
14298
14299 /**
14300 * Hash a string or an array of words.
14301 * @static
14302 * @param {bitArray|String} data the data to hash.
14303 * @return {bitArray} The hash value, an array of 16 big-endian words.
14304 */
14305 sjcl.hash.sha256.hash = function (data) {
14306 return (new sjcl.hash.sha256()).update(data).finalize();
14307 };
14308
14309 sjcl.hash.sha256.prototype = {
14310 /**
14311 * The hash's block size, in bits.
14312 * @constant
14313 */
14314 blockSize: 512,
14315
14316 /**
14317 * Reset the hash state.
14318 * @return this
14319 */
14320 reset:function () {
14321 this._h = this._init.slice(0);
14322 this._buffer = [];
14323 this._length = 0;
14324 return this;
14325 },
14326
14327 /**
14328 * Input several words to the hash.
14329 * @param {bitArray|String} data the data to hash.
14330 * @return this
14331 */
14332 update: function (data) {
14333 if (typeof data === "string") {
14334 data = sjcl.codec.utf8String.toBits(data);
14335 }
14336 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
14337 ol = this._length,
14338 nl = this._length = ol + sjcl.bitArray.bitLength(data);
14339 for (i = 512+ol & -512; i <= nl; i+= 512) {
14340 this._block(b.splice(0,16));
14341 }
14342 return this;
14343 },
14344
14345 /**
14346 * Complete hashing and output the hash value.
14347 * @return {bitArray} The hash value, an array of 8 big-endian words.
14348 */
14349 finalize:function () {
14350 var i, b = this._buffer, h = this._h;
14351
14352 // Round out and push the buffer
14353 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(1,1)]);
14354
14355 // Round out the buffer to a multiple of 16 words, less the 2 length words.
14356 for (i = b.length + 2; i & 15; i++) {
14357 b.push(0);
14358 }
14359
14360 // append the length
14361 b.push(Math.floor(this._length / 0x100000000));
14362 b.push(this._length | 0);
14363
14364 while (b.length) {
14365 this._block(b.splice(0,16));
14366 }
14367
14368 this.reset();
14369 return h;
14370 },
14371
14372 /**
14373 * The SHA-256 initialization vector, to be precomputed.
14374 * @private
14375 */
14376 _init:[],
14377 /*
14378 _init:[0x6a09e667,0xbb67ae85,0x3c6ef372,0xa54ff53a,0x510e527f,0x9b05688c,0x1f83d9ab,0x5be0cd19],
14379 */
14380
14381 /**
14382 * The SHA-256 hash key, to be precomputed.
14383 * @private
14384 */
14385 _key:[],
14386 /*
14387 _key:
14388 [0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
14389 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
14390 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
14391 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
14392 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
14393 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
14394 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
14395 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2],
14396 */
14397
14398
14399 /**
14400 * Function to precompute _init and _key.
14401 * @private
14402 */
14403 _precompute: function () {
14404 var i = 0, prime = 2, factor;
14405
14406 function frac(x) { return (x-Math.floor(x)) * 0x100000000 | 0; }
14407
14408 outer: for (; i<64; prime++) {
14409 for (factor=2; factor*factor <= prime; factor++) {
14410 if (prime % factor === 0) {
14411 // not a prime
14412 continue outer;
14413 }
14414 }
14415
14416 if (i<8) {
14417 this._init[i] = frac(Math.pow(prime, 1/2));
14418 }
14419 this._key[i] = frac(Math.pow(prime, 1/3));
14420 i++;
14421 }
14422 },
14423
14424 /**
14425 * Perform one cycle of SHA-256.
14426 * @param {bitArray} words one block of words.
14427 * @private
14428 */
14429 _block:function (words) {
14430 var i, tmp, a, b,
14431 w = words.slice(0),
14432 h = this._h,
14433 k = this._key,
14434 h0 = h[0], h1 = h[1], h2 = h[2], h3 = h[3],
14435 h4 = h[4], h5 = h[5], h6 = h[6], h7 = h[7];
14436
14437 /* Rationale for placement of |0 :
14438 * If a value can overflow is original 32 bits by a factor of more than a few
14439 * million (2^23 ish), there is a possibility that it might overflow the
14440 * 53-bit mantissa and lose precision.
14441 *
14442 * To avoid this, we clamp back to 32 bits by |'ing with 0 on any value that
14443 * propagates around the loop, and on the hash state h[]. I don't believe
14444 * that the clamps on h4 and on h0 are strictly necessary, but it's close
14445 * (for h4 anyway), and better safe than sorry.
14446 *
14447 * The clamps on h[] are necessary for the output to be correct even in the
14448 * common case and for short inputs.
14449 */
14450 for (i=0; i<64; i++) {
14451 // load up the input word for this round
14452 if (i<16) {
14453 tmp = w[i];
14454 } else {
14455 a = w[(i+1 ) & 15];
14456 b = w[(i+14) & 15];
14457 tmp = w[i&15] = ((a>>>7 ^ a>>>18 ^ a>>>3 ^ a<<25 ^ a<<14) +
14458 (b>>>17 ^ b>>>19 ^ b>>>10 ^ b<<15 ^ b<<13) +
14459 w[i&15] + w[(i+9) & 15]) | 0;
14460 }
14461
14462 tmp = (tmp + h7 + (h4>>>6 ^ h4>>>11 ^ h4>>>25 ^ h4<<26 ^ h4<<21 ^ h4<<7) + (h6 ^ h4&(h5^h6)) + k[i]); // | 0;
14463
14464 // shift register
14465 h7 = h6; h6 = h5; h5 = h4;
14466 h4 = h3 + tmp | 0;
14467 h3 = h2; h2 = h1; h1 = h0;
14468
14469 h0 = (tmp + ((h1&h2) ^ (h3&(h1^h2))) + (h1>>>2 ^ h1>>>13 ^ h1>>>22 ^ h1<<30 ^ h1<<19 ^ h1<<10)) | 0;
14470 }
14471
14472 h[0] = h[0]+h0 | 0;
14473 h[1] = h[1]+h1 | 0;
14474 h[2] = h[2]+h2 | 0;
14475 h[3] = h[3]+h3 | 0;
14476 h[4] = h[4]+h4 | 0;
14477 h[5] = h[5]+h5 | 0;
14478 h[6] = h[6]+h6 | 0;
14479 h[7] = h[7]+h7 | 0;
14480 }
14481 };
14482 </script>
14483 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
14484 WORDLISTS["english"] = [
14485 "abandon","ability","able","about","above","absent","absorb","abstract","absurd","abuse",
14486 "access","accident","account","accuse","achieve","acid","acoustic","acquire","across","act",
14487 "action","actor","actress","actual","adapt","add","addict","address","adjust","admit",
14488 "adult","advance","advice","aerobic","affair","afford","afraid","again","age","agent",
14489 "agree","ahead","aim","air","airport","aisle","alarm","album","alcohol","alert",
14490 "alien","all","alley","allow","almost","alone","alpha","already","also","alter",
14491 "always","amateur","amazing","among","amount","amused","analyst","anchor","ancient","anger",
14492 "angle","angry","animal","ankle","announce","annual","another","answer","antenna","antique",
14493 "anxiety","any","apart","apology","appear","apple","approve","april","arch","arctic",
14494 "area","arena","argue","arm","armed","armor","army","around","arrange","arrest",
14495 "arrive","arrow","art","artefact","artist","artwork","ask","aspect","assault","asset",
14496 "assist","assume","asthma","athlete","atom","attack","attend","attitude","attract","auction",
14497 "audit","august","aunt","author","auto","autumn","average","avocado","avoid","awake",
14498 "aware","away","awesome","awful","awkward","axis","baby","bachelor","bacon","badge",
14499 "bag","balance","balcony","ball","bamboo","banana","banner","bar","barely","bargain",
14500 "barrel","base","basic","basket","battle","beach","bean","beauty","because","become",
14501 "beef","before","begin","behave","behind","believe","below","belt","bench","benefit",
14502 "best","betray","better","between","beyond","bicycle","bid","bike","bind","biology",
14503 "bird","birth","bitter","black","blade","blame","blanket","blast","bleak","bless",
14504 "blind","blood","blossom","blouse","blue","blur","blush","board","boat","body",
14505 "boil","bomb","bone","bonus","book","boost","border","boring","borrow","boss",
14506 "bottom","bounce","box","boy","bracket","brain","brand","brass","brave","bread",
14507 "breeze","brick","bridge","brief","bright","bring","brisk","broccoli","broken","bronze",
14508 "broom","brother","brown","brush","bubble","buddy","budget","buffalo","build","bulb",
14509 "bulk","bullet","bundle","bunker","burden","burger","burst","bus","business","busy",
14510 "butter","buyer","buzz","cabbage","cabin","cable","cactus","cage","cake","call",
14511 "calm","camera","camp","can","canal","cancel","candy","cannon","canoe","canvas",
14512 "canyon","capable","capital","captain","car","carbon","card","cargo","carpet","carry",
14513 "cart","case","cash","casino","castle","casual","cat","catalog","catch","category",
14514 "cattle","caught","cause","caution","cave","ceiling","celery","cement","census","century",
14515 "cereal","certain","chair","chalk","champion","change","chaos","chapter","charge","chase",
14516 "chat","cheap","check","cheese","chef","cherry","chest","chicken","chief","child",
14517 "chimney","choice","choose","chronic","chuckle","chunk","churn","cigar","cinnamon","circle",
14518 "citizen","city","civil","claim","clap","clarify","claw","clay","clean","clerk",
14519 "clever","click","client","cliff","climb","clinic","clip","clock","clog","close",
14520 "cloth","cloud","clown","club","clump","cluster","clutch","coach","coast","coconut",
14521 "code","coffee","coil","coin","collect","color","column","combine","come","comfort",
14522 "comic","common","company","concert","conduct","confirm","congress","connect","consider","control",
14523 "convince","cook","cool","copper","copy","coral","core","corn","correct","cost",
14524 "cotton","couch","country","couple","course","cousin","cover","coyote","crack","cradle",
14525 "craft","cram","crane","crash","crater","crawl","crazy","cream","credit","creek",
14526 "crew","cricket","crime","crisp","critic","crop","cross","crouch","crowd","crucial",
14527 "cruel","cruise","crumble","crunch","crush","cry","crystal","cube","culture","cup",
14528 "cupboard","curious","current","curtain","curve","cushion","custom","cute","cycle","dad",
14529 "damage","damp","dance","danger","daring","dash","daughter","dawn","day","deal",
14530 "debate","debris","decade","december","decide","decline","decorate","decrease","deer","defense",
14531 "define","defy","degree","delay","deliver","demand","demise","denial","dentist","deny",
14532 "depart","depend","deposit","depth","deputy","derive","describe","desert","design","desk",
14533 "despair","destroy","detail","detect","develop","device","devote","diagram","dial","diamond",
14534 "diary","dice","diesel","diet","differ","digital","dignity","dilemma","dinner","dinosaur",
14535 "direct","dirt","disagree","discover","disease","dish","dismiss","disorder","display","distance",
14536 "divert","divide","divorce","dizzy","doctor","document","dog","doll","dolphin","domain",
14537 "donate","donkey","donor","door","dose","double","dove","draft","dragon","drama",
14538 "drastic","draw","dream","dress","drift","drill","drink","drip","drive","drop",
14539 "drum","dry","duck","dumb","dune","during","dust","dutch","duty","dwarf",
14540 "dynamic","eager","eagle","early","earn","earth","easily","east","easy","echo",
14541 "ecology","economy","edge","edit","educate","effort","egg","eight","either","elbow",
14542 "elder","electric","elegant","element","elephant","elevator","elite","else","embark","embody",
14543 "embrace","emerge","emotion","employ","empower","empty","enable","enact","end","endless",
14544 "endorse","enemy","energy","enforce","engage","engine","enhance","enjoy","enlist","enough",
14545 "enrich","enroll","ensure","enter","entire","entry","envelope","episode","equal","equip",
14546 "era","erase","erode","erosion","error","erupt","escape","essay","essence","estate",
14547 "eternal","ethics","evidence","evil","evoke","evolve","exact","example","excess","exchange",
14548 "excite","exclude","excuse","execute","exercise","exhaust","exhibit","exile","exist","exit",
14549 "exotic","expand","expect","expire","explain","expose","express","extend","extra","eye",
14550 "eyebrow","fabric","face","faculty","fade","faint","faith","fall","false","fame",
14551 "family","famous","fan","fancy","fantasy","farm","fashion","fat","fatal","father",
14552 "fatigue","fault","favorite","feature","february","federal","fee","feed","feel","female",
14553 "fence","festival","fetch","fever","few","fiber","fiction","field","figure","file",
14554 "film","filter","final","find","fine","finger","finish","fire","firm","first",
14555 "fiscal","fish","fit","fitness","fix","flag","flame","flash","flat","flavor",
14556 "flee","flight","flip","float","flock","floor","flower","fluid","flush","fly",
14557 "foam","focus","fog","foil","fold","follow","food","foot","force","forest",
14558 "forget","fork","fortune","forum","forward","fossil","foster","found","fox","fragile",
14559 "frame","frequent","fresh","friend","fringe","frog","front","frost","frown","frozen",
14560 "fruit","fuel","fun","funny","furnace","fury","future","gadget","gain","galaxy",
14561 "gallery","game","gap","garage","garbage","garden","garlic","garment","gas","gasp",
14562 "gate","gather","gauge","gaze","general","genius","genre","gentle","genuine","gesture",
14563 "ghost","giant","gift","giggle","ginger","giraffe","girl","give","glad","glance",
14564 "glare","glass","glide","glimpse","globe","gloom","glory","glove","glow","glue",
14565 "goat","goddess","gold","good","goose","gorilla","gospel","gossip","govern","gown",
14566 "grab","grace","grain","grant","grape","grass","gravity","great","green","grid",
14567 "grief","grit","grocery","group","grow","grunt","guard","guess","guide","guilt",
14568 "guitar","gun","gym","habit","hair","half","hammer","hamster","hand","happy",
14569 "harbor","hard","harsh","harvest","hat","have","hawk","hazard","head","health",
14570 "heart","heavy","hedgehog","height","hello","helmet","help","hen","hero","hidden",
14571 "high","hill","hint","hip","hire","history","hobby","hockey","hold","hole",
14572 "holiday","hollow","home","honey","hood","hope","horn","horror","horse","hospital",
14573 "host","hotel","hour","hover","hub","huge","human","humble","humor","hundred",
14574 "hungry","hunt","hurdle","hurry","hurt","husband","hybrid","ice","icon","idea",
14575 "identify","idle","ignore","ill","illegal","illness","image","imitate","immense","immune",
14576 "impact","impose","improve","impulse","inch","include","income","increase","index","indicate",
14577 "indoor","industry","infant","inflict","inform","inhale","inherit","initial","inject","injury",
14578 "inmate","inner","innocent","input","inquiry","insane","insect","inside","inspire","install",
14579 "intact","interest","into","invest","invite","involve","iron","island","isolate","issue",
14580 "item","ivory","jacket","jaguar","jar","jazz","jealous","jeans","jelly","jewel",
14581 "job","join","joke","journey","joy","judge","juice","jump","jungle","junior",
14582 "junk","just","kangaroo","keen","keep","ketchup","key","kick","kid","kidney",
14583 "kind","kingdom","kiss","kit","kitchen","kite","kitten","kiwi","knee","knife",
14584 "knock","know","lab","label","labor","ladder","lady","lake","lamp","language",
14585 "laptop","large","later","latin","laugh","laundry","lava","law","lawn","lawsuit",
14586 "layer","lazy","leader","leaf","learn","leave","lecture","left","leg","legal",
14587 "legend","leisure","lemon","lend","length","lens","leopard","lesson","letter","level",
14588 "liar","liberty","library","license","life","lift","light","like","limb","limit",
14589 "link","lion","liquid","list","little","live","lizard","load","loan","lobster",
14590 "local","lock","logic","lonely","long","loop","lottery","loud","lounge","love",
14591 "loyal","lucky","luggage","lumber","lunar","lunch","luxury","lyrics","machine","mad",
14592 "magic","magnet","maid","mail","main","major","make","mammal","man","manage",
14593 "mandate","mango","mansion","manual","maple","marble","march","margin","marine","market",
14594 "marriage","mask","mass","master","match","material","math","matrix","matter","maximum",
14595 "maze","meadow","mean","measure","meat","mechanic","medal","media","melody","melt",
14596 "member","memory","mention","menu","mercy","merge","merit","merry","mesh","message",
14597 "metal","method","middle","midnight","milk","million","mimic","mind","minimum","minor",
14598 "minute","miracle","mirror","misery","miss","mistake","mix","mixed","mixture","mobile",
14599 "model","modify","mom","moment","monitor","monkey","monster","month","moon","moral",
14600 "more","morning","mosquito","mother","motion","motor","mountain","mouse","move","movie",
14601 "much","muffin","mule","multiply","muscle","museum","mushroom","music","must","mutual",
14602 "myself","mystery","myth","naive","name","napkin","narrow","nasty","nation","nature",
14603 "near","neck","need","negative","neglect","neither","nephew","nerve","nest","net",
14604 "network","neutral","never","news","next","nice","night","noble","noise","nominee",
14605 "noodle","normal","north","nose","notable","note","nothing","notice","novel","now",
14606 "nuclear","number","nurse","nut","oak","obey","object","oblige","obscure","observe",
14607 "obtain","obvious","occur","ocean","october","odor","off","offer","office","often",
14608 "oil","okay","old","olive","olympic","omit","once","one","onion","online",
14609 "only","open","opera","opinion","oppose","option","orange","orbit","orchard","order",
14610 "ordinary","organ","orient","original","orphan","ostrich","other","outdoor","outer","output",
14611 "outside","oval","oven","over","own","owner","oxygen","oyster","ozone","pact",
14612 "paddle","page","pair","palace","palm","panda","panel","panic","panther","paper",
14613 "parade","parent","park","parrot","party","pass","patch","path","patient","patrol",
14614 "pattern","pause","pave","payment","peace","peanut","pear","peasant","pelican","pen",
14615 "penalty","pencil","people","pepper","perfect","permit","person","pet","phone","photo",
14616 "phrase","physical","piano","picnic","picture","piece","pig","pigeon","pill","pilot",
14617 "pink","pioneer","pipe","pistol","pitch","pizza","place","planet","plastic","plate",
14618 "play","please","pledge","pluck","plug","plunge","poem","poet","point","polar",
14619 "pole","police","pond","pony","pool","popular","portion","position","possible","post",
14620 "potato","pottery","poverty","powder","power","practice","praise","predict","prefer","prepare",
14621 "present","pretty","prevent","price","pride","primary","print","priority","prison","private",
14622 "prize","problem","process","produce","profit","program","project","promote","proof","property",
14623 "prosper","protect","proud","provide","public","pudding","pull","pulp","pulse","pumpkin",
14624 "punch","pupil","puppy","purchase","purity","purpose","purse","push","put","puzzle",
14625 "pyramid","quality","quantum","quarter","question","quick","quit","quiz","quote","rabbit",
14626 "raccoon","race","rack","radar","radio","rail","rain","raise","rally","ramp",
14627 "ranch","random","range","rapid","rare","rate","rather","raven","raw","razor",
14628 "ready","real","reason","rebel","rebuild","recall","receive","recipe","record","recycle",
14629 "reduce","reflect","reform","refuse","region","regret","regular","reject","relax","release",
14630 "relief","rely","remain","remember","remind","remove","render","renew","rent","reopen",
14631 "repair","repeat","replace","report","require","rescue","resemble","resist","resource","response",
14632 "result","retire","retreat","return","reunion","reveal","review","reward","rhythm","rib",
14633 "ribbon","rice","rich","ride","ridge","rifle","right","rigid","ring","riot",
14634 "ripple","risk","ritual","rival","river","road","roast","robot","robust","rocket",
14635 "romance","roof","rookie","room","rose","rotate","rough","round","route","royal",
14636 "rubber","rude","rug","rule","run","runway","rural","sad","saddle","sadness",
14637 "safe","sail","salad","salmon","salon","salt","salute","same","sample","sand",
14638 "satisfy","satoshi","sauce","sausage","save","say","scale","scan","scare","scatter",
14639 "scene","scheme","school","science","scissors","scorpion","scout","scrap","screen","script",
14640 "scrub","sea","search","season","seat","second","secret","section","security","seed",
14641 "seek","segment","select","sell","seminar","senior","sense","sentence","series","service",
14642 "session","settle","setup","seven","shadow","shaft","shallow","share","shed","shell",
14643 "sheriff","shield","shift","shine","ship","shiver","shock","shoe","shoot","shop",
14644 "short","shoulder","shove","shrimp","shrug","shuffle","shy","sibling","sick","side",
14645 "siege","sight","sign","silent","silk","silly","silver","similar","simple","since",
14646 "sing","siren","sister","situate","six","size","skate","sketch","ski","skill",
14647 "skin","skirt","skull","slab","slam","sleep","slender","slice","slide","slight",
14648 "slim","slogan","slot","slow","slush","small","smart","smile","smoke","smooth",
14649 "snack","snake","snap","sniff","snow","soap","soccer","social","sock","soda",
14650 "soft","solar","soldier","solid","solution","solve","someone","song","soon","sorry",
14651 "sort","soul","sound","soup","source","south","space","spare","spatial","spawn",
14652 "speak","special","speed","spell","spend","sphere","spice","spider","spike","spin",
14653 "spirit","split","spoil","sponsor","spoon","sport","spot","spray","spread","spring",
14654 "spy","square","squeeze","squirrel","stable","stadium","staff","stage","stairs","stamp",
14655 "stand","start","state","stay","steak","steel","stem","step","stereo","stick",
14656 "still","sting","stock","stomach","stone","stool","story","stove","strategy","street",
14657 "strike","strong","struggle","student","stuff","stumble","style","subject","submit","subway",
14658 "success","such","sudden","suffer","sugar","suggest","suit","summer","sun","sunny",
14659 "sunset","super","supply","supreme","sure","surface","surge","surprise","surround","survey",
14660 "suspect","sustain","swallow","swamp","swap","swarm","swear","sweet","swift","swim",
14661 "swing","switch","sword","symbol","symptom","syrup","system","table","tackle","tag",
14662 "tail","talent","talk","tank","tape","target","task","taste","tattoo","taxi",
14663 "teach","team","tell","ten","tenant","tennis","tent","term","test","text",
14664 "thank","that","theme","then","theory","there","they","thing","this","thought",
14665 "three","thrive","throw","thumb","thunder","ticket","tide","tiger","tilt","timber",
14666 "time","tiny","tip","tired","tissue","title","toast","tobacco","today","toddler",
14667 "toe","together","toilet","token","tomato","tomorrow","tone","tongue","tonight","tool",
14668 "tooth","top","topic","topple","torch","tornado","tortoise","toss","total","tourist",
14669 "toward","tower","town","toy","track","trade","traffic","tragic","train","transfer",
14670 "trap","trash","travel","tray","treat","tree","trend","trial","tribe","trick",
14671 "trigger","trim","trip","trophy","trouble","truck","true","truly","trumpet","trust",
14672 "truth","try","tube","tuition","tumble","tuna","tunnel","turkey","turn","turtle",
14673 "twelve","twenty","twice","twin","twist","two","type","typical","ugly","umbrella",
14674 "unable","unaware","uncle","uncover","under","undo","unfair","unfold","unhappy","uniform",
14675 "unique","unit","universe","unknown","unlock","until","unusual","unveil","update","upgrade",
14676 "uphold","upon","upper","upset","urban","urge","usage","use","used","useful",
14677 "useless","usual","utility","vacant","vacuum","vague","valid","valley","valve","van",
14678 "vanish","vapor","various","vast","vault","vehicle","velvet","vendor","venture","venue",
14679 "verb","verify","version","very","vessel","veteran","viable","vibrant","vicious","victory",
14680 "video","view","village","vintage","violin","virtual","virus","visa","visit","visual",
14681 "vital","vivid","vocal","voice","void","volcano","volume","vote","voyage","wage",
14682 "wagon","wait","walk","wall","walnut","want","warfare","warm","warrior","wash",
14683 "wasp","waste","water","wave","way","wealth","weapon","wear","weasel","weather",
14684 "web","wedding","weekend","weird","welcome","west","wet","whale","what","wheat",
14685 "wheel","when","where","whip","whisper","wide","width","wife","wild","will",
14686 "win","window","wine","wing","wink","winner","winter","wire","wisdom","wise",
14687 "wish","witness","wolf","woman","wonder","wood","wool","word","work","world",
14688 "worry","worth","wrap","wreck","wrestle","wrist","write","wrong","yard","year",
14689 "yellow","you","young","youth","zebra","zero","zone","zoo"]
14690 </script>
14691 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
14692 WORDLISTS["japanese"] = [
14693 "あいこくしん", "あいさつ", "あいだ", "あおぞら", "あかちゃん", "あきる", "あけがた", "あける", "あこがれる", "あさい",
14694 "あさひ", "あしあと", "あじわう", "あずかる", "あずき", "あそぶ", "あたえる", "あたためる", "あたりまえ", "あたる",
14695 "あつい", "あつかう", "あっしゅく", "あつまり", "あつめる", "あてな", "あてはまる", "あひる", "あぶら", "あぶる",
14696 "あふれる", "あまい", "あまど", "あまやかす", "あまり", "あみもの", "あめりか", "あやまる", "あゆむ", "あらいぐま",
14697 "あらし", "あらすじ", "あらためる", "あらゆる", "あらわす", "ありがとう", "あわせる", "あわてる", "あんい", "あんがい",
14698 "あんこ", "あんぜん", "あんてい", "あんない", "あんまり", "いいだす", "いおん", "いがい", "いがく", "いきおい",
14699 "いきなり", "いきもの", "いきる", "いくじ", "いくぶん", "いけばな", "いけん", "いこう", "いこく", "いこつ",
14700 "いさましい", "いさん", "いしき", "いじゅう", "いじょう", "いじわる", "いずみ", "いずれ", "いせい", "いせえび",
14701 "いせかい", "いせき", "いぜん", "いそうろう", "いそがしい", "いだい", "いだく", "いたずら", "いたみ", "いたりあ",
14702 "いちおう", "いちじ", "いちど", "いちば", "いちぶ", "いちりゅう", "いつか", "いっしゅん", "いっせい", "いっそう",
14703 "いったん", "いっち", "いってい", "いっぽう", "いてざ", "いてん", "いどう", "いとこ", "いない", "いなか",
14704 "いねむり", "いのち", "いのる", "いはつ", "いばる", "いはん", "いびき", "いひん", "いふく", "いへん",
14705 "いほう", "いみん", "いもうと", "いもたれ", "いもり", "いやがる", "いやす", "いよかん", "いよく", "いらい",
14706 "いらすと", "いりぐち", "いりょう", "いれい", "いれもの", "いれる", "いろえんぴつ", "いわい", "いわう", "いわかん",
14707 "いわば", "いわゆる", "いんげんまめ", "いんさつ", "いんしょう", "いんよう", "うえき", "うえる", "うおざ", "うがい",
14708 "うかぶ", "うかべる", "うきわ", "うくらいな", "うくれれ", "うけたまわる", "うけつけ", "うけとる", "うけもつ", "うける",
14709 "うごかす", "うごく", "うこん", "うさぎ", "うしなう", "うしろがみ", "うすい", "うすぎ", "うすぐらい", "うすめる",
14710 "うせつ", "うちあわせ", "うちがわ", "うちき", "うちゅう", "うっかり", "うつくしい", "うったえる", "うつる", "うどん",
14711 "うなぎ", "うなじ", "うなずく", "うなる", "うねる", "うのう", "うぶげ", "うぶごえ", "うまれる", "うめる",
14712 "うもう", "うやまう", "うよく", "うらがえす", "うらぐち", "うらない", "うりあげ", "うりきれ", "うるさい", "うれしい",
14713 "うれゆき", "うれる", "うろこ", "うわき", "うわさ", "うんこう", "うんちん", "うんてん", "うんどう", "えいえん",
14714 "えいが", "えいきょう", "えいご", "えいせい", "えいぶん", "えいよう", "えいわ", "えおり", "えがお", "えがく",
14715 "えきたい", "えくせる", "えしゃく", "えすて", "えつらん", "えのぐ", "えほうまき", "えほん", "えまき", "えもじ",
14716 "えもの", "えらい", "えらぶ", "えりあ", "えんえん", "えんかい", "えんぎ", "えんげき", "えんしゅう", "えんぜつ",
14717 "えんそく", "えんちょう", "えんとつ", "おいかける", "おいこす", "おいしい", "おいつく", "おうえん", "おうさま", "おうじ",
14718 "おうせつ", "おうたい", "おうふく", "おうべい", "おうよう", "おえる", "おおい", "おおう", "おおどおり", "おおや",
14719 "おおよそ", "おかえり", "おかず", "おがむ", "おかわり", "おぎなう", "おきる", "おくさま", "おくじょう", "おくりがな",
14720 "おくる", "おくれる", "おこす", "おこなう", "おこる", "おさえる", "おさない", "おさめる", "おしいれ", "おしえる",
14721 "おじぎ", "おじさん", "おしゃれ", "おそらく", "おそわる", "おたがい", "おたく", "おだやか", "おちつく", "おっと",
14722 "おつり", "おでかけ", "おとしもの", "おとなしい", "おどり", "おどろかす", "おばさん", "おまいり", "おめでとう", "おもいで",
14723 "おもう", "おもたい", "おもちゃ", "おやつ", "おやゆび", "およぼす", "おらんだ", "おろす", "おんがく", "おんけい",
14724 "おんしゃ", "おんせん", "おんだん", "おんちゅう", "おんどけい", "かあつ", "かいが", "がいき", "がいけん", "がいこう",
14725 "かいさつ", "かいしゃ", "かいすいよく", "かいぜん", "かいぞうど", "かいつう", "かいてん", "かいとう", "かいふく", "がいへき",
14726 "かいほう", "かいよう", "がいらい", "かいわ", "かえる", "かおり", "かかえる", "かがく", "かがし", "かがみ",
14727 "かくご", "かくとく", "かざる", "がぞう", "かたい", "かたち", "がちょう", "がっきゅう", "がっこう", "がっさん",
14728 "がっしょう", "かなざわし", "かのう", "がはく", "かぶか", "かほう", "かほご", "かまう", "かまぼこ", "かめれおん",
14729 "かゆい", "かようび", "からい", "かるい", "かろう", "かわく", "かわら", "がんか", "かんけい", "かんこう",
14730 "かんしゃ", "かんそう", "かんたん", "かんち", "がんばる", "きあい", "きあつ", "きいろ", "ぎいん", "きうい",
14731 "きうん", "きえる", "きおう", "きおく", "きおち", "きおん", "きかい", "きかく", "きかんしゃ", "ききて",
14732 "きくばり", "きくらげ", "きけんせい", "きこう", "きこえる", "きこく", "きさい", "きさく", "きさま", "きさらぎ",
14733 "ぎじかがく", "ぎしき", "ぎじたいけん", "ぎじにってい", "ぎじゅつしゃ", "きすう", "きせい", "きせき", "きせつ", "きそう",
14734 "きぞく", "きぞん", "きたえる", "きちょう", "きつえん", "ぎっちり", "きつつき", "きつね", "きてい", "きどう",
14735 "きどく", "きない", "きなが", "きなこ", "きぬごし", "きねん", "きのう", "きのした", "きはく", "きびしい",
14736 "きひん", "きふく", "きぶん", "きぼう", "きほん", "きまる", "きみつ", "きむずかしい", "きめる", "きもだめし",
14737 "きもち", "きもの", "きゃく", "きやく", "ぎゅうにく", "きよう", "きょうりゅう", "きらい", "きらく", "きりん",
14738 "きれい", "きれつ", "きろく", "ぎろん", "きわめる", "ぎんいろ", "きんかくじ", "きんじょ", "きんようび", "ぐあい",
14739 "くいず", "くうかん", "くうき", "くうぐん", "くうこう", "ぐうせい", "くうそう", "ぐうたら", "くうふく", "くうぼ",
14740 "くかん", "くきょう", "くげん", "ぐこう", "くさい", "くさき", "くさばな", "くさる", "くしゃみ", "くしょう",
14741 "くすのき", "くすりゆび", "くせげ", "くせん", "ぐたいてき", "くださる", "くたびれる", "くちこみ", "くちさき", "くつした",
14742 "ぐっすり", "くつろぐ", "くとうてん", "くどく", "くなん", "くねくね", "くのう", "くふう", "くみあわせ", "くみたてる",
14743 "くめる", "くやくしょ", "くらす", "くらべる", "くるま", "くれる", "くろう", "くわしい", "ぐんかん", "ぐんしょく",
14744 "ぐんたい", "ぐんて", "けあな", "けいかく", "けいけん", "けいこ", "けいさつ", "げいじゅつ", "けいたい", "げいのうじん",
14745 "けいれき", "けいろ", "けおとす", "けおりもの", "げきか", "げきげん", "げきだん", "げきちん", "げきとつ", "げきは",
14746 "げきやく", "げこう", "げこくじょう", "げざい", "けさき", "げざん", "けしき", "けしごむ", "けしょう", "げすと",
14747 "けたば", "けちゃっぷ", "けちらす", "けつあつ", "けつい", "けつえき", "けっこん", "けつじょ", "けっせき", "けってい",
14748 "けつまつ", "げつようび", "げつれい", "けつろん", "げどく", "けとばす", "けとる", "けなげ", "けなす", "けなみ",
14749 "けぬき", "げねつ", "けねん", "けはい", "げひん", "けぶかい", "げぼく", "けまり", "けみかる", "けむし",
14750 "けむり", "けもの", "けらい", "けろけろ", "けわしい", "けんい", "けんえつ", "けんお", "けんか", "げんき",
14751 "けんげん", "けんこう", "けんさく", "けんしゅう", "けんすう", "げんそう", "けんちく", "けんてい", "けんとう", "けんない",
14752 "けんにん", "げんぶつ", "けんま", "けんみん", "けんめい", "けんらん", "けんり", "こあくま", "こいぬ", "こいびと",
14753 "ごうい", "こうえん", "こうおん", "こうかん", "ごうきゅう", "ごうけい", "こうこう", "こうさい", "こうじ", "こうすい",
14754 "ごうせい", "こうそく", "こうたい", "こうちゃ", "こうつう", "こうてい", "こうどう", "こうない", "こうはい", "ごうほう",
14755 "ごうまん", "こうもく", "こうりつ", "こえる", "こおり", "ごかい", "ごがつ", "ごかん", "こくご", "こくさい",
14756 "こくとう", "こくない", "こくはく", "こぐま", "こけい", "こける", "ここのか", "こころ", "こさめ", "こしつ",
14757 "こすう", "こせい", "こせき", "こぜん", "こそだて", "こたい", "こたえる", "こたつ", "こちょう", "こっか",
14758 "こつこつ", "こつばん", "こつぶ", "こてい", "こてん", "ことがら", "ことし", "ことば", "ことり", "こなごな",
14759 "こねこね", "このまま", "このみ", "このよ", "ごはん", "こひつじ", "こふう", "こふん", "こぼれる", "ごまあぶら",
14760 "こまかい", "ごますり", "こまつな", "こまる", "こむぎこ", "こもじ", "こもち", "こもの", "こもん", "こやく",
14761 "こやま", "こゆう", "こゆび", "こよい", "こよう", "こりる", "これくしょん", "ころっけ", "こわもて", "こわれる",
14762 "こんいん", "こんかい", "こんき", "こんしゅう", "こんすい", "こんだて", "こんとん", "こんなん", "こんびに", "こんぽん",
14763 "こんまけ", "こんや", "こんれい", "こんわく", "ざいえき", "さいかい", "さいきん", "ざいげん", "ざいこ", "さいしょ",
14764 "さいせい", "ざいたく", "ざいちゅう", "さいてき", "ざいりょう", "さうな", "さかいし", "さがす", "さかな", "さかみち",
14765 "さがる", "さぎょう", "さくし", "さくひん", "さくら", "さこく", "さこつ", "さずかる", "ざせき", "さたん",
14766 "さつえい", "ざつおん", "ざっか", "ざつがく", "さっきょく", "ざっし", "さつじん", "ざっそう", "さつたば", "さつまいも",
14767 "さてい", "さといも", "さとう", "さとおや", "さとし", "さとる", "さのう", "さばく", "さびしい", "さべつ",
14768 "さほう", "さほど", "さます", "さみしい", "さみだれ", "さむけ", "さめる", "さやえんどう", "さゆう", "さよう",
14769 "さよく", "さらだ", "ざるそば", "さわやか", "さわる", "さんいん", "さんか", "さんきゃく", "さんこう", "さんさい",
14770 "ざんしょ", "さんすう", "さんせい", "さんそ", "さんち", "さんま", "さんみ", "さんらん", "しあい", "しあげ",
14771 "しあさって", "しあわせ", "しいく", "しいん", "しうち", "しえい", "しおけ", "しかい", "しかく", "じかん",
14772 "しごと", "しすう", "じだい", "したうけ", "したぎ", "したて", "したみ", "しちょう", "しちりん", "しっかり",
14773 "しつじ", "しつもん", "してい", "してき", "してつ", "じてん", "じどう", "しなぎれ", "しなもの", "しなん",
14774 "しねま", "しねん", "しのぐ", "しのぶ", "しはい", "しばかり", "しはつ", "しはらい", "しはん", "しひょう",
14775 "しふく", "じぶん", "しへい", "しほう", "しほん", "しまう", "しまる", "しみん", "しむける", "じむしょ",
14776 "しめい", "しめる", "しもん", "しゃいん", "しゃうん", "しゃおん", "じゃがいも", "しやくしょ", "しゃくほう", "しゃけん",
14777 "しゃこ", "しゃざい", "しゃしん", "しゃせん", "しゃそう", "しゃたい", "しゃちょう", "しゃっきん", "じゃま", "しゃりん",
14778 "しゃれい", "じゆう", "じゅうしょ", "しゅくはく", "じゅしん", "しゅっせき", "しゅみ", "しゅらば", "じゅんばん", "しょうかい",
14779 "しょくたく", "しょっけん", "しょどう", "しょもつ", "しらせる", "しらべる", "しんか", "しんこう", "じんじゃ", "しんせいじ",
14780 "しんちく", "しんりん", "すあげ", "すあし", "すあな", "ずあん", "すいえい", "すいか", "すいとう", "ずいぶん",
14781 "すいようび", "すうがく", "すうじつ", "すうせん", "すおどり", "すきま", "すくう", "すくない", "すける", "すごい",
14782 "すこし", "ずさん", "すずしい", "すすむ", "すすめる", "すっかり", "ずっしり", "ずっと", "すてき", "すてる",
14783 "すねる", "すのこ", "すはだ", "すばらしい", "ずひょう", "ずぶぬれ", "すぶり", "すふれ", "すべて", "すべる",
14784 "ずほう", "すぼん", "すまい", "すめし", "すもう", "すやき", "すらすら", "するめ", "すれちがう", "すろっと",
14785 "すわる", "すんぜん", "すんぽう", "せあぶら", "せいかつ", "せいげん", "せいじ", "せいよう", "せおう", "せかいかん",
14786 "せきにん", "せきむ", "せきゆ", "せきらんうん", "せけん", "せこう", "せすじ", "せたい", "せたけ", "せっかく",
14787 "せっきゃく", "ぜっく", "せっけん", "せっこつ", "せっさたくま", "せつぞく", "せつだん", "せつでん", "せっぱん", "せつび",
14788 "せつぶん", "せつめい", "せつりつ", "せなか", "せのび", "せはば", "せびろ", "せぼね", "せまい", "せまる",
14789 "せめる", "せもたれ", "せりふ", "ぜんあく", "せんい", "せんえい", "せんか", "せんきょ", "せんく", "せんげん",
14790 "ぜんご", "せんさい", "せんしゅ", "せんすい", "せんせい", "せんぞ", "せんたく", "せんちょう", "せんてい", "せんとう",
14791 "せんぬき", "せんねん", "せんぱい", "ぜんぶ", "ぜんぽう", "せんむ", "せんめんじょ", "せんもん", "せんやく", "せんゆう",
14792 "せんよう", "ぜんら", "ぜんりゃく", "せんれい", "せんろ", "そあく", "そいとげる", "そいね", "そうがんきょう", "そうき",
14793 "そうご", "そうしん", "そうだん", "そうなん", "そうび", "そうめん", "そうり", "そえもの", "そえん", "そがい",
14794 "そげき", "そこう", "そこそこ", "そざい", "そしな", "そせい", "そせん", "そそぐ", "そだてる", "そつう",
14795 "そつえん", "そっかん", "そつぎょう", "そっけつ", "そっこう", "そっせん", "そっと", "そとがわ", "そとづら", "そなえる",
14796 "そなた", "そふぼ", "そぼく", "そぼろ", "そまつ", "そまる", "そむく", "そむりえ", "そめる", "そもそも",
14797 "そよかぜ", "そらまめ", "そろう", "そんかい", "そんけい", "そんざい", "そんしつ", "そんぞく", "そんちょう", "ぞんび",
14798 "ぞんぶん", "そんみん", "たあい", "たいいん", "たいうん", "たいえき", "たいおう", "だいがく", "たいき", "たいぐう",
14799 "たいけん", "たいこ", "たいざい", "だいじょうぶ", "だいすき", "たいせつ", "たいそう", "だいたい", "たいちょう", "たいてい",
14800 "だいどころ", "たいない", "たいねつ", "たいのう", "たいはん", "だいひょう", "たいふう", "たいへん", "たいほ", "たいまつばな",
14801 "たいみんぐ", "たいむ", "たいめん", "たいやき", "たいよう", "たいら", "たいりょく", "たいる", "たいわん", "たうえ",
14802 "たえる", "たおす", "たおる", "たおれる", "たかい", "たかね", "たきび", "たくさん", "たこく", "たこやき",
14803 "たさい", "たしざん", "だじゃれ", "たすける", "たずさわる", "たそがれ", "たたかう", "たたく", "ただしい", "たたみ",
14804 "たちばな", "だっかい", "だっきゃく", "だっこ", "だっしゅつ", "だったい", "たてる", "たとえる", "たなばた", "たにん",
14805 "たぬき", "たのしみ", "たはつ", "たぶん", "たべる", "たぼう", "たまご", "たまる", "だむる", "ためいき",
14806 "ためす", "ためる", "たもつ", "たやすい", "たよる", "たらす", "たりきほんがん", "たりょう", "たりる", "たると",
14807 "たれる", "たれんと", "たろっと", "たわむれる", "だんあつ", "たんい", "たんおん", "たんか", "たんき", "たんけん",
14808 "たんご", "たんさん", "たんじょうび", "だんせい", "たんそく", "たんたい", "だんち", "たんてい", "たんとう", "だんな",
14809 "たんにん", "だんねつ", "たんのう", "たんぴん", "だんぼう", "たんまつ", "たんめい", "だんれつ", "だんろ", "だんわ",
14810 "ちあい", "ちあん", "ちいき", "ちいさい", "ちえん", "ちかい", "ちから", "ちきゅう", "ちきん", "ちけいず",
14811 "ちけん", "ちこく", "ちさい", "ちしき", "ちしりょう", "ちせい", "ちそう", "ちたい", "ちたん", "ちちおや",
14812 "ちつじょ", "ちてき", "ちてん", "ちぬき", "ちぬり", "ちのう", "ちひょう", "ちへいせん", "ちほう", "ちまた",
14813 "ちみつ", "ちみどろ", "ちめいど", "ちゃんこなべ", "ちゅうい", "ちゆりょく", "ちょうし", "ちょさくけん", "ちらし", "ちらみ",
14814 "ちりがみ", "ちりょう", "ちるど", "ちわわ", "ちんたい", "ちんもく", "ついか", "ついたち", "つうか", "つうじょう",
14815 "つうはん", "つうわ", "つかう", "つかれる", "つくね", "つくる", "つけね", "つける", "つごう", "つたえる",
14816 "つづく", "つつじ", "つつむ", "つとめる", "つながる", "つなみ", "つねづね", "つのる", "つぶす", "つまらない",
14817 "つまる", "つみき", "つめたい", "つもり", "つもる", "つよい", "つるぼ", "つるみく", "つわもの", "つわり",
14818 "てあし", "てあて", "てあみ", "ていおん", "ていか", "ていき", "ていけい", "ていこく", "ていさつ", "ていし",
14819 "ていせい", "ていたい", "ていど", "ていねい", "ていひょう", "ていへん", "ていぼう", "てうち", "ておくれ", "てきとう",
14820 "てくび", "でこぼこ", "てさぎょう", "てさげ", "てすり", "てそう", "てちがい", "てちょう", "てつがく", "てつづき",
14821 "でっぱ", "てつぼう", "てつや", "でぬかえ", "てぬき", "てぬぐい", "てのひら", "てはい", "てぶくろ", "てふだ",
14822 "てほどき", "てほん", "てまえ", "てまきずし", "てみじか", "てみやげ", "てらす", "てれび", "てわけ", "てわたし",
14823 "でんあつ", "てんいん", "てんかい", "てんき", "てんぐ", "てんけん", "てんごく", "てんさい", "てんし", "てんすう",
14824 "でんち", "てんてき", "てんとう", "てんない", "てんぷら", "てんぼうだい", "てんめつ", "てんらんかい", "でんりょく", "でんわ",
14825 "どあい", "といれ", "どうかん", "とうきゅう", "どうぐ", "とうし", "とうむぎ", "とおい", "とおか", "とおく",
14826 "とおす", "とおる", "とかい", "とかす", "ときおり", "ときどき", "とくい", "とくしゅう", "とくてん", "とくに",
14827 "とくべつ", "とけい", "とける", "とこや", "とさか", "としょかん", "とそう", "とたん", "とちゅう", "とっきゅう",
14828 "とっくん", "とつぜん", "とつにゅう", "とどける", "ととのえる", "とない", "となえる", "となり", "とのさま", "とばす",
14829 "どぶがわ", "とほう", "とまる", "とめる", "ともだち", "ともる", "どようび", "とらえる", "とんかつ", "どんぶり",
14830 "ないかく", "ないこう", "ないしょ", "ないす", "ないせん", "ないそう", "なおす", "ながい", "なくす", "なげる",
14831 "なこうど", "なさけ", "なたでここ", "なっとう", "なつやすみ", "ななおし", "なにごと", "なにもの", "なにわ", "なのか",
14832 "なふだ", "なまいき", "なまえ", "なまみ", "なみだ", "なめらか", "なめる", "なやむ", "ならう", "ならび",
14833 "ならぶ", "なれる", "なわとび", "なわばり", "にあう", "にいがた", "にうけ", "におい", "にかい", "にがて",
14834 "にきび", "にくしみ", "にくまん", "にげる", "にさんかたんそ", "にしき", "にせもの", "にちじょう", "にちようび", "にっか",
14835 "にっき", "にっけい", "にっこう", "にっさん", "にっしょく", "にっすう", "にっせき", "にってい", "になう", "にほん",
14836 "にまめ", "にもつ", "にやり", "にゅういん", "にりんしゃ", "にわとり", "にんい", "にんか", "にんき", "にんげん",
14837 "にんしき", "にんずう", "にんそう", "にんたい", "にんち", "にんてい", "にんにく", "にんぷ", "にんまり", "にんむ",
14838 "にんめい", "にんよう", "ぬいくぎ", "ぬかす", "ぬぐいとる", "ぬぐう", "ぬくもり", "ぬすむ", "ぬまえび", "ぬめり",
14839 "ぬらす", "ぬんちゃく", "ねあげ", "ねいき", "ねいる", "ねいろ", "ねぐせ", "ねくたい", "ねくら", "ねこぜ",
14840 "ねこむ", "ねさげ", "ねすごす", "ねそべる", "ねだん", "ねつい", "ねっしん", "ねつぞう", "ねったいぎょ", "ねぶそく",
14841 "ねふだ", "ねぼう", "ねほりはほり", "ねまき", "ねまわし", "ねみみ", "ねむい", "ねむたい", "ねもと", "ねらう",
14842 "ねわざ", "ねんいり", "ねんおし", "ねんかん", "ねんきん", "ねんぐ", "ねんざ", "ねんし", "ねんちゃく", "ねんど",
14843 "ねんぴ", "ねんぶつ", "ねんまつ", "ねんりょう", "ねんれい", "のいず", "のおづま", "のがす", "のきなみ", "のこぎり",
14844 "のこす", "のこる", "のせる", "のぞく", "のぞむ", "のたまう", "のちほど", "のっく", "のばす", "のはら",
14845 "のべる", "のぼる", "のみもの", "のやま", "のらいぬ", "のらねこ", "のりもの", "のりゆき", "のれん", "のんき",
14846 "ばあい", "はあく", "ばあさん", "ばいか", "ばいく", "はいけん", "はいご", "はいしん", "はいすい", "はいせん",
14847 "はいそう", "はいち", "ばいばい", "はいれつ", "はえる", "はおる", "はかい", "ばかり", "はかる", "はくしゅ",
14848 "はけん", "はこぶ", "はさみ", "はさん", "はしご", "ばしょ", "はしる", "はせる", "ぱそこん", "はそん",
14849 "はたん", "はちみつ", "はつおん", "はっかく", "はづき", "はっきり", "はっくつ", "はっけん", "はっこう", "はっさん",
14850 "はっしん", "はったつ", "はっちゅう", "はってん", "はっぴょう", "はっぽう", "はなす", "はなび", "はにかむ", "はぶらし",
14851 "はみがき", "はむかう", "はめつ", "はやい", "はやし", "はらう", "はろうぃん", "はわい", "はんい", "はんえい",
14852 "はんおん", "はんかく", "はんきょう", "ばんぐみ", "はんこ", "はんしゃ", "はんすう", "はんだん", "ぱんち", "ぱんつ",
14853 "はんてい", "はんとし", "はんのう", "はんぱ", "はんぶん", "はんぺん", "はんぼうき", "はんめい", "はんらん", "はんろん",
14854 "ひいき", "ひうん", "ひえる", "ひかく", "ひかり", "ひかる", "ひかん", "ひくい", "ひけつ", "ひこうき",
14855 "ひこく", "ひさい", "ひさしぶり", "ひさん", "びじゅつかん", "ひしょ", "ひそか", "ひそむ", "ひたむき", "ひだり",
14856 "ひたる", "ひつぎ", "ひっこし", "ひっし", "ひつじゅひん", "ひっす", "ひつぜん", "ぴったり", "ぴっちり", "ひつよう",
14857 "ひてい", "ひとごみ", "ひなまつり", "ひなん", "ひねる", "ひはん", "ひびく", "ひひょう", "ひほう", "ひまわり",
14858 "ひまん", "ひみつ", "ひめい", "ひめじし", "ひやけ", "ひやす", "ひよう", "びょうき", "ひらがな", "ひらく",
14859 "ひりつ", "ひりょう", "ひるま", "ひるやすみ", "ひれい", "ひろい", "ひろう", "ひろき", "ひろゆき", "ひんかく",
14860 "ひんけつ", "ひんこん", "ひんしゅ", "ひんそう", "ぴんち", "ひんぱん", "びんぼう", "ふあん", "ふいうち", "ふうけい",
14861 "ふうせん", "ぷうたろう", "ふうとう", "ふうふ", "ふえる", "ふおん", "ふかい", "ふきん", "ふくざつ", "ふくぶくろ",
14862 "ふこう", "ふさい", "ふしぎ", "ふじみ", "ふすま", "ふせい", "ふせぐ", "ふそく", "ぶたにく", "ふたん",
14863 "ふちょう", "ふつう", "ふつか", "ふっかつ", "ふっき", "ふっこく", "ぶどう", "ふとる", "ふとん", "ふのう",
14864 "ふはい", "ふひょう", "ふへん", "ふまん", "ふみん", "ふめつ", "ふめん", "ふよう", "ふりこ", "ふりる",
14865 "ふるい", "ふんいき", "ぶんがく", "ぶんぐ", "ふんしつ", "ぶんせき", "ふんそう", "ぶんぽう", "へいあん", "へいおん",
14866 "へいがい", "へいき", "へいげん", "へいこう", "へいさ", "へいしゃ", "へいせつ", "へいそ", "へいたく", "へいてん",
14867 "へいねつ", "へいわ", "へきが", "へこむ", "べにいろ", "べにしょうが", "へらす", "へんかん", "べんきょう", "べんごし",
14868 "へんさい", "へんたい", "べんり", "ほあん", "ほいく", "ぼうぎょ", "ほうこく", "ほうそう", "ほうほう", "ほうもん",
14869 "ほうりつ", "ほえる", "ほおん", "ほかん", "ほきょう", "ぼきん", "ほくろ", "ほけつ", "ほけん", "ほこう",
14870 "ほこる", "ほしい", "ほしつ", "ほしゅ", "ほしょう", "ほせい", "ほそい", "ほそく", "ほたて", "ほたる",
14871 "ぽちぶくろ", "ほっきょく", "ほっさ", "ほったん", "ほとんど", "ほめる", "ほんい", "ほんき", "ほんけ", "ほんしつ",
14872 "ほんやく", "まいにち", "まかい", "まかせる", "まがる", "まける", "まこと", "まさつ", "まじめ", "ますく",
14873 "まぜる", "まつり", "まとめ", "まなぶ", "まぬけ", "まねく", "まほう", "まもる", "まゆげ", "まよう",
14874 "まろやか", "まわす", "まわり", "まわる", "まんが", "まんきつ", "まんぞく", "まんなか", "みいら", "みうち",
14875 "みえる", "みがく", "みかた", "みかん", "みけん", "みこん", "みじかい", "みすい", "みすえる", "みせる",
14876 "みっか", "みつかる", "みつける", "みてい", "みとめる", "みなと", "みなみかさい", "みねらる", "みのう", "みのがす",
14877 "みほん", "みもと", "みやげ", "みらい", "みりょく", "みわく", "みんか", "みんぞく", "むいか", "むえき",
14878 "むえん", "むかい", "むかう", "むかえ", "むかし", "むぎちゃ", "むける", "むげん", "むさぼる", "むしあつい",
14879 "むしば", "むじゅん", "むしろ", "むすう", "むすこ", "むすぶ", "むすめ", "むせる", "むせん", "むちゅう",
14880 "むなしい", "むのう", "むやみ", "むよう", "むらさき", "むりょう", "むろん", "めいあん", "めいうん", "めいえん",
14881 "めいかく", "めいきょく", "めいさい", "めいし", "めいそう", "めいぶつ", "めいれい", "めいわく", "めぐまれる", "めざす",
14882 "めした", "めずらしい", "めだつ", "めまい", "めやす", "めんきょ", "めんせき", "めんどう", "もうしあげる", "もうどうけん",
14883 "もえる", "もくし", "もくてき", "もくようび", "もちろん", "もどる", "もらう", "もんく", "もんだい", "やおや",
14884 "やける", "やさい", "やさしい", "やすい", "やすたろう", "やすみ", "やせる", "やそう", "やたい", "やちん",
14885 "やっと", "やっぱり", "やぶる", "やめる", "ややこしい", "やよい", "やわらかい", "ゆうき", "ゆうびんきょく", "ゆうべ",
14886 "ゆうめい", "ゆけつ", "ゆしゅつ", "ゆせん", "ゆそう", "ゆたか", "ゆちゃく", "ゆでる", "ゆにゅう", "ゆびわ",
14887 "ゆらい", "ゆれる", "ようい", "ようか", "ようきゅう", "ようじ", "ようす", "ようちえん", "よかぜ", "よかん",
14888 "よきん", "よくせい", "よくぼう", "よけい", "よごれる", "よさん", "よしゅう", "よそう", "よそく", "よっか",
14889 "よてい", "よどがわく", "よねつ", "よやく", "よゆう", "よろこぶ", "よろしい", "らいう", "らくがき", "らくご",
14890 "らくさつ", "らくだ", "らしんばん", "らせん", "らぞく", "らたい", "らっか", "られつ", "りえき", "りかい",
14891 "りきさく", "りきせつ", "りくぐん", "りくつ", "りけん", "りこう", "りせい", "りそう", "りそく", "りてん",
14892 "りねん", "りゆう", "りゅうがく", "りよう", "りょうり", "りょかん", "りょくちゃ", "りょこう", "りりく", "りれき",
14893 "りろん", "りんご", "るいけい", "るいさい", "るいじ", "るいせき", "るすばん", "るりがわら", "れいかん", "れいぎ",
14894 "れいせい", "れいぞうこ", "れいとう", "れいぼう", "れきし", "れきだい", "れんあい", "れんけい", "れんこん", "れんさい",
14895 "れんしゅう", "れんぞく", "れんらく", "ろうか", "ろうご", "ろうじん", "ろうそく", "ろくが", "ろこつ", "ろじうら",
14896 "ろしゅつ", "ろせん", "ろてん", "ろめん", "ろれつ", "ろんぎ", "ろんぱ", "ろんぶん", "ろんり", "わかす",
14897 "わかめ", "わかやま", "わかれる", "わしつ", "わじまし", "わすれもの", "わらう", "われる"]
14898 </script>
14899 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
14900 WORDLISTS["spanish"] = [
14901 "ábaco", "abdomen", "abeja", "abierto", "abogado", "abono", "aborto", "abrazo", "abrir", "abuelo",
14902 "abuso", "acabar", "academia", "acceso", "acción", "aceite", "acelga", "acento", "aceptar", "ácido",
14903 "aclarar", "acné", "acoger", "acoso", "activo", "acto", "actriz", "actuar", "acudir", "acuerdo",
14904 "acusar", "adicto", "admitir", "adoptar", "adorno", "aduana", "adulto", "aéreo", "afectar", "afición",
14905 "afinar", "afirmar", "ágil", "agitar", "agonía", "agosto", "agotar", "agregar", "agrio", "agua",
14906 "agudo", "águila", "aguja", "ahogo", "ahorro", "aire", "aislar", "ajedrez", "ajeno", "ajuste",
14907 "alacrán", "alambre", "alarma", "alba", "álbum", "alcalde", "aldea", "alegre", "alejar", "alerta",
14908 "aleta", "alfiler", "alga", "algodón", "aliado", "aliento", "alivio", "alma", "almeja", "almíbar",
14909 "altar", "alteza", "altivo", "alto", "altura", "alumno", "alzar", "amable", "amante", "amapola",
14910 "amargo", "amasar", "ámbar", "ámbito", "ameno", "amigo", "amistad", "amor", "amparo", "amplio",
14911 "ancho", "anciano", "ancla", "andar", "andén", "anemia", "ángulo", "anillo", "ánimo", "anís",
14912 "anotar", "antena", "antiguo", "antojo", "anual", "anular", "anuncio", "añadir", "añejo", "año",
14913 "apagar", "aparato", "apetito", "apio", "aplicar", "apodo", "aporte", "apoyo", "aprender", "aprobar",
14914 "apuesta", "apuro", "arado", "araña", "arar", "árbitro", "árbol", "arbusto", "archivo", "arco",
14915 "arder", "ardilla", "arduo", "área", "árido", "aries", "armonía", "arnés", "aroma", "arpa",
14916 "arpón", "arreglo", "arroz", "arruga", "arte", "artista", "asa", "asado", "asalto", "ascenso",
14917 "asegurar", "aseo", "asesor", "asiento", "asilo", "asistir", "asno", "asombro", "áspero", "astilla",
14918 "astro", "astuto", "asumir", "asunto", "atajo", "ataque", "atar", "atento", "ateo", "ático",
14919 "atleta", "átomo", "atraer", "atroz", "atún", "audaz", "audio", "auge", "aula", "aumento",
14920 "ausente", "autor", "aval", "avance", "avaro", "ave", "avellana", "avena", "avestruz", "avión",
14921 "aviso", "ayer", "ayuda", "ayuno", "azafrán", "azar", "azote", "azúcar", "azufre", "azul",
14922 "baba", "babor", "bache", "bahía", "baile", "bajar", "balanza", "balcón", "balde", "bambú",
14923 "banco", "banda", "baño", "barba", "barco", "barniz", "barro", "báscula", "bastón", "basura",
14924 "batalla", "batería", "batir", "batuta", "baúl", "bazar", "bebé", "bebida", "bello", "besar",
14925 "beso", "bestia", "bicho", "bien", "bingo", "blanco", "bloque", "blusa", "boa", "bobina",
14926 "bobo", "boca", "bocina", "boda", "bodega", "boina", "bola", "bolero", "bolsa", "bomba",
14927 "bondad", "bonito", "bono", "bonsái", "borde", "borrar", "bosque", "bote", "botín", "bóveda",
14928 "bozal", "bravo", "brazo", "brecha", "breve", "brillo", "brinco", "brisa", "broca", "broma",
14929 "bronce", "brote", "bruja", "brusco", "bruto", "buceo", "bucle", "bueno", "buey", "bufanda",
14930 "bufón", "búho", "buitre", "bulto", "burbuja", "burla", "burro", "buscar", "butaca", "buzón",
14931 "caballo", "cabeza", "cabina", "cabra", "cacao", "cadáver", "cadena", "caer", "café", "caída",
14932 "caimán", "caja", "cajón", "cal", "calamar", "calcio", "caldo", "calidad", "calle", "calma",
14933 "calor", "calvo", "cama", "cambio", "camello", "camino", "campo", "cáncer", "candil", "canela",
14934 "canguro", "canica", "canto", "caña", "cañón", "caoba", "caos", "capaz", "capitán", "capote",
14935 "captar", "capucha", "cara", "carbón", "cárcel", "careta", "carga", "cariño", "carne", "carpeta",
14936 "carro", "carta", "casa", "casco", "casero", "caspa", "castor", "catorce", "catre", "caudal",
14937 "causa", "cazo", "cebolla", "ceder", "cedro", "celda", "célebre", "celoso", "célula", "cemento",
14938 "ceniza", "centro", "cerca", "cerdo", "cereza", "cero", "cerrar", "certeza", "césped", "cetro",
14939 "chacal", "chaleco", "champú", "chancla", "chapa", "charla", "chico", "chiste", "chivo", "choque",
14940 "choza", "chuleta", "chupar", "ciclón", "ciego", "cielo", "cien", "cierto", "cifra", "cigarro",
14941 "cima", "cinco", "cine", "cinta", "ciprés", "circo", "ciruela", "cisne", "cita", "ciudad",
14942 "clamor", "clan", "claro", "clase", "clave", "cliente", "clima", "clínica", "cobre", "cocción",
14943 "cochino", "cocina", "coco", "código", "codo", "cofre", "coger", "cohete", "cojín", "cojo",
14944 "cola", "colcha", "colegio", "colgar", "colina", "collar", "colmo", "columna", "combate", "comer",
14945 "comida", "cómodo", "compra", "conde", "conejo", "conga", "conocer", "consejo", "contar", "copa",
14946 "copia", "corazón", "corbata", "corcho", "cordón", "corona", "correr", "coser", "cosmos", "costa",
14947 "cráneo", "cráter", "crear", "crecer", "creído", "crema", "cría", "crimen", "cripta", "crisis",
14948 "cromo", "crónica", "croqueta", "crudo", "cruz", "cuadro", "cuarto", "cuatro", "cubo", "cubrir",
14949 "cuchara", "cuello", "cuento", "cuerda", "cuesta", "cueva", "cuidar", "culebra", "culpa", "culto",
14950 "cumbre", "cumplir", "cuna", "cuneta", "cuota", "cupón", "cúpula", "curar", "curioso", "curso",
14951 "curva", "cutis", "dama", "danza", "dar", "dardo", "dátil", "deber", "débil", "década",
14952 "decir", "dedo", "defensa", "definir", "dejar", "delfín", "delgado", "delito", "demora", "denso",
14953 "dental", "deporte", "derecho", "derrota", "desayuno", "deseo", "desfile", "desnudo", "destino", "desvío",
14954 "detalle", "detener", "deuda", "día", "diablo", "diadema", "diamante", "diana", "diario", "dibujo",
14955 "dictar", "diente", "dieta", "diez", "difícil", "digno", "dilema", "diluir", "dinero", "directo",
14956 "dirigir", "disco", "diseño", "disfraz", "diva", "divino", "doble", "doce", "dolor", "domingo",
14957 "don", "donar", "dorado", "dormir", "dorso", "dos", "dosis", "dragón", "droga", "ducha",
14958 "duda", "duelo", "dueño", "dulce", "dúo", "duque", "durar", "dureza", "duro", "ébano",
14959 "ebrio", "echar", "eco", "ecuador", "edad", "edición", "edificio", "editor", "educar", "efecto",
14960 "eficaz", "eje", "ejemplo", "elefante", "elegir", "elemento", "elevar", "elipse", "élite", "elixir",
14961 "elogio", "eludir", "embudo", "emitir", "emoción", "empate", "empeño", "empleo", "empresa", "enano",
14962 "encargo", "enchufe", "encía", "enemigo", "enero", "enfado", "enfermo", "engaño", "enigma", "enlace",
14963 "enorme", "enredo", "ensayo", "enseñar", "entero", "entrar", "envase", "envío", "época", "equipo",
14964 "erizo", "escala", "escena", "escolar", "escribir", "escudo", "esencia", "esfera", "esfuerzo", "espada",
14965 "espejo", "espía", "esposa", "espuma", "esquí", "estar", "este", "estilo", "estufa", "etapa",
14966 "eterno", "ética", "etnia", "evadir", "evaluar", "evento", "evitar", "exacto", "examen", "exceso",
14967 "excusa", "exento", "exigir", "exilio", "existir", "éxito", "experto", "explicar", "exponer", "extremo",
14968 "fábrica", "fábula", "fachada", "fácil", "factor", "faena", "faja", "falda", "fallo", "falso",
14969 "faltar", "fama", "familia", "famoso", "faraón", "farmacia", "farol", "farsa", "fase", "fatiga",
14970 "fauna", "favor", "fax", "febrero", "fecha", "feliz", "feo", "feria", "feroz", "fértil",
14971 "fervor", "festín", "fiable", "fianza", "fiar", "fibra", "ficción", "ficha", "fideo", "fiebre",
14972 "fiel", "fiera", "fiesta", "figura", "fijar", "fijo", "fila", "filete", "filial", "filtro",
14973 "fin", "finca", "fingir", "finito", "firma", "flaco", "flauta", "flecha", "flor", "flota",
14974 "fluir", "flujo", "flúor", "fobia", "foca", "fogata", "fogón", "folio", "folleto", "fondo",
14975 "forma", "forro", "fortuna", "forzar", "fosa", "foto", "fracaso", "frágil", "franja", "frase",
14976 "fraude", "freír", "freno", "fresa", "frío", "frito", "fruta", "fuego", "fuente", "fuerza",
14977 "fuga", "fumar", "función", "funda", "furgón", "furia", "fusil", "fútbol", "futuro", "gacela",
14978 "gafas", "gaita", "gajo", "gala", "galería", "gallo", "gamba", "ganar", "gancho", "ganga",
14979 "ganso", "garaje", "garza", "gasolina", "gastar", "gato", "gavilán", "gemelo", "gemir", "gen",
14980 "género", "genio", "gente", "geranio", "gerente", "germen", "gesto", "gigante", "gimnasio", "girar",
14981 "giro", "glaciar", "globo", "gloria", "gol", "golfo", "goloso", "golpe", "goma", "gordo",
14982 "gorila", "gorra", "gota", "goteo", "gozar", "grada", "gráfico", "grano", "grasa", "gratis",
14983 "grave", "grieta", "grillo", "gripe", "gris", "grito", "grosor", "grúa", "grueso", "grumo",
14984 "grupo", "guante", "guapo", "guardia", "guerra", "guía", "guiño", "guion", "guiso", "guitarra",
14985 "gusano", "gustar", "haber", "hábil", "hablar", "hacer", "hacha", "hada", "hallar", "hamaca",
14986 "harina", "haz", "hazaña", "hebilla", "hebra", "hecho", "helado", "helio", "hembra", "herir",
14987 "hermano", "héroe", "hervir", "hielo", "hierro", "hígado", "higiene", "hijo", "himno", "historia",
14988 "hocico", "hogar", "hoguera", "hoja", "hombre", "hongo", "honor", "honra", "hora", "hormiga",
14989 "horno", "hostil", "hoyo", "hueco", "huelga", "huerta", "hueso", "huevo", "huida", "huir",
14990 "humano", "húmedo", "humilde", "humo", "hundir", "huracán", "hurto", "icono", "ideal", "idioma",
14991 "ídolo", "iglesia", "iglú", "igual", "ilegal", "ilusión", "imagen", "imán", "imitar", "impar",
14992 "imperio", "imponer", "impulso", "incapaz", "índice", "inerte", "infiel", "informe", "ingenio", "inicio",
14993 "inmenso", "inmune", "innato", "insecto", "instante", "interés", "íntimo", "intuir", "inútil", "invierno",
14994 "ira", "iris", "ironía", "isla", "islote", "jabalí", "jabón", "jamón", "jarabe", "jardín",
14995 "jarra", "jaula", "jazmín", "jefe", "jeringa", "jinete", "jornada", "joroba", "joven", "joya",
14996 "juerga", "jueves", "juez", "jugador", "jugo", "juguete", "juicio", "junco", "jungla", "junio",
14997 "juntar", "júpiter", "jurar", "justo", "juvenil", "juzgar", "kilo", "koala", "labio", "lacio",
14998 "lacra", "lado", "ladrón", "lagarto", "lágrima", "laguna", "laico", "lamer", "lámina", "lámpara",
14999 "lana", "lancha", "langosta", "lanza", "lápiz", "largo", "larva", "lástima", "lata", "látex",
15000 "latir", "laurel", "lavar", "lazo", "leal", "lección", "leche", "lector", "leer", "legión",
15001 "legumbre", "lejano", "lengua", "lento", "leña", "león", "leopardo", "lesión", "letal", "letra",
15002 "leve", "leyenda", "libertad", "libro", "licor", "líder", "lidiar", "lienzo", "liga", "ligero",
15003 "lima", "límite", "limón", "limpio", "lince", "lindo", "línea", "lingote", "lino", "linterna",
15004 "líquido", "liso", "lista", "litera", "litio", "litro", "llaga", "llama", "llanto", "llave",
15005 "llegar", "llenar", "llevar", "llorar", "llover", "lluvia", "lobo", "loción", "loco", "locura",
15006 "lógica", "logro", "lombriz", "lomo", "lonja", "lote", "lucha", "lucir", "lugar", "lujo",
15007 "luna", "lunes", "lupa", "lustro", "luto", "luz", "maceta", "macho", "madera", "madre",
15008 "maduro", "maestro", "mafia", "magia", "mago", "maíz", "maldad", "maleta", "malla", "malo",
15009 "mamá", "mambo", "mamut", "manco", "mando", "manejar", "manga", "maniquí", "manjar", "mano",
15010 "manso", "manta", "mañana", "mapa", "máquina", "mar", "marco", "marea", "marfil", "margen",
15011 "marido", "mármol", "marrón", "martes", "marzo", "masa", "máscara", "masivo", "matar", "materia",
15012 "matiz", "matriz", "máximo", "mayor", "mazorca", "mecha", "medalla", "medio", "médula", "mejilla",
15013 "mejor", "melena", "melón", "memoria", "menor", "mensaje", "mente", "menú", "mercado", "merengue",
15014 "mérito", "mes", "mesón", "meta", "meter", "método", "metro", "mezcla", "miedo", "miel",
15015 "miembro", "miga", "mil", "milagro", "militar", "millón", "mimo", "mina", "minero", "mínimo",
15016 "minuto", "miope", "mirar", "misa", "miseria", "misil", "mismo", "mitad", "mito", "mochila",
15017 "moción", "moda", "modelo", "moho", "mojar", "molde", "moler", "molino", "momento", "momia",
15018 "monarca", "moneda", "monja", "monto", "moño", "morada", "morder", "moreno", "morir", "morro",
15019 "morsa", "mortal", "mosca", "mostrar", "motivo", "mover", "móvil", "mozo", "mucho", "mudar",
15020 "mueble", "muela", "muerte", "muestra", "mugre", "mujer", "mula", "muleta", "multa", "mundo",
15021 "muñeca", "mural", "muro", "músculo", "museo", "musgo", "música", "muslo", "nácar", "nación",
15022 "nadar", "naipe", "naranja", "nariz", "narrar", "nasal", "natal", "nativo", "natural", "náusea",
15023 "naval", "nave", "navidad", "necio", "néctar", "negar", "negocio", "negro", "neón", "nervio",
15024 "neto", "neutro", "nevar", "nevera", "nicho", "nido", "niebla", "nieto", "niñez", "niño",
15025 "nítido", "nivel", "nobleza", "noche", "nómina", "noria", "norma", "norte", "nota", "noticia",
15026 "novato", "novela", "novio", "nube", "nuca", "núcleo", "nudillo", "nudo", "nuera", "nueve",
15027 "nuez", "nulo", "número", "nutria", "oasis", "obeso", "obispo", "objeto", "obra", "obrero",
15028 "observar", "obtener", "obvio", "oca", "ocaso", "océano", "ochenta", "ocho", "ocio", "ocre",
15029 "octavo", "octubre", "oculto", "ocupar", "ocurrir", "odiar", "odio", "odisea", "oeste", "ofensa",
15030 "oferta", "oficio", "ofrecer", "ogro", "oído", "oír", "ojo", "ola", "oleada", "olfato",
15031 "olivo", "olla", "olmo", "olor", "olvido", "ombligo", "onda", "onza", "opaco", "opción",
15032 "ópera", "opinar", "oponer", "optar", "óptica", "opuesto", "oración", "orador", "oral", "órbita",
15033 "orca", "orden", "oreja", "órgano", "orgía", "orgullo", "oriente", "origen", "orilla", "oro",
15034 "orquesta", "oruga", "osadía", "oscuro", "osezno", "oso", "ostra", "otoño", "otro", "oveja",
15035 "óvulo", "óxido", "oxígeno", "oyente", "ozono", "pacto", "padre", "paella", "página", "pago",
15036 "país", "pájaro", "palabra", "palco", "paleta", "pálido", "palma", "paloma", "palpar", "pan",
15037 "panal", "pánico", "pantera", "pañuelo", "papá", "papel", "papilla", "paquete", "parar", "parcela",
15038 "pared", "parir", "paro", "párpado", "parque", "párrafo", "parte", "pasar", "paseo", "pasión",
15039 "paso", "pasta", "pata", "patio", "patria", "pausa", "pauta", "pavo", "payaso", "peatón",
15040 "pecado", "pecera", "pecho", "pedal", "pedir", "pegar", "peine", "pelar", "peldaño", "pelea",
15041 "peligro", "pellejo", "pelo", "peluca", "pena", "pensar", "peñón", "peón", "peor", "pepino",
15042 "pequeño", "pera", "percha", "perder", "pereza", "perfil", "perico", "perla", "permiso", "perro",
15043 "persona", "pesa", "pesca", "pésimo", "pestaña", "pétalo", "petróleo", "pez", "pezuña", "picar",
15044 "pichón", "pie", "piedra", "pierna", "pieza", "pijama", "pilar", "piloto", "pimienta", "pino",
15045 "pintor", "pinza", "piña", "piojo", "pipa", "pirata", "pisar", "piscina", "piso", "pista",
15046 "pitón", "pizca", "placa", "plan", "plata", "playa", "plaza", "pleito", "pleno", "plomo",
15047 "pluma", "plural", "pobre", "poco", "poder", "podio", "poema", "poesía", "poeta", "polen",
15048 "policía", "pollo", "polvo", "pomada", "pomelo", "pomo", "pompa", "poner", "porción", "portal",
15049 "posada", "poseer", "posible", "poste", "potencia", "potro", "pozo", "prado", "precoz", "pregunta",
15050 "premio", "prensa", "preso", "previo", "primo", "príncipe", "prisión", "privar", "proa", "probar",
15051 "proceso", "producto", "proeza", "profesor", "programa", "prole", "promesa", "pronto", "propio", "próximo",
15052 "prueba", "público", "puchero", "pudor", "pueblo", "puerta", "puesto", "pulga", "pulir", "pulmón",
15053 "pulpo", "pulso", "puma", "punto", "puñal", "puño", "pupa", "pupila", "puré", "quedar",
15054 "queja", "quemar", "querer", "queso", "quieto", "química", "quince", "quitar", "rábano", "rabia",
15055 "rabo", "ración", "radical", "raíz", "rama", "rampa", "rancho", "rango", "rapaz", "rápido",
15056 "rapto", "rasgo", "raspa", "rato", "rayo", "raza", "razón", "reacción", "realidad", "rebaño",
15057 "rebote", "recaer", "receta", "rechazo", "recoger", "recreo", "recto", "recurso", "red", "redondo",
15058 "reducir", "reflejo", "reforma", "refrán", "refugio", "regalo", "regir", "regla", "regreso", "rehén",
15059 "reino", "reír", "reja", "relato", "relevo", "relieve", "relleno", "reloj", "remar", "remedio",
15060 "remo", "rencor", "rendir", "renta", "reparto", "repetir", "reposo", "reptil", "res", "rescate",
15061 "resina", "respeto", "resto", "resumen", "retiro", "retorno", "retrato", "reunir", "revés", "revista",
15062 "rey", "rezar", "rico", "riego", "rienda", "riesgo", "rifa", "rígido", "rigor", "rincón",
15063 "riñón", "río", "riqueza", "risa", "ritmo", "rito", "rizo", "roble", "roce", "rociar",
15064 "rodar", "rodeo", "rodilla", "roer", "rojizo", "rojo", "romero", "romper", "ron", "ronco",
15065 "ronda", "ropa", "ropero", "rosa", "rosca", "rostro", "rotar", "rubí", "rubor", "rudo",
15066 "rueda", "rugir", "ruido", "ruina", "ruleta", "rulo", "rumbo", "rumor", "ruptura", "ruta",
15067 "rutina", "sábado", "saber", "sabio", "sable", "sacar", "sagaz", "sagrado", "sala", "saldo",
15068 "salero", "salir", "salmón", "salón", "salsa", "salto", "salud", "salvar", "samba", "sanción",
15069 "sandía", "sanear", "sangre", "sanidad", "sano", "santo", "sapo", "saque", "sardina", "sartén",
15070 "sastre", "satán", "sauna", "saxofón", "sección", "seco", "secreto", "secta", "sed", "seguir",
15071 "seis", "sello", "selva", "semana", "semilla", "senda", "sensor", "señal", "señor", "separar",
15072 "sepia", "sequía", "ser", "serie", "sermón", "servir", "sesenta", "sesión", "seta", "setenta",
15073 "severo", "sexo", "sexto", "sidra", "siesta", "siete", "siglo", "signo", "sílaba", "silbar",
15074 "silencio", "silla", "símbolo", "simio", "sirena", "sistema", "sitio", "situar", "sobre", "socio",
15075 "sodio", "sol", "solapa", "soldado", "soledad", "sólido", "soltar", "solución", "sombra", "sondeo",
15076 "sonido", "sonoro", "sonrisa", "sopa", "soplar", "soporte", "sordo", "sorpresa", "sorteo", "sostén",
15077 "sótano", "suave", "subir", "suceso", "sudor", "suegra", "suelo", "sueño", "suerte", "sufrir",
15078 "sujeto", "sultán", "sumar", "superar", "suplir", "suponer", "supremo", "sur", "surco", "sureño",
15079 "surgir", "susto", "sutil", "tabaco", "tabique", "tabla", "tabú", "taco", "tacto", "tajo",
15080 "talar", "talco", "talento", "talla", "talón", "tamaño", "tambor", "tango", "tanque", "tapa",
15081 "tapete", "tapia", "tapón", "taquilla", "tarde", "tarea", "tarifa", "tarjeta", "tarot", "tarro",
15082 "tarta", "tatuaje", "tauro", "taza", "tazón", "teatro", "techo", "tecla", "técnica", "tejado",
15083 "tejer", "tejido", "tela", "teléfono", "tema", "temor", "templo", "tenaz", "tender", "tener",
15084 "tenis", "tenso", "teoría", "terapia", "terco", "término", "ternura", "terror", "tesis", "tesoro",
15085 "testigo", "tetera", "texto", "tez", "tibio", "tiburón", "tiempo", "tienda", "tierra", "tieso",
15086 "tigre", "tijera", "tilde", "timbre", "tímido", "timo", "tinta", "tío", "típico", "tipo",
15087 "tira", "tirón", "titán", "títere", "título", "tiza", "toalla", "tobillo", "tocar", "tocino",
15088 "todo", "toga", "toldo", "tomar", "tono", "tonto", "topar", "tope", "toque", "tórax",
15089 "torero", "tormenta", "torneo", "toro", "torpedo", "torre", "torso", "tortuga", "tos", "tosco",
15090 "toser", "tóxico", "trabajo", "tractor", "traer", "tráfico", "trago", "traje", "tramo", "trance",
15091 "trato", "trauma", "trazar", "trébol", "tregua", "treinta", "tren", "trepar", "tres", "tribu",
15092 "trigo", "tripa", "triste", "triunfo", "trofeo", "trompa", "tronco", "tropa", "trote", "trozo",
15093 "truco", "trueno", "trufa", "tubería", "tubo", "tuerto", "tumba", "tumor", "túnel", "túnica",
15094 "turbina", "turismo", "turno", "tutor", "ubicar", "úlcera", "umbral", "unidad", "unir", "universo",
15095 "uno", "untar", "uña", "urbano", "urbe", "urgente", "urna", "usar", "usuario", "útil",
15096 "utopía", "uva", "vaca", "vacío", "vacuna", "vagar", "vago", "vaina", "vajilla", "vale",
15097 "válido", "valle", "valor", "válvula", "vampiro", "vara", "variar", "varón", "vaso", "vecino",
15098 "vector", "vehículo", "veinte", "vejez", "vela", "velero", "veloz", "vena", "vencer", "venda",
15099 "veneno", "vengar", "venir", "venta", "venus", "ver", "verano", "verbo", "verde", "vereda",
15100 "verja", "verso", "verter", "vía", "viaje", "vibrar", "vicio", "víctima", "vida", "vídeo",
15101 "vidrio", "viejo", "viernes", "vigor", "vil", "villa", "vinagre", "vino", "viñedo", "violín",
15102 "viral", "virgo", "virtud", "visor", "víspera", "vista", "vitamina", "viudo", "vivaz", "vivero",
15103 "vivir", "vivo", "volcán", "volumen", "volver", "voraz", "votar", "voto", "voz", "vuelo",
15104 "vulgar", "yacer", "yate", "yegua", "yema", "yerno", "yeso", "yodo", "yoga", "yogur",
15105 "zafiro", "zanja", "zapato", "zarza", "zona", "zorro", "zumo", "zurdo"]
15106 </script>
15107 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
15108 WORDLISTS["chinese_simplified"] = [
15109 "的", "一", "是", "在", "不", "了", "有", "和", "人", "这",
15110 "中", "大", "为", "上", "个", "国", "我", "以", "要", "他",
15111 "时", "来", "用", "们", "生", "到", "作", "地", "于", "出",
15112 "就", "分", "对", "成", "会", "可", "主", "发", "年", "动",
15113 "同", "工", "也", "能", "下", "过", "子", "说", "产", "种",
15114 "面", "而", "方", "后", "多", "定", "行", "学", "法", "所",
15115 "民", "得", "经", "十", "三", "之", "进", "着", "等", "部",
15116 "度", "家", "电", "力", "里", "如", "水", "化", "高", "自",
15117 "二", "理", "起", "小", "物", "现", "实", "加", "量", "都",
15118 "两", "体", "制", "机", "当", "使", "点", "从", "业", "本",
15119 "去", "把", "性", "好", "应", "开", "它", "合", "还", "因",
15120 "由", "其", "些", "然", "前", "外", "天", "政", "四", "日",
15121 "那", "社", "义", "事", "平", "形", "相", "全", "表", "间",
15122 "样", "与", "关", "各", "重", "新", "线", "内", "数", "正",
15123 "心", "反", "你", "明", "看", "原", "又", "么", "利", "比",
15124 "或", "但", "质", "气", "第", "向", "道", "命", "此", "变",
15125 "条", "只", "没", "结", "解", "问", "意", "建", "月", "公",
15126 "无", "系", "军", "很", "情", "者", "最", "立", "代", "想",
15127 "已", "通", "并", "提", "直", "题", "党", "程", "展", "五",
15128 "果", "料", "象", "员", "革", "位", "入", "常", "文", "总",
15129 "次", "品", "式", "活", "设", "及", "管", "特", "件", "长",
15130 "求", "老", "头", "基", "资", "边", "流", "路", "级", "少",
15131 "图", "山", "统", "接", "知", "较", "将", "组", "见", "计",
15132 "别", "她", "手", "角", "期", "根", "论", "运", "农", "指",
15133 "几", "九", "区", "强", "放", "决", "西", "被", "干", "做",
15134 "必", "战", "先", "回", "则", "任", "取", "据", "处", "队",
15135 "南", "给", "色", "光", "门", "即", "保", "治", "北", "造",
15136 "百", "规", "热", "领", "七", "海", "口", "东", "导", "器",
15137 "压", "志", "世", "金", "增", "争", "济", "阶", "油", "思",
15138 "术", "极", "交", "受", "联", "什", "认", "六", "共", "权",
15139 "收", "证", "改", "清", "美", "再", "采", "转", "更", "单",
15140 "风", "切", "打", "白", "教", "速", "花", "带", "安", "场",
15141 "身", "车", "例", "真", "务", "具", "万", "每", "目", "至",
15142 "达", "走", "积", "示", "议", "声", "报", "斗", "完", "类",
15143 "八", "离", "华", "名", "确", "才", "科", "张", "信", "马",
15144 "节", "话", "米", "整", "空", "元", "况", "今", "集", "温",
15145 "传", "土", "许", "步", "群", "广", "石", "记", "需", "段",
15146 "研", "界", "拉", "林", "律", "叫", "且", "究", "观", "越",
15147 "织", "装", "影", "算", "低", "持", "音", "众", "书", "布",
15148 "复", "容", "儿", "须", "际", "商", "非", "验", "连", "断",
15149 "深", "难", "近", "矿", "千", "周", "委", "素", "技", "备",
15150 "半", "办", "青", "省", "列", "习", "响", "约", "支", "般",
15151 "史", "感", "劳", "便", "团", "往", "酸", "历", "市", "克",
15152 "何", "除", "消", "构", "府", "称", "太", "准", "精", "值",
15153 "号", "率", "族", "维", "划", "选", "标", "写", "存", "候",
15154 "毛", "亲", "快", "效", "斯", "院", "查", "江", "型", "眼",
15155 "王", "按", "格", "养", "易", "置", "派", "层", "片", "始",
15156 "却", "专", "状", "育", "厂", "京", "识", "适", "属", "圆",
15157 "包", "火", "住", "调", "满", "县", "局", "照", "参", "红",
15158 "细", "引", "听", "该", "铁", "价", "严", "首", "底", "液",
15159 "官", "德", "随", "病", "苏", "失", "尔", "死", "讲", "配",
15160 "女", "黄", "推", "显", "谈", "罪", "神", "艺", "呢", "席",
15161 "含", "企", "望", "密", "批", "营", "项", "防", "举", "球",
15162 "英", "氧", "势", "告", "李", "台", "落", "木", "帮", "轮",
15163 "破", "亚", "师", "围", "注", "远", "字", "材", "排", "供",
15164 "河", "态", "封", "另", "施", "减", "树", "溶", "怎", "止",
15165 "案", "言", "士", "均", "武", "固", "叶", "鱼", "波", "视",
15166 "仅", "费", "紧", "爱", "左", "章", "早", "朝", "害", "续",
15167 "轻", "服", "试", "食", "充", "兵", "源", "判", "护", "司",
15168 "足", "某", "练", "差", "致", "板", "田", "降", "黑", "犯",
15169 "负", "击", "范", "继", "兴", "似", "余", "坚", "曲", "输",
15170 "修", "故", "城", "夫", "够", "送", "笔", "船", "占", "右",
15171 "财", "吃", "富", "春", "职", "觉", "汉", "画", "功", "巴",
15172 "跟", "虽", "杂", "飞", "检", "吸", "助", "升", "阳", "互",
15173 "初", "创", "抗", "考", "投", "坏", "策", "古", "径", "换",
15174 "未", "跑", "留", "钢", "曾", "端", "责", "站", "简", "述",
15175 "钱", "副", "尽", "帝", "射", "草", "冲", "承", "独", "令",
15176 "限", "阿", "宣", "环", "双", "请", "超", "微", "让", "控",
15177 "州", "良", "轴", "找", "否", "纪", "益", "依", "优", "顶",
15178 "础", "载", "倒", "房", "突", "坐", "粉", "敌", "略", "客",
15179 "袁", "冷", "胜", "绝", "析", "块", "剂", "测", "丝", "协",
15180 "诉", "念", "陈", "仍", "罗", "盐", "友", "洋", "错", "苦",
15181 "夜", "刑", "移", "频", "逐", "靠", "混", "母", "短", "皮",
15182 "终", "聚", "汽", "村", "云", "哪", "既", "距", "卫", "停",
15183 "烈", "央", "察", "烧", "迅", "境", "若", "印", "洲", "刻",
15184 "括", "激", "孔", "搞", "甚", "室", "待", "核", "校", "散",
15185 "侵", "吧", "甲", "游", "久", "菜", "味", "旧", "模", "湖",
15186 "货", "损", "预", "阻", "毫", "普", "稳", "乙", "妈", "植",
15187 "息", "扩", "银", "语", "挥", "酒", "守", "拿", "序", "纸",
15188 "医", "缺", "雨", "吗", "针", "刘", "啊", "急", "唱", "误",
15189 "训", "愿", "审", "附", "获", "茶", "鲜", "粮", "斤", "孩",
15190 "脱", "硫", "肥", "善", "龙", "演", "父", "渐", "血", "欢",
15191 "械", "掌", "歌", "沙", "刚", "攻", "谓", "盾", "讨", "晚",
15192 "粒", "乱", "燃", "矛", "乎", "杀", "药", "宁", "鲁", "贵",
15193 "钟", "煤", "读", "班", "伯", "香", "介", "迫", "句", "丰",
15194 "培", "握", "兰", "担", "弦", "蛋", "沉", "假", "穿", "执",
15195 "答", "乐", "谁", "顺", "烟", "缩", "征", "脸", "喜", "松",
15196 "脚", "困", "异", "免", "背", "星", "福", "买", "染", "井",
15197 "概", "慢", "怕", "磁", "倍", "祖", "皇", "促", "静", "补",
15198 "评", "翻", "肉", "践", "尼", "衣", "宽", "扬", "棉", "希",
15199 "伤", "操", "垂", "秋", "宜", "氢", "套", "督", "振", "架",
15200 "亮", "末", "宪", "庆", "编", "牛", "触", "映", "雷", "销",
15201 "诗", "座", "居", "抓", "裂", "胞", "呼", "娘", "景", "威",
15202 "绿", "晶", "厚", "盟", "衡", "鸡", "孙", "延", "危", "胶",
15203 "屋", "乡", "临", "陆", "顾", "掉", "呀", "灯", "岁", "措",
15204 "束", "耐", "剧", "玉", "赵", "跳", "哥", "季", "课", "凯",
15205 "胡", "额", "款", "绍", "卷", "齐", "伟", "蒸", "殖", "永",
15206 "宗", "苗", "川", "炉", "岩", "弱", "零", "杨", "奏", "沿",
15207 "露", "杆", "探", "滑", "镇", "饭", "浓", "航", "怀", "赶",
15208 "库", "夺", "伊", "灵", "税", "途", "灭", "赛", "归", "召",
15209 "鼓", "播", "盘", "裁", "险", "康", "唯", "录", "菌", "纯",
15210 "借", "糖", "盖", "横", "符", "私", "努", "堂", "域", "枪",
15211 "润", "幅", "哈", "竟", "熟", "虫", "泽", "脑", "壤", "碳",
15212 "欧", "遍", "侧", "寨", "敢", "彻", "虑", "斜", "薄", "庭",
15213 "纳", "弹", "饲", "伸", "折", "麦", "湿", "暗", "荷", "瓦",
15214 "塞", "床", "筑", "恶", "户", "访", "塔", "奇", "透", "梁",
15215 "刀", "旋", "迹", "卡", "氯", "遇", "份", "毒", "泥", "退",
15216 "洗", "摆", "灰", "彩", "卖", "耗", "夏", "择", "忙", "铜",
15217 "献", "硬", "予", "繁", "圈", "雪", "函", "亦", "抽", "篇",
15218 "阵", "阴", "丁", "尺", "追", "堆", "雄", "迎", "泛", "爸",
15219 "楼", "避", "谋", "吨", "野", "猪", "旗", "累", "偏", "典",
15220 "馆", "索", "秦", "脂", "潮", "爷", "豆", "忽", "托", "惊",
15221 "塑", "遗", "愈", "朱", "替", "纤", "粗", "倾", "尚", "痛",
15222 "楚", "谢", "奋", "购", "磨", "君", "池", "旁", "碎", "骨",
15223 "监", "捕", "弟", "暴", "割", "贯", "殊", "释", "词", "亡",
15224 "壁", "顿", "宝", "午", "尘", "闻", "揭", "炮", "残", "冬",
15225 "桥", "妇", "警", "综", "招", "吴", "付", "浮", "遭", "徐",
15226 "您", "摇", "谷", "赞", "箱", "隔", "订", "男", "吹", "园",
15227 "纷", "唐", "败", "宋", "玻", "巨", "耕", "坦", "荣", "闭",
15228 "湾", "键", "凡", "驻", "锅", "救", "恩", "剥", "凝", "碱",
15229 "齿", "截", "炼", "麻", "纺", "禁", "废", "盛", "版", "缓",
15230 "净", "睛", "昌", "婚", "涉", "筒", "嘴", "插", "岸", "朗",
15231 "庄", "街", "藏", "姑", "贸", "腐", "奴", "啦", "惯", "乘",
15232 "伙", "恢", "匀", "纱", "扎", "辩", "耳", "彪", "臣", "亿",
15233 "璃", "抵", "脉", "秀", "萨", "俄", "网", "舞", "店", "喷",
15234 "纵", "寸", "汗", "挂", "洪", "贺", "闪", "柬", "爆", "烯",
15235 "津", "稻", "墙", "软", "勇", "像", "滚", "厘", "蒙", "芳",
15236 "肯", "坡", "柱", "荡", "腿", "仪", "旅", "尾", "轧", "冰",
15237 "贡", "登", "黎", "削", "钻", "勒", "逃", "障", "氨", "郭",
15238 "峰", "币", "港", "伏", "轨", "亩", "毕", "擦", "莫", "刺",
15239 "浪", "秘", "援", "株", "健", "售", "股", "岛", "甘", "泡",
15240 "睡", "童", "铸", "汤", "阀", "休", "汇", "舍", "牧", "绕",
15241 "炸", "哲", "磷", "绩", "朋", "淡", "尖", "启", "陷", "柴",
15242 "呈", "徒", "颜", "泪", "稍", "忘", "泵", "蓝", "拖", "洞",
15243 "授", "镜", "辛", "壮", "锋", "贫", "虚", "弯", "摩", "泰",
15244 "幼", "廷", "尊", "窗", "纲", "弄", "隶", "疑", "氏", "宫",
15245 "姐", "震", "瑞", "怪", "尤", "琴", "循", "描", "膜", "违",
15246 "夹", "腰", "缘", "珠", "穷", "森", "枝", "竹", "沟", "催",
15247 "绳", "忆", "邦", "剩", "幸", "浆", "栏", "拥", "牙", "贮",
15248 "礼", "滤", "钠", "纹", "罢", "拍", "咱", "喊", "袖", "埃",
15249 "勤", "罚", "焦", "潜", "伍", "墨", "欲", "缝", "姓", "刊",
15250 "饱", "仿", "奖", "铝", "鬼", "丽", "跨", "默", "挖", "链",
15251 "扫", "喝", "袋", "炭", "污", "幕", "诸", "弧", "励", "梅",
15252 "奶", "洁", "灾", "舟", "鉴", "苯", "讼", "抱", "毁", "懂",
15253 "寒", "智", "埔", "寄", "届", "跃", "渡", "挑", "丹", "艰",
15254 "贝", "碰", "拔", "爹", "戴", "码", "梦", "芽", "熔", "赤",
15255 "渔", "哭", "敬", "颗", "奔", "铅", "仲", "虎", "稀", "妹",
15256 "乏", "珍", "申", "桌", "遵", "允", "隆", "螺", "仓", "魏",
15257 "锐", "晓", "氮", "兼", "隐", "碍", "赫", "拨", "忠", "肃",
15258 "缸", "牵", "抢", "博", "巧", "壳", "兄", "杜", "讯", "诚",
15259 "碧", "祥", "柯", "页", "巡", "矩", "悲", "灌", "龄", "伦",
15260 "票", "寻", "桂", "铺", "圣", "恐", "恰", "郑", "趣", "抬",
15261 "荒", "腾", "贴", "柔", "滴", "猛", "阔", "辆", "妻", "填",
15262 "撤", "储", "签", "闹", "扰", "紫", "砂", "递", "戏", "吊",
15263 "陶", "伐", "喂", "疗", "瓶", "婆", "抚", "臂", "摸", "忍",
15264 "虾", "蜡", "邻", "胸", "巩", "挤", "偶", "弃", "槽", "劲",
15265 "乳", "邓", "吉", "仁", "烂", "砖", "租", "乌", "舰", "伴",
15266 "瓜", "浅", "丙", "暂", "燥", "橡", "柳", "迷", "暖", "牌",
15267 "秧", "胆", "详", "簧", "踏", "瓷", "谱", "呆", "宾", "糊",
15268 "洛", "辉", "愤", "竞", "隙", "怒", "粘", "乃", "绪", "肩",
15269 "籍", "敏", "涂", "熙", "皆", "侦", "悬", "掘", "享", "纠",
15270 "醒", "狂", "锁", "淀", "恨", "牲", "霸", "爬", "赏", "逆",
15271 "玩", "陵", "祝", "秒", "浙", "貌", "役", "彼", "悉", "鸭",
15272 "趋", "凤", "晨", "畜", "辈", "秩", "卵", "署", "梯", "炎",
15273 "滩", "棋", "驱", "筛", "峡", "冒", "啥", "寿", "译", "浸",
15274 "泉", "帽", "迟", "硅", "疆", "贷", "漏", "稿", "冠", "嫩",
15275 "胁", "芯", "牢", "叛", "蚀", "奥", "鸣", "岭", "羊", "凭",
15276 "串", "塘", "绘", "酵", "融", "盆", "锡", "庙", "筹", "冻",
15277 "辅", "摄", "袭", "筋", "拒", "僚", "旱", "钾", "鸟", "漆",
15278 "沈", "眉", "疏", "添", "棒", "穗", "硝", "韩", "逼", "扭",
15279 "侨", "凉", "挺", "碗", "栽", "炒", "杯", "患", "馏", "劝",
15280 "豪", "辽", "勃", "鸿", "旦", "吏", "拜", "狗", "埋", "辊",
15281 "掩", "饮", "搬", "骂", "辞", "勾", "扣", "估", "蒋", "绒",
15282 "雾", "丈", "朵", "姆", "拟", "宇", "辑", "陕", "雕", "偿",
15283 "蓄", "崇", "剪", "倡", "厅", "咬", "驶", "薯", "刷", "斥",
15284 "番", "赋", "奉", "佛", "浇", "漫", "曼", "扇", "钙", "桃",
15285 "扶", "仔", "返", "俗", "亏", "腔", "鞋", "棱", "覆", "框",
15286 "悄", "叔", "撞", "骗", "勘", "旺", "沸", "孤", "吐", "孟",
15287 "渠", "屈", "疾", "妙", "惜", "仰", "狠", "胀", "谐", "抛",
15288 "霉", "桑", "岗", "嘛", "衰", "盗", "渗", "脏", "赖", "涌",
15289 "甜", "曹", "阅", "肌", "哩", "厉", "烃", "纬", "毅", "昨",
15290 "伪", "症", "煮", "叹", "钉", "搭", "茎", "笼", "酷", "偷",
15291 "弓", "锥", "恒", "杰", "坑", "鼻", "翼", "纶", "叙", "狱",
15292 "逮", "罐", "络", "棚", "抑", "膨", "蔬", "寺", "骤", "穆",
15293 "冶", "枯", "册", "尸", "凸", "绅", "坯", "牺", "焰", "轰",
15294 "欣", "晋", "瘦", "御", "锭", "锦", "丧", "旬", "锻", "垄",
15295 "搜", "扑", "邀", "亭", "酯", "迈", "舒", "脆", "酶", "闲",
15296 "忧", "酚", "顽", "羽", "涨", "卸", "仗", "陪", "辟", "惩",
15297 "杭", "姚", "肚", "捉", "飘", "漂", "昆", "欺", "吾", "郎",
15298 "烷", "汁", "呵", "饰", "萧", "雅", "邮", "迁", "燕", "撒",
15299 "姻", "赴", "宴", "烦", "债", "帐", "斑", "铃", "旨", "醇",
15300 "董", "饼", "雏", "姿", "拌", "傅", "腹", "妥", "揉", "贤",
15301 "拆", "歪", "葡", "胺", "丢", "浩", "徽", "昂", "垫", "挡",
15302 "览", "贪", "慰", "缴", "汪", "慌", "冯", "诺", "姜", "谊",
15303 "凶", "劣", "诬", "耀", "昏", "躺", "盈", "骑", "乔", "溪",
15304 "丛", "卢", "抹", "闷", "咨", "刮", "驾", "缆", "悟", "摘",
15305 "铒", "掷", "颇", "幻", "柄", "惠", "惨", "佳", "仇", "腊",
15306 "窝", "涤", "剑", "瞧", "堡", "泼", "葱", "罩", "霍", "捞",
15307 "胎", "苍", "滨", "俩", "捅", "湘", "砍", "霞", "邵", "萄",
15308 "疯", "淮", "遂", "熊", "粪", "烘", "宿", "档", "戈", "驳",
15309 "嫂", "裕", "徙", "箭", "捐", "肠", "撑", "晒", "辨", "殿",
15310 "莲", "摊", "搅", "酱", "屏", "疫", "哀", "蔡", "堵", "沫",
15311 "皱", "畅", "叠", "阁", "莱", "敲", "辖", "钩", "痕", "坝",
15312 "巷", "饿", "祸", "丘", "玄", "溜", "曰", "逻", "彭", "尝",
15313 "卿", "妨", "艇", "吞", "韦", "怨", "矮", "歇" ]
15314 </script>
15315 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
15316 WORDLISTS["chinese_traditional"] = [
15317 "的", "一", "是", "在", "不", "了", "有", "和", "人", "這",
15318 "中", "大", "為", "上", "個", "國", "我", "以", "要", "他",
15319 "時", "來", "用", "們", "生", "到", "作", "地", "於", "出",
15320 "就", "分", "對", "成", "會", "可", "主", "發", "年", "動",
15321 "同", "工", "也", "能", "下", "過", "子", "說", "產", "種",
15322 "面", "而", "方", "後", "多", "定", "行", "學", "法", "所",
15323 "民", "得", "經", "十", "三", "之", "進", "著", "等", "部",
15324 "度", "家", "電", "力", "裡", "如", "水", "化", "高", "自",
15325 "二", "理", "起", "小", "物", "現", "實", "加", "量", "都",
15326 "兩", "體", "制", "機", "當", "使", "點", "從", "業", "本",
15327 "去", "把", "性", "好", "應", "開", "它", "合", "還", "因",
15328 "由", "其", "些", "然", "前", "外", "天", "政", "四", "日",
15329 "那", "社", "義", "事", "平", "形", "相", "全", "表", "間",
15330 "樣", "與", "關", "各", "重", "新", "線", "內", "數", "正",
15331 "心", "反", "你", "明", "看", "原", "又", "麼", "利", "比",
15332 "或", "但", "質", "氣", "第", "向", "道", "命", "此", "變",
15333 "條", "只", "沒", "結", "解", "問", "意", "建", "月", "公",
15334 "無", "系", "軍", "很", "情", "者", "最", "立", "代", "想",
15335 "已", "通", "並", "提", "直", "題", "黨", "程", "展", "五",
15336 "果", "料", "象", "員", "革", "位", "入", "常", "文", "總",
15337 "次", "品", "式", "活", "設", "及", "管", "特", "件", "長",
15338 "求", "老", "頭", "基", "資", "邊", "流", "路", "級", "少",
15339 "圖", "山", "統", "接", "知", "較", "將", "組", "見", "計",
15340 "別", "她", "手", "角", "期", "根", "論", "運", "農", "指",
15341 "幾", "九", "區", "強", "放", "決", "西", "被", "幹", "做",
15342 "必", "戰", "先", "回", "則", "任", "取", "據", "處", "隊",
15343 "南", "給", "色", "光", "門", "即", "保", "治", "北", "造",
15344 "百", "規", "熱", "領", "七", "海", "口", "東", "導", "器",
15345 "壓", "志", "世", "金", "增", "爭", "濟", "階", "油", "思",
15346 "術", "極", "交", "受", "聯", "什", "認", "六", "共", "權",
15347 "收", "證", "改", "清", "美", "再", "採", "轉", "更", "單",
15348 "風", "切", "打", "白", "教", "速", "花", "帶", "安", "場",
15349 "身", "車", "例", "真", "務", "具", "萬", "每", "目", "至",
15350 "達", "走", "積", "示", "議", "聲", "報", "鬥", "完", "類",
15351 "八", "離", "華", "名", "確", "才", "科", "張", "信", "馬",
15352 "節", "話", "米", "整", "空", "元", "況", "今", "集", "溫",
15353 "傳", "土", "許", "步", "群", "廣", "石", "記", "需", "段",
15354 "研", "界", "拉", "林", "律", "叫", "且", "究", "觀", "越",
15355 "織", "裝", "影", "算", "低", "持", "音", "眾", "書", "布",
15356 "复", "容", "兒", "須", "際", "商", "非", "驗", "連", "斷",
15357 "深", "難", "近", "礦", "千", "週", "委", "素", "技", "備",
15358 "半", "辦", "青", "省", "列", "習", "響", "約", "支", "般",
15359 "史", "感", "勞", "便", "團", "往", "酸", "歷", "市", "克",
15360 "何", "除", "消", "構", "府", "稱", "太", "準", "精", "值",
15361 "號", "率", "族", "維", "劃", "選", "標", "寫", "存", "候",
15362 "毛", "親", "快", "效", "斯", "院", "查", "江", "型", "眼",
15363 "王", "按", "格", "養", "易", "置", "派", "層", "片", "始",
15364 "卻", "專", "狀", "育", "廠", "京", "識", "適", "屬", "圓",
15365 "包", "火", "住", "調", "滿", "縣", "局", "照", "參", "紅",
15366 "細", "引", "聽", "該", "鐵", "價", "嚴", "首", "底", "液",
15367 "官", "德", "隨", "病", "蘇", "失", "爾", "死", "講", "配",
15368 "女", "黃", "推", "顯", "談", "罪", "神", "藝", "呢", "席",
15369 "含", "企", "望", "密", "批", "營", "項", "防", "舉", "球",
15370 "英", "氧", "勢", "告", "李", "台", "落", "木", "幫", "輪",
15371 "破", "亞", "師", "圍", "注", "遠", "字", "材", "排", "供",
15372 "河", "態", "封", "另", "施", "減", "樹", "溶", "怎", "止",
15373 "案", "言", "士", "均", "武", "固", "葉", "魚", "波", "視",
15374 "僅", "費", "緊", "愛", "左", "章", "早", "朝", "害", "續",
15375 "輕", "服", "試", "食", "充", "兵", "源", "判", "護", "司",
15376 "足", "某", "練", "差", "致", "板", "田", "降", "黑", "犯",
15377 "負", "擊", "范", "繼", "興", "似", "餘", "堅", "曲", "輸",
15378 "修", "故", "城", "夫", "夠", "送", "筆", "船", "佔", "右",
15379 "財", "吃", "富", "春", "職", "覺", "漢", "畫", "功", "巴",
15380 "跟", "雖", "雜", "飛", "檢", "吸", "助", "昇", "陽", "互",
15381 "初", "創", "抗", "考", "投", "壞", "策", "古", "徑", "換",
15382 "未", "跑", "留", "鋼", "曾", "端", "責", "站", "簡", "述",
15383 "錢", "副", "盡", "帝", "射", "草", "衝", "承", "獨", "令",
15384 "限", "阿", "宣", "環", "雙", "請", "超", "微", "讓", "控",
15385 "州", "良", "軸", "找", "否", "紀", "益", "依", "優", "頂",
15386 "礎", "載", "倒", "房", "突", "坐", "粉", "敵", "略", "客",
15387 "袁", "冷", "勝", "絕", "析", "塊", "劑", "測", "絲", "協",
15388 "訴", "念", "陳", "仍", "羅", "鹽", "友", "洋", "錯", "苦",
15389 "夜", "刑", "移", "頻", "逐", "靠", "混", "母", "短", "皮",
15390 "終", "聚", "汽", "村", "雲", "哪", "既", "距", "衛", "停",
15391 "烈", "央", "察", "燒", "迅", "境", "若", "印", "洲", "刻",
15392 "括", "激", "孔", "搞", "甚", "室", "待", "核", "校", "散",
15393 "侵", "吧", "甲", "遊", "久", "菜", "味", "舊", "模", "湖",
15394 "貨", "損", "預", "阻", "毫", "普", "穩", "乙", "媽", "植",
15395 "息", "擴", "銀", "語", "揮", "酒", "守", "拿", "序", "紙",
15396 "醫", "缺", "雨", "嗎", "針", "劉", "啊", "急", "唱", "誤",
15397 "訓", "願", "審", "附", "獲", "茶", "鮮", "糧", "斤", "孩",
15398 "脫", "硫", "肥", "善", "龍", "演", "父", "漸", "血", "歡",
15399 "械", "掌", "歌", "沙", "剛", "攻", "謂", "盾", "討", "晚",
15400 "粒", "亂", "燃", "矛", "乎", "殺", "藥", "寧", "魯", "貴",
15401 "鐘", "煤", "讀", "班", "伯", "香", "介", "迫", "句", "豐",
15402 "培", "握", "蘭", "擔", "弦", "蛋", "沉", "假", "穿", "執",
15403 "答", "樂", "誰", "順", "煙", "縮", "徵", "臉", "喜", "松",
15404 "腳", "困", "異", "免", "背", "星", "福", "買", "染", "井",
15405 "概", "慢", "怕", "磁", "倍", "祖", "皇", "促", "靜", "補",
15406 "評", "翻", "肉", "踐", "尼", "衣", "寬", "揚", "棉", "希",
15407 "傷", "操", "垂", "秋", "宜", "氫", "套", "督", "振", "架",
15408 "亮", "末", "憲", "慶", "編", "牛", "觸", "映", "雷", "銷",
15409 "詩", "座", "居", "抓", "裂", "胞", "呼", "娘", "景", "威",
15410 "綠", "晶", "厚", "盟", "衡", "雞", "孫", "延", "危", "膠",
15411 "屋", "鄉", "臨", "陸", "顧", "掉", "呀", "燈", "歲", "措",
15412 "束", "耐", "劇", "玉", "趙", "跳", "哥", "季", "課", "凱",
15413 "胡", "額", "款", "紹", "卷", "齊", "偉", "蒸", "殖", "永",
15414 "宗", "苗", "川", "爐", "岩", "弱", "零", "楊", "奏", "沿",
15415 "露", "桿", "探", "滑", "鎮", "飯", "濃", "航", "懷", "趕",
15416 "庫", "奪", "伊", "靈", "稅", "途", "滅", "賽", "歸", "召",
15417 "鼓", "播", "盤", "裁", "險", "康", "唯", "錄", "菌", "純",
15418 "借", "糖", "蓋", "橫", "符", "私", "努", "堂", "域", "槍",
15419 "潤", "幅", "哈", "竟", "熟", "蟲", "澤", "腦", "壤", "碳",
15420 "歐", "遍", "側", "寨", "敢", "徹", "慮", "斜", "薄", "庭",
15421 "納", "彈", "飼", "伸", "折", "麥", "濕", "暗", "荷", "瓦",
15422 "塞", "床", "築", "惡", "戶", "訪", "塔", "奇", "透", "梁",
15423 "刀", "旋", "跡", "卡", "氯", "遇", "份", "毒", "泥", "退",
15424 "洗", "擺", "灰", "彩", "賣", "耗", "夏", "擇", "忙", "銅",
15425 "獻", "硬", "予", "繁", "圈", "雪", "函", "亦", "抽", "篇",
15426 "陣", "陰", "丁", "尺", "追", "堆", "雄", "迎", "泛", "爸",
15427 "樓", "避", "謀", "噸", "野", "豬", "旗", "累", "偏", "典",
15428 "館", "索", "秦", "脂", "潮", "爺", "豆", "忽", "托", "驚",
15429 "塑", "遺", "愈", "朱", "替", "纖", "粗", "傾", "尚", "痛",
15430 "楚", "謝", "奮", "購", "磨", "君", "池", "旁", "碎", "骨",
15431 "監", "捕", "弟", "暴", "割", "貫", "殊", "釋", "詞", "亡",
15432 "壁", "頓", "寶", "午", "塵", "聞", "揭", "炮", "殘", "冬",
15433 "橋", "婦", "警", "綜", "招", "吳", "付", "浮", "遭", "徐",
15434 "您", "搖", "谷", "贊", "箱", "隔", "訂", "男", "吹", "園",
15435 "紛", "唐", "敗", "宋", "玻", "巨", "耕", "坦", "榮", "閉",
15436 "灣", "鍵", "凡", "駐", "鍋", "救", "恩", "剝", "凝", "鹼",
15437 "齒", "截", "煉", "麻", "紡", "禁", "廢", "盛", "版", "緩",
15438 "淨", "睛", "昌", "婚", "涉", "筒", "嘴", "插", "岸", "朗",
15439 "莊", "街", "藏", "姑", "貿", "腐", "奴", "啦", "慣", "乘",
15440 "夥", "恢", "勻", "紗", "扎", "辯", "耳", "彪", "臣", "億",
15441 "璃", "抵", "脈", "秀", "薩", "俄", "網", "舞", "店", "噴",
15442 "縱", "寸", "汗", "掛", "洪", "賀", "閃", "柬", "爆", "烯",
15443 "津", "稻", "牆", "軟", "勇", "像", "滾", "厘", "蒙", "芳",
15444 "肯", "坡", "柱", "盪", "腿", "儀", "旅", "尾", "軋", "冰",
15445 "貢", "登", "黎", "削", "鑽", "勒", "逃", "障", "氨", "郭",
15446 "峰", "幣", "港", "伏", "軌", "畝", "畢", "擦", "莫", "刺",
15447 "浪", "秘", "援", "株", "健", "售", "股", "島", "甘", "泡",
15448 "睡", "童", "鑄", "湯", "閥", "休", "匯", "舍", "牧", "繞",
15449 "炸", "哲", "磷", "績", "朋", "淡", "尖", "啟", "陷", "柴",
15450 "呈", "徒", "顏", "淚", "稍", "忘", "泵", "藍", "拖", "洞",
15451 "授", "鏡", "辛", "壯", "鋒", "貧", "虛", "彎", "摩", "泰",
15452 "幼", "廷", "尊", "窗", "綱", "弄", "隸", "疑", "氏", "宮",
15453 "姐", "震", "瑞", "怪", "尤", "琴", "循", "描", "膜", "違",
15454 "夾", "腰", "緣", "珠", "窮", "森", "枝", "竹", "溝", "催",
15455 "繩", "憶", "邦", "剩", "幸", "漿", "欄", "擁", "牙", "貯",
15456 "禮", "濾", "鈉", "紋", "罷", "拍", "咱", "喊", "袖", "埃",
15457 "勤", "罰", "焦", "潛", "伍", "墨", "欲", "縫", "姓", "刊",
15458 "飽", "仿", "獎", "鋁", "鬼", "麗", "跨", "默", "挖", "鏈",
15459 "掃", "喝", "袋", "炭", "污", "幕", "諸", "弧", "勵", "梅",
15460 "奶", "潔", "災", "舟", "鑑", "苯", "訟", "抱", "毀", "懂",
15461 "寒", "智", "埔", "寄", "屆", "躍", "渡", "挑", "丹", "艱",
15462 "貝", "碰", "拔", "爹", "戴", "碼", "夢", "芽", "熔", "赤",
15463 "漁", "哭", "敬", "顆", "奔", "鉛", "仲", "虎", "稀", "妹",
15464 "乏", "珍", "申", "桌", "遵", "允", "隆", "螺", "倉", "魏",
15465 "銳", "曉", "氮", "兼", "隱", "礙", "赫", "撥", "忠", "肅",
15466 "缸", "牽", "搶", "博", "巧", "殼", "兄", "杜", "訊", "誠",
15467 "碧", "祥", "柯", "頁", "巡", "矩", "悲", "灌", "齡", "倫",
15468 "票", "尋", "桂", "鋪", "聖", "恐", "恰", "鄭", "趣", "抬",
15469 "荒", "騰", "貼", "柔", "滴", "猛", "闊", "輛", "妻", "填",
15470 "撤", "儲", "簽", "鬧", "擾", "紫", "砂", "遞", "戲", "吊",
15471 "陶", "伐", "餵", "療", "瓶", "婆", "撫", "臂", "摸", "忍",
15472 "蝦", "蠟", "鄰", "胸", "鞏", "擠", "偶", "棄", "槽", "勁",
15473 "乳", "鄧", "吉", "仁", "爛", "磚", "租", "烏", "艦", "伴",
15474 "瓜", "淺", "丙", "暫", "燥", "橡", "柳", "迷", "暖", "牌",
15475 "秧", "膽", "詳", "簧", "踏", "瓷", "譜", "呆", "賓", "糊",
15476 "洛", "輝", "憤", "競", "隙", "怒", "粘", "乃", "緒", "肩",
15477 "籍", "敏", "塗", "熙", "皆", "偵", "懸", "掘", "享", "糾",
15478 "醒", "狂", "鎖", "淀", "恨", "牲", "霸", "爬", "賞", "逆",
15479 "玩", "陵", "祝", "秒", "浙", "貌", "役", "彼", "悉", "鴨",
15480 "趨", "鳳", "晨", "畜", "輩", "秩", "卵", "署", "梯", "炎",
15481 "灘", "棋", "驅", "篩", "峽", "冒", "啥", "壽", "譯", "浸",
15482 "泉", "帽", "遲", "矽", "疆", "貸", "漏", "稿", "冠", "嫩",
15483 "脅", "芯", "牢", "叛", "蝕", "奧", "鳴", "嶺", "羊", "憑",
15484 "串", "塘", "繪", "酵", "融", "盆", "錫", "廟", "籌", "凍",
15485 "輔", "攝", "襲", "筋", "拒", "僚", "旱", "鉀", "鳥", "漆",
15486 "沈", "眉", "疏", "添", "棒", "穗", "硝", "韓", "逼", "扭",
15487 "僑", "涼", "挺", "碗", "栽", "炒", "杯", "患", "餾", "勸",
15488 "豪", "遼", "勃", "鴻", "旦", "吏", "拜", "狗", "埋", "輥",
15489 "掩", "飲", "搬", "罵", "辭", "勾", "扣", "估", "蔣", "絨",
15490 "霧", "丈", "朵", "姆", "擬", "宇", "輯", "陝", "雕", "償",
15491 "蓄", "崇", "剪", "倡", "廳", "咬", "駛", "薯", "刷", "斥",
15492 "番", "賦", "奉", "佛", "澆", "漫", "曼", "扇", "鈣", "桃",
15493 "扶", "仔", "返", "俗", "虧", "腔", "鞋", "棱", "覆", "框",
15494 "悄", "叔", "撞", "騙", "勘", "旺", "沸", "孤", "吐", "孟",
15495 "渠", "屈", "疾", "妙", "惜", "仰", "狠", "脹", "諧", "拋",
15496 "黴", "桑", "崗", "嘛", "衰", "盜", "滲", "臟", "賴", "湧",
15497 "甜", "曹", "閱", "肌", "哩", "厲", "烴", "緯", "毅", "昨",
15498 "偽", "症", "煮", "嘆", "釘", "搭", "莖", "籠", "酷", "偷",
15499 "弓", "錐", "恆", "傑", "坑", "鼻", "翼", "綸", "敘", "獄",
15500 "逮", "罐", "絡", "棚", "抑", "膨", "蔬", "寺", "驟", "穆",
15501 "冶", "枯", "冊", "屍", "凸", "紳", "坯", "犧", "焰", "轟",
15502 "欣", "晉", "瘦", "禦", "錠", "錦", "喪", "旬", "鍛", "壟",
15503 "搜", "撲", "邀", "亭", "酯", "邁", "舒", "脆", "酶", "閒",
15504 "憂", "酚", "頑", "羽", "漲", "卸", "仗", "陪", "闢", "懲",
15505 "杭", "姚", "肚", "捉", "飄", "漂", "昆", "欺", "吾", "郎",
15506 "烷", "汁", "呵", "飾", "蕭", "雅", "郵", "遷", "燕", "撒",
15507 "姻", "赴", "宴", "煩", "債", "帳", "斑", "鈴", "旨", "醇",
15508 "董", "餅", "雛", "姿", "拌", "傅", "腹", "妥", "揉", "賢",
15509 "拆", "歪", "葡", "胺", "丟", "浩", "徽", "昂", "墊", "擋",
15510 "覽", "貪", "慰", "繳", "汪", "慌", "馮", "諾", "姜", "誼",
15511 "兇", "劣", "誣", "耀", "昏", "躺", "盈", "騎", "喬", "溪",
15512 "叢", "盧", "抹", "悶", "諮", "刮", "駕", "纜", "悟", "摘",
15513 "鉺", "擲", "頗", "幻", "柄", "惠", "慘", "佳", "仇", "臘",
15514 "窩", "滌", "劍", "瞧", "堡", "潑", "蔥", "罩", "霍", "撈",
15515 "胎", "蒼", "濱", "倆", "捅", "湘", "砍", "霞", "邵", "萄",
15516 "瘋", "淮", "遂", "熊", "糞", "烘", "宿", "檔", "戈", "駁",
15517 "嫂", "裕", "徙", "箭", "捐", "腸", "撐", "曬", "辨", "殿",
15518 "蓮", "攤", "攪", "醬", "屏", "疫", "哀", "蔡", "堵", "沫",
15519 "皺", "暢", "疊", "閣", "萊", "敲", "轄", "鉤", "痕", "壩",
15520 "巷", "餓", "禍", "丘", "玄", "溜", "曰", "邏", "彭", "嘗",
15521 "卿", "妨", "艇", "吞", "韋", "怨", "矮", "歇" ]
15522 </script>
15523 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
15524 WORDLISTS["french"] = [
15525 "abaisser", "abandon", "abdiquer", "abeille", "abolir", "aborder", "aboutir", "aboyer", "abrasif", "abreuver",
15526 "abriter", "abroger", "abrupt", "absence", "absolu", "absurde", "abusif", "abyssal", "académie", "acajou",
15527 "acarien", "accabler", "accepter", "acclamer", "accolade", "accroche", "accuser", "acerbe", "achat", "acheter",
15528 "aciduler", "acier", "acompte", "acquérir", "acronyme", "acteur", "actif", "actuel", "adepte", "adéquat",
15529 "adhésif", "adjectif", "adjuger", "admettre", "admirer", "adopter", "adorer", "adoucir", "adresse", "adroit",
15530 "adulte", "adverbe", "aérer", "aéronef", "affaire", "affecter", "affiche", "affreux", "affubler", "agacer",
15531 "agencer", "agile", "agiter", "agrafer", "agréable", "agrume", "aider", "aiguille", "ailier", "aimable",
15532 "aisance", "ajouter", "ajuster", "alarmer", "alchimie", "alerte", "algèbre", "algue", "aliéner", "aliment",
15533 "alléger", "alliage", "allouer", "allumer", "alourdir", "alpaga", "altesse", "alvéole", "amateur", "ambigu",
15534 "ambre", "aménager", "amertume", "amidon", "amiral", "amorcer", "amour", "amovible", "amphibie", "ampleur",
15535 "amusant", "analyse", "anaphore", "anarchie", "anatomie", "ancien", "anéantir", "angle", "angoisse", "anguleux",
15536 "animal", "annexer", "annonce", "annuel", "anodin", "anomalie", "anonyme", "anormal", "antenne", "antidote",
15537 "anxieux", "apaiser", "apéritif", "aplanir", "apologie", "appareil", "appeler", "apporter", "appuyer", "aquarium",
15538 "aqueduc", "arbitre", "arbuste", "ardeur", "ardoise", "argent", "arlequin", "armature", "armement", "armoire",
15539 "armure", "arpenter", "arracher", "arriver", "arroser", "arsenic", "artériel", "article", "aspect", "asphalte",
15540 "aspirer", "assaut", "asservir", "assiette", "associer", "assurer", "asticot", "astre", "astuce", "atelier",
15541 "atome", "atrium", "atroce", "attaque", "attentif", "attirer", "attraper", "aubaine", "auberge", "audace",
15542 "audible", "augurer", "aurore", "automne", "autruche", "avaler", "avancer", "avarice", "avenir", "averse",
15543 "aveugle", "aviateur", "avide", "avion", "aviser", "avoine", "avouer", "avril", "axial", "axiome",
15544 "badge", "bafouer", "bagage", "baguette", "baignade", "balancer", "balcon", "baleine", "balisage", "bambin",
15545 "bancaire", "bandage", "banlieue", "bannière", "banquier", "barbier", "baril", "baron", "barque", "barrage",
15546 "bassin", "bastion", "bataille", "bateau", "batterie", "baudrier", "bavarder", "belette", "bélier", "belote",
15547 "bénéfice", "berceau", "berger", "berline", "bermuda", "besace", "besogne", "bétail", "beurre", "biberon",
15548 "bicycle", "bidule", "bijou", "bilan", "bilingue", "billard", "binaire", "biologie", "biopsie", "biotype",
15549 "biscuit", "bison", "bistouri", "bitume", "bizarre", "blafard", "blague", "blanchir", "blessant", "blinder",
15550 "blond", "bloquer", "blouson", "bobard", "bobine", "boire", "boiser", "bolide", "bonbon", "bondir",
15551 "bonheur", "bonifier", "bonus", "bordure", "borne", "botte", "boucle", "boueux", "bougie", "boulon",
15552 "bouquin", "bourse", "boussole", "boutique", "boxeur", "branche", "brasier", "brave", "brebis", "brèche",
15553 "breuvage", "bricoler", "brigade", "brillant", "brioche", "brique", "brochure", "broder", "bronzer", "brousse",
15554 "broyeur", "brume", "brusque", "brutal", "bruyant", "buffle", "buisson", "bulletin", "bureau", "burin",
15555 "bustier", "butiner", "butoir", "buvable", "buvette", "cabanon", "cabine", "cachette", "cadeau", "cadre",
15556 "caféine", "caillou", "caisson", "calculer", "calepin", "calibre", "calmer", "calomnie", "calvaire", "camarade",
15557 "caméra", "camion", "campagne", "canal", "caneton", "canon", "cantine", "canular", "capable", "caporal",
15558 "caprice", "capsule", "capter", "capuche", "carabine", "carbone", "caresser", "caribou", "carnage", "carotte",
15559 "carreau", "carton", "cascade", "casier", "casque", "cassure", "causer", "caution", "cavalier", "caverne",
15560 "caviar", "cédille", "ceinture", "céleste", "cellule", "cendrier", "censurer", "central", "cercle", "cérébral",
15561 "cerise", "cerner", "cerveau", "cesser", "chagrin", "chaise", "chaleur", "chambre", "chance", "chapitre",
15562 "charbon", "chasseur", "chaton", "chausson", "chavirer", "chemise", "chenille", "chéquier", "chercher", "cheval",
15563 "chien", "chiffre", "chignon", "chimère", "chiot", "chlorure", "chocolat", "choisir", "chose", "chouette",
15564 "chrome", "chute", "cigare", "cigogne", "cimenter", "cinéma", "cintrer", "circuler", "cirer", "cirque",
15565 "citerne", "citoyen", "citron", "civil", "clairon", "clameur", "claquer", "classe", "clavier", "client",
15566 "cligner", "climat", "clivage", "cloche", "clonage", "cloporte", "cobalt", "cobra", "cocasse", "cocotier",
15567 "coder", "codifier", "coffre", "cogner", "cohésion", "coiffer", "coincer", "colère", "colibri", "colline",
15568 "colmater", "colonel", "combat", "comédie", "commande", "compact", "concert", "conduire", "confier", "congeler",
15569 "connoter", "consonne", "contact", "convexe", "copain", "copie", "corail", "corbeau", "cordage", "corniche",
15570 "corpus", "correct", "cortège", "cosmique", "costume", "coton", "coude", "coupure", "courage", "couteau",
15571 "couvrir", "coyote", "crabe", "crainte", "cravate", "crayon", "créature", "créditer", "crémeux", "creuser",
15572 "crevette", "cribler", "crier", "cristal", "critère", "croire", "croquer", "crotale", "crucial", "cruel",
15573 "crypter", "cubique", "cueillir", "cuillère", "cuisine", "cuivre", "culminer", "cultiver", "cumuler", "cupide",
15574 "curatif", "curseur", "cyanure", "cycle", "cylindre", "cynique", "daigner", "damier", "danger", "danseur",
15575 "dauphin", "débattre", "débiter", "déborder", "débrider", "débutant", "décaler", "décembre", "déchirer", "décider",
15576 "déclarer", "décorer", "décrire", "décupler", "dédale", "déductif", "déesse", "défensif", "défiler", "défrayer",
15577 "dégager", "dégivrer", "déglutir", "dégrafer", "déjeuner", "délice", "déloger", "demander", "demeurer", "démolir",
15578 "dénicher", "dénouer", "dentelle", "dénuder", "départ", "dépenser", "déphaser", "déplacer", "déposer", "déranger",
15579 "dérober", "désastre", "descente", "désert", "désigner", "désobéir", "dessiner", "destrier", "détacher", "détester",
15580 "détourer", "détresse", "devancer", "devenir", "deviner", "devoir", "diable", "dialogue", "diamant", "dicter",
15581 "différer", "digérer", "digital", "digne", "diluer", "dimanche", "diminuer", "dioxyde", "directif", "diriger",
15582 "discuter", "disposer", "dissiper", "distance", "divertir", "diviser", "docile", "docteur", "dogme", "doigt",
15583 "domaine", "domicile", "dompter", "donateur", "donjon", "donner", "dopamine", "dortoir", "dorure", "dosage",
15584 "doseur", "dossier", "dotation", "douanier", "double", "douceur", "douter", "doyen", "dragon", "draper",
15585 "dresser", "dribbler", "droiture", "duperie", "duplexe", "durable", "durcir", "dynastie", "éblouir", "écarter",
15586 "écharpe", "échelle", "éclairer", "éclipse", "éclore", "écluse", "école", "économie", "écorce", "écouter",
15587 "écraser", "écrémer", "écrivain", "écrou", "écume", "écureuil", "édifier", "éduquer", "effacer", "effectif",
15588 "effigie", "effort", "effrayer", "effusion", "égaliser", "égarer", "éjecter", "élaborer", "élargir", "électron",
15589 "élégant", "éléphant", "élève", "éligible", "élitisme", "éloge", "élucider", "éluder", "emballer", "embellir",
15590 "embryon", "émeraude", "émission", "emmener", "émotion", "émouvoir", "empereur", "employer", "emporter", "emprise",
15591 "émulsion", "encadrer", "enchère", "enclave", "encoche", "endiguer", "endosser", "endroit", "enduire", "énergie",
15592 "enfance", "enfermer", "enfouir", "engager", "engin", "englober", "énigme", "enjamber", "enjeu", "enlever",
15593 "ennemi", "ennuyeux", "enrichir", "enrobage", "enseigne", "entasser", "entendre", "entier", "entourer", "entraver",
15594 "énumérer", "envahir", "enviable", "envoyer", "enzyme", "éolien", "épaissir", "épargne", "épatant", "épaule",
15595 "épicerie", "épidémie", "épier", "épilogue", "épine", "épisode", "épitaphe", "époque", "épreuve", "éprouver",
15596 "épuisant", "équerre", "équipe", "ériger", "érosion", "erreur", "éruption", "escalier", "espadon", "espèce",
15597 "espiègle", "espoir", "esprit", "esquiver", "essayer", "essence", "essieu", "essorer", "estime", "estomac",
15598 "estrade", "étagère", "étaler", "étanche", "étatique", "éteindre", "étendoir", "éternel", "éthanol", "éthique",
15599 "ethnie", "étirer", "étoffer", "étoile", "étonnant", "étourdir", "étrange", "étroit", "étude", "euphorie",
15600 "évaluer", "évasion", "éventail", "évidence", "éviter", "évolutif", "évoquer", "exact", "exagérer", "exaucer",
15601 "exceller", "excitant", "exclusif", "excuse", "exécuter", "exemple", "exercer", "exhaler", "exhorter", "exigence",
15602 "exiler", "exister", "exotique", "expédier", "explorer", "exposer", "exprimer", "exquis", "extensif", "extraire",
15603 "exulter", "fable", "fabuleux", "facette", "facile", "facture", "faiblir", "falaise", "fameux", "famille",
15604 "farceur", "farfelu", "farine", "farouche", "fasciner", "fatal", "fatigue", "faucon", "fautif", "faveur",
15605 "favori", "fébrile", "féconder", "fédérer", "félin", "femme", "fémur", "fendoir", "féodal", "fermer",
15606 "féroce", "ferveur", "festival", "feuille", "feutre", "février", "fiasco", "ficeler", "fictif", "fidèle",
15607 "figure", "filature", "filetage", "filière", "filleul", "filmer", "filou", "filtrer", "financer", "finir",
15608 "fiole", "firme", "fissure", "fixer", "flairer", "flamme", "flasque", "flatteur", "fléau", "flèche",
15609 "fleur", "flexion", "flocon", "flore", "fluctuer", "fluide", "fluvial", "folie", "fonderie", "fongible",
15610 "fontaine", "forcer", "forgeron", "formuler", "fortune", "fossile", "foudre", "fougère", "fouiller", "foulure",
15611 "fourmi", "fragile", "fraise", "franchir", "frapper", "frayeur", "frégate", "freiner", "frelon", "frémir",
15612 "frénésie", "frère", "friable", "friction", "frisson", "frivole", "froid", "fromage", "frontal", "frotter",
15613 "fruit", "fugitif", "fuite", "fureur", "furieux", "furtif", "fusion", "futur", "gagner", "galaxie",
15614 "galerie", "gambader", "garantir", "gardien", "garnir", "garrigue", "gazelle", "gazon", "géant", "gélatine",
15615 "gélule", "gendarme", "général", "génie", "genou", "gentil", "géologie", "géomètre", "géranium", "germe",
15616 "gestuel", "geyser", "gibier", "gicler", "girafe", "givre", "glace", "glaive", "glisser", "globe",
15617 "gloire", "glorieux", "golfeur", "gomme", "gonfler", "gorge", "gorille", "goudron", "gouffre", "goulot",
15618 "goupille", "gourmand", "goutte", "graduel", "graffiti", "graine", "grand", "grappin", "gratuit", "gravir",
15619 "grenat", "griffure", "griller", "grimper", "grogner", "gronder", "grotte", "groupe", "gruger", "grutier",
15620 "gruyère", "guépard", "guerrier", "guide", "guimauve", "guitare", "gustatif", "gymnaste", "gyrostat", "habitude",
15621 "hachoir", "halte", "hameau", "hangar", "hanneton", "haricot", "harmonie", "harpon", "hasard", "hélium",
15622 "hématome", "herbe", "hérisson", "hermine", "héron", "hésiter", "heureux", "hiberner", "hibou", "hilarant",
15623 "histoire", "hiver", "homard", "hommage", "homogène", "honneur", "honorer", "honteux", "horde", "horizon",
15624 "horloge", "hormone", "horrible", "houleux", "housse", "hublot", "huileux", "humain", "humble", "humide",
15625 "humour", "hurler", "hydromel", "hygiène", "hymne", "hypnose", "idylle", "ignorer", "iguane", "illicite",
15626 "illusion", "image", "imbiber", "imiter", "immense", "immobile", "immuable", "impact", "impérial", "implorer",
15627 "imposer", "imprimer", "imputer", "incarner", "incendie", "incident", "incliner", "incolore", "indexer", "indice",
15628 "inductif", "inédit", "ineptie", "inexact", "infini", "infliger", "informer", "infusion", "ingérer", "inhaler",
15629 "inhiber", "injecter", "injure", "innocent", "inoculer", "inonder", "inscrire", "insecte", "insigne", "insolite",
15630 "inspirer", "instinct", "insulter", "intact", "intense", "intime", "intrigue", "intuitif", "inutile", "invasion",
15631 "inventer", "inviter", "invoquer", "ironique", "irradier", "irréel", "irriter", "isoler", "ivoire", "ivresse",
15632 "jaguar", "jaillir", "jambe", "janvier", "jardin", "jauger", "jaune", "javelot", "jetable", "jeton",
15633 "jeudi", "jeunesse", "joindre", "joncher", "jongler", "joueur", "jouissif", "journal", "jovial", "joyau",
15634 "joyeux", "jubiler", "jugement", "junior", "jupon", "juriste", "justice", "juteux", "juvénile", "kayak",
15635 "kimono", "kiosque", "label", "labial", "labourer", "lacérer", "lactose", "lagune", "laine", "laisser",
15636 "laitier", "lambeau", "lamelle", "lampe", "lanceur", "langage", "lanterne", "lapin", "largeur", "larme",
15637 "laurier", "lavabo", "lavoir", "lecture", "légal", "léger", "légume", "lessive", "lettre", "levier",
15638 "lexique", "lézard", "liasse", "libérer", "libre", "licence", "licorne", "liège", "lièvre", "ligature",
15639 "ligoter", "ligue", "limer", "limite", "limonade", "limpide", "linéaire", "lingot", "lionceau", "liquide",
15640 "lisière", "lister", "lithium", "litige", "littoral", "livreur", "logique", "lointain", "loisir", "lombric",
15641 "loterie", "louer", "lourd", "loutre", "louve", "loyal", "lubie", "lucide", "lucratif", "lueur",
15642 "lugubre", "luisant", "lumière", "lunaire", "lundi", "luron", "lutter", "luxueux", "machine", "magasin",
15643 "magenta", "magique", "maigre", "maillon", "maintien", "mairie", "maison", "majorer", "malaxer", "maléfice",
15644 "malheur", "malice", "mallette", "mammouth", "mandater", "maniable", "manquant", "manteau", "manuel", "marathon",
15645 "marbre", "marchand", "mardi", "maritime", "marqueur", "marron", "marteler", "mascotte", "massif", "matériel",
15646 "matière", "matraque", "maudire", "maussade", "mauve", "maximal", "méchant", "méconnu", "médaille", "médecin",
15647 "méditer", "méduse", "meilleur", "mélange", "mélodie", "membre", "mémoire", "menacer", "mener", "menhir",
15648 "mensonge", "mentor", "mercredi", "mérite", "merle", "messager", "mesure", "métal", "météore", "méthode",
15649 "métier", "meuble", "miauler", "microbe", "miette", "mignon", "migrer", "milieu", "million", "mimique",
15650 "mince", "minéral", "minimal", "minorer", "minute", "miracle", "miroiter", "missile", "mixte", "mobile",
15651 "moderne", "moelleux", "mondial", "moniteur", "monnaie", "monotone", "monstre", "montagne", "monument", "moqueur",
15652 "morceau", "morsure", "mortier", "moteur", "motif", "mouche", "moufle", "moulin", "mousson", "mouton",
15653 "mouvant", "multiple", "munition", "muraille", "murène", "murmure", "muscle", "muséum", "musicien", "mutation",
15654 "muter", "mutuel", "myriade", "myrtille", "mystère", "mythique", "nageur", "nappe", "narquois", "narrer",
15655 "natation", "nation", "nature", "naufrage", "nautique", "navire", "nébuleux", "nectar", "néfaste", "négation",
15656 "négliger", "négocier", "neige", "nerveux", "nettoyer", "neurone", "neutron", "neveu", "niche", "nickel",
15657 "nitrate", "niveau", "noble", "nocif", "nocturne", "noirceur", "noisette", "nomade", "nombreux", "nommer",
15658 "normatif", "notable", "notifier", "notoire", "nourrir", "nouveau", "novateur", "novembre", "novice", "nuage",
15659 "nuancer", "nuire", "nuisible", "numéro", "nuptial", "nuque", "nutritif", "obéir", "objectif", "obliger",
15660 "obscur", "observer", "obstacle", "obtenir", "obturer", "occasion", "occuper", "océan", "octobre", "octroyer",
15661 "octupler", "oculaire", "odeur", "odorant", "offenser", "officier", "offrir", "ogive", "oiseau", "oisillon",
15662 "olfactif", "olivier", "ombrage", "omettre", "onctueux", "onduler", "onéreux", "onirique", "opale", "opaque",
15663 "opérer", "opinion", "opportun", "opprimer", "opter", "optique", "orageux", "orange", "orbite", "ordonner",
15664 "oreille", "organe", "orgueil", "orifice", "ornement", "orque", "ortie", "osciller", "osmose", "ossature",
15665 "otarie", "ouragan", "ourson", "outil", "outrager", "ouvrage", "ovation", "oxyde", "oxygène", "ozone",
15666 "paisible", "palace", "palmarès", "palourde", "palper", "panache", "panda", "pangolin", "paniquer", "panneau",
15667 "panorama", "pantalon", "papaye", "papier", "papoter", "papyrus", "paradoxe", "parcelle", "paresse", "parfumer",
15668 "parler", "parole", "parrain", "parsemer", "partager", "parure", "parvenir", "passion", "pastèque", "paternel",
15669 "patience", "patron", "pavillon", "pavoiser", "payer", "paysage", "peigne", "peintre", "pelage", "pélican",
15670 "pelle", "pelouse", "peluche", "pendule", "pénétrer", "pénible", "pensif", "pénurie", "pépite", "péplum",
15671 "perdrix", "perforer", "période", "permuter", "perplexe", "persil", "perte", "peser", "pétale", "petit",
15672 "pétrir", "peuple", "pharaon", "phobie", "phoque", "photon", "phrase", "physique", "piano", "pictural",
15673 "pièce", "pierre", "pieuvre", "pilote", "pinceau", "pipette", "piquer", "pirogue", "piscine", "piston",
15674 "pivoter", "pixel", "pizza", "placard", "plafond", "plaisir", "planer", "plaque", "plastron", "plateau",
15675 "pleurer", "plexus", "pliage", "plomb", "plonger", "pluie", "plumage", "pochette", "poésie", "poète",
15676 "pointe", "poirier", "poisson", "poivre", "polaire", "policier", "pollen", "polygone", "pommade", "pompier",
15677 "ponctuel", "pondérer", "poney", "portique", "position", "posséder", "posture", "potager", "poteau", "potion",
15678 "pouce", "poulain", "poumon", "pourpre", "poussin", "pouvoir", "prairie", "pratique", "précieux", "prédire",
15679 "préfixe", "prélude", "prénom", "présence", "prétexte", "prévoir", "primitif", "prince", "prison", "priver",
15680 "problème", "procéder", "prodige", "profond", "progrès", "proie", "projeter", "prologue", "promener", "propre",
15681 "prospère", "protéger", "prouesse", "proverbe", "prudence", "pruneau", "psychose", "public", "puceron", "puiser",
15682 "pulpe", "pulsar", "punaise", "punitif", "pupitre", "purifier", "puzzle", "pyramide", "quasar", "querelle",
15683 "question", "quiétude", "quitter", "quotient", "racine", "raconter", "radieux", "ragondin", "raideur", "raisin",
15684 "ralentir", "rallonge", "ramasser", "rapide", "rasage", "ratisser", "ravager", "ravin", "rayonner", "réactif",
15685 "réagir", "réaliser", "réanimer", "recevoir", "réciter", "réclamer", "récolter", "recruter", "reculer", "recycler",
15686 "rédiger", "redouter", "refaire", "réflexe", "réformer", "refrain", "refuge", "régalien", "région", "réglage",
15687 "régulier", "réitérer", "rejeter", "rejouer", "relatif", "relever", "relief", "remarque", "remède", "remise",
15688 "remonter", "remplir", "remuer", "renard", "renfort", "renifler", "renoncer", "rentrer", "renvoi", "replier",
15689 "reporter", "reprise", "reptile", "requin", "réserve", "résineux", "résoudre", "respect", "rester", "résultat",
15690 "rétablir", "retenir", "réticule", "retomber", "retracer", "réunion", "réussir", "revanche", "revivre", "révolte",
15691 "révulsif", "richesse", "rideau", "rieur", "rigide", "rigoler", "rincer", "riposter", "risible", "risque",
15692 "rituel", "rival", "rivière", "rocheux", "romance", "rompre", "ronce", "rondin", "roseau", "rosier",
15693 "rotatif", "rotor", "rotule", "rouge", "rouille", "rouleau", "routine", "royaume", "ruban", "rubis",
15694 "ruche", "ruelle", "rugueux", "ruiner", "ruisseau", "ruser", "rustique", "rythme", "sabler", "saboter",
15695 "sabre", "sacoche", "safari", "sagesse", "saisir", "salade", "salive", "salon", "saluer", "samedi",
15696 "sanction", "sanglier", "sarcasme", "sardine", "saturer", "saugrenu", "saumon", "sauter", "sauvage", "savant",
15697 "savonner", "scalpel", "scandale", "scélérat", "scénario", "sceptre", "schéma", "science", "scinder", "score",
15698 "scrutin", "sculpter", "séance", "sécable", "sécher", "secouer", "sécréter", "sédatif", "séduire", "seigneur",
15699 "séjour", "sélectif", "semaine", "sembler", "semence", "séminal", "sénateur", "sensible", "sentence", "séparer",
15700 "séquence", "serein", "sergent", "sérieux", "serrure", "sérum", "service", "sésame", "sévir", "sevrage",
15701 "sextuple", "sidéral", "siècle", "siéger", "siffler", "sigle", "signal", "silence", "silicium", "simple",
15702 "sincère", "sinistre", "siphon", "sirop", "sismique", "situer", "skier", "social", "socle", "sodium",
15703 "soigneux", "soldat", "soleil", "solitude", "soluble", "sombre", "sommeil", "somnoler", "sonde", "songeur",
15704 "sonnette", "sonore", "sorcier", "sortir", "sosie", "sottise", "soucieux", "soudure", "souffle", "soulever",
15705 "soupape", "source", "soutirer", "souvenir", "spacieux", "spatial", "spécial", "sphère", "spiral", "stable",
15706 "station", "sternum", "stimulus", "stipuler", "strict", "studieux", "stupeur", "styliste", "sublime", "substrat",
15707 "subtil", "subvenir", "succès", "sucre", "suffixe", "suggérer", "suiveur", "sulfate", "superbe", "supplier",
15708 "surface", "suricate", "surmener", "surprise", "sursaut", "survie", "suspect", "syllabe", "symbole", "symétrie",
15709 "synapse", "syntaxe", "système", "tabac", "tablier", "tactile", "tailler", "talent", "talisman", "talonner",
15710 "tambour", "tamiser", "tangible", "tapis", "taquiner", "tarder", "tarif", "tartine", "tasse", "tatami",
15711 "tatouage", "taupe", "taureau", "taxer", "témoin", "temporel", "tenaille", "tendre", "teneur", "tenir",
15712 "tension", "terminer", "terne", "terrible", "tétine", "texte", "thème", "théorie", "thérapie", "thorax",
15713 "tibia", "tiède", "timide", "tirelire", "tiroir", "tissu", "titane", "titre", "tituber", "toboggan",
15714 "tolérant", "tomate", "tonique", "tonneau", "toponyme", "torche", "tordre", "tornade", "torpille", "torrent",
15715 "torse", "tortue", "totem", "toucher", "tournage", "tousser", "toxine", "traction", "trafic", "tragique",
15716 "trahir", "train", "trancher", "travail", "trèfle", "tremper", "trésor", "treuil", "triage", "tribunal",
15717 "tricoter", "trilogie", "triomphe", "tripler", "triturer", "trivial", "trombone", "tronc", "tropical", "troupeau",
15718 "tuile", "tulipe", "tumulte", "tunnel", "turbine", "tuteur", "tutoyer", "tuyau", "tympan", "typhon",
15719 "typique", "tyran", "ubuesque", "ultime", "ultrason", "unanime", "unifier", "union", "unique", "unitaire",
15720 "univers", "uranium", "urbain", "urticant", "usage", "usine", "usuel", "usure", "utile", "utopie",
15721 "vacarme", "vaccin", "vagabond", "vague", "vaillant", "vaincre", "vaisseau", "valable", "valise", "vallon",
15722 "valve", "vampire", "vanille", "vapeur", "varier", "vaseux", "vassal", "vaste", "vecteur", "vedette",
15723 "végétal", "véhicule", "veinard", "véloce", "vendredi", "vénérer", "venger", "venimeux", "ventouse", "verdure",
15724 "vérin", "vernir", "verrou", "verser", "vertu", "veston", "vétéran", "vétuste", "vexant", "vexer",
15725 "viaduc", "viande", "victoire", "vidange", "vidéo", "vignette", "vigueur", "vilain", "village", "vinaigre",
15726 "violon", "vipère", "virement", "virtuose", "virus", "visage", "viseur", "vision", "visqueux", "visuel",
15727 "vital", "vitesse", "viticole", "vitrine", "vivace", "vivipare", "vocation", "voguer", "voile", "voisin",
15728 "voiture", "volaille", "volcan", "voltiger", "volume", "vorace", "vortex", "voter", "vouloir", "voyage",
15729 "voyelle", "wagon", "xénon", "yacht", "zèbre", "zénith", "zeste", "zoologie"]
15730 </script>
15731 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
15732 WORDLISTS["italian"] = [
15733 "abaco", "abbaglio", "abbinato", "abete", "abisso", "abolire", "abrasivo", "abrogato", "accadere", "accenno",
15734 "accusato", "acetone", "achille", "acido", "acqua", "acre", "acrilico", "acrobata", "acuto", "adagio",
15735 "addebito", "addome", "adeguato", "aderire", "adipe", "adottare", "adulare", "affabile", "affetto", "affisso",
15736 "affranto", "aforisma", "afoso", "africano", "agave", "agente", "agevole", "aggancio", "agire", "agitare",
15737 "agonismo", "agricolo", "agrumeto", "aguzzo", "alabarda", "alato", "albatro", "alberato", "albo", "albume",
15738 "alce", "alcolico", "alettone", "alfa", "algebra", "aliante", "alibi", "alimento", "allagato", "allegro",
15739 "allievo", "allodola", "allusivo", "almeno", "alogeno", "alpaca", "alpestre", "altalena", "alterno", "alticcio",
15740 "altrove", "alunno", "alveolo", "alzare", "amalgama", "amanita", "amarena", "ambito", "ambrato", "ameba",
15741 "america", "ametista", "amico", "ammasso", "ammenda", "ammirare", "ammonito", "amore", "ampio", "ampliare",
15742 "amuleto", "anacardo", "anagrafe", "analista", "anarchia", "anatra", "anca", "ancella", "ancora", "andare",
15743 "andrea", "anello", "angelo", "angolare", "angusto", "anima", "annegare", "annidato", "anno", "annuncio",
15744 "anonimo", "anticipo", "anzi", "apatico", "apertura", "apode", "apparire", "appetito", "appoggio", "approdo",
15745 "appunto", "aprile", "arabica", "arachide", "aragosta", "araldica", "arancio", "aratura", "arazzo", "arbitro",
15746 "archivio", "ardito", "arenile", "argento", "argine", "arguto", "aria", "armonia", "arnese", "arredato",
15747 "arringa", "arrosto", "arsenico", "arso", "artefice", "arzillo", "asciutto", "ascolto", "asepsi", "asettico",
15748 "asfalto", "asino", "asola", "aspirato", "aspro", "assaggio", "asse", "assoluto", "assurdo", "asta",
15749 "astenuto", "astice", "astratto", "atavico", "ateismo", "atomico", "atono", "attesa", "attivare", "attorno",
15750 "attrito", "attuale", "ausilio", "austria", "autista", "autonomo", "autunno", "avanzato", "avere", "avvenire",
15751 "avviso", "avvolgere", "azione", "azoto", "azzimo", "azzurro", "babele", "baccano", "bacino", "baco",
15752 "badessa", "badilata", "bagnato", "baita", "balcone", "baldo", "balena", "ballata", "balzano", "bambino",
15753 "bandire", "baraonda", "barbaro", "barca", "baritono", "barlume", "barocco", "basilico", "basso", "batosta",
15754 "battuto", "baule", "bava", "bavosa", "becco", "beffa", "belgio", "belva", "benda", "benevole",
15755 "benigno", "benzina", "bere", "berlina", "beta", "bibita", "bici", "bidone", "bifido", "biga",
15756 "bilancia", "bimbo", "binocolo", "biologo", "bipede", "bipolare", "birbante", "birra", "biscotto", "bisesto",
15757 "bisnonno", "bisonte", "bisturi", "bizzarro", "blando", "blatta", "bollito", "bonifico", "bordo", "bosco",
15758 "botanico", "bottino", "bozzolo", "braccio", "bradipo", "brama", "branca", "bravura", "bretella", "brevetto",
15759 "brezza", "briglia", "brillante", "brindare", "broccolo", "brodo", "bronzina", "brullo", "bruno", "bubbone",
15760 "buca", "budino", "buffone", "buio", "bulbo", "buono", "burlone", "burrasca", "bussola", "busta",
15761 "cadetto", "caduco", "calamaro", "calcolo", "calesse", "calibro", "calmo", "caloria", "cambusa", "camerata",
15762 "camicia", "cammino", "camola", "campale", "canapa", "candela", "cane", "canino", "canotto", "cantina",
15763 "capace", "capello", "capitolo", "capogiro", "cappero", "capra", "capsula", "carapace", "carcassa", "cardo",
15764 "carisma", "carovana", "carretto", "cartolina", "casaccio", "cascata", "caserma", "caso", "cassone", "castello",
15765 "casuale", "catasta", "catena", "catrame", "cauto", "cavillo", "cedibile", "cedrata", "cefalo", "celebre",
15766 "cellulare", "cena", "cenone", "centesimo", "ceramica", "cercare", "certo", "cerume", "cervello", "cesoia",
15767 "cespo", "ceto", "chela", "chiaro", "chicca", "chiedere", "chimera", "china", "chirurgo", "chitarra",
15768 "ciao", "ciclismo", "cifrare", "cigno", "cilindro", "ciottolo", "circa", "cirrosi", "citrico", "cittadino",
15769 "ciuffo", "civetta", "civile", "classico", "clinica", "cloro", "cocco", "codardo", "codice", "coerente",
15770 "cognome", "collare", "colmato", "colore", "colposo", "coltivato", "colza", "coma", "cometa", "commando",
15771 "comodo", "computer", "comune", "conciso", "condurre", "conferma", "congelare", "coniuge", "connesso", "conoscere",
15772 "consumo", "continuo", "convegno", "coperto", "copione", "coppia", "copricapo", "corazza", "cordata", "coricato",
15773 "cornice", "corolla", "corpo", "corredo", "corsia", "cortese", "cosmico", "costante", "cottura", "covato",
15774 "cratere", "cravatta", "creato", "credere", "cremoso", "crescita", "creta", "criceto", "crinale", "crisi",
15775 "critico", "croce", "cronaca", "crostata", "cruciale", "crusca", "cucire", "cuculo", "cugino", "cullato",
15776 "cupola", "curatore", "cursore", "curvo", "cuscino", "custode", "dado", "daino", "dalmata", "damerino",
15777 "daniela", "dannoso", "danzare", "datato", "davanti", "davvero", "debutto", "decennio", "deciso", "declino",
15778 "decollo", "decreto", "dedicato", "definito", "deforme", "degno", "delegare", "delfino", "delirio", "delta",
15779 "demenza", "denotato", "dentro", "deposito", "derapata", "derivare", "deroga", "descritto", "deserto", "desiderio",
15780 "desumere", "detersivo", "devoto", "diametro", "dicembre", "diedro", "difeso", "diffuso", "digerire", "digitale",
15781 "diluvio", "dinamico", "dinnanzi", "dipinto", "diploma", "dipolo", "diradare", "dire", "dirotto", "dirupo",
15782 "disagio", "discreto", "disfare", "disgelo", "disposto", "distanza", "disumano", "dito", "divano", "divelto",
15783 "dividere", "divorato", "doblone", "docente", "doganale", "dogma", "dolce", "domato", "domenica", "dominare",
15784 "dondolo", "dono", "dormire", "dote", "dottore", "dovuto", "dozzina", "drago", "druido", "dubbio",
15785 "dubitare", "ducale", "duna", "duomo", "duplice", "duraturo", "ebano", "eccesso", "ecco", "eclissi",
15786 "economia", "edera", "edicola", "edile", "editoria", "educare", "egemonia", "egli", "egoismo", "egregio",
15787 "elaborato", "elargire", "elegante", "elencato", "eletto", "elevare", "elfico", "elica", "elmo", "elsa",
15788 "eluso", "emanato", "emblema", "emesso", "emiro", "emotivo", "emozione", "empirico", "emulo", "endemico",
15789 "enduro", "energia", "enfasi", "enoteca", "entrare", "enzima", "epatite", "epilogo", "episodio", "epocale",
15790 "eppure", "equatore", "erario", "erba", "erboso", "erede", "eremita", "erigere", "ermetico", "eroe",
15791 "erosivo", "errante", "esagono", "esame", "esanime", "esaudire", "esca", "esempio", "esercito", "esibito",
15792 "esigente", "esistere", "esito", "esofago", "esortato", "esoso", "espanso", "espresso", "essenza", "esso",
15793 "esteso", "estimare", "estonia", "estroso", "esultare", "etilico", "etnico", "etrusco", "etto", "euclideo",
15794 "europa", "evaso", "evidenza", "evitato", "evoluto", "evviva", "fabbrica", "faccenda", "fachiro", "falco",
15795 "famiglia", "fanale", "fanfara", "fango", "fantasma", "fare", "farfalla", "farinoso", "farmaco", "fascia",
15796 "fastoso", "fasullo", "faticare", "fato", "favoloso", "febbre", "fecola", "fede", "fegato", "felpa",
15797 "feltro", "femmina", "fendere", "fenomeno", "fermento", "ferro", "fertile", "fessura", "festivo", "fetta",
15798 "feudo", "fiaba", "fiducia", "fifa", "figurato", "filo", "finanza", "finestra", "finire", "fiore",
15799 "fiscale", "fisico", "fiume", "flacone", "flamenco", "flebo", "flemma", "florido", "fluente", "fluoro",
15800 "fobico", "focaccia", "focoso", "foderato", "foglio", "folata", "folclore", "folgore", "fondente", "fonetico",
15801 "fonia", "fontana", "forbito", "forchetta", "foresta", "formica", "fornaio", "foro", "fortezza", "forzare",
15802 "fosfato", "fosso", "fracasso", "frana", "frassino", "fratello", "freccetta", "frenata", "fresco", "frigo",
15803 "frollino", "fronde", "frugale", "frutta", "fucilata", "fucsia", "fuggente", "fulmine", "fulvo", "fumante",
15804 "fumetto", "fumoso", "fune", "funzione", "fuoco", "furbo", "furgone", "furore", "fuso", "futile",
15805 "gabbiano", "gaffe", "galateo", "gallina", "galoppo", "gambero", "gamma", "garanzia", "garbo", "garofano",
15806 "garzone", "gasdotto", "gasolio", "gastrico", "gatto", "gaudio", "gazebo", "gazzella", "geco", "gelatina",
15807 "gelso", "gemello", "gemmato", "gene", "genitore", "gennaio", "genotipo", "gergo", "ghepardo", "ghiaccio",
15808 "ghisa", "giallo", "gilda", "ginepro", "giocare", "gioiello", "giorno", "giove", "girato", "girone",
15809 "gittata", "giudizio", "giurato", "giusto", "globulo", "glutine", "gnomo", "gobba", "golf", "gomito",
15810 "gommone", "gonfio", "gonna", "governo", "gracile", "grado", "grafico", "grammo", "grande", "grattare",
15811 "gravoso", "grazia", "greca", "gregge", "grifone", "grigio", "grinza", "grotta", "gruppo", "guadagno",
15812 "guaio", "guanto", "guardare", "gufo", "guidare", "ibernato", "icona", "identico", "idillio", "idolo",
15813 "idra", "idrico", "idrogeno", "igiene", "ignaro", "ignorato", "ilare", "illeso", "illogico", "illudere",
15814 "imballo", "imbevuto", "imbocco", "imbuto", "immane", "immerso", "immolato", "impacco", "impeto", "impiego",
15815 "importo", "impronta", "inalare", "inarcare", "inattivo", "incanto", "incendio", "inchino", "incisivo", "incluso",
15816 "incontro", "incrocio", "incubo", "indagine", "india", "indole", "inedito", "infatti", "infilare", "inflitto",
15817 "ingaggio", "ingegno", "inglese", "ingordo", "ingrosso", "innesco", "inodore", "inoltrare", "inondato", "insano",
15818 "insetto", "insieme", "insonnia", "insulina", "intasato", "intero", "intonaco", "intuito", "inumidire", "invalido",
15819 "invece", "invito", "iperbole", "ipnotico", "ipotesi", "ippica", "iride", "irlanda", "ironico", "irrigato",
15820 "irrorare", "isolato", "isotopo", "isterico", "istituto", "istrice", "italia", "iterare", "labbro", "labirinto",
15821 "lacca", "lacerato", "lacrima", "lacuna", "laddove", "lago", "lampo", "lancetta", "lanterna", "lardoso",
15822 "larga", "laringe", "lastra", "latenza", "latino", "lattuga", "lavagna", "lavoro", "legale", "leggero",
15823 "lembo", "lentezza", "lenza", "leone", "lepre", "lesivo", "lessato", "lesto", "letterale", "leva",
15824 "levigato", "libero", "lido", "lievito", "lilla", "limatura", "limitare", "limpido", "lineare", "lingua",
15825 "liquido", "lira", "lirica", "lisca", "lite", "litigio", "livrea", "locanda", "lode", "logica",
15826 "lombare", "londra", "longevo", "loquace", "lorenzo", "loto", "lotteria", "luce", "lucidato", "lumaca",
15827 "luminoso", "lungo", "lupo", "luppolo", "lusinga", "lusso", "lutto", "macabro", "macchina", "macero",
15828 "macinato", "madama", "magico", "maglia", "magnete", "magro", "maiolica", "malafede", "malgrado", "malinteso",
15829 "malsano", "malto", "malumore", "mana", "mancia", "mandorla", "mangiare", "manifesto", "mannaro", "manovra",
15830 "mansarda", "mantide", "manubrio", "mappa", "maratona", "marcire", "maretta", "marmo", "marsupio", "maschera",
15831 "massaia", "mastino", "materasso", "matricola", "mattone", "maturo", "mazurca", "meandro", "meccanico", "mecenate",
15832 "medesimo", "meditare", "mega", "melassa", "melis", "melodia", "meninge", "meno", "mensola", "mercurio",
15833 "merenda", "merlo", "meschino", "mese", "messere", "mestolo", "metallo", "metodo", "mettere", "miagolare",
15834 "mica", "micelio", "michele", "microbo", "midollo", "miele", "migliore", "milano", "milite", "mimosa",
15835 "minerale", "mini", "minore", "mirino", "mirtillo", "miscela", "missiva", "misto", "misurare", "mitezza",
15836 "mitigare", "mitra", "mittente", "mnemonico", "modello", "modifica", "modulo", "mogano", "mogio", "mole",
15837 "molosso", "monastero", "monco", "mondina", "monetario", "monile", "monotono", "monsone", "montato", "monviso",
15838 "mora", "mordere", "morsicato", "mostro", "motivato", "motosega", "motto", "movenza", "movimento", "mozzo",
15839 "mucca", "mucosa", "muffa", "mughetto", "mugnaio", "mulatto", "mulinello", "multiplo", "mummia", "munto",
15840 "muovere", "murale", "musa", "muscolo", "musica", "mutevole", "muto", "nababbo", "nafta", "nanometro",
15841 "narciso", "narice", "narrato", "nascere", "nastrare", "naturale", "nautica", "naviglio", "nebulosa", "necrosi",
15842 "negativo", "negozio", "nemmeno", "neofita", "neretto", "nervo", "nessuno", "nettuno", "neutrale", "neve",
15843 "nevrotico", "nicchia", "ninfa", "nitido", "nobile", "nocivo", "nodo", "nome", "nomina", "nordico",
15844 "normale", "norvegese", "nostrano", "notare", "notizia", "notturno", "novella", "nucleo", "nulla", "numero",
15845 "nuovo", "nutrire", "nuvola", "nuziale", "oasi", "obbedire", "obbligo", "obelisco", "oblio", "obolo",
15846 "obsoleto", "occasione", "occhio", "occidente", "occorrere", "occultare", "ocra", "oculato", "odierno", "odorare",
15847 "offerta", "offrire", "offuscato", "oggetto", "oggi", "ognuno", "olandese", "olfatto", "oliato", "oliva",
15848 "ologramma", "oltre", "omaggio", "ombelico", "ombra", "omega", "omissione", "ondoso", "onere", "onice",
15849 "onnivoro", "onorevole", "onta", "operato", "opinione", "opposto", "oracolo", "orafo", "ordine", "orecchino",
15850 "orefice", "orfano", "organico", "origine", "orizzonte", "orma", "ormeggio", "ornativo", "orologio", "orrendo",
15851 "orribile", "ortensia", "ortica", "orzata", "orzo", "osare", "oscurare", "osmosi", "ospedale", "ospite",
15852 "ossa", "ossidare", "ostacolo", "oste", "otite", "otre", "ottagono", "ottimo", "ottobre", "ovale",
15853 "ovest", "ovino", "oviparo", "ovocito", "ovunque", "ovviare", "ozio", "pacchetto", "pace", "pacifico",
15854 "padella", "padrone", "paese", "paga", "pagina", "palazzina", "palesare", "pallido", "palo", "palude",
15855 "pandoro", "pannello", "paolo", "paonazzo", "paprica", "parabola", "parcella", "parere", "pargolo", "pari",
15856 "parlato", "parola", "partire", "parvenza", "parziale", "passivo", "pasticca", "patacca", "patologia", "pattume",
15857 "pavone", "peccato", "pedalare", "pedonale", "peggio", "peloso", "penare", "pendice", "penisola", "pennuto",
15858 "penombra", "pensare", "pentola", "pepe", "pepita", "perbene", "percorso", "perdonato", "perforare", "pergamena",
15859 "periodo", "permesso", "perno", "perplesso", "persuaso", "pertugio", "pervaso", "pesatore", "pesista", "peso",
15860 "pestifero", "petalo", "pettine", "petulante", "pezzo", "piacere", "pianta", "piattino", "piccino", "picozza",
15861 "piega", "pietra", "piffero", "pigiama", "pigolio", "pigro", "pila", "pilifero", "pillola", "pilota",
15862 "pimpante", "pineta", "pinna", "pinolo", "pioggia", "piombo", "piramide", "piretico", "pirite", "pirolisi",
15863 "pitone", "pizzico", "placebo", "planare", "plasma", "platano", "plenario", "pochezza", "poderoso", "podismo",
15864 "poesia", "poggiare", "polenta", "poligono", "pollice", "polmonite", "polpetta", "polso", "poltrona", "polvere",
15865 "pomice", "pomodoro", "ponte", "popoloso", "porfido", "poroso", "porpora", "porre", "portata", "posa",
15866 "positivo", "possesso", "postulato", "potassio", "potere", "pranzo", "prassi", "pratica", "precluso", "predica",
15867 "prefisso", "pregiato", "prelievo", "premere", "prenotare", "preparato", "presenza", "pretesto", "prevalso", "prima",
15868 "principe", "privato", "problema", "procura", "produrre", "profumo", "progetto", "prolunga", "promessa", "pronome",
15869 "proposta", "proroga", "proteso", "prova", "prudente", "prugna", "prurito", "psiche", "pubblico", "pudica",
15870 "pugilato", "pugno", "pulce", "pulito", "pulsante", "puntare", "pupazzo", "pupilla", "puro", "quadro",
15871 "qualcosa", "quasi", "querela", "quota", "raccolto", "raddoppio", "radicale", "radunato", "raffica", "ragazzo",
15872 "ragione", "ragno", "ramarro", "ramingo", "ramo", "randagio", "rantolare", "rapato", "rapina", "rappreso",
15873 "rasatura", "raschiato", "rasente", "rassegna", "rastrello", "rata", "ravveduto", "reale", "recepire", "recinto",
15874 "recluta", "recondito", "recupero", "reddito", "redimere", "regalato", "registro", "regola", "regresso", "relazione",
15875 "remare", "remoto", "renna", "replica", "reprimere", "reputare", "resa", "residente", "responso", "restauro",
15876 "rete", "retina", "retorica", "rettifica", "revocato", "riassunto", "ribadire", "ribelle", "ribrezzo", "ricarica",
15877 "ricco", "ricevere", "riciclato", "ricordo", "ricreduto", "ridicolo", "ridurre", "rifasare", "riflesso", "riforma",
15878 "rifugio", "rigare", "rigettato", "righello", "rilassato", "rilevato", "rimanere", "rimbalzo", "rimedio", "rimorchio",
15879 "rinascita", "rincaro", "rinforzo", "rinnovo", "rinomato", "rinsavito", "rintocco", "rinuncia", "rinvenire", "riparato",
15880 "ripetuto", "ripieno", "riportare", "ripresa", "ripulire", "risata", "rischio", "riserva", "risibile", "riso",
15881 "rispetto", "ristoro", "risultato", "risvolto", "ritardo", "ritegno", "ritmico", "ritrovo", "riunione", "riva",
15882 "riverso", "rivincita", "rivolto", "rizoma", "roba", "robotico", "robusto", "roccia", "roco", "rodaggio",
15883 "rodere", "roditore", "rogito", "rollio", "romantico", "rompere", "ronzio", "rosolare", "rospo", "rotante",
15884 "rotondo", "rotula", "rovescio", "rubizzo", "rubrica", "ruga", "rullino", "rumine", "rumoroso", "ruolo",
15885 "rupe", "russare", "rustico", "sabato", "sabbiare", "sabotato", "sagoma", "salasso", "saldatura", "salgemma",
15886 "salivare", "salmone", "salone", "saltare", "saluto", "salvo", "sapere", "sapido", "saporito", "saraceno",
15887 "sarcasmo", "sarto", "sassoso", "satellite", "satira", "satollo", "saturno", "savana", "savio", "saziato",
15888 "sbadiglio", "sbalzo", "sbancato", "sbarra", "sbattere", "sbavare", "sbendare", "sbirciare", "sbloccato", "sbocciato",
15889 "sbrinare", "sbruffone", "sbuffare", "scabroso", "scadenza", "scala", "scambiare", "scandalo", "scapola", "scarso",
15890 "scatenare", "scavato", "scelto", "scenico", "scettro", "scheda", "schiena", "sciarpa", "scienza", "scindere",
15891 "scippo", "sciroppo", "scivolo", "sclerare", "scodella", "scolpito", "scomparto", "sconforto", "scoprire", "scorta",
15892 "scossone", "scozzese", "scriba", "scrollare", "scrutinio", "scuderia", "scultore", "scuola", "scuro", "scusare",
15893 "sdebitare", "sdoganare", "seccatura", "secondo", "sedano", "seggiola", "segnalato", "segregato", "seguito", "selciato",
15894 "selettivo", "sella", "selvaggio", "semaforo", "sembrare", "seme", "seminato", "sempre", "senso", "sentire",
15895 "sepolto", "sequenza", "serata", "serbato", "sereno", "serio", "serpente", "serraglio", "servire", "sestina",
15896 "setola", "settimana", "sfacelo", "sfaldare", "sfamato", "sfarzoso", "sfaticato", "sfera", "sfida", "sfilato",
15897 "sfinge", "sfocato", "sfoderare", "sfogo", "sfoltire", "sforzato", "sfratto", "sfruttato", "sfuggito", "sfumare",
15898 "sfuso", "sgabello", "sgarbato", "sgonfiare", "sgorbio", "sgrassato", "sguardo", "sibilo", "siccome", "sierra",
15899 "sigla", "signore", "silenzio", "sillaba", "simbolo", "simpatico", "simulato", "sinfonia", "singolo", "sinistro",
15900 "sino", "sintesi", "sinusoide", "sipario", "sisma", "sistole", "situato", "slitta", "slogatura", "sloveno",
15901 "smarrito", "smemorato", "smentito", "smeraldo", "smilzo", "smontare", "smottato", "smussato", "snellire", "snervato",
15902 "snodo", "sobbalzo", "sobrio", "soccorso", "sociale", "sodale", "soffitto", "sogno", "soldato", "solenne",
15903 "solido", "sollazzo", "solo", "solubile", "solvente", "somatico", "somma", "sonda", "sonetto", "sonnifero",
15904 "sopire", "soppeso", "sopra", "sorgere", "sorpasso", "sorriso", "sorso", "sorteggio", "sorvolato", "sospiro",
15905 "sosta", "sottile", "spada", "spalla", "spargere", "spatola", "spavento", "spazzola", "specie", "spedire",
15906 "spegnere", "spelatura", "speranza", "spessore", "spettrale", "spezzato", "spia", "spigoloso", "spillato", "spinoso",
15907 "spirale", "splendido", "sportivo", "sposo", "spranga", "sprecare", "spronato", "spruzzo", "spuntino", "squillo",
15908 "sradicare", "srotolato", "stabile", "stacco", "staffa", "stagnare", "stampato", "stantio", "starnuto", "stasera",
15909 "statuto", "stelo", "steppa", "sterzo", "stiletto", "stima", "stirpe", "stivale", "stizzoso", "stonato",
15910 "storico", "strappo", "stregato", "stridulo", "strozzare", "strutto", "stuccare", "stufo", "stupendo", "subentro",
15911 "succoso", "sudore", "suggerito", "sugo", "sultano", "suonare", "superbo", "supporto", "surgelato", "surrogato",
15912 "sussurro", "sutura", "svagare", "svedese", "sveglio", "svelare", "svenuto", "svezia", "sviluppo", "svista",
15913 "svizzera", "svolta", "svuotare", "tabacco", "tabulato", "tacciare", "taciturno", "tale", "talismano", "tampone",
15914 "tannino", "tara", "tardivo", "targato", "tariffa", "tarpare", "tartaruga", "tasto", "tattico", "taverna",
15915 "tavolata", "tazza", "teca", "tecnico", "telefono", "temerario", "tempo", "temuto", "tendone", "tenero",
15916 "tensione", "tentacolo", "teorema", "terme", "terrazzo", "terzetto", "tesi", "tesserato", "testato", "tetro",
15917 "tettoia", "tifare", "tigella", "timbro", "tinto", "tipico", "tipografo", "tiraggio", "tiro", "titanio",
15918 "titolo", "titubante", "tizio", "tizzone", "toccare", "tollerare", "tolto", "tombola", "tomo", "tonfo",
15919 "tonsilla", "topazio", "topologia", "toppa", "torba", "tornare", "torrone", "tortora", "toscano", "tossire",
15920 "tostatura", "totano", "trabocco", "trachea", "trafila", "tragedia", "tralcio", "tramonto", "transito", "trapano",
15921 "trarre", "trasloco", "trattato", "trave", "treccia", "tremolio", "trespolo", "tributo", "tricheco", "trifoglio",
15922 "trillo", "trincea", "trio", "tristezza", "triturato", "trivella", "tromba", "trono", "troppo", "trottola",
15923 "trovare", "truccato", "tubatura", "tuffato", "tulipano", "tumulto", "tunisia", "turbare", "turchino", "tuta",
15924 "tutela", "ubicato", "uccello", "uccisore", "udire", "uditivo", "uffa", "ufficio", "uguale", "ulisse",
15925 "ultimato", "umano", "umile", "umorismo", "uncinetto", "ungere", "ungherese", "unicorno", "unificato", "unisono",
15926 "unitario", "unte", "uovo", "upupa", "uragano", "urgenza", "urlo", "usanza", "usato", "uscito",
15927 "usignolo", "usuraio", "utensile", "utilizzo", "utopia", "vacante", "vaccinato", "vagabondo", "vagliato", "valanga",
15928 "valgo", "valico", "valletta", "valoroso", "valutare", "valvola", "vampata", "vangare", "vanitoso", "vano",
15929 "vantaggio", "vanvera", "vapore", "varano", "varcato", "variante", "vasca", "vedetta", "vedova", "veduto",
15930 "vegetale", "veicolo", "velcro", "velina", "velluto", "veloce", "venato", "vendemmia", "vento", "verace",
15931 "verbale", "vergogna", "verifica", "vero", "verruca", "verticale", "vescica", "vessillo", "vestale", "veterano",
15932 "vetrina", "vetusto", "viandante", "vibrante", "vicenda", "vichingo", "vicinanza", "vidimare", "vigilia", "vigneto",
15933 "vigore", "vile", "villano", "vimini", "vincitore", "viola", "vipera", "virgola", "virologo", "virulento",
15934 "viscoso", "visione", "vispo", "vissuto", "visura", "vita", "vitello", "vittima", "vivanda", "vivido",
15935 "viziare", "voce", "voga", "volatile", "volere", "volpe", "voragine", "vulcano", "zampogna", "zanna",
15936 "zappato", "zattera", "zavorra", "zefiro", "zelante", "zelo", "zenzero", "zerbino", "zibetto", "zinco",
15937 "zircone", "zitto", "zolla", "zotico", "zucchero", "zufolo", "zulu", "zuppa"]
15938 </script>
15939 <script>/*
15940 * Copyright (c) 2013 Pavol Rusnak
15941 *
15942 * Permission is hereby granted, free of charge, to any person obtaining a copy of
15943 * this software and associated documentation files (the "Software"), to deal in
15944 * the Software without restriction, including without limitation the rights to
15945 * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
15946 * of the Software, and to permit persons to whom the Software is furnished to do
15947 * so, subject to the following conditions:
15948 *
15949 * The above copyright notice and this permission notice shall be included in all
15950 * copies or substantial portions of the Software.
15951 *
15952 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15953 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15954 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
15955 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
15956 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
15957 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
15958 */
15959
15960 /*
15961 * Javascript port from python by Ian Coleman
15962 *
15963 * Requires code from sjcl
15964 * https://github.com/bitwiseshiftleft/sjcl
15965 */
15966
15967 var Mnemonic = function(language) {
15968
15969 var PBKDF2_ROUNDS = 2048;
15970 var RADIX = 2048;
15971
15972 var self = this;
15973 var wordlist = [];
15974
15975 var hmacSHA512 = function(key) {
15976 var hasher = new sjcl.misc.hmac(key, sjcl.hash.sha512);
15977 this.encrypt = function() {
15978 return hasher.encrypt.apply(hasher, arguments);
15979 };
15980 };
15981
15982 function init() {
15983 wordlist = WORDLISTS[language];
15984 if (wordlist.length != RADIX) {
15985 err = 'Wordlist should contain ' + RADIX + ' words, but it contains ' + wordlist.length + ' words.';
15986 throw err;
15987 }
15988 }
15989
15990 self.generate = function(strength) {
15991 strength = strength || 128;
15992 var r = strength % 32;
15993 if (r > 0) {
15994 throw 'Strength should be divisible by 32, but it is not (' + r + ').';
15995 }
15996 var hasStrongCrypto = 'crypto' in window && window['crypto'] !== null;
15997 if (!hasStrongCrypto) {
15998 throw 'Mnemonic should be generated with strong randomness, but crypto.getRandomValues is unavailable';
15999 }
16000 var buffer = new Uint8Array(strength / 8);
16001 var data = crypto.getRandomValues(buffer);
16002 return self.toMnemonic(data);
16003 }
16004
16005 self.toMnemonic = function(byteArray) {
16006 if (byteArray.length % 4 > 0) {
16007 throw 'Data length in bits should be divisible by 32, but it is not (' + byteArray.length + ' bytes = ' + byteArray.length*8 + ' bits).'
16008 }
16009
16010 //h = hashlib.sha256(data).hexdigest()
16011 var data = byteArrayToWordArray(byteArray);
16012 var hash = sjcl.hash.sha256.hash(data);
16013 var h = sjcl.codec.hex.fromBits(hash);
16014
16015 // b is a binary string, eg '00111010101100...'
16016 //b = bin(int(binascii.hexlify(data), 16))[2:].zfill(len(data) * 8) + \
16017 // bin(int(h, 16))[2:].zfill(256)[:len(data) * 8 / 32]
16018 //
16019 // a = bin(int(binascii.hexlify(data), 16))[2:].zfill(len(data) * 8)
16020 // c = bin(int(h, 16))[2:].zfill(256)
16021 // d = c[:len(data) * 8 / 32]
16022 var a = byteArrayToBinaryString(byteArray);
16023 var c = zfill(hexStringToBinaryString(h), 256);
16024 var d = c.substring(0, byteArray.length * 8 / 32);
16025 // b = line1 + line2
16026 var b = a + d;
16027
16028 var result = [];
16029 var blen = b.length / 11;
16030 for (var i=0; i<blen; i++) {
16031 var idx = parseInt(b.substring(i * 11, (i + 1) * 11), 2);
16032 result.push(wordlist[idx]);
16033 }
16034 return self.joinWords(result);
16035 }
16036
16037 self.check = function(mnemonic) {
16038 var mnemonic = self.splitWords(mnemonic);
16039 if (mnemonic.length % 3 > 0) {
16040 return false
16041 }
16042 // idx = map(lambda x: bin(self.wordlist.index(x))[2:].zfill(11), mnemonic)
16043 var idx = [];
16044 for (var i=0; i<mnemonic.length; i++) {
16045 var word = mnemonic[i];
16046 var wordIndex = wordlist.indexOf(word);
16047 if (wordIndex == -1) {
16048 return false;
16049 }
16050 var binaryIndex = zfill(wordIndex.toString(2), 11);
16051 idx.push(binaryIndex);
16052 }
16053 var b = idx.join('');
16054 var l = b.length;
16055 //d = b[:l / 33 * 32]
16056 //h = b[-l / 33:]
16057 var d = b.substring(0, l / 33 * 32);
16058 var h = b.substring(l - l / 33, l);
16059 //nd = binascii.unhexlify(hex(int(d, 2))[2:].rstrip('L').zfill(l / 33 * 8))
16060 var nd = binaryStringToWordArray(d);
16061 //nh = bin(int(hashlib.sha256(nd).hexdigest(), 16))[2:].zfill(256)[:l / 33]
16062 var ndHash = sjcl.hash.sha256.hash(nd);
16063 var ndHex = sjcl.codec.hex.fromBits(ndHash);
16064 var ndBstr = zfill(hexStringToBinaryString(ndHex), 256);
16065 var nh = ndBstr.substring(0,l/33);
16066 return h == nh;
16067 }
16068
16069 self.toSeed = function(mnemonic, passphrase) {
16070 passphrase = passphrase || '';
16071 mnemonic = self.joinWords(self.splitWords(self.normalizeString(mnemonic))); // removes blanks
16072 passphrase = self.normalizeString(passphrase)
16073 passphrase = "mnemonic" + passphrase;
16074 var mnemonicBits = sjcl.codec.utf8String.toBits(mnemonic);
16075 var passphraseBits = sjcl.codec.utf8String.toBits(passphrase);
16076 var result = sjcl.misc.pbkdf2(mnemonicBits, passphraseBits, PBKDF2_ROUNDS, 512, hmacSHA512);
16077 var hashHex = sjcl.codec.hex.fromBits(result);
16078 return hashHex;
16079 }
16080
16081 self.splitWords = function(mnemonic) {
16082 return mnemonic.split(/\s/g).filter(function(x) { return x.length; });
16083 }
16084
16085 self.joinWords = function(words) {
16086 // Set space correctly depending on the language
16087 // see https://github.com/bitcoin/bips/blob/master/bip-0039/bip-0039-wordlists.md#japanese
16088 var space = " ";
16089 if (language == "japanese") {
16090 space = "\u3000"; // ideographic space
16091 }
16092 return words.join(space);
16093 }
16094
16095 self.normalizeString = function(str) {
16096 if (typeof str.normalize == "function") {
16097 return str.normalize("NFKD");
16098 }
16099 else {
16100 // TODO decide how to handle this in the future.
16101 // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize
16102 return str;
16103 }
16104 }
16105
16106 function byteArrayToWordArray(data) {
16107 var a = [];
16108 for (var i=0; i<data.length/4; i++) {
16109 v = 0;
16110 v += data[i*4 + 0] << 8 * 3;
16111 v += data[i*4 + 1] << 8 * 2;
16112 v += data[i*4 + 2] << 8 * 1;
16113 v += data[i*4 + 3] << 8 * 0;
16114 a.push(v);
16115 }
16116 return a;
16117 }
16118
16119 function byteArrayToBinaryString(data) {
16120 var bin = "";
16121 for (var i=0; i<data.length; i++) {
16122 bin += zfill(data[i].toString(2), 8);
16123 }
16124 return bin;
16125 }
16126
16127 function hexStringToBinaryString(hexString) {
16128 binaryString = "";
16129 for (var i=0; i<hexString.length; i++) {
16130 binaryString += zfill(parseInt(hexString[i], 16).toString(2),4);
16131 }
16132 return binaryString;
16133 }
16134
16135 function binaryStringToWordArray(binary) {
16136 var aLen = binary.length / 32;
16137 var a = [];
16138 for (var i=0; i<aLen; i++) {
16139 var valueStr = binary.substring(0,32);
16140 var value = parseInt(valueStr, 2);
16141 a.push(value);
16142 binary = binary.slice(32);
16143 }
16144 return a;
16145 }
16146
16147 // Pad a numeric string on the left with zero digits until the given width
16148 // is reached.
16149 // Note this differs to the python implementation because it does not
16150 // handle numbers starting with a sign.
16151 function zfill(source, length) {
16152 source = source.toString();
16153 while (source.length < length) {
16154 source = '0' + source;
16155 }
16156 return source;
16157 }
16158
16159 init();
16160
16161 }
16162 </script>
16163 <script>(function() {
16164
16165 // mnemonics is populated as required by getLanguage
16166 var mnemonics = { "english": new Mnemonic("english") };
16167 var mnemonic = mnemonics["english"];
16168 var seed = null
16169 var bip32RootKey = null;
16170 var bip32ExtendedKey = null;
16171 var network = bitcoin.networks.bitcoin;
16172 var addressRowTemplate = $("#address-row-template");
16173
16174 var showIndex = true;
16175 var showAddress = true;
16176 var showPrivKey = true;
16177
16178 var phraseChangeTimeoutEvent = null;
16179 var rootKeyChangedTimeoutEvent = null;
16180
16181 var DOM = {};
16182 DOM.network = $(".network");
16183 DOM.phraseNetwork = $("#network-phrase");
16184 DOM.phrase = $(".phrase");
16185 DOM.passphrase = $(".passphrase");
16186 DOM.generate = $(".generate");
16187 DOM.seed = $(".seed");
16188 DOM.rootKey = $(".root-key");
16189 DOM.extendedPrivKey = $(".extended-priv-key");
16190 DOM.extendedPubKey = $(".extended-pub-key");
16191 DOM.bip32tab = $("#bip32-tab");
16192 DOM.bip44tab = $("#bip44-tab");
16193 DOM.bip32panel = $("#bip32");
16194 DOM.bip44panel = $("#bip44");
16195 DOM.bip32path = $("#bip32-path");
16196 DOM.bip44path = $("#bip44-path");
16197 DOM.bip44purpose = $("#bip44 .purpose");
16198 DOM.bip44coin = $("#bip44 .coin");
16199 DOM.bip44account = $("#bip44 .account");
16200 DOM.bip44change = $("#bip44 .change");
16201 DOM.strength = $(".strength");
16202 DOM.hardenedAddresses = $(".hardened-addresses");
16203 DOM.addresses = $(".addresses");
16204 DOM.rowsToAdd = $(".rows-to-add");
16205 DOM.more = $(".more");
16206 DOM.feedback = $(".feedback");
16207 DOM.tab = $(".derivation-type a");
16208 DOM.indexToggle = $(".index-toggle");
16209 DOM.addressToggle = $(".address-toggle");
16210 DOM.privateKeyToggle = $(".private-key-toggle");
16211 DOM.languages = $(".languages a");
16212
16213 function init() {
16214 // Events
16215 DOM.network.on("change", networkChanged);
16216 DOM.phrase.on("input", delayedPhraseChanged);
16217 DOM.passphrase.on("input", delayedPhraseChanged);
16218 DOM.generate.on("click", generateClicked);
16219 DOM.more.on("click", showMore);
16220 DOM.rootKey.on("input", delayedRootKeyChanged);
16221 DOM.bip32path.on("input", calcForDerivationPath);
16222 DOM.bip44purpose.on("input", calcForDerivationPath);
16223 DOM.bip44coin.on("input", calcForDerivationPath);
16224 DOM.bip44account.on("input", calcForDerivationPath);
16225 DOM.bip44change.on("input", calcForDerivationPath);
16226 DOM.tab.on("shown.bs.tab", calcForDerivationPath);
16227 DOM.hardenedAddresses.on("change", calcForDerivationPath);
16228 DOM.indexToggle.on("click", toggleIndexes);
16229 DOM.addressToggle.on("click", toggleAddresses);
16230 DOM.privateKeyToggle.on("click", togglePrivateKeys);
16231 DOM.languages.on("click", languageChanged);
16232 disableForms();
16233 hidePending();
16234 hideValidationError();
16235 populateNetworkSelect();
16236 }
16237
16238 // Event handlers
16239
16240 function networkChanged(e) {
16241 var networkIndex = e.target.value;
16242 networks[networkIndex].onSelect();
16243 if (seed != null) {
16244 phraseChanged();
16245 }
16246 else {
16247 rootKeyChanged();
16248 }
16249 }
16250
16251 function delayedPhraseChanged() {
16252 hideValidationError();
16253 showPending();
16254 if (phraseChangeTimeoutEvent != null) {
16255 clearTimeout(phraseChangeTimeoutEvent);
16256 }
16257 phraseChangeTimeoutEvent = setTimeout(phraseChanged, 400);
16258 }
16259
16260 function phraseChanged() {
16261 showPending();
16262 hideValidationError();
16263 setMnemonicLanguage();
16264 // Get the mnemonic phrase
16265 var phrase = DOM.phrase.val();
16266 var errorText = findPhraseErrors(phrase);
16267 if (errorText) {
16268 showValidationError(errorText);
16269 return;
16270 }
16271 // Calculate and display
16272 var passphrase = DOM.passphrase.val();
16273 calcBip32RootKeyFromSeed(phrase, passphrase);
16274 calcForDerivationPath();
16275 hidePending();
16276 }
16277
16278 function delayedRootKeyChanged() {
16279 // Warn if there is an existing mnemonic or passphrase.
16280 if (DOM.phrase.val().length > 0 || DOM.passphrase.val().length > 0) {
16281 if (!confirm("This will clear existing mnemonic and passphrase")) {
16282 DOM.rootKey.val(bip32RootKey);
16283 return
16284 }
16285 }
16286 hideValidationError();
16287 showPending();
16288 // Clear existing mnemonic and passphrase
16289 DOM.phrase.val("");
16290 DOM.passphrase.val("");
16291 seed = null;
16292 if (rootKeyChangedTimeoutEvent != null) {
16293 clearTimeout(rootKeyChangedTimeoutEvent);
16294 }
16295 rootKeyChangedTimeoutEvent = setTimeout(rootKeyChanged, 400);
16296 }
16297
16298 function rootKeyChanged() {
16299 showPending();
16300 hideValidationError();
16301 // Validate the root key TODO
16302 var rootKeyBase58 = DOM.rootKey.val();
16303 var errorText = validateRootKey(rootKeyBase58);
16304 if (errorText) {
16305 showValidationError(errorText);
16306 return;
16307 }
16308 // Calculate and display
16309 calcBip32RootKeyFromBase58(rootKeyBase58);
16310 calcForDerivationPath();
16311 hidePending();
16312 }
16313
16314 function calcForDerivationPath() {
16315 showPending();
16316 hideValidationError();
16317 // Get the derivation path
16318 var derivationPath = getDerivationPath();
16319 var errorText = findDerivationPathErrors(derivationPath);
16320 if (errorText) {
16321 showValidationError(errorText);
16322 return;
16323 }
16324 calcBip32ExtendedKey(derivationPath);
16325 displayBip32Info();
16326 hidePending();
16327 }
16328
16329 function generateClicked() {
16330 clearDisplay();
16331 showPending();
16332 setTimeout(function() {
16333 setMnemonicLanguage();
16334 var phrase = generateRandomPhrase();
16335 if (!phrase) {
16336 return;
16337 }
16338 phraseChanged();
16339 }, 50);
16340 }
16341
16342 function languageChanged() {
16343 setTimeout(function() {
16344 setMnemonicLanguage();
16345 if (DOM.phrase.val().length > 0) {
16346 var newPhrase = convertPhraseToNewLanguage();
16347 DOM.phrase.val(newPhrase);
16348 phraseChanged();
16349 }
16350 else {
16351 DOM.generate.trigger("click");
16352 }
16353 }, 50);
16354 }
16355
16356 function toggleIndexes() {
16357 showIndex = !showIndex;
16358 $("td.index span").toggleClass("invisible");
16359 }
16360
16361 function toggleAddresses() {
16362 showAddress = !showAddress;
16363 $("td.address span").toggleClass("invisible");
16364 }
16365
16366 function togglePrivateKeys() {
16367 showPrivKey = !showPrivKey;
16368 $("td.privkey span").toggleClass("invisible");
16369 }
16370
16371 // Private methods
16372
16373 function generateRandomPhrase() {
16374 if (!hasStrongRandom()) {
16375 var errorText = "This browser does not support strong randomness";
16376 showValidationError(errorText);
16377 return;
16378 }
16379 var numWords = parseInt(DOM.strength.val());
16380 var strength = numWords / 3 * 32;
16381 var words = mnemonic.generate(strength);
16382 DOM.phrase.val(words);
16383 return words;
16384 }
16385
16386 function calcBip32RootKeyFromSeed(phrase, passphrase) {
16387 seed = mnemonic.toSeed(phrase, passphrase);
16388 bip32RootKey = bitcoin.HDNode.fromSeedHex(seed, network);
16389 }
16390
16391 function calcBip32RootKeyFromBase58(rootKeyBase58) {
16392 bip32RootKey = bitcoin.HDNode.fromBase58(rootKeyBase58, network);
16393 }
16394
16395 function calcBip32ExtendedKey(path) {
16396 bip32ExtendedKey = bip32RootKey;
16397 // Derive the key from the path
16398 var pathBits = path.split("/");
16399 for (var i=0; i<pathBits.length; i++) {
16400 var bit = pathBits[i];
16401 var index = parseInt(bit);
16402 if (isNaN(index)) {
16403 continue;
16404 }
16405 var hardened = bit[bit.length-1] == "'";
16406 if (hardened) {
16407 bip32ExtendedKey = bip32ExtendedKey.deriveHardened(index);
16408 }
16409 else {
16410 bip32ExtendedKey = bip32ExtendedKey.derive(index);
16411 }
16412 }
16413 }
16414
16415 function showValidationError(errorText) {
16416 DOM.feedback
16417 .text(errorText)
16418 .show();
16419 }
16420
16421 function hideValidationError() {
16422 DOM.feedback
16423 .text("")
16424 .hide();
16425 }
16426
16427 function findPhraseErrors(phrase) {
16428 // TODO make this right
16429 // Preprocess the words
16430 phrase = mnemonic.normalizeString(phrase);
16431 var words = phraseToWordArray(phrase);
16432 // Check each word
16433 for (var i=0; i<words.length; i++) {
16434 var word = words[i];
16435 var language = getLanguage();
16436 if (WORDLISTS[language].indexOf(word) == -1) {
16437 console.log("Finding closest match to " + word);
16438 var nearestWord = findNearestWord(word);
16439 return word + " not in wordlist, did you mean " + nearestWord + "?";
16440 }
16441 }
16442 // Check the words are valid
16443 var properPhrase = wordArrayToPhrase(words);
16444 var isValid = mnemonic.check(properPhrase);
16445 if (!isValid) {
16446 return "Invalid mnemonic";
16447 }
16448 return false;
16449 }
16450
16451 function validateRootKey(rootKeyBase58) {
16452 try {
16453 bitcoin.HDNode.fromBase58(rootKeyBase58);
16454 }
16455 catch (e) {
16456 return "Invalid root key";
16457 }
16458 return "";
16459 }
16460
16461 function getDerivationPath() {
16462 if (DOM.bip44tab.hasClass("active")) {
16463 var purpose = parseIntNoNaN(DOM.bip44purpose.val(), 44);
16464 var coin = parseIntNoNaN(DOM.bip44coin.val(), 0);
16465 var account = parseIntNoNaN(DOM.bip44account.val(), 0);
16466 var change = parseIntNoNaN(DOM.bip44change.val(), 0);
16467 var path = "m/";
16468 path += purpose + "'/";
16469 path += coin + "'/";
16470 path += account + "'/";
16471 path += change;
16472 DOM.bip44path.val(path);
16473 var derivationPath = DOM.bip44path.val();
16474 console.log("Using derivation path from BIP44 tab: " + derivationPath);
16475 return derivationPath;
16476 }
16477 else if (DOM.bip32tab.hasClass("active")) {
16478 var derivationPath = DOM.bip32path.val();
16479 console.log("Using derivation path from BIP32 tab: " + derivationPath);
16480 return derivationPath;
16481 }
16482 else {
16483 console.log("Unknown derivation path");
16484 }
16485 }
16486
16487 function findDerivationPathErrors(path) {
16488 // TODO is not perfect but is better than nothing
16489 // Inspired by
16490 // https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#test-vectors
16491 // and
16492 // https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#extended-keys
16493 var maxDepth = 255; // TODO verify this!!
16494 var maxIndexValue = Math.pow(2, 31); // TODO verify this!!
16495 if (path[0] != "m") {
16496 return "First character must be 'm'";
16497 }
16498 if (path.length > 1) {
16499 if (path[1] != "/") {
16500 return "Separator must be '/'";
16501 }
16502 var indexes = path.split("/");
16503 if (indexes.length > maxDepth) {
16504 return "Derivation depth is " + indexes.length + ", must be less than " + maxDepth;
16505 }
16506 for (var depth = 1; depth<indexes.length; depth++) {
16507 var index = indexes[depth];
16508 var invalidChars = index.replace(/^[0-9]+'?$/g, "")
16509 if (invalidChars.length > 0) {
16510 return "Invalid characters " + invalidChars + " found at depth " + depth;
16511 }
16512 var indexValue = parseInt(index.replace("'", ""));
16513 if (isNaN(depth)) {
16514 return "Invalid number at depth " + depth;
16515 }
16516 if (indexValue > maxIndexValue) {
16517 return "Value of " + indexValue + " at depth " + depth + " must be less than " + maxIndexValue;
16518 }
16519 }
16520 }
16521 return false;
16522 }
16523
16524 function displayBip32Info() {
16525 // Display the key
16526 DOM.seed.val(seed);
16527 var rootKey = bip32RootKey.toBase58();
16528 DOM.rootKey.val(rootKey);
16529 var extendedPrivKey = bip32ExtendedKey.toBase58();
16530 DOM.extendedPrivKey.val(extendedPrivKey);
16531 var extendedPubKey = bip32ExtendedKey.toBase58(false);
16532 DOM.extendedPubKey.val(extendedPubKey);
16533 // Display the addresses and privkeys
16534 clearAddressesList();
16535 displayAddresses(0, 20);
16536 }
16537
16538 function displayAddresses(start, total) {
16539 for (var i=0; i<total; i++) {
16540 var index = i + start;
16541 new TableRow(index);
16542 }
16543 }
16544
16545 function TableRow(index) {
16546
16547 var useHardenedAddresses = DOM.hardenedAddresses.prop("checked");
16548
16549 function init() {
16550 calculateValues();
16551 }
16552
16553 function calculateValues() {
16554 setTimeout(function() {
16555 var key = "";
16556 if (useHardenedAddresses) {
16557 key = bip32ExtendedKey.deriveHardened(index);
16558 }
16559 else {
16560 key = bip32ExtendedKey.derive(index);
16561 }
16562 var address = key.getAddress().toString();
16563 var privkey = key.privKey.toWIF(network);
16564 var indexText = getDerivationPath() + "/" + index;
16565 if (useHardenedAddresses) {
16566 indexText = indexText + "'";
16567 }
16568 addAddressToList(indexText, address, privkey);
16569 }, 50)
16570 }
16571
16572 init();
16573
16574 }
16575
16576 function showMore() {
16577 var start = DOM.addresses.children().length;
16578 var rowsToAdd = parseInt(DOM.rowsToAdd.val());
16579 if (isNaN(rowsToAdd)) {
16580 rowsToAdd = 20;
16581 DOM.rowsToAdd.val("20");
16582 }
16583 if (rowsToAdd > 200) {
16584 var msg = "Generating " + rowsToAdd + " rows could take a while. ";
16585 msg += "Do you want to continue?";
16586 if (!confirm(msg)) {
16587 return;
16588 }
16589 }
16590 displayAddresses(start, rowsToAdd);
16591 }
16592
16593 function clearDisplay() {
16594 clearAddressesList();
16595 clearKey();
16596 hideValidationError();
16597 }
16598
16599 function clearAddressesList() {
16600 DOM.addresses.empty();
16601 }
16602
16603 function clearKey() {
16604 DOM.rootKey.val("");
16605 DOM.extendedPrivKey.val("");
16606 DOM.extendedPubKey.val("");
16607 }
16608
16609 function addAddressToList(indexText, address, privkey) {
16610 var row = $(addressRowTemplate.html());
16611 // Elements
16612 var indexCell = row.find(".index span");
16613 var addressCell = row.find(".address span");
16614 var privkeyCell = row.find(".privkey span");
16615 // Content
16616 indexCell.text(indexText);
16617 addressCell.text(address);
16618 privkeyCell.text(privkey);
16619 // Visibility
16620 if (!showIndex) {
16621 indexCell.addClass("invisible");
16622 }
16623 if (!showAddress) {
16624 addressCell.addClass("invisible");
16625 }
16626 if (!showPrivKey) {
16627 privkeyCell.addClass("invisible");
16628 }
16629 DOM.addresses.append(row);
16630 }
16631
16632 function hasStrongRandom() {
16633 return 'crypto' in window && window['crypto'] !== null;
16634 }
16635
16636 function disableForms() {
16637 $("form").on("submit", function(e) {
16638 e.preventDefault();
16639 });
16640 }
16641
16642 function parseIntNoNaN(val, defaultVal) {
16643 var v = parseInt(val);
16644 if (isNaN(v)) {
16645 return defaultVal;
16646 }
16647 return v;
16648 }
16649
16650 function showPending() {
16651 DOM.feedback
16652 .text("Calculating...")
16653 .show();
16654 }
16655
16656 function findNearestWord(word) {
16657 var language = getLanguage();
16658 var words = WORDLISTS[language];
16659 var minDistance = 99;
16660 var closestWord = words[0];
16661 for (var i=0; i<words.length; i++) {
16662 var comparedTo = words[i];
16663 var distance = Levenshtein.get(word, comparedTo);
16664 if (distance < minDistance) {
16665 closestWord = comparedTo;
16666 minDistance = distance;
16667 }
16668 }
16669 return closestWord;
16670 }
16671
16672 function hidePending() {
16673 DOM.feedback
16674 .text("")
16675 .hide();
16676 }
16677
16678 function populateNetworkSelect() {
16679 for (var i=0; i<networks.length; i++) {
16680 var network = networks[i];
16681 var option = $("<option>");
16682 option.attr("value", i);
16683 option.text(network.name);
16684 DOM.phraseNetwork.append(option);
16685 }
16686 }
16687
16688 function getLanguage() {
16689 var defaultLanguage = "english";
16690 // Try to get from existing phrase
16691 var language = getLanguageFromPhrase();
16692 // Try to get from url if not from phrase
16693 if (language.length == 0) {
16694 language = getLanguageFromUrl();
16695 }
16696 // Default to English if no other option
16697 if (language.length == 0) {
16698 language = defaultLanguage;
16699 }
16700 return language;
16701 }
16702
16703 function getLanguageFromPhrase(phrase) {
16704 // Check if how many words from existing phrase match a language.
16705 var language = "";
16706 if (!phrase) {
16707 phrase = DOM.phrase.val();
16708 }
16709 if (phrase.length > 0) {
16710 var words = phraseToWordArray(phrase);
16711 var languageMatches = {};
16712 for (l in WORDLISTS) {
16713 // Track how many words match in this language
16714 languageMatches[l] = 0;
16715 for (var i=0; i<words.length; i++) {
16716 var wordInLanguage = WORDLISTS[l].indexOf(words[i]) > -1;
16717 if (wordInLanguage) {
16718 languageMatches[l]++;
16719 }
16720 }
16721 // Find languages with most word matches.
16722 // This is made difficult due to commonalities between Chinese
16723 // simplified vs traditional.
16724 var mostMatches = 0;
16725 var mostMatchedLanguages = [];
16726 for (var l in languageMatches) {
16727 var numMatches = languageMatches[l];
16728 if (numMatches > mostMatches) {
16729 mostMatches = numMatches;
16730 mostMatchedLanguages = [l];
16731 }
16732 else if (numMatches == mostMatches) {
16733 mostMatchedLanguages.push(l);
16734 }
16735 }
16736 }
16737 if (mostMatchedLanguages.length > 0) {
16738 // Use first language and warn if multiple detected
16739 language = mostMatchedLanguages[0];
16740 if (mostMatchedLanguages.length > 1) {
16741 console.warn("Multiple possible languages");
16742 console.warn(mostMatchedLanguages);
16743 }
16744 }
16745 }
16746 return language;
16747 }
16748
16749 function getLanguageFromUrl() {
16750 return window.location.hash.substring(1);
16751 }
16752
16753 function setMnemonicLanguage() {
16754 var language = getLanguage();
16755 // Load the bip39 mnemonic generator for this language if required
16756 if (!(language in mnemonics)) {
16757 mnemonics[language] = new Mnemonic(language);
16758 }
16759 mnemonic = mnemonics[language];
16760 }
16761
16762 function convertPhraseToNewLanguage() {
16763 var oldLanguage = getLanguageFromPhrase();
16764 var newLanguage = getLanguageFromUrl();
16765 var oldPhrase = DOM.phrase.val();
16766 var oldWords = phraseToWordArray(oldPhrase);
16767 var newWords = [];
16768 for (var i=0; i<oldWords.length; i++) {
16769 var oldWord = oldWords[i];
16770 var index = WORDLISTS[oldLanguage].indexOf(oldWord);
16771 var newWord = WORDLISTS[newLanguage][index];
16772 newWords.push(newWord);
16773 }
16774 newPhrase = wordArrayToPhrase(newWords);
16775 return newPhrase;
16776 }
16777
16778 // TODO look at jsbip39 - mnemonic.splitWords
16779 function phraseToWordArray(phrase) {
16780 var words = phrase.split(/\s/g);
16781 var noBlanks = [];
16782 for (var i=0; i<words.length; i++) {
16783 var word = words[i];
16784 if (word.length > 0) {
16785 noBlanks.push(word);
16786 }
16787 }
16788 return noBlanks;
16789 }
16790
16791 // TODO look at jsbip39 - mnemonic.joinWords
16792 function wordArrayToPhrase(words) {
16793 var phrase = words.join(" ");
16794 var language = getLanguageFromPhrase(phrase);
16795 if (language == "japanese") {
16796 phrase = words.join("\u3000");
16797 }
16798 return phrase;
16799 }
16800
16801 var networks = [
16802 {
16803 name: "Bitcoin",
16804 onSelect: function() {
16805 network = bitcoin.networks.bitcoin;
16806 DOM.bip44coin.val(0);
16807 },
16808 },
16809 {
16810 name: "Bitcoin Testnet",
16811 onSelect: function() {
16812 network = bitcoin.networks.testnet;
16813 DOM.bip44coin.val(1);
16814 },
16815 },
16816 {
16817 name: "Litecoin",
16818 onSelect: function() {
16819 network = bitcoin.networks.litecoin;
16820 DOM.bip44coin.val(2);
16821 },
16822 },
16823 {
16824 name: "Dogecoin",
16825 onSelect: function() {
16826 network = bitcoin.networks.dogecoin;
16827 DOM.bip44coin.val(3);
16828 },
16829 },
16830 {
16831 name: "ShadowCash",
16832 onSelect: function() {
16833 network = bitcoin.networks.shadow;
16834 DOM.bip44coin.val(35);
16835 },
16836 },
16837 {
16838 name: "ShadowCash Testnet",
16839 onSelect: function() {
16840 network = bitcoin.networks.shadowtn;
16841 DOM.bip44coin.val(1);
16842 },
16843 },
16844 {
16845 name: "Viacoin",
16846 onSelect: function() {
16847 network = bitcoin.networks.viacoin;
16848 DOM.bip44coin.val(14);
16849 },
16850 },
16851 {
16852 name: "Viacoin Testnet",
16853 onSelect: function() {
16854 network = bitcoin.networks.viacointestnet;
16855 DOM.bip44coin.val(1);
16856 },
16857 },
16858 {
16859 name: "Jumbucks",
16860 onSelect: function() {
16861 network = bitcoin.networks.jumbucks;
16862 DOM.bip44coin.val(26);
16863 },
16864 },
16865 {
16866 name: "CLAM",
16867 onSelect: function() {
16868 network = bitcoin.networks.clam;
16869 DOM.bip44coin.val(23);
16870 },
16871 },
16872 {
16873 name: "DASH",
16874 onSelect: function() {
16875 network = bitcoin.networks.dash;
16876 DOM.bip44coin.val(5);
16877 },
16878 },
16879 {
16880 name: "Namecoin",
16881 onSelect: function() {
16882 network = bitcoin.networks.namecoin;
16883 DOM.bip44coin.val(7);
16884 },
16885 },
16886 {
16887 name: "Peercoin",
16888 onSelect: function() {
16889 network = bitcoin.networks.peercoin;
16890 DOM.bip44coin.val(6);
16891 },
16892 },
16893 ]
16894
16895 init();
16896
16897 })();
16898 </script>
16899 </body>
16900 </html>