]> git.immae.eu Git - perso/Immae/Projets/Cryptomonnaies/BIP39.git/blob - bip39-standalone.html
Languages no longer experimental.
[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 <a href="#spanish" title="Spanish">Español</a>
102 <a href="#chinese_simplified" title="Chinese (Simplified)">中文(简体)</a>
103 <a href="#chinese_traditional" title="Chinese (Traditional)">中文(繁體)</a>
104 <a href="#french" title="French">Français</a>
105 <a href="#italian" title="Italian">Italiano</a>
106 </div>
107 </div>
108 <div class="form-group">
109 <label for="phrase" class="col-sm-2 control-label">BIP39 Mnemonic</label>
110 <div class="col-sm-10">
111 <textarea id="phrase" class="phrase form-control"></textarea>
112 </div>
113 </div>
114 <div class="form-group">
115 <label for="passphrase" class="col-sm-2 control-label">BIP39 Passphrase (optional)</label>
116 <div class="col-sm-10">
117 <textarea id="passphrase" class="passphrase form-control"></textarea>
118 </div>
119 </div>
120 <div class="form-group">
121 <label for="seed" class="col-sm-2 control-label">BIP39 Seed</label>
122 <div class="col-sm-10">
123 <textarea id="seed" class="seed form-control" readonly="readonly"></textarea>
124 </div>
125 </div>
126 <div class="form-group">
127 <label for="network-phrase" class="col-sm-2 control-label">Coin</label>
128 <div class="col-sm-10">
129 <select id="network-phrase" class="network form-control">
130 <!-- populated by javascript -->
131 </select>
132 </div>
133 </div>
134 <div class="form-group">
135 <label for="root-key" class="col-sm-2 control-label">BIP32 Root Key</label>
136 <div class="col-sm-10">
137 <textarea id="root-key" class="root-key form-control"></textarea>
138 </div>
139 </div>
140 </form>
141 </div>
142 </div>
143
144 <hr>
145
146 <div class="row">
147 <div class="col-md-12">
148 <h2>Derivation Path</h2>
149 <ul class="derivation-type nav nav-tabs" role="tablist">
150 <li id="bip44-tab" class="active">
151 <a href="#bip44" role="tab" data-toggle="tab">BIP44</a>
152 </li>
153 <li id="bip32-tab">
154 <a href="#bip32" role="tab" data-toggle="tab">BIP32</a>
155 </li>
156 </ul>
157 <div class="derivation-type tab-content">
158 <div id="bip44" class="tab-pane active">
159 <form class="form-horizontal" role="form">
160 <br>
161 <div class="col-sm-2"></div>
162 <div class="col-sm-10">
163 <p>For more info see the <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target="_blank">BIP44 spec</a></p>
164 </div>
165 <div class="form-group">
166 <label for="purpose" class="col-sm-2 control-label">
167 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#purpose" target="_blank">Purpose</a>
168 </label>
169 <div class="col-sm-10">
170 <input id="purpose" type="text" class="purpose form-control" value="44">
171 </div>
172 </div>
173 <div class="form-group">
174 <label for="coin" class="col-sm-2 control-label">
175 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#registered-coin-types" target="_blank">Coin</a>
176 </label>
177 <div class="col-sm-10">
178 <input id="coin" type="text" class="coin form-control" value="0">
179 </div>
180 </div>
181 <div class="form-group">
182 <label for="account" class="col-sm-2 control-label">
183 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#account" target="_blank">Account</a>
184 </label>
185 <div class="col-sm-10">
186 <input id="account" type="text" class="account form-control" value="0">
187 </div>
188 </div>
189 <div class="form-group">
190 <label for="change" class="col-sm-2 control-label">
191 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#change" target="_blank">External / Internal</a>
192 </label>
193 <div class="col-sm-10">
194 <input id="change" type="text" class="change form-control" value="0">
195 </div>
196 </div>
197 <div class="form-group">
198 <label for="bip44-path" class="col-sm-2 control-label">BIP32 Derivation Path</label>
199 <div class="col-sm-10">
200 <input id="bip44-path" type="text" class="path form-control" value="m/44'/0'/0'/0" readonly="readonly">
201 </div>
202 </div>
203 </form>
204 </div>
205 <div id="bip32" class="tab-pane">
206 <form class="form-horizontal" role="form">
207 <br>
208 <div class="col-sm-2"></div>
209 <div class="col-sm-10">
210 <p>For more info see the <a href="https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target="_blank">BIP32 spec</a></p>
211 </div>
212 <div class="form-group">
213 <label for="bip32-path" class="col-sm-2 control-label">BIP32 Derivation Path</label>
214 <div class="col-sm-10">
215 <input id="bip32-path" type="text" class="path form-control" value="m/0">
216 </div>
217 </div>
218 <div class="form-group">
219 <div class="col-sm-2"></div>
220 <label class="col-sm-10">
221 <input class="hardened-addresses" type="checkbox">
222 Use hardened addresses
223 </label>
224 </div>
225 <div class="form-group">
226 <label class="col-sm-2 control-label">Hive Wallet</label>
227 <div class="col-sm-10">
228 <p class="form-control no-border">
229 Use path <code>m/0'/0</code>.
230 For more info see the <a href="https://www.hivewallet.com/" target="_blank">Hive Wallet homepage</a>
231 </p>
232 </div>
233 </div>
234 <div class="form-group">
235 <label for="mycelium-path" class="col-sm-2 control-label">Mycelium Wallet</label>
236 <div class="col-sm-10">
237 <p class="form-control no-border">
238 Use path <code>m/44'/0'/0'/0</code>.
239 For more info see the <a href="http://www.mycelium.com/" target="_blank">Mycelium Wallet homepage</a>
240 </p>
241 </div>
242 </div>
243 <div class="form-group">
244 <label for="core-path" class="col-sm-2 control-label">Bitcoin Core</label>
245 <div class="col-sm-10">
246 <p class="form-control no-border">
247 Use path <code>m/0'/0'</code> with hardened addresses.
248 For more info see the <a href="https://github.com/bitcoin/bitcoin/pull/8035" target="_blank">Bitcoin Core BIP32 implementation</a>
249 </p>
250 </div>
251 </div>
252 <div class="form-group">
253 <label class="col-sm-2 control-label">Block Explorers</label>
254 <div class="col-sm-10">
255 <p class="form-control no-border">
256 Use path <code>m/44'/0'/0'</code>.
257 Only enter the <code>xpub</code> extended key into block explorer search fields, never the <code>xpriv</code> key.
258 </p>
259 </div>
260 </div>
261 </form>
262 </div>
263 </div>
264 <form class="form-horizontal" role="form">
265 <div class="form-group">
266 <label for="extended-priv-key" class="col-sm-2 control-label">BIP32 Extended Key</label>
267 <div class="col-sm-10">
268 <textarea id="extended-priv-key" class="extended-priv-key form-control" readonly="readonly"></textarea>
269 </div>
270 </div>
271 <div class="form-group">
272 <label for="extended-pub-key" class="col-sm-2 control-label">BIP32 Extended Key (addresses only)</label>
273 <div class="col-sm-10">
274 <textarea id="extended-pub-key" class="extended-pub-key form-control" readonly="readonly"></textarea>
275 </div>
276 </div>
277 </form>
278 </div>
279 </div>
280
281 <hr>
282
283 <div class="row">
284 <div class="col-md-12">
285 <h2>Derived Addresses</h2>
286 <p>Note these addreses are derived from the <strong>BIP32 Extended Key</strong></p>
287 <table class="table table-striped">
288 <thead>
289 <th>
290 <div class="input-group">
291 Path&nbsp;&nbsp;
292 <button class="index-toggle">Toggle</button>
293 </div>
294 </th>
295 <th>
296 <div class="input-group">
297 Address&nbsp;&nbsp;
298 <button class="address-toggle">Toggle</button>
299 </div>
300 </th>
301 <th>
302 <div class="input-group">
303 Private Key&nbsp;&nbsp;
304 <button class="private-key-toggle">Toggle</button>
305 </div>
306 </th>
307 </thead>
308 <tbody class="addresses">
309 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
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 </tbody>
315 </table>
316 </div>
317 </div>
318 <span>Show next </button>
319 <input type="number" class="rows-to-add" value="20">
320 <button class="more">Show</button>
321
322 <hr>
323
324 <div class="row">
325 <div class="col-md-12">
326 <h2>More info</h2>
327 <h3>BIP39 <span class="small">Mnemonic code for generating deterministic keys</span></h3>
328 <p>
329 Read more at the
330 <a href="https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki">official BIP39 spec</a>
331 </p>
332 <h3>BIP32 <span class="small">Hierarchical Deterministic Wallets</span></h3>
333 <p>
334 Read more at the
335 <a href="https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target="_blank">official BIP32 spec</a>
336 and see the demo at
337 <a href="http://bip32.org/" target="_blank">bip32.org</a>
338 </p>
339 <h3>BIP44 <span class="small">Multi-Account Hierarchy for Deterministic Wallets</span></h3>
340 <p>
341 Read more at the
342 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target="_blank">official BIP44 spec</a>
343 </p>
344 <h3>Private Keys</h3>
345 <p>
346 Use private keys at
347 <a href="https://web.archive.org/web/20150707020924/https://brainwallet.org/" target="_blank">brainwallet.org</a>,
348 but be careful - it can be easy to make mistakes if you
349 don't know what you're doing
350 </p>
351 </div>
352 </div>
353
354 <hr>
355
356 <div class="row">
357 <div class="col-md-12">
358
359 <h2>Offline Usage</h2>
360
361 <p>
362 You can use this tool without having to be online.
363 </p>
364 <p>
365 In your browser, select file save-as, and save this page
366 as a file.
367 </p>
368 <p>
369 Double-click that file to open it in a browser
370 on any offline computer.
371 </p>
372 <p>
373 Alternatively, download it from
374 <a href="https://github.com/iancoleman/bip39">
375 https://github.com/iancoleman/bip39
376 </a>
377
378 </div>
379 </div>
380
381 <hr>
382
383 <div class="row">
384 <div class="col-md-12">
385
386 <h2>This project is 100% open-source code</h2>
387
388 <p>
389 <span>Get the source code at - </span>
390 <a href="https://github.com/iancoleman/bip39" target="_blank">
391 https://github.com/iancoleman/bip39
392 </a>
393 </p>
394
395 <h3>Libraries</h3>
396
397 <p>
398 <span>BitcoinJS - </span>
399 <a href="https://github.com/bitcoinjs/bitcoinjs-lib" target="_blank">
400 https://github.com/bitcoinjs/bitcoinjs-lib
401 </a>
402 </p>
403
404 <p>
405 <span>jsBIP39 - </span>
406 <a href="https://github.com/iancoleman/jsbip39" target="_blank">
407 https://github.com/iancoleman/jsbip39
408 </a>
409 </p>
410
411 <p>
412 <span>sjcl - </span>
413 <a href="https://github.com/bitwiseshiftleft/sjcl" target="_blank">
414 https://github.com/bitwiseshiftleft/sjcl
415 </a>
416 </p>
417
418 <p>
419 <span>jQuery - </span>
420 <a href="https://jquery.com/" target="_blank">
421 https://jquery.com/
422 </a>
423 </p>
424
425 <p>
426 <span>Twitter Bootstrap - </span>
427 <a href="http://getbootstrap.com/" target="_blank">
428 http://getbootstrap.com/
429 </a>
430 </p>
431
432 </div>
433 </div>
434
435 </div>
436
437 <div class="feedback-container">
438 <div class="feedback">Loading...</div>
439 </div>
440
441 <script type="text/template" id="address-row-template">
442 <tr>
443 <td class="index"><span></span></td>
444 <td class="address"><span></span></td>
445 <td class="privkey"><span></span></td>
446 </tr>
447 </script>
448 <script>/*! jQuery v2.1.1 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */
449 !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)
450 },_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))
451 },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});
452 </script>
453 <script>/*!
454 * Bootstrap v3.2.0 (http://getbootstrap.com)
455 * Copyright 2011-2014 Twitter, Inc.
456 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
457 */
458 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>
459 <script>(function() {
460 'use strict';
461
462 /**
463 * Extend an Object with another Object's properties.
464 *
465 * The source objects are specified as additional arguments.
466 *
467 * @param dst Object the object to extend.
468 *
469 * @return Object the final object.
470 */
471 var _extend = function(dst) {
472 var sources = Array.prototype.slice.call(arguments, 1);
473 for (var i=0; i<sources.length; ++i) {
474 var src = sources[i];
475 for (var p in src) {
476 if (src.hasOwnProperty(p)) dst[p] = src[p];
477 }
478 }
479 return dst;
480 };
481
482
483 /**
484 * Defer execution of given function.
485 * @param {Function} func
486 */
487 var _defer = function(func) {
488 if (typeof setImmediate === 'function') {
489 return setImmediate(func);
490 } else {
491 return setTimeout(func, 0);
492 }
493 };
494
495 /**
496 * Based on the algorithm at http://en.wikipedia.org/wiki/Levenshtein_distance.
497 */
498 var Levenshtein = {
499 /**
500 * Calculate levenshtein distance of the two strings.
501 *
502 * @param str1 String the first string.
503 * @param str2 String the second string.
504 * @return Integer the levenshtein distance (0 and above).
505 */
506 get: function(str1, str2) {
507 // base cases
508 if (str1 === str2) return 0;
509 if (str1.length === 0) return str2.length;
510 if (str2.length === 0) return str1.length;
511
512 // two rows
513 var prevRow = new Array(str2.length + 1),
514 curCol, nextCol, i, j, tmp;
515
516 // initialise previous row
517 for (i=0; i<prevRow.length; ++i) {
518 prevRow[i] = i;
519 }
520
521 // calculate current row distance from previous row
522 for (i=0; i<str1.length; ++i) {
523 nextCol = i + 1;
524
525 for (j=0; j<str2.length; ++j) {
526 curCol = nextCol;
527
528 // substution
529 nextCol = prevRow[j] + ( (str1.charAt(i) === str2.charAt(j)) ? 0 : 1 );
530 // insertion
531 tmp = curCol + 1;
532 if (nextCol > tmp) {
533 nextCol = tmp;
534 }
535 // deletion
536 tmp = prevRow[j + 1] + 1;
537 if (nextCol > tmp) {
538 nextCol = tmp;
539 }
540
541 // copy current col value into previous (in preparation for next iteration)
542 prevRow[j] = curCol;
543 }
544
545 // copy last col value into previous (in preparation for next iteration)
546 prevRow[j] = nextCol;
547 }
548
549 return nextCol;
550 },
551
552 /**
553 * Asynchronously calculate levenshtein distance of the two strings.
554 *
555 * @param str1 String the first string.
556 * @param str2 String the second string.
557 * @param cb Function callback function with signature: function(Error err, int distance)
558 * @param [options] Object additional options.
559 * @param [options.progress] Function progress callback with signature: function(percentComplete)
560 */
561 getAsync: function(str1, str2, cb, options) {
562 options = _extend({}, {
563 progress: null
564 }, options);
565
566 // base cases
567 if (str1 === str2) return cb(null, 0);
568 if (str1.length === 0) return cb(null, str2.length);
569 if (str2.length === 0) return cb(null, str1.length);
570
571 // two rows
572 var prevRow = new Array(str2.length + 1),
573 curCol, nextCol,
574 i, j, tmp,
575 startTime, currentTime;
576
577 // initialise previous row
578 for (i=0; i<prevRow.length; ++i) {
579 prevRow[i] = i;
580 }
581
582 nextCol = 1;
583 i = 0;
584 j = -1;
585
586 var __calculate = function() {
587 // reset timer
588 startTime = new Date().valueOf();
589 currentTime = startTime;
590
591 // keep going until one second has elapsed
592 while (currentTime - startTime < 1000) {
593 // reached end of current row?
594 if (str2.length <= (++j)) {
595 // copy current into previous (in preparation for next iteration)
596 prevRow[j] = nextCol;
597
598 // if already done all chars
599 if (str1.length <= (++i)) {
600 return cb(null, nextCol);
601 }
602 // else if we have more left to do
603 else {
604 nextCol = i + 1;
605 j = 0;
606 }
607 }
608
609 // calculation
610 curCol = nextCol;
611
612 // substution
613 nextCol = prevRow[j] + ( (str1.charAt(i) === str2.charAt(j)) ? 0 : 1 );
614 // insertion
615 tmp = curCol + 1;
616 if (nextCol > tmp) {
617 nextCol = tmp;
618 }
619 // deletion
620 tmp = prevRow[j + 1] + 1;
621 if (nextCol > tmp) {
622 nextCol = tmp;
623 }
624
625 // copy current into previous (in preparation for next iteration)
626 prevRow[j] = curCol;
627
628 // get current time
629 currentTime = new Date().valueOf();
630 }
631
632 // send a progress update?
633 if (null !== options.progress) {
634 try {
635 options.progress.call(null, (i * 100.0/ str1.length));
636 } catch (err) {
637 return cb('Progress callback: ' + err.toString());
638 }
639 }
640
641 // next iteration
642 _defer(__calculate);
643 };
644
645 __calculate();
646 }
647
648 };
649
650 // amd
651 if (typeof define !== "undefined" && define !== null && define.amd) {
652 define(function() {
653 return Levenshtein;
654 });
655 }
656 // commonjs
657 else if (typeof module !== "undefined" && module !== null && typeof exports !== "undefined" && module.exports === exports) {
658 module.exports = Levenshtein;
659 }
660 // web worker
661 else if (typeof self !== "undefined" && typeof self.postMessage === 'function' && typeof self.importScripts === 'function') {
662 self.Levenshtein = Levenshtein;
663 }
664 // browser main thread
665 else if (typeof window !== "undefined" && window !== null) {
666 window.Levenshtein = Levenshtein;
667 }
668 }());
669
670 </script>
671 <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){
672 // (public) Constructor
673 function BigInteger(a, b, c) {
674 if (!(this instanceof BigInteger))
675 return new BigInteger(a, b, c)
676
677 if (a != null) {
678 if ("number" == typeof a) this.fromNumber(a, b, c)
679 else if (b == null && "string" != typeof a) this.fromString(a, 256)
680 else this.fromString(a, b)
681 }
682 }
683
684 var proto = BigInteger.prototype
685
686 // duck-typed isBigInteger
687 proto.__bigi = require('../package.json').version
688 BigInteger.isBigInteger = function (obj, check_ver) {
689 return obj && obj.__bigi && (!check_ver || obj.__bigi === proto.__bigi)
690 }
691
692 // Bits per digit
693 var dbits
694
695 // am: Compute w_j += (x*this_i), propagate carries,
696 // c is initial carry, returns final carry.
697 // c < 3*dvalue, x < 2*dvalue, this_i < dvalue
698 // We need to select the fastest one that works in this environment.
699
700 // am1: use a single mult and divide to get the high bits,
701 // max digit bits should be 26 because
702 // max internal value = 2*dvalue^2-2*dvalue (< 2^53)
703 function am1(i, x, w, j, c, n) {
704 while (--n >= 0) {
705 var v = x * this[i++] + w[j] + c
706 c = Math.floor(v / 0x4000000)
707 w[j++] = v & 0x3ffffff
708 }
709 return c
710 }
711 // am2 avoids a big mult-and-extract completely.
712 // Max digit bits should be <= 30 because we do bitwise ops
713 // on values up to 2*hdvalue^2-hdvalue-1 (< 2^31)
714 function am2(i, x, w, j, c, n) {
715 var xl = x & 0x7fff,
716 xh = x >> 15
717 while (--n >= 0) {
718 var l = this[i] & 0x7fff
719 var h = this[i++] >> 15
720 var m = xh * l + h * xl
721 l = xl * l + ((m & 0x7fff) << 15) + w[j] + (c & 0x3fffffff)
722 c = (l >>> 30) + (m >>> 15) + xh * h + (c >>> 30)
723 w[j++] = l & 0x3fffffff
724 }
725 return c
726 }
727 // Alternately, set max digit bits to 28 since some
728 // browsers slow down when dealing with 32-bit numbers.
729 function am3(i, x, w, j, c, n) {
730 var xl = x & 0x3fff,
731 xh = x >> 14
732 while (--n >= 0) {
733 var l = this[i] & 0x3fff
734 var h = this[i++] >> 14
735 var m = xh * l + h * xl
736 l = xl * l + ((m & 0x3fff) << 14) + w[j] + c
737 c = (l >> 28) + (m >> 14) + xh * h
738 w[j++] = l & 0xfffffff
739 }
740 return c
741 }
742
743 // wtf?
744 BigInteger.prototype.am = am1
745 dbits = 26
746
747 BigInteger.prototype.DB = dbits
748 BigInteger.prototype.DM = ((1 << dbits) - 1)
749 var DV = BigInteger.prototype.DV = (1 << dbits)
750
751 var BI_FP = 52
752 BigInteger.prototype.FV = Math.pow(2, BI_FP)
753 BigInteger.prototype.F1 = BI_FP - dbits
754 BigInteger.prototype.F2 = 2 * dbits - BI_FP
755
756 // Digit conversions
757 var BI_RM = "0123456789abcdefghijklmnopqrstuvwxyz"
758 var BI_RC = new Array()
759 var rr, vv
760 rr = "0".charCodeAt(0)
761 for (vv = 0; vv <= 9; ++vv) BI_RC[rr++] = vv
762 rr = "a".charCodeAt(0)
763 for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv
764 rr = "A".charCodeAt(0)
765 for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv
766
767 function int2char(n) {
768 return BI_RM.charAt(n)
769 }
770
771 function intAt(s, i) {
772 var c = BI_RC[s.charCodeAt(i)]
773 return (c == null) ? -1 : c
774 }
775
776 // (protected) copy this to r
777 function bnpCopyTo(r) {
778 for (var i = this.t - 1; i >= 0; --i) r[i] = this[i]
779 r.t = this.t
780 r.s = this.s
781 }
782
783 // (protected) set from integer value x, -DV <= x < DV
784 function bnpFromInt(x) {
785 this.t = 1
786 this.s = (x < 0) ? -1 : 0
787 if (x > 0) this[0] = x
788 else if (x < -1) this[0] = x + DV
789 else this.t = 0
790 }
791
792 // return bigint initialized to value
793 function nbv(i) {
794 var r = new BigInteger()
795 r.fromInt(i)
796 return r
797 }
798
799 // (protected) set from string and radix
800 function bnpFromString(s, b) {
801 var self = this
802
803 var k
804 if (b == 16) k = 4
805 else if (b == 8) k = 3
806 else if (b == 256) k = 8; // byte array
807 else if (b == 2) k = 1
808 else if (b == 32) k = 5
809 else if (b == 4) k = 2
810 else {
811 self.fromRadix(s, b)
812 return
813 }
814 self.t = 0
815 self.s = 0
816 var i = s.length,
817 mi = false,
818 sh = 0
819 while (--i >= 0) {
820 var x = (k == 8) ? s[i] & 0xff : intAt(s, i)
821 if (x < 0) {
822 if (s.charAt(i) == "-") mi = true
823 continue
824 }
825 mi = false
826 if (sh == 0)
827 self[self.t++] = x
828 else if (sh + k > self.DB) {
829 self[self.t - 1] |= (x & ((1 << (self.DB - sh)) - 1)) << sh
830 self[self.t++] = (x >> (self.DB - sh))
831 } else
832 self[self.t - 1] |= x << sh
833 sh += k
834 if (sh >= self.DB) sh -= self.DB
835 }
836 if (k == 8 && (s[0] & 0x80) != 0) {
837 self.s = -1
838 if (sh > 0) self[self.t - 1] |= ((1 << (self.DB - sh)) - 1) << sh
839 }
840 self.clamp()
841 if (mi) BigInteger.ZERO.subTo(self, self)
842 }
843
844 // (protected) clamp off excess high words
845 function bnpClamp() {
846 var c = this.s & this.DM
847 while (this.t > 0 && this[this.t - 1] == c)--this.t
848 }
849
850 // (public) return string representation in given radix
851 function bnToString(b) {
852 var self = this
853 if (self.s < 0) return "-" + self.negate()
854 .toString(b)
855 var k
856 if (b == 16) k = 4
857 else if (b == 8) k = 3
858 else if (b == 2) k = 1
859 else if (b == 32) k = 5
860 else if (b == 4) k = 2
861 else return self.toRadix(b)
862 var km = (1 << k) - 1,
863 d, m = false,
864 r = "",
865 i = self.t
866 var p = self.DB - (i * self.DB) % k
867 if (i-- > 0) {
868 if (p < self.DB && (d = self[i] >> p) > 0) {
869 m = true
870 r = int2char(d)
871 }
872 while (i >= 0) {
873 if (p < k) {
874 d = (self[i] & ((1 << p) - 1)) << (k - p)
875 d |= self[--i] >> (p += self.DB - k)
876 } else {
877 d = (self[i] >> (p -= k)) & km
878 if (p <= 0) {
879 p += self.DB
880 --i
881 }
882 }
883 if (d > 0) m = true
884 if (m) r += int2char(d)
885 }
886 }
887 return m ? r : "0"
888 }
889
890 // (public) -this
891 function bnNegate() {
892 var r = new BigInteger()
893 BigInteger.ZERO.subTo(this, r)
894 return r
895 }
896
897 // (public) |this|
898 function bnAbs() {
899 return (this.s < 0) ? this.negate() : this
900 }
901
902 // (public) return + if this > a, - if this < a, 0 if equal
903 function bnCompareTo(a) {
904 var r = this.s - a.s
905 if (r != 0) return r
906 var i = this.t
907 r = i - a.t
908 if (r != 0) return (this.s < 0) ? -r : r
909 while (--i >= 0)
910 if ((r = this[i] - a[i]) != 0) return r
911 return 0
912 }
913
914 // returns bit length of the integer x
915 function nbits(x) {
916 var r = 1,
917 t
918 if ((t = x >>> 16) != 0) {
919 x = t
920 r += 16
921 }
922 if ((t = x >> 8) != 0) {
923 x = t
924 r += 8
925 }
926 if ((t = x >> 4) != 0) {
927 x = t
928 r += 4
929 }
930 if ((t = x >> 2) != 0) {
931 x = t
932 r += 2
933 }
934 if ((t = x >> 1) != 0) {
935 x = t
936 r += 1
937 }
938 return r
939 }
940
941 // (public) return the number of bits in "this"
942 function bnBitLength() {
943 if (this.t <= 0) return 0
944 return this.DB * (this.t - 1) + nbits(this[this.t - 1] ^ (this.s & this.DM))
945 }
946
947 // (public) return the number of bytes in "this"
948 function bnByteLength() {
949 return this.bitLength() >> 3
950 }
951
952 // (protected) r = this << n*DB
953 function bnpDLShiftTo(n, r) {
954 var i
955 for (i = this.t - 1; i >= 0; --i) r[i + n] = this[i]
956 for (i = n - 1; i >= 0; --i) r[i] = 0
957 r.t = this.t + n
958 r.s = this.s
959 }
960
961 // (protected) r = this >> n*DB
962 function bnpDRShiftTo(n, r) {
963 for (var i = n; i < this.t; ++i) r[i - n] = this[i]
964 r.t = Math.max(this.t - n, 0)
965 r.s = this.s
966 }
967
968 // (protected) r = this << n
969 function bnpLShiftTo(n, r) {
970 var self = this
971 var bs = n % self.DB
972 var cbs = self.DB - bs
973 var bm = (1 << cbs) - 1
974 var ds = Math.floor(n / self.DB),
975 c = (self.s << bs) & self.DM,
976 i
977 for (i = self.t - 1; i >= 0; --i) {
978 r[i + ds + 1] = (self[i] >> cbs) | c
979 c = (self[i] & bm) << bs
980 }
981 for (i = ds - 1; i >= 0; --i) r[i] = 0
982 r[ds] = c
983 r.t = self.t + ds + 1
984 r.s = self.s
985 r.clamp()
986 }
987
988 // (protected) r = this >> n
989 function bnpRShiftTo(n, r) {
990 var self = this
991 r.s = self.s
992 var ds = Math.floor(n / self.DB)
993 if (ds >= self.t) {
994 r.t = 0
995 return
996 }
997 var bs = n % self.DB
998 var cbs = self.DB - bs
999 var bm = (1 << bs) - 1
1000 r[0] = self[ds] >> bs
1001 for (var i = ds + 1; i < self.t; ++i) {
1002 r[i - ds - 1] |= (self[i] & bm) << cbs
1003 r[i - ds] = self[i] >> bs
1004 }
1005 if (bs > 0) r[self.t - ds - 1] |= (self.s & bm) << cbs
1006 r.t = self.t - ds
1007 r.clamp()
1008 }
1009
1010 // (protected) r = this - a
1011 function bnpSubTo(a, r) {
1012 var self = this
1013 var i = 0,
1014 c = 0,
1015 m = Math.min(a.t, self.t)
1016 while (i < m) {
1017 c += self[i] - a[i]
1018 r[i++] = c & self.DM
1019 c >>= self.DB
1020 }
1021 if (a.t < self.t) {
1022 c -= a.s
1023 while (i < self.t) {
1024 c += self[i]
1025 r[i++] = c & self.DM
1026 c >>= self.DB
1027 }
1028 c += self.s
1029 } else {
1030 c += self.s
1031 while (i < a.t) {
1032 c -= a[i]
1033 r[i++] = c & self.DM
1034 c >>= self.DB
1035 }
1036 c -= a.s
1037 }
1038 r.s = (c < 0) ? -1 : 0
1039 if (c < -1) r[i++] = self.DV + c
1040 else if (c > 0) r[i++] = c
1041 r.t = i
1042 r.clamp()
1043 }
1044
1045 // (protected) r = this * a, r != this,a (HAC 14.12)
1046 // "this" should be the larger one if appropriate.
1047 function bnpMultiplyTo(a, r) {
1048 var x = this.abs(),
1049 y = a.abs()
1050 var i = x.t
1051 r.t = i + y.t
1052 while (--i >= 0) r[i] = 0
1053 for (i = 0; i < y.t; ++i) r[i + x.t] = x.am(0, y[i], r, i, 0, x.t)
1054 r.s = 0
1055 r.clamp()
1056 if (this.s != a.s) BigInteger.ZERO.subTo(r, r)
1057 }
1058
1059 // (protected) r = this^2, r != this (HAC 14.16)
1060 function bnpSquareTo(r) {
1061 var x = this.abs()
1062 var i = r.t = 2 * x.t
1063 while (--i >= 0) r[i] = 0
1064 for (i = 0; i < x.t - 1; ++i) {
1065 var c = x.am(i, x[i], r, 2 * i, 0, 1)
1066 if ((r[i + x.t] += x.am(i + 1, 2 * x[i], r, 2 * i + 1, c, x.t - i - 1)) >= x.DV) {
1067 r[i + x.t] -= x.DV
1068 r[i + x.t + 1] = 1
1069 }
1070 }
1071 if (r.t > 0) r[r.t - 1] += x.am(i, x[i], r, 2 * i, 0, 1)
1072 r.s = 0
1073 r.clamp()
1074 }
1075
1076 // (protected) divide this by m, quotient and remainder to q, r (HAC 14.20)
1077 // r != q, this != m. q or r may be null.
1078 function bnpDivRemTo(m, q, r) {
1079 var self = this
1080 var pm = m.abs()
1081 if (pm.t <= 0) return
1082 var pt = self.abs()
1083 if (pt.t < pm.t) {
1084 if (q != null) q.fromInt(0)
1085 if (r != null) self.copyTo(r)
1086 return
1087 }
1088 if (r == null) r = new BigInteger()
1089 var y = new BigInteger(),
1090 ts = self.s,
1091 ms = m.s
1092 var nsh = self.DB - nbits(pm[pm.t - 1]); // normalize modulus
1093 if (nsh > 0) {
1094 pm.lShiftTo(nsh, y)
1095 pt.lShiftTo(nsh, r)
1096 } else {
1097 pm.copyTo(y)
1098 pt.copyTo(r)
1099 }
1100 var ys = y.t
1101 var y0 = y[ys - 1]
1102 if (y0 == 0) return
1103 var yt = y0 * (1 << self.F1) + ((ys > 1) ? y[ys - 2] >> self.F2 : 0)
1104 var d1 = self.FV / yt,
1105 d2 = (1 << self.F1) / yt,
1106 e = 1 << self.F2
1107 var i = r.t,
1108 j = i - ys,
1109 t = (q == null) ? new BigInteger() : q
1110 y.dlShiftTo(j, t)
1111 if (r.compareTo(t) >= 0) {
1112 r[r.t++] = 1
1113 r.subTo(t, r)
1114 }
1115 BigInteger.ONE.dlShiftTo(ys, t)
1116 t.subTo(y, y); // "negative" y so we can replace sub with am later
1117 while (y.t < ys) y[y.t++] = 0
1118 while (--j >= 0) {
1119 // Estimate quotient digit
1120 var qd = (r[--i] == y0) ? self.DM : Math.floor(r[i] * d1 + (r[i - 1] + e) * d2)
1121 if ((r[i] += y.am(0, qd, r, j, 0, ys)) < qd) { // Try it out
1122 y.dlShiftTo(j, t)
1123 r.subTo(t, r)
1124 while (r[i] < --qd) r.subTo(t, r)
1125 }
1126 }
1127 if (q != null) {
1128 r.drShiftTo(ys, q)
1129 if (ts != ms) BigInteger.ZERO.subTo(q, q)
1130 }
1131 r.t = ys
1132 r.clamp()
1133 if (nsh > 0) r.rShiftTo(nsh, r); // Denormalize remainder
1134 if (ts < 0) BigInteger.ZERO.subTo(r, r)
1135 }
1136
1137 // (public) this mod a
1138 function bnMod(a) {
1139 var r = new BigInteger()
1140 this.abs()
1141 .divRemTo(a, null, r)
1142 if (this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) a.subTo(r, r)
1143 return r
1144 }
1145
1146 // Modular reduction using "classic" algorithm
1147 function Classic(m) {
1148 this.m = m
1149 }
1150
1151 function cConvert(x) {
1152 if (x.s < 0 || x.compareTo(this.m) >= 0) return x.mod(this.m)
1153 else return x
1154 }
1155
1156 function cRevert(x) {
1157 return x
1158 }
1159
1160 function cReduce(x) {
1161 x.divRemTo(this.m, null, x)
1162 }
1163
1164 function cMulTo(x, y, r) {
1165 x.multiplyTo(y, r)
1166 this.reduce(r)
1167 }
1168
1169 function cSqrTo(x, r) {
1170 x.squareTo(r)
1171 this.reduce(r)
1172 }
1173
1174 Classic.prototype.convert = cConvert
1175 Classic.prototype.revert = cRevert
1176 Classic.prototype.reduce = cReduce
1177 Classic.prototype.mulTo = cMulTo
1178 Classic.prototype.sqrTo = cSqrTo
1179
1180 // (protected) return "-1/this % 2^DB"; useful for Mont. reduction
1181 // justification:
1182 // xy == 1 (mod m)
1183 // xy = 1+km
1184 // xy(2-xy) = (1+km)(1-km)
1185 // x[y(2-xy)] = 1-k^2m^2
1186 // x[y(2-xy)] == 1 (mod m^2)
1187 // if y is 1/x mod m, then y(2-xy) is 1/x mod m^2
1188 // should reduce x and y(2-xy) by m^2 at each step to keep size bounded.
1189 // JS multiply "overflows" differently from C/C++, so care is needed here.
1190 function bnpInvDigit() {
1191 if (this.t < 1) return 0
1192 var x = this[0]
1193 if ((x & 1) == 0) return 0
1194 var y = x & 3; // y == 1/x mod 2^2
1195 y = (y * (2 - (x & 0xf) * y)) & 0xf; // y == 1/x mod 2^4
1196 y = (y * (2 - (x & 0xff) * y)) & 0xff; // y == 1/x mod 2^8
1197 y = (y * (2 - (((x & 0xffff) * y) & 0xffff))) & 0xffff; // y == 1/x mod 2^16
1198 // last step - calculate inverse mod DV directly
1199 // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints
1200 y = (y * (2 - x * y % this.DV)) % this.DV; // y == 1/x mod 2^dbits
1201 // we really want the negative inverse, and -DV < y < DV
1202 return (y > 0) ? this.DV - y : -y
1203 }
1204
1205 // Montgomery reduction
1206 function Montgomery(m) {
1207 this.m = m
1208 this.mp = m.invDigit()
1209 this.mpl = this.mp & 0x7fff
1210 this.mph = this.mp >> 15
1211 this.um = (1 << (m.DB - 15)) - 1
1212 this.mt2 = 2 * m.t
1213 }
1214
1215 // xR mod m
1216 function montConvert(x) {
1217 var r = new BigInteger()
1218 x.abs()
1219 .dlShiftTo(this.m.t, r)
1220 r.divRemTo(this.m, null, r)
1221 if (x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) this.m.subTo(r, r)
1222 return r
1223 }
1224
1225 // x/R mod m
1226 function montRevert(x) {
1227 var r = new BigInteger()
1228 x.copyTo(r)
1229 this.reduce(r)
1230 return r
1231 }
1232
1233 // x = x/R mod m (HAC 14.32)
1234 function montReduce(x) {
1235 while (x.t <= this.mt2) // pad x so am has enough room later
1236 x[x.t++] = 0
1237 for (var i = 0; i < this.m.t; ++i) {
1238 // faster way of calculating u0 = x[i]*mp mod DV
1239 var j = x[i] & 0x7fff
1240 var u0 = (j * this.mpl + (((j * this.mph + (x[i] >> 15) * this.mpl) & this.um) << 15)) & x.DM
1241 // use am to combine the multiply-shift-add into one call
1242 j = i + this.m.t
1243 x[j] += this.m.am(0, u0, x, i, 0, this.m.t)
1244 // propagate carry
1245 while (x[j] >= x.DV) {
1246 x[j] -= x.DV
1247 x[++j]++
1248 }
1249 }
1250 x.clamp()
1251 x.drShiftTo(this.m.t, x)
1252 if (x.compareTo(this.m) >= 0) x.subTo(this.m, x)
1253 }
1254
1255 // r = "x^2/R mod m"; x != r
1256 function montSqrTo(x, r) {
1257 x.squareTo(r)
1258 this.reduce(r)
1259 }
1260
1261 // r = "xy/R mod m"; x,y != r
1262 function montMulTo(x, y, r) {
1263 x.multiplyTo(y, r)
1264 this.reduce(r)
1265 }
1266
1267 Montgomery.prototype.convert = montConvert
1268 Montgomery.prototype.revert = montRevert
1269 Montgomery.prototype.reduce = montReduce
1270 Montgomery.prototype.mulTo = montMulTo
1271 Montgomery.prototype.sqrTo = montSqrTo
1272
1273 // (protected) true iff this is even
1274 function bnpIsEven() {
1275 return ((this.t > 0) ? (this[0] & 1) : this.s) == 0
1276 }
1277
1278 // (protected) this^e, e < 2^32, doing sqr and mul with "r" (HAC 14.79)
1279 function bnpExp(e, z) {
1280 if (e > 0xffffffff || e < 1) return BigInteger.ONE
1281 var r = new BigInteger(),
1282 r2 = new BigInteger(),
1283 g = z.convert(this),
1284 i = nbits(e) - 1
1285 g.copyTo(r)
1286 while (--i >= 0) {
1287 z.sqrTo(r, r2)
1288 if ((e & (1 << i)) > 0) z.mulTo(r2, g, r)
1289 else {
1290 var t = r
1291 r = r2
1292 r2 = t
1293 }
1294 }
1295 return z.revert(r)
1296 }
1297
1298 // (public) this^e % m, 0 <= e < 2^32
1299 function bnModPowInt(e, m) {
1300 var z
1301 if (e < 256 || m.isEven()) z = new Classic(m)
1302 else z = new Montgomery(m)
1303 return this.exp(e, z)
1304 }
1305
1306 // protected
1307 proto.copyTo = bnpCopyTo
1308 proto.fromInt = bnpFromInt
1309 proto.fromString = bnpFromString
1310 proto.clamp = bnpClamp
1311 proto.dlShiftTo = bnpDLShiftTo
1312 proto.drShiftTo = bnpDRShiftTo
1313 proto.lShiftTo = bnpLShiftTo
1314 proto.rShiftTo = bnpRShiftTo
1315 proto.subTo = bnpSubTo
1316 proto.multiplyTo = bnpMultiplyTo
1317 proto.squareTo = bnpSquareTo
1318 proto.divRemTo = bnpDivRemTo
1319 proto.invDigit = bnpInvDigit
1320 proto.isEven = bnpIsEven
1321 proto.exp = bnpExp
1322
1323 // public
1324 proto.toString = bnToString
1325 proto.negate = bnNegate
1326 proto.abs = bnAbs
1327 proto.compareTo = bnCompareTo
1328 proto.bitLength = bnBitLength
1329 proto.byteLength = bnByteLength
1330 proto.mod = bnMod
1331 proto.modPowInt = bnModPowInt
1332
1333 // (public)
1334 function bnClone() {
1335 var r = new BigInteger()
1336 this.copyTo(r)
1337 return r
1338 }
1339
1340 // (public) return value as integer
1341 function bnIntValue() {
1342 if (this.s < 0) {
1343 if (this.t == 1) return this[0] - this.DV
1344 else if (this.t == 0) return -1
1345 } else if (this.t == 1) return this[0]
1346 else if (this.t == 0) return 0
1347 // assumes 16 < DB < 32
1348 return ((this[1] & ((1 << (32 - this.DB)) - 1)) << this.DB) | this[0]
1349 }
1350
1351 // (public) return value as byte
1352 function bnByteValue() {
1353 return (this.t == 0) ? this.s : (this[0] << 24) >> 24
1354 }
1355
1356 // (public) return value as short (assumes DB>=16)
1357 function bnShortValue() {
1358 return (this.t == 0) ? this.s : (this[0] << 16) >> 16
1359 }
1360
1361 // (protected) return x s.t. r^x < DV
1362 function bnpChunkSize(r) {
1363 return Math.floor(Math.LN2 * this.DB / Math.log(r))
1364 }
1365
1366 // (public) 0 if this == 0, 1 if this > 0
1367 function bnSigNum() {
1368 if (this.s < 0) return -1
1369 else if (this.t <= 0 || (this.t == 1 && this[0] <= 0)) return 0
1370 else return 1
1371 }
1372
1373 // (protected) convert to radix string
1374 function bnpToRadix(b) {
1375 if (b == null) b = 10
1376 if (this.signum() == 0 || b < 2 || b > 36) return "0"
1377 var cs = this.chunkSize(b)
1378 var a = Math.pow(b, cs)
1379 var d = nbv(a),
1380 y = new BigInteger(),
1381 z = new BigInteger(),
1382 r = ""
1383 this.divRemTo(d, y, z)
1384 while (y.signum() > 0) {
1385 r = (a + z.intValue())
1386 .toString(b)
1387 .substr(1) + r
1388 y.divRemTo(d, y, z)
1389 }
1390 return z.intValue()
1391 .toString(b) + r
1392 }
1393
1394 // (protected) convert from radix string
1395 function bnpFromRadix(s, b) {
1396 var self = this
1397 self.fromInt(0)
1398 if (b == null) b = 10
1399 var cs = self.chunkSize(b)
1400 var d = Math.pow(b, cs),
1401 mi = false,
1402 j = 0,
1403 w = 0
1404 for (var i = 0; i < s.length; ++i) {
1405 var x = intAt(s, i)
1406 if (x < 0) {
1407 if (s.charAt(i) == "-" && self.signum() == 0) mi = true
1408 continue
1409 }
1410 w = b * w + x
1411 if (++j >= cs) {
1412 self.dMultiply(d)
1413 self.dAddOffset(w, 0)
1414 j = 0
1415 w = 0
1416 }
1417 }
1418 if (j > 0) {
1419 self.dMultiply(Math.pow(b, j))
1420 self.dAddOffset(w, 0)
1421 }
1422 if (mi) BigInteger.ZERO.subTo(self, self)
1423 }
1424
1425 // (protected) alternate constructor
1426 function bnpFromNumber(a, b, c) {
1427 var self = this
1428 if ("number" == typeof b) {
1429 // new BigInteger(int,int,RNG)
1430 if (a < 2) self.fromInt(1)
1431 else {
1432 self.fromNumber(a, c)
1433 if (!self.testBit(a - 1)) // force MSB set
1434 self.bitwiseTo(BigInteger.ONE.shiftLeft(a - 1), op_or, self)
1435 if (self.isEven()) self.dAddOffset(1, 0); // force odd
1436 while (!self.isProbablePrime(b)) {
1437 self.dAddOffset(2, 0)
1438 if (self.bitLength() > a) self.subTo(BigInteger.ONE.shiftLeft(a - 1), self)
1439 }
1440 }
1441 } else {
1442 // new BigInteger(int,RNG)
1443 var x = new Array(),
1444 t = a & 7
1445 x.length = (a >> 3) + 1
1446 b.nextBytes(x)
1447 if (t > 0) x[0] &= ((1 << t) - 1)
1448 else x[0] = 0
1449 self.fromString(x, 256)
1450 }
1451 }
1452
1453 // (public) convert to bigendian byte array
1454 function bnToByteArray() {
1455 var self = this
1456 var i = self.t,
1457 r = new Array()
1458 r[0] = self.s
1459 var p = self.DB - (i * self.DB) % 8,
1460 d, k = 0
1461 if (i-- > 0) {
1462 if (p < self.DB && (d = self[i] >> p) != (self.s & self.DM) >> p)
1463 r[k++] = d | (self.s << (self.DB - p))
1464 while (i >= 0) {
1465 if (p < 8) {
1466 d = (self[i] & ((1 << p) - 1)) << (8 - p)
1467 d |= self[--i] >> (p += self.DB - 8)
1468 } else {
1469 d = (self[i] >> (p -= 8)) & 0xff
1470 if (p <= 0) {
1471 p += self.DB
1472 --i
1473 }
1474 }
1475 if ((d & 0x80) != 0) d |= -256
1476 if (k === 0 && (self.s & 0x80) != (d & 0x80))++k
1477 if (k > 0 || d != self.s) r[k++] = d
1478 }
1479 }
1480 return r
1481 }
1482
1483 function bnEquals(a) {
1484 return (this.compareTo(a) == 0)
1485 }
1486
1487 function bnMin(a) {
1488 return (this.compareTo(a) < 0) ? this : a
1489 }
1490
1491 function bnMax(a) {
1492 return (this.compareTo(a) > 0) ? this : a
1493 }
1494
1495 // (protected) r = this op a (bitwise)
1496 function bnpBitwiseTo(a, op, r) {
1497 var self = this
1498 var i, f, m = Math.min(a.t, self.t)
1499 for (i = 0; i < m; ++i) r[i] = op(self[i], a[i])
1500 if (a.t < self.t) {
1501 f = a.s & self.DM
1502 for (i = m; i < self.t; ++i) r[i] = op(self[i], f)
1503 r.t = self.t
1504 } else {
1505 f = self.s & self.DM
1506 for (i = m; i < a.t; ++i) r[i] = op(f, a[i])
1507 r.t = a.t
1508 }
1509 r.s = op(self.s, a.s)
1510 r.clamp()
1511 }
1512
1513 // (public) this & a
1514 function op_and(x, y) {
1515 return x & y
1516 }
1517
1518 function bnAnd(a) {
1519 var r = new BigInteger()
1520 this.bitwiseTo(a, op_and, r)
1521 return r
1522 }
1523
1524 // (public) this | a
1525 function op_or(x, y) {
1526 return x | y
1527 }
1528
1529 function bnOr(a) {
1530 var r = new BigInteger()
1531 this.bitwiseTo(a, op_or, r)
1532 return r
1533 }
1534
1535 // (public) this ^ a
1536 function op_xor(x, y) {
1537 return x ^ y
1538 }
1539
1540 function bnXor(a) {
1541 var r = new BigInteger()
1542 this.bitwiseTo(a, op_xor, r)
1543 return r
1544 }
1545
1546 // (public) this & ~a
1547 function op_andnot(x, y) {
1548 return x & ~y
1549 }
1550
1551 function bnAndNot(a) {
1552 var r = new BigInteger()
1553 this.bitwiseTo(a, op_andnot, r)
1554 return r
1555 }
1556
1557 // (public) ~this
1558 function bnNot() {
1559 var r = new BigInteger()
1560 for (var i = 0; i < this.t; ++i) r[i] = this.DM & ~this[i]
1561 r.t = this.t
1562 r.s = ~this.s
1563 return r
1564 }
1565
1566 // (public) this << n
1567 function bnShiftLeft(n) {
1568 var r = new BigInteger()
1569 if (n < 0) this.rShiftTo(-n, r)
1570 else this.lShiftTo(n, r)
1571 return r
1572 }
1573
1574 // (public) this >> n
1575 function bnShiftRight(n) {
1576 var r = new BigInteger()
1577 if (n < 0) this.lShiftTo(-n, r)
1578 else this.rShiftTo(n, r)
1579 return r
1580 }
1581
1582 // return index of lowest 1-bit in x, x < 2^31
1583 function lbit(x) {
1584 if (x == 0) return -1
1585 var r = 0
1586 if ((x & 0xffff) == 0) {
1587 x >>= 16
1588 r += 16
1589 }
1590 if ((x & 0xff) == 0) {
1591 x >>= 8
1592 r += 8
1593 }
1594 if ((x & 0xf) == 0) {
1595 x >>= 4
1596 r += 4
1597 }
1598 if ((x & 3) == 0) {
1599 x >>= 2
1600 r += 2
1601 }
1602 if ((x & 1) == 0)++r
1603 return r
1604 }
1605
1606 // (public) returns index of lowest 1-bit (or -1 if none)
1607 function bnGetLowestSetBit() {
1608 for (var i = 0; i < this.t; ++i)
1609 if (this[i] != 0) return i * this.DB + lbit(this[i])
1610 if (this.s < 0) return this.t * this.DB
1611 return -1
1612 }
1613
1614 // return number of 1 bits in x
1615 function cbit(x) {
1616 var r = 0
1617 while (x != 0) {
1618 x &= x - 1
1619 ++r
1620 }
1621 return r
1622 }
1623
1624 // (public) return number of set bits
1625 function bnBitCount() {
1626 var r = 0,
1627 x = this.s & this.DM
1628 for (var i = 0; i < this.t; ++i) r += cbit(this[i] ^ x)
1629 return r
1630 }
1631
1632 // (public) true iff nth bit is set
1633 function bnTestBit(n) {
1634 var j = Math.floor(n / this.DB)
1635 if (j >= this.t) return (this.s != 0)
1636 return ((this[j] & (1 << (n % this.DB))) != 0)
1637 }
1638
1639 // (protected) this op (1<<n)
1640 function bnpChangeBit(n, op) {
1641 var r = BigInteger.ONE.shiftLeft(n)
1642 this.bitwiseTo(r, op, r)
1643 return r
1644 }
1645
1646 // (public) this | (1<<n)
1647 function bnSetBit(n) {
1648 return this.changeBit(n, op_or)
1649 }
1650
1651 // (public) this & ~(1<<n)
1652 function bnClearBit(n) {
1653 return this.changeBit(n, op_andnot)
1654 }
1655
1656 // (public) this ^ (1<<n)
1657 function bnFlipBit(n) {
1658 return this.changeBit(n, op_xor)
1659 }
1660
1661 // (protected) r = this + a
1662 function bnpAddTo(a, r) {
1663 var self = this
1664
1665 var i = 0,
1666 c = 0,
1667 m = Math.min(a.t, self.t)
1668 while (i < m) {
1669 c += self[i] + a[i]
1670 r[i++] = c & self.DM
1671 c >>= self.DB
1672 }
1673 if (a.t < self.t) {
1674 c += a.s
1675 while (i < self.t) {
1676 c += self[i]
1677 r[i++] = c & self.DM
1678 c >>= self.DB
1679 }
1680 c += self.s
1681 } else {
1682 c += self.s
1683 while (i < a.t) {
1684 c += a[i]
1685 r[i++] = c & self.DM
1686 c >>= self.DB
1687 }
1688 c += a.s
1689 }
1690 r.s = (c < 0) ? -1 : 0
1691 if (c > 0) r[i++] = c
1692 else if (c < -1) r[i++] = self.DV + c
1693 r.t = i
1694 r.clamp()
1695 }
1696
1697 // (public) this + a
1698 function bnAdd(a) {
1699 var r = new BigInteger()
1700 this.addTo(a, r)
1701 return r
1702 }
1703
1704 // (public) this - a
1705 function bnSubtract(a) {
1706 var r = new BigInteger()
1707 this.subTo(a, r)
1708 return r
1709 }
1710
1711 // (public) this * a
1712 function bnMultiply(a) {
1713 var r = new BigInteger()
1714 this.multiplyTo(a, r)
1715 return r
1716 }
1717
1718 // (public) this^2
1719 function bnSquare() {
1720 var r = new BigInteger()
1721 this.squareTo(r)
1722 return r
1723 }
1724
1725 // (public) this / a
1726 function bnDivide(a) {
1727 var r = new BigInteger()
1728 this.divRemTo(a, r, null)
1729 return r
1730 }
1731
1732 // (public) this % a
1733 function bnRemainder(a) {
1734 var r = new BigInteger()
1735 this.divRemTo(a, null, r)
1736 return r
1737 }
1738
1739 // (public) [this/a,this%a]
1740 function bnDivideAndRemainder(a) {
1741 var q = new BigInteger(),
1742 r = new BigInteger()
1743 this.divRemTo(a, q, r)
1744 return new Array(q, r)
1745 }
1746
1747 // (protected) this *= n, this >= 0, 1 < n < DV
1748 function bnpDMultiply(n) {
1749 this[this.t] = this.am(0, n - 1, this, 0, 0, this.t)
1750 ++this.t
1751 this.clamp()
1752 }
1753
1754 // (protected) this += n << w words, this >= 0
1755 function bnpDAddOffset(n, w) {
1756 if (n == 0) return
1757 while (this.t <= w) this[this.t++] = 0
1758 this[w] += n
1759 while (this[w] >= this.DV) {
1760 this[w] -= this.DV
1761 if (++w >= this.t) this[this.t++] = 0
1762 ++this[w]
1763 }
1764 }
1765
1766 // A "null" reducer
1767 function NullExp() {}
1768
1769 function nNop(x) {
1770 return x
1771 }
1772
1773 function nMulTo(x, y, r) {
1774 x.multiplyTo(y, r)
1775 }
1776
1777 function nSqrTo(x, r) {
1778 x.squareTo(r)
1779 }
1780
1781 NullExp.prototype.convert = nNop
1782 NullExp.prototype.revert = nNop
1783 NullExp.prototype.mulTo = nMulTo
1784 NullExp.prototype.sqrTo = nSqrTo
1785
1786 // (public) this^e
1787 function bnPow(e) {
1788 return this.exp(e, new NullExp())
1789 }
1790
1791 // (protected) r = lower n words of "this * a", a.t <= n
1792 // "this" should be the larger one if appropriate.
1793 function bnpMultiplyLowerTo(a, n, r) {
1794 var i = Math.min(this.t + a.t, n)
1795 r.s = 0; // assumes a,this >= 0
1796 r.t = i
1797 while (i > 0) r[--i] = 0
1798 var j
1799 for (j = r.t - this.t; i < j; ++i) r[i + this.t] = this.am(0, a[i], r, i, 0, this.t)
1800 for (j = Math.min(a.t, n); i < j; ++i) this.am(0, a[i], r, i, 0, n - i)
1801 r.clamp()
1802 }
1803
1804 // (protected) r = "this * a" without lower n words, n > 0
1805 // "this" should be the larger one if appropriate.
1806 function bnpMultiplyUpperTo(a, n, r) {
1807 --n
1808 var i = r.t = this.t + a.t - n
1809 r.s = 0; // assumes a,this >= 0
1810 while (--i >= 0) r[i] = 0
1811 for (i = Math.max(n - this.t, 0); i < a.t; ++i)
1812 r[this.t + i - n] = this.am(n - i, a[i], r, 0, 0, this.t + i - n)
1813 r.clamp()
1814 r.drShiftTo(1, r)
1815 }
1816
1817 // Barrett modular reduction
1818 function Barrett(m) {
1819 // setup Barrett
1820 this.r2 = new BigInteger()
1821 this.q3 = new BigInteger()
1822 BigInteger.ONE.dlShiftTo(2 * m.t, this.r2)
1823 this.mu = this.r2.divide(m)
1824 this.m = m
1825 }
1826
1827 function barrettConvert(x) {
1828 if (x.s < 0 || x.t > 2 * this.m.t) return x.mod(this.m)
1829 else if (x.compareTo(this.m) < 0) return x
1830 else {
1831 var r = new BigInteger()
1832 x.copyTo(r)
1833 this.reduce(r)
1834 return r
1835 }
1836 }
1837
1838 function barrettRevert(x) {
1839 return x
1840 }
1841
1842 // x = x mod m (HAC 14.42)
1843 function barrettReduce(x) {
1844 var self = this
1845 x.drShiftTo(self.m.t - 1, self.r2)
1846 if (x.t > self.m.t + 1) {
1847 x.t = self.m.t + 1
1848 x.clamp()
1849 }
1850 self.mu.multiplyUpperTo(self.r2, self.m.t + 1, self.q3)
1851 self.m.multiplyLowerTo(self.q3, self.m.t + 1, self.r2)
1852 while (x.compareTo(self.r2) < 0) x.dAddOffset(1, self.m.t + 1)
1853 x.subTo(self.r2, x)
1854 while (x.compareTo(self.m) >= 0) x.subTo(self.m, x)
1855 }
1856
1857 // r = x^2 mod m; x != r
1858 function barrettSqrTo(x, r) {
1859 x.squareTo(r)
1860 this.reduce(r)
1861 }
1862
1863 // r = x*y mod m; x,y != r
1864 function barrettMulTo(x, y, r) {
1865 x.multiplyTo(y, r)
1866 this.reduce(r)
1867 }
1868
1869 Barrett.prototype.convert = barrettConvert
1870 Barrett.prototype.revert = barrettRevert
1871 Barrett.prototype.reduce = barrettReduce
1872 Barrett.prototype.mulTo = barrettMulTo
1873 Barrett.prototype.sqrTo = barrettSqrTo
1874
1875 // (public) this^e % m (HAC 14.85)
1876 function bnModPow(e, m) {
1877 var i = e.bitLength(),
1878 k, r = nbv(1),
1879 z
1880 if (i <= 0) return r
1881 else if (i < 18) k = 1
1882 else if (i < 48) k = 3
1883 else if (i < 144) k = 4
1884 else if (i < 768) k = 5
1885 else k = 6
1886 if (i < 8)
1887 z = new Classic(m)
1888 else if (m.isEven())
1889 z = new Barrett(m)
1890 else
1891 z = new Montgomery(m)
1892
1893 // precomputation
1894 var g = new Array(),
1895 n = 3,
1896 k1 = k - 1,
1897 km = (1 << k) - 1
1898 g[1] = z.convert(this)
1899 if (k > 1) {
1900 var g2 = new BigInteger()
1901 z.sqrTo(g[1], g2)
1902 while (n <= km) {
1903 g[n] = new BigInteger()
1904 z.mulTo(g2, g[n - 2], g[n])
1905 n += 2
1906 }
1907 }
1908
1909 var j = e.t - 1,
1910 w, is1 = true,
1911 r2 = new BigInteger(),
1912 t
1913 i = nbits(e[j]) - 1
1914 while (j >= 0) {
1915 if (i >= k1) w = (e[j] >> (i - k1)) & km
1916 else {
1917 w = (e[j] & ((1 << (i + 1)) - 1)) << (k1 - i)
1918 if (j > 0) w |= e[j - 1] >> (this.DB + i - k1)
1919 }
1920
1921 n = k
1922 while ((w & 1) == 0) {
1923 w >>= 1
1924 --n
1925 }
1926 if ((i -= n) < 0) {
1927 i += this.DB
1928 --j
1929 }
1930 if (is1) { // ret == 1, don't bother squaring or multiplying it
1931 g[w].copyTo(r)
1932 is1 = false
1933 } else {
1934 while (n > 1) {
1935 z.sqrTo(r, r2)
1936 z.sqrTo(r2, r)
1937 n -= 2
1938 }
1939 if (n > 0) z.sqrTo(r, r2)
1940 else {
1941 t = r
1942 r = r2
1943 r2 = t
1944 }
1945 z.mulTo(r2, g[w], r)
1946 }
1947
1948 while (j >= 0 && (e[j] & (1 << i)) == 0) {
1949 z.sqrTo(r, r2)
1950 t = r
1951 r = r2
1952 r2 = t
1953 if (--i < 0) {
1954 i = this.DB - 1
1955 --j
1956 }
1957 }
1958 }
1959 return z.revert(r)
1960 }
1961
1962 // (public) gcd(this,a) (HAC 14.54)
1963 function bnGCD(a) {
1964 var x = (this.s < 0) ? this.negate() : this.clone()
1965 var y = (a.s < 0) ? a.negate() : a.clone()
1966 if (x.compareTo(y) < 0) {
1967 var t = x
1968 x = y
1969 y = t
1970 }
1971 var i = x.getLowestSetBit(),
1972 g = y.getLowestSetBit()
1973 if (g < 0) return x
1974 if (i < g) g = i
1975 if (g > 0) {
1976 x.rShiftTo(g, x)
1977 y.rShiftTo(g, y)
1978 }
1979 while (x.signum() > 0) {
1980 if ((i = x.getLowestSetBit()) > 0) x.rShiftTo(i, x)
1981 if ((i = y.getLowestSetBit()) > 0) y.rShiftTo(i, y)
1982 if (x.compareTo(y) >= 0) {
1983 x.subTo(y, x)
1984 x.rShiftTo(1, x)
1985 } else {
1986 y.subTo(x, y)
1987 y.rShiftTo(1, y)
1988 }
1989 }
1990 if (g > 0) y.lShiftTo(g, y)
1991 return y
1992 }
1993
1994 // (protected) this % n, n < 2^26
1995 function bnpModInt(n) {
1996 if (n <= 0) return 0
1997 var d = this.DV % n,
1998 r = (this.s < 0) ? n - 1 : 0
1999 if (this.t > 0)
2000 if (d == 0) r = this[0] % n
2001 else
2002 for (var i = this.t - 1; i >= 0; --i) r = (d * r + this[i]) % n
2003 return r
2004 }
2005
2006 // (public) 1/this % m (HAC 14.61)
2007 function bnModInverse(m) {
2008 var ac = m.isEven()
2009 if ((this.isEven() && ac) || m.signum() == 0) return BigInteger.ZERO
2010 var u = m.clone(),
2011 v = this.clone()
2012 var a = nbv(1),
2013 b = nbv(0),
2014 c = nbv(0),
2015 d = nbv(1)
2016 while (u.signum() != 0) {
2017 while (u.isEven()) {
2018 u.rShiftTo(1, u)
2019 if (ac) {
2020 if (!a.isEven() || !b.isEven()) {
2021 a.addTo(this, a)
2022 b.subTo(m, b)
2023 }
2024 a.rShiftTo(1, a)
2025 } else if (!b.isEven()) b.subTo(m, b)
2026 b.rShiftTo(1, b)
2027 }
2028 while (v.isEven()) {
2029 v.rShiftTo(1, v)
2030 if (ac) {
2031 if (!c.isEven() || !d.isEven()) {
2032 c.addTo(this, c)
2033 d.subTo(m, d)
2034 }
2035 c.rShiftTo(1, c)
2036 } else if (!d.isEven()) d.subTo(m, d)
2037 d.rShiftTo(1, d)
2038 }
2039 if (u.compareTo(v) >= 0) {
2040 u.subTo(v, u)
2041 if (ac) a.subTo(c, a)
2042 b.subTo(d, b)
2043 } else {
2044 v.subTo(u, v)
2045 if (ac) c.subTo(a, c)
2046 d.subTo(b, d)
2047 }
2048 }
2049 if (v.compareTo(BigInteger.ONE) != 0) return BigInteger.ZERO
2050 if (d.compareTo(m) >= 0) return d.subtract(m)
2051 if (d.signum() < 0) d.addTo(m, d)
2052 else return d
2053 if (d.signum() < 0) return d.add(m)
2054 else return d
2055 }
2056
2057 var lowprimes = [
2058 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71,
2059 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151,
2060 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233,
2061 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317,
2062 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419,
2063 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503,
2064 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607,
2065 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701,
2066 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811,
2067 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911,
2068 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997
2069 ]
2070
2071 var lplim = (1 << 26) / lowprimes[lowprimes.length - 1]
2072
2073 // (public) test primality with certainty >= 1-.5^t
2074 function bnIsProbablePrime(t) {
2075 var i, x = this.abs()
2076 if (x.t == 1 && x[0] <= lowprimes[lowprimes.length - 1]) {
2077 for (i = 0; i < lowprimes.length; ++i)
2078 if (x[0] == lowprimes[i]) return true
2079 return false
2080 }
2081 if (x.isEven()) return false
2082 i = 1
2083 while (i < lowprimes.length) {
2084 var m = lowprimes[i],
2085 j = i + 1
2086 while (j < lowprimes.length && m < lplim) m *= lowprimes[j++]
2087 m = x.modInt(m)
2088 while (i < j) if (m % lowprimes[i++] == 0) return false
2089 }
2090 return x.millerRabin(t)
2091 }
2092
2093 // (protected) true if probably prime (HAC 4.24, Miller-Rabin)
2094 function bnpMillerRabin(t) {
2095 var n1 = this.subtract(BigInteger.ONE)
2096 var k = n1.getLowestSetBit()
2097 if (k <= 0) return false
2098 var r = n1.shiftRight(k)
2099 t = (t + 1) >> 1
2100 if (t > lowprimes.length) t = lowprimes.length
2101 var a = new BigInteger(null)
2102 var j, bases = []
2103 for (var i = 0; i < t; ++i) {
2104 for (;;) {
2105 j = lowprimes[Math.floor(Math.random() * lowprimes.length)]
2106 if (bases.indexOf(j) == -1) break
2107 }
2108 bases.push(j)
2109 a.fromInt(j)
2110 var y = a.modPow(r, this)
2111 if (y.compareTo(BigInteger.ONE) != 0 && y.compareTo(n1) != 0) {
2112 var j = 1
2113 while (j++ < k && y.compareTo(n1) != 0) {
2114 y = y.modPowInt(2, this)
2115 if (y.compareTo(BigInteger.ONE) == 0) return false
2116 }
2117 if (y.compareTo(n1) != 0) return false
2118 }
2119 }
2120 return true
2121 }
2122
2123 // protected
2124 proto.chunkSize = bnpChunkSize
2125 proto.toRadix = bnpToRadix
2126 proto.fromRadix = bnpFromRadix
2127 proto.fromNumber = bnpFromNumber
2128 proto.bitwiseTo = bnpBitwiseTo
2129 proto.changeBit = bnpChangeBit
2130 proto.addTo = bnpAddTo
2131 proto.dMultiply = bnpDMultiply
2132 proto.dAddOffset = bnpDAddOffset
2133 proto.multiplyLowerTo = bnpMultiplyLowerTo
2134 proto.multiplyUpperTo = bnpMultiplyUpperTo
2135 proto.modInt = bnpModInt
2136 proto.millerRabin = bnpMillerRabin
2137
2138 // public
2139 proto.clone = bnClone
2140 proto.intValue = bnIntValue
2141 proto.byteValue = bnByteValue
2142 proto.shortValue = bnShortValue
2143 proto.signum = bnSigNum
2144 proto.toByteArray = bnToByteArray
2145 proto.equals = bnEquals
2146 proto.min = bnMin
2147 proto.max = bnMax
2148 proto.and = bnAnd
2149 proto.or = bnOr
2150 proto.xor = bnXor
2151 proto.andNot = bnAndNot
2152 proto.not = bnNot
2153 proto.shiftLeft = bnShiftLeft
2154 proto.shiftRight = bnShiftRight
2155 proto.getLowestSetBit = bnGetLowestSetBit
2156 proto.bitCount = bnBitCount
2157 proto.testBit = bnTestBit
2158 proto.setBit = bnSetBit
2159 proto.clearBit = bnClearBit
2160 proto.flipBit = bnFlipBit
2161 proto.add = bnAdd
2162 proto.subtract = bnSubtract
2163 proto.multiply = bnMultiply
2164 proto.divide = bnDivide
2165 proto.remainder = bnRemainder
2166 proto.divideAndRemainder = bnDivideAndRemainder
2167 proto.modPow = bnModPow
2168 proto.modInverse = bnModInverse
2169 proto.pow = bnPow
2170 proto.gcd = bnGCD
2171 proto.isProbablePrime = bnIsProbablePrime
2172
2173 // JSBN-specific extension
2174 proto.square = bnSquare
2175
2176 // constants
2177 BigInteger.ZERO = nbv(0)
2178 BigInteger.ONE = nbv(1)
2179 BigInteger.valueOf = nbv
2180
2181 module.exports = BigInteger
2182
2183 },{"../package.json":4}],2:[function(require,module,exports){
2184 (function (Buffer){
2185 // FIXME: Kind of a weird way to throw exceptions, consider removing
2186 var assert = require('assert')
2187 var BigInteger = require('./bigi')
2188
2189 /**
2190 * Turns a byte array into a big integer.
2191 *
2192 * This function will interpret a byte array as a big integer in big
2193 * endian notation.
2194 */
2195 BigInteger.fromByteArrayUnsigned = function(byteArray) {
2196 // BigInteger expects a DER integer conformant byte array
2197 if (byteArray[0] & 0x80) {
2198 return new BigInteger([0].concat(byteArray))
2199 }
2200
2201 return new BigInteger(byteArray)
2202 }
2203
2204 /**
2205 * Returns a byte array representation of the big integer.
2206 *
2207 * This returns the absolute of the contained value in big endian
2208 * form. A value of zero results in an empty array.
2209 */
2210 BigInteger.prototype.toByteArrayUnsigned = function() {
2211 var byteArray = this.toByteArray()
2212 return byteArray[0] === 0 ? byteArray.slice(1) : byteArray
2213 }
2214
2215 BigInteger.fromDERInteger = function(byteArray) {
2216 return new BigInteger(byteArray)
2217 }
2218
2219 /*
2220 * Converts BigInteger to a DER integer representation.
2221 *
2222 * The format for this value uses the most significant bit as a sign
2223 * bit. If the most significant bit is already set and the integer is
2224 * positive, a 0x00 is prepended.
2225 *
2226 * Examples:
2227 *
2228 * 0 => 0x00
2229 * 1 => 0x01
2230 * -1 => 0xff
2231 * 127 => 0x7f
2232 * -127 => 0x81
2233 * 128 => 0x0080
2234 * -128 => 0x80
2235 * 255 => 0x00ff
2236 * -255 => 0xff01
2237 * 16300 => 0x3fac
2238 * -16300 => 0xc054
2239 * 62300 => 0x00f35c
2240 * -62300 => 0xff0ca4
2241 */
2242 BigInteger.prototype.toDERInteger = BigInteger.prototype.toByteArray
2243
2244 BigInteger.fromBuffer = function(buffer) {
2245 // BigInteger expects a DER integer conformant byte array
2246 if (buffer[0] & 0x80) {
2247 var byteArray = Array.prototype.slice.call(buffer)
2248
2249 return new BigInteger([0].concat(byteArray))
2250 }
2251
2252 return new BigInteger(buffer)
2253 }
2254
2255 BigInteger.fromHex = function(hex) {
2256 if (hex === '') return BigInteger.ZERO
2257
2258 assert.equal(hex, hex.match(/^[A-Fa-f0-9]+/), 'Invalid hex string')
2259 assert.equal(hex.length % 2, 0, 'Incomplete hex')
2260 return new BigInteger(hex, 16)
2261 }
2262
2263 BigInteger.prototype.toBuffer = function(size) {
2264 var byteArray = this.toByteArrayUnsigned()
2265 var zeros = []
2266
2267 var padding = size - byteArray.length
2268 while (zeros.length < padding) zeros.push(0)
2269
2270 return new Buffer(zeros.concat(byteArray))
2271 }
2272
2273 BigInteger.prototype.toHex = function(size) {
2274 return this.toBuffer(size).toString('hex')
2275 }
2276
2277 }).call(this,require("buffer").Buffer)
2278 },{"./bigi":1,"assert":5,"buffer":7}],3:[function(require,module,exports){
2279 var BigInteger = require('./bigi')
2280
2281 //addons
2282 require('./convert')
2283
2284 module.exports = BigInteger
2285 },{"./bigi":1,"./convert":2}],4:[function(require,module,exports){
2286 module.exports={
2287 "name": "bigi",
2288 "version": "1.4.0",
2289 "description": "Big integers.",
2290 "keywords": [
2291 "cryptography",
2292 "math",
2293 "bitcoin",
2294 "arbitrary",
2295 "precision",
2296 "arithmetic",
2297 "big",
2298 "integer",
2299 "int",
2300 "number",
2301 "biginteger",
2302 "bigint",
2303 "bignumber",
2304 "decimal",
2305 "float"
2306 ],
2307 "devDependencies": {
2308 "mocha": "^1.20.1",
2309 "jshint": "^2.5.1",
2310 "coveralls": "^2.10.0",
2311 "istanbul": "^0.2.11"
2312 },
2313 "repository": {
2314 "url": "https://github.com/cryptocoinjs/bigi",
2315 "type": "git"
2316 },
2317 "main": "./lib/index.js",
2318 "scripts": {
2319 "test": "_mocha -- test/*.js",
2320 "jshint": "jshint --config jshint.json lib/*.js ; true",
2321 "unit": "mocha",
2322 "coverage": "istanbul cover ./node_modules/.bin/_mocha -- --reporter list test/*.js",
2323 "coveralls": "npm run-script coverage && node ./node_modules/.bin/coveralls < coverage/lcov.info"
2324 },
2325 "dependencies": {},
2326 "testling": {
2327 "files": "test/*.js",
2328 "harness": "mocha",
2329 "browsers": [
2330 "ie/9..latest",
2331 "firefox/latest",
2332 "chrome/latest",
2333 "safari/6.0..latest",
2334 "iphone/6.0..latest",
2335 "android-browser/4.2..latest"
2336 ]
2337 },
2338 "bugs": {
2339 "url": "https://github.com/cryptocoinjs/bigi/issues"
2340 },
2341 "homepage": "https://github.com/cryptocoinjs/bigi",
2342 "_id": "bigi@1.4.0",
2343 "dist": {
2344 "shasum": "90ac1aeac0a531216463bdb58f42c1e05c8407ac",
2345 "tarball": "http://registry.npmjs.org/bigi/-/bigi-1.4.0.tgz"
2346 },
2347 "_from": "bigi@^1.4.0",
2348 "_npmVersion": "1.4.3",
2349 "_npmUser": {
2350 "name": "jp",
2351 "email": "jprichardson@gmail.com"
2352 },
2353 "maintainers": [
2354 {
2355 "name": "jp",
2356 "email": "jprichardson@gmail.com"
2357 },
2358 {
2359 "name": "midnightlightning",
2360 "email": "boydb@midnightdesign.ws"
2361 },
2362 {
2363 "name": "sidazhang",
2364 "email": "sidazhang89@gmail.com"
2365 },
2366 {
2367 "name": "nadav",
2368 "email": "npm@shesek.info"
2369 }
2370 ],
2371 "directories": {},
2372 "_shasum": "90ac1aeac0a531216463bdb58f42c1e05c8407ac",
2373 "_resolved": "https://registry.npmjs.org/bigi/-/bigi-1.4.0.tgz"
2374 }
2375
2376 },{}],5:[function(require,module,exports){
2377 // http://wiki.commonjs.org/wiki/Unit_Testing/1.0
2378 //
2379 // THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!
2380 //
2381 // Originally from narwhal.js (http://narwhaljs.org)
2382 // Copyright (c) 2009 Thomas Robinson <280north.com>
2383 //
2384 // Permission is hereby granted, free of charge, to any person obtaining a copy
2385 // of this software and associated documentation files (the 'Software'), to
2386 // deal in the Software without restriction, including without limitation the
2387 // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
2388 // sell copies of the Software, and to permit persons to whom the Software is
2389 // furnished to do so, subject to the following conditions:
2390 //
2391 // The above copyright notice and this permission notice shall be included in
2392 // all copies or substantial portions of the Software.
2393 //
2394 // THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
2395 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
2396 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
2397 // AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
2398 // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
2399 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
2400
2401 // when used in node, this will actually load the util module we depend on
2402 // versus loading the builtin util module as happens otherwise
2403 // this is a bug in node module loading as far as I am concerned
2404 var util = require('util/');
2405
2406 var pSlice = Array.prototype.slice;
2407 var hasOwn = Object.prototype.hasOwnProperty;
2408
2409 // 1. The assert module provides functions that throw
2410 // AssertionError's when particular conditions are not met. The
2411 // assert module must conform to the following interface.
2412
2413 var assert = module.exports = ok;
2414
2415 // 2. The AssertionError is defined in assert.
2416 // new assert.AssertionError({ message: message,
2417 // actual: actual,
2418 // expected: expected })
2419
2420 assert.AssertionError = function AssertionError(options) {
2421 this.name = 'AssertionError';
2422 this.actual = options.actual;
2423 this.expected = options.expected;
2424 this.operator = options.operator;
2425 if (options.message) {
2426 this.message = options.message;
2427 this.generatedMessage = false;
2428 } else {
2429 this.message = getMessage(this);
2430 this.generatedMessage = true;
2431 }
2432 var stackStartFunction = options.stackStartFunction || fail;
2433
2434 if (Error.captureStackTrace) {
2435 Error.captureStackTrace(this, stackStartFunction);
2436 }
2437 else {
2438 // non v8 browsers so we can have a stacktrace
2439 var err = new Error();
2440 if (err.stack) {
2441 var out = err.stack;
2442
2443 // try to strip useless frames
2444 var fn_name = stackStartFunction.name;
2445 var idx = out.indexOf('\n' + fn_name);
2446 if (idx >= 0) {
2447 // once we have located the function frame
2448 // we need to strip out everything before it (and its line)
2449 var next_line = out.indexOf('\n', idx + 1);
2450 out = out.substring(next_line + 1);
2451 }
2452
2453 this.stack = out;
2454 }
2455 }
2456 };
2457
2458 // assert.AssertionError instanceof Error
2459 util.inherits(assert.AssertionError, Error);
2460
2461 function replacer(key, value) {
2462 if (util.isUndefined(value)) {
2463 return '' + value;
2464 }
2465 if (util.isNumber(value) && !isFinite(value)) {
2466 return value.toString();
2467 }
2468 if (util.isFunction(value) || util.isRegExp(value)) {
2469 return value.toString();
2470 }
2471 return value;
2472 }
2473
2474 function truncate(s, n) {
2475 if (util.isString(s)) {
2476 return s.length < n ? s : s.slice(0, n);
2477 } else {
2478 return s;
2479 }
2480 }
2481
2482 function getMessage(self) {
2483 return truncate(JSON.stringify(self.actual, replacer), 128) + ' ' +
2484 self.operator + ' ' +
2485 truncate(JSON.stringify(self.expected, replacer), 128);
2486 }
2487
2488 // At present only the three keys mentioned above are used and
2489 // understood by the spec. Implementations or sub modules can pass
2490 // other keys to the AssertionError's constructor - they will be
2491 // ignored.
2492
2493 // 3. All of the following functions must throw an AssertionError
2494 // when a corresponding condition is not met, with a message that
2495 // may be undefined if not provided. All assertion methods provide
2496 // both the actual and expected values to the assertion error for
2497 // display purposes.
2498
2499 function fail(actual, expected, message, operator, stackStartFunction) {
2500 throw new assert.AssertionError({
2501 message: message,
2502 actual: actual,
2503 expected: expected,
2504 operator: operator,
2505 stackStartFunction: stackStartFunction
2506 });
2507 }
2508
2509 // EXTENSION! allows for well behaved errors defined elsewhere.
2510 assert.fail = fail;
2511
2512 // 4. Pure assertion tests whether a value is truthy, as determined
2513 // by !!guard.
2514 // assert.ok(guard, message_opt);
2515 // This statement is equivalent to assert.equal(true, !!guard,
2516 // message_opt);. To test strictly for the value true, use
2517 // assert.strictEqual(true, guard, message_opt);.
2518
2519 function ok(value, message) {
2520 if (!value) fail(value, true, message, '==', assert.ok);
2521 }
2522 assert.ok = ok;
2523
2524 // 5. The equality assertion tests shallow, coercive equality with
2525 // ==.
2526 // assert.equal(actual, expected, message_opt);
2527
2528 assert.equal = function equal(actual, expected, message) {
2529 if (actual != expected) fail(actual, expected, message, '==', assert.equal);
2530 };
2531
2532 // 6. The non-equality assertion tests for whether two objects are not equal
2533 // with != assert.notEqual(actual, expected, message_opt);
2534
2535 assert.notEqual = function notEqual(actual, expected, message) {
2536 if (actual == expected) {
2537 fail(actual, expected, message, '!=', assert.notEqual);
2538 }
2539 };
2540
2541 // 7. The equivalence assertion tests a deep equality relation.
2542 // assert.deepEqual(actual, expected, message_opt);
2543
2544 assert.deepEqual = function deepEqual(actual, expected, message) {
2545 if (!_deepEqual(actual, expected)) {
2546 fail(actual, expected, message, 'deepEqual', assert.deepEqual);
2547 }
2548 };
2549
2550 function _deepEqual(actual, expected) {
2551 // 7.1. All identical values are equivalent, as determined by ===.
2552 if (actual === expected) {
2553 return true;
2554
2555 } else if (util.isBuffer(actual) && util.isBuffer(expected)) {
2556 if (actual.length != expected.length) return false;
2557
2558 for (var i = 0; i < actual.length; i++) {
2559 if (actual[i] !== expected[i]) return false;
2560 }
2561
2562 return true;
2563
2564 // 7.2. If the expected value is a Date object, the actual value is
2565 // equivalent if it is also a Date object that refers to the same time.
2566 } else if (util.isDate(actual) && util.isDate(expected)) {
2567 return actual.getTime() === expected.getTime();
2568
2569 // 7.3 If the expected value is a RegExp object, the actual value is
2570 // equivalent if it is also a RegExp object with the same source and
2571 // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).
2572 } else if (util.isRegExp(actual) && util.isRegExp(expected)) {
2573 return actual.source === expected.source &&
2574 actual.global === expected.global &&
2575 actual.multiline === expected.multiline &&
2576 actual.lastIndex === expected.lastIndex &&
2577 actual.ignoreCase === expected.ignoreCase;
2578
2579 // 7.4. Other pairs that do not both pass typeof value == 'object',
2580 // equivalence is determined by ==.
2581 } else if (!util.isObject(actual) && !util.isObject(expected)) {
2582 return actual == expected;
2583
2584 // 7.5 For all other Object pairs, including Array objects, equivalence is
2585 // determined by having the same number of owned properties (as verified
2586 // with Object.prototype.hasOwnProperty.call), the same set of keys
2587 // (although not necessarily the same order), equivalent values for every
2588 // corresponding key, and an identical 'prototype' property. Note: this
2589 // accounts for both named and indexed properties on Arrays.
2590 } else {
2591 return objEquiv(actual, expected);
2592 }
2593 }
2594
2595 function isArguments(object) {
2596 return Object.prototype.toString.call(object) == '[object Arguments]';
2597 }
2598
2599 function objEquiv(a, b) {
2600 if (util.isNullOrUndefined(a) || util.isNullOrUndefined(b))
2601 return false;
2602 // an identical 'prototype' property.
2603 if (a.prototype !== b.prototype) return false;
2604 // if one is a primitive, the other must be same
2605 if (util.isPrimitive(a) || util.isPrimitive(b)) {
2606 return a === b;
2607 }
2608 var aIsArgs = isArguments(a),
2609 bIsArgs = isArguments(b);
2610 if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))
2611 return false;
2612 if (aIsArgs) {
2613 a = pSlice.call(a);
2614 b = pSlice.call(b);
2615 return _deepEqual(a, b);
2616 }
2617 var ka = objectKeys(a),
2618 kb = objectKeys(b),
2619 key, i;
2620 // having the same number of owned properties (keys incorporates
2621 // hasOwnProperty)
2622 if (ka.length != kb.length)
2623 return false;
2624 //the same set of keys (although not necessarily the same order),
2625 ka.sort();
2626 kb.sort();
2627 //~~~cheap key test
2628 for (i = ka.length - 1; i >= 0; i--) {
2629 if (ka[i] != kb[i])
2630 return false;
2631 }
2632 //equivalent values for every corresponding key, and
2633 //~~~possibly expensive deep test
2634 for (i = ka.length - 1; i >= 0; i--) {
2635 key = ka[i];
2636 if (!_deepEqual(a[key], b[key])) return false;
2637 }
2638 return true;
2639 }
2640
2641 // 8. The non-equivalence assertion tests for any deep inequality.
2642 // assert.notDeepEqual(actual, expected, message_opt);
2643
2644 assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
2645 if (_deepEqual(actual, expected)) {
2646 fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
2647 }
2648 };
2649
2650 // 9. The strict equality assertion tests strict equality, as determined by ===.
2651 // assert.strictEqual(actual, expected, message_opt);
2652
2653 assert.strictEqual = function strictEqual(actual, expected, message) {
2654 if (actual !== expected) {
2655 fail(actual, expected, message, '===', assert.strictEqual);
2656 }
2657 };
2658
2659 // 10. The strict non-equality assertion tests for strict inequality, as
2660 // determined by !==. assert.notStrictEqual(actual, expected, message_opt);
2661
2662 assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
2663 if (actual === expected) {
2664 fail(actual, expected, message, '!==', assert.notStrictEqual);
2665 }
2666 };
2667
2668 function expectedException(actual, expected) {
2669 if (!actual || !expected) {
2670 return false;
2671 }
2672
2673 if (Object.prototype.toString.call(expected) == '[object RegExp]') {
2674 return expected.test(actual);
2675 } else if (actual instanceof expected) {
2676 return true;
2677 } else if (expected.call({}, actual) === true) {
2678 return true;
2679 }
2680
2681 return false;
2682 }
2683
2684 function _throws(shouldThrow, block, expected, message) {
2685 var actual;
2686
2687 if (util.isString(expected)) {
2688 message = expected;
2689 expected = null;
2690 }
2691
2692 try {
2693 block();
2694 } catch (e) {
2695 actual = e;
2696 }
2697
2698 message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
2699 (message ? ' ' + message : '.');
2700
2701 if (shouldThrow && !actual) {
2702 fail(actual, expected, 'Missing expected exception' + message);
2703 }
2704
2705 if (!shouldThrow && expectedException(actual, expected)) {
2706 fail(actual, expected, 'Got unwanted exception' + message);
2707 }
2708
2709 if ((shouldThrow && actual && expected &&
2710 !expectedException(actual, expected)) || (!shouldThrow && actual)) {
2711 throw actual;
2712 }
2713 }
2714
2715 // 11. Expected to throw an error:
2716 // assert.throws(block, Error_opt, message_opt);
2717
2718 assert.throws = function(block, /*optional*/error, /*optional*/message) {
2719 _throws.apply(this, [true].concat(pSlice.call(arguments)));
2720 };
2721
2722 // EXTENSION! This is annoying to write outside this module.
2723 assert.doesNotThrow = function(block, /*optional*/message) {
2724 _throws.apply(this, [false].concat(pSlice.call(arguments)));
2725 };
2726
2727 assert.ifError = function(err) { if (err) {throw err;}};
2728
2729 var objectKeys = Object.keys || function (obj) {
2730 var keys = [];
2731 for (var key in obj) {
2732 if (hasOwn.call(obj, key)) keys.push(key);
2733 }
2734 return keys;
2735 };
2736
2737 },{"util/":29}],6:[function(require,module,exports){
2738
2739 },{}],7:[function(require,module,exports){
2740 /*!
2741 * The buffer module from node.js, for the browser.
2742 *
2743 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
2744 * @license MIT
2745 */
2746
2747 var base64 = require('base64-js')
2748 var ieee754 = require('ieee754')
2749 var isArray = require('is-array')
2750
2751 exports.Buffer = Buffer
2752 exports.SlowBuffer = SlowBuffer
2753 exports.INSPECT_MAX_BYTES = 50
2754 Buffer.poolSize = 8192 // not used by this implementation
2755
2756 var rootParent = {}
2757
2758 /**
2759 * If `Buffer.TYPED_ARRAY_SUPPORT`:
2760 * === true Use Uint8Array implementation (fastest)
2761 * === false Use Object implementation (most compatible, even IE6)
2762 *
2763 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
2764 * Opera 11.6+, iOS 4.2+.
2765 *
2766 * Due to various browser bugs, sometimes the Object implementation will be used even
2767 * when the browser supports typed arrays.
2768 *
2769 * Note:
2770 *
2771 * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,
2772 * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.
2773 *
2774 * - Safari 5-7 lacks support for changing the `Object.prototype.constructor` property
2775 * on objects.
2776 *
2777 * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.
2778 *
2779 * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of
2780 * incorrect length in some situations.
2781
2782 * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they
2783 * get the Object implementation, which is slower but behaves correctly.
2784 */
2785 Buffer.TYPED_ARRAY_SUPPORT = (function () {
2786 function Bar () {}
2787 try {
2788 var arr = new Uint8Array(1)
2789 arr.foo = function () { return 42 }
2790 arr.constructor = Bar
2791 return arr.foo() === 42 && // typed array instances can be augmented
2792 arr.constructor === Bar && // constructor can be set
2793 typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`
2794 arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`
2795 } catch (e) {
2796 return false
2797 }
2798 })()
2799
2800 function kMaxLength () {
2801 return Buffer.TYPED_ARRAY_SUPPORT
2802 ? 0x7fffffff
2803 : 0x3fffffff
2804 }
2805
2806 /**
2807 * Class: Buffer
2808 * =============
2809 *
2810 * The Buffer constructor returns instances of `Uint8Array` that are augmented
2811 * with function properties for all the node `Buffer` API functions. We use
2812 * `Uint8Array` so that square bracket notation works as expected -- it returns
2813 * a single octet.
2814 *
2815 * By augmenting the instances, we can avoid modifying the `Uint8Array`
2816 * prototype.
2817 */
2818 function Buffer (arg) {
2819 if (!(this instanceof Buffer)) {
2820 // Avoid going through an ArgumentsAdaptorTrampoline in the common case.
2821 if (arguments.length > 1) return new Buffer(arg, arguments[1])
2822 return new Buffer(arg)
2823 }
2824
2825 this.length = 0
2826 this.parent = undefined
2827
2828 // Common case.
2829 if (typeof arg === 'number') {
2830 return fromNumber(this, arg)
2831 }
2832
2833 // Slightly less common case.
2834 if (typeof arg === 'string') {
2835 return fromString(this, arg, arguments.length > 1 ? arguments[1] : 'utf8')
2836 }
2837
2838 // Unusual.
2839 return fromObject(this, arg)
2840 }
2841
2842 function fromNumber (that, length) {
2843 that = allocate(that, length < 0 ? 0 : checked(length) | 0)
2844 if (!Buffer.TYPED_ARRAY_SUPPORT) {
2845 for (var i = 0; i < length; i++) {
2846 that[i] = 0
2847 }
2848 }
2849 return that
2850 }
2851
2852 function fromString (that, string, encoding) {
2853 if (typeof encoding !== 'string' || encoding === '') encoding = 'utf8'
2854
2855 // Assumption: byteLength() return value is always < kMaxLength.
2856 var length = byteLength(string, encoding) | 0
2857 that = allocate(that, length)
2858
2859 that.write(string, encoding)
2860 return that
2861 }
2862
2863 function fromObject (that, object) {
2864 if (Buffer.isBuffer(object)) return fromBuffer(that, object)
2865
2866 if (isArray(object)) return fromArray(that, object)
2867
2868 if (object == null) {
2869 throw new TypeError('must start with number, buffer, array or string')
2870 }
2871
2872 if (typeof ArrayBuffer !== 'undefined') {
2873 if (object.buffer instanceof ArrayBuffer) {
2874 return fromTypedArray(that, object)
2875 }
2876 if (object instanceof ArrayBuffer) {
2877 return fromArrayBuffer(that, object)
2878 }
2879 }
2880
2881 if (object.length) return fromArrayLike(that, object)
2882
2883 return fromJsonObject(that, object)
2884 }
2885
2886 function fromBuffer (that, buffer) {
2887 var length = checked(buffer.length) | 0
2888 that = allocate(that, length)
2889 buffer.copy(that, 0, 0, length)
2890 return that
2891 }
2892
2893 function fromArray (that, array) {
2894 var length = checked(array.length) | 0
2895 that = allocate(that, length)
2896 for (var i = 0; i < length; i += 1) {
2897 that[i] = array[i] & 255
2898 }
2899 return that
2900 }
2901
2902 // Duplicate of fromArray() to keep fromArray() monomorphic.
2903 function fromTypedArray (that, array) {
2904 var length = checked(array.length) | 0
2905 that = allocate(that, length)
2906 // Truncating the elements is probably not what people expect from typed
2907 // arrays with BYTES_PER_ELEMENT > 1 but it's compatible with the behavior
2908 // of the old Buffer constructor.
2909 for (var i = 0; i < length; i += 1) {
2910 that[i] = array[i] & 255
2911 }
2912 return that
2913 }
2914
2915 function fromArrayBuffer (that, array) {
2916 if (Buffer.TYPED_ARRAY_SUPPORT) {
2917 // Return an augmented `Uint8Array` instance, for best performance
2918 array.byteLength
2919 that = Buffer._augment(new Uint8Array(array))
2920 } else {
2921 // Fallback: Return an object instance of the Buffer class
2922 that = fromTypedArray(that, new Uint8Array(array))
2923 }
2924 return that
2925 }
2926
2927 function fromArrayLike (that, array) {
2928 var length = checked(array.length) | 0
2929 that = allocate(that, length)
2930 for (var i = 0; i < length; i += 1) {
2931 that[i] = array[i] & 255
2932 }
2933 return that
2934 }
2935
2936 // Deserialize { type: 'Buffer', data: [1,2,3,...] } into a Buffer object.
2937 // Returns a zero-length buffer for inputs that don't conform to the spec.
2938 function fromJsonObject (that, object) {
2939 var array
2940 var length = 0
2941
2942 if (object.type === 'Buffer' && isArray(object.data)) {
2943 array = object.data
2944 length = checked(array.length) | 0
2945 }
2946 that = allocate(that, length)
2947
2948 for (var i = 0; i < length; i += 1) {
2949 that[i] = array[i] & 255
2950 }
2951 return that
2952 }
2953
2954 function allocate (that, length) {
2955 if (Buffer.TYPED_ARRAY_SUPPORT) {
2956 // Return an augmented `Uint8Array` instance, for best performance
2957 that = Buffer._augment(new Uint8Array(length))
2958 } else {
2959 // Fallback: Return an object instance of the Buffer class
2960 that.length = length
2961 that._isBuffer = true
2962 }
2963
2964 var fromPool = length !== 0 && length <= Buffer.poolSize >>> 1
2965 if (fromPool) that.parent = rootParent
2966
2967 return that
2968 }
2969
2970 function checked (length) {
2971 // Note: cannot use `length < kMaxLength` here because that fails when
2972 // length is NaN (which is otherwise coerced to zero.)
2973 if (length >= kMaxLength()) {
2974 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
2975 'size: 0x' + kMaxLength().toString(16) + ' bytes')
2976 }
2977 return length | 0
2978 }
2979
2980 function SlowBuffer (subject, encoding) {
2981 if (!(this instanceof SlowBuffer)) return new SlowBuffer(subject, encoding)
2982
2983 var buf = new Buffer(subject, encoding)
2984 delete buf.parent
2985 return buf
2986 }
2987
2988 Buffer.isBuffer = function isBuffer (b) {
2989 return !!(b != null && b._isBuffer)
2990 }
2991
2992 Buffer.compare = function compare (a, b) {
2993 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
2994 throw new TypeError('Arguments must be Buffers')
2995 }
2996
2997 if (a === b) return 0
2998
2999 var x = a.length
3000 var y = b.length
3001
3002 var i = 0
3003 var len = Math.min(x, y)
3004 while (i < len) {
3005 if (a[i] !== b[i]) break
3006
3007 ++i
3008 }
3009
3010 if (i !== len) {
3011 x = a[i]
3012 y = b[i]
3013 }
3014
3015 if (x < y) return -1
3016 if (y < x) return 1
3017 return 0
3018 }
3019
3020 Buffer.isEncoding = function isEncoding (encoding) {
3021 switch (String(encoding).toLowerCase()) {
3022 case 'hex':
3023 case 'utf8':
3024 case 'utf-8':
3025 case 'ascii':
3026 case 'binary':
3027 case 'base64':
3028 case 'raw':
3029 case 'ucs2':
3030 case 'ucs-2':
3031 case 'utf16le':
3032 case 'utf-16le':
3033 return true
3034 default:
3035 return false
3036 }
3037 }
3038
3039 Buffer.concat = function concat (list, length) {
3040 if (!isArray(list)) throw new TypeError('list argument must be an Array of Buffers.')
3041
3042 if (list.length === 0) {
3043 return new Buffer(0)
3044 }
3045
3046 var i
3047 if (length === undefined) {
3048 length = 0
3049 for (i = 0; i < list.length; i++) {
3050 length += list[i].length
3051 }
3052 }
3053
3054 var buf = new Buffer(length)
3055 var pos = 0
3056 for (i = 0; i < list.length; i++) {
3057 var item = list[i]
3058 item.copy(buf, pos)
3059 pos += item.length
3060 }
3061 return buf
3062 }
3063
3064 function byteLength (string, encoding) {
3065 if (typeof string !== 'string') string = '' + string
3066
3067 var len = string.length
3068 if (len === 0) return 0
3069
3070 // Use a for loop to avoid recursion
3071 var loweredCase = false
3072 for (;;) {
3073 switch (encoding) {
3074 case 'ascii':
3075 case 'binary':
3076 // Deprecated
3077 case 'raw':
3078 case 'raws':
3079 return len
3080 case 'utf8':
3081 case 'utf-8':
3082 return utf8ToBytes(string).length
3083 case 'ucs2':
3084 case 'ucs-2':
3085 case 'utf16le':
3086 case 'utf-16le':
3087 return len * 2
3088 case 'hex':
3089 return len >>> 1
3090 case 'base64':
3091 return base64ToBytes(string).length
3092 default:
3093 if (loweredCase) return utf8ToBytes(string).length // assume utf8
3094 encoding = ('' + encoding).toLowerCase()
3095 loweredCase = true
3096 }
3097 }
3098 }
3099 Buffer.byteLength = byteLength
3100
3101 // pre-set for values that may exist in the future
3102 Buffer.prototype.length = undefined
3103 Buffer.prototype.parent = undefined
3104
3105 function slowToString (encoding, start, end) {
3106 var loweredCase = false
3107
3108 start = start | 0
3109 end = end === undefined || end === Infinity ? this.length : end | 0
3110
3111 if (!encoding) encoding = 'utf8'
3112 if (start < 0) start = 0
3113 if (end > this.length) end = this.length
3114 if (end <= start) return ''
3115
3116 while (true) {
3117 switch (encoding) {
3118 case 'hex':
3119 return hexSlice(this, start, end)
3120
3121 case 'utf8':
3122 case 'utf-8':
3123 return utf8Slice(this, start, end)
3124
3125 case 'ascii':
3126 return asciiSlice(this, start, end)
3127
3128 case 'binary':
3129 return binarySlice(this, start, end)
3130
3131 case 'base64':
3132 return base64Slice(this, start, end)
3133
3134 case 'ucs2':
3135 case 'ucs-2':
3136 case 'utf16le':
3137 case 'utf-16le':
3138 return utf16leSlice(this, start, end)
3139
3140 default:
3141 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
3142 encoding = (encoding + '').toLowerCase()
3143 loweredCase = true
3144 }
3145 }
3146 }
3147
3148 Buffer.prototype.toString = function toString () {
3149 var length = this.length | 0
3150 if (length === 0) return ''
3151 if (arguments.length === 0) return utf8Slice(this, 0, length)
3152 return slowToString.apply(this, arguments)
3153 }
3154
3155 Buffer.prototype.equals = function equals (b) {
3156 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
3157 if (this === b) return true
3158 return Buffer.compare(this, b) === 0
3159 }
3160
3161 Buffer.prototype.inspect = function inspect () {
3162 var str = ''
3163 var max = exports.INSPECT_MAX_BYTES
3164 if (this.length > 0) {
3165 str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
3166 if (this.length > max) str += ' ... '
3167 }
3168 return '<Buffer ' + str + '>'
3169 }
3170
3171 Buffer.prototype.compare = function compare (b) {
3172 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
3173 if (this === b) return 0
3174 return Buffer.compare(this, b)
3175 }
3176
3177 Buffer.prototype.indexOf = function indexOf (val, byteOffset) {
3178 if (byteOffset > 0x7fffffff) byteOffset = 0x7fffffff
3179 else if (byteOffset < -0x80000000) byteOffset = -0x80000000
3180 byteOffset >>= 0
3181
3182 if (this.length === 0) return -1
3183 if (byteOffset >= this.length) return -1
3184
3185 // Negative offsets start from the end of the buffer
3186 if (byteOffset < 0) byteOffset = Math.max(this.length + byteOffset, 0)
3187
3188 if (typeof val === 'string') {
3189 if (val.length === 0) return -1 // special case: looking for empty string always fails
3190 return String.prototype.indexOf.call(this, val, byteOffset)
3191 }
3192 if (Buffer.isBuffer(val)) {
3193 return arrayIndexOf(this, val, byteOffset)
3194 }
3195 if (typeof val === 'number') {
3196 if (Buffer.TYPED_ARRAY_SUPPORT && Uint8Array.prototype.indexOf === 'function') {
3197 return Uint8Array.prototype.indexOf.call(this, val, byteOffset)
3198 }
3199 return arrayIndexOf(this, [ val ], byteOffset)
3200 }
3201
3202 function arrayIndexOf (arr, val, byteOffset) {
3203 var foundIndex = -1
3204 for (var i = 0; byteOffset + i < arr.length; i++) {
3205 if (arr[byteOffset + i] === val[foundIndex === -1 ? 0 : i - foundIndex]) {
3206 if (foundIndex === -1) foundIndex = i
3207 if (i - foundIndex + 1 === val.length) return byteOffset + foundIndex
3208 } else {
3209 foundIndex = -1
3210 }
3211 }
3212 return -1
3213 }
3214
3215 throw new TypeError('val must be string, number or Buffer')
3216 }
3217
3218 // `get` is deprecated
3219 Buffer.prototype.get = function get (offset) {
3220 console.log('.get() is deprecated. Access using array indexes instead.')
3221 return this.readUInt8(offset)
3222 }
3223
3224 // `set` is deprecated
3225 Buffer.prototype.set = function set (v, offset) {
3226 console.log('.set() is deprecated. Access using array indexes instead.')
3227 return this.writeUInt8(v, offset)
3228 }
3229
3230 function hexWrite (buf, string, offset, length) {
3231 offset = Number(offset) || 0
3232 var remaining = buf.length - offset
3233 if (!length) {
3234 length = remaining
3235 } else {
3236 length = Number(length)
3237 if (length > remaining) {
3238 length = remaining
3239 }
3240 }
3241
3242 // must be an even number of digits
3243 var strLen = string.length
3244 if (strLen % 2 !== 0) throw new Error('Invalid hex string')
3245
3246 if (length > strLen / 2) {
3247 length = strLen / 2
3248 }
3249 for (var i = 0; i < length; i++) {
3250 var parsed = parseInt(string.substr(i * 2, 2), 16)
3251 if (isNaN(parsed)) throw new Error('Invalid hex string')
3252 buf[offset + i] = parsed
3253 }
3254 return i
3255 }
3256
3257 function utf8Write (buf, string, offset, length) {
3258 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
3259 }
3260
3261 function asciiWrite (buf, string, offset, length) {
3262 return blitBuffer(asciiToBytes(string), buf, offset, length)
3263 }
3264
3265 function binaryWrite (buf, string, offset, length) {
3266 return asciiWrite(buf, string, offset, length)
3267 }
3268
3269 function base64Write (buf, string, offset, length) {
3270 return blitBuffer(base64ToBytes(string), buf, offset, length)
3271 }
3272
3273 function ucs2Write (buf, string, offset, length) {
3274 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
3275 }
3276
3277 Buffer.prototype.write = function write (string, offset, length, encoding) {
3278 // Buffer#write(string)
3279 if (offset === undefined) {
3280 encoding = 'utf8'
3281 length = this.length
3282 offset = 0
3283 // Buffer#write(string, encoding)
3284 } else if (length === undefined && typeof offset === 'string') {
3285 encoding = offset
3286 length = this.length
3287 offset = 0
3288 // Buffer#write(string, offset[, length][, encoding])
3289 } else if (isFinite(offset)) {
3290 offset = offset | 0
3291 if (isFinite(length)) {
3292 length = length | 0
3293 if (encoding === undefined) encoding = 'utf8'
3294 } else {
3295 encoding = length
3296 length = undefined
3297 }
3298 // legacy write(string, encoding, offset, length) - remove in v0.13
3299 } else {
3300 var swap = encoding
3301 encoding = offset
3302 offset = length | 0
3303 length = swap
3304 }
3305
3306 var remaining = this.length - offset
3307 if (length === undefined || length > remaining) length = remaining
3308
3309 if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
3310 throw new RangeError('attempt to write outside buffer bounds')
3311 }
3312
3313 if (!encoding) encoding = 'utf8'
3314
3315 var loweredCase = false
3316 for (;;) {
3317 switch (encoding) {
3318 case 'hex':
3319 return hexWrite(this, string, offset, length)
3320
3321 case 'utf8':
3322 case 'utf-8':
3323 return utf8Write(this, string, offset, length)
3324
3325 case 'ascii':
3326 return asciiWrite(this, string, offset, length)
3327
3328 case 'binary':
3329 return binaryWrite(this, string, offset, length)
3330
3331 case 'base64':
3332 // Warning: maxLength not taken into account in base64Write
3333 return base64Write(this, string, offset, length)
3334
3335 case 'ucs2':
3336 case 'ucs-2':
3337 case 'utf16le':
3338 case 'utf-16le':
3339 return ucs2Write(this, string, offset, length)
3340
3341 default:
3342 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
3343 encoding = ('' + encoding).toLowerCase()
3344 loweredCase = true
3345 }
3346 }
3347 }
3348
3349 Buffer.prototype.toJSON = function toJSON () {
3350 return {
3351 type: 'Buffer',
3352 data: Array.prototype.slice.call(this._arr || this, 0)
3353 }
3354 }
3355
3356 function base64Slice (buf, start, end) {
3357 if (start === 0 && end === buf.length) {
3358 return base64.fromByteArray(buf)
3359 } else {
3360 return base64.fromByteArray(buf.slice(start, end))
3361 }
3362 }
3363
3364 function utf8Slice (buf, start, end) {
3365 end = Math.min(buf.length, end)
3366 var firstByte
3367 var secondByte
3368 var thirdByte
3369 var fourthByte
3370 var bytesPerSequence
3371 var tempCodePoint
3372 var codePoint
3373 var res = []
3374 var i = start
3375
3376 for (; i < end; i += bytesPerSequence) {
3377 firstByte = buf[i]
3378 codePoint = 0xFFFD
3379
3380 if (firstByte > 0xEF) {
3381 bytesPerSequence = 4
3382 } else if (firstByte > 0xDF) {
3383 bytesPerSequence = 3
3384 } else if (firstByte > 0xBF) {
3385 bytesPerSequence = 2
3386 } else {
3387 bytesPerSequence = 1
3388 }
3389
3390 if (i + bytesPerSequence <= end) {
3391 switch (bytesPerSequence) {
3392 case 1:
3393 if (firstByte < 0x80) {
3394 codePoint = firstByte
3395 }
3396 break
3397 case 2:
3398 secondByte = buf[i + 1]
3399 if ((secondByte & 0xC0) === 0x80) {
3400 tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
3401 if (tempCodePoint > 0x7F) {
3402 codePoint = tempCodePoint
3403 }
3404 }
3405 break
3406 case 3:
3407 secondByte = buf[i + 1]
3408 thirdByte = buf[i + 2]
3409 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
3410 tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
3411 if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
3412 codePoint = tempCodePoint
3413 }
3414 }
3415 break
3416 case 4:
3417 secondByte = buf[i + 1]
3418 thirdByte = buf[i + 2]
3419 fourthByte = buf[i + 3]
3420 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
3421 tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
3422 if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
3423 codePoint = tempCodePoint
3424 }
3425 }
3426 }
3427 }
3428
3429 if (codePoint === 0xFFFD) {
3430 // we generated an invalid codePoint so make sure to only advance by 1 byte
3431 bytesPerSequence = 1
3432 } else if (codePoint > 0xFFFF) {
3433 // encode to utf16 (surrogate pair dance)
3434 codePoint -= 0x10000
3435 res.push(codePoint >>> 10 & 0x3FF | 0xD800)
3436 codePoint = 0xDC00 | codePoint & 0x3FF
3437 }
3438
3439 res.push(codePoint)
3440 }
3441
3442 return String.fromCharCode.apply(String, res)
3443 }
3444
3445 function asciiSlice (buf, start, end) {
3446 var ret = ''
3447 end = Math.min(buf.length, end)
3448
3449 for (var i = start; i < end; i++) {
3450 ret += String.fromCharCode(buf[i] & 0x7F)
3451 }
3452 return ret
3453 }
3454
3455 function binarySlice (buf, start, end) {
3456 var ret = ''
3457 end = Math.min(buf.length, end)
3458
3459 for (var i = start; i < end; i++) {
3460 ret += String.fromCharCode(buf[i])
3461 }
3462 return ret
3463 }
3464
3465 function hexSlice (buf, start, end) {
3466 var len = buf.length
3467
3468 if (!start || start < 0) start = 0
3469 if (!end || end < 0 || end > len) end = len
3470
3471 var out = ''
3472 for (var i = start; i < end; i++) {
3473 out += toHex(buf[i])
3474 }
3475 return out
3476 }
3477
3478 function utf16leSlice (buf, start, end) {
3479 var bytes = buf.slice(start, end)
3480 var res = ''
3481 for (var i = 0; i < bytes.length; i += 2) {
3482 res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)
3483 }
3484 return res
3485 }
3486
3487 Buffer.prototype.slice = function slice (start, end) {
3488 var len = this.length
3489 start = ~~start
3490 end = end === undefined ? len : ~~end
3491
3492 if (start < 0) {
3493 start += len
3494 if (start < 0) start = 0
3495 } else if (start > len) {
3496 start = len
3497 }
3498
3499 if (end < 0) {
3500 end += len
3501 if (end < 0) end = 0
3502 } else if (end > len) {
3503 end = len
3504 }
3505
3506 if (end < start) end = start
3507
3508 var newBuf
3509 if (Buffer.TYPED_ARRAY_SUPPORT) {
3510 newBuf = Buffer._augment(this.subarray(start, end))
3511 } else {
3512 var sliceLen = end - start
3513 newBuf = new Buffer(sliceLen, undefined)
3514 for (var i = 0; i < sliceLen; i++) {
3515 newBuf[i] = this[i + start]
3516 }
3517 }
3518
3519 if (newBuf.length) newBuf.parent = this.parent || this
3520
3521 return newBuf
3522 }
3523
3524 /*
3525 * Need to make sure that buffer isn't trying to write out of bounds.
3526 */
3527 function checkOffset (offset, ext, length) {
3528 if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
3529 if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
3530 }
3531
3532 Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
3533 offset = offset | 0
3534 byteLength = byteLength | 0
3535 if (!noAssert) checkOffset(offset, byteLength, this.length)
3536
3537 var val = this[offset]
3538 var mul = 1
3539 var i = 0
3540 while (++i < byteLength && (mul *= 0x100)) {
3541 val += this[offset + i] * mul
3542 }
3543
3544 return val
3545 }
3546
3547 Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
3548 offset = offset | 0
3549 byteLength = byteLength | 0
3550 if (!noAssert) {
3551 checkOffset(offset, byteLength, this.length)
3552 }
3553
3554 var val = this[offset + --byteLength]
3555 var mul = 1
3556 while (byteLength > 0 && (mul *= 0x100)) {
3557 val += this[offset + --byteLength] * mul
3558 }
3559
3560 return val
3561 }
3562
3563 Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
3564 if (!noAssert) checkOffset(offset, 1, this.length)
3565 return this[offset]
3566 }
3567
3568 Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
3569 if (!noAssert) checkOffset(offset, 2, this.length)
3570 return this[offset] | (this[offset + 1] << 8)
3571 }
3572
3573 Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
3574 if (!noAssert) checkOffset(offset, 2, this.length)
3575 return (this[offset] << 8) | this[offset + 1]
3576 }
3577
3578 Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
3579 if (!noAssert) checkOffset(offset, 4, this.length)
3580
3581 return ((this[offset]) |
3582 (this[offset + 1] << 8) |
3583 (this[offset + 2] << 16)) +
3584 (this[offset + 3] * 0x1000000)
3585 }
3586
3587 Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
3588 if (!noAssert) checkOffset(offset, 4, this.length)
3589
3590 return (this[offset] * 0x1000000) +
3591 ((this[offset + 1] << 16) |
3592 (this[offset + 2] << 8) |
3593 this[offset + 3])
3594 }
3595
3596 Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
3597 offset = offset | 0
3598 byteLength = byteLength | 0
3599 if (!noAssert) checkOffset(offset, byteLength, this.length)
3600
3601 var val = this[offset]
3602 var mul = 1
3603 var i = 0
3604 while (++i < byteLength && (mul *= 0x100)) {
3605 val += this[offset + i] * mul
3606 }
3607 mul *= 0x80
3608
3609 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
3610
3611 return val
3612 }
3613
3614 Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
3615 offset = offset | 0
3616 byteLength = byteLength | 0
3617 if (!noAssert) checkOffset(offset, byteLength, this.length)
3618
3619 var i = byteLength
3620 var mul = 1
3621 var val = this[offset + --i]
3622 while (i > 0 && (mul *= 0x100)) {
3623 val += this[offset + --i] * mul
3624 }
3625 mul *= 0x80
3626
3627 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
3628
3629 return val
3630 }
3631
3632 Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
3633 if (!noAssert) checkOffset(offset, 1, this.length)
3634 if (!(this[offset] & 0x80)) return (this[offset])
3635 return ((0xff - this[offset] + 1) * -1)
3636 }
3637
3638 Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
3639 if (!noAssert) checkOffset(offset, 2, this.length)
3640 var val = this[offset] | (this[offset + 1] << 8)
3641 return (val & 0x8000) ? val | 0xFFFF0000 : val
3642 }
3643
3644 Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
3645 if (!noAssert) checkOffset(offset, 2, this.length)
3646 var val = this[offset + 1] | (this[offset] << 8)
3647 return (val & 0x8000) ? val | 0xFFFF0000 : val
3648 }
3649
3650 Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
3651 if (!noAssert) checkOffset(offset, 4, this.length)
3652
3653 return (this[offset]) |
3654 (this[offset + 1] << 8) |
3655 (this[offset + 2] << 16) |
3656 (this[offset + 3] << 24)
3657 }
3658
3659 Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
3660 if (!noAssert) checkOffset(offset, 4, this.length)
3661
3662 return (this[offset] << 24) |
3663 (this[offset + 1] << 16) |
3664 (this[offset + 2] << 8) |
3665 (this[offset + 3])
3666 }
3667
3668 Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
3669 if (!noAssert) checkOffset(offset, 4, this.length)
3670 return ieee754.read(this, offset, true, 23, 4)
3671 }
3672
3673 Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
3674 if (!noAssert) checkOffset(offset, 4, this.length)
3675 return ieee754.read(this, offset, false, 23, 4)
3676 }
3677
3678 Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
3679 if (!noAssert) checkOffset(offset, 8, this.length)
3680 return ieee754.read(this, offset, true, 52, 8)
3681 }
3682
3683 Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
3684 if (!noAssert) checkOffset(offset, 8, this.length)
3685 return ieee754.read(this, offset, false, 52, 8)
3686 }
3687
3688 function checkInt (buf, value, offset, ext, max, min) {
3689 if (!Buffer.isBuffer(buf)) throw new TypeError('buffer must be a Buffer instance')
3690 if (value > max || value < min) throw new RangeError('value is out of bounds')
3691 if (offset + ext > buf.length) throw new RangeError('index out of range')
3692 }
3693
3694 Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
3695 value = +value
3696 offset = offset | 0
3697 byteLength = byteLength | 0
3698 if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0)
3699
3700 var mul = 1
3701 var i = 0
3702 this[offset] = value & 0xFF
3703 while (++i < byteLength && (mul *= 0x100)) {
3704 this[offset + i] = (value / mul) & 0xFF
3705 }
3706
3707 return offset + byteLength
3708 }
3709
3710 Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
3711 value = +value
3712 offset = offset | 0
3713 byteLength = byteLength | 0
3714 if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0)
3715
3716 var i = byteLength - 1
3717 var mul = 1
3718 this[offset + i] = value & 0xFF
3719 while (--i >= 0 && (mul *= 0x100)) {
3720 this[offset + i] = (value / mul) & 0xFF
3721 }
3722
3723 return offset + byteLength
3724 }
3725
3726 Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
3727 value = +value
3728 offset = offset | 0
3729 if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
3730 if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
3731 this[offset] = value
3732 return offset + 1
3733 }
3734
3735 function objectWriteUInt16 (buf, value, offset, littleEndian) {
3736 if (value < 0) value = 0xffff + value + 1
3737 for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; i++) {
3738 buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>
3739 (littleEndian ? i : 1 - i) * 8
3740 }
3741 }
3742
3743 Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
3744 value = +value
3745 offset = offset | 0
3746 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
3747 if (Buffer.TYPED_ARRAY_SUPPORT) {
3748 this[offset] = value
3749 this[offset + 1] = (value >>> 8)
3750 } else {
3751 objectWriteUInt16(this, value, offset, true)
3752 }
3753 return offset + 2
3754 }
3755
3756 Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
3757 value = +value
3758 offset = offset | 0
3759 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
3760 if (Buffer.TYPED_ARRAY_SUPPORT) {
3761 this[offset] = (value >>> 8)
3762 this[offset + 1] = value
3763 } else {
3764 objectWriteUInt16(this, value, offset, false)
3765 }
3766 return offset + 2
3767 }
3768
3769 function objectWriteUInt32 (buf, value, offset, littleEndian) {
3770 if (value < 0) value = 0xffffffff + value + 1
3771 for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; i++) {
3772 buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff
3773 }
3774 }
3775
3776 Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
3777 value = +value
3778 offset = offset | 0
3779 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
3780 if (Buffer.TYPED_ARRAY_SUPPORT) {
3781 this[offset + 3] = (value >>> 24)
3782 this[offset + 2] = (value >>> 16)
3783 this[offset + 1] = (value >>> 8)
3784 this[offset] = value
3785 } else {
3786 objectWriteUInt32(this, value, offset, true)
3787 }
3788 return offset + 4
3789 }
3790
3791 Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
3792 value = +value
3793 offset = offset | 0
3794 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
3795 if (Buffer.TYPED_ARRAY_SUPPORT) {
3796 this[offset] = (value >>> 24)
3797 this[offset + 1] = (value >>> 16)
3798 this[offset + 2] = (value >>> 8)
3799 this[offset + 3] = value
3800 } else {
3801 objectWriteUInt32(this, value, offset, false)
3802 }
3803 return offset + 4
3804 }
3805
3806 Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
3807 value = +value
3808 offset = offset | 0
3809 if (!noAssert) {
3810 var limit = Math.pow(2, 8 * byteLength - 1)
3811
3812 checkInt(this, value, offset, byteLength, limit - 1, -limit)
3813 }
3814
3815 var i = 0
3816 var mul = 1
3817 var sub = value < 0 ? 1 : 0
3818 this[offset] = value & 0xFF
3819 while (++i < byteLength && (mul *= 0x100)) {
3820 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
3821 }
3822
3823 return offset + byteLength
3824 }
3825
3826 Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
3827 value = +value
3828 offset = offset | 0
3829 if (!noAssert) {
3830 var limit = Math.pow(2, 8 * byteLength - 1)
3831
3832 checkInt(this, value, offset, byteLength, limit - 1, -limit)
3833 }
3834
3835 var i = byteLength - 1
3836 var mul = 1
3837 var sub = value < 0 ? 1 : 0
3838 this[offset + i] = value & 0xFF
3839 while (--i >= 0 && (mul *= 0x100)) {
3840 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
3841 }
3842
3843 return offset + byteLength
3844 }
3845
3846 Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
3847 value = +value
3848 offset = offset | 0
3849 if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
3850 if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
3851 if (value < 0) value = 0xff + value + 1
3852 this[offset] = value
3853 return offset + 1
3854 }
3855
3856 Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
3857 value = +value
3858 offset = offset | 0
3859 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
3860 if (Buffer.TYPED_ARRAY_SUPPORT) {
3861 this[offset] = value
3862 this[offset + 1] = (value >>> 8)
3863 } else {
3864 objectWriteUInt16(this, value, offset, true)
3865 }
3866 return offset + 2
3867 }
3868
3869 Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
3870 value = +value
3871 offset = offset | 0
3872 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
3873 if (Buffer.TYPED_ARRAY_SUPPORT) {
3874 this[offset] = (value >>> 8)
3875 this[offset + 1] = value
3876 } else {
3877 objectWriteUInt16(this, value, offset, false)
3878 }
3879 return offset + 2
3880 }
3881
3882 Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
3883 value = +value
3884 offset = offset | 0
3885 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
3886 if (Buffer.TYPED_ARRAY_SUPPORT) {
3887 this[offset] = value
3888 this[offset + 1] = (value >>> 8)
3889 this[offset + 2] = (value >>> 16)
3890 this[offset + 3] = (value >>> 24)
3891 } else {
3892 objectWriteUInt32(this, value, offset, true)
3893 }
3894 return offset + 4
3895 }
3896
3897 Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
3898 value = +value
3899 offset = offset | 0
3900 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
3901 if (value < 0) value = 0xffffffff + value + 1
3902 if (Buffer.TYPED_ARRAY_SUPPORT) {
3903 this[offset] = (value >>> 24)
3904 this[offset + 1] = (value >>> 16)
3905 this[offset + 2] = (value >>> 8)
3906 this[offset + 3] = value
3907 } else {
3908 objectWriteUInt32(this, value, offset, false)
3909 }
3910 return offset + 4
3911 }
3912
3913 function checkIEEE754 (buf, value, offset, ext, max, min) {
3914 if (value > max || value < min) throw new RangeError('value is out of bounds')
3915 if (offset + ext > buf.length) throw new RangeError('index out of range')
3916 if (offset < 0) throw new RangeError('index out of range')
3917 }
3918
3919 function writeFloat (buf, value, offset, littleEndian, noAssert) {
3920 if (!noAssert) {
3921 checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
3922 }
3923 ieee754.write(buf, value, offset, littleEndian, 23, 4)
3924 return offset + 4
3925 }
3926
3927 Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
3928 return writeFloat(this, value, offset, true, noAssert)
3929 }
3930
3931 Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
3932 return writeFloat(this, value, offset, false, noAssert)
3933 }
3934
3935 function writeDouble (buf, value, offset, littleEndian, noAssert) {
3936 if (!noAssert) {
3937 checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
3938 }
3939 ieee754.write(buf, value, offset, littleEndian, 52, 8)
3940 return offset + 8
3941 }
3942
3943 Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
3944 return writeDouble(this, value, offset, true, noAssert)
3945 }
3946
3947 Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
3948 return writeDouble(this, value, offset, false, noAssert)
3949 }
3950
3951 // copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
3952 Buffer.prototype.copy = function copy (target, targetStart, start, end) {
3953 if (!start) start = 0
3954 if (!end && end !== 0) end = this.length
3955 if (targetStart >= target.length) targetStart = target.length
3956 if (!targetStart) targetStart = 0
3957 if (end > 0 && end < start) end = start
3958
3959 // Copy 0 bytes; we're done
3960 if (end === start) return 0
3961 if (target.length === 0 || this.length === 0) return 0
3962
3963 // Fatal error conditions
3964 if (targetStart < 0) {
3965 throw new RangeError('targetStart out of bounds')
3966 }
3967 if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
3968 if (end < 0) throw new RangeError('sourceEnd out of bounds')
3969
3970 // Are we oob?
3971 if (end > this.length) end = this.length
3972 if (target.length - targetStart < end - start) {
3973 end = target.length - targetStart + start
3974 }
3975
3976 var len = end - start
3977 var i
3978
3979 if (this === target && start < targetStart && targetStart < end) {
3980 // descending copy from end
3981 for (i = len - 1; i >= 0; i--) {
3982 target[i + targetStart] = this[i + start]
3983 }
3984 } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {
3985 // ascending copy from start
3986 for (i = 0; i < len; i++) {
3987 target[i + targetStart] = this[i + start]
3988 }
3989 } else {
3990 target._set(this.subarray(start, start + len), targetStart)
3991 }
3992
3993 return len
3994 }
3995
3996 // fill(value, start=0, end=buffer.length)
3997 Buffer.prototype.fill = function fill (value, start, end) {
3998 if (!value) value = 0
3999 if (!start) start = 0
4000 if (!end) end = this.length
4001
4002 if (end < start) throw new RangeError('end < start')
4003
4004 // Fill 0 bytes; we're done
4005 if (end === start) return
4006 if (this.length === 0) return
4007
4008 if (start < 0 || start >= this.length) throw new RangeError('start out of bounds')
4009 if (end < 0 || end > this.length) throw new RangeError('end out of bounds')
4010
4011 var i
4012 if (typeof value === 'number') {
4013 for (i = start; i < end; i++) {
4014 this[i] = value
4015 }
4016 } else {
4017 var bytes = utf8ToBytes(value.toString())
4018 var len = bytes.length
4019 for (i = start; i < end; i++) {
4020 this[i] = bytes[i % len]
4021 }
4022 }
4023
4024 return this
4025 }
4026
4027 /**
4028 * Creates a new `ArrayBuffer` with the *copied* memory of the buffer instance.
4029 * Added in Node 0.12. Only available in browsers that support ArrayBuffer.
4030 */
4031 Buffer.prototype.toArrayBuffer = function toArrayBuffer () {
4032 if (typeof Uint8Array !== 'undefined') {
4033 if (Buffer.TYPED_ARRAY_SUPPORT) {
4034 return (new Buffer(this)).buffer
4035 } else {
4036 var buf = new Uint8Array(this.length)
4037 for (var i = 0, len = buf.length; i < len; i += 1) {
4038 buf[i] = this[i]
4039 }
4040 return buf.buffer
4041 }
4042 } else {
4043 throw new TypeError('Buffer.toArrayBuffer not supported in this browser')
4044 }
4045 }
4046
4047 // HELPER FUNCTIONS
4048 // ================
4049
4050 var BP = Buffer.prototype
4051
4052 /**
4053 * Augment a Uint8Array *instance* (not the Uint8Array class!) with Buffer methods
4054 */
4055 Buffer._augment = function _augment (arr) {
4056 arr.constructor = Buffer
4057 arr._isBuffer = true
4058
4059 // save reference to original Uint8Array set method before overwriting
4060 arr._set = arr.set
4061
4062 // deprecated
4063 arr.get = BP.get
4064 arr.set = BP.set
4065
4066 arr.write = BP.write
4067 arr.toString = BP.toString
4068 arr.toLocaleString = BP.toString
4069 arr.toJSON = BP.toJSON
4070 arr.equals = BP.equals
4071 arr.compare = BP.compare
4072 arr.indexOf = BP.indexOf
4073 arr.copy = BP.copy
4074 arr.slice = BP.slice
4075 arr.readUIntLE = BP.readUIntLE
4076 arr.readUIntBE = BP.readUIntBE
4077 arr.readUInt8 = BP.readUInt8
4078 arr.readUInt16LE = BP.readUInt16LE
4079 arr.readUInt16BE = BP.readUInt16BE
4080 arr.readUInt32LE = BP.readUInt32LE
4081 arr.readUInt32BE = BP.readUInt32BE
4082 arr.readIntLE = BP.readIntLE
4083 arr.readIntBE = BP.readIntBE
4084 arr.readInt8 = BP.readInt8
4085 arr.readInt16LE = BP.readInt16LE
4086 arr.readInt16BE = BP.readInt16BE
4087 arr.readInt32LE = BP.readInt32LE
4088 arr.readInt32BE = BP.readInt32BE
4089 arr.readFloatLE = BP.readFloatLE
4090 arr.readFloatBE = BP.readFloatBE
4091 arr.readDoubleLE = BP.readDoubleLE
4092 arr.readDoubleBE = BP.readDoubleBE
4093 arr.writeUInt8 = BP.writeUInt8
4094 arr.writeUIntLE = BP.writeUIntLE
4095 arr.writeUIntBE = BP.writeUIntBE
4096 arr.writeUInt16LE = BP.writeUInt16LE
4097 arr.writeUInt16BE = BP.writeUInt16BE
4098 arr.writeUInt32LE = BP.writeUInt32LE
4099 arr.writeUInt32BE = BP.writeUInt32BE
4100 arr.writeIntLE = BP.writeIntLE
4101 arr.writeIntBE = BP.writeIntBE
4102 arr.writeInt8 = BP.writeInt8
4103 arr.writeInt16LE = BP.writeInt16LE
4104 arr.writeInt16BE = BP.writeInt16BE
4105 arr.writeInt32LE = BP.writeInt32LE
4106 arr.writeInt32BE = BP.writeInt32BE
4107 arr.writeFloatLE = BP.writeFloatLE
4108 arr.writeFloatBE = BP.writeFloatBE
4109 arr.writeDoubleLE = BP.writeDoubleLE
4110 arr.writeDoubleBE = BP.writeDoubleBE
4111 arr.fill = BP.fill
4112 arr.inspect = BP.inspect
4113 arr.toArrayBuffer = BP.toArrayBuffer
4114
4115 return arr
4116 }
4117
4118 var INVALID_BASE64_RE = /[^+\/0-9A-Za-z-_]/g
4119
4120 function base64clean (str) {
4121 // Node strips out invalid characters like \n and \t from the string, base64-js does not
4122 str = stringtrim(str).replace(INVALID_BASE64_RE, '')
4123 // Node converts strings with length < 2 to ''
4124 if (str.length < 2) return ''
4125 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
4126 while (str.length % 4 !== 0) {
4127 str = str + '='
4128 }
4129 return str
4130 }
4131
4132 function stringtrim (str) {
4133 if (str.trim) return str.trim()
4134 return str.replace(/^\s+|\s+$/g, '')
4135 }
4136
4137 function toHex (n) {
4138 if (n < 16) return '0' + n.toString(16)
4139 return n.toString(16)
4140 }
4141
4142 function utf8ToBytes (string, units) {
4143 units = units || Infinity
4144 var codePoint
4145 var length = string.length
4146 var leadSurrogate = null
4147 var bytes = []
4148
4149 for (var i = 0; i < length; i++) {
4150 codePoint = string.charCodeAt(i)
4151
4152 // is surrogate component
4153 if (codePoint > 0xD7FF && codePoint < 0xE000) {
4154 // last char was a lead
4155 if (!leadSurrogate) {
4156 // no lead yet
4157 if (codePoint > 0xDBFF) {
4158 // unexpected trail
4159 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
4160 continue
4161
4162 } else if (i + 1 === length) {
4163 // unpaired lead
4164 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
4165 continue
4166 }
4167
4168 // valid lead
4169 leadSurrogate = codePoint
4170
4171 continue
4172 }
4173
4174 // 2 leads in a row
4175 if (codePoint < 0xDC00) {
4176 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
4177 leadSurrogate = codePoint
4178 continue
4179 }
4180
4181 // valid surrogate pair
4182 codePoint = leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00 | 0x10000
4183
4184 } else if (leadSurrogate) {
4185 // valid bmp char, but last char was a lead
4186 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
4187 }
4188
4189 leadSurrogate = null
4190
4191 // encode utf8
4192 if (codePoint < 0x80) {
4193 if ((units -= 1) < 0) break
4194 bytes.push(codePoint)
4195 } else if (codePoint < 0x800) {
4196 if ((units -= 2) < 0) break
4197 bytes.push(
4198 codePoint >> 0x6 | 0xC0,
4199 codePoint & 0x3F | 0x80
4200 )
4201 } else if (codePoint < 0x10000) {
4202 if ((units -= 3) < 0) break
4203 bytes.push(
4204 codePoint >> 0xC | 0xE0,
4205 codePoint >> 0x6 & 0x3F | 0x80,
4206 codePoint & 0x3F | 0x80
4207 )
4208 } else if (codePoint < 0x110000) {
4209 if ((units -= 4) < 0) break
4210 bytes.push(
4211 codePoint >> 0x12 | 0xF0,
4212 codePoint >> 0xC & 0x3F | 0x80,
4213 codePoint >> 0x6 & 0x3F | 0x80,
4214 codePoint & 0x3F | 0x80
4215 )
4216 } else {
4217 throw new Error('Invalid code point')
4218 }
4219 }
4220
4221 return bytes
4222 }
4223
4224 function asciiToBytes (str) {
4225 var byteArray = []
4226 for (var i = 0; i < str.length; i++) {
4227 // Node's code seems to be doing this and not & 0x7F..
4228 byteArray.push(str.charCodeAt(i) & 0xFF)
4229 }
4230 return byteArray
4231 }
4232
4233 function utf16leToBytes (str, units) {
4234 var c, hi, lo
4235 var byteArray = []
4236 for (var i = 0; i < str.length; i++) {
4237 if ((units -= 2) < 0) break
4238
4239 c = str.charCodeAt(i)
4240 hi = c >> 8
4241 lo = c % 256
4242 byteArray.push(lo)
4243 byteArray.push(hi)
4244 }
4245
4246 return byteArray
4247 }
4248
4249 function base64ToBytes (str) {
4250 return base64.toByteArray(base64clean(str))
4251 }
4252
4253 function blitBuffer (src, dst, offset, length) {
4254 for (var i = 0; i < length; i++) {
4255 if ((i + offset >= dst.length) || (i >= src.length)) break
4256 dst[i + offset] = src[i]
4257 }
4258 return i
4259 }
4260
4261 },{"base64-js":8,"ieee754":9,"is-array":10}],8:[function(require,module,exports){
4262 var lookup = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
4263
4264 ;(function (exports) {
4265 'use strict';
4266
4267 var Arr = (typeof Uint8Array !== 'undefined')
4268 ? Uint8Array
4269 : Array
4270
4271 var PLUS = '+'.charCodeAt(0)
4272 var SLASH = '/'.charCodeAt(0)
4273 var NUMBER = '0'.charCodeAt(0)
4274 var LOWER = 'a'.charCodeAt(0)
4275 var UPPER = 'A'.charCodeAt(0)
4276 var PLUS_URL_SAFE = '-'.charCodeAt(0)
4277 var SLASH_URL_SAFE = '_'.charCodeAt(0)
4278
4279 function decode (elt) {
4280 var code = elt.charCodeAt(0)
4281 if (code === PLUS ||
4282 code === PLUS_URL_SAFE)
4283 return 62 // '+'
4284 if (code === SLASH ||
4285 code === SLASH_URL_SAFE)
4286 return 63 // '/'
4287 if (code < NUMBER)
4288 return -1 //no match
4289 if (code < NUMBER + 10)
4290 return code - NUMBER + 26 + 26
4291 if (code < UPPER + 26)
4292 return code - UPPER
4293 if (code < LOWER + 26)
4294 return code - LOWER + 26
4295 }
4296
4297 function b64ToByteArray (b64) {
4298 var i, j, l, tmp, placeHolders, arr
4299
4300 if (b64.length % 4 > 0) {
4301 throw new Error('Invalid string. Length must be a multiple of 4')
4302 }
4303
4304 // the number of equal signs (place holders)
4305 // if there are two placeholders, than the two characters before it
4306 // represent one byte
4307 // if there is only one, then the three characters before it represent 2 bytes
4308 // this is just a cheap hack to not do indexOf twice
4309 var len = b64.length
4310 placeHolders = '=' === b64.charAt(len - 2) ? 2 : '=' === b64.charAt(len - 1) ? 1 : 0
4311
4312 // base64 is 4/3 + up to two characters of the original data
4313 arr = new Arr(b64.length * 3 / 4 - placeHolders)
4314
4315 // if there are placeholders, only get up to the last complete 4 chars
4316 l = placeHolders > 0 ? b64.length - 4 : b64.length
4317
4318 var L = 0
4319
4320 function push (v) {
4321 arr[L++] = v
4322 }
4323
4324 for (i = 0, j = 0; i < l; i += 4, j += 3) {
4325 tmp = (decode(b64.charAt(i)) << 18) | (decode(b64.charAt(i + 1)) << 12) | (decode(b64.charAt(i + 2)) << 6) | decode(b64.charAt(i + 3))
4326 push((tmp & 0xFF0000) >> 16)
4327 push((tmp & 0xFF00) >> 8)
4328 push(tmp & 0xFF)
4329 }
4330
4331 if (placeHolders === 2) {
4332 tmp = (decode(b64.charAt(i)) << 2) | (decode(b64.charAt(i + 1)) >> 4)
4333 push(tmp & 0xFF)
4334 } else if (placeHolders === 1) {
4335 tmp = (decode(b64.charAt(i)) << 10) | (decode(b64.charAt(i + 1)) << 4) | (decode(b64.charAt(i + 2)) >> 2)
4336 push((tmp >> 8) & 0xFF)
4337 push(tmp & 0xFF)
4338 }
4339
4340 return arr
4341 }
4342
4343 function uint8ToBase64 (uint8) {
4344 var i,
4345 extraBytes = uint8.length % 3, // if we have 1 byte left, pad 2 bytes
4346 output = "",
4347 temp, length
4348
4349 function encode (num) {
4350 return lookup.charAt(num)
4351 }
4352
4353 function tripletToBase64 (num) {
4354 return encode(num >> 18 & 0x3F) + encode(num >> 12 & 0x3F) + encode(num >> 6 & 0x3F) + encode(num & 0x3F)
4355 }
4356
4357 // go through the array every three bytes, we'll deal with trailing stuff later
4358 for (i = 0, length = uint8.length - extraBytes; i < length; i += 3) {
4359 temp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
4360 output += tripletToBase64(temp)
4361 }
4362
4363 // pad the end with zeros, but make sure to not forget the extra bytes
4364 switch (extraBytes) {
4365 case 1:
4366 temp = uint8[uint8.length - 1]
4367 output += encode(temp >> 2)
4368 output += encode((temp << 4) & 0x3F)
4369 output += '=='
4370 break
4371 case 2:
4372 temp = (uint8[uint8.length - 2] << 8) + (uint8[uint8.length - 1])
4373 output += encode(temp >> 10)
4374 output += encode((temp >> 4) & 0x3F)
4375 output += encode((temp << 2) & 0x3F)
4376 output += '='
4377 break
4378 }
4379
4380 return output
4381 }
4382
4383 exports.toByteArray = b64ToByteArray
4384 exports.fromByteArray = uint8ToBase64
4385 }(typeof exports === 'undefined' ? (this.base64js = {}) : exports))
4386
4387 },{}],9:[function(require,module,exports){
4388 exports.read = function (buffer, offset, isLE, mLen, nBytes) {
4389 var e, m
4390 var eLen = nBytes * 8 - mLen - 1
4391 var eMax = (1 << eLen) - 1
4392 var eBias = eMax >> 1
4393 var nBits = -7
4394 var i = isLE ? (nBytes - 1) : 0
4395 var d = isLE ? -1 : 1
4396 var s = buffer[offset + i]
4397
4398 i += d
4399
4400 e = s & ((1 << (-nBits)) - 1)
4401 s >>= (-nBits)
4402 nBits += eLen
4403 for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
4404
4405 m = e & ((1 << (-nBits)) - 1)
4406 e >>= (-nBits)
4407 nBits += mLen
4408 for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
4409
4410 if (e === 0) {
4411 e = 1 - eBias
4412 } else if (e === eMax) {
4413 return m ? NaN : ((s ? -1 : 1) * Infinity)
4414 } else {
4415 m = m + Math.pow(2, mLen)
4416 e = e - eBias
4417 }
4418 return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
4419 }
4420
4421 exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
4422 var e, m, c
4423 var eLen = nBytes * 8 - mLen - 1
4424 var eMax = (1 << eLen) - 1
4425 var eBias = eMax >> 1
4426 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
4427 var i = isLE ? 0 : (nBytes - 1)
4428 var d = isLE ? 1 : -1
4429 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
4430
4431 value = Math.abs(value)
4432
4433 if (isNaN(value) || value === Infinity) {
4434 m = isNaN(value) ? 1 : 0
4435 e = eMax
4436 } else {
4437 e = Math.floor(Math.log(value) / Math.LN2)
4438 if (value * (c = Math.pow(2, -e)) < 1) {
4439 e--
4440 c *= 2
4441 }
4442 if (e + eBias >= 1) {
4443 value += rt / c
4444 } else {
4445 value += rt * Math.pow(2, 1 - eBias)
4446 }
4447 if (value * c >= 2) {
4448 e++
4449 c /= 2
4450 }
4451
4452 if (e + eBias >= eMax) {
4453 m = 0
4454 e = eMax
4455 } else if (e + eBias >= 1) {
4456 m = (value * c - 1) * Math.pow(2, mLen)
4457 e = e + eBias
4458 } else {
4459 m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
4460 e = 0
4461 }
4462 }
4463
4464 for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
4465
4466 e = (e << mLen) | m
4467 eLen += mLen
4468 for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
4469
4470 buffer[offset + i - d] |= s * 128
4471 }
4472
4473 },{}],10:[function(require,module,exports){
4474
4475 /**
4476 * isArray
4477 */
4478
4479 var isArray = Array.isArray;
4480
4481 /**
4482 * toString
4483 */
4484
4485 var str = Object.prototype.toString;
4486
4487 /**
4488 * Whether or not the given `val`
4489 * is an array.
4490 *
4491 * example:
4492 *
4493 * isArray([]);
4494 * // > true
4495 * isArray(arguments);
4496 * // > false
4497 * isArray('');
4498 * // > false
4499 *
4500 * @param {mixed} val
4501 * @return {bool}
4502 */
4503
4504 module.exports = isArray || function (val) {
4505 return !! val && '[object Array]' == str.call(val);
4506 };
4507
4508 },{}],11:[function(require,module,exports){
4509 // Copyright Joyent, Inc. and other Node contributors.
4510 //
4511 // Permission is hereby granted, free of charge, to any person obtaining a
4512 // copy of this software and associated documentation files (the
4513 // "Software"), to deal in the Software without restriction, including
4514 // without limitation the rights to use, copy, modify, merge, publish,
4515 // distribute, sublicense, and/or sell copies of the Software, and to permit
4516 // persons to whom the Software is furnished to do so, subject to the
4517 // following conditions:
4518 //
4519 // The above copyright notice and this permission notice shall be included
4520 // in all copies or substantial portions of the Software.
4521 //
4522 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
4523 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
4524 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
4525 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
4526 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
4527 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
4528 // USE OR OTHER DEALINGS IN THE SOFTWARE.
4529
4530 function EventEmitter() {
4531 this._events = this._events || {};
4532 this._maxListeners = this._maxListeners || undefined;
4533 }
4534 module.exports = EventEmitter;
4535
4536 // Backwards-compat with node 0.10.x
4537 EventEmitter.EventEmitter = EventEmitter;
4538
4539 EventEmitter.prototype._events = undefined;
4540 EventEmitter.prototype._maxListeners = undefined;
4541
4542 // By default EventEmitters will print a warning if more than 10 listeners are
4543 // added to it. This is a useful default which helps finding memory leaks.
4544 EventEmitter.defaultMaxListeners = 10;
4545
4546 // Obviously not all Emitters should be limited to 10. This function allows
4547 // that to be increased. Set to zero for unlimited.
4548 EventEmitter.prototype.setMaxListeners = function(n) {
4549 if (!isNumber(n) || n < 0 || isNaN(n))
4550 throw TypeError('n must be a positive number');
4551 this._maxListeners = n;
4552 return this;
4553 };
4554
4555 EventEmitter.prototype.emit = function(type) {
4556 var er, handler, len, args, i, listeners;
4557
4558 if (!this._events)
4559 this._events = {};
4560
4561 // If there is no 'error' event listener then throw.
4562 if (type === 'error') {
4563 if (!this._events.error ||
4564 (isObject(this._events.error) && !this._events.error.length)) {
4565 er = arguments[1];
4566 if (er instanceof Error) {
4567 throw er; // Unhandled 'error' event
4568 }
4569 throw TypeError('Uncaught, unspecified "error" event.');
4570 }
4571 }
4572
4573 handler = this._events[type];
4574
4575 if (isUndefined(handler))
4576 return false;
4577
4578 if (isFunction(handler)) {
4579 switch (arguments.length) {
4580 // fast cases
4581 case 1:
4582 handler.call(this);
4583 break;
4584 case 2:
4585 handler.call(this, arguments[1]);
4586 break;
4587 case 3:
4588 handler.call(this, arguments[1], arguments[2]);
4589 break;
4590 // slower
4591 default:
4592 len = arguments.length;
4593 args = new Array(len - 1);
4594 for (i = 1; i < len; i++)
4595 args[i - 1] = arguments[i];
4596 handler.apply(this, args);
4597 }
4598 } else if (isObject(handler)) {
4599 len = arguments.length;
4600 args = new Array(len - 1);
4601 for (i = 1; i < len; i++)
4602 args[i - 1] = arguments[i];
4603
4604 listeners = handler.slice();
4605 len = listeners.length;
4606 for (i = 0; i < len; i++)
4607 listeners[i].apply(this, args);
4608 }
4609
4610 return true;
4611 };
4612
4613 EventEmitter.prototype.addListener = function(type, listener) {
4614 var m;
4615
4616 if (!isFunction(listener))
4617 throw TypeError('listener must be a function');
4618
4619 if (!this._events)
4620 this._events = {};
4621
4622 // To avoid recursion in the case that type === "newListener"! Before
4623 // adding it to the listeners, first emit "newListener".
4624 if (this._events.newListener)
4625 this.emit('newListener', type,
4626 isFunction(listener.listener) ?
4627 listener.listener : listener);
4628
4629 if (!this._events[type])
4630 // Optimize the case of one listener. Don't need the extra array object.
4631 this._events[type] = listener;
4632 else if (isObject(this._events[type]))
4633 // If we've already got an array, just append.
4634 this._events[type].push(listener);
4635 else
4636 // Adding the second element, need to change to array.
4637 this._events[type] = [this._events[type], listener];
4638
4639 // Check for listener leak
4640 if (isObject(this._events[type]) && !this._events[type].warned) {
4641 var m;
4642 if (!isUndefined(this._maxListeners)) {
4643 m = this._maxListeners;
4644 } else {
4645 m = EventEmitter.defaultMaxListeners;
4646 }
4647
4648 if (m && m > 0 && this._events[type].length > m) {
4649 this._events[type].warned = true;
4650 console.error('(node) warning: possible EventEmitter memory ' +
4651 'leak detected. %d listeners added. ' +
4652 'Use emitter.setMaxListeners() to increase limit.',
4653 this._events[type].length);
4654 if (typeof console.trace === 'function') {
4655 // not supported in IE 10
4656 console.trace();
4657 }
4658 }
4659 }
4660
4661 return this;
4662 };
4663
4664 EventEmitter.prototype.on = EventEmitter.prototype.addListener;
4665
4666 EventEmitter.prototype.once = function(type, listener) {
4667 if (!isFunction(listener))
4668 throw TypeError('listener must be a function');
4669
4670 var fired = false;
4671
4672 function g() {
4673 this.removeListener(type, g);
4674
4675 if (!fired) {
4676 fired = true;
4677 listener.apply(this, arguments);
4678 }
4679 }
4680
4681 g.listener = listener;
4682 this.on(type, g);
4683
4684 return this;
4685 };
4686
4687 // emits a 'removeListener' event iff the listener was removed
4688 EventEmitter.prototype.removeListener = function(type, listener) {
4689 var list, position, length, i;
4690
4691 if (!isFunction(listener))
4692 throw TypeError('listener must be a function');
4693
4694 if (!this._events || !this._events[type])
4695 return this;
4696
4697 list = this._events[type];
4698 length = list.length;
4699 position = -1;
4700
4701 if (list === listener ||
4702 (isFunction(list.listener) && list.listener === listener)) {
4703 delete this._events[type];
4704 if (this._events.removeListener)
4705 this.emit('removeListener', type, listener);
4706
4707 } else if (isObject(list)) {
4708 for (i = length; i-- > 0;) {
4709 if (list[i] === listener ||
4710 (list[i].listener && list[i].listener === listener)) {
4711 position = i;
4712 break;
4713 }
4714 }
4715
4716 if (position < 0)
4717 return this;
4718
4719 if (list.length === 1) {
4720 list.length = 0;
4721 delete this._events[type];
4722 } else {
4723 list.splice(position, 1);
4724 }
4725
4726 if (this._events.removeListener)
4727 this.emit('removeListener', type, listener);
4728 }
4729
4730 return this;
4731 };
4732
4733 EventEmitter.prototype.removeAllListeners = function(type) {
4734 var key, listeners;
4735
4736 if (!this._events)
4737 return this;
4738
4739 // not listening for removeListener, no need to emit
4740 if (!this._events.removeListener) {
4741 if (arguments.length === 0)
4742 this._events = {};
4743 else if (this._events[type])
4744 delete this._events[type];
4745 return this;
4746 }
4747
4748 // emit removeListener for all listeners on all events
4749 if (arguments.length === 0) {
4750 for (key in this._events) {
4751 if (key === 'removeListener') continue;
4752 this.removeAllListeners(key);
4753 }
4754 this.removeAllListeners('removeListener');
4755 this._events = {};
4756 return this;
4757 }
4758
4759 listeners = this._events[type];
4760
4761 if (isFunction(listeners)) {
4762 this.removeListener(type, listeners);
4763 } else {
4764 // LIFO order
4765 while (listeners.length)
4766 this.removeListener(type, listeners[listeners.length - 1]);
4767 }
4768 delete this._events[type];
4769
4770 return this;
4771 };
4772
4773 EventEmitter.prototype.listeners = function(type) {
4774 var ret;
4775 if (!this._events || !this._events[type])
4776 ret = [];
4777 else if (isFunction(this._events[type]))
4778 ret = [this._events[type]];
4779 else
4780 ret = this._events[type].slice();
4781 return ret;
4782 };
4783
4784 EventEmitter.listenerCount = function(emitter, type) {
4785 var ret;
4786 if (!emitter._events || !emitter._events[type])
4787 ret = 0;
4788 else if (isFunction(emitter._events[type]))
4789 ret = 1;
4790 else
4791 ret = emitter._events[type].length;
4792 return ret;
4793 };
4794
4795 function isFunction(arg) {
4796 return typeof arg === 'function';
4797 }
4798
4799 function isNumber(arg) {
4800 return typeof arg === 'number';
4801 }
4802
4803 function isObject(arg) {
4804 return typeof arg === 'object' && arg !== null;
4805 }
4806
4807 function isUndefined(arg) {
4808 return arg === void 0;
4809 }
4810
4811 },{}],12:[function(require,module,exports){
4812 if (typeof Object.create === 'function') {
4813 // implementation from standard node.js 'util' module
4814 module.exports = function inherits(ctor, superCtor) {
4815 ctor.super_ = superCtor
4816 ctor.prototype = Object.create(superCtor.prototype, {
4817 constructor: {
4818 value: ctor,
4819 enumerable: false,
4820 writable: true,
4821 configurable: true
4822 }
4823 });
4824 };
4825 } else {
4826 // old school shim for old browsers
4827 module.exports = function inherits(ctor, superCtor) {
4828 ctor.super_ = superCtor
4829 var TempCtor = function () {}
4830 TempCtor.prototype = superCtor.prototype
4831 ctor.prototype = new TempCtor()
4832 ctor.prototype.constructor = ctor
4833 }
4834 }
4835
4836 },{}],13:[function(require,module,exports){
4837 module.exports = Array.isArray || function (arr) {
4838 return Object.prototype.toString.call(arr) == '[object Array]';
4839 };
4840
4841 },{}],14:[function(require,module,exports){
4842 // shim for using process in browser
4843
4844 var process = module.exports = {};
4845 var queue = [];
4846 var draining = false;
4847 var currentQueue;
4848 var queueIndex = -1;
4849
4850 function cleanUpNextTick() {
4851 draining = false;
4852 if (currentQueue.length) {
4853 queue = currentQueue.concat(queue);
4854 } else {
4855 queueIndex = -1;
4856 }
4857 if (queue.length) {
4858 drainQueue();
4859 }
4860 }
4861
4862 function drainQueue() {
4863 if (draining) {
4864 return;
4865 }
4866 var timeout = setTimeout(cleanUpNextTick);
4867 draining = true;
4868
4869 var len = queue.length;
4870 while(len) {
4871 currentQueue = queue;
4872 queue = [];
4873 while (++queueIndex < len) {
4874 currentQueue[queueIndex].run();
4875 }
4876 queueIndex = -1;
4877 len = queue.length;
4878 }
4879 currentQueue = null;
4880 draining = false;
4881 clearTimeout(timeout);
4882 }
4883
4884 process.nextTick = function (fun) {
4885 var args = new Array(arguments.length - 1);
4886 if (arguments.length > 1) {
4887 for (var i = 1; i < arguments.length; i++) {
4888 args[i - 1] = arguments[i];
4889 }
4890 }
4891 queue.push(new Item(fun, args));
4892 if (queue.length === 1 && !draining) {
4893 setTimeout(drainQueue, 0);
4894 }
4895 };
4896
4897 // v8 likes predictible objects
4898 function Item(fun, array) {
4899 this.fun = fun;
4900 this.array = array;
4901 }
4902 Item.prototype.run = function () {
4903 this.fun.apply(null, this.array);
4904 };
4905 process.title = 'browser';
4906 process.browser = true;
4907 process.env = {};
4908 process.argv = [];
4909 process.version = ''; // empty string to avoid regexp issues
4910 process.versions = {};
4911
4912 function noop() {}
4913
4914 process.on = noop;
4915 process.addListener = noop;
4916 process.once = noop;
4917 process.off = noop;
4918 process.removeListener = noop;
4919 process.removeAllListeners = noop;
4920 process.emit = noop;
4921
4922 process.binding = function (name) {
4923 throw new Error('process.binding is not supported');
4924 };
4925
4926 // TODO(shtylman)
4927 process.cwd = function () { return '/' };
4928 process.chdir = function (dir) {
4929 throw new Error('process.chdir is not supported');
4930 };
4931 process.umask = function() { return 0; };
4932
4933 },{}],15:[function(require,module,exports){
4934 module.exports = require("./lib/_stream_duplex.js")
4935
4936 },{"./lib/_stream_duplex.js":16}],16:[function(require,module,exports){
4937 (function (process){
4938 // Copyright Joyent, Inc. and other Node contributors.
4939 //
4940 // Permission is hereby granted, free of charge, to any person obtaining a
4941 // copy of this software and associated documentation files (the
4942 // "Software"), to deal in the Software without restriction, including
4943 // without limitation the rights to use, copy, modify, merge, publish,
4944 // distribute, sublicense, and/or sell copies of the Software, and to permit
4945 // persons to whom the Software is furnished to do so, subject to the
4946 // following conditions:
4947 //
4948 // The above copyright notice and this permission notice shall be included
4949 // in all copies or substantial portions of the Software.
4950 //
4951 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
4952 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
4953 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
4954 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
4955 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
4956 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
4957 // USE OR OTHER DEALINGS IN THE SOFTWARE.
4958
4959 // a duplex stream is just a stream that is both readable and writable.
4960 // Since JS doesn't have multiple prototypal inheritance, this class
4961 // prototypally inherits from Readable, and then parasitically from
4962 // Writable.
4963
4964 module.exports = Duplex;
4965
4966 /*<replacement>*/
4967 var objectKeys = Object.keys || function (obj) {
4968 var keys = [];
4969 for (var key in obj) keys.push(key);
4970 return keys;
4971 }
4972 /*</replacement>*/
4973
4974
4975 /*<replacement>*/
4976 var util = require('core-util-is');
4977 util.inherits = require('inherits');
4978 /*</replacement>*/
4979
4980 var Readable = require('./_stream_readable');
4981 var Writable = require('./_stream_writable');
4982
4983 util.inherits(Duplex, Readable);
4984
4985 forEach(objectKeys(Writable.prototype), function(method) {
4986 if (!Duplex.prototype[method])
4987 Duplex.prototype[method] = Writable.prototype[method];
4988 });
4989
4990 function Duplex(options) {
4991 if (!(this instanceof Duplex))
4992 return new Duplex(options);
4993
4994 Readable.call(this, options);
4995 Writable.call(this, options);
4996
4997 if (options && options.readable === false)
4998 this.readable = false;
4999
5000 if (options && options.writable === false)
5001 this.writable = false;
5002
5003 this.allowHalfOpen = true;
5004 if (options && options.allowHalfOpen === false)
5005 this.allowHalfOpen = false;
5006
5007 this.once('end', onend);
5008 }
5009
5010 // the no-half-open enforcer
5011 function onend() {
5012 // if we allow half-open state, or if the writable side ended,
5013 // then we're ok.
5014 if (this.allowHalfOpen || this._writableState.ended)
5015 return;
5016
5017 // no more data can be written.
5018 // But allow more writes to happen in this tick.
5019 process.nextTick(this.end.bind(this));
5020 }
5021
5022 function forEach (xs, f) {
5023 for (var i = 0, l = xs.length; i < l; i++) {
5024 f(xs[i], i);
5025 }
5026 }
5027
5028 }).call(this,require('_process'))
5029 },{"./_stream_readable":18,"./_stream_writable":20,"_process":14,"core-util-is":21,"inherits":12}],17:[function(require,module,exports){
5030 // Copyright Joyent, Inc. and other Node contributors.
5031 //
5032 // Permission is hereby granted, free of charge, to any person obtaining a
5033 // copy of this software and associated documentation files (the
5034 // "Software"), to deal in the Software without restriction, including
5035 // without limitation the rights to use, copy, modify, merge, publish,
5036 // distribute, sublicense, and/or sell copies of the Software, and to permit
5037 // persons to whom the Software is furnished to do so, subject to the
5038 // following conditions:
5039 //
5040 // The above copyright notice and this permission notice shall be included
5041 // in all copies or substantial portions of the Software.
5042 //
5043 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
5044 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
5045 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
5046 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
5047 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
5048 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
5049 // USE OR OTHER DEALINGS IN THE SOFTWARE.
5050
5051 // a passthrough stream.
5052 // basically just the most minimal sort of Transform stream.
5053 // Every written chunk gets output as-is.
5054
5055 module.exports = PassThrough;
5056
5057 var Transform = require('./_stream_transform');
5058
5059 /*<replacement>*/
5060 var util = require('core-util-is');
5061 util.inherits = require('inherits');
5062 /*</replacement>*/
5063
5064 util.inherits(PassThrough, Transform);
5065
5066 function PassThrough(options) {
5067 if (!(this instanceof PassThrough))
5068 return new PassThrough(options);
5069
5070 Transform.call(this, options);
5071 }
5072
5073 PassThrough.prototype._transform = function(chunk, encoding, cb) {
5074 cb(null, chunk);
5075 };
5076
5077 },{"./_stream_transform":19,"core-util-is":21,"inherits":12}],18:[function(require,module,exports){
5078 (function (process){
5079 // Copyright Joyent, Inc. and other Node contributors.
5080 //
5081 // Permission is hereby granted, free of charge, to any person obtaining a
5082 // copy of this software and associated documentation files (the
5083 // "Software"), to deal in the Software without restriction, including
5084 // without limitation the rights to use, copy, modify, merge, publish,
5085 // distribute, sublicense, and/or sell copies of the Software, and to permit
5086 // persons to whom the Software is furnished to do so, subject to the
5087 // following conditions:
5088 //
5089 // The above copyright notice and this permission notice shall be included
5090 // in all copies or substantial portions of the Software.
5091 //
5092 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
5093 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
5094 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
5095 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
5096 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
5097 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
5098 // USE OR OTHER DEALINGS IN THE SOFTWARE.
5099
5100 module.exports = Readable;
5101
5102 /*<replacement>*/
5103 var isArray = require('isarray');
5104 /*</replacement>*/
5105
5106
5107 /*<replacement>*/
5108 var Buffer = require('buffer').Buffer;
5109 /*</replacement>*/
5110
5111 Readable.ReadableState = ReadableState;
5112
5113 var EE = require('events').EventEmitter;
5114
5115 /*<replacement>*/
5116 if (!EE.listenerCount) EE.listenerCount = function(emitter, type) {
5117 return emitter.listeners(type).length;
5118 };
5119 /*</replacement>*/
5120
5121 var Stream = require('stream');
5122
5123 /*<replacement>*/
5124 var util = require('core-util-is');
5125 util.inherits = require('inherits');
5126 /*</replacement>*/
5127
5128 var StringDecoder;
5129
5130
5131 /*<replacement>*/
5132 var debug = require('util');
5133 if (debug && debug.debuglog) {
5134 debug = debug.debuglog('stream');
5135 } else {
5136 debug = function () {};
5137 }
5138 /*</replacement>*/
5139
5140
5141 util.inherits(Readable, Stream);
5142
5143 function ReadableState(options, stream) {
5144 var Duplex = require('./_stream_duplex');
5145
5146 options = options || {};
5147
5148 // the point at which it stops calling _read() to fill the buffer
5149 // Note: 0 is a valid value, means "don't call _read preemptively ever"
5150 var hwm = options.highWaterMark;
5151 var defaultHwm = options.objectMode ? 16 : 16 * 1024;
5152 this.highWaterMark = (hwm || hwm === 0) ? hwm : defaultHwm;
5153
5154 // cast to ints.
5155 this.highWaterMark = ~~this.highWaterMark;
5156
5157 this.buffer = [];
5158 this.length = 0;
5159 this.pipes = null;
5160 this.pipesCount = 0;
5161 this.flowing = null;
5162 this.ended = false;
5163 this.endEmitted = false;
5164 this.reading = false;
5165
5166 // a flag to be able to tell if the onwrite cb is called immediately,
5167 // or on a later tick. We set this to true at first, because any
5168 // actions that shouldn't happen until "later" should generally also
5169 // not happen before the first write call.
5170 this.sync = true;
5171
5172 // whenever we return null, then we set a flag to say
5173 // that we're awaiting a 'readable' event emission.
5174 this.needReadable = false;
5175 this.emittedReadable = false;
5176 this.readableListening = false;
5177
5178
5179 // object stream flag. Used to make read(n) ignore n and to
5180 // make all the buffer merging and length checks go away
5181 this.objectMode = !!options.objectMode;
5182
5183 if (stream instanceof Duplex)
5184 this.objectMode = this.objectMode || !!options.readableObjectMode;
5185
5186 // Crypto is kind of old and crusty. Historically, its default string
5187 // encoding is 'binary' so we have to make this configurable.
5188 // Everything else in the universe uses 'utf8', though.
5189 this.defaultEncoding = options.defaultEncoding || 'utf8';
5190
5191 // when piping, we only care about 'readable' events that happen
5192 // after read()ing all the bytes and not getting any pushback.
5193 this.ranOut = false;
5194
5195 // the number of writers that are awaiting a drain event in .pipe()s
5196 this.awaitDrain = 0;
5197
5198 // if true, a maybeReadMore has been scheduled
5199 this.readingMore = false;
5200
5201 this.decoder = null;
5202 this.encoding = null;
5203 if (options.encoding) {
5204 if (!StringDecoder)
5205 StringDecoder = require('string_decoder/').StringDecoder;
5206 this.decoder = new StringDecoder(options.encoding);
5207 this.encoding = options.encoding;
5208 }
5209 }
5210
5211 function Readable(options) {
5212 var Duplex = require('./_stream_duplex');
5213
5214 if (!(this instanceof Readable))
5215 return new Readable(options);
5216
5217 this._readableState = new ReadableState(options, this);
5218
5219 // legacy
5220 this.readable = true;
5221
5222 Stream.call(this);
5223 }
5224
5225 // Manually shove something into the read() buffer.
5226 // This returns true if the highWaterMark has not been hit yet,
5227 // similar to how Writable.write() returns true if you should
5228 // write() some more.
5229 Readable.prototype.push = function(chunk, encoding) {
5230 var state = this._readableState;
5231
5232 if (util.isString(chunk) && !state.objectMode) {
5233 encoding = encoding || state.defaultEncoding;
5234 if (encoding !== state.encoding) {
5235 chunk = new Buffer(chunk, encoding);
5236 encoding = '';
5237 }
5238 }
5239
5240 return readableAddChunk(this, state, chunk, encoding, false);
5241 };
5242
5243 // Unshift should *always* be something directly out of read()
5244 Readable.prototype.unshift = function(chunk) {
5245 var state = this._readableState;
5246 return readableAddChunk(this, state, chunk, '', true);
5247 };
5248
5249 function readableAddChunk(stream, state, chunk, encoding, addToFront) {
5250 var er = chunkInvalid(state, chunk);
5251 if (er) {
5252 stream.emit('error', er);
5253 } else if (util.isNullOrUndefined(chunk)) {
5254 state.reading = false;
5255 if (!state.ended)
5256 onEofChunk(stream, state);
5257 } else if (state.objectMode || chunk && chunk.length > 0) {
5258 if (state.ended && !addToFront) {
5259 var e = new Error('stream.push() after EOF');
5260 stream.emit('error', e);
5261 } else if (state.endEmitted && addToFront) {
5262 var e = new Error('stream.unshift() after end event');
5263 stream.emit('error', e);
5264 } else {
5265 if (state.decoder && !addToFront && !encoding)
5266 chunk = state.decoder.write(chunk);
5267
5268 if (!addToFront)
5269 state.reading = false;
5270
5271 // if we want the data now, just emit it.
5272 if (state.flowing && state.length === 0 && !state.sync) {
5273 stream.emit('data', chunk);
5274 stream.read(0);
5275 } else {
5276 // update the buffer info.
5277 state.length += state.objectMode ? 1 : chunk.length;
5278 if (addToFront)
5279 state.buffer.unshift(chunk);
5280 else
5281 state.buffer.push(chunk);
5282
5283 if (state.needReadable)
5284 emitReadable(stream);
5285 }
5286
5287 maybeReadMore(stream, state);
5288 }
5289 } else if (!addToFront) {
5290 state.reading = false;
5291 }
5292
5293 return needMoreData(state);
5294 }
5295
5296
5297
5298 // if it's past the high water mark, we can push in some more.
5299 // Also, if we have no data yet, we can stand some
5300 // more bytes. This is to work around cases where hwm=0,
5301 // such as the repl. Also, if the push() triggered a
5302 // readable event, and the user called read(largeNumber) such that
5303 // needReadable was set, then we ought to push more, so that another
5304 // 'readable' event will be triggered.
5305 function needMoreData(state) {
5306 return !state.ended &&
5307 (state.needReadable ||
5308 state.length < state.highWaterMark ||
5309 state.length === 0);
5310 }
5311
5312 // backwards compatibility.
5313 Readable.prototype.setEncoding = function(enc) {
5314 if (!StringDecoder)
5315 StringDecoder = require('string_decoder/').StringDecoder;
5316 this._readableState.decoder = new StringDecoder(enc);
5317 this._readableState.encoding = enc;
5318 return this;
5319 };
5320
5321 // Don't raise the hwm > 128MB
5322 var MAX_HWM = 0x800000;
5323 function roundUpToNextPowerOf2(n) {
5324 if (n >= MAX_HWM) {
5325 n = MAX_HWM;
5326 } else {
5327 // Get the next highest power of 2
5328 n--;
5329 for (var p = 1; p < 32; p <<= 1) n |= n >> p;
5330 n++;
5331 }
5332 return n;
5333 }
5334
5335 function howMuchToRead(n, state) {
5336 if (state.length === 0 && state.ended)
5337 return 0;
5338
5339 if (state.objectMode)
5340 return n === 0 ? 0 : 1;
5341
5342 if (isNaN(n) || util.isNull(n)) {
5343 // only flow one buffer at a time
5344 if (state.flowing && state.buffer.length)
5345 return state.buffer[0].length;
5346 else
5347 return state.length;
5348 }
5349
5350 if (n <= 0)
5351 return 0;
5352
5353 // If we're asking for more than the target buffer level,
5354 // then raise the water mark. Bump up to the next highest
5355 // power of 2, to prevent increasing it excessively in tiny
5356 // amounts.
5357 if (n > state.highWaterMark)
5358 state.highWaterMark = roundUpToNextPowerOf2(n);
5359
5360 // don't have that much. return null, unless we've ended.
5361 if (n > state.length) {
5362 if (!state.ended) {
5363 state.needReadable = true;
5364 return 0;
5365 } else
5366 return state.length;
5367 }
5368
5369 return n;
5370 }
5371
5372 // you can override either this method, or the async _read(n) below.
5373 Readable.prototype.read = function(n) {
5374 debug('read', n);
5375 var state = this._readableState;
5376 var nOrig = n;
5377
5378 if (!util.isNumber(n) || n > 0)
5379 state.emittedReadable = false;
5380
5381 // if we're doing read(0) to trigger a readable event, but we
5382 // already have a bunch of data in the buffer, then just trigger
5383 // the 'readable' event and move on.
5384 if (n === 0 &&
5385 state.needReadable &&
5386 (state.length >= state.highWaterMark || state.ended)) {
5387 debug('read: emitReadable', state.length, state.ended);
5388 if (state.length === 0 && state.ended)
5389 endReadable(this);
5390 else
5391 emitReadable(this);
5392 return null;
5393 }
5394
5395 n = howMuchToRead(n, state);
5396
5397 // if we've ended, and we're now clear, then finish it up.
5398 if (n === 0 && state.ended) {
5399 if (state.length === 0)
5400 endReadable(this);
5401 return null;
5402 }
5403
5404 // All the actual chunk generation logic needs to be
5405 // *below* the call to _read. The reason is that in certain
5406 // synthetic stream cases, such as passthrough streams, _read
5407 // may be a completely synchronous operation which may change
5408 // the state of the read buffer, providing enough data when
5409 // before there was *not* enough.
5410 //
5411 // So, the steps are:
5412 // 1. Figure out what the state of things will be after we do
5413 // a read from the buffer.
5414 //
5415 // 2. If that resulting state will trigger a _read, then call _read.
5416 // Note that this may be asynchronous, or synchronous. Yes, it is
5417 // deeply ugly to write APIs this way, but that still doesn't mean
5418 // that the Readable class should behave improperly, as streams are
5419 // designed to be sync/async agnostic.
5420 // Take note if the _read call is sync or async (ie, if the read call
5421 // has returned yet), so that we know whether or not it's safe to emit
5422 // 'readable' etc.
5423 //
5424 // 3. Actually pull the requested chunks out of the buffer and return.
5425
5426 // if we need a readable event, then we need to do some reading.
5427 var doRead = state.needReadable;
5428 debug('need readable', doRead);
5429
5430 // if we currently have less than the highWaterMark, then also read some
5431 if (state.length === 0 || state.length - n < state.highWaterMark) {
5432 doRead = true;
5433 debug('length less than watermark', doRead);
5434 }
5435
5436 // however, if we've ended, then there's no point, and if we're already
5437 // reading, then it's unnecessary.
5438 if (state.ended || state.reading) {
5439 doRead = false;
5440 debug('reading or ended', doRead);
5441 }
5442
5443 if (doRead) {
5444 debug('do read');
5445 state.reading = true;
5446 state.sync = true;
5447 // if the length is currently zero, then we *need* a readable event.
5448 if (state.length === 0)
5449 state.needReadable = true;
5450 // call internal read method
5451 this._read(state.highWaterMark);
5452 state.sync = false;
5453 }
5454
5455 // If _read pushed data synchronously, then `reading` will be false,
5456 // and we need to re-evaluate how much data we can return to the user.
5457 if (doRead && !state.reading)
5458 n = howMuchToRead(nOrig, state);
5459
5460 var ret;
5461 if (n > 0)
5462 ret = fromList(n, state);
5463 else
5464 ret = null;
5465
5466 if (util.isNull(ret)) {
5467 state.needReadable = true;
5468 n = 0;
5469 }
5470
5471 state.length -= n;
5472
5473 // If we have nothing in the buffer, then we want to know
5474 // as soon as we *do* get something into the buffer.
5475 if (state.length === 0 && !state.ended)
5476 state.needReadable = true;
5477
5478 // If we tried to read() past the EOF, then emit end on the next tick.
5479 if (nOrig !== n && state.ended && state.length === 0)
5480 endReadable(this);
5481
5482 if (!util.isNull(ret))
5483 this.emit('data', ret);
5484
5485 return ret;
5486 };
5487
5488 function chunkInvalid(state, chunk) {
5489 var er = null;
5490 if (!util.isBuffer(chunk) &&
5491 !util.isString(chunk) &&
5492 !util.isNullOrUndefined(chunk) &&
5493 !state.objectMode) {
5494 er = new TypeError('Invalid non-string/buffer chunk');
5495 }
5496 return er;
5497 }
5498
5499
5500 function onEofChunk(stream, state) {
5501 if (state.decoder && !state.ended) {
5502 var chunk = state.decoder.end();
5503 if (chunk && chunk.length) {
5504 state.buffer.push(chunk);
5505 state.length += state.objectMode ? 1 : chunk.length;
5506 }
5507 }
5508 state.ended = true;
5509
5510 // emit 'readable' now to make sure it gets picked up.
5511 emitReadable(stream);
5512 }
5513
5514 // Don't emit readable right away in sync mode, because this can trigger
5515 // another read() call => stack overflow. This way, it might trigger
5516 // a nextTick recursion warning, but that's not so bad.
5517 function emitReadable(stream) {
5518 var state = stream._readableState;
5519 state.needReadable = false;
5520 if (!state.emittedReadable) {
5521 debug('emitReadable', state.flowing);
5522 state.emittedReadable = true;
5523 if (state.sync)
5524 process.nextTick(function() {
5525 emitReadable_(stream);
5526 });
5527 else
5528 emitReadable_(stream);
5529 }
5530 }
5531
5532 function emitReadable_(stream) {
5533 debug('emit readable');
5534 stream.emit('readable');
5535 flow(stream);
5536 }
5537
5538
5539 // at this point, the user has presumably seen the 'readable' event,
5540 // and called read() to consume some data. that may have triggered
5541 // in turn another _read(n) call, in which case reading = true if
5542 // it's in progress.
5543 // However, if we're not ended, or reading, and the length < hwm,
5544 // then go ahead and try to read some more preemptively.
5545 function maybeReadMore(stream, state) {
5546 if (!state.readingMore) {
5547 state.readingMore = true;
5548 process.nextTick(function() {
5549 maybeReadMore_(stream, state);
5550 });
5551 }
5552 }
5553
5554 function maybeReadMore_(stream, state) {
5555 var len = state.length;
5556 while (!state.reading && !state.flowing && !state.ended &&
5557 state.length < state.highWaterMark) {
5558 debug('maybeReadMore read 0');
5559 stream.read(0);
5560 if (len === state.length)
5561 // didn't get any data, stop spinning.
5562 break;
5563 else
5564 len = state.length;
5565 }
5566 state.readingMore = false;
5567 }
5568
5569 // abstract method. to be overridden in specific implementation classes.
5570 // call cb(er, data) where data is <= n in length.
5571 // for virtual (non-string, non-buffer) streams, "length" is somewhat
5572 // arbitrary, and perhaps not very meaningful.
5573 Readable.prototype._read = function(n) {
5574 this.emit('error', new Error('not implemented'));
5575 };
5576
5577 Readable.prototype.pipe = function(dest, pipeOpts) {
5578 var src = this;
5579 var state = this._readableState;
5580
5581 switch (state.pipesCount) {
5582 case 0:
5583 state.pipes = dest;
5584 break;
5585 case 1:
5586 state.pipes = [state.pipes, dest];
5587 break;
5588 default:
5589 state.pipes.push(dest);
5590 break;
5591 }
5592 state.pipesCount += 1;
5593 debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
5594
5595 var doEnd = (!pipeOpts || pipeOpts.end !== false) &&
5596 dest !== process.stdout &&
5597 dest !== process.stderr;
5598
5599 var endFn = doEnd ? onend : cleanup;
5600 if (state.endEmitted)
5601 process.nextTick(endFn);
5602 else
5603 src.once('end', endFn);
5604
5605 dest.on('unpipe', onunpipe);
5606 function onunpipe(readable) {
5607 debug('onunpipe');
5608 if (readable === src) {
5609 cleanup();
5610 }
5611 }
5612
5613 function onend() {
5614 debug('onend');
5615 dest.end();
5616 }
5617
5618 // when the dest drains, it reduces the awaitDrain counter
5619 // on the source. This would be more elegant with a .once()
5620 // handler in flow(), but adding and removing repeatedly is
5621 // too slow.
5622 var ondrain = pipeOnDrain(src);
5623 dest.on('drain', ondrain);
5624
5625 function cleanup() {
5626 debug('cleanup');
5627 // cleanup event handlers once the pipe is broken
5628 dest.removeListener('close', onclose);
5629 dest.removeListener('finish', onfinish);
5630 dest.removeListener('drain', ondrain);
5631 dest.removeListener('error', onerror);
5632 dest.removeListener('unpipe', onunpipe);
5633 src.removeListener('end', onend);
5634 src.removeListener('end', cleanup);
5635 src.removeListener('data', ondata);
5636
5637 // if the reader is waiting for a drain event from this
5638 // specific writer, then it would cause it to never start
5639 // flowing again.
5640 // So, if this is awaiting a drain, then we just call it now.
5641 // If we don't know, then assume that we are waiting for one.
5642 if (state.awaitDrain &&
5643 (!dest._writableState || dest._writableState.needDrain))
5644 ondrain();
5645 }
5646
5647 src.on('data', ondata);
5648 function ondata(chunk) {
5649 debug('ondata');
5650 var ret = dest.write(chunk);
5651 if (false === ret) {
5652 debug('false write response, pause',
5653 src._readableState.awaitDrain);
5654 src._readableState.awaitDrain++;
5655 src.pause();
5656 }
5657 }
5658
5659 // if the dest has an error, then stop piping into it.
5660 // however, don't suppress the throwing behavior for this.
5661 function onerror(er) {
5662 debug('onerror', er);
5663 unpipe();
5664 dest.removeListener('error', onerror);
5665 if (EE.listenerCount(dest, 'error') === 0)
5666 dest.emit('error', er);
5667 }
5668 // This is a brutally ugly hack to make sure that our error handler
5669 // is attached before any userland ones. NEVER DO THIS.
5670 if (!dest._events || !dest._events.error)
5671 dest.on('error', onerror);
5672 else if (isArray(dest._events.error))
5673 dest._events.error.unshift(onerror);
5674 else
5675 dest._events.error = [onerror, dest._events.error];
5676
5677
5678
5679 // Both close and finish should trigger unpipe, but only once.
5680 function onclose() {
5681 dest.removeListener('finish', onfinish);
5682 unpipe();
5683 }
5684 dest.once('close', onclose);
5685 function onfinish() {
5686 debug('onfinish');
5687 dest.removeListener('close', onclose);
5688 unpipe();
5689 }
5690 dest.once('finish', onfinish);
5691
5692 function unpipe() {
5693 debug('unpipe');
5694 src.unpipe(dest);
5695 }
5696
5697 // tell the dest that it's being piped to
5698 dest.emit('pipe', src);
5699
5700 // start the flow if it hasn't been started already.
5701 if (!state.flowing) {
5702 debug('pipe resume');
5703 src.resume();
5704 }
5705
5706 return dest;
5707 };
5708
5709 function pipeOnDrain(src) {
5710 return function() {
5711 var state = src._readableState;
5712 debug('pipeOnDrain', state.awaitDrain);
5713 if (state.awaitDrain)
5714 state.awaitDrain--;
5715 if (state.awaitDrain === 0 && EE.listenerCount(src, 'data')) {
5716 state.flowing = true;
5717 flow(src);
5718 }
5719 };
5720 }
5721
5722
5723 Readable.prototype.unpipe = function(dest) {
5724 var state = this._readableState;
5725
5726 // if we're not piping anywhere, then do nothing.
5727 if (state.pipesCount === 0)
5728 return this;
5729
5730 // just one destination. most common case.
5731 if (state.pipesCount === 1) {
5732 // passed in one, but it's not the right one.
5733 if (dest && dest !== state.pipes)
5734 return this;
5735
5736 if (!dest)
5737 dest = state.pipes;
5738
5739 // got a match.
5740 state.pipes = null;
5741 state.pipesCount = 0;
5742 state.flowing = false;
5743 if (dest)
5744 dest.emit('unpipe', this);
5745 return this;
5746 }
5747
5748 // slow case. multiple pipe destinations.
5749
5750 if (!dest) {
5751 // remove all.
5752 var dests = state.pipes;
5753 var len = state.pipesCount;
5754 state.pipes = null;
5755 state.pipesCount = 0;
5756 state.flowing = false;
5757
5758 for (var i = 0; i < len; i++)
5759 dests[i].emit('unpipe', this);
5760 return this;
5761 }
5762
5763 // try to find the right one.
5764 var i = indexOf(state.pipes, dest);
5765 if (i === -1)
5766 return this;
5767
5768 state.pipes.splice(i, 1);
5769 state.pipesCount -= 1;
5770 if (state.pipesCount === 1)
5771 state.pipes = state.pipes[0];
5772
5773 dest.emit('unpipe', this);
5774
5775 return this;
5776 };
5777
5778 // set up data events if they are asked for
5779 // Ensure readable listeners eventually get something
5780 Readable.prototype.on = function(ev, fn) {
5781 var res = Stream.prototype.on.call(this, ev, fn);
5782
5783 // If listening to data, and it has not explicitly been paused,
5784 // then call resume to start the flow of data on the next tick.
5785 if (ev === 'data' && false !== this._readableState.flowing) {
5786 this.resume();
5787 }
5788
5789 if (ev === 'readable' && this.readable) {
5790 var state = this._readableState;
5791 if (!state.readableListening) {
5792 state.readableListening = true;
5793 state.emittedReadable = false;
5794 state.needReadable = true;
5795 if (!state.reading) {
5796 var self = this;
5797 process.nextTick(function() {
5798 debug('readable nexttick read 0');
5799 self.read(0);
5800 });
5801 } else if (state.length) {
5802 emitReadable(this, state);
5803 }
5804 }
5805 }
5806
5807 return res;
5808 };
5809 Readable.prototype.addListener = Readable.prototype.on;
5810
5811 // pause() and resume() are remnants of the legacy readable stream API
5812 // If the user uses them, then switch into old mode.
5813 Readable.prototype.resume = function() {
5814 var state = this._readableState;
5815 if (!state.flowing) {
5816 debug('resume');
5817 state.flowing = true;
5818 if (!state.reading) {
5819 debug('resume read 0');
5820 this.read(0);
5821 }
5822 resume(this, state);
5823 }
5824 return this;
5825 };
5826
5827 function resume(stream, state) {
5828 if (!state.resumeScheduled) {
5829 state.resumeScheduled = true;
5830 process.nextTick(function() {
5831 resume_(stream, state);
5832 });
5833 }
5834 }
5835
5836 function resume_(stream, state) {
5837 state.resumeScheduled = false;
5838 stream.emit('resume');
5839 flow(stream);
5840 if (state.flowing && !state.reading)
5841 stream.read(0);
5842 }
5843
5844 Readable.prototype.pause = function() {
5845 debug('call pause flowing=%j', this._readableState.flowing);
5846 if (false !== this._readableState.flowing) {
5847 debug('pause');
5848 this._readableState.flowing = false;
5849 this.emit('pause');
5850 }
5851 return this;
5852 };
5853
5854 function flow(stream) {
5855 var state = stream._readableState;
5856 debug('flow', state.flowing);
5857 if (state.flowing) {
5858 do {
5859 var chunk = stream.read();
5860 } while (null !== chunk && state.flowing);
5861 }
5862 }
5863
5864 // wrap an old-style stream as the async data source.
5865 // This is *not* part of the readable stream interface.
5866 // It is an ugly unfortunate mess of history.
5867 Readable.prototype.wrap = function(stream) {
5868 var state = this._readableState;
5869 var paused = false;
5870
5871 var self = this;
5872 stream.on('end', function() {
5873 debug('wrapped end');
5874 if (state.decoder && !state.ended) {
5875 var chunk = state.decoder.end();
5876 if (chunk && chunk.length)
5877 self.push(chunk);
5878 }
5879
5880 self.push(null);
5881 });
5882
5883 stream.on('data', function(chunk) {
5884 debug('wrapped data');
5885 if (state.decoder)
5886 chunk = state.decoder.write(chunk);
5887 if (!chunk || !state.objectMode && !chunk.length)
5888 return;
5889
5890 var ret = self.push(chunk);
5891 if (!ret) {
5892 paused = true;
5893 stream.pause();
5894 }
5895 });
5896
5897 // proxy all the other methods.
5898 // important when wrapping filters and duplexes.
5899 for (var i in stream) {
5900 if (util.isFunction(stream[i]) && util.isUndefined(this[i])) {
5901 this[i] = function(method) { return function() {
5902 return stream[method].apply(stream, arguments);
5903 }}(i);
5904 }
5905 }
5906
5907 // proxy certain important events.
5908 var events = ['error', 'close', 'destroy', 'pause', 'resume'];
5909 forEach(events, function(ev) {
5910 stream.on(ev, self.emit.bind(self, ev));
5911 });
5912
5913 // when we try to consume some more bytes, simply unpause the
5914 // underlying stream.
5915 self._read = function(n) {
5916 debug('wrapped _read', n);
5917 if (paused) {
5918 paused = false;
5919 stream.resume();
5920 }
5921 };
5922
5923 return self;
5924 };
5925
5926
5927
5928 // exposed for testing purposes only.
5929 Readable._fromList = fromList;
5930
5931 // Pluck off n bytes from an array of buffers.
5932 // Length is the combined lengths of all the buffers in the list.
5933 function fromList(n, state) {
5934 var list = state.buffer;
5935 var length = state.length;
5936 var stringMode = !!state.decoder;
5937 var objectMode = !!state.objectMode;
5938 var ret;
5939
5940 // nothing in the list, definitely empty.
5941 if (list.length === 0)
5942 return null;
5943
5944 if (length === 0)
5945 ret = null;
5946 else if (objectMode)
5947 ret = list.shift();
5948 else if (!n || n >= length) {
5949 // read it all, truncate the array.
5950 if (stringMode)
5951 ret = list.join('');
5952 else
5953 ret = Buffer.concat(list, length);
5954 list.length = 0;
5955 } else {
5956 // read just some of it.
5957 if (n < list[0].length) {
5958 // just take a part of the first list item.
5959 // slice is the same for buffers and strings.
5960 var buf = list[0];
5961 ret = buf.slice(0, n);
5962 list[0] = buf.slice(n);
5963 } else if (n === list[0].length) {
5964 // first list is a perfect match
5965 ret = list.shift();
5966 } else {
5967 // complex case.
5968 // we have enough to cover it, but it spans past the first buffer.
5969 if (stringMode)
5970 ret = '';
5971 else
5972 ret = new Buffer(n);
5973
5974 var c = 0;
5975 for (var i = 0, l = list.length; i < l && c < n; i++) {
5976 var buf = list[0];
5977 var cpy = Math.min(n - c, buf.length);
5978
5979 if (stringMode)
5980 ret += buf.slice(0, cpy);
5981 else
5982 buf.copy(ret, c, 0, cpy);
5983
5984 if (cpy < buf.length)
5985 list[0] = buf.slice(cpy);
5986 else
5987 list.shift();
5988
5989 c += cpy;
5990 }
5991 }
5992 }
5993
5994 return ret;
5995 }
5996
5997 function endReadable(stream) {
5998 var state = stream._readableState;
5999
6000 // If we get here before consuming all the bytes, then that is a
6001 // bug in node. Should never happen.
6002 if (state.length > 0)
6003 throw new Error('endReadable called on non-empty stream');
6004
6005 if (!state.endEmitted) {
6006 state.ended = true;
6007 process.nextTick(function() {
6008 // Check that we didn't get one last unshift.
6009 if (!state.endEmitted && state.length === 0) {
6010 state.endEmitted = true;
6011 stream.readable = false;
6012 stream.emit('end');
6013 }
6014 });
6015 }
6016 }
6017
6018 function forEach (xs, f) {
6019 for (var i = 0, l = xs.length; i < l; i++) {
6020 f(xs[i], i);
6021 }
6022 }
6023
6024 function indexOf (xs, x) {
6025 for (var i = 0, l = xs.length; i < l; i++) {
6026 if (xs[i] === x) return i;
6027 }
6028 return -1;
6029 }
6030
6031 }).call(this,require('_process'))
6032 },{"./_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){
6033 // Copyright Joyent, Inc. and other Node contributors.
6034 //
6035 // Permission is hereby granted, free of charge, to any person obtaining a
6036 // copy of this software and associated documentation files (the
6037 // "Software"), to deal in the Software without restriction, including
6038 // without limitation the rights to use, copy, modify, merge, publish,
6039 // distribute, sublicense, and/or sell copies of the Software, and to permit
6040 // persons to whom the Software is furnished to do so, subject to the
6041 // following conditions:
6042 //
6043 // The above copyright notice and this permission notice shall be included
6044 // in all copies or substantial portions of the Software.
6045 //
6046 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6047 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6048 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6049 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6050 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6051 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6052 // USE OR OTHER DEALINGS IN THE SOFTWARE.
6053
6054
6055 // a transform stream is a readable/writable stream where you do
6056 // something with the data. Sometimes it's called a "filter",
6057 // but that's not a great name for it, since that implies a thing where
6058 // some bits pass through, and others are simply ignored. (That would
6059 // be a valid example of a transform, of course.)
6060 //
6061 // While the output is causally related to the input, it's not a
6062 // necessarily symmetric or synchronous transformation. For example,
6063 // a zlib stream might take multiple plain-text writes(), and then
6064 // emit a single compressed chunk some time in the future.
6065 //
6066 // Here's how this works:
6067 //
6068 // The Transform stream has all the aspects of the readable and writable
6069 // stream classes. When you write(chunk), that calls _write(chunk,cb)
6070 // internally, and returns false if there's a lot of pending writes
6071 // buffered up. When you call read(), that calls _read(n) until
6072 // there's enough pending readable data buffered up.
6073 //
6074 // In a transform stream, the written data is placed in a buffer. When
6075 // _read(n) is called, it transforms the queued up data, calling the
6076 // buffered _write cb's as it consumes chunks. If consuming a single
6077 // written chunk would result in multiple output chunks, then the first
6078 // outputted bit calls the readcb, and subsequent chunks just go into
6079 // the read buffer, and will cause it to emit 'readable' if necessary.
6080 //
6081 // This way, back-pressure is actually determined by the reading side,
6082 // since _read has to be called to start processing a new chunk. However,
6083 // a pathological inflate type of transform can cause excessive buffering
6084 // here. For example, imagine a stream where every byte of input is
6085 // interpreted as an integer from 0-255, and then results in that many
6086 // bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in
6087 // 1kb of data being output. In this case, you could write a very small
6088 // amount of input, and end up with a very large amount of output. In
6089 // such a pathological inflating mechanism, there'd be no way to tell
6090 // the system to stop doing the transform. A single 4MB write could
6091 // cause the system to run out of memory.
6092 //
6093 // However, even in such a pathological case, only a single written chunk
6094 // would be consumed, and then the rest would wait (un-transformed) until
6095 // the results of the previous transformed chunk were consumed.
6096
6097 module.exports = Transform;
6098
6099 var Duplex = require('./_stream_duplex');
6100
6101 /*<replacement>*/
6102 var util = require('core-util-is');
6103 util.inherits = require('inherits');
6104 /*</replacement>*/
6105
6106 util.inherits(Transform, Duplex);
6107
6108
6109 function TransformState(options, stream) {
6110 this.afterTransform = function(er, data) {
6111 return afterTransform(stream, er, data);
6112 };
6113
6114 this.needTransform = false;
6115 this.transforming = false;
6116 this.writecb = null;
6117 this.writechunk = null;
6118 }
6119
6120 function afterTransform(stream, er, data) {
6121 var ts = stream._transformState;
6122 ts.transforming = false;
6123
6124 var cb = ts.writecb;
6125
6126 if (!cb)
6127 return stream.emit('error', new Error('no writecb in Transform class'));
6128
6129 ts.writechunk = null;
6130 ts.writecb = null;
6131
6132 if (!util.isNullOrUndefined(data))
6133 stream.push(data);
6134
6135 if (cb)
6136 cb(er);
6137
6138 var rs = stream._readableState;
6139 rs.reading = false;
6140 if (rs.needReadable || rs.length < rs.highWaterMark) {
6141 stream._read(rs.highWaterMark);
6142 }
6143 }
6144
6145
6146 function Transform(options) {
6147 if (!(this instanceof Transform))
6148 return new Transform(options);
6149
6150 Duplex.call(this, options);
6151
6152 this._transformState = new TransformState(options, this);
6153
6154 // when the writable side finishes, then flush out anything remaining.
6155 var stream = this;
6156
6157 // start out asking for a readable event once data is transformed.
6158 this._readableState.needReadable = true;
6159
6160 // we have implemented the _read method, and done the other things
6161 // that Readable wants before the first _read call, so unset the
6162 // sync guard flag.
6163 this._readableState.sync = false;
6164
6165 this.once('prefinish', function() {
6166 if (util.isFunction(this._flush))
6167 this._flush(function(er) {
6168 done(stream, er);
6169 });
6170 else
6171 done(stream);
6172 });
6173 }
6174
6175 Transform.prototype.push = function(chunk, encoding) {
6176 this._transformState.needTransform = false;
6177 return Duplex.prototype.push.call(this, chunk, encoding);
6178 };
6179
6180 // This is the part where you do stuff!
6181 // override this function in implementation classes.
6182 // 'chunk' is an input chunk.
6183 //
6184 // Call `push(newChunk)` to pass along transformed output
6185 // to the readable side. You may call 'push' zero or more times.
6186 //
6187 // Call `cb(err)` when you are done with this chunk. If you pass
6188 // an error, then that'll put the hurt on the whole operation. If you
6189 // never call cb(), then you'll never get another chunk.
6190 Transform.prototype._transform = function(chunk, encoding, cb) {
6191 throw new Error('not implemented');
6192 };
6193
6194 Transform.prototype._write = function(chunk, encoding, cb) {
6195 var ts = this._transformState;
6196 ts.writecb = cb;
6197 ts.writechunk = chunk;
6198 ts.writeencoding = encoding;
6199 if (!ts.transforming) {
6200 var rs = this._readableState;
6201 if (ts.needTransform ||
6202 rs.needReadable ||
6203 rs.length < rs.highWaterMark)
6204 this._read(rs.highWaterMark);
6205 }
6206 };
6207
6208 // Doesn't matter what the args are here.
6209 // _transform does all the work.
6210 // That we got here means that the readable side wants more data.
6211 Transform.prototype._read = function(n) {
6212 var ts = this._transformState;
6213
6214 if (!util.isNull(ts.writechunk) && ts.writecb && !ts.transforming) {
6215 ts.transforming = true;
6216 this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
6217 } else {
6218 // mark that we need a transform, so that any data that comes in
6219 // will get processed, now that we've asked for it.
6220 ts.needTransform = true;
6221 }
6222 };
6223
6224
6225 function done(stream, er) {
6226 if (er)
6227 return stream.emit('error', er);
6228
6229 // if there's nothing in the write buffer, then that means
6230 // that nothing more will ever be provided
6231 var ws = stream._writableState;
6232 var ts = stream._transformState;
6233
6234 if (ws.length)
6235 throw new Error('calling transform done when ws.length != 0');
6236
6237 if (ts.transforming)
6238 throw new Error('calling transform done when still transforming');
6239
6240 return stream.push(null);
6241 }
6242
6243 },{"./_stream_duplex":16,"core-util-is":21,"inherits":12}],20:[function(require,module,exports){
6244 (function (process){
6245 // Copyright Joyent, Inc. and other Node contributors.
6246 //
6247 // Permission is hereby granted, free of charge, to any person obtaining a
6248 // copy of this software and associated documentation files (the
6249 // "Software"), to deal in the Software without restriction, including
6250 // without limitation the rights to use, copy, modify, merge, publish,
6251 // distribute, sublicense, and/or sell copies of the Software, and to permit
6252 // persons to whom the Software is furnished to do so, subject to the
6253 // following conditions:
6254 //
6255 // The above copyright notice and this permission notice shall be included
6256 // in all copies or substantial portions of the Software.
6257 //
6258 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6259 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6260 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6261 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6262 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6263 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6264 // USE OR OTHER DEALINGS IN THE SOFTWARE.
6265
6266 // A bit simpler than readable streams.
6267 // Implement an async ._write(chunk, cb), and it'll handle all
6268 // the drain event emission and buffering.
6269
6270 module.exports = Writable;
6271
6272 /*<replacement>*/
6273 var Buffer = require('buffer').Buffer;
6274 /*</replacement>*/
6275
6276 Writable.WritableState = WritableState;
6277
6278
6279 /*<replacement>*/
6280 var util = require('core-util-is');
6281 util.inherits = require('inherits');
6282 /*</replacement>*/
6283
6284 var Stream = require('stream');
6285
6286 util.inherits(Writable, Stream);
6287
6288 function WriteReq(chunk, encoding, cb) {
6289 this.chunk = chunk;
6290 this.encoding = encoding;
6291 this.callback = cb;
6292 }
6293
6294 function WritableState(options, stream) {
6295 var Duplex = require('./_stream_duplex');
6296
6297 options = options || {};
6298
6299 // the point at which write() starts returning false
6300 // Note: 0 is a valid value, means that we always return false if
6301 // the entire buffer is not flushed immediately on write()
6302 var hwm = options.highWaterMark;
6303 var defaultHwm = options.objectMode ? 16 : 16 * 1024;
6304 this.highWaterMark = (hwm || hwm === 0) ? hwm : defaultHwm;
6305
6306 // object stream flag to indicate whether or not this stream
6307 // contains buffers or objects.
6308 this.objectMode = !!options.objectMode;
6309
6310 if (stream instanceof Duplex)
6311 this.objectMode = this.objectMode || !!options.writableObjectMode;
6312
6313 // cast to ints.
6314 this.highWaterMark = ~~this.highWaterMark;
6315
6316 this.needDrain = false;
6317 // at the start of calling end()
6318 this.ending = false;
6319 // when end() has been called, and returned
6320 this.ended = false;
6321 // when 'finish' is emitted
6322 this.finished = false;
6323
6324 // should we decode strings into buffers before passing to _write?
6325 // this is here so that some node-core streams can optimize string
6326 // handling at a lower level.
6327 var noDecode = options.decodeStrings === false;
6328 this.decodeStrings = !noDecode;
6329
6330 // Crypto is kind of old and crusty. Historically, its default string
6331 // encoding is 'binary' so we have to make this configurable.
6332 // Everything else in the universe uses 'utf8', though.
6333 this.defaultEncoding = options.defaultEncoding || 'utf8';
6334
6335 // not an actual buffer we keep track of, but a measurement
6336 // of how much we're waiting to get pushed to some underlying
6337 // socket or file.
6338 this.length = 0;
6339
6340 // a flag to see when we're in the middle of a write.
6341 this.writing = false;
6342
6343 // when true all writes will be buffered until .uncork() call
6344 this.corked = 0;
6345
6346 // a flag to be able to tell if the onwrite cb is called immediately,
6347 // or on a later tick. We set this to true at first, because any
6348 // actions that shouldn't happen until "later" should generally also
6349 // not happen before the first write call.
6350 this.sync = true;
6351
6352 // a flag to know if we're processing previously buffered items, which
6353 // may call the _write() callback in the same tick, so that we don't
6354 // end up in an overlapped onwrite situation.
6355 this.bufferProcessing = false;
6356
6357 // the callback that's passed to _write(chunk,cb)
6358 this.onwrite = function(er) {
6359 onwrite(stream, er);
6360 };
6361
6362 // the callback that the user supplies to write(chunk,encoding,cb)
6363 this.writecb = null;
6364
6365 // the amount that is being written when _write is called.
6366 this.writelen = 0;
6367
6368 this.buffer = [];
6369
6370 // number of pending user-supplied write callbacks
6371 // this must be 0 before 'finish' can be emitted
6372 this.pendingcb = 0;
6373
6374 // emit prefinish if the only thing we're waiting for is _write cbs
6375 // This is relevant for synchronous Transform streams
6376 this.prefinished = false;
6377
6378 // True if the error was already emitted and should not be thrown again
6379 this.errorEmitted = false;
6380 }
6381
6382 function Writable(options) {
6383 var Duplex = require('./_stream_duplex');
6384
6385 // Writable ctor is applied to Duplexes, though they're not
6386 // instanceof Writable, they're instanceof Readable.
6387 if (!(this instanceof Writable) && !(this instanceof Duplex))
6388 return new Writable(options);
6389
6390 this._writableState = new WritableState(options, this);
6391
6392 // legacy.
6393 this.writable = true;
6394
6395 Stream.call(this);
6396 }
6397
6398 // Otherwise people can pipe Writable streams, which is just wrong.
6399 Writable.prototype.pipe = function() {
6400 this.emit('error', new Error('Cannot pipe. Not readable.'));
6401 };
6402
6403
6404 function writeAfterEnd(stream, state, cb) {
6405 var er = new Error('write after end');
6406 // TODO: defer error events consistently everywhere, not just the cb
6407 stream.emit('error', er);
6408 process.nextTick(function() {
6409 cb(er);
6410 });
6411 }
6412
6413 // If we get something that is not a buffer, string, null, or undefined,
6414 // and we're not in objectMode, then that's an error.
6415 // Otherwise stream chunks are all considered to be of length=1, and the
6416 // watermarks determine how many objects to keep in the buffer, rather than
6417 // how many bytes or characters.
6418 function validChunk(stream, state, chunk, cb) {
6419 var valid = true;
6420 if (!util.isBuffer(chunk) &&
6421 !util.isString(chunk) &&
6422 !util.isNullOrUndefined(chunk) &&
6423 !state.objectMode) {
6424 var er = new TypeError('Invalid non-string/buffer chunk');
6425 stream.emit('error', er);
6426 process.nextTick(function() {
6427 cb(er);
6428 });
6429 valid = false;
6430 }
6431 return valid;
6432 }
6433
6434 Writable.prototype.write = function(chunk, encoding, cb) {
6435 var state = this._writableState;
6436 var ret = false;
6437
6438 if (util.isFunction(encoding)) {
6439 cb = encoding;
6440 encoding = null;
6441 }
6442
6443 if (util.isBuffer(chunk))
6444 encoding = 'buffer';
6445 else if (!encoding)
6446 encoding = state.defaultEncoding;
6447
6448 if (!util.isFunction(cb))
6449 cb = function() {};
6450
6451 if (state.ended)
6452 writeAfterEnd(this, state, cb);
6453 else if (validChunk(this, state, chunk, cb)) {
6454 state.pendingcb++;
6455 ret = writeOrBuffer(this, state, chunk, encoding, cb);
6456 }
6457
6458 return ret;
6459 };
6460
6461 Writable.prototype.cork = function() {
6462 var state = this._writableState;
6463
6464 state.corked++;
6465 };
6466
6467 Writable.prototype.uncork = function() {
6468 var state = this._writableState;
6469
6470 if (state.corked) {
6471 state.corked--;
6472
6473 if (!state.writing &&
6474 !state.corked &&
6475 !state.finished &&
6476 !state.bufferProcessing &&
6477 state.buffer.length)
6478 clearBuffer(this, state);
6479 }
6480 };
6481
6482 function decodeChunk(state, chunk, encoding) {
6483 if (!state.objectMode &&
6484 state.decodeStrings !== false &&
6485 util.isString(chunk)) {
6486 chunk = new Buffer(chunk, encoding);
6487 }
6488 return chunk;
6489 }
6490
6491 // if we're already writing something, then just put this
6492 // in the queue, and wait our turn. Otherwise, call _write
6493 // If we return false, then we need a drain event, so set that flag.
6494 function writeOrBuffer(stream, state, chunk, encoding, cb) {
6495 chunk = decodeChunk(state, chunk, encoding);
6496 if (util.isBuffer(chunk))
6497 encoding = 'buffer';
6498 var len = state.objectMode ? 1 : chunk.length;
6499
6500 state.length += len;
6501
6502 var ret = state.length < state.highWaterMark;
6503 // we must ensure that previous needDrain will not be reset to false.
6504 if (!ret)
6505 state.needDrain = true;
6506
6507 if (state.writing || state.corked)
6508 state.buffer.push(new WriteReq(chunk, encoding, cb));
6509 else
6510 doWrite(stream, state, false, len, chunk, encoding, cb);
6511
6512 return ret;
6513 }
6514
6515 function doWrite(stream, state, writev, len, chunk, encoding, cb) {
6516 state.writelen = len;
6517 state.writecb = cb;
6518 state.writing = true;
6519 state.sync = true;
6520 if (writev)
6521 stream._writev(chunk, state.onwrite);
6522 else
6523 stream._write(chunk, encoding, state.onwrite);
6524 state.sync = false;
6525 }
6526
6527 function onwriteError(stream, state, sync, er, cb) {
6528 if (sync)
6529 process.nextTick(function() {
6530 state.pendingcb--;
6531 cb(er);
6532 });
6533 else {
6534 state.pendingcb--;
6535 cb(er);
6536 }
6537
6538 stream._writableState.errorEmitted = true;
6539 stream.emit('error', er);
6540 }
6541
6542 function onwriteStateUpdate(state) {
6543 state.writing = false;
6544 state.writecb = null;
6545 state.length -= state.writelen;
6546 state.writelen = 0;
6547 }
6548
6549 function onwrite(stream, er) {
6550 var state = stream._writableState;
6551 var sync = state.sync;
6552 var cb = state.writecb;
6553
6554 onwriteStateUpdate(state);
6555
6556 if (er)
6557 onwriteError(stream, state, sync, er, cb);
6558 else {
6559 // Check if we're actually ready to finish, but don't emit yet
6560 var finished = needFinish(stream, state);
6561
6562 if (!finished &&
6563 !state.corked &&
6564 !state.bufferProcessing &&
6565 state.buffer.length) {
6566 clearBuffer(stream, state);
6567 }
6568
6569 if (sync) {
6570 process.nextTick(function() {
6571 afterWrite(stream, state, finished, cb);
6572 });
6573 } else {
6574 afterWrite(stream, state, finished, cb);
6575 }
6576 }
6577 }
6578
6579 function afterWrite(stream, state, finished, cb) {
6580 if (!finished)
6581 onwriteDrain(stream, state);
6582 state.pendingcb--;
6583 cb();
6584 finishMaybe(stream, state);
6585 }
6586
6587 // Must force callback to be called on nextTick, so that we don't
6588 // emit 'drain' before the write() consumer gets the 'false' return
6589 // value, and has a chance to attach a 'drain' listener.
6590 function onwriteDrain(stream, state) {
6591 if (state.length === 0 && state.needDrain) {
6592 state.needDrain = false;
6593 stream.emit('drain');
6594 }
6595 }
6596
6597
6598 // if there's something in the buffer waiting, then process it
6599 function clearBuffer(stream, state) {
6600 state.bufferProcessing = true;
6601
6602 if (stream._writev && state.buffer.length > 1) {
6603 // Fast case, write everything using _writev()
6604 var cbs = [];
6605 for (var c = 0; c < state.buffer.length; c++)
6606 cbs.push(state.buffer[c].callback);
6607
6608 // count the one we are adding, as well.
6609 // TODO(isaacs) clean this up
6610 state.pendingcb++;
6611 doWrite(stream, state, true, state.length, state.buffer, '', function(err) {
6612 for (var i = 0; i < cbs.length; i++) {
6613 state.pendingcb--;
6614 cbs[i](err);
6615 }
6616 });
6617
6618 // Clear buffer
6619 state.buffer = [];
6620 } else {
6621 // Slow case, write chunks one-by-one
6622 for (var c = 0; c < state.buffer.length; c++) {
6623 var entry = state.buffer[c];
6624 var chunk = entry.chunk;
6625 var encoding = entry.encoding;
6626 var cb = entry.callback;
6627 var len = state.objectMode ? 1 : chunk.length;
6628
6629 doWrite(stream, state, false, len, chunk, encoding, cb);
6630
6631 // if we didn't call the onwrite immediately, then
6632 // it means that we need to wait until it does.
6633 // also, that means that the chunk and cb are currently
6634 // being processed, so move the buffer counter past them.
6635 if (state.writing) {
6636 c++;
6637 break;
6638 }
6639 }
6640
6641 if (c < state.buffer.length)
6642 state.buffer = state.buffer.slice(c);
6643 else
6644 state.buffer.length = 0;
6645 }
6646
6647 state.bufferProcessing = false;
6648 }
6649
6650 Writable.prototype._write = function(chunk, encoding, cb) {
6651 cb(new Error('not implemented'));
6652
6653 };
6654
6655 Writable.prototype._writev = null;
6656
6657 Writable.prototype.end = function(chunk, encoding, cb) {
6658 var state = this._writableState;
6659
6660 if (util.isFunction(chunk)) {
6661 cb = chunk;
6662 chunk = null;
6663 encoding = null;
6664 } else if (util.isFunction(encoding)) {
6665 cb = encoding;
6666 encoding = null;
6667 }
6668
6669 if (!util.isNullOrUndefined(chunk))
6670 this.write(chunk, encoding);
6671
6672 // .end() fully uncorks
6673 if (state.corked) {
6674 state.corked = 1;
6675 this.uncork();
6676 }
6677
6678 // ignore unnecessary end() calls.
6679 if (!state.ending && !state.finished)
6680 endWritable(this, state, cb);
6681 };
6682
6683
6684 function needFinish(stream, state) {
6685 return (state.ending &&
6686 state.length === 0 &&
6687 !state.finished &&
6688 !state.writing);
6689 }
6690
6691 function prefinish(stream, state) {
6692 if (!state.prefinished) {
6693 state.prefinished = true;
6694 stream.emit('prefinish');
6695 }
6696 }
6697
6698 function finishMaybe(stream, state) {
6699 var need = needFinish(stream, state);
6700 if (need) {
6701 if (state.pendingcb === 0) {
6702 prefinish(stream, state);
6703 state.finished = true;
6704 stream.emit('finish');
6705 } else
6706 prefinish(stream, state);
6707 }
6708 return need;
6709 }
6710
6711 function endWritable(stream, state, cb) {
6712 state.ending = true;
6713 finishMaybe(stream, state);
6714 if (cb) {
6715 if (state.finished)
6716 process.nextTick(cb);
6717 else
6718 stream.once('finish', cb);
6719 }
6720 state.ended = true;
6721 }
6722
6723 }).call(this,require('_process'))
6724 },{"./_stream_duplex":16,"_process":14,"buffer":7,"core-util-is":21,"inherits":12,"stream":26}],21:[function(require,module,exports){
6725 (function (Buffer){
6726 // Copyright Joyent, Inc. and other Node contributors.
6727 //
6728 // Permission is hereby granted, free of charge, to any person obtaining a
6729 // copy of this software and associated documentation files (the
6730 // "Software"), to deal in the Software without restriction, including
6731 // without limitation the rights to use, copy, modify, merge, publish,
6732 // distribute, sublicense, and/or sell copies of the Software, and to permit
6733 // persons to whom the Software is furnished to do so, subject to the
6734 // following conditions:
6735 //
6736 // The above copyright notice and this permission notice shall be included
6737 // in all copies or substantial portions of the Software.
6738 //
6739 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6740 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6741 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6742 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6743 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6744 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6745 // USE OR OTHER DEALINGS IN THE SOFTWARE.
6746
6747 // NOTE: These type checking functions intentionally don't use `instanceof`
6748 // because it is fragile and can be easily faked with `Object.create()`.
6749 function isArray(ar) {
6750 return Array.isArray(ar);
6751 }
6752 exports.isArray = isArray;
6753
6754 function isBoolean(arg) {
6755 return typeof arg === 'boolean';
6756 }
6757 exports.isBoolean = isBoolean;
6758
6759 function isNull(arg) {
6760 return arg === null;
6761 }
6762 exports.isNull = isNull;
6763
6764 function isNullOrUndefined(arg) {
6765 return arg == null;
6766 }
6767 exports.isNullOrUndefined = isNullOrUndefined;
6768
6769 function isNumber(arg) {
6770 return typeof arg === 'number';
6771 }
6772 exports.isNumber = isNumber;
6773
6774 function isString(arg) {
6775 return typeof arg === 'string';
6776 }
6777 exports.isString = isString;
6778
6779 function isSymbol(arg) {
6780 return typeof arg === 'symbol';
6781 }
6782 exports.isSymbol = isSymbol;
6783
6784 function isUndefined(arg) {
6785 return arg === void 0;
6786 }
6787 exports.isUndefined = isUndefined;
6788
6789 function isRegExp(re) {
6790 return isObject(re) && objectToString(re) === '[object RegExp]';
6791 }
6792 exports.isRegExp = isRegExp;
6793
6794 function isObject(arg) {
6795 return typeof arg === 'object' && arg !== null;
6796 }
6797 exports.isObject = isObject;
6798
6799 function isDate(d) {
6800 return isObject(d) && objectToString(d) === '[object Date]';
6801 }
6802 exports.isDate = isDate;
6803
6804 function isError(e) {
6805 return isObject(e) &&
6806 (objectToString(e) === '[object Error]' || e instanceof Error);
6807 }
6808 exports.isError = isError;
6809
6810 function isFunction(arg) {
6811 return typeof arg === 'function';
6812 }
6813 exports.isFunction = isFunction;
6814
6815 function isPrimitive(arg) {
6816 return arg === null ||
6817 typeof arg === 'boolean' ||
6818 typeof arg === 'number' ||
6819 typeof arg === 'string' ||
6820 typeof arg === 'symbol' || // ES6 symbol
6821 typeof arg === 'undefined';
6822 }
6823 exports.isPrimitive = isPrimitive;
6824
6825 function isBuffer(arg) {
6826 return Buffer.isBuffer(arg);
6827 }
6828 exports.isBuffer = isBuffer;
6829
6830 function objectToString(o) {
6831 return Object.prototype.toString.call(o);
6832 }
6833 }).call(this,require("buffer").Buffer)
6834 },{"buffer":7}],22:[function(require,module,exports){
6835 module.exports = require("./lib/_stream_passthrough.js")
6836
6837 },{"./lib/_stream_passthrough.js":17}],23:[function(require,module,exports){
6838 exports = module.exports = require('./lib/_stream_readable.js');
6839 exports.Stream = require('stream');
6840 exports.Readable = exports;
6841 exports.Writable = require('./lib/_stream_writable.js');
6842 exports.Duplex = require('./lib/_stream_duplex.js');
6843 exports.Transform = require('./lib/_stream_transform.js');
6844 exports.PassThrough = require('./lib/_stream_passthrough.js');
6845
6846 },{"./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){
6847 module.exports = require("./lib/_stream_transform.js")
6848
6849 },{"./lib/_stream_transform.js":19}],25:[function(require,module,exports){
6850 module.exports = require("./lib/_stream_writable.js")
6851
6852 },{"./lib/_stream_writable.js":20}],26:[function(require,module,exports){
6853 // Copyright Joyent, Inc. and other Node contributors.
6854 //
6855 // Permission is hereby granted, free of charge, to any person obtaining a
6856 // copy of this software and associated documentation files (the
6857 // "Software"), to deal in the Software without restriction, including
6858 // without limitation the rights to use, copy, modify, merge, publish,
6859 // distribute, sublicense, and/or sell copies of the Software, and to permit
6860 // persons to whom the Software is furnished to do so, subject to the
6861 // following conditions:
6862 //
6863 // The above copyright notice and this permission notice shall be included
6864 // in all copies or substantial portions of the Software.
6865 //
6866 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6867 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6868 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6869 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6870 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6871 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6872 // USE OR OTHER DEALINGS IN THE SOFTWARE.
6873
6874 module.exports = Stream;
6875
6876 var EE = require('events').EventEmitter;
6877 var inherits = require('inherits');
6878
6879 inherits(Stream, EE);
6880 Stream.Readable = require('readable-stream/readable.js');
6881 Stream.Writable = require('readable-stream/writable.js');
6882 Stream.Duplex = require('readable-stream/duplex.js');
6883 Stream.Transform = require('readable-stream/transform.js');
6884 Stream.PassThrough = require('readable-stream/passthrough.js');
6885
6886 // Backwards-compat with node 0.4.x
6887 Stream.Stream = Stream;
6888
6889
6890
6891 // old-style streams. Note that the pipe method (the only relevant
6892 // part of this class) is overridden in the Readable class.
6893
6894 function Stream() {
6895 EE.call(this);
6896 }
6897
6898 Stream.prototype.pipe = function(dest, options) {
6899 var source = this;
6900
6901 function ondata(chunk) {
6902 if (dest.writable) {
6903 if (false === dest.write(chunk) && source.pause) {
6904 source.pause();
6905 }
6906 }
6907 }
6908
6909 source.on('data', ondata);
6910
6911 function ondrain() {
6912 if (source.readable && source.resume) {
6913 source.resume();
6914 }
6915 }
6916
6917 dest.on('drain', ondrain);
6918
6919 // If the 'end' option is not supplied, dest.end() will be called when
6920 // source gets the 'end' or 'close' events. Only dest.end() once.
6921 if (!dest._isStdio && (!options || options.end !== false)) {
6922 source.on('end', onend);
6923 source.on('close', onclose);
6924 }
6925
6926 var didOnEnd = false;
6927 function onend() {
6928 if (didOnEnd) return;
6929 didOnEnd = true;
6930
6931 dest.end();
6932 }
6933
6934
6935 function onclose() {
6936 if (didOnEnd) return;
6937 didOnEnd = true;
6938
6939 if (typeof dest.destroy === 'function') dest.destroy();
6940 }
6941
6942 // don't leave dangling pipes when there are errors.
6943 function onerror(er) {
6944 cleanup();
6945 if (EE.listenerCount(this, 'error') === 0) {
6946 throw er; // Unhandled stream error in pipe.
6947 }
6948 }
6949
6950 source.on('error', onerror);
6951 dest.on('error', onerror);
6952
6953 // remove all the event listeners that were added.
6954 function cleanup() {
6955 source.removeListener('data', ondata);
6956 dest.removeListener('drain', ondrain);
6957
6958 source.removeListener('end', onend);
6959 source.removeListener('close', onclose);
6960
6961 source.removeListener('error', onerror);
6962 dest.removeListener('error', onerror);
6963
6964 source.removeListener('end', cleanup);
6965 source.removeListener('close', cleanup);
6966
6967 dest.removeListener('close', cleanup);
6968 }
6969
6970 source.on('end', cleanup);
6971 source.on('close', cleanup);
6972
6973 dest.on('close', cleanup);
6974
6975 dest.emit('pipe', source);
6976
6977 // Allow for unix-like usage: A.pipe(B).pipe(C)
6978 return dest;
6979 };
6980
6981 },{"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){
6982 // Copyright Joyent, Inc. and other Node contributors.
6983 //
6984 // Permission is hereby granted, free of charge, to any person obtaining a
6985 // copy of this software and associated documentation files (the
6986 // "Software"), to deal in the Software without restriction, including
6987 // without limitation the rights to use, copy, modify, merge, publish,
6988 // distribute, sublicense, and/or sell copies of the Software, and to permit
6989 // persons to whom the Software is furnished to do so, subject to the
6990 // following conditions:
6991 //
6992 // The above copyright notice and this permission notice shall be included
6993 // in all copies or substantial portions of the Software.
6994 //
6995 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6996 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6997 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6998 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6999 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
7000 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
7001 // USE OR OTHER DEALINGS IN THE SOFTWARE.
7002
7003 var Buffer = require('buffer').Buffer;
7004
7005 var isBufferEncoding = Buffer.isEncoding
7006 || function(encoding) {
7007 switch (encoding && encoding.toLowerCase()) {
7008 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;
7009 default: return false;
7010 }
7011 }
7012
7013
7014 function assertEncoding(encoding) {
7015 if (encoding && !isBufferEncoding(encoding)) {
7016 throw new Error('Unknown encoding: ' + encoding);
7017 }
7018 }
7019
7020 // StringDecoder provides an interface for efficiently splitting a series of
7021 // buffers into a series of JS strings without breaking apart multi-byte
7022 // characters. CESU-8 is handled as part of the UTF-8 encoding.
7023 //
7024 // @TODO Handling all encodings inside a single object makes it very difficult
7025 // to reason about this code, so it should be split up in the future.
7026 // @TODO There should be a utf8-strict encoding that rejects invalid UTF-8 code
7027 // points as used by CESU-8.
7028 var StringDecoder = exports.StringDecoder = function(encoding) {
7029 this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, '');
7030 assertEncoding(encoding);
7031 switch (this.encoding) {
7032 case 'utf8':
7033 // CESU-8 represents each of Surrogate Pair by 3-bytes
7034 this.surrogateSize = 3;
7035 break;
7036 case 'ucs2':
7037 case 'utf16le':
7038 // UTF-16 represents each of Surrogate Pair by 2-bytes
7039 this.surrogateSize = 2;
7040 this.detectIncompleteChar = utf16DetectIncompleteChar;
7041 break;
7042 case 'base64':
7043 // Base-64 stores 3 bytes in 4 chars, and pads the remainder.
7044 this.surrogateSize = 3;
7045 this.detectIncompleteChar = base64DetectIncompleteChar;
7046 break;
7047 default:
7048 this.write = passThroughWrite;
7049 return;
7050 }
7051
7052 // Enough space to store all bytes of a single character. UTF-8 needs 4
7053 // bytes, but CESU-8 may require up to 6 (3 bytes per surrogate).
7054 this.charBuffer = new Buffer(6);
7055 // Number of bytes received for the current incomplete multi-byte character.
7056 this.charReceived = 0;
7057 // Number of bytes expected for the current incomplete multi-byte character.
7058 this.charLength = 0;
7059 };
7060
7061
7062 // write decodes the given buffer and returns it as JS string that is
7063 // guaranteed to not contain any partial multi-byte characters. Any partial
7064 // character found at the end of the buffer is buffered up, and will be
7065 // returned when calling write again with the remaining bytes.
7066 //
7067 // Note: Converting a Buffer containing an orphan surrogate to a String
7068 // currently works, but converting a String to a Buffer (via `new Buffer`, or
7069 // Buffer#write) will replace incomplete surrogates with the unicode
7070 // replacement character. See https://codereview.chromium.org/121173009/ .
7071 StringDecoder.prototype.write = function(buffer) {
7072 var charStr = '';
7073 // if our last write ended with an incomplete multibyte character
7074 while (this.charLength) {
7075 // determine how many remaining bytes this buffer has to offer for this char
7076 var available = (buffer.length >= this.charLength - this.charReceived) ?
7077 this.charLength - this.charReceived :
7078 buffer.length;
7079
7080 // add the new bytes to the char buffer
7081 buffer.copy(this.charBuffer, this.charReceived, 0, available);
7082 this.charReceived += available;
7083
7084 if (this.charReceived < this.charLength) {
7085 // still not enough chars in this buffer? wait for more ...
7086 return '';
7087 }
7088
7089 // remove bytes belonging to the current character from the buffer
7090 buffer = buffer.slice(available, buffer.length);
7091
7092 // get the character that was split
7093 charStr = this.charBuffer.slice(0, this.charLength).toString(this.encoding);
7094
7095 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
7096 var charCode = charStr.charCodeAt(charStr.length - 1);
7097 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
7098 this.charLength += this.surrogateSize;
7099 charStr = '';
7100 continue;
7101 }
7102 this.charReceived = this.charLength = 0;
7103
7104 // if there are no more bytes in this buffer, just emit our char
7105 if (buffer.length === 0) {
7106 return charStr;
7107 }
7108 break;
7109 }
7110
7111 // determine and set charLength / charReceived
7112 this.detectIncompleteChar(buffer);
7113
7114 var end = buffer.length;
7115 if (this.charLength) {
7116 // buffer the incomplete character bytes we got
7117 buffer.copy(this.charBuffer, 0, buffer.length - this.charReceived, end);
7118 end -= this.charReceived;
7119 }
7120
7121 charStr += buffer.toString(this.encoding, 0, end);
7122
7123 var end = charStr.length - 1;
7124 var charCode = charStr.charCodeAt(end);
7125 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
7126 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
7127 var size = this.surrogateSize;
7128 this.charLength += size;
7129 this.charReceived += size;
7130 this.charBuffer.copy(this.charBuffer, size, 0, size);
7131 buffer.copy(this.charBuffer, 0, 0, size);
7132 return charStr.substring(0, end);
7133 }
7134
7135 // or just emit the charStr
7136 return charStr;
7137 };
7138
7139 // detectIncompleteChar determines if there is an incomplete UTF-8 character at
7140 // the end of the given buffer. If so, it sets this.charLength to the byte
7141 // length that character, and sets this.charReceived to the number of bytes
7142 // that are available for this character.
7143 StringDecoder.prototype.detectIncompleteChar = function(buffer) {
7144 // determine how many bytes we have to check at the end of this buffer
7145 var i = (buffer.length >= 3) ? 3 : buffer.length;
7146
7147 // Figure out if one of the last i bytes of our buffer announces an
7148 // incomplete char.
7149 for (; i > 0; i--) {
7150 var c = buffer[buffer.length - i];
7151
7152 // See http://en.wikipedia.org/wiki/UTF-8#Description
7153
7154 // 110XXXXX
7155 if (i == 1 && c >> 5 == 0x06) {
7156 this.charLength = 2;
7157 break;
7158 }
7159
7160 // 1110XXXX
7161 if (i <= 2 && c >> 4 == 0x0E) {
7162 this.charLength = 3;
7163 break;
7164 }
7165
7166 // 11110XXX
7167 if (i <= 3 && c >> 3 == 0x1E) {
7168 this.charLength = 4;
7169 break;
7170 }
7171 }
7172 this.charReceived = i;
7173 };
7174
7175 StringDecoder.prototype.end = function(buffer) {
7176 var res = '';
7177 if (buffer && buffer.length)
7178 res = this.write(buffer);
7179
7180 if (this.charReceived) {
7181 var cr = this.charReceived;
7182 var buf = this.charBuffer;
7183 var enc = this.encoding;
7184 res += buf.slice(0, cr).toString(enc);
7185 }
7186
7187 return res;
7188 };
7189
7190 function passThroughWrite(buffer) {
7191 return buffer.toString(this.encoding);
7192 }
7193
7194 function utf16DetectIncompleteChar(buffer) {
7195 this.charReceived = buffer.length % 2;
7196 this.charLength = this.charReceived ? 2 : 0;
7197 }
7198
7199 function base64DetectIncompleteChar(buffer) {
7200 this.charReceived = buffer.length % 3;
7201 this.charLength = this.charReceived ? 3 : 0;
7202 }
7203
7204 },{"buffer":7}],28:[function(require,module,exports){
7205 module.exports = function isBuffer(arg) {
7206 return arg && typeof arg === 'object'
7207 && typeof arg.copy === 'function'
7208 && typeof arg.fill === 'function'
7209 && typeof arg.readUInt8 === 'function';
7210 }
7211 },{}],29:[function(require,module,exports){
7212 (function (process,global){
7213 // Copyright Joyent, Inc. and other Node contributors.
7214 //
7215 // Permission is hereby granted, free of charge, to any person obtaining a
7216 // copy of this software and associated documentation files (the
7217 // "Software"), to deal in the Software without restriction, including
7218 // without limitation the rights to use, copy, modify, merge, publish,
7219 // distribute, sublicense, and/or sell copies of the Software, and to permit
7220 // persons to whom the Software is furnished to do so, subject to the
7221 // following conditions:
7222 //
7223 // The above copyright notice and this permission notice shall be included
7224 // in all copies or substantial portions of the Software.
7225 //
7226 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
7227 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
7228 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
7229 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
7230 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
7231 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
7232 // USE OR OTHER DEALINGS IN THE SOFTWARE.
7233
7234 var formatRegExp = /%[sdj%]/g;
7235 exports.format = function(f) {
7236 if (!isString(f)) {
7237 var objects = [];
7238 for (var i = 0; i < arguments.length; i++) {
7239 objects.push(inspect(arguments[i]));
7240 }
7241 return objects.join(' ');
7242 }
7243
7244 var i = 1;
7245 var args = arguments;
7246 var len = args.length;
7247 var str = String(f).replace(formatRegExp, function(x) {
7248 if (x === '%%') return '%';
7249 if (i >= len) return x;
7250 switch (x) {
7251 case '%s': return String(args[i++]);
7252 case '%d': return Number(args[i++]);
7253 case '%j':
7254 try {
7255 return JSON.stringify(args[i++]);
7256 } catch (_) {
7257 return '[Circular]';
7258 }
7259 default:
7260 return x;
7261 }
7262 });
7263 for (var x = args[i]; i < len; x = args[++i]) {
7264 if (isNull(x) || !isObject(x)) {
7265 str += ' ' + x;
7266 } else {
7267 str += ' ' + inspect(x);
7268 }
7269 }
7270 return str;
7271 };
7272
7273
7274 // Mark that a method should not be used.
7275 // Returns a modified function which warns once by default.
7276 // If --no-deprecation is set, then it is a no-op.
7277 exports.deprecate = function(fn, msg) {
7278 // Allow for deprecating things in the process of starting up.
7279 if (isUndefined(global.process)) {
7280 return function() {
7281 return exports.deprecate(fn, msg).apply(this, arguments);
7282 };
7283 }
7284
7285 if (process.noDeprecation === true) {
7286 return fn;
7287 }
7288
7289 var warned = false;
7290 function deprecated() {
7291 if (!warned) {
7292 if (process.throwDeprecation) {
7293 throw new Error(msg);
7294 } else if (process.traceDeprecation) {
7295 console.trace(msg);
7296 } else {
7297 console.error(msg);
7298 }
7299 warned = true;
7300 }
7301 return fn.apply(this, arguments);
7302 }
7303
7304 return deprecated;
7305 };
7306
7307
7308 var debugs = {};
7309 var debugEnviron;
7310 exports.debuglog = function(set) {
7311 if (isUndefined(debugEnviron))
7312 debugEnviron = process.env.NODE_DEBUG || '';
7313 set = set.toUpperCase();
7314 if (!debugs[set]) {
7315 if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
7316 var pid = process.pid;
7317 debugs[set] = function() {
7318 var msg = exports.format.apply(exports, arguments);
7319 console.error('%s %d: %s', set, pid, msg);
7320 };
7321 } else {
7322 debugs[set] = function() {};
7323 }
7324 }
7325 return debugs[set];
7326 };
7327
7328
7329 /**
7330 * Echos the value of a value. Trys to print the value out
7331 * in the best way possible given the different types.
7332 *
7333 * @param {Object} obj The object to print out.
7334 * @param {Object} opts Optional options object that alters the output.
7335 */
7336 /* legacy: obj, showHidden, depth, colors*/
7337 function inspect(obj, opts) {
7338 // default options
7339 var ctx = {
7340 seen: [],
7341 stylize: stylizeNoColor
7342 };
7343 // legacy...
7344 if (arguments.length >= 3) ctx.depth = arguments[2];
7345 if (arguments.length >= 4) ctx.colors = arguments[3];
7346 if (isBoolean(opts)) {
7347 // legacy...
7348 ctx.showHidden = opts;
7349 } else if (opts) {
7350 // got an "options" object
7351 exports._extend(ctx, opts);
7352 }
7353 // set default options
7354 if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
7355 if (isUndefined(ctx.depth)) ctx.depth = 2;
7356 if (isUndefined(ctx.colors)) ctx.colors = false;
7357 if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
7358 if (ctx.colors) ctx.stylize = stylizeWithColor;
7359 return formatValue(ctx, obj, ctx.depth);
7360 }
7361 exports.inspect = inspect;
7362
7363
7364 // http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
7365 inspect.colors = {
7366 'bold' : [1, 22],
7367 'italic' : [3, 23],
7368 'underline' : [4, 24],
7369 'inverse' : [7, 27],
7370 'white' : [37, 39],
7371 'grey' : [90, 39],
7372 'black' : [30, 39],
7373 'blue' : [34, 39],
7374 'cyan' : [36, 39],
7375 'green' : [32, 39],
7376 'magenta' : [35, 39],
7377 'red' : [31, 39],
7378 'yellow' : [33, 39]
7379 };
7380
7381 // Don't use 'blue' not visible on cmd.exe
7382 inspect.styles = {
7383 'special': 'cyan',
7384 'number': 'yellow',
7385 'boolean': 'yellow',
7386 'undefined': 'grey',
7387 'null': 'bold',
7388 'string': 'green',
7389 'date': 'magenta',
7390 // "name": intentionally not styling
7391 'regexp': 'red'
7392 };
7393
7394
7395 function stylizeWithColor(str, styleType) {
7396 var style = inspect.styles[styleType];
7397
7398 if (style) {
7399 return '\u001b[' + inspect.colors[style][0] + 'm' + str +
7400 '\u001b[' + inspect.colors[style][1] + 'm';
7401 } else {
7402 return str;
7403 }
7404 }
7405
7406
7407 function stylizeNoColor(str, styleType) {
7408 return str;
7409 }
7410
7411
7412 function arrayToHash(array) {
7413 var hash = {};
7414
7415 array.forEach(function(val, idx) {
7416 hash[val] = true;
7417 });
7418
7419 return hash;
7420 }
7421
7422
7423 function formatValue(ctx, value, recurseTimes) {
7424 // Provide a hook for user-specified inspect functions.
7425 // Check that value is an object with an inspect function on it
7426 if (ctx.customInspect &&
7427 value &&
7428 isFunction(value.inspect) &&
7429 // Filter out the util module, it's inspect function is special
7430 value.inspect !== exports.inspect &&
7431 // Also filter out any prototype objects using the circular check.
7432 !(value.constructor && value.constructor.prototype === value)) {
7433 var ret = value.inspect(recurseTimes, ctx);
7434 if (!isString(ret)) {
7435 ret = formatValue(ctx, ret, recurseTimes);
7436 }
7437 return ret;
7438 }
7439
7440 // Primitive types cannot have properties
7441 var primitive = formatPrimitive(ctx, value);
7442 if (primitive) {
7443 return primitive;
7444 }
7445
7446 // Look up the keys of the object.
7447 var keys = Object.keys(value);
7448 var visibleKeys = arrayToHash(keys);
7449
7450 if (ctx.showHidden) {
7451 keys = Object.getOwnPropertyNames(value);
7452 }
7453
7454 // IE doesn't make error fields non-enumerable
7455 // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx
7456 if (isError(value)
7457 && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {
7458 return formatError(value);
7459 }
7460
7461 // Some type of object without properties can be shortcutted.
7462 if (keys.length === 0) {
7463 if (isFunction(value)) {
7464 var name = value.name ? ': ' + value.name : '';
7465 return ctx.stylize('[Function' + name + ']', 'special');
7466 }
7467 if (isRegExp(value)) {
7468 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
7469 }
7470 if (isDate(value)) {
7471 return ctx.stylize(Date.prototype.toString.call(value), 'date');
7472 }
7473 if (isError(value)) {
7474 return formatError(value);
7475 }
7476 }
7477
7478 var base = '', array = false, braces = ['{', '}'];
7479
7480 // Make Array say that they are Array
7481 if (isArray(value)) {
7482 array = true;
7483 braces = ['[', ']'];
7484 }
7485
7486 // Make functions say that they are functions
7487 if (isFunction(value)) {
7488 var n = value.name ? ': ' + value.name : '';
7489 base = ' [Function' + n + ']';
7490 }
7491
7492 // Make RegExps say that they are RegExps
7493 if (isRegExp(value)) {
7494 base = ' ' + RegExp.prototype.toString.call(value);
7495 }
7496
7497 // Make dates with properties first say the date
7498 if (isDate(value)) {
7499 base = ' ' + Date.prototype.toUTCString.call(value);
7500 }
7501
7502 // Make error with message first say the error
7503 if (isError(value)) {
7504 base = ' ' + formatError(value);
7505 }
7506
7507 if (keys.length === 0 && (!array || value.length == 0)) {
7508 return braces[0] + base + braces[1];
7509 }
7510
7511 if (recurseTimes < 0) {
7512 if (isRegExp(value)) {
7513 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
7514 } else {
7515 return ctx.stylize('[Object]', 'special');
7516 }
7517 }
7518
7519 ctx.seen.push(value);
7520
7521 var output;
7522 if (array) {
7523 output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
7524 } else {
7525 output = keys.map(function(key) {
7526 return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
7527 });
7528 }
7529
7530 ctx.seen.pop();
7531
7532 return reduceToSingleString(output, base, braces);
7533 }
7534
7535
7536 function formatPrimitive(ctx, value) {
7537 if (isUndefined(value))
7538 return ctx.stylize('undefined', 'undefined');
7539 if (isString(value)) {
7540 var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
7541 .replace(/'/g, "\\'")
7542 .replace(/\\"/g, '"') + '\'';
7543 return ctx.stylize(simple, 'string');
7544 }
7545 if (isNumber(value))
7546 return ctx.stylize('' + value, 'number');
7547 if (isBoolean(value))
7548 return ctx.stylize('' + value, 'boolean');
7549 // For some reason typeof null is "object", so special case here.
7550 if (isNull(value))
7551 return ctx.stylize('null', 'null');
7552 }
7553
7554
7555 function formatError(value) {
7556 return '[' + Error.prototype.toString.call(value) + ']';
7557 }
7558
7559
7560 function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
7561 var output = [];
7562 for (var i = 0, l = value.length; i < l; ++i) {
7563 if (hasOwnProperty(value, String(i))) {
7564 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
7565 String(i), true));
7566 } else {
7567 output.push('');
7568 }
7569 }
7570 keys.forEach(function(key) {
7571 if (!key.match(/^\d+$/)) {
7572 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
7573 key, true));
7574 }
7575 });
7576 return output;
7577 }
7578
7579
7580 function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
7581 var name, str, desc;
7582 desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
7583 if (desc.get) {
7584 if (desc.set) {
7585 str = ctx.stylize('[Getter/Setter]', 'special');
7586 } else {
7587 str = ctx.stylize('[Getter]', 'special');
7588 }
7589 } else {
7590 if (desc.set) {
7591 str = ctx.stylize('[Setter]', 'special');
7592 }
7593 }
7594 if (!hasOwnProperty(visibleKeys, key)) {
7595 name = '[' + key + ']';
7596 }
7597 if (!str) {
7598 if (ctx.seen.indexOf(desc.value) < 0) {
7599 if (isNull(recurseTimes)) {
7600 str = formatValue(ctx, desc.value, null);
7601 } else {
7602 str = formatValue(ctx, desc.value, recurseTimes - 1);
7603 }
7604 if (str.indexOf('\n') > -1) {
7605 if (array) {
7606 str = str.split('\n').map(function(line) {
7607 return ' ' + line;
7608 }).join('\n').substr(2);
7609 } else {
7610 str = '\n' + str.split('\n').map(function(line) {
7611 return ' ' + line;
7612 }).join('\n');
7613 }
7614 }
7615 } else {
7616 str = ctx.stylize('[Circular]', 'special');
7617 }
7618 }
7619 if (isUndefined(name)) {
7620 if (array && key.match(/^\d+$/)) {
7621 return str;
7622 }
7623 name = JSON.stringify('' + key);
7624 if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
7625 name = name.substr(1, name.length - 2);
7626 name = ctx.stylize(name, 'name');
7627 } else {
7628 name = name.replace(/'/g, "\\'")
7629 .replace(/\\"/g, '"')
7630 .replace(/(^"|"$)/g, "'");
7631 name = ctx.stylize(name, 'string');
7632 }
7633 }
7634
7635 return name + ': ' + str;
7636 }
7637
7638
7639 function reduceToSingleString(output, base, braces) {
7640 var numLinesEst = 0;
7641 var length = output.reduce(function(prev, cur) {
7642 numLinesEst++;
7643 if (cur.indexOf('\n') >= 0) numLinesEst++;
7644 return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;
7645 }, 0);
7646
7647 if (length > 60) {
7648 return braces[0] +
7649 (base === '' ? '' : base + '\n ') +
7650 ' ' +
7651 output.join(',\n ') +
7652 ' ' +
7653 braces[1];
7654 }
7655
7656 return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
7657 }
7658
7659
7660 // NOTE: These type checking functions intentionally don't use `instanceof`
7661 // because it is fragile and can be easily faked with `Object.create()`.
7662 function isArray(ar) {
7663 return Array.isArray(ar);
7664 }
7665 exports.isArray = isArray;
7666
7667 function isBoolean(arg) {
7668 return typeof arg === 'boolean';
7669 }
7670 exports.isBoolean = isBoolean;
7671
7672 function isNull(arg) {
7673 return arg === null;
7674 }
7675 exports.isNull = isNull;
7676
7677 function isNullOrUndefined(arg) {
7678 return arg == null;
7679 }
7680 exports.isNullOrUndefined = isNullOrUndefined;
7681
7682 function isNumber(arg) {
7683 return typeof arg === 'number';
7684 }
7685 exports.isNumber = isNumber;
7686
7687 function isString(arg) {
7688 return typeof arg === 'string';
7689 }
7690 exports.isString = isString;
7691
7692 function isSymbol(arg) {
7693 return typeof arg === 'symbol';
7694 }
7695 exports.isSymbol = isSymbol;
7696
7697 function isUndefined(arg) {
7698 return arg === void 0;
7699 }
7700 exports.isUndefined = isUndefined;
7701
7702 function isRegExp(re) {
7703 return isObject(re) && objectToString(re) === '[object RegExp]';
7704 }
7705 exports.isRegExp = isRegExp;
7706
7707 function isObject(arg) {
7708 return typeof arg === 'object' && arg !== null;
7709 }
7710 exports.isObject = isObject;
7711
7712 function isDate(d) {
7713 return isObject(d) && objectToString(d) === '[object Date]';
7714 }
7715 exports.isDate = isDate;
7716
7717 function isError(e) {
7718 return isObject(e) &&
7719 (objectToString(e) === '[object Error]' || e instanceof Error);
7720 }
7721 exports.isError = isError;
7722
7723 function isFunction(arg) {
7724 return typeof arg === 'function';
7725 }
7726 exports.isFunction = isFunction;
7727
7728 function isPrimitive(arg) {
7729 return arg === null ||
7730 typeof arg === 'boolean' ||
7731 typeof arg === 'number' ||
7732 typeof arg === 'string' ||
7733 typeof arg === 'symbol' || // ES6 symbol
7734 typeof arg === 'undefined';
7735 }
7736 exports.isPrimitive = isPrimitive;
7737
7738 exports.isBuffer = require('./support/isBuffer');
7739
7740 function objectToString(o) {
7741 return Object.prototype.toString.call(o);
7742 }
7743
7744
7745 function pad(n) {
7746 return n < 10 ? '0' + n.toString(10) : n.toString(10);
7747 }
7748
7749
7750 var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
7751 'Oct', 'Nov', 'Dec'];
7752
7753 // 26 Feb 16:19:34
7754 function timestamp() {
7755 var d = new Date();
7756 var time = [pad(d.getHours()),
7757 pad(d.getMinutes()),
7758 pad(d.getSeconds())].join(':');
7759 return [d.getDate(), months[d.getMonth()], time].join(' ');
7760 }
7761
7762
7763 // log is just a thin wrapper to console.log that prepends a timestamp
7764 exports.log = function() {
7765 console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
7766 };
7767
7768
7769 /**
7770 * Inherit the prototype methods from one constructor into another.
7771 *
7772 * The Function.prototype.inherits from lang.js rewritten as a standalone
7773 * function (not on Function.prototype). NOTE: If this file is to be loaded
7774 * during bootstrapping this function needs to be rewritten using some native
7775 * functions as prototype setup using normal JavaScript does not work as
7776 * expected during bootstrapping (see mirror.js in r114903).
7777 *
7778 * @param {function} ctor Constructor function which needs to inherit the
7779 * prototype.
7780 * @param {function} superCtor Constructor function to inherit prototype from.
7781 */
7782 exports.inherits = require('inherits');
7783
7784 exports._extend = function(origin, add) {
7785 // Don't do anything if add isn't an object
7786 if (!add || !isObject(add)) return origin;
7787
7788 var keys = Object.keys(add);
7789 var i = keys.length;
7790 while (i--) {
7791 origin[keys[i]] = add[keys[i]];
7792 }
7793 return origin;
7794 };
7795
7796 function hasOwnProperty(obj, prop) {
7797 return Object.prototype.hasOwnProperty.call(obj, prop);
7798 }
7799
7800 }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
7801 },{"./support/isBuffer":28,"_process":14,"inherits":12}],30:[function(require,module,exports){
7802 // Base58 encoding/decoding
7803 // Originally written by Mike Hearn for BitcoinJ
7804 // Copyright (c) 2011 Google Inc
7805 // Ported to JavaScript by Stefan Thomas
7806 // Merged Buffer refactorings from base58-native by Stephen Pair
7807 // Copyright (c) 2013 BitPay Inc
7808
7809 var ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
7810 var ALPHABET_MAP = {}
7811 for(var i = 0; i < ALPHABET.length; i++) {
7812 ALPHABET_MAP[ALPHABET.charAt(i)] = i
7813 }
7814 var BASE = 58
7815
7816 function encode(buffer) {
7817 if (buffer.length === 0) return ''
7818
7819 var i, j, digits = [0]
7820 for (i = 0; i < buffer.length; i++) {
7821 for (j = 0; j < digits.length; j++) digits[j] <<= 8
7822
7823 digits[0] += buffer[i]
7824
7825 var carry = 0
7826 for (j = 0; j < digits.length; ++j) {
7827 digits[j] += carry
7828
7829 carry = (digits[j] / BASE) | 0
7830 digits[j] %= BASE
7831 }
7832
7833 while (carry) {
7834 digits.push(carry % BASE)
7835
7836 carry = (carry / BASE) | 0
7837 }
7838 }
7839
7840 // deal with leading zeros
7841 for (i = 0; buffer[i] === 0 && i < buffer.length - 1; i++) digits.push(0)
7842
7843 // convert digits to a string
7844 var stringOutput = ""
7845 for (var i = digits.length - 1; i >= 0; i--) {
7846 stringOutput = stringOutput + ALPHABET[digits[i]]
7847 }
7848 return stringOutput
7849 }
7850
7851 function decode(string) {
7852 if (string.length === 0) return []
7853
7854 var i, j, bytes = [0]
7855 for (i = 0; i < string.length; i++) {
7856 var c = string[i]
7857 if (!(c in ALPHABET_MAP)) throw new Error('Non-base58 character')
7858
7859 for (j = 0; j < bytes.length; j++) bytes[j] *= BASE
7860 bytes[0] += ALPHABET_MAP[c]
7861
7862 var carry = 0
7863 for (j = 0; j < bytes.length; ++j) {
7864 bytes[j] += carry
7865
7866 carry = bytes[j] >> 8
7867 bytes[j] &= 0xff
7868 }
7869
7870 while (carry) {
7871 bytes.push(carry & 0xff)
7872
7873 carry >>= 8
7874 }
7875 }
7876
7877 // deal with leading zeros
7878 for (i = 0; string[i] === '1' && i < string.length - 1; i++) bytes.push(0)
7879
7880 return bytes.reverse()
7881 }
7882
7883 module.exports = {
7884 encode: encode,
7885 decode: decode
7886 }
7887
7888 },{}],31:[function(require,module,exports){
7889 (function (Buffer){
7890 'use strict'
7891
7892 var base58 = require('bs58')
7893 var createHash = require('create-hash')
7894
7895 // SHA256(SHA256(buffer))
7896 function sha256x2 (buffer) {
7897 buffer = createHash('sha256').update(buffer).digest()
7898 return createHash('sha256').update(buffer).digest()
7899 }
7900
7901 // Encode a buffer as a base58-check encoded string
7902 function encode (payload) {
7903 var checksum = sha256x2(payload).slice(0, 4)
7904
7905 return base58.encode(Buffer.concat([
7906 payload,
7907 checksum
7908 ]))
7909 }
7910
7911 // Decode a base58-check encoded string to a buffer
7912 function decode (string) {
7913 var buffer = new Buffer(base58.decode(string))
7914
7915 var payload = buffer.slice(0, -4)
7916 var checksum = buffer.slice(-4)
7917 var newChecksum = sha256x2(payload).slice(0, 4)
7918
7919 for (var i = 0; i < newChecksum.length; ++i) {
7920 if (newChecksum[i] === checksum[i]) continue
7921
7922 throw new Error('Invalid checksum')
7923 }
7924
7925 return payload
7926 }
7927
7928 module.exports = {
7929 encode: encode,
7930 decode: decode
7931 }
7932
7933 }).call(this,require("buffer").Buffer)
7934 },{"bs58":30,"buffer":7,"create-hash":32}],32:[function(require,module,exports){
7935 (function (Buffer){
7936 'use strict';
7937 var inherits = require('inherits')
7938 var md5 = require('./md5')
7939 var rmd160 = require('ripemd160')
7940 var sha = require('sha.js')
7941
7942 var Transform = require('stream').Transform
7943
7944 function HashNoConstructor(hash) {
7945 Transform.call(this)
7946
7947 this._hash = hash
7948 this.buffers = []
7949 }
7950
7951 inherits(HashNoConstructor, Transform)
7952
7953 HashNoConstructor.prototype._transform = function (data, _, next) {
7954 this.buffers.push(data)
7955
7956 next()
7957 }
7958
7959 HashNoConstructor.prototype._flush = function (next) {
7960 this.push(this.digest())
7961 next()
7962 }
7963
7964 HashNoConstructor.prototype.update = function (data, enc) {
7965 if (typeof data === 'string') {
7966 data = new Buffer(data, enc)
7967 }
7968
7969 this.buffers.push(data)
7970 return this
7971 }
7972
7973 HashNoConstructor.prototype.digest = function (enc) {
7974 var buf = Buffer.concat(this.buffers)
7975 var r = this._hash(buf)
7976 this.buffers = null
7977
7978 return enc ? r.toString(enc) : r
7979 }
7980
7981 function Hash(hash) {
7982 Transform.call(this)
7983
7984 this._hash = hash
7985 }
7986
7987 inherits(Hash, Transform)
7988
7989 Hash.prototype._transform = function (data, enc, next) {
7990 if (enc) data = new Buffer(data, enc)
7991
7992 this._hash.update(data)
7993
7994 next()
7995 }
7996
7997 Hash.prototype._flush = function (next) {
7998 this.push(this._hash.digest())
7999 this._hash = null
8000
8001 next()
8002 }
8003
8004 Hash.prototype.update = function (data, enc) {
8005 if (typeof data === 'string') {
8006 data = new Buffer(data, enc)
8007 }
8008
8009 this._hash.update(data)
8010 return this
8011 }
8012
8013 Hash.prototype.digest = function (enc) {
8014 var outData = this._hash.digest()
8015
8016 return enc ? outData.toString(enc) : outData
8017 }
8018
8019 module.exports = function createHash (alg) {
8020 if ('md5' === alg) return new HashNoConstructor(md5)
8021 if ('rmd160' === alg) return new HashNoConstructor(rmd160)
8022
8023 return new Hash(sha(alg))
8024 }
8025
8026 }).call(this,require("buffer").Buffer)
8027 },{"./md5":34,"buffer":7,"inherits":35,"ripemd160":36,"sha.js":38,"stream":26}],33:[function(require,module,exports){
8028 (function (Buffer){
8029 'use strict';
8030 var intSize = 4;
8031 var zeroBuffer = new Buffer(intSize); zeroBuffer.fill(0);
8032 var chrsz = 8;
8033
8034 function toArray(buf, bigEndian) {
8035 if ((buf.length % intSize) !== 0) {
8036 var len = buf.length + (intSize - (buf.length % intSize));
8037 buf = Buffer.concat([buf, zeroBuffer], len);
8038 }
8039
8040 var arr = [];
8041 var fn = bigEndian ? buf.readInt32BE : buf.readInt32LE;
8042 for (var i = 0; i < buf.length; i += intSize) {
8043 arr.push(fn.call(buf, i));
8044 }
8045 return arr;
8046 }
8047
8048 function toBuffer(arr, size, bigEndian) {
8049 var buf = new Buffer(size);
8050 var fn = bigEndian ? buf.writeInt32BE : buf.writeInt32LE;
8051 for (var i = 0; i < arr.length; i++) {
8052 fn.call(buf, arr[i], i * 4, true);
8053 }
8054 return buf;
8055 }
8056
8057 function hash(buf, fn, hashSize, bigEndian) {
8058 if (!Buffer.isBuffer(buf)) buf = new Buffer(buf);
8059 var arr = fn(toArray(buf, bigEndian), buf.length * chrsz);
8060 return toBuffer(arr, hashSize, bigEndian);
8061 }
8062 exports.hash = hash;
8063 }).call(this,require("buffer").Buffer)
8064 },{"buffer":7}],34:[function(require,module,exports){
8065 'use strict';
8066 /*
8067 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
8068 * Digest Algorithm, as defined in RFC 1321.
8069 * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
8070 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8071 * Distributed under the BSD License
8072 * See http://pajhome.org.uk/crypt/md5 for more info.
8073 */
8074
8075 var helpers = require('./helpers');
8076
8077 /*
8078 * Calculate the MD5 of an array of little-endian words, and a bit length
8079 */
8080 function core_md5(x, len)
8081 {
8082 /* append padding */
8083 x[len >> 5] |= 0x80 << ((len) % 32);
8084 x[(((len + 64) >>> 9) << 4) + 14] = len;
8085
8086 var a = 1732584193;
8087 var b = -271733879;
8088 var c = -1732584194;
8089 var d = 271733878;
8090
8091 for(var i = 0; i < x.length; i += 16)
8092 {
8093 var olda = a;
8094 var oldb = b;
8095 var oldc = c;
8096 var oldd = d;
8097
8098 a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936);
8099 d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586);
8100 c = md5_ff(c, d, a, b, x[i+ 2], 17, 606105819);
8101 b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330);
8102 a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897);
8103 d = md5_ff(d, a, b, c, x[i+ 5], 12, 1200080426);
8104 c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341);
8105 b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983);
8106 a = md5_ff(a, b, c, d, x[i+ 8], 7 , 1770035416);
8107 d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417);
8108 c = md5_ff(c, d, a, b, x[i+10], 17, -42063);
8109 b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162);
8110 a = md5_ff(a, b, c, d, x[i+12], 7 , 1804603682);
8111 d = md5_ff(d, a, b, c, x[i+13], 12, -40341101);
8112 c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290);
8113 b = md5_ff(b, c, d, a, x[i+15], 22, 1236535329);
8114
8115 a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510);
8116 d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632);
8117 c = md5_gg(c, d, a, b, x[i+11], 14, 643717713);
8118 b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302);
8119 a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691);
8120 d = md5_gg(d, a, b, c, x[i+10], 9 , 38016083);
8121 c = md5_gg(c, d, a, b, x[i+15], 14, -660478335);
8122 b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848);
8123 a = md5_gg(a, b, c, d, x[i+ 9], 5 , 568446438);
8124 d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690);
8125 c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961);
8126 b = md5_gg(b, c, d, a, x[i+ 8], 20, 1163531501);
8127 a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467);
8128 d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784);
8129 c = md5_gg(c, d, a, b, x[i+ 7], 14, 1735328473);
8130 b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734);
8131
8132 a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558);
8133 d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463);
8134 c = md5_hh(c, d, a, b, x[i+11], 16, 1839030562);
8135 b = md5_hh(b, c, d, a, x[i+14], 23, -35309556);
8136 a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060);
8137 d = md5_hh(d, a, b, c, x[i+ 4], 11, 1272893353);
8138 c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632);
8139 b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640);
8140 a = md5_hh(a, b, c, d, x[i+13], 4 , 681279174);
8141 d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222);
8142 c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979);
8143 b = md5_hh(b, c, d, a, x[i+ 6], 23, 76029189);
8144 a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487);
8145 d = md5_hh(d, a, b, c, x[i+12], 11, -421815835);
8146 c = md5_hh(c, d, a, b, x[i+15], 16, 530742520);
8147 b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651);
8148
8149 a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844);
8150 d = md5_ii(d, a, b, c, x[i+ 7], 10, 1126891415);
8151 c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905);
8152 b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055);
8153 a = md5_ii(a, b, c, d, x[i+12], 6 , 1700485571);
8154 d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606);
8155 c = md5_ii(c, d, a, b, x[i+10], 15, -1051523);
8156 b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799);
8157 a = md5_ii(a, b, c, d, x[i+ 8], 6 , 1873313359);
8158 d = md5_ii(d, a, b, c, x[i+15], 10, -30611744);
8159 c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380);
8160 b = md5_ii(b, c, d, a, x[i+13], 21, 1309151649);
8161 a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070);
8162 d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379);
8163 c = md5_ii(c, d, a, b, x[i+ 2], 15, 718787259);
8164 b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551);
8165
8166 a = safe_add(a, olda);
8167 b = safe_add(b, oldb);
8168 c = safe_add(c, oldc);
8169 d = safe_add(d, oldd);
8170 }
8171 return Array(a, b, c, d);
8172
8173 }
8174
8175 /*
8176 * These functions implement the four basic operations the algorithm uses.
8177 */
8178 function md5_cmn(q, a, b, x, s, t)
8179 {
8180 return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b);
8181 }
8182 function md5_ff(a, b, c, d, x, s, t)
8183 {
8184 return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
8185 }
8186 function md5_gg(a, b, c, d, x, s, t)
8187 {
8188 return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
8189 }
8190 function md5_hh(a, b, c, d, x, s, t)
8191 {
8192 return md5_cmn(b ^ c ^ d, a, b, x, s, t);
8193 }
8194 function md5_ii(a, b, c, d, x, s, t)
8195 {
8196 return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
8197 }
8198
8199 /*
8200 * Add integers, wrapping at 2^32. This uses 16-bit operations internally
8201 * to work around bugs in some JS interpreters.
8202 */
8203 function safe_add(x, y)
8204 {
8205 var lsw = (x & 0xFFFF) + (y & 0xFFFF);
8206 var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
8207 return (msw << 16) | (lsw & 0xFFFF);
8208 }
8209
8210 /*
8211 * Bitwise rotate a 32-bit number to the left.
8212 */
8213 function bit_rol(num, cnt)
8214 {
8215 return (num << cnt) | (num >>> (32 - cnt));
8216 }
8217
8218 module.exports = function md5(buf) {
8219 return helpers.hash(buf, core_md5, 16);
8220 };
8221 },{"./helpers":33}],35:[function(require,module,exports){
8222 arguments[4][12][0].apply(exports,arguments)
8223 },{"dup":12}],36:[function(require,module,exports){
8224 (function (Buffer){
8225 /*
8226 CryptoJS v3.1.2
8227 code.google.com/p/crypto-js
8228 (c) 2009-2013 by Jeff Mott. All rights reserved.
8229 code.google.com/p/crypto-js/wiki/License
8230 */
8231 /** @preserve
8232 (c) 2012 by Cédric Mesnil. All rights reserved.
8233
8234 Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
8235
8236 - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
8237 - 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.
8238
8239 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.
8240 */
8241
8242 // constants table
8243 var zl = [
8244 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
8245 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
8246 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
8247 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
8248 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
8249 ]
8250
8251 var zr = [
8252 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
8253 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
8254 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
8255 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
8256 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
8257 ]
8258
8259 var sl = [
8260 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
8261 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
8262 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
8263 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
8264 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
8265 ]
8266
8267 var sr = [
8268 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
8269 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
8270 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
8271 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
8272 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
8273 ]
8274
8275 var hl = [0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]
8276 var hr = [0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]
8277
8278 function bytesToWords (bytes) {
8279 var words = []
8280 for (var i = 0, b = 0; i < bytes.length; i++, b += 8) {
8281 words[b >>> 5] |= bytes[i] << (24 - b % 32)
8282 }
8283 return words
8284 }
8285
8286 function wordsToBytes (words) {
8287 var bytes = []
8288 for (var b = 0; b < words.length * 32; b += 8) {
8289 bytes.push((words[b >>> 5] >>> (24 - b % 32)) & 0xFF)
8290 }
8291 return bytes
8292 }
8293
8294 function processBlock (H, M, offset) {
8295 // swap endian
8296 for (var i = 0; i < 16; i++) {
8297 var offset_i = offset + i
8298 var M_offset_i = M[offset_i]
8299
8300 // Swap
8301 M[offset_i] = (
8302 (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |
8303 (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)
8304 )
8305 }
8306
8307 // Working variables
8308 var al, bl, cl, dl, el
8309 var ar, br, cr, dr, er
8310
8311 ar = al = H[0]
8312 br = bl = H[1]
8313 cr = cl = H[2]
8314 dr = dl = H[3]
8315 er = el = H[4]
8316
8317 // computation
8318 var t
8319 for (i = 0; i < 80; i += 1) {
8320 t = (al + M[offset + zl[i]]) | 0
8321 if (i < 16) {
8322 t += f1(bl, cl, dl) + hl[0]
8323 } else if (i < 32) {
8324 t += f2(bl, cl, dl) + hl[1]
8325 } else if (i < 48) {
8326 t += f3(bl, cl, dl) + hl[2]
8327 } else if (i < 64) {
8328 t += f4(bl, cl, dl) + hl[3]
8329 } else {// if (i<80) {
8330 t += f5(bl, cl, dl) + hl[4]
8331 }
8332 t = t | 0
8333 t = rotl(t, sl[i])
8334 t = (t + el) | 0
8335 al = el
8336 el = dl
8337 dl = rotl(cl, 10)
8338 cl = bl
8339 bl = t
8340
8341 t = (ar + M[offset + zr[i]]) | 0
8342 if (i < 16) {
8343 t += f5(br, cr, dr) + hr[0]
8344 } else if (i < 32) {
8345 t += f4(br, cr, dr) + hr[1]
8346 } else if (i < 48) {
8347 t += f3(br, cr, dr) + hr[2]
8348 } else if (i < 64) {
8349 t += f2(br, cr, dr) + hr[3]
8350 } else {// if (i<80) {
8351 t += f1(br, cr, dr) + hr[4]
8352 }
8353
8354 t = t | 0
8355 t = rotl(t, sr[i])
8356 t = (t + er) | 0
8357 ar = er
8358 er = dr
8359 dr = rotl(cr, 10)
8360 cr = br
8361 br = t
8362 }
8363
8364 // intermediate hash value
8365 t = (H[1] + cl + dr) | 0
8366 H[1] = (H[2] + dl + er) | 0
8367 H[2] = (H[3] + el + ar) | 0
8368 H[3] = (H[4] + al + br) | 0
8369 H[4] = (H[0] + bl + cr) | 0
8370 H[0] = t
8371 }
8372
8373 function f1 (x, y, z) {
8374 return ((x) ^ (y) ^ (z))
8375 }
8376
8377 function f2 (x, y, z) {
8378 return (((x) & (y)) | ((~x) & (z)))
8379 }
8380
8381 function f3 (x, y, z) {
8382 return (((x) | (~(y))) ^ (z))
8383 }
8384
8385 function f4 (x, y, z) {
8386 return (((x) & (z)) | ((y) & (~(z))))
8387 }
8388
8389 function f5 (x, y, z) {
8390 return ((x) ^ ((y) | (~(z))))
8391 }
8392
8393 function rotl (x, n) {
8394 return (x << n) | (x >>> (32 - n))
8395 }
8396
8397 function ripemd160 (message) {
8398 var H = [0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]
8399
8400 if (typeof message === 'string') {
8401 message = new Buffer(message, 'utf8')
8402 }
8403
8404 var m = bytesToWords(message)
8405
8406 var nBitsLeft = message.length * 8
8407 var nBitsTotal = message.length * 8
8408
8409 // Add padding
8410 m[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32)
8411 m[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (
8412 (((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff) |
8413 (((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00)
8414 )
8415
8416 for (var i = 0; i < m.length; i += 16) {
8417 processBlock(H, m, i)
8418 }
8419
8420 // swap endian
8421 for (i = 0; i < 5; i++) {
8422 // shortcut
8423 var H_i = H[i]
8424
8425 // Swap
8426 H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |
8427 (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00)
8428 }
8429
8430 var digestbytes = wordsToBytes(H)
8431 return new Buffer(digestbytes)
8432 }
8433
8434 module.exports = ripemd160
8435
8436 }).call(this,require("buffer").Buffer)
8437 },{"buffer":7}],37:[function(require,module,exports){
8438 (function (Buffer){
8439 // prototype class for hash functions
8440 function Hash (blockSize, finalSize) {
8441 this._block = new Buffer(blockSize)
8442 this._finalSize = finalSize
8443 this._blockSize = blockSize
8444 this._len = 0
8445 this._s = 0
8446 }
8447
8448 Hash.prototype.update = function (data, enc) {
8449 if (typeof data === 'string') {
8450 enc = enc || 'utf8'
8451 data = new Buffer(data, enc)
8452 }
8453
8454 var l = this._len += data.length
8455 var s = this._s || 0
8456 var f = 0
8457 var buffer = this._block
8458
8459 while (s < l) {
8460 var t = Math.min(data.length, f + this._blockSize - (s % this._blockSize))
8461 var ch = (t - f)
8462
8463 for (var i = 0; i < ch; i++) {
8464 buffer[(s % this._blockSize) + i] = data[i + f]
8465 }
8466
8467 s += ch
8468 f += ch
8469
8470 if ((s % this._blockSize) === 0) {
8471 this._update(buffer)
8472 }
8473 }
8474 this._s = s
8475
8476 return this
8477 }
8478
8479 Hash.prototype.digest = function (enc) {
8480 // Suppose the length of the message M, in bits, is l
8481 var l = this._len * 8
8482
8483 // Append the bit 1 to the end of the message
8484 this._block[this._len % this._blockSize] = 0x80
8485
8486 // and then k zero bits, where k is the smallest non-negative solution to the equation (l + 1 + k) === finalSize mod blockSize
8487 this._block.fill(0, this._len % this._blockSize + 1)
8488
8489 if (l % (this._blockSize * 8) >= this._finalSize * 8) {
8490 this._update(this._block)
8491 this._block.fill(0)
8492 }
8493
8494 // to this append the block which is equal to the number l written in binary
8495 // TODO: handle case where l is > Math.pow(2, 29)
8496 this._block.writeInt32BE(l, this._blockSize - 4)
8497
8498 var hash = this._update(this._block) || this._hash()
8499
8500 return enc ? hash.toString(enc) : hash
8501 }
8502
8503 Hash.prototype._update = function () {
8504 throw new Error('_update must be implemented by subclass')
8505 }
8506
8507 module.exports = Hash
8508
8509 }).call(this,require("buffer").Buffer)
8510 },{"buffer":7}],38:[function(require,module,exports){
8511 var exports = module.exports = function SHA (algorithm) {
8512 algorithm = algorithm.toLowerCase()
8513
8514 var Algorithm = exports[algorithm]
8515 if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')
8516
8517 return new Algorithm()
8518 }
8519
8520 exports.sha = require('./sha')
8521 exports.sha1 = require('./sha1')
8522 exports.sha224 = require('./sha224')
8523 exports.sha256 = require('./sha256')
8524 exports.sha384 = require('./sha384')
8525 exports.sha512 = require('./sha512')
8526
8527 },{"./sha":39,"./sha1":40,"./sha224":41,"./sha256":42,"./sha384":43,"./sha512":44}],39:[function(require,module,exports){
8528 (function (Buffer){
8529 /*
8530 * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined
8531 * in FIPS PUB 180-1
8532 * This source code is derived from sha1.js of the same repository.
8533 * The difference between SHA-0 and SHA-1 is just a bitwise rotate left
8534 * operation was added.
8535 */
8536
8537 var inherits = require('inherits')
8538 var Hash = require('./hash')
8539
8540 var W = new Array(80)
8541
8542 function Sha () {
8543 this.init()
8544 this._w = W
8545
8546 Hash.call(this, 64, 56)
8547 }
8548
8549 inherits(Sha, Hash)
8550
8551 Sha.prototype.init = function () {
8552 this._a = 0x67452301 | 0
8553 this._b = 0xefcdab89 | 0
8554 this._c = 0x98badcfe | 0
8555 this._d = 0x10325476 | 0
8556 this._e = 0xc3d2e1f0 | 0
8557
8558 return this
8559 }
8560
8561 /*
8562 * Bitwise rotate a 32-bit number to the left.
8563 */
8564 function rol (num, cnt) {
8565 return (num << cnt) | (num >>> (32 - cnt))
8566 }
8567
8568 Sha.prototype._update = function (M) {
8569 var W = this._w
8570
8571 var a = this._a
8572 var b = this._b
8573 var c = this._c
8574 var d = this._d
8575 var e = this._e
8576
8577 var j = 0, k
8578
8579 /*
8580 * SHA-1 has a bitwise rotate left operation. But, SHA is not
8581 * function calcW() { return rol(W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16], 1) }
8582 */
8583 function calcW () { return W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16] }
8584 function loop (w, f) {
8585 W[j] = w
8586
8587 var t = rol(a, 5) + f + e + w + k
8588
8589 e = d
8590 d = c
8591 c = rol(b, 30)
8592 b = a
8593 a = t
8594 j++
8595 }
8596
8597 k = 1518500249
8598 while (j < 16) loop(M.readInt32BE(j * 4), (b & c) | ((~b) & d))
8599 while (j < 20) loop(calcW(), (b & c) | ((~b) & d))
8600 k = 1859775393
8601 while (j < 40) loop(calcW(), b ^ c ^ d)
8602 k = -1894007588
8603 while (j < 60) loop(calcW(), (b & c) | (b & d) | (c & d))
8604 k = -899497514
8605 while (j < 80) loop(calcW(), b ^ c ^ d)
8606
8607 this._a = (a + this._a) | 0
8608 this._b = (b + this._b) | 0
8609 this._c = (c + this._c) | 0
8610 this._d = (d + this._d) | 0
8611 this._e = (e + this._e) | 0
8612 }
8613
8614 Sha.prototype._hash = function () {
8615 var H = new Buffer(20)
8616
8617 H.writeInt32BE(this._a | 0, 0)
8618 H.writeInt32BE(this._b | 0, 4)
8619 H.writeInt32BE(this._c | 0, 8)
8620 H.writeInt32BE(this._d | 0, 12)
8621 H.writeInt32BE(this._e | 0, 16)
8622
8623 return H
8624 }
8625
8626 module.exports = Sha
8627
8628
8629 }).call(this,require("buffer").Buffer)
8630 },{"./hash":37,"buffer":7,"inherits":35}],40:[function(require,module,exports){
8631 (function (Buffer){
8632 /*
8633 * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
8634 * in FIPS PUB 180-1
8635 * Version 2.1a Copyright Paul Johnston 2000 - 2002.
8636 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8637 * Distributed under the BSD License
8638 * See http://pajhome.org.uk/crypt/md5 for details.
8639 */
8640
8641 var inherits = require('inherits')
8642 var Hash = require('./hash')
8643
8644 var W = new Array(80)
8645
8646 function Sha1 () {
8647 this.init()
8648 this._w = W
8649
8650 Hash.call(this, 64, 56)
8651 }
8652
8653 inherits(Sha1, Hash)
8654
8655 Sha1.prototype.init = function () {
8656 this._a = 0x67452301 | 0
8657 this._b = 0xefcdab89 | 0
8658 this._c = 0x98badcfe | 0
8659 this._d = 0x10325476 | 0
8660 this._e = 0xc3d2e1f0 | 0
8661
8662 return this
8663 }
8664
8665 /*
8666 * Bitwise rotate a 32-bit number to the left.
8667 */
8668 function rol (num, cnt) {
8669 return (num << cnt) | (num >>> (32 - cnt))
8670 }
8671
8672 Sha1.prototype._update = function (M) {
8673 var W = this._w
8674
8675 var a = this._a
8676 var b = this._b
8677 var c = this._c
8678 var d = this._d
8679 var e = this._e
8680
8681 var j = 0, k
8682
8683 function calcW () { return rol(W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16], 1) }
8684 function loop (w, f) {
8685 W[j] = w
8686
8687 var t = rol(a, 5) + f + e + w + k
8688
8689 e = d
8690 d = c
8691 c = rol(b, 30)
8692 b = a
8693 a = t
8694 j++
8695 }
8696
8697 k = 1518500249
8698 while (j < 16) loop(M.readInt32BE(j * 4), (b & c) | ((~b) & d))
8699 while (j < 20) loop(calcW(), (b & c) | ((~b) & d))
8700 k = 1859775393
8701 while (j < 40) loop(calcW(), b ^ c ^ d)
8702 k = -1894007588
8703 while (j < 60) loop(calcW(), (b & c) | (b & d) | (c & d))
8704 k = -899497514
8705 while (j < 80) loop(calcW(), b ^ c ^ d)
8706
8707 this._a = (a + this._a) | 0
8708 this._b = (b + this._b) | 0
8709 this._c = (c + this._c) | 0
8710 this._d = (d + this._d) | 0
8711 this._e = (e + this._e) | 0
8712 }
8713
8714 Sha1.prototype._hash = function () {
8715 var H = new Buffer(20)
8716
8717 H.writeInt32BE(this._a | 0, 0)
8718 H.writeInt32BE(this._b | 0, 4)
8719 H.writeInt32BE(this._c | 0, 8)
8720 H.writeInt32BE(this._d | 0, 12)
8721 H.writeInt32BE(this._e | 0, 16)
8722
8723 return H
8724 }
8725
8726 module.exports = Sha1
8727
8728 }).call(this,require("buffer").Buffer)
8729 },{"./hash":37,"buffer":7,"inherits":35}],41:[function(require,module,exports){
8730 (function (Buffer){
8731 /**
8732 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
8733 * in FIPS 180-2
8734 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
8735 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8736 *
8737 */
8738
8739 var inherits = require('inherits')
8740 var Sha256 = require('./sha256')
8741 var Hash = require('./hash')
8742
8743 var W = new Array(64)
8744
8745 function Sha224 () {
8746 this.init()
8747
8748 this._w = W // new Array(64)
8749
8750 Hash.call(this, 64, 56)
8751 }
8752
8753 inherits(Sha224, Sha256)
8754
8755 Sha224.prototype.init = function () {
8756 this._a = 0xc1059ed8 | 0
8757 this._b = 0x367cd507 | 0
8758 this._c = 0x3070dd17 | 0
8759 this._d = 0xf70e5939 | 0
8760 this._e = 0xffc00b31 | 0
8761 this._f = 0x68581511 | 0
8762 this._g = 0x64f98fa7 | 0
8763 this._h = 0xbefa4fa4 | 0
8764
8765 return this
8766 }
8767
8768 Sha224.prototype._hash = function () {
8769 var H = new Buffer(28)
8770
8771 H.writeInt32BE(this._a, 0)
8772 H.writeInt32BE(this._b, 4)
8773 H.writeInt32BE(this._c, 8)
8774 H.writeInt32BE(this._d, 12)
8775 H.writeInt32BE(this._e, 16)
8776 H.writeInt32BE(this._f, 20)
8777 H.writeInt32BE(this._g, 24)
8778
8779 return H
8780 }
8781
8782 module.exports = Sha224
8783
8784 }).call(this,require("buffer").Buffer)
8785 },{"./hash":37,"./sha256":42,"buffer":7,"inherits":35}],42:[function(require,module,exports){
8786 (function (Buffer){
8787 /**
8788 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
8789 * in FIPS 180-2
8790 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
8791 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8792 *
8793 */
8794
8795 var inherits = require('inherits')
8796 var Hash = require('./hash')
8797
8798 var K = [
8799 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,
8800 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,
8801 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,
8802 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,
8803 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,
8804 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,
8805 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,
8806 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,
8807 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,
8808 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,
8809 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,
8810 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,
8811 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,
8812 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,
8813 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,
8814 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2
8815 ]
8816
8817 var W = new Array(64)
8818
8819 function Sha256 () {
8820 this.init()
8821
8822 this._w = W // new Array(64)
8823
8824 Hash.call(this, 64, 56)
8825 }
8826
8827 inherits(Sha256, Hash)
8828
8829 Sha256.prototype.init = function () {
8830 this._a = 0x6a09e667 | 0
8831 this._b = 0xbb67ae85 | 0
8832 this._c = 0x3c6ef372 | 0
8833 this._d = 0xa54ff53a | 0
8834 this._e = 0x510e527f | 0
8835 this._f = 0x9b05688c | 0
8836 this._g = 0x1f83d9ab | 0
8837 this._h = 0x5be0cd19 | 0
8838
8839 return this
8840 }
8841
8842 function S (X, n) {
8843 return (X >>> n) | (X << (32 - n))
8844 }
8845
8846 function R (X, n) {
8847 return (X >>> n)
8848 }
8849
8850 function Ch (x, y, z) {
8851 return ((x & y) ^ ((~x) & z))
8852 }
8853
8854 function Maj (x, y, z) {
8855 return ((x & y) ^ (x & z) ^ (y & z))
8856 }
8857
8858 function Sigma0256 (x) {
8859 return (S(x, 2) ^ S(x, 13) ^ S(x, 22))
8860 }
8861
8862 function Sigma1256 (x) {
8863 return (S(x, 6) ^ S(x, 11) ^ S(x, 25))
8864 }
8865
8866 function Gamma0256 (x) {
8867 return (S(x, 7) ^ S(x, 18) ^ R(x, 3))
8868 }
8869
8870 function Gamma1256 (x) {
8871 return (S(x, 17) ^ S(x, 19) ^ R(x, 10))
8872 }
8873
8874 Sha256.prototype._update = function (M) {
8875 var W = this._w
8876
8877 var a = this._a | 0
8878 var b = this._b | 0
8879 var c = this._c | 0
8880 var d = this._d | 0
8881 var e = this._e | 0
8882 var f = this._f | 0
8883 var g = this._g | 0
8884 var h = this._h | 0
8885
8886 var j = 0
8887
8888 function calcW () { return Gamma1256(W[j - 2]) + W[j - 7] + Gamma0256(W[j - 15]) + W[j - 16] }
8889 function loop (w) {
8890 W[j] = w
8891
8892 var T1 = h + Sigma1256(e) + Ch(e, f, g) + K[j] + w
8893 var T2 = Sigma0256(a) + Maj(a, b, c)
8894
8895 h = g
8896 g = f
8897 f = e
8898 e = d + T1
8899 d = c
8900 c = b
8901 b = a
8902 a = T1 + T2
8903
8904 j++
8905 }
8906
8907 while (j < 16) loop(M.readInt32BE(j * 4))
8908 while (j < 64) loop(calcW())
8909
8910 this._a = (a + this._a) | 0
8911 this._b = (b + this._b) | 0
8912 this._c = (c + this._c) | 0
8913 this._d = (d + this._d) | 0
8914 this._e = (e + this._e) | 0
8915 this._f = (f + this._f) | 0
8916 this._g = (g + this._g) | 0
8917 this._h = (h + this._h) | 0
8918 }
8919
8920 Sha256.prototype._hash = function () {
8921 var H = new Buffer(32)
8922
8923 H.writeInt32BE(this._a, 0)
8924 H.writeInt32BE(this._b, 4)
8925 H.writeInt32BE(this._c, 8)
8926 H.writeInt32BE(this._d, 12)
8927 H.writeInt32BE(this._e, 16)
8928 H.writeInt32BE(this._f, 20)
8929 H.writeInt32BE(this._g, 24)
8930 H.writeInt32BE(this._h, 28)
8931
8932 return H
8933 }
8934
8935 module.exports = Sha256
8936
8937 }).call(this,require("buffer").Buffer)
8938 },{"./hash":37,"buffer":7,"inherits":35}],43:[function(require,module,exports){
8939 (function (Buffer){
8940 var inherits = require('inherits')
8941 var SHA512 = require('./sha512')
8942 var Hash = require('./hash')
8943
8944 var W = new Array(160)
8945
8946 function Sha384 () {
8947 this.init()
8948 this._w = W
8949
8950 Hash.call(this, 128, 112)
8951 }
8952
8953 inherits(Sha384, SHA512)
8954
8955 Sha384.prototype.init = function () {
8956 this._a = 0xcbbb9d5d | 0
8957 this._b = 0x629a292a | 0
8958 this._c = 0x9159015a | 0
8959 this._d = 0x152fecd8 | 0
8960 this._e = 0x67332667 | 0
8961 this._f = 0x8eb44a87 | 0
8962 this._g = 0xdb0c2e0d | 0
8963 this._h = 0x47b5481d | 0
8964
8965 this._al = 0xc1059ed8 | 0
8966 this._bl = 0x367cd507 | 0
8967 this._cl = 0x3070dd17 | 0
8968 this._dl = 0xf70e5939 | 0
8969 this._el = 0xffc00b31 | 0
8970 this._fl = 0x68581511 | 0
8971 this._gl = 0x64f98fa7 | 0
8972 this._hl = 0xbefa4fa4 | 0
8973
8974 return this
8975 }
8976
8977 Sha384.prototype._hash = function () {
8978 var H = new Buffer(48)
8979
8980 function writeInt64BE (h, l, offset) {
8981 H.writeInt32BE(h, offset)
8982 H.writeInt32BE(l, offset + 4)
8983 }
8984
8985 writeInt64BE(this._a, this._al, 0)
8986 writeInt64BE(this._b, this._bl, 8)
8987 writeInt64BE(this._c, this._cl, 16)
8988 writeInt64BE(this._d, this._dl, 24)
8989 writeInt64BE(this._e, this._el, 32)
8990 writeInt64BE(this._f, this._fl, 40)
8991
8992 return H
8993 }
8994
8995 module.exports = Sha384
8996
8997 }).call(this,require("buffer").Buffer)
8998 },{"./hash":37,"./sha512":44,"buffer":7,"inherits":35}],44:[function(require,module,exports){
8999 (function (Buffer){
9000 var inherits = require('inherits')
9001 var Hash = require('./hash')
9002
9003 var K = [
9004 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
9005 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
9006 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
9007 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
9008 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
9009 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
9010 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
9011 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
9012 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
9013 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
9014 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
9015 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
9016 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
9017 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
9018 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
9019 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
9020 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
9021 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
9022 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
9023 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
9024 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
9025 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
9026 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
9027 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
9028 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
9029 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
9030 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
9031 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
9032 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
9033 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
9034 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
9035 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
9036 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
9037 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
9038 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
9039 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
9040 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
9041 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
9042 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
9043 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
9044 ]
9045
9046 var W = new Array(160)
9047
9048 function Sha512 () {
9049 this.init()
9050 this._w = W
9051
9052 Hash.call(this, 128, 112)
9053 }
9054
9055 inherits(Sha512, Hash)
9056
9057 Sha512.prototype.init = function () {
9058 this._a = 0x6a09e667 | 0
9059 this._b = 0xbb67ae85 | 0
9060 this._c = 0x3c6ef372 | 0
9061 this._d = 0xa54ff53a | 0
9062 this._e = 0x510e527f | 0
9063 this._f = 0x9b05688c | 0
9064 this._g = 0x1f83d9ab | 0
9065 this._h = 0x5be0cd19 | 0
9066
9067 this._al = 0xf3bcc908 | 0
9068 this._bl = 0x84caa73b | 0
9069 this._cl = 0xfe94f82b | 0
9070 this._dl = 0x5f1d36f1 | 0
9071 this._el = 0xade682d1 | 0
9072 this._fl = 0x2b3e6c1f | 0
9073 this._gl = 0xfb41bd6b | 0
9074 this._hl = 0x137e2179 | 0
9075
9076 return this
9077 }
9078
9079 function S (X, Xl, n) {
9080 return (X >>> n) | (Xl << (32 - n))
9081 }
9082
9083 function Ch (x, y, z) {
9084 return ((x & y) ^ ((~x) & z))
9085 }
9086
9087 function Maj (x, y, z) {
9088 return ((x & y) ^ (x & z) ^ (y & z))
9089 }
9090
9091 Sha512.prototype._update = function (M) {
9092 var W = this._w
9093
9094 var a = this._a | 0
9095 var b = this._b | 0
9096 var c = this._c | 0
9097 var d = this._d | 0
9098 var e = this._e | 0
9099 var f = this._f | 0
9100 var g = this._g | 0
9101 var h = this._h | 0
9102
9103 var al = this._al | 0
9104 var bl = this._bl | 0
9105 var cl = this._cl | 0
9106 var dl = this._dl | 0
9107 var el = this._el | 0
9108 var fl = this._fl | 0
9109 var gl = this._gl | 0
9110 var hl = this._hl | 0
9111
9112 var i = 0, j = 0
9113 var Wi, Wil
9114 function calcW () {
9115 var x = W[j - 15 * 2]
9116 var xl = W[j - 15 * 2 + 1]
9117 var gamma0 = S(x, xl, 1) ^ S(x, xl, 8) ^ (x >>> 7)
9118 var gamma0l = S(xl, x, 1) ^ S(xl, x, 8) ^ S(xl, x, 7)
9119
9120 x = W[j - 2 * 2]
9121 xl = W[j - 2 * 2 + 1]
9122 var gamma1 = S(x, xl, 19) ^ S(xl, x, 29) ^ (x >>> 6)
9123 var gamma1l = S(xl, x, 19) ^ S(x, xl, 29) ^ S(xl, x, 6)
9124
9125 // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]
9126 var Wi7 = W[j - 7 * 2]
9127 var Wi7l = W[j - 7 * 2 + 1]
9128
9129 var Wi16 = W[j - 16 * 2]
9130 var Wi16l = W[j - 16 * 2 + 1]
9131
9132 Wil = gamma0l + Wi7l
9133 Wi = gamma0 + Wi7 + ((Wil >>> 0) < (gamma0l >>> 0) ? 1 : 0)
9134 Wil = Wil + gamma1l
9135 Wi = Wi + gamma1 + ((Wil >>> 0) < (gamma1l >>> 0) ? 1 : 0)
9136 Wil = Wil + Wi16l
9137 Wi = Wi + Wi16 + ((Wil >>> 0) < (Wi16l >>> 0) ? 1 : 0)
9138 }
9139
9140 function loop () {
9141 W[j] = Wi
9142 W[j + 1] = Wil
9143
9144 var maj = Maj(a, b, c)
9145 var majl = Maj(al, bl, cl)
9146
9147 var sigma0h = S(a, al, 28) ^ S(al, a, 2) ^ S(al, a, 7)
9148 var sigma0l = S(al, a, 28) ^ S(a, al, 2) ^ S(a, al, 7)
9149 var sigma1h = S(e, el, 14) ^ S(e, el, 18) ^ S(el, e, 9)
9150 var sigma1l = S(el, e, 14) ^ S(el, e, 18) ^ S(e, el, 9)
9151
9152 // t1 = h + sigma1 + ch + K[i] + W[i]
9153 var Ki = K[j]
9154 var Kil = K[j + 1]
9155
9156 var ch = Ch(e, f, g)
9157 var chl = Ch(el, fl, gl)
9158
9159 var t1l = hl + sigma1l
9160 var t1 = h + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0)
9161 t1l = t1l + chl
9162 t1 = t1 + ch + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0)
9163 t1l = t1l + Kil
9164 t1 = t1 + Ki + ((t1l >>> 0) < (Kil >>> 0) ? 1 : 0)
9165 t1l = t1l + Wil
9166 t1 = t1 + Wi + ((t1l >>> 0) < (Wil >>> 0) ? 1 : 0)
9167
9168 // t2 = sigma0 + maj
9169 var t2l = sigma0l + majl
9170 var t2 = sigma0h + maj + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0)
9171
9172 h = g
9173 hl = gl
9174 g = f
9175 gl = fl
9176 f = e
9177 fl = el
9178 el = (dl + t1l) | 0
9179 e = (d + t1 + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0
9180 d = c
9181 dl = cl
9182 c = b
9183 cl = bl
9184 b = a
9185 bl = al
9186 al = (t1l + t2l) | 0
9187 a = (t1 + t2 + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0
9188
9189 i++
9190 j += 2
9191 }
9192
9193 while (i < 16) {
9194 Wi = M.readInt32BE(j * 4)
9195 Wil = M.readInt32BE(j * 4 + 4)
9196
9197 loop()
9198 }
9199
9200 while (i < 80) {
9201 calcW()
9202 loop()
9203 }
9204
9205 this._al = (this._al + al) | 0
9206 this._bl = (this._bl + bl) | 0
9207 this._cl = (this._cl + cl) | 0
9208 this._dl = (this._dl + dl) | 0
9209 this._el = (this._el + el) | 0
9210 this._fl = (this._fl + fl) | 0
9211 this._gl = (this._gl + gl) | 0
9212 this._hl = (this._hl + hl) | 0
9213
9214 this._a = (this._a + a + ((this._al >>> 0) < (al >>> 0) ? 1 : 0)) | 0
9215 this._b = (this._b + b + ((this._bl >>> 0) < (bl >>> 0) ? 1 : 0)) | 0
9216 this._c = (this._c + c + ((this._cl >>> 0) < (cl >>> 0) ? 1 : 0)) | 0
9217 this._d = (this._d + d + ((this._dl >>> 0) < (dl >>> 0) ? 1 : 0)) | 0
9218 this._e = (this._e + e + ((this._el >>> 0) < (el >>> 0) ? 1 : 0)) | 0
9219 this._f = (this._f + f + ((this._fl >>> 0) < (fl >>> 0) ? 1 : 0)) | 0
9220 this._g = (this._g + g + ((this._gl >>> 0) < (gl >>> 0) ? 1 : 0)) | 0
9221 this._h = (this._h + h + ((this._hl >>> 0) < (hl >>> 0) ? 1 : 0)) | 0
9222 }
9223
9224 Sha512.prototype._hash = function () {
9225 var H = new Buffer(64)
9226
9227 function writeInt64BE (h, l, offset) {
9228 H.writeInt32BE(h, offset)
9229 H.writeInt32BE(l, offset + 4)
9230 }
9231
9232 writeInt64BE(this._a, this._al, 0)
9233 writeInt64BE(this._b, this._bl, 8)
9234 writeInt64BE(this._c, this._cl, 16)
9235 writeInt64BE(this._d, this._dl, 24)
9236 writeInt64BE(this._e, this._el, 32)
9237 writeInt64BE(this._f, this._fl, 40)
9238 writeInt64BE(this._g, this._gl, 48)
9239 writeInt64BE(this._h, this._hl, 56)
9240
9241 return H
9242 }
9243
9244 module.exports = Sha512
9245
9246 }).call(this,require("buffer").Buffer)
9247 },{"./hash":37,"buffer":7,"inherits":35}],45:[function(require,module,exports){
9248 (function (Buffer){
9249 'use strict';
9250 var createHash = require('create-hash/browser');
9251 var inherits = require('inherits')
9252
9253 var Transform = require('stream').Transform
9254
9255 var ZEROS = new Buffer(128)
9256 ZEROS.fill(0)
9257
9258 function Hmac(alg, key) {
9259 Transform.call(this)
9260
9261 if (typeof key === 'string') {
9262 key = new Buffer(key)
9263 }
9264
9265 var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64
9266
9267 this._alg = alg
9268 this._key = key
9269
9270 if (key.length > blocksize) {
9271 key = createHash(alg).update(key).digest()
9272
9273 } else if (key.length < blocksize) {
9274 key = Buffer.concat([key, ZEROS], blocksize)
9275 }
9276
9277 var ipad = this._ipad = new Buffer(blocksize)
9278 var opad = this._opad = new Buffer(blocksize)
9279
9280 for (var i = 0; i < blocksize; i++) {
9281 ipad[i] = key[i] ^ 0x36
9282 opad[i] = key[i] ^ 0x5C
9283 }
9284
9285 this._hash = createHash(alg).update(ipad)
9286 }
9287
9288 inherits(Hmac, Transform)
9289
9290 Hmac.prototype.update = function (data, enc) {
9291 this._hash.update(data, enc)
9292
9293 return this
9294 }
9295
9296 Hmac.prototype._transform = function (data, _, next) {
9297 this._hash.update(data)
9298
9299 next()
9300 }
9301
9302 Hmac.prototype._flush = function (next) {
9303 this.push(this.digest())
9304
9305 next()
9306 }
9307
9308 Hmac.prototype.digest = function (enc) {
9309 var h = this._hash.digest()
9310
9311 return createHash(this._alg).update(this._opad).update(h).digest(enc)
9312 }
9313
9314 module.exports = function createHmac(alg, key) {
9315 return new Hmac(alg, key)
9316 }
9317
9318 }).call(this,require("buffer").Buffer)
9319 },{"buffer":7,"create-hash/browser":32,"inherits":46,"stream":26}],46:[function(require,module,exports){
9320 arguments[4][12][0].apply(exports,arguments)
9321 },{"dup":12}],47:[function(require,module,exports){
9322 var assert = require('assert')
9323 var BigInteger = require('bigi')
9324
9325 var Point = require('./point')
9326
9327 function Curve(p, a, b, Gx, Gy, n, h) {
9328 this.p = p
9329 this.a = a
9330 this.b = b
9331 this.G = Point.fromAffine(this, Gx, Gy)
9332 this.n = n
9333 this.h = h
9334
9335 this.infinity = new Point(this, null, null, BigInteger.ZERO)
9336
9337 // result caching
9338 this.pOverFour = p.add(BigInteger.ONE).shiftRight(2)
9339 }
9340
9341 Curve.prototype.pointFromX = function(isOdd, x) {
9342 var alpha = x.pow(3).add(this.a.multiply(x)).add(this.b).mod(this.p)
9343 var beta = alpha.modPow(this.pOverFour, this.p) // XXX: not compatible with all curves
9344
9345 var y = beta
9346 if (beta.isEven() ^ !isOdd) {
9347 y = this.p.subtract(y) // -y % p
9348 }
9349
9350 return Point.fromAffine(this, x, y)
9351 }
9352
9353 Curve.prototype.isInfinity = function(Q) {
9354 if (Q === this.infinity) return true
9355
9356 return Q.z.signum() === 0 && Q.y.signum() !== 0
9357 }
9358
9359 Curve.prototype.isOnCurve = function(Q) {
9360 if (this.isInfinity(Q)) return true
9361
9362 var x = Q.affineX
9363 var y = Q.affineY
9364 var a = this.a
9365 var b = this.b
9366 var p = this.p
9367
9368 // Check that xQ and yQ are integers in the interval [0, p - 1]
9369 if (x.signum() < 0 || x.compareTo(p) >= 0) return false
9370 if (y.signum() < 0 || y.compareTo(p) >= 0) return false
9371
9372 // and check that y^2 = x^3 + ax + b (mod p)
9373 var lhs = y.square().mod(p)
9374 var rhs = x.pow(3).add(a.multiply(x)).add(b).mod(p)
9375 return lhs.equals(rhs)
9376 }
9377
9378 /**
9379 * Validate an elliptic curve point.
9380 *
9381 * See SEC 1, section 3.2.2.1: Elliptic Curve Public Key Validation Primitive
9382 */
9383 Curve.prototype.validate = function(Q) {
9384 // Check Q != O
9385 assert(!this.isInfinity(Q), 'Point is at infinity')
9386 assert(this.isOnCurve(Q), 'Point is not on the curve')
9387
9388 // Check nQ = O (where Q is a scalar multiple of G)
9389 var nQ = Q.multiply(this.n)
9390 assert(this.isInfinity(nQ), 'Point is not a scalar multiple of G')
9391
9392 return true
9393 }
9394
9395 module.exports = Curve
9396
9397 },{"./point":51,"assert":5,"bigi":3}],48:[function(require,module,exports){
9398 module.exports={
9399 "secp128r1": {
9400 "p": "fffffffdffffffffffffffffffffffff",
9401 "a": "fffffffdfffffffffffffffffffffffc",
9402 "b": "e87579c11079f43dd824993c2cee5ed3",
9403 "n": "fffffffe0000000075a30d1b9038a115",
9404 "h": "01",
9405 "Gx": "161ff7528b899b2d0c28607ca52c5b86",
9406 "Gy": "cf5ac8395bafeb13c02da292dded7a83"
9407 },
9408 "secp160k1": {
9409 "p": "fffffffffffffffffffffffffffffffeffffac73",
9410 "a": "00",
9411 "b": "07",
9412 "n": "0100000000000000000001b8fa16dfab9aca16b6b3",
9413 "h": "01",
9414 "Gx": "3b4c382ce37aa192a4019e763036f4f5dd4d7ebb",
9415 "Gy": "938cf935318fdced6bc28286531733c3f03c4fee"
9416 },
9417 "secp160r1": {
9418 "p": "ffffffffffffffffffffffffffffffff7fffffff",
9419 "a": "ffffffffffffffffffffffffffffffff7ffffffc",
9420 "b": "1c97befc54bd7a8b65acf89f81d4d4adc565fa45",
9421 "n": "0100000000000000000001f4c8f927aed3ca752257",
9422 "h": "01",
9423 "Gx": "4a96b5688ef573284664698968c38bb913cbfc82",
9424 "Gy": "23a628553168947d59dcc912042351377ac5fb32"
9425 },
9426 "secp192k1": {
9427 "p": "fffffffffffffffffffffffffffffffffffffffeffffee37",
9428 "a": "00",
9429 "b": "03",
9430 "n": "fffffffffffffffffffffffe26f2fc170f69466a74defd8d",
9431 "h": "01",
9432 "Gx": "db4ff10ec057e9ae26b07d0280b7f4341da5d1b1eae06c7d",
9433 "Gy": "9b2f2f6d9c5628a7844163d015be86344082aa88d95e2f9d"
9434 },
9435 "secp192r1": {
9436 "p": "fffffffffffffffffffffffffffffffeffffffffffffffff",
9437 "a": "fffffffffffffffffffffffffffffffefffffffffffffffc",
9438 "b": "64210519e59c80e70fa7e9ab72243049feb8deecc146b9b1",
9439 "n": "ffffffffffffffffffffffff99def836146bc9b1b4d22831",
9440 "h": "01",
9441 "Gx": "188da80eb03090f67cbf20eb43a18800f4ff0afd82ff1012",
9442 "Gy": "07192b95ffc8da78631011ed6b24cdd573f977a11e794811"
9443 },
9444 "secp256k1": {
9445 "p": "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f",
9446 "a": "00",
9447 "b": "07",
9448 "n": "fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141",
9449 "h": "01",
9450 "Gx": "79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
9451 "Gy": "483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8"
9452 },
9453 "secp256r1": {
9454 "p": "ffffffff00000001000000000000000000000000ffffffffffffffffffffffff",
9455 "a": "ffffffff00000001000000000000000000000000fffffffffffffffffffffffc",
9456 "b": "5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b",
9457 "n": "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551",
9458 "h": "01",
9459 "Gx": "6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
9460 "Gy": "4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5"
9461 }
9462 }
9463
9464 },{}],49:[function(require,module,exports){
9465 var Point = require('./point')
9466 var Curve = require('./curve')
9467
9468 var getCurveByName = require('./names')
9469
9470 module.exports = {
9471 Curve: Curve,
9472 Point: Point,
9473 getCurveByName: getCurveByName
9474 }
9475
9476 },{"./curve":47,"./names":50,"./point":51}],50:[function(require,module,exports){
9477 var BigInteger = require('bigi')
9478
9479 var curves = require('./curves')
9480 var Curve = require('./curve')
9481
9482 function getCurveByName(name) {
9483 var curve = curves[name]
9484 if (!curve) return null
9485
9486 var p = new BigInteger(curve.p, 16)
9487 var a = new BigInteger(curve.a, 16)
9488 var b = new BigInteger(curve.b, 16)
9489 var n = new BigInteger(curve.n, 16)
9490 var h = new BigInteger(curve.h, 16)
9491 var Gx = new BigInteger(curve.Gx, 16)
9492 var Gy = new BigInteger(curve.Gy, 16)
9493
9494 return new Curve(p, a, b, Gx, Gy, n, h)
9495 }
9496
9497 module.exports = getCurveByName
9498
9499 },{"./curve":47,"./curves":48,"bigi":3}],51:[function(require,module,exports){
9500 (function (Buffer){
9501 var assert = require('assert')
9502 var BigInteger = require('bigi')
9503
9504 var THREE = BigInteger.valueOf(3)
9505
9506 function Point(curve, x, y, z) {
9507 assert.notStrictEqual(z, undefined, 'Missing Z coordinate')
9508
9509 this.curve = curve
9510 this.x = x
9511 this.y = y
9512 this.z = z
9513 this._zInv = null
9514
9515 this.compressed = true
9516 }
9517
9518 Object.defineProperty(Point.prototype, 'zInv', {
9519 get: function() {
9520 if (this._zInv === null) {
9521 this._zInv = this.z.modInverse(this.curve.p)
9522 }
9523
9524 return this._zInv
9525 }
9526 })
9527
9528 Object.defineProperty(Point.prototype, 'affineX', {
9529 get: function() {
9530 return this.x.multiply(this.zInv).mod(this.curve.p)
9531 }
9532 })
9533
9534 Object.defineProperty(Point.prototype, 'affineY', {
9535 get: function() {
9536 return this.y.multiply(this.zInv).mod(this.curve.p)
9537 }
9538 })
9539
9540 Point.fromAffine = function(curve, x, y) {
9541 return new Point(curve, x, y, BigInteger.ONE)
9542 }
9543
9544 Point.prototype.equals = function(other) {
9545 if (other === this) return true
9546 if (this.curve.isInfinity(this)) return this.curve.isInfinity(other)
9547 if (this.curve.isInfinity(other)) return this.curve.isInfinity(this)
9548
9549 // u = Y2 * Z1 - Y1 * Z2
9550 var u = other.y.multiply(this.z).subtract(this.y.multiply(other.z)).mod(this.curve.p)
9551
9552 if (u.signum() !== 0) return false
9553
9554 // v = X2 * Z1 - X1 * Z2
9555 var v = other.x.multiply(this.z).subtract(this.x.multiply(other.z)).mod(this.curve.p)
9556
9557 return v.signum() === 0
9558 }
9559
9560 Point.prototype.negate = function() {
9561 var y = this.curve.p.subtract(this.y)
9562
9563 return new Point(this.curve, this.x, y, this.z)
9564 }
9565
9566 Point.prototype.add = function(b) {
9567 if (this.curve.isInfinity(this)) return b
9568 if (this.curve.isInfinity(b)) return this
9569
9570 var x1 = this.x
9571 var y1 = this.y
9572 var x2 = b.x
9573 var y2 = b.y
9574
9575 // u = Y2 * Z1 - Y1 * Z2
9576 var u = y2.multiply(this.z).subtract(y1.multiply(b.z)).mod(this.curve.p)
9577 // v = X2 * Z1 - X1 * Z2
9578 var v = x2.multiply(this.z).subtract(x1.multiply(b.z)).mod(this.curve.p)
9579
9580 if (v.signum() === 0) {
9581 if (u.signum() === 0) {
9582 return this.twice() // this == b, so double
9583 }
9584
9585 return this.curve.infinity // this = -b, so infinity
9586 }
9587
9588 var v2 = v.square()
9589 var v3 = v2.multiply(v)
9590 var x1v2 = x1.multiply(v2)
9591 var zu2 = u.square().multiply(this.z)
9592
9593 // x3 = v * (z2 * (z1 * u^2 - 2 * x1 * v^2) - v^3)
9594 var x3 = zu2.subtract(x1v2.shiftLeft(1)).multiply(b.z).subtract(v3).multiply(v).mod(this.curve.p)
9595 // y3 = z2 * (3 * x1 * u * v^2 - y1 * v^3 - z1 * u^3) + u * v^3
9596 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)
9597 // z3 = v^3 * z1 * z2
9598 var z3 = v3.multiply(this.z).multiply(b.z).mod(this.curve.p)
9599
9600 return new Point(this.curve, x3, y3, z3)
9601 }
9602
9603 Point.prototype.twice = function() {
9604 if (this.curve.isInfinity(this)) return this
9605 if (this.y.signum() === 0) return this.curve.infinity
9606
9607 var x1 = this.x
9608 var y1 = this.y
9609
9610 var y1z1 = y1.multiply(this.z)
9611 var y1sqz1 = y1z1.multiply(y1).mod(this.curve.p)
9612 var a = this.curve.a
9613
9614 // w = 3 * x1^2 + a * z1^2
9615 var w = x1.square().multiply(THREE)
9616
9617 if (a.signum() !== 0) {
9618 w = w.add(this.z.square().multiply(a))
9619 }
9620
9621 w = w.mod(this.curve.p)
9622 // x3 = 2 * y1 * z1 * (w^2 - 8 * x1 * y1^2 * z1)
9623 var x3 = w.square().subtract(x1.shiftLeft(3).multiply(y1sqz1)).shiftLeft(1).multiply(y1z1).mod(this.curve.p)
9624 // y3 = 4 * y1^2 * z1 * (3 * w * x1 - 2 * y1^2 * z1) - w^3
9625 var y3 = w.multiply(THREE).multiply(x1).subtract(y1sqz1.shiftLeft(1)).shiftLeft(2).multiply(y1sqz1).subtract(w.pow(3)).mod(this.curve.p)
9626 // z3 = 8 * (y1 * z1)^3
9627 var z3 = y1z1.pow(3).shiftLeft(3).mod(this.curve.p)
9628
9629 return new Point(this.curve, x3, y3, z3)
9630 }
9631
9632 // Simple NAF (Non-Adjacent Form) multiplication algorithm
9633 // TODO: modularize the multiplication algorithm
9634 Point.prototype.multiply = function(k) {
9635 if (this.curve.isInfinity(this)) return this
9636 if (k.signum() === 0) return this.curve.infinity
9637
9638 var e = k
9639 var h = e.multiply(THREE)
9640
9641 var neg = this.negate()
9642 var R = this
9643
9644 for (var i = h.bitLength() - 2; i > 0; --i) {
9645 R = R.twice()
9646
9647 var hBit = h.testBit(i)
9648 var eBit = e.testBit(i)
9649
9650 if (hBit != eBit) {
9651 R = R.add(hBit ? this : neg)
9652 }
9653 }
9654
9655 return R
9656 }
9657
9658 // Compute this*j + x*k (simultaneous multiplication)
9659 Point.prototype.multiplyTwo = function(j, x, k) {
9660 var i
9661
9662 if (j.bitLength() > k.bitLength())
9663 i = j.bitLength() - 1
9664 else
9665 i = k.bitLength() - 1
9666
9667 var R = this.curve.infinity
9668 var both = this.add(x)
9669
9670 while (i >= 0) {
9671 R = R.twice()
9672
9673 var jBit = j.testBit(i)
9674 var kBit = k.testBit(i)
9675
9676 if (jBit) {
9677 if (kBit) {
9678 R = R.add(both)
9679
9680 } else {
9681 R = R.add(this)
9682 }
9683
9684 } else {
9685 if (kBit) {
9686 R = R.add(x)
9687 }
9688 }
9689 --i
9690 }
9691
9692 return R
9693 }
9694
9695 Point.prototype.getEncoded = function(compressed) {
9696 if (compressed == undefined) compressed = this.compressed
9697 if (this.curve.isInfinity(this)) return new Buffer('00', 'hex') // Infinity point encoded is simply '00'
9698
9699 var x = this.affineX
9700 var y = this.affineY
9701
9702 var buffer
9703
9704 // Determine size of q in bytes
9705 var byteLength = Math.floor((this.curve.p.bitLength() + 7) / 8)
9706
9707 // 0x02/0x03 | X
9708 if (compressed) {
9709 buffer = new Buffer(1 + byteLength)
9710 buffer.writeUInt8(y.isEven() ? 0x02 : 0x03, 0)
9711
9712 // 0x04 | X | Y
9713 } else {
9714 buffer = new Buffer(1 + byteLength + byteLength)
9715 buffer.writeUInt8(0x04, 0)
9716
9717 y.toBuffer(byteLength).copy(buffer, 1 + byteLength)
9718 }
9719
9720 x.toBuffer(byteLength).copy(buffer, 1)
9721
9722 return buffer
9723 }
9724
9725 Point.decodeFrom = function(curve, buffer) {
9726 var type = buffer.readUInt8(0)
9727 var compressed = (type !== 4)
9728
9729 var byteLength = Math.floor((curve.p.bitLength() + 7) / 8)
9730 var x = BigInteger.fromBuffer(buffer.slice(1, 1 + byteLength))
9731
9732 var Q
9733 if (compressed) {
9734 assert.equal(buffer.length, byteLength + 1, 'Invalid sequence length')
9735 assert(type === 0x02 || type === 0x03, 'Invalid sequence tag')
9736
9737 var isOdd = (type === 0x03)
9738 Q = curve.pointFromX(isOdd, x)
9739
9740 } else {
9741 assert.equal(buffer.length, 1 + byteLength + byteLength, 'Invalid sequence length')
9742
9743 var y = BigInteger.fromBuffer(buffer.slice(1 + byteLength))
9744 Q = Point.fromAffine(curve, x, y)
9745 }
9746
9747 Q.compressed = compressed
9748 return Q
9749 }
9750
9751 Point.prototype.toString = function () {
9752 if (this.curve.isInfinity(this)) return '(INFINITY)'
9753
9754 return '(' + this.affineX.toString() + ',' + this.affineY.toString() + ')'
9755 }
9756
9757 module.exports = Point
9758
9759 }).call(this,require("buffer").Buffer)
9760 },{"assert":5,"bigi":3,"buffer":7}],52:[function(require,module,exports){
9761 (function (process,global,Buffer){
9762 'use strict';
9763
9764 var crypto = global.crypto || global.msCrypto
9765 if(crypto && crypto.getRandomValues) {
9766 module.exports = randomBytes;
9767 } else {
9768 module.exports = oldBrowser;
9769 }
9770 function randomBytes(size, cb) {
9771 var bytes = new Buffer(size); //in browserify, this is an extended Uint8Array
9772 /* This will not work in older browsers.
9773 * See https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues
9774 */
9775
9776 crypto.getRandomValues(bytes);
9777 if (typeof cb === 'function') {
9778 return process.nextTick(function () {
9779 cb(null, bytes);
9780 });
9781 }
9782 return bytes;
9783 }
9784 function oldBrowser() {
9785 throw new Error(
9786 'secure random number generation not supported by this browser\n'+
9787 'use chrome, FireFox or Internet Explorer 11'
9788 )
9789 }
9790
9791 }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer)
9792 },{"_process":14,"buffer":7}],53:[function(require,module,exports){
9793 (function (Buffer){
9794 'use strict';
9795
9796 function getFunctionName(fn) {
9797 return fn.name || fn.toString().match(/function (.*?)\s*\(/)[1];
9798 }
9799
9800 function getTypeTypeName(type) {
9801 if (nativeTypes.Function(type)) {
9802 type = type.toJSON ? type.toJSON() : getFunctionName(type);
9803 }
9804 if (nativeTypes.Object(type)) return JSON.stringify(type);
9805
9806 return type;
9807 }
9808
9809 function getValueTypeName(value) {
9810 if (nativeTypes.Null(value)) return '';
9811
9812 return getFunctionName(value.constructor);
9813 }
9814
9815 function tfErrorString(type, value) {
9816 var typeTypeName = getTypeTypeName(type);
9817 var valueTypeName = getValueTypeName(value);
9818
9819 return 'Expected ' + typeTypeName + ', got ' + (valueTypeName && valueTypeName + ' ') + JSON.stringify(value);
9820 }
9821
9822 function tfPropertyErrorString(type, name, value) {
9823 return tfErrorString('property \"' + name + '\" of type ' + getTypeTypeName(type), value);
9824 }
9825
9826 var nativeTypes = {
9827 Array: (function (_Array) {
9828 function Array(_x) {
9829 return _Array.apply(this, arguments);
9830 }
9831
9832 Array.toString = function () {
9833 return _Array.toString();
9834 };
9835
9836 return Array;
9837 })(function (value) {
9838 return value !== null && value !== undefined && value.constructor === Array;
9839 }),
9840 Boolean: function Boolean(value) {
9841 return typeof value === 'boolean';
9842 },
9843 Buffer: (function (_Buffer) {
9844 function Buffer(_x2) {
9845 return _Buffer.apply(this, arguments);
9846 }
9847
9848 Buffer.toString = function () {
9849 return _Buffer.toString();
9850 };
9851
9852 return Buffer;
9853 })(function (value) {
9854 return Buffer.isBuffer(value);
9855 }),
9856 Function: function Function(value) {
9857 return typeof value === 'function';
9858 },
9859 Null: function Null(value) {
9860 return value === undefined || value === null;
9861 },
9862 Number: function Number(value) {
9863 return typeof value === 'number';
9864 },
9865 Object: function Object(value) {
9866 return typeof value === 'object';
9867 },
9868 String: function String(value) {
9869 return typeof value === 'string';
9870 },
9871 '': function _() {
9872 return true;
9873 }
9874 };
9875
9876 function tJSON(type) {
9877 return type && type.toJSON ? type.toJSON() : type;
9878 }
9879
9880 function sJSON(type) {
9881 var json = tJSON(type);
9882 return nativeTypes.Object(json) ? JSON.stringify(json) : json;
9883 }
9884
9885 var otherTypes = {
9886 arrayOf: function arrayOf(type) {
9887 function arrayOf(value, strict) {
9888 try {
9889 return nativeTypes.Array(value) && value.every(function (x) {
9890 return typeforce(type, x, strict);
9891 });
9892 } catch (e) {
9893 return false;
9894 }
9895 }
9896 arrayOf.toJSON = function () {
9897 return [tJSON(type)];
9898 };
9899
9900 return arrayOf;
9901 },
9902
9903 maybe: function maybe(type) {
9904 function maybe(value, strict) {
9905 return nativeTypes.Null(value) || typeforce(type, value, strict);
9906 }
9907 maybe.toJSON = function () {
9908 return '?' + sJSON(type);
9909 };
9910
9911 return maybe;
9912 },
9913
9914 object: function object(type) {
9915 function object(value, strict) {
9916 typeforce(nativeTypes.Object, value, strict);
9917
9918 var propertyName, propertyType, propertyValue;
9919
9920 try {
9921 for (propertyName in type) {
9922 propertyType = type[propertyName];
9923 propertyValue = value[propertyName];
9924
9925 typeforce(propertyType, propertyValue, strict);
9926 }
9927 } catch (e) {
9928 throw new TypeError(tfPropertyErrorString(propertyType, propertyName, propertyValue));
9929 }
9930
9931 if (strict) {
9932 for (propertyName in value) {
9933 if (type[propertyName]) continue;
9934
9935 throw new TypeError('Unexpected property "' + propertyName + '"');
9936 }
9937 }
9938
9939 return true;
9940 }
9941 object.toJSON = function () {
9942 return type;
9943 };
9944
9945 return object;
9946 },
9947
9948 oneOf: function oneOf() {
9949 for (var _len = arguments.length, types = Array(_len), _key = 0; _key < _len; _key++) {
9950 types[_key] = arguments[_key];
9951 }
9952
9953 function oneOf(value, strict) {
9954 return types.some(function (type) {
9955 try {
9956 return typeforce(type, value, strict);
9957 } catch (e) {
9958 return false;
9959 }
9960 });
9961 }
9962 oneOf.toJSON = function () {
9963 return types.map(sJSON).join('|');
9964 };
9965
9966 return oneOf;
9967 },
9968
9969 quacksLike: function quacksLike(type) {
9970 function quacksLike(value, strict) {
9971 return type === getValueTypeName(value);
9972 }
9973 quacksLike.toJSON = function () {
9974 return type;
9975 };
9976
9977 return quacksLike;
9978 },
9979
9980 tuple: function tuple() {
9981 for (var _len2 = arguments.length, types = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
9982 types[_key2] = arguments[_key2];
9983 }
9984
9985 function tuple(value, strict) {
9986 return types.every(function (type, i) {
9987 return typeforce(type, value[i], strict);
9988 });
9989 }
9990 tuple.toJSON = function () {
9991 return '(' + types.map(sJSON).join(', ') + ')';
9992 };
9993
9994 return tuple;
9995 },
9996
9997 value: function value(expected) {
9998 function value(actual) {
9999 return actual === expected;
10000 }
10001 value.toJSON = function () {
10002 return expected;
10003 };
10004
10005 return value;
10006 }
10007 };
10008
10009 function compile(type) {
10010 if (nativeTypes.String(type)) {
10011 if (type[0] === '?') return otherTypes.maybe(compile(type.slice(1)));
10012
10013 return nativeTypes[type] || otherTypes.quacksLike(type);
10014 } else if (type && nativeTypes.Object(type)) {
10015 if (nativeTypes.Array(type)) return otherTypes.arrayOf(compile(type[0]));
10016
10017 var compiled = {};
10018
10019 for (var propertyName in type) {
10020 compiled[propertyName] = compile(type[propertyName]);
10021 }
10022
10023 return otherTypes.object(compiled);
10024 } else if (nativeTypes.Function(type)) {
10025 return type;
10026 }
10027
10028 return otherTypes.value(type);
10029 }
10030
10031 function typeforce(_x3, _x4, _x5) {
10032 var _again = true;
10033
10034 _function: while (_again) {
10035 var type = _x3,
10036 value = _x4,
10037 strict = _x5;
10038 _again = false;
10039
10040 if (nativeTypes.Function(type)) {
10041 if (type(value, strict)) return true;
10042
10043 throw new TypeError(tfErrorString(type, value));
10044 }
10045
10046 // JIT
10047 _x3 = compile(type);
10048 _x4 = value;
10049 _x5 = strict;
10050 _again = true;
10051 continue _function;
10052 }
10053 }
10054
10055 // assign all types to typeforce function
10056 var typeName;
10057 Object.keys(nativeTypes).forEach(function (typeName) {
10058 var nativeType = nativeTypes[typeName];
10059 nativeType.toJSON = function () {
10060 return typeName;
10061 };
10062
10063 typeforce[typeName] = nativeType;
10064 });
10065
10066 for (typeName in otherTypes) {
10067 typeforce[typeName] = otherTypes[typeName];
10068 }
10069
10070 module.exports = typeforce;
10071 module.exports.compile = compile;
10072 }).call(this,require("buffer").Buffer)
10073 },{"buffer":7}],54:[function(require,module,exports){
10074 (function (Buffer){
10075 var assert = require('assert')
10076 var base58check = require('bs58check')
10077 var typeForce = require('typeforce')
10078 var networks = require('./networks')
10079 var scripts = require('./scripts')
10080
10081 function findScriptTypeByVersion (version) {
10082 for (var networkName in networks) {
10083 var network = networks[networkName]
10084
10085 if (version === network.pubKeyHash) return 'pubkeyhash'
10086 if (version === network.scriptHash) return 'scripthash'
10087 }
10088 }
10089
10090 function Address (hash, version) {
10091 typeForce('Buffer', hash)
10092
10093 assert.strictEqual(hash.length, 20, 'Invalid hash length')
10094 assert.strictEqual(version & 0xff, version, 'Invalid version byte')
10095
10096 this.hash = hash
10097 this.version = version
10098 }
10099
10100 Address.fromBase58Check = function (string) {
10101 var payload = base58check.decode(string)
10102 var version = payload.readUInt8(0)
10103 var hash = payload.slice(1)
10104
10105 return new Address(hash, version)
10106 }
10107
10108 Address.fromOutputScript = function (script, network) {
10109 network = network || networks.bitcoin
10110
10111 if (scripts.isPubKeyHashOutput(script)) return new Address(script.chunks[2], network.pubKeyHash)
10112 if (scripts.isScriptHashOutput(script)) return new Address(script.chunks[1], network.scriptHash)
10113
10114 assert(false, script.toASM() + ' has no matching Address')
10115 }
10116
10117 Address.prototype.toBase58Check = function () {
10118 var payload = new Buffer(21)
10119 payload.writeUInt8(this.version, 0)
10120 this.hash.copy(payload, 1)
10121
10122 return base58check.encode(payload)
10123 }
10124
10125 Address.prototype.toOutputScript = function () {
10126 var scriptType = findScriptTypeByVersion(this.version)
10127
10128 if (scriptType === 'pubkeyhash') return scripts.pubKeyHashOutput(this.hash)
10129 if (scriptType === 'scripthash') return scripts.scriptHashOutput(this.hash)
10130
10131 assert(false, this.toString() + ' has no matching Script')
10132 }
10133
10134 Address.prototype.toString = Address.prototype.toBase58Check
10135
10136 module.exports = Address
10137
10138 }).call(this,require("buffer").Buffer)
10139 },{"./networks":66,"./scripts":69,"assert":5,"bs58check":31,"buffer":7,"typeforce":53}],55:[function(require,module,exports){
10140 var bs58check = require('bs58check')
10141
10142 function decode () {
10143 console.warn('bs58check will be removed in 2.0.0. require("bs58check") instead.')
10144
10145 return bs58check.decode.apply(undefined, arguments)
10146 }
10147
10148 function encode () {
10149 console.warn('bs58check will be removed in 2.0.0. require("bs58check") instead.')
10150
10151 return bs58check.encode.apply(undefined, arguments)
10152 }
10153
10154 module.exports = {
10155 decode: decode,
10156 encode: encode
10157 }
10158
10159 },{"bs58check":31}],56:[function(require,module,exports){
10160 (function (Buffer){
10161 var assert = require('assert')
10162 var bufferutils = require('./bufferutils')
10163 var crypto = require('./crypto')
10164
10165 var Transaction = require('./transaction')
10166
10167 function Block () {
10168 this.version = 1
10169 this.prevHash = null
10170 this.merkleRoot = null
10171 this.timestamp = 0
10172 this.bits = 0
10173 this.nonce = 0
10174 }
10175
10176 Block.fromBuffer = function (buffer) {
10177 assert(buffer.length >= 80, 'Buffer too small (< 80 bytes)')
10178
10179 var offset = 0
10180 function readSlice (n) {
10181 offset += n
10182 return buffer.slice(offset - n, offset)
10183 }
10184
10185 function readUInt32 () {
10186 var i = buffer.readUInt32LE(offset)
10187 offset += 4
10188 return i
10189 }
10190
10191 var block = new Block()
10192 block.version = readUInt32()
10193 block.prevHash = readSlice(32)
10194 block.merkleRoot = readSlice(32)
10195 block.timestamp = readUInt32()
10196 block.bits = readUInt32()
10197 block.nonce = readUInt32()
10198
10199 if (buffer.length === 80) return block
10200
10201 function readVarInt () {
10202 var vi = bufferutils.readVarInt(buffer, offset)
10203 offset += vi.size
10204 return vi.number
10205 }
10206
10207 // FIXME: poor performance
10208 function readTransaction () {
10209 var tx = Transaction.fromBuffer(buffer.slice(offset), true)
10210
10211 offset += tx.toBuffer().length
10212 return tx
10213 }
10214
10215 var nTransactions = readVarInt()
10216 block.transactions = []
10217
10218 for (var i = 0; i < nTransactions; ++i) {
10219 var tx = readTransaction()
10220 block.transactions.push(tx)
10221 }
10222
10223 return block
10224 }
10225
10226 Block.fromHex = function (hex) {
10227 return Block.fromBuffer(new Buffer(hex, 'hex'))
10228 }
10229
10230 Block.prototype.getHash = function () {
10231 return crypto.hash256(this.toBuffer(true))
10232 }
10233
10234 Block.prototype.getId = function () {
10235 return bufferutils.reverse(this.getHash()).toString('hex')
10236 }
10237
10238 Block.prototype.getUTCDate = function () {
10239 var date = new Date(0) // epoch
10240 date.setUTCSeconds(this.timestamp)
10241
10242 return date
10243 }
10244
10245 Block.prototype.toBuffer = function (headersOnly) {
10246 var buffer = new Buffer(80)
10247
10248 var offset = 0
10249 function writeSlice (slice) {
10250 slice.copy(buffer, offset)
10251 offset += slice.length
10252 }
10253
10254 function writeUInt32 (i) {
10255 buffer.writeUInt32LE(i, offset)
10256 offset += 4
10257 }
10258
10259 writeUInt32(this.version)
10260 writeSlice(this.prevHash)
10261 writeSlice(this.merkleRoot)
10262 writeUInt32(this.timestamp)
10263 writeUInt32(this.bits)
10264 writeUInt32(this.nonce)
10265
10266 if (headersOnly || !this.transactions) return buffer
10267
10268 var txLenBuffer = bufferutils.varIntBuffer(this.transactions.length)
10269 var txBuffers = this.transactions.map(function (tx) {
10270 return tx.toBuffer()
10271 })
10272
10273 return Buffer.concat([buffer, txLenBuffer].concat(txBuffers))
10274 }
10275
10276 Block.prototype.toHex = function (headersOnly) {
10277 return this.toBuffer(headersOnly).toString('hex')
10278 }
10279
10280 module.exports = Block
10281
10282 }).call(this,require("buffer").Buffer)
10283 },{"./bufferutils":57,"./crypto":58,"./transaction":70,"assert":5,"buffer":7}],57:[function(require,module,exports){
10284 (function (Buffer){
10285 var assert = require('assert')
10286 var opcodes = require('./opcodes')
10287
10288 // https://github.com/feross/buffer/blob/master/index.js#L1127
10289 function verifuint (value, max) {
10290 assert(typeof value === 'number', 'cannot write a non-number as a number')
10291 assert(value >= 0, 'specified a negative value for writing an unsigned value')
10292 assert(value <= max, 'value is larger than maximum value for type')
10293 assert(Math.floor(value) === value, 'value has a fractional component')
10294 }
10295
10296 function pushDataSize (i) {
10297 return i < opcodes.OP_PUSHDATA1 ? 1
10298 : i < 0xff ? 2
10299 : i < 0xffff ? 3
10300 : 5
10301 }
10302
10303 function readPushDataInt (buffer, offset) {
10304 var opcode = buffer.readUInt8(offset)
10305 var number, size
10306
10307 // ~6 bit
10308 if (opcode < opcodes.OP_PUSHDATA1) {
10309 number = opcode
10310 size = 1
10311
10312 // 8 bit
10313 } else if (opcode === opcodes.OP_PUSHDATA1) {
10314 if (offset + 2 > buffer.length) return null
10315 number = buffer.readUInt8(offset + 1)
10316 size = 2
10317
10318 // 16 bit
10319 } else if (opcode === opcodes.OP_PUSHDATA2) {
10320 if (offset + 3 > buffer.length) return null
10321 number = buffer.readUInt16LE(offset + 1)
10322 size = 3
10323
10324 // 32 bit
10325 } else {
10326 if (offset + 5 > buffer.length) return null
10327 assert.equal(opcode, opcodes.OP_PUSHDATA4, 'Unexpected opcode')
10328
10329 number = buffer.readUInt32LE(offset + 1)
10330 size = 5
10331 }
10332
10333 return {
10334 opcode: opcode,
10335 number: number,
10336 size: size
10337 }
10338 }
10339
10340 function readUInt64LE (buffer, offset) {
10341 var a = buffer.readUInt32LE(offset)
10342 var b = buffer.readUInt32LE(offset + 4)
10343 b *= 0x100000000
10344
10345 verifuint(b + a, 0x001fffffffffffff)
10346
10347 return b + a
10348 }
10349
10350 function readVarInt (buffer, offset) {
10351 var t = buffer.readUInt8(offset)
10352 var number, size
10353
10354 // 8 bit
10355 if (t < 253) {
10356 number = t
10357 size = 1
10358
10359 // 16 bit
10360 } else if (t < 254) {
10361 number = buffer.readUInt16LE(offset + 1)
10362 size = 3
10363
10364 // 32 bit
10365 } else if (t < 255) {
10366 number = buffer.readUInt32LE(offset + 1)
10367 size = 5
10368
10369 // 64 bit
10370 } else {
10371 number = readUInt64LE(buffer, offset + 1)
10372 size = 9
10373 }
10374
10375 return {
10376 number: number,
10377 size: size
10378 }
10379 }
10380
10381 function writePushDataInt (buffer, number, offset) {
10382 var size = pushDataSize(number)
10383
10384 // ~6 bit
10385 if (size === 1) {
10386 buffer.writeUInt8(number, offset)
10387
10388 // 8 bit
10389 } else if (size === 2) {
10390 buffer.writeUInt8(opcodes.OP_PUSHDATA1, offset)
10391 buffer.writeUInt8(number, offset + 1)
10392
10393 // 16 bit
10394 } else if (size === 3) {
10395 buffer.writeUInt8(opcodes.OP_PUSHDATA2, offset)
10396 buffer.writeUInt16LE(number, offset + 1)
10397
10398 // 32 bit
10399 } else {
10400 buffer.writeUInt8(opcodes.OP_PUSHDATA4, offset)
10401 buffer.writeUInt32LE(number, offset + 1)
10402 }
10403
10404 return size
10405 }
10406
10407 function writeUInt64LE (buffer, value, offset) {
10408 verifuint(value, 0x001fffffffffffff)
10409
10410 buffer.writeInt32LE(value & -1, offset)
10411 buffer.writeUInt32LE(Math.floor(value / 0x100000000), offset + 4)
10412 }
10413
10414 function varIntSize (i) {
10415 return i < 253 ? 1
10416 : i < 0x10000 ? 3
10417 : i < 0x100000000 ? 5
10418 : 9
10419 }
10420
10421 function writeVarInt (buffer, number, offset) {
10422 var size = varIntSize(number)
10423
10424 // 8 bit
10425 if (size === 1) {
10426 buffer.writeUInt8(number, offset)
10427
10428 // 16 bit
10429 } else if (size === 3) {
10430 buffer.writeUInt8(253, offset)
10431 buffer.writeUInt16LE(number, offset + 1)
10432
10433 // 32 bit
10434 } else if (size === 5) {
10435 buffer.writeUInt8(254, offset)
10436 buffer.writeUInt32LE(number, offset + 1)
10437
10438 // 64 bit
10439 } else {
10440 buffer.writeUInt8(255, offset)
10441 writeUInt64LE(buffer, number, offset + 1)
10442 }
10443
10444 return size
10445 }
10446
10447 function varIntBuffer (i) {
10448 var size = varIntSize(i)
10449 var buffer = new Buffer(size)
10450 writeVarInt(buffer, i, 0)
10451
10452 return buffer
10453 }
10454
10455 function reverse (buffer) {
10456 var buffer2 = new Buffer(buffer)
10457 Array.prototype.reverse.call(buffer2)
10458 return buffer2
10459 }
10460
10461 module.exports = {
10462 pushDataSize: pushDataSize,
10463 readPushDataInt: readPushDataInt,
10464 readUInt64LE: readUInt64LE,
10465 readVarInt: readVarInt,
10466 reverse: reverse,
10467 varIntBuffer: varIntBuffer,
10468 varIntSize: varIntSize,
10469 writePushDataInt: writePushDataInt,
10470 writeUInt64LE: writeUInt64LE,
10471 writeVarInt: writeVarInt
10472 }
10473
10474 }).call(this,require("buffer").Buffer)
10475 },{"./opcodes":67,"assert":5,"buffer":7}],58:[function(require,module,exports){
10476 var createHash = require('create-hash')
10477
10478 function hash160 (buffer) {
10479 return ripemd160(sha256(buffer))
10480 }
10481
10482 function hash256 (buffer) {
10483 return sha256(sha256(buffer))
10484 }
10485
10486 function ripemd160 (buffer) {
10487 return createHash('rmd160').update(buffer).digest()
10488 }
10489
10490 function sha1 (buffer) {
10491 return createHash('sha1').update(buffer).digest()
10492 }
10493
10494 function sha256 (buffer) {
10495 return createHash('sha256').update(buffer).digest()
10496 }
10497
10498 // FIXME: Name not consistent with others
10499 var createHmac = require('create-hmac')
10500
10501 function HmacSHA256 (buffer, secret) {
10502 console.warn('Hmac* functions are deprecated for removal in 2.0.0, use node crypto instead')
10503 return createHmac('sha256', secret).update(buffer).digest()
10504 }
10505
10506 function HmacSHA512 (buffer, secret) {
10507 console.warn('Hmac* functions are deprecated for removal in 2.0.0, use node crypto instead')
10508 return createHmac('sha512', secret).update(buffer).digest()
10509 }
10510
10511 module.exports = {
10512 ripemd160: ripemd160,
10513 sha1: sha1,
10514 sha256: sha256,
10515 hash160: hash160,
10516 hash256: hash256,
10517 HmacSHA256: HmacSHA256,
10518 HmacSHA512: HmacSHA512
10519 }
10520
10521 },{"create-hash":32,"create-hmac":45}],59:[function(require,module,exports){
10522 (function (Buffer){
10523 var assert = require('assert')
10524 var createHmac = require('create-hmac')
10525 var typeForce = require('typeforce')
10526
10527 var BigInteger = require('bigi')
10528 var ECSignature = require('./ecsignature')
10529
10530 var ZERO = new Buffer([0])
10531 var ONE = new Buffer([1])
10532
10533 // https://tools.ietf.org/html/rfc6979#section-3.2
10534 function deterministicGenerateK (curve, hash, d, checkSig) {
10535 typeForce('Buffer', hash)
10536 typeForce('BigInteger', d)
10537
10538 // FIXME: remove/uncomment for 2.0.0
10539 // typeForce('Function', checkSig)
10540
10541 if (typeof checkSig !== 'function') {
10542 console.warn('deterministicGenerateK requires a checkSig callback in 2.0.0, see #337 for more information')
10543
10544 checkSig = function (k) {
10545 var G = curve.G
10546 var n = curve.n
10547 var e = BigInteger.fromBuffer(hash)
10548
10549 var Q = G.multiply(k)
10550
10551 if (curve.isInfinity(Q))
10552 return false
10553
10554 var r = Q.affineX.mod(n)
10555 if (r.signum() === 0)
10556 return false
10557
10558 var s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n)
10559 if (s.signum() === 0)
10560 return false
10561
10562 return true
10563 }
10564 }
10565
10566 // sanity check
10567 assert.equal(hash.length, 32, 'Hash must be 256 bit')
10568
10569 var x = d.toBuffer(32)
10570 var k = new Buffer(32)
10571 var v = new Buffer(32)
10572
10573 // Step A, ignored as hash already provided
10574 // Step B
10575 v.fill(1)
10576
10577 // Step C
10578 k.fill(0)
10579
10580 // Step D
10581 k = createHmac('sha256', k)
10582 .update(v)
10583 .update(ZERO)
10584 .update(x)
10585 .update(hash)
10586 .digest()
10587
10588 // Step E
10589 v = createHmac('sha256', k).update(v).digest()
10590
10591 // Step F
10592 k = createHmac('sha256', k)
10593 .update(v)
10594 .update(ONE)
10595 .update(x)
10596 .update(hash)
10597 .digest()
10598
10599 // Step G
10600 v = createHmac('sha256', k).update(v).digest()
10601
10602 // Step H1/H2a, ignored as tlen === qlen (256 bit)
10603 // Step H2b
10604 v = createHmac('sha256', k).update(v).digest()
10605
10606 var T = BigInteger.fromBuffer(v)
10607
10608 // Step H3, repeat until T is within the interval [1, n - 1] and is suitable for ECDSA
10609 while ((T.signum() <= 0) || (T.compareTo(curve.n) >= 0) || !checkSig(T)) {
10610 k = createHmac('sha256', k)
10611 .update(v)
10612 .update(ZERO)
10613 .digest()
10614
10615 v = createHmac('sha256', k).update(v).digest()
10616
10617 // Step H1/H2a, again, ignored as tlen === qlen (256 bit)
10618 // Step H2b again
10619 v = createHmac('sha256', k).update(v).digest()
10620 T = BigInteger.fromBuffer(v)
10621 }
10622
10623 return T
10624 }
10625
10626 function sign (curve, hash, d) {
10627 var r, s
10628
10629 var e = BigInteger.fromBuffer(hash)
10630 var n = curve.n
10631 var G = curve.G
10632
10633 deterministicGenerateK(curve, hash, d, function (k) {
10634 var Q = G.multiply(k)
10635
10636 if (curve.isInfinity(Q))
10637 return false
10638
10639 r = Q.affineX.mod(n)
10640 if (r.signum() === 0)
10641 return false
10642
10643 s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n)
10644 if (s.signum() === 0)
10645 return false
10646
10647 return true
10648 })
10649
10650 var N_OVER_TWO = n.shiftRight(1)
10651
10652 // enforce low S values, see bip62: 'low s values in signatures'
10653 if (s.compareTo(N_OVER_TWO) > 0) {
10654 s = n.subtract(s)
10655 }
10656
10657 return new ECSignature(r, s)
10658 }
10659
10660 function verifyRaw (curve, e, signature, Q) {
10661 var n = curve.n
10662 var G = curve.G
10663
10664 var r = signature.r
10665 var s = signature.s
10666
10667 // 1.4.1 Enforce r and s are both integers in the interval [1, n − 1]
10668 if (r.signum() <= 0 || r.compareTo(n) >= 0) return false
10669 if (s.signum() <= 0 || s.compareTo(n) >= 0) return false
10670
10671 // c = s^-1 mod n
10672 var c = s.modInverse(n)
10673
10674 // 1.4.4 Compute u1 = es^−1 mod n
10675 // u2 = rs^−1 mod n
10676 var u1 = e.multiply(c).mod(n)
10677 var u2 = r.multiply(c).mod(n)
10678
10679 // 1.4.5 Compute R = (xR, yR) = u1G + u2Q
10680 var R = G.multiplyTwo(u1, Q, u2)
10681 var v = R.affineX.mod(n)
10682
10683 // 1.4.5 (cont.) Enforce R is not at infinity
10684 if (curve.isInfinity(R)) return false
10685
10686 // 1.4.8 If v = r, output "valid", and if v != r, output "invalid"
10687 return v.equals(r)
10688 }
10689
10690 function verify (curve, hash, signature, Q) {
10691 // 1.4.2 H = Hash(M), already done by the user
10692 // 1.4.3 e = H
10693 var e = BigInteger.fromBuffer(hash)
10694
10695 return verifyRaw(curve, e, signature, Q)
10696 }
10697
10698 /**
10699 * Recover a public key from a signature.
10700 *
10701 * See SEC 1: Elliptic Curve Cryptography, section 4.1.6, "Public
10702 * Key Recovery Operation".
10703 *
10704 * http://www.secg.org/download/aid-780/sec1-v2.pdf
10705 */
10706 function recoverPubKey (curve, e, signature, i) {
10707 assert.strictEqual(i & 3, i, 'Recovery param is more than two bits')
10708
10709 var n = curve.n
10710 var G = curve.G
10711
10712 var r = signature.r
10713 var s = signature.s
10714
10715 assert(r.signum() > 0 && r.compareTo(n) < 0, 'Invalid r value')
10716 assert(s.signum() > 0 && s.compareTo(n) < 0, 'Invalid s value')
10717
10718 // A set LSB signifies that the y-coordinate is odd
10719 var isYOdd = i & 1
10720
10721 // The more significant bit specifies whether we should use the
10722 // first or second candidate key.
10723 var isSecondKey = i >> 1
10724
10725 // 1.1 Let x = r + jn
10726 var x = isSecondKey ? r.add(n) : r
10727 var R = curve.pointFromX(isYOdd, x)
10728
10729 // 1.4 Check that nR is at infinity
10730 var nR = R.multiply(n)
10731 assert(curve.isInfinity(nR), 'nR is not a valid curve point')
10732
10733 // Compute -e from e
10734 var eNeg = e.negate().mod(n)
10735
10736 // 1.6.1 Compute Q = r^-1 (sR - eG)
10737 // Q = r^-1 (sR + -eG)
10738 var rInv = r.modInverse(n)
10739
10740 var Q = R.multiplyTwo(s, G, eNeg).multiply(rInv)
10741 curve.validate(Q)
10742
10743 return Q
10744 }
10745
10746 /**
10747 * Calculate pubkey extraction parameter.
10748 *
10749 * When extracting a pubkey from a signature, we have to
10750 * distinguish four different cases. Rather than putting this
10751 * burden on the verifier, Bitcoin includes a 2-bit value with the
10752 * signature.
10753 *
10754 * This function simply tries all four cases and returns the value
10755 * that resulted in a successful pubkey recovery.
10756 */
10757 function calcPubKeyRecoveryParam (curve, e, signature, Q) {
10758 for (var i = 0; i < 4; i++) {
10759 var Qprime = recoverPubKey(curve, e, signature, i)
10760
10761 // 1.6.2 Verify Q
10762 if (Qprime.equals(Q)) {
10763 return i
10764 }
10765 }
10766
10767 throw new Error('Unable to find valid recovery factor')
10768 }
10769
10770 module.exports = {
10771 calcPubKeyRecoveryParam: calcPubKeyRecoveryParam,
10772 deterministicGenerateK: deterministicGenerateK,
10773 recoverPubKey: recoverPubKey,
10774 sign: sign,
10775 verify: verify,
10776 verifyRaw: verifyRaw
10777 }
10778
10779 }).call(this,require("buffer").Buffer)
10780 },{"./ecsignature":62,"assert":5,"bigi":3,"buffer":7,"create-hmac":45,"typeforce":53}],60:[function(require,module,exports){
10781 (function (Buffer){
10782 var assert = require('assert')
10783 var base58check = require('bs58check')
10784 var ecdsa = require('./ecdsa')
10785 var networks = require('./networks')
10786 var randomBytes = require('randombytes')
10787 var typeForce = require('typeforce')
10788
10789 var BigInteger = require('bigi')
10790 var ECPubKey = require('./ecpubkey')
10791
10792 var ecurve = require('ecurve')
10793 var secp256k1 = ecurve.getCurveByName('secp256k1')
10794
10795 function ECKey (d, compressed) {
10796 assert(d.signum() > 0, 'Private key must be greater than 0')
10797 assert(d.compareTo(ECKey.curve.n) < 0, 'Private key must be less than the curve order')
10798
10799 var Q = ECKey.curve.G.multiply(d)
10800
10801 this.d = d
10802 this.pub = new ECPubKey(Q, compressed)
10803 }
10804
10805 // Constants
10806 ECKey.curve = secp256k1
10807
10808 // Static constructors
10809 ECKey.fromWIF = function (string) {
10810 var payload = base58check.decode(string)
10811 var compressed = false
10812
10813 // Ignore the version byte
10814 payload = payload.slice(1)
10815
10816 if (payload.length === 33) {
10817 assert.strictEqual(payload[32], 0x01, 'Invalid compression flag')
10818
10819 // Truncate the compression flag
10820 payload = payload.slice(0, -1)
10821 compressed = true
10822 }
10823
10824 assert.equal(payload.length, 32, 'Invalid WIF payload length')
10825
10826 var d = BigInteger.fromBuffer(payload)
10827 return new ECKey(d, compressed)
10828 }
10829
10830 ECKey.makeRandom = function (compressed, rng) {
10831 rng = rng || randomBytes
10832
10833 var buffer = rng(32)
10834 typeForce('Buffer', buffer)
10835 assert.equal(buffer.length, 32, 'Expected 256-bit Buffer from RNG')
10836
10837 var d = BigInteger.fromBuffer(buffer)
10838 d = d.mod(ECKey.curve.n)
10839
10840 return new ECKey(d, compressed)
10841 }
10842
10843 // Export functions
10844 ECKey.prototype.toWIF = function (network) {
10845 network = network || networks.bitcoin
10846
10847 var bufferLen = this.pub.compressed ? 34 : 33
10848 var buffer = new Buffer(bufferLen)
10849
10850 buffer.writeUInt8(network.wif, 0)
10851 this.d.toBuffer(32).copy(buffer, 1)
10852
10853 if (this.pub.compressed) {
10854 buffer.writeUInt8(0x01, 33)
10855 }
10856
10857 return base58check.encode(buffer)
10858 }
10859
10860 // Operations
10861 ECKey.prototype.sign = function (hash) {
10862 return ecdsa.sign(ECKey.curve, hash, this.d)
10863 }
10864
10865 module.exports = ECKey
10866
10867 }).call(this,require("buffer").Buffer)
10868 },{"./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){
10869 (function (Buffer){
10870 var crypto = require('./crypto')
10871 var ecdsa = require('./ecdsa')
10872 var typeForce = require('typeforce')
10873 var networks = require('./networks')
10874
10875 var Address = require('./address')
10876
10877 var ecurve = require('ecurve')
10878 var secp256k1 = ecurve.getCurveByName('secp256k1')
10879
10880 function ECPubKey (Q, compressed) {
10881 if (compressed === undefined) {
10882 compressed = true
10883 }
10884
10885 typeForce('Point', Q)
10886 typeForce('Boolean', compressed)
10887
10888 this.compressed = compressed
10889 this.Q = Q
10890 }
10891
10892 // Constants
10893 ECPubKey.curve = secp256k1
10894
10895 // Static constructors
10896 ECPubKey.fromBuffer = function (buffer) {
10897 var Q = ecurve.Point.decodeFrom(ECPubKey.curve, buffer)
10898 return new ECPubKey(Q, Q.compressed)
10899 }
10900
10901 ECPubKey.fromHex = function (hex) {
10902 return ECPubKey.fromBuffer(new Buffer(hex, 'hex'))
10903 }
10904
10905 // Operations
10906 ECPubKey.prototype.getAddress = function (network) {
10907 network = network || networks.bitcoin
10908
10909 return new Address(crypto.hash160(this.toBuffer()), network.pubKeyHash)
10910 }
10911
10912 ECPubKey.prototype.verify = function (hash, signature) {
10913 return ecdsa.verify(ECPubKey.curve, hash, signature, this.Q)
10914 }
10915
10916 // Export functions
10917 ECPubKey.prototype.toBuffer = function () {
10918 return this.Q.getEncoded(this.compressed)
10919 }
10920
10921 ECPubKey.prototype.toHex = function () {
10922 return this.toBuffer().toString('hex')
10923 }
10924
10925 module.exports = ECPubKey
10926
10927 }).call(this,require("buffer").Buffer)
10928 },{"./address":54,"./crypto":58,"./ecdsa":59,"./networks":66,"buffer":7,"ecurve":49,"typeforce":53}],62:[function(require,module,exports){
10929 (function (Buffer){
10930 var assert = require('assert')
10931 var typeForce = require('typeforce')
10932
10933 var BigInteger = require('bigi')
10934
10935 function ECSignature (r, s) {
10936 typeForce('BigInteger', r)
10937 typeForce('BigInteger', s)
10938
10939 this.r = r
10940 this.s = s
10941 }
10942
10943 ECSignature.parseCompact = function (buffer) {
10944 assert.equal(buffer.length, 65, 'Invalid signature length')
10945 var i = buffer.readUInt8(0) - 27
10946
10947 // At most 3 bits
10948 assert.equal(i, i & 7, 'Invalid signature parameter')
10949 var compressed = !!(i & 4)
10950
10951 // Recovery param only
10952 i = i & 3
10953
10954 var r = BigInteger.fromBuffer(buffer.slice(1, 33))
10955 var s = BigInteger.fromBuffer(buffer.slice(33))
10956
10957 return {
10958 compressed: compressed,
10959 i: i,
10960 signature: new ECSignature(r, s)
10961 }
10962 }
10963
10964 ECSignature.fromDER = function (buffer) {
10965 assert.equal(buffer.readUInt8(0), 0x30, 'Not a DER sequence')
10966 assert.equal(buffer.readUInt8(1), buffer.length - 2, 'Invalid sequence length')
10967 assert.equal(buffer.readUInt8(2), 0x02, 'Expected a DER integer')
10968
10969 var rLen = buffer.readUInt8(3)
10970 assert(rLen > 0, 'R length is zero')
10971
10972 var offset = 4 + rLen
10973 assert.equal(buffer.readUInt8(offset), 0x02, 'Expected a DER integer (2)')
10974
10975 var sLen = buffer.readUInt8(offset + 1)
10976 assert(sLen > 0, 'S length is zero')
10977
10978 var rB = buffer.slice(4, offset)
10979 var sB = buffer.slice(offset + 2)
10980 offset += 2 + sLen
10981
10982 if (rLen > 1 && rB.readUInt8(0) === 0x00) {
10983 assert(rB.readUInt8(1) & 0x80, 'R value excessively padded')
10984 }
10985
10986 if (sLen > 1 && sB.readUInt8(0) === 0x00) {
10987 assert(sB.readUInt8(1) & 0x80, 'S value excessively padded')
10988 }
10989
10990 assert.equal(offset, buffer.length, 'Invalid DER encoding')
10991 var r = BigInteger.fromDERInteger(rB)
10992 var s = BigInteger.fromDERInteger(sB)
10993
10994 assert(r.signum() >= 0, 'R value is negative')
10995 assert(s.signum() >= 0, 'S value is negative')
10996
10997 return new ECSignature(r, s)
10998 }
10999
11000 // BIP62: 1 byte hashType flag (only 0x01, 0x02, 0x03, 0x81, 0x82 and 0x83 are allowed)
11001 ECSignature.parseScriptSignature = function (buffer) {
11002 var hashType = buffer.readUInt8(buffer.length - 1)
11003 var hashTypeMod = hashType & ~0x80
11004
11005 assert(hashTypeMod > 0x00 && hashTypeMod < 0x04, 'Invalid hashType ' + hashType)
11006
11007 return {
11008 signature: ECSignature.fromDER(buffer.slice(0, -1)),
11009 hashType: hashType
11010 }
11011 }
11012
11013 ECSignature.prototype.toCompact = function (i, compressed) {
11014 if (compressed) {
11015 i += 4
11016 }
11017
11018 i += 27
11019
11020 var buffer = new Buffer(65)
11021 buffer.writeUInt8(i, 0)
11022
11023 this.r.toBuffer(32).copy(buffer, 1)
11024 this.s.toBuffer(32).copy(buffer, 33)
11025
11026 return buffer
11027 }
11028
11029 ECSignature.prototype.toDER = function () {
11030 var rBa = this.r.toDERInteger()
11031 var sBa = this.s.toDERInteger()
11032
11033 var sequence = []
11034
11035 // INTEGER
11036 sequence.push(0x02, rBa.length)
11037 sequence = sequence.concat(rBa)
11038
11039 // INTEGER
11040 sequence.push(0x02, sBa.length)
11041 sequence = sequence.concat(sBa)
11042
11043 // SEQUENCE
11044 sequence.unshift(0x30, sequence.length)
11045
11046 return new Buffer(sequence)
11047 }
11048
11049 ECSignature.prototype.toScriptSignature = function (hashType) {
11050 var hashTypeMod = hashType & ~0x80
11051 assert(hashTypeMod > 0x00 && hashTypeMod < 0x04, 'Invalid hashType ' + hashType)
11052
11053 var hashTypeBuffer = new Buffer(1)
11054 hashTypeBuffer.writeUInt8(hashType, 0)
11055
11056 return Buffer.concat([this.toDER(), hashTypeBuffer])
11057 }
11058
11059 module.exports = ECSignature
11060
11061 }).call(this,require("buffer").Buffer)
11062 },{"assert":5,"bigi":3,"buffer":7,"typeforce":53}],63:[function(require,module,exports){
11063 (function (Buffer){
11064 var assert = require('assert')
11065 var base58check = require('bs58check')
11066 var bcrypto = require('./crypto')
11067 var createHmac = require('create-hmac')
11068 var typeForce = require('typeforce')
11069 var networks = require('./networks')
11070
11071 var BigInteger = require('bigi')
11072 var ECKey = require('./eckey')
11073 var ECPubKey = require('./ecpubkey')
11074
11075 var ecurve = require('ecurve')
11076 var curve = ecurve.getCurveByName('secp256k1')
11077
11078 function findBIP32NetworkByVersion (version) {
11079 for (var name in networks) {
11080 var network = networks[name]
11081
11082 if (version === network.bip32.private || version === network.bip32.public) {
11083 return network
11084 }
11085 }
11086
11087 assert(false, 'Could not find network for ' + version.toString(16))
11088 }
11089
11090 function HDNode (K, chainCode, network) {
11091 network = network || networks.bitcoin
11092
11093 typeForce('Buffer', chainCode)
11094
11095 assert.equal(chainCode.length, 32, 'Expected chainCode length of 32, got ' + chainCode.length)
11096 assert(network.bip32, 'Unknown BIP32 constants for network')
11097
11098 this.chainCode = chainCode
11099 this.depth = 0
11100 this.index = 0
11101 this.parentFingerprint = 0x00000000
11102 this.network = network
11103
11104 if (K instanceof BigInteger) {
11105 this.privKey = new ECKey(K, true)
11106 this.pubKey = this.privKey.pub
11107 } else if (K instanceof ECKey) {
11108 assert(K.pub.compressed, 'ECKey must be compressed')
11109 this.privKey = K
11110 this.pubKey = K.pub
11111 } else if (K instanceof ECPubKey) {
11112 assert(K.compressed, 'ECPubKey must be compressed')
11113 this.pubKey = K
11114 } else {
11115 this.pubKey = new ECPubKey(K, true)
11116 }
11117 }
11118
11119 HDNode.MASTER_SECRET = new Buffer('Bitcoin seed')
11120 HDNode.HIGHEST_BIT = 0x80000000
11121 HDNode.LENGTH = 78
11122
11123 HDNode.fromSeedBuffer = function (seed, network) {
11124 typeForce('Buffer', seed)
11125
11126 assert(seed.length >= 16, 'Seed should be at least 128 bits')
11127 assert(seed.length <= 64, 'Seed should be at most 512 bits')
11128
11129 var I = createHmac('sha512', HDNode.MASTER_SECRET).update(seed).digest()
11130 var IL = I.slice(0, 32)
11131 var IR = I.slice(32)
11132
11133 // In case IL is 0 or >= n, the master key is invalid
11134 // This is handled by `new ECKey` in the HDNode constructor
11135 var pIL = BigInteger.fromBuffer(IL)
11136
11137 return new HDNode(pIL, IR, network)
11138 }
11139
11140 HDNode.fromSeedHex = function (hex, network) {
11141 return HDNode.fromSeedBuffer(new Buffer(hex, 'hex'), network)
11142 }
11143
11144 HDNode.fromBase58 = function (string, network) {
11145 return HDNode.fromBuffer(base58check.decode(string), network, true)
11146 }
11147
11148 // FIXME: remove in 2.x.y
11149 HDNode.fromBuffer = function (buffer, network, __ignoreDeprecation) {
11150 if (!__ignoreDeprecation) {
11151 console.warn('HDNode.fromBuffer() is deprecated for removal in 2.x.y, use fromBase58 instead')
11152 }
11153
11154 assert.strictEqual(buffer.length, HDNode.LENGTH, 'Invalid buffer length')
11155
11156 // 4 byte: version bytes
11157 var version = buffer.readUInt32BE(0)
11158
11159 if (network) {
11160 assert(version === network.bip32.private || version === network.bip32.public, "Network doesn't match")
11161
11162 // auto-detect
11163 } else {
11164 network = findBIP32NetworkByVersion(version)
11165 }
11166
11167 // 1 byte: depth: 0x00 for master nodes, 0x01 for level-1 descendants, ...
11168 var depth = buffer.readUInt8(4)
11169
11170 // 4 bytes: the fingerprint of the parent's key (0x00000000 if master key)
11171 var parentFingerprint = buffer.readUInt32BE(5)
11172 if (depth === 0) {
11173 assert.strictEqual(parentFingerprint, 0x00000000, 'Invalid parent fingerprint')
11174 }
11175
11176 // 4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
11177 // This is encoded in MSB order. (0x00000000 if master key)
11178 var index = buffer.readUInt32BE(9)
11179 assert(depth > 0 || index === 0, 'Invalid index')
11180
11181 // 32 bytes: the chain code
11182 var chainCode = buffer.slice(13, 45)
11183 var data, hd
11184
11185 // 33 bytes: private key data (0x00 + k)
11186 if (version === network.bip32.private) {
11187 assert.strictEqual(buffer.readUInt8(45), 0x00, 'Invalid private key')
11188 data = buffer.slice(46, 78)
11189 var d = BigInteger.fromBuffer(data)
11190 hd = new HDNode(d, chainCode, network)
11191
11192 // 33 bytes: public key data (0x02 + X or 0x03 + X)
11193 } else {
11194 data = buffer.slice(45, 78)
11195 var Q = ecurve.Point.decodeFrom(curve, data)
11196 assert.equal(Q.compressed, true, 'Invalid public key')
11197
11198 // Verify that the X coordinate in the public point corresponds to a point on the curve.
11199 // If not, the extended public key is invalid.
11200 curve.validate(Q)
11201
11202 hd = new HDNode(Q, chainCode, network)
11203 }
11204
11205 hd.depth = depth
11206 hd.index = index
11207 hd.parentFingerprint = parentFingerprint
11208
11209 return hd
11210 }
11211
11212 // FIXME: remove in 2.x.y
11213 HDNode.fromHex = function (hex, network) {
11214 return HDNode.fromBuffer(new Buffer(hex, 'hex'), network)
11215 }
11216
11217 HDNode.prototype.getIdentifier = function () {
11218 return bcrypto.hash160(this.pubKey.toBuffer())
11219 }
11220
11221 HDNode.prototype.getFingerprint = function () {
11222 return this.getIdentifier().slice(0, 4)
11223 }
11224
11225 HDNode.prototype.getAddress = function () {
11226 return this.pubKey.getAddress(this.network)
11227 }
11228
11229 HDNode.prototype.neutered = function () {
11230 var neutered = new HDNode(this.pubKey.Q, this.chainCode, this.network)
11231 neutered.depth = this.depth
11232 neutered.index = this.index
11233 neutered.parentFingerprint = this.parentFingerprint
11234
11235 return neutered
11236 }
11237
11238 HDNode.prototype.toBase58 = function (isPrivate) {
11239 return base58check.encode(this.toBuffer(isPrivate, true))
11240 }
11241
11242 // FIXME: remove in 2.x.y
11243 HDNode.prototype.toBuffer = function (isPrivate, __ignoreDeprecation) {
11244 if (isPrivate === undefined) {
11245 isPrivate = !!this.privKey
11246
11247 // FIXME: remove in 2.x.y
11248 } else {
11249 console.warn('isPrivate flag is deprecated, please use the .neutered() method instead')
11250 }
11251
11252 if (!__ignoreDeprecation) {
11253 console.warn('HDNode.toBuffer() is deprecated for removal in 2.x.y, use toBase58 instead')
11254 }
11255
11256 // Version
11257 var version = isPrivate ? this.network.bip32.private : this.network.bip32.public
11258 var buffer = new Buffer(HDNode.LENGTH)
11259
11260 // 4 bytes: version bytes
11261 buffer.writeUInt32BE(version, 0)
11262
11263 // Depth
11264 // 1 byte: depth: 0x00 for master nodes, 0x01 for level-1 descendants, ....
11265 buffer.writeUInt8(this.depth, 4)
11266
11267 // 4 bytes: the fingerprint of the parent's key (0x00000000 if master key)
11268 buffer.writeUInt32BE(this.parentFingerprint, 5)
11269
11270 // 4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
11271 // This is encoded in Big endian. (0x00000000 if master key)
11272 buffer.writeUInt32BE(this.index, 9)
11273
11274 // 32 bytes: the chain code
11275 this.chainCode.copy(buffer, 13)
11276
11277 // 33 bytes: the public key or private key data
11278 if (isPrivate) {
11279 // FIXME: remove in 2.x.y
11280 assert(this.privKey, 'Missing private key')
11281
11282 // 0x00 + k for private keys
11283 buffer.writeUInt8(0, 45)
11284 this.privKey.d.toBuffer(32).copy(buffer, 46)
11285 } else {
11286 // X9.62 encoding for public keys
11287 this.pubKey.toBuffer().copy(buffer, 45)
11288 }
11289
11290 return buffer
11291 }
11292
11293 // FIXME: remove in 2.x.y
11294 HDNode.prototype.toHex = function (isPrivate) {
11295 return this.toBuffer(isPrivate).toString('hex')
11296 }
11297
11298 // https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#child-key-derivation-ckd-functions
11299 HDNode.prototype.derive = function (index) {
11300 var isHardened = index >= HDNode.HIGHEST_BIT
11301 var indexBuffer = new Buffer(4)
11302 indexBuffer.writeUInt32BE(index, 0)
11303
11304 var data
11305
11306 // Hardened child
11307 if (isHardened) {
11308 assert(this.privKey, 'Could not derive hardened child key')
11309
11310 // data = 0x00 || ser256(kpar) || ser32(index)
11311 data = Buffer.concat([
11312 this.privKey.d.toBuffer(33),
11313 indexBuffer
11314 ])
11315
11316 // Normal child
11317 } else {
11318 // data = serP(point(kpar)) || ser32(index)
11319 // = serP(Kpar) || ser32(index)
11320 data = Buffer.concat([
11321 this.pubKey.toBuffer(),
11322 indexBuffer
11323 ])
11324 }
11325
11326 var I = createHmac('sha512', this.chainCode).update(data).digest()
11327 var IL = I.slice(0, 32)
11328 var IR = I.slice(32)
11329
11330 var pIL = BigInteger.fromBuffer(IL)
11331
11332 // In case parse256(IL) >= n, proceed with the next value for i
11333 if (pIL.compareTo(curve.n) >= 0) {
11334 return this.derive(index + 1)
11335 }
11336
11337 // Private parent key -> private child key
11338 var hd
11339 if (this.privKey) {
11340 // ki = parse256(IL) + kpar (mod n)
11341 var ki = pIL.add(this.privKey.d).mod(curve.n)
11342
11343 // In case ki == 0, proceed with the next value for i
11344 if (ki.signum() === 0) {
11345 return this.derive(index + 1)
11346 }
11347
11348 hd = new HDNode(ki, IR, this.network)
11349
11350 // Public parent key -> public child key
11351 } else {
11352 // Ki = point(parse256(IL)) + Kpar
11353 // = G*IL + Kpar
11354 var Ki = curve.G.multiply(pIL).add(this.pubKey.Q)
11355
11356 // In case Ki is the point at infinity, proceed with the next value for i
11357 if (curve.isInfinity(Ki)) {
11358 return this.derive(index + 1)
11359 }
11360
11361 hd = new HDNode(Ki, IR, this.network)
11362 }
11363
11364 hd.depth = this.depth + 1
11365 hd.index = index
11366 hd.parentFingerprint = this.getFingerprint().readUInt32BE(0)
11367
11368 return hd
11369 }
11370
11371 HDNode.prototype.deriveHardened = function (index) {
11372 // Only derives hardened private keys by default
11373 return this.derive(index + HDNode.HIGHEST_BIT)
11374 }
11375
11376 HDNode.prototype.toString = HDNode.prototype.toBase58
11377
11378 module.exports = HDNode
11379
11380 }).call(this,require("buffer").Buffer)
11381 },{"./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){
11382 module.exports = {
11383 Address: require('./address'),
11384 base58check: require('./base58check'),
11385 Block: require('./block'),
11386 bufferutils: require('./bufferutils'),
11387 crypto: require('./crypto'),
11388 ecdsa: require('./ecdsa'),
11389 ECKey: require('./eckey'),
11390 ECPubKey: require('./ecpubkey'),
11391 ECSignature: require('./ecsignature'),
11392 Message: require('./message'),
11393 opcodes: require('./opcodes'),
11394 HDNode: require('./hdnode'),
11395 Script: require('./script'),
11396 scripts: require('./scripts'),
11397 Transaction: require('./transaction'),
11398 TransactionBuilder: require('./transaction_builder'),
11399 networks: require('./networks'),
11400 Wallet: require('./wallet')
11401 }
11402
11403 },{"./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){
11404 (function (Buffer){
11405 var bufferutils = require('./bufferutils')
11406 var crypto = require('./crypto')
11407 var ecdsa = require('./ecdsa')
11408 var networks = require('./networks')
11409
11410 var BigInteger = require('bigi')
11411 var ECPubKey = require('./ecpubkey')
11412 var ECSignature = require('./ecsignature')
11413
11414 var ecurve = require('ecurve')
11415 var ecparams = ecurve.getCurveByName('secp256k1')
11416
11417 function magicHash (message, network) {
11418 var magicPrefix = new Buffer(network.magicPrefix)
11419 var messageBuffer = new Buffer(message)
11420 var lengthBuffer = bufferutils.varIntBuffer(messageBuffer.length)
11421
11422 var buffer = Buffer.concat([magicPrefix, lengthBuffer, messageBuffer])
11423 return crypto.hash256(buffer)
11424 }
11425
11426 function sign (privKey, message, network) {
11427 network = network || networks.bitcoin
11428
11429 var hash = magicHash(message, network)
11430 var signature = privKey.sign(hash)
11431 var e = BigInteger.fromBuffer(hash)
11432 var i = ecdsa.calcPubKeyRecoveryParam(ecparams, e, signature, privKey.pub.Q)
11433
11434 return signature.toCompact(i, privKey.pub.compressed)
11435 }
11436
11437 // TODO: network could be implied from address
11438 function verify (address, signature, message, network) {
11439 if (!Buffer.isBuffer(signature)) {
11440 signature = new Buffer(signature, 'base64')
11441 }
11442
11443 network = network || networks.bitcoin
11444
11445 var hash = magicHash(message, network)
11446 var parsed = ECSignature.parseCompact(signature)
11447 var e = BigInteger.fromBuffer(hash)
11448 var Q = ecdsa.recoverPubKey(ecparams, e, parsed.signature, parsed.i)
11449
11450 var pubKey = new ECPubKey(Q, parsed.compressed)
11451 return pubKey.getAddress(network).toString() === address.toString()
11452 }
11453
11454 module.exports = {
11455 magicHash: magicHash,
11456 sign: sign,
11457 verify: verify
11458 }
11459
11460 }).call(this,require("buffer").Buffer)
11461 },{"./bufferutils":57,"./crypto":58,"./ecdsa":59,"./ecpubkey":61,"./ecsignature":62,"./networks":66,"bigi":3,"buffer":7,"ecurve":49}],66:[function(require,module,exports){
11462 // https://en.bitcoin.it/wiki/List_of_address_prefixes
11463 // Dogecoin BIP32 is a proposed standard: https://bitcointalk.org/index.php?topic=409731
11464
11465 var networks = {
11466 bitcoin: {
11467 magicPrefix: '\x18Bitcoin Signed Message:\n',
11468 bip32: {
11469 public: 0x0488b21e,
11470 private: 0x0488ade4
11471 },
11472 pubKeyHash: 0x00,
11473 scriptHash: 0x05,
11474 wif: 0x80,
11475 dustThreshold: 546, // https://github.com/bitcoin/bitcoin/blob/v0.9.2/src/core.h#L151-L162
11476 feePerKb: 10000, // https://github.com/bitcoin/bitcoin/blob/v0.9.2/src/main.cpp#L53
11477 estimateFee: estimateFee('bitcoin')
11478 },
11479 testnet: {
11480 magicPrefix: '\x18Bitcoin Signed Message:\n',
11481 bip32: {
11482 public: 0x043587cf,
11483 private: 0x04358394
11484 },
11485 pubKeyHash: 0x6f,
11486 scriptHash: 0xc4,
11487 wif: 0xef,
11488 dustThreshold: 546,
11489 feePerKb: 10000,
11490 estimateFee: estimateFee('testnet')
11491 },
11492 litecoin: {
11493 magicPrefix: '\x19Litecoin Signed Message:\n',
11494 bip32: {
11495 public: 0x019da462,
11496 private: 0x019d9cfe
11497 },
11498 pubKeyHash: 0x30,
11499 scriptHash: 0x05,
11500 wif: 0xb0,
11501 dustThreshold: 0, // https://github.com/litecoin-project/litecoin/blob/v0.8.7.2/src/main.cpp#L360-L365
11502 dustSoftThreshold: 100000, // https://github.com/litecoin-project/litecoin/blob/v0.8.7.2/src/main.h#L53
11503 feePerKb: 100000, // https://github.com/litecoin-project/litecoin/blob/v0.8.7.2/src/main.cpp#L56
11504 estimateFee: estimateFee('litecoin')
11505 },
11506 dogecoin: {
11507 magicPrefix: '\x19Dogecoin Signed Message:\n',
11508 bip32: {
11509 public: 0x02facafd,
11510 private: 0x02fac398
11511 },
11512 pubKeyHash: 0x1e,
11513 scriptHash: 0x16,
11514 wif: 0x9e,
11515 dustThreshold: 0, // https://github.com/dogecoin/dogecoin/blob/v1.7.1/src/core.h#L155-L160
11516 dustSoftThreshold: 100000000, // https://github.com/dogecoin/dogecoin/blob/v1.7.1/src/main.h#L62
11517 feePerKb: 100000000, // https://github.com/dogecoin/dogecoin/blob/v1.7.1/src/main.cpp#L58
11518 estimateFee: estimateFee('dogecoin')
11519 },
11520 viacoin: {
11521 magicPrefix: '\x18Viacoin Signed Message:\n',
11522 bip32: {
11523 public: 0x0488b21e,
11524 private: 0x0488ade4
11525 },
11526 pubKeyHash: 0x47,
11527 scriptHash: 0x21,
11528 wif: 0xc7,
11529 dustThreshold: 560,
11530 dustSoftThreshold: 100000,
11531 feePerKb: 100000, //
11532 estimateFee: estimateFee('viacoin')
11533 },
11534 viacointestnet: {
11535 magicPrefix: '\x18Viacoin Signed Message:\n',
11536 bip32: {
11537 public: 0x043587cf,
11538 private: 0x04358394
11539 },
11540 pubKeyHash: 0x7f,
11541 scriptHash: 0xc4,
11542 wif: 0xff,
11543 dustThreshold: 560,
11544 dustSoftThreshold: 100000,
11545 feePerKb: 100000,
11546 estimateFee: estimateFee('viacointestnet')
11547 },
11548 gamerscoin: {
11549 magicPrefix: '\x19Gamerscoin Signed Message:\n',
11550 bip32: {
11551 public: 0x019da462,
11552 private: 0x019d9cfe
11553 },
11554 pubKeyHash: 0x26,
11555 scriptHash: 0x05,
11556 wif: 0xA6,
11557 dustThreshold: 0, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L358-L363
11558 dustSoftThreshold: 100000, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L51
11559 feePerKb: 100000, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L54
11560 estimateFee: estimateFee('gamerscoin')
11561 },
11562 jumbucks: {
11563 magicPrefix: '\x19Jumbucks Signed Message:\n',
11564 bip32: {
11565 public: 0x037a689a,
11566 private: 0x037a6460
11567 },
11568 pubKeyHash: 0x2b,
11569 scriptHash: 0x05,
11570 wif: 0xab,
11571 dustThreshold: 0,
11572 dustSoftThreshold: 10000,
11573 feePerKb: 10000,
11574 estimateFee: estimateFee('jumbucks')
11575 },
11576 zetacoin: {
11577 magicPrefix: '\x18Zetacoin Signed Message:\n',
11578 bip32: {
11579 public: 0x0488b21e,
11580 private: 0x0488ade4
11581 },
11582 pubKeyHash: 0x50,
11583 scriptHash: 0x09,
11584 wif: 0xe0,
11585 dustThreshold: 546, // https://github.com/zetacoin/zetacoin/blob/master/src/core.h#L159
11586 feePerKb: 10000, // https://github.com/zetacoin/zetacoin/blob/master/src/main.cpp#L54
11587 estimateFee: estimateFee('zetacoin')
11588 }
11589 }
11590
11591 function estimateFee (type) {
11592 return function (tx) {
11593 var network = networks[type]
11594 var baseFee = network.feePerKb
11595 var byteSize = tx.toBuffer().length
11596
11597 var fee = baseFee * Math.ceil(byteSize / 1000)
11598 if (network.dustSoftThreshold === undefined) return fee
11599
11600 tx.outs.forEach(function (e) {
11601 if (e.value < network.dustSoftThreshold) {
11602 fee += baseFee
11603 }
11604 })
11605
11606 return fee
11607 }
11608 }
11609
11610 module.exports = networks
11611
11612 },{}],67:[function(require,module,exports){
11613 module.exports = {
11614 // push value
11615 OP_FALSE: 0,
11616 OP_0: 0,
11617 OP_PUSHDATA1: 76,
11618 OP_PUSHDATA2: 77,
11619 OP_PUSHDATA4: 78,
11620 OP_1NEGATE: 79,
11621 OP_RESERVED: 80,
11622 OP_1: 81,
11623 OP_TRUE: 81,
11624 OP_2: 82,
11625 OP_3: 83,
11626 OP_4: 84,
11627 OP_5: 85,
11628 OP_6: 86,
11629 OP_7: 87,
11630 OP_8: 88,
11631 OP_9: 89,
11632 OP_10: 90,
11633 OP_11: 91,
11634 OP_12: 92,
11635 OP_13: 93,
11636 OP_14: 94,
11637 OP_15: 95,
11638 OP_16: 96,
11639
11640 // control
11641 OP_NOP: 97,
11642 OP_VER: 98,
11643 OP_IF: 99,
11644 OP_NOTIF: 100,
11645 OP_VERIF: 101,
11646 OP_VERNOTIF: 102,
11647 OP_ELSE: 103,
11648 OP_ENDIF: 104,
11649 OP_VERIFY: 105,
11650 OP_RETURN: 106,
11651
11652 // stack ops
11653 OP_TOALTSTACK: 107,
11654 OP_FROMALTSTACK: 108,
11655 OP_2DROP: 109,
11656 OP_2DUP: 110,
11657 OP_3DUP: 111,
11658 OP_2OVER: 112,
11659 OP_2ROT: 113,
11660 OP_2SWAP: 114,
11661 OP_IFDUP: 115,
11662 OP_DEPTH: 116,
11663 OP_DROP: 117,
11664 OP_DUP: 118,
11665 OP_NIP: 119,
11666 OP_OVER: 120,
11667 OP_PICK: 121,
11668 OP_ROLL: 122,
11669 OP_ROT: 123,
11670 OP_SWAP: 124,
11671 OP_TUCK: 125,
11672
11673 // splice ops
11674 OP_CAT: 126,
11675 OP_SUBSTR: 127,
11676 OP_LEFT: 128,
11677 OP_RIGHT: 129,
11678 OP_SIZE: 130,
11679
11680 // bit logic
11681 OP_INVERT: 131,
11682 OP_AND: 132,
11683 OP_OR: 133,
11684 OP_XOR: 134,
11685 OP_EQUAL: 135,
11686 OP_EQUALVERIFY: 136,
11687 OP_RESERVED1: 137,
11688 OP_RESERVED2: 138,
11689
11690 // numeric
11691 OP_1ADD: 139,
11692 OP_1SUB: 140,
11693 OP_2MUL: 141,
11694 OP_2DIV: 142,
11695 OP_NEGATE: 143,
11696 OP_ABS: 144,
11697 OP_NOT: 145,
11698 OP_0NOTEQUAL: 146,
11699
11700 OP_ADD: 147,
11701 OP_SUB: 148,
11702 OP_MUL: 149,
11703 OP_DIV: 150,
11704 OP_MOD: 151,
11705 OP_LSHIFT: 152,
11706 OP_RSHIFT: 153,
11707
11708 OP_BOOLAND: 154,
11709 OP_BOOLOR: 155,
11710 OP_NUMEQUAL: 156,
11711 OP_NUMEQUALVERIFY: 157,
11712 OP_NUMNOTEQUAL: 158,
11713 OP_LESSTHAN: 159,
11714 OP_GREATERTHAN: 160,
11715 OP_LESSTHANOREQUAL: 161,
11716 OP_GREATERTHANOREQUAL: 162,
11717 OP_MIN: 163,
11718 OP_MAX: 164,
11719
11720 OP_WITHIN: 165,
11721
11722 // crypto
11723 OP_RIPEMD160: 166,
11724 OP_SHA1: 167,
11725 OP_SHA256: 168,
11726 OP_HASH160: 169,
11727 OP_HASH256: 170,
11728 OP_CODESEPARATOR: 171,
11729 OP_CHECKSIG: 172,
11730 OP_CHECKSIGVERIFY: 173,
11731 OP_CHECKMULTISIG: 174,
11732 OP_CHECKMULTISIGVERIFY: 175,
11733
11734 // expansion
11735 OP_NOP1: 176,
11736 OP_NOP2: 177,
11737 OP_NOP3: 178,
11738 OP_NOP4: 179,
11739 OP_NOP5: 180,
11740 OP_NOP6: 181,
11741 OP_NOP7: 182,
11742 OP_NOP8: 183,
11743 OP_NOP9: 184,
11744 OP_NOP10: 185,
11745
11746 // template matching params
11747 OP_PUBKEYHASH: 253,
11748 OP_PUBKEY: 254,
11749 OP_INVALIDOPCODE: 255
11750 }
11751
11752 },{}],68:[function(require,module,exports){
11753 (function (Buffer){
11754 var assert = require('assert')
11755 var bufferutils = require('./bufferutils')
11756 var crypto = require('./crypto')
11757 var typeForce = require('typeforce')
11758 var opcodes = require('./opcodes')
11759
11760 function Script (buffer, chunks) {
11761 typeForce('Buffer', buffer)
11762 typeForce('Array', chunks)
11763
11764 this.buffer = buffer
11765 this.chunks = chunks
11766 }
11767
11768 Script.fromASM = function (asm) {
11769 var strChunks = asm.split(' ')
11770 var chunks = strChunks.map(function (strChunk) {
11771 // opcode
11772 if (strChunk in opcodes) {
11773 return opcodes[strChunk]
11774
11775 // data chunk
11776 } else {
11777 return new Buffer(strChunk, 'hex')
11778 }
11779 })
11780
11781 return Script.fromChunks(chunks)
11782 }
11783
11784 Script.fromBuffer = function (buffer) {
11785 var chunks = []
11786 var i = 0
11787
11788 while (i < buffer.length) {
11789 var opcode = buffer.readUInt8(i)
11790
11791 // data chunk
11792 if ((opcode > opcodes.OP_0) && (opcode <= opcodes.OP_PUSHDATA4)) {
11793 var d = bufferutils.readPushDataInt(buffer, i)
11794
11795 // did reading a pushDataInt fail? return non-chunked script
11796 if (d === null) return new Script(buffer, [])
11797 i += d.size
11798
11799 // attempt to read too much data?
11800 if (i + d.number > buffer.length) return new Script(buffer, [])
11801
11802 var data = buffer.slice(i, i + d.number)
11803 i += d.number
11804
11805 chunks.push(data)
11806
11807 // opcode
11808 } else {
11809 chunks.push(opcode)
11810
11811 i += 1
11812 }
11813 }
11814
11815 return new Script(buffer, chunks)
11816 }
11817
11818 Script.fromChunks = function (chunks) {
11819 typeForce('Array', chunks)
11820
11821 var bufferSize = chunks.reduce(function (accum, chunk) {
11822 // data chunk
11823 if (Buffer.isBuffer(chunk)) {
11824 return accum + bufferutils.pushDataSize(chunk.length) + chunk.length
11825 }
11826
11827 // opcode
11828 return accum + 1
11829 }, 0.0)
11830
11831 var buffer = new Buffer(bufferSize)
11832 var offset = 0
11833
11834 chunks.forEach(function (chunk) {
11835 // data chunk
11836 if (Buffer.isBuffer(chunk)) {
11837 offset += bufferutils.writePushDataInt(buffer, chunk.length, offset)
11838
11839 chunk.copy(buffer, offset)
11840 offset += chunk.length
11841
11842 // opcode
11843 } else {
11844 buffer.writeUInt8(chunk, offset)
11845 offset += 1
11846 }
11847 })
11848
11849 assert.equal(offset, buffer.length, 'Could not decode chunks')
11850 return new Script(buffer, chunks)
11851 }
11852
11853 Script.fromHex = function (hex) {
11854 return Script.fromBuffer(new Buffer(hex, 'hex'))
11855 }
11856
11857 Script.EMPTY = Script.fromChunks([])
11858
11859 Script.prototype.getHash = function () {
11860 return crypto.hash160(this.buffer)
11861 }
11862
11863 // FIXME: doesn't work for data chunks, maybe time to use buffertools.compare...
11864 Script.prototype.without = function (needle) {
11865 return Script.fromChunks(this.chunks.filter(function (op) {
11866 return op !== needle
11867 }))
11868 }
11869
11870 var reverseOps = []
11871 for (var op in opcodes) {
11872 var code = opcodes[op]
11873 reverseOps[code] = op
11874 }
11875
11876 Script.prototype.toASM = function () {
11877 return this.chunks.map(function (chunk) {
11878 // data chunk
11879 if (Buffer.isBuffer(chunk)) {
11880 return chunk.toString('hex')
11881
11882 // opcode
11883 } else {
11884 return reverseOps[chunk]
11885 }
11886 }).join(' ')
11887 }
11888
11889 Script.prototype.toBuffer = function () {
11890 return this.buffer
11891 }
11892
11893 Script.prototype.toHex = function () {
11894 return this.toBuffer().toString('hex')
11895 }
11896
11897 module.exports = Script
11898
11899 }).call(this,require("buffer").Buffer)
11900 },{"./bufferutils":57,"./crypto":58,"./opcodes":67,"assert":5,"buffer":7,"typeforce":53}],69:[function(require,module,exports){
11901 (function (Buffer){
11902 var assert = require('assert')
11903 var ops = require('./opcodes')
11904 var typeForce = require('typeforce')
11905
11906 var ecurve = require('ecurve')
11907 var curve = ecurve.getCurveByName('secp256k1')
11908
11909 var ECSignature = require('./ecsignature')
11910 var Script = require('./script')
11911
11912 function isCanonicalPubKey (buffer) {
11913 if (!Buffer.isBuffer(buffer)) return false
11914
11915 try {
11916 ecurve.Point.decodeFrom(curve, buffer)
11917 } catch (e) {
11918 if (!(e.message.match(/Invalid sequence (length|tag)/)))
11919 throw e
11920
11921 return false
11922 }
11923
11924 return true
11925 }
11926
11927 function isCanonicalSignature (buffer) {
11928 if (!Buffer.isBuffer(buffer)) return false
11929
11930 try {
11931 ECSignature.parseScriptSignature(buffer)
11932 } catch (e) {
11933 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/))) {
11934 throw e
11935 }
11936
11937 return false
11938 }
11939
11940 return true
11941 }
11942
11943 function isPubKeyHashInput (script) {
11944 return script.chunks.length === 2 &&
11945 isCanonicalSignature(script.chunks[0]) &&
11946 isCanonicalPubKey(script.chunks[1])
11947 }
11948
11949 function isPubKeyHashOutput (script) {
11950 return script.chunks.length === 5 &&
11951 script.chunks[0] === ops.OP_DUP &&
11952 script.chunks[1] === ops.OP_HASH160 &&
11953 Buffer.isBuffer(script.chunks[2]) &&
11954 script.chunks[2].length === 20 &&
11955 script.chunks[3] === ops.OP_EQUALVERIFY &&
11956 script.chunks[4] === ops.OP_CHECKSIG
11957 }
11958
11959 function isPubKeyInput (script) {
11960 return script.chunks.length === 1 &&
11961 isCanonicalSignature(script.chunks[0])
11962 }
11963
11964 function isPubKeyOutput (script) {
11965 return script.chunks.length === 2 &&
11966 isCanonicalPubKey(script.chunks[0]) &&
11967 script.chunks[1] === ops.OP_CHECKSIG
11968 }
11969
11970 function isScriptHashInput (script, allowIncomplete) {
11971 if (script.chunks.length < 2) return false
11972
11973 var lastChunk = script.chunks[script.chunks.length - 1]
11974 if (!Buffer.isBuffer(lastChunk)) return false
11975
11976 var scriptSig = Script.fromChunks(script.chunks.slice(0, -1))
11977 var redeemScript = Script.fromBuffer(lastChunk)
11978
11979 // is redeemScript a valid script?
11980 if (redeemScript.chunks.length === 0) return false
11981
11982 return classifyInput(scriptSig, allowIncomplete) === classifyOutput(redeemScript)
11983 }
11984
11985 function isScriptHashOutput (script) {
11986 return script.chunks.length === 3 &&
11987 script.chunks[0] === ops.OP_HASH160 &&
11988 Buffer.isBuffer(script.chunks[1]) &&
11989 script.chunks[1].length === 20 &&
11990 script.chunks[2] === ops.OP_EQUAL
11991 }
11992
11993 // allowIncomplete is to account for combining signatures
11994 // See https://github.com/bitcoin/bitcoin/blob/f425050546644a36b0b8e0eb2f6934a3e0f6f80f/src/script/sign.cpp#L195-L197
11995 function isMultisigInput (script, allowIncomplete) {
11996 if (script.chunks.length < 2) return false
11997 if (script.chunks[0] !== ops.OP_0) return false
11998
11999 if (allowIncomplete) {
12000 return script.chunks.slice(1).every(function (chunk) {
12001 return chunk === ops.OP_0 || isCanonicalSignature(chunk)
12002 })
12003 }
12004
12005 return script.chunks.slice(1).every(isCanonicalSignature)
12006 }
12007
12008 function isMultisigOutput (script) {
12009 if (script.chunks.length < 4) return false
12010 if (script.chunks[script.chunks.length - 1] !== ops.OP_CHECKMULTISIG) return false
12011
12012 var mOp = script.chunks[0]
12013 if (mOp === ops.OP_0) return false
12014 if (mOp < ops.OP_1) return false
12015 if (mOp > ops.OP_16) return false
12016
12017 var nOp = script.chunks[script.chunks.length - 2]
12018 if (nOp === ops.OP_0) return false
12019 if (nOp < ops.OP_1) return false
12020 if (nOp > ops.OP_16) return false
12021
12022 var m = mOp - (ops.OP_1 - 1)
12023 var n = nOp - (ops.OP_1 - 1)
12024 if (n < m) return false
12025
12026 var pubKeys = script.chunks.slice(1, -2)
12027 if (n < pubKeys.length) return false
12028
12029 return pubKeys.every(isCanonicalPubKey)
12030 }
12031
12032 function isNullDataOutput (script) {
12033 return script.chunks[0] === ops.OP_RETURN
12034 }
12035
12036 function classifyOutput (script) {
12037 typeForce('Script', script)
12038
12039 if (isPubKeyHashOutput(script)) {
12040 return 'pubkeyhash'
12041 } else if (isScriptHashOutput(script)) {
12042 return 'scripthash'
12043 } else if (isMultisigOutput(script)) {
12044 return 'multisig'
12045 } else if (isPubKeyOutput(script)) {
12046 return 'pubkey'
12047 } else if (isNullDataOutput(script)) {
12048 return 'nulldata'
12049 }
12050
12051 return 'nonstandard'
12052 }
12053
12054 function classifyInput (script, allowIncomplete) {
12055 typeForce('Script', script)
12056
12057 if (isPubKeyHashInput(script)) {
12058 return 'pubkeyhash'
12059 } else if (isMultisigInput(script, allowIncomplete)) {
12060 return 'multisig'
12061 } else if (isScriptHashInput(script, allowIncomplete)) {
12062 return 'scripthash'
12063 } else if (isPubKeyInput(script)) {
12064 return 'pubkey'
12065 }
12066
12067 return 'nonstandard'
12068 }
12069
12070 // Standard Script Templates
12071 // {pubKey} OP_CHECKSIG
12072 function pubKeyOutput (pubKey) {
12073 return Script.fromChunks([
12074 pubKey.toBuffer(),
12075 ops.OP_CHECKSIG
12076 ])
12077 }
12078
12079 // OP_DUP OP_HASH160 {pubKeyHash} OP_EQUALVERIFY OP_CHECKSIG
12080 function pubKeyHashOutput (hash) {
12081 typeForce('Buffer', hash)
12082
12083 return Script.fromChunks([
12084 ops.OP_DUP,
12085 ops.OP_HASH160,
12086 hash,
12087 ops.OP_EQUALVERIFY,
12088 ops.OP_CHECKSIG
12089 ])
12090 }
12091
12092 // OP_HASH160 {scriptHash} OP_EQUAL
12093 function scriptHashOutput (hash) {
12094 typeForce('Buffer', hash)
12095
12096 return Script.fromChunks([
12097 ops.OP_HASH160,
12098 hash,
12099 ops.OP_EQUAL
12100 ])
12101 }
12102
12103 // m [pubKeys ...] n OP_CHECKMULTISIG
12104 function multisigOutput (m, pubKeys) {
12105 typeForce(['ECPubKey'], pubKeys)
12106
12107 assert(pubKeys.length >= m, 'Not enough pubKeys provided')
12108
12109 var pubKeyBuffers = pubKeys.map(function (pubKey) {
12110 return pubKey.toBuffer()
12111 })
12112 var n = pubKeys.length
12113
12114 return Script.fromChunks([].concat(
12115 (ops.OP_1 - 1) + m,
12116 pubKeyBuffers,
12117 (ops.OP_1 - 1) + n,
12118 ops.OP_CHECKMULTISIG
12119 ))
12120 }
12121
12122 // {signature}
12123 function pubKeyInput (signature) {
12124 typeForce('Buffer', signature)
12125
12126 return Script.fromChunks([signature])
12127 }
12128
12129 // {signature} {pubKey}
12130 function pubKeyHashInput (signature, pubKey) {
12131 typeForce('Buffer', signature)
12132
12133 return Script.fromChunks([signature, pubKey.toBuffer()])
12134 }
12135
12136 // <scriptSig> {serialized scriptPubKey script}
12137 function scriptHashInput (scriptSig, scriptPubKey) {
12138 return Script.fromChunks([].concat(
12139 scriptSig.chunks,
12140 scriptPubKey.toBuffer()
12141 ))
12142 }
12143
12144 // OP_0 [signatures ...]
12145 function multisigInput (signatures, scriptPubKey) {
12146 if (scriptPubKey) {
12147 assert(isMultisigOutput(scriptPubKey))
12148
12149 var mOp = scriptPubKey.chunks[0]
12150 var nOp = scriptPubKey.chunks[scriptPubKey.chunks.length - 2]
12151 var m = mOp - (ops.OP_1 - 1)
12152 var n = nOp - (ops.OP_1 - 1)
12153
12154 assert(signatures.length >= m, 'Not enough signatures provided')
12155 assert(signatures.length <= n, 'Too many signatures provided')
12156 }
12157
12158 return Script.fromChunks([].concat(ops.OP_0, signatures))
12159 }
12160
12161 function nullDataOutput (data) {
12162 return Script.fromChunks([ops.OP_RETURN, data])
12163 }
12164
12165 module.exports = {
12166 isCanonicalPubKey: isCanonicalPubKey,
12167 isCanonicalSignature: isCanonicalSignature,
12168 isPubKeyHashInput: isPubKeyHashInput,
12169 isPubKeyHashOutput: isPubKeyHashOutput,
12170 isPubKeyInput: isPubKeyInput,
12171 isPubKeyOutput: isPubKeyOutput,
12172 isScriptHashInput: isScriptHashInput,
12173 isScriptHashOutput: isScriptHashOutput,
12174 isMultisigInput: isMultisigInput,
12175 isMultisigOutput: isMultisigOutput,
12176 isNullDataOutput: isNullDataOutput,
12177 classifyOutput: classifyOutput,
12178 classifyInput: classifyInput,
12179 pubKeyOutput: pubKeyOutput,
12180 pubKeyHashOutput: pubKeyHashOutput,
12181 scriptHashOutput: scriptHashOutput,
12182 multisigOutput: multisigOutput,
12183 pubKeyInput: pubKeyInput,
12184 pubKeyHashInput: pubKeyHashInput,
12185 scriptHashInput: scriptHashInput,
12186 multisigInput: multisigInput,
12187 dataOutput: function (data) {
12188 console.warn('dataOutput is deprecated, use nullDataOutput by 2.0.0')
12189 return nullDataOutput(data)
12190 },
12191 nullDataOutput: nullDataOutput
12192 }
12193
12194 }).call(this,require("buffer").Buffer)
12195 },{"./ecsignature":62,"./opcodes":67,"./script":68,"assert":5,"buffer":7,"ecurve":49,"typeforce":53}],70:[function(require,module,exports){
12196 (function (Buffer){
12197 var assert = require('assert')
12198 var bufferutils = require('./bufferutils')
12199 var crypto = require('./crypto')
12200 var typeForce = require('typeforce')
12201 var opcodes = require('./opcodes')
12202 var scripts = require('./scripts')
12203
12204 var Address = require('./address')
12205 var ECSignature = require('./ecsignature')
12206 var Script = require('./script')
12207
12208 function Transaction () {
12209 this.version = 1
12210 this.locktime = 0
12211 this.ins = []
12212 this.outs = []
12213 }
12214
12215 Transaction.DEFAULT_SEQUENCE = 0xffffffff
12216 Transaction.SIGHASH_ALL = 0x01
12217 Transaction.SIGHASH_NONE = 0x02
12218 Transaction.SIGHASH_SINGLE = 0x03
12219 Transaction.SIGHASH_ANYONECANPAY = 0x80
12220
12221 Transaction.fromBuffer = function (buffer, __disableAssert) {
12222 var offset = 0
12223 function readSlice (n) {
12224 offset += n
12225 return buffer.slice(offset - n, offset)
12226 }
12227
12228 function readUInt32 () {
12229 var i = buffer.readUInt32LE(offset)
12230 offset += 4
12231 return i
12232 }
12233
12234 function readUInt64 () {
12235 var i = bufferutils.readUInt64LE(buffer, offset)
12236 offset += 8
12237 return i
12238 }
12239
12240 function readVarInt () {
12241 var vi = bufferutils.readVarInt(buffer, offset)
12242 offset += vi.size
12243 return vi.number
12244 }
12245
12246 function readScript () {
12247 return Script.fromBuffer(readSlice(readVarInt()))
12248 }
12249
12250 function readGenerationScript () {
12251 return new Script(readSlice(readVarInt()), [])
12252 }
12253
12254 var tx = new Transaction()
12255 tx.version = readUInt32()
12256
12257 var vinLen = readVarInt()
12258 for (var i = 0; i < vinLen; ++i) {
12259 var hash = readSlice(32)
12260
12261 if (Transaction.isCoinbaseHash(hash)) {
12262 tx.ins.push({
12263 hash: hash,
12264 index: readUInt32(),
12265 script: readGenerationScript(),
12266 sequence: readUInt32()
12267 })
12268 } else {
12269 tx.ins.push({
12270 hash: hash,
12271 index: readUInt32(),
12272 script: readScript(),
12273 sequence: readUInt32()
12274 })
12275 }
12276 }
12277
12278 var voutLen = readVarInt()
12279 for (i = 0; i < voutLen; ++i) {
12280 tx.outs.push({
12281 value: readUInt64(),
12282 script: readScript()
12283 })
12284 }
12285
12286 tx.locktime = readUInt32()
12287
12288 if (!__disableAssert) {
12289 assert.equal(offset, buffer.length, 'Transaction has unexpected data')
12290 }
12291
12292 return tx
12293 }
12294
12295 Transaction.fromHex = function (hex) {
12296 return Transaction.fromBuffer(new Buffer(hex, 'hex'))
12297 }
12298
12299 Transaction.isCoinbaseHash = function (buffer) {
12300 return Array.prototype.every.call(buffer, function (x) {
12301 return x === 0
12302 })
12303 }
12304
12305 /**
12306 * Create a new txIn.
12307 *
12308 * Can be called with any of:
12309 *
12310 * - A transaction and an index
12311 * - A transaction hash and an index
12312 *
12313 * Note that this method does not sign the created input.
12314 */
12315 Transaction.prototype.addInput = function (hash, index, sequence, script) {
12316 if (sequence === undefined || sequence === null) {
12317 sequence = Transaction.DEFAULT_SEQUENCE
12318 }
12319
12320 script = script || Script.EMPTY
12321
12322 if (typeof hash === 'string') {
12323 // TxId hex is big-endian, we need little-endian
12324 hash = bufferutils.reverse(new Buffer(hash, 'hex'))
12325 } else if (hash instanceof Transaction) {
12326 hash = hash.getHash()
12327 }
12328
12329 typeForce('Buffer', hash)
12330 typeForce('Number', index)
12331 typeForce('Number', sequence)
12332 typeForce('Script', script)
12333
12334 assert.equal(hash.length, 32, 'Expected hash length of 32, got ' + hash.length)
12335
12336 // Add the input and return the input's index
12337 return (this.ins.push({
12338 hash: hash,
12339 index: index,
12340 script: script,
12341 sequence: sequence
12342 }) - 1)
12343 }
12344
12345 /**
12346 * Create a new txOut.
12347 *
12348 * Can be called with:
12349 *
12350 * - A base58 address string and a value
12351 * - An Address object and a value
12352 * - A scriptPubKey Script and a value
12353 */
12354 Transaction.prototype.addOutput = function (scriptPubKey, value) {
12355 // Attempt to get a valid address if it's a base58 address string
12356 if (typeof scriptPubKey === 'string') {
12357 scriptPubKey = Address.fromBase58Check(scriptPubKey)
12358 }
12359
12360 // Attempt to get a valid script if it's an Address object
12361 if (scriptPubKey instanceof Address) {
12362 scriptPubKey = scriptPubKey.toOutputScript()
12363 }
12364
12365 typeForce('Script', scriptPubKey)
12366 typeForce('Number', value)
12367
12368 // Add the output and return the output's index
12369 return (this.outs.push({
12370 script: scriptPubKey,
12371 value: value
12372 }) - 1)
12373 }
12374
12375 Transaction.prototype.clone = function () {
12376 var newTx = new Transaction()
12377 newTx.version = this.version
12378 newTx.locktime = this.locktime
12379
12380 newTx.ins = this.ins.map(function (txIn) {
12381 return {
12382 hash: txIn.hash,
12383 index: txIn.index,
12384 script: txIn.script,
12385 sequence: txIn.sequence
12386 }
12387 })
12388
12389 newTx.outs = this.outs.map(function (txOut) {
12390 return {
12391 script: txOut.script,
12392 value: txOut.value
12393 }
12394 })
12395
12396 return newTx
12397 }
12398
12399 /**
12400 * Hash transaction for signing a specific input.
12401 *
12402 * Bitcoin uses a different hash for each signed transaction input. This
12403 * method copies the transaction, makes the necessary changes based on the
12404 * hashType, serializes and finally hashes the result. This hash can then be
12405 * used to sign the transaction input in question.
12406 */
12407 Transaction.prototype.hashForSignature = function (inIndex, prevOutScript, hashType) {
12408 // FIXME: remove in 2.x.y
12409 if (arguments[0] instanceof Script) {
12410 console.warn('hashForSignature(prevOutScript, inIndex, ...) has been deprecated. Use hashForSignature(inIndex, prevOutScript, ...)')
12411
12412 // swap the arguments (must be stored in tmp, arguments is special)
12413 var tmp = arguments[0]
12414 inIndex = arguments[1]
12415 prevOutScript = tmp
12416 }
12417
12418 typeForce('Number', inIndex)
12419 typeForce('Script', prevOutScript)
12420 typeForce('Number', hashType)
12421
12422 assert(inIndex >= 0, 'Invalid vin index')
12423 assert(inIndex < this.ins.length, 'Invalid vin index')
12424
12425 var txTmp = this.clone()
12426 var hashScript = prevOutScript.without(opcodes.OP_CODESEPARATOR)
12427
12428 // Blank out other inputs' signatures
12429 txTmp.ins.forEach(function (txIn) {
12430 txIn.script = Script.EMPTY
12431 })
12432 txTmp.ins[inIndex].script = hashScript
12433
12434 var hashTypeModifier = hashType & 0x1f
12435
12436 if (hashTypeModifier === Transaction.SIGHASH_NONE) {
12437 assert(false, 'SIGHASH_NONE not yet supported')
12438 } else if (hashTypeModifier === Transaction.SIGHASH_SINGLE) {
12439 assert(false, 'SIGHASH_SINGLE not yet supported')
12440 }
12441
12442 if (hashType & Transaction.SIGHASH_ANYONECANPAY) {
12443 assert(false, 'SIGHASH_ANYONECANPAY not yet supported')
12444 }
12445
12446 var hashTypeBuffer = new Buffer(4)
12447 hashTypeBuffer.writeInt32LE(hashType, 0)
12448
12449 var buffer = Buffer.concat([txTmp.toBuffer(), hashTypeBuffer])
12450 return crypto.hash256(buffer)
12451 }
12452
12453 Transaction.prototype.getHash = function () {
12454 return crypto.hash256(this.toBuffer())
12455 }
12456
12457 Transaction.prototype.getId = function () {
12458 // TxHash is little-endian, we need big-endian
12459 return bufferutils.reverse(this.getHash()).toString('hex')
12460 }
12461
12462 Transaction.prototype.toBuffer = function () {
12463 function scriptSize (script) {
12464 var length = script.buffer.length
12465
12466 return bufferutils.varIntSize(length) + length
12467 }
12468
12469 var buffer = new Buffer(
12470 8 +
12471 bufferutils.varIntSize(this.ins.length) +
12472 bufferutils.varIntSize(this.outs.length) +
12473 this.ins.reduce(function (sum, input) { return sum + 40 + scriptSize(input.script) }, 0) +
12474 this.outs.reduce(function (sum, output) { return sum + 8 + scriptSize(output.script) }, 0)
12475 )
12476
12477 var offset = 0
12478 function writeSlice (slice) {
12479 slice.copy(buffer, offset)
12480 offset += slice.length
12481 }
12482
12483 function writeUInt32 (i) {
12484 buffer.writeUInt32LE(i, offset)
12485 offset += 4
12486 }
12487
12488 function writeUInt64 (i) {
12489 bufferutils.writeUInt64LE(buffer, i, offset)
12490 offset += 8
12491 }
12492
12493 function writeVarInt (i) {
12494 var n = bufferutils.writeVarInt(buffer, i, offset)
12495 offset += n
12496 }
12497
12498 writeUInt32(this.version)
12499 writeVarInt(this.ins.length)
12500
12501 this.ins.forEach(function (txIn) {
12502 writeSlice(txIn.hash)
12503 writeUInt32(txIn.index)
12504 writeVarInt(txIn.script.buffer.length)
12505 writeSlice(txIn.script.buffer)
12506 writeUInt32(txIn.sequence)
12507 })
12508
12509 writeVarInt(this.outs.length)
12510 this.outs.forEach(function (txOut) {
12511 writeUInt64(txOut.value)
12512 writeVarInt(txOut.script.buffer.length)
12513 writeSlice(txOut.script.buffer)
12514 })
12515
12516 writeUInt32(this.locktime)
12517
12518 return buffer
12519 }
12520
12521 Transaction.prototype.toHex = function () {
12522 return this.toBuffer().toString('hex')
12523 }
12524
12525 Transaction.prototype.setInputScript = function (index, script) {
12526 typeForce('Number', index)
12527 typeForce('Script', script)
12528
12529 this.ins[index].script = script
12530 }
12531
12532 // FIXME: remove in 2.x.y
12533 Transaction.prototype.sign = function (index, privKey, hashType) {
12534 console.warn('Transaction.prototype.sign is deprecated. Use TransactionBuilder instead.')
12535
12536 var prevOutScript = privKey.pub.getAddress().toOutputScript()
12537 var signature = this.signInput(index, prevOutScript, privKey, hashType)
12538
12539 var scriptSig = scripts.pubKeyHashInput(signature, privKey.pub)
12540 this.setInputScript(index, scriptSig)
12541 }
12542
12543 // FIXME: remove in 2.x.y
12544 Transaction.prototype.signInput = function (index, prevOutScript, privKey, hashType) {
12545 console.warn('Transaction.prototype.signInput is deprecated. Use TransactionBuilder instead.')
12546
12547 hashType = hashType || Transaction.SIGHASH_ALL
12548
12549 var hash = this.hashForSignature(index, prevOutScript, hashType)
12550 var signature = privKey.sign(hash)
12551
12552 return signature.toScriptSignature(hashType)
12553 }
12554
12555 // FIXME: remove in 2.x.y
12556 Transaction.prototype.validateInput = function (index, prevOutScript, pubKey, buffer) {
12557 console.warn('Transaction.prototype.validateInput is deprecated. Use TransactionBuilder instead.')
12558
12559 var parsed = ECSignature.parseScriptSignature(buffer)
12560 var hash = this.hashForSignature(index, prevOutScript, parsed.hashType)
12561
12562 return pubKey.verify(hash, parsed.signature)
12563 }
12564
12565 module.exports = Transaction
12566
12567 }).call(this,require("buffer").Buffer)
12568 },{"./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){
12569 (function (Buffer){
12570 var assert = require('assert')
12571 var ops = require('./opcodes')
12572 var scripts = require('./scripts')
12573
12574 var ECPubKey = require('./ecpubkey')
12575 var ECSignature = require('./ecsignature')
12576 var Script = require('./script')
12577 var Transaction = require('./transaction')
12578
12579 function extractInput (txIn) {
12580 var redeemScript
12581 var scriptSig = txIn.script
12582 var prevOutScript
12583 var prevOutType = scripts.classifyInput(scriptSig, true)
12584 var scriptType
12585
12586 // Re-classify if scriptHash
12587 if (prevOutType === 'scripthash') {
12588 redeemScript = Script.fromBuffer(scriptSig.chunks.slice(-1)[0])
12589 prevOutScript = scripts.scriptHashOutput(redeemScript.getHash())
12590
12591 scriptSig = Script.fromChunks(scriptSig.chunks.slice(0, -1))
12592 scriptType = scripts.classifyInput(scriptSig, true)
12593 } else {
12594 scriptType = prevOutType
12595 }
12596
12597 // Extract hashType, pubKeys and signatures
12598 var hashType, parsed, pubKeys, signatures
12599
12600 switch (scriptType) {
12601 case 'pubkeyhash': {
12602 parsed = ECSignature.parseScriptSignature(scriptSig.chunks[0])
12603 hashType = parsed.hashType
12604 pubKeys = [ECPubKey.fromBuffer(scriptSig.chunks[1])]
12605 signatures = [parsed.signature]
12606 prevOutScript = pubKeys[0].getAddress().toOutputScript()
12607
12608 break
12609 }
12610
12611 case 'pubkey': {
12612 parsed = ECSignature.parseScriptSignature(scriptSig.chunks[0])
12613 hashType = parsed.hashType
12614 signatures = [parsed.signature]
12615
12616 if (redeemScript) {
12617 pubKeys = [ECPubKey.fromBuffer(redeemScript.chunks[0])]
12618 }
12619
12620 break
12621 }
12622
12623 case 'multisig': {
12624 signatures = scriptSig.chunks.slice(1).map(function (chunk) {
12625 if (chunk === ops.OP_0) return chunk
12626
12627 var parsed = ECSignature.parseScriptSignature(chunk)
12628 hashType = parsed.hashType
12629
12630 return parsed.signature
12631 })
12632
12633 if (redeemScript) {
12634 pubKeys = redeemScript.chunks.slice(1, -2).map(ECPubKey.fromBuffer)
12635 }
12636
12637 break
12638 }
12639 }
12640
12641 return {
12642 hashType: hashType,
12643 prevOutScript: prevOutScript,
12644 prevOutType: prevOutType,
12645 pubKeys: pubKeys,
12646 redeemScript: redeemScript,
12647 scriptType: scriptType,
12648 signatures: signatures
12649 }
12650 }
12651
12652 function TransactionBuilder () {
12653 this.prevTxMap = {}
12654 this.prevOutScripts = {}
12655 this.prevOutTypes = {}
12656
12657 this.inputs = []
12658 this.tx = new Transaction()
12659 }
12660
12661 TransactionBuilder.fromTransaction = function (transaction) {
12662 var txb = new TransactionBuilder()
12663
12664 // Copy other transaction fields
12665 txb.tx.version = transaction.version
12666 txb.tx.locktime = transaction.locktime
12667
12668 // Extract/add inputs
12669 transaction.ins.forEach(function (txIn) {
12670 txb.addInput(txIn.hash, txIn.index, txIn.sequence)
12671 })
12672
12673 // Extract/add outputs
12674 transaction.outs.forEach(function (txOut) {
12675 txb.addOutput(txOut.script, txOut.value)
12676 })
12677
12678 // Extract/add signatures
12679 txb.inputs = transaction.ins.map(function (txIn) {
12680 // TODO: remove me after testcase added
12681 assert(!Transaction.isCoinbaseHash(txIn.hash), 'coinbase inputs not supported')
12682
12683 // Ignore empty scripts
12684 if (txIn.script.buffer.length === 0) return {}
12685
12686 return extractInput(txIn)
12687 })
12688
12689 return txb
12690 }
12691
12692 TransactionBuilder.prototype.addInput = function (prevTx, index, sequence, prevOutScript) {
12693 var prevOutHash
12694
12695 // txId
12696 if (typeof prevTx === 'string') {
12697 prevOutHash = new Buffer(prevTx, 'hex')
12698
12699 // TxId hex is big-endian, we want little-endian hash
12700 Array.prototype.reverse.call(prevOutHash)
12701
12702 // Transaction
12703 } else if (prevTx instanceof Transaction) {
12704 prevOutHash = prevTx.getHash()
12705 prevOutScript = prevTx.outs[index].script
12706
12707 // txHash
12708 } else {
12709 prevOutHash = prevTx
12710 }
12711
12712 var input = {}
12713 if (prevOutScript) {
12714 var prevOutType = scripts.classifyOutput(prevOutScript)
12715
12716 // if we can, extract pubKey information
12717 switch (prevOutType) {
12718 case 'multisig': {
12719 input.pubKeys = prevOutScript.chunks.slice(1, -2).map(ECPubKey.fromBuffer)
12720 break
12721 }
12722
12723 case 'pubkey': {
12724 input.pubKeys = prevOutScript.chunks.slice(0, 1).map(ECPubKey.fromBuffer)
12725 break
12726 }
12727 }
12728
12729 if (prevOutType !== 'scripthash') {
12730 input.scriptType = prevOutType
12731 }
12732
12733 input.prevOutScript = prevOutScript
12734 input.prevOutType = prevOutType
12735 }
12736
12737 assert(this.inputs.every(function (input2) {
12738 if (input2.hashType === undefined) return true
12739
12740 return input2.hashType & Transaction.SIGHASH_ANYONECANPAY
12741 }), 'No, this would invalidate signatures')
12742
12743 var prevOut = prevOutHash.toString('hex') + ':' + index
12744 assert(!(prevOut in this.prevTxMap), 'Transaction is already an input')
12745
12746 var vin = this.tx.addInput(prevOutHash, index, sequence)
12747 this.inputs[vin] = input
12748 this.prevTxMap[prevOut] = vin
12749
12750 return vin
12751 }
12752
12753 TransactionBuilder.prototype.addOutput = function (scriptPubKey, value) {
12754 assert(this.inputs.every(function (input) {
12755 if (input.hashType === undefined) return true
12756
12757 return (input.hashType & 0x1f) === Transaction.SIGHASH_SINGLE
12758 }), 'No, this would invalidate signatures')
12759
12760 return this.tx.addOutput(scriptPubKey, value)
12761 }
12762
12763 TransactionBuilder.prototype.build = function () {
12764 return this.__build(false)
12765 }
12766 TransactionBuilder.prototype.buildIncomplete = function () {
12767 return this.__build(true)
12768 }
12769
12770 var canSignTypes = {
12771 'pubkeyhash': true,
12772 'multisig': true,
12773 'pubkey': true
12774 }
12775
12776 TransactionBuilder.prototype.__build = function (allowIncomplete) {
12777 if (!allowIncomplete) {
12778 assert(this.tx.ins.length > 0, 'Transaction has no inputs')
12779 assert(this.tx.outs.length > 0, 'Transaction has no outputs')
12780 }
12781
12782 var tx = this.tx.clone()
12783
12784 // Create script signatures from signature meta-data
12785 this.inputs.forEach(function (input, index) {
12786 var scriptType = input.scriptType
12787 var scriptSig
12788
12789 if (!allowIncomplete) {
12790 assert(!!scriptType, 'Transaction is not complete')
12791 assert(scriptType in canSignTypes, scriptType + ' not supported')
12792 assert(input.signatures, 'Transaction is missing signatures')
12793 }
12794
12795 if (input.signatures) {
12796 switch (scriptType) {
12797 case 'pubkeyhash': {
12798 var pkhSignature = input.signatures[0].toScriptSignature(input.hashType)
12799 scriptSig = scripts.pubKeyHashInput(pkhSignature, input.pubKeys[0])
12800 break
12801 }
12802
12803 case 'multisig': {
12804 // Array.prototype.map is sparse-compatible
12805 var msSignatures = input.signatures.map(function (signature) {
12806 return signature && signature.toScriptSignature(input.hashType)
12807 })
12808
12809 // fill in blanks with OP_0
12810 if (allowIncomplete) {
12811 for (var i = 0; i < msSignatures.length; ++i) {
12812 if (msSignatures[i]) continue
12813
12814 msSignatures[i] = ops.OP_0
12815 }
12816 } else {
12817 // Array.prototype.filter returns non-sparse array
12818 msSignatures = msSignatures.filter(function (x) { return x })
12819 }
12820
12821 var redeemScript = allowIncomplete ? undefined : input.redeemScript
12822 scriptSig = scripts.multisigInput(msSignatures, redeemScript)
12823 break
12824 }
12825
12826 case 'pubkey': {
12827 var pkSignature = input.signatures[0].toScriptSignature(input.hashType)
12828 scriptSig = scripts.pubKeyInput(pkSignature)
12829 break
12830 }
12831 }
12832 }
12833
12834 // did we build a scriptSig?
12835 if (scriptSig) {
12836 // wrap as scriptHash if necessary
12837 if (input.prevOutType === 'scripthash') {
12838 scriptSig = scripts.scriptHashInput(scriptSig, input.redeemScript)
12839 }
12840
12841 tx.setInputScript(index, scriptSig)
12842 }
12843 })
12844
12845 return tx
12846 }
12847
12848 TransactionBuilder.prototype.sign = function (index, privKey, redeemScript, hashType) {
12849 assert(index in this.inputs, 'No input at index: ' + index)
12850 hashType = hashType || Transaction.SIGHASH_ALL
12851
12852 var input = this.inputs[index]
12853 var canSign = input.hashType &&
12854 input.prevOutScript &&
12855 input.prevOutType &&
12856 input.pubKeys &&
12857 input.scriptType &&
12858 input.signatures
12859
12860 // are we almost ready to sign?
12861 if (canSign) {
12862 // if redeemScript was provided, enforce consistency
12863 if (redeemScript) {
12864 assert.deepEqual(input.redeemScript, redeemScript, 'Inconsistent redeemScript')
12865 }
12866
12867 assert.equal(input.hashType, hashType, 'Inconsistent hashType')
12868
12869 // no? prepare
12870 } else {
12871 // must be pay-to-scriptHash?
12872 if (redeemScript) {
12873 // if we have a prevOutScript, enforce scriptHash equality to the redeemScript
12874 if (input.prevOutScript) {
12875 assert.equal(input.prevOutType, 'scripthash', 'PrevOutScript must be P2SH')
12876
12877 var scriptHash = input.prevOutScript.chunks[1]
12878 assert.deepEqual(scriptHash, redeemScript.getHash(), 'RedeemScript does not match ' + scriptHash.toString('hex'))
12879 }
12880
12881 var scriptType = scripts.classifyOutput(redeemScript)
12882 assert(scriptType in canSignTypes, 'RedeemScript not supported (' + scriptType + ')')
12883
12884 var pubKeys = []
12885 switch (scriptType) {
12886 case 'multisig': {
12887 pubKeys = redeemScript.chunks.slice(1, -2).map(ECPubKey.fromBuffer)
12888 break
12889 }
12890
12891 case 'pubkeyhash': {
12892 var pkh1 = redeemScript.chunks[2]
12893 var pkh2 = privKey.pub.getAddress().hash
12894
12895 assert.deepEqual(pkh1, pkh2, 'privateKey cannot sign for this input')
12896 pubKeys = [privKey.pub]
12897 break
12898 }
12899
12900 case 'pubkey': {
12901 pubKeys = redeemScript.chunks.slice(0, 1).map(ECPubKey.fromBuffer)
12902 break
12903 }
12904 }
12905
12906 if (!input.prevOutScript) {
12907 input.prevOutScript = scripts.scriptHashOutput(redeemScript.getHash())
12908 input.prevOutType = 'scripthash'
12909 }
12910
12911 input.pubKeys = pubKeys
12912 input.redeemScript = redeemScript
12913 input.scriptType = scriptType
12914
12915 // cannot be pay-to-scriptHash
12916 } else {
12917 assert.notEqual(input.prevOutType, 'scripthash', 'PrevOutScript is P2SH, missing redeemScript')
12918
12919 // can we otherwise sign this?
12920 if (input.scriptType) {
12921 assert(input.pubKeys, input.scriptType + ' not supported')
12922
12923 // we know nothin' Jon Snow, assume pubKeyHash
12924 } else {
12925 input.prevOutScript = privKey.pub.getAddress().toOutputScript()
12926 input.prevOutType = 'pubkeyhash'
12927 input.pubKeys = [privKey.pub]
12928 input.scriptType = input.prevOutType
12929 }
12930 }
12931
12932 input.hashType = hashType
12933 input.signatures = input.signatures || []
12934 }
12935
12936 var signatureScript = input.redeemScript || input.prevOutScript
12937 var signatureHash = this.tx.hashForSignature(index, signatureScript, hashType)
12938
12939 // enforce signature order matches public keys
12940 if (input.scriptType === 'multisig' && input.redeemScript && input.signatures.length !== input.pubKeys.length) {
12941 // maintain a local copy of unmatched signatures
12942 var unmatched = input.signatures.slice()
12943
12944 input.signatures = input.pubKeys.map(function (pubKey) {
12945 var match
12946
12947 // check for any matching signatures
12948 unmatched.some(function (signature, i) {
12949 if (!pubKey.verify(signatureHash, signature)) return false
12950 match = signature
12951
12952 // remove matched signature from unmatched
12953 unmatched.splice(i, 1)
12954
12955 return true
12956 })
12957
12958 return match || undefined
12959 })
12960 }
12961
12962 // enforce in order signing of public keys
12963 assert(input.pubKeys.some(function (pubKey, i) {
12964 if (!privKey.pub.Q.equals(pubKey.Q)) return false
12965
12966 assert(!input.signatures[i], 'Signature already exists')
12967 var signature = privKey.sign(signatureHash)
12968 input.signatures[i] = signature
12969
12970 return true
12971 }, this), 'privateKey cannot sign for this input')
12972 }
12973
12974 module.exports = TransactionBuilder
12975
12976 }).call(this,require("buffer").Buffer)
12977 },{"./ecpubkey":61,"./ecsignature":62,"./opcodes":67,"./script":68,"./scripts":69,"./transaction":70,"assert":5,"buffer":7}],72:[function(require,module,exports){
12978 (function (Buffer){
12979 var assert = require('assert')
12980 var bufferutils = require('./bufferutils')
12981 var typeForce = require('typeforce')
12982 var networks = require('./networks')
12983 var randomBytes = require('randombytes')
12984
12985 var Address = require('./address')
12986 var HDNode = require('./hdnode')
12987 var TransactionBuilder = require('./transaction_builder')
12988 var Script = require('./script')
12989
12990 function Wallet (seed, network) {
12991 console.warn('Wallet is deprecated and will be removed in 2.0.0, see #296')
12992
12993 seed = seed || randomBytes(32)
12994 network = network || networks.bitcoin
12995
12996 // Stored in a closure to make accidental serialization less likely
12997 var masterKey = HDNode.fromSeedBuffer(seed, network)
12998
12999 // HD first-level child derivation method should be hardened
13000 // See https://bitcointalk.org/index.php?topic=405179.msg4415254#msg4415254
13001 var accountZero = masterKey.deriveHardened(0)
13002 var externalAccount = accountZero.derive(0)
13003 var internalAccount = accountZero.derive(1)
13004
13005 this.addresses = []
13006 this.changeAddresses = []
13007 this.network = network
13008 this.unspents = []
13009
13010 // FIXME: remove in 2.0.0
13011 this.unspentMap = {}
13012
13013 // FIXME: remove in 2.0.0
13014 var me = this
13015 this.newMasterKey = function (seed) {
13016 console.warn('newMasterKey is deprecated, please make a new Wallet instance instead')
13017
13018 seed = seed || randomBytes(32)
13019 masterKey = HDNode.fromSeedBuffer(seed, network)
13020
13021 accountZero = masterKey.deriveHardened(0)
13022 externalAccount = accountZero.derive(0)
13023 internalAccount = accountZero.derive(1)
13024
13025 me.addresses = []
13026 me.changeAddresses = []
13027
13028 me.unspents = []
13029 me.unspentMap = {}
13030 }
13031
13032 this.getMasterKey = function () {
13033 return masterKey
13034 }
13035 this.getAccountZero = function () {
13036 return accountZero
13037 }
13038 this.getExternalAccount = function () {
13039 return externalAccount
13040 }
13041 this.getInternalAccount = function () {
13042 return internalAccount
13043 }
13044 }
13045
13046 Wallet.prototype.createTransaction = function (to, value, options) {
13047 // FIXME: remove in 2.0.0
13048 if (typeof options !== 'object') {
13049 if (options !== undefined) {
13050 console.warn('Non options object parameters are deprecated, use options object instead')
13051
13052 options = {
13053 fixedFee: arguments[2],
13054 changeAddress: arguments[3]
13055 }
13056 }
13057 }
13058
13059 options = options || {}
13060
13061 assert(value > this.network.dustThreshold, value + ' must be above dust threshold (' + this.network.dustThreshold + ' Satoshis)')
13062
13063 var changeAddress = options.changeAddress
13064 var fixedFee = options.fixedFee
13065 var minConf = options.minConf === undefined ? 0 : options.minConf // FIXME: change minConf:1 by default in 2.0.0
13066
13067 // filter by minConf, then pending and sort by descending value
13068 var unspents = this.unspents.filter(function (unspent) {
13069 return unspent.confirmations >= minConf
13070 }).filter(function (unspent) {
13071 return !unspent.pending
13072 }).sort(function (o1, o2) {
13073 return o2.value - o1.value
13074 })
13075
13076 var accum = 0
13077 var addresses = []
13078 var subTotal = value
13079
13080 var txb = new TransactionBuilder()
13081 txb.addOutput(to, value)
13082
13083 for (var i = 0; i < unspents.length; ++i) {
13084 var unspent = unspents[i]
13085 addresses.push(unspent.address)
13086
13087 txb.addInput(unspent.txHash, unspent.index)
13088
13089 var fee = fixedFee === undefined ? estimatePaddedFee(txb.buildIncomplete(), this.network) : fixedFee
13090
13091 accum += unspent.value
13092 subTotal = value + fee
13093
13094 if (accum >= subTotal) {
13095 var change = accum - subTotal
13096
13097 if (change > this.network.dustThreshold) {
13098 txb.addOutput(changeAddress || this.getChangeAddress(), change)
13099 }
13100
13101 break
13102 }
13103 }
13104
13105 assert(accum >= subTotal, 'Not enough funds (incl. fee): ' + accum + ' < ' + subTotal)
13106
13107 return this.signWith(txb, addresses).build()
13108 }
13109
13110 // FIXME: remove in 2.0.0
13111 Wallet.prototype.processPendingTx = function (tx) {
13112 this.__processTx(tx, true)
13113 }
13114
13115 // FIXME: remove in 2.0.0
13116 Wallet.prototype.processConfirmedTx = function (tx) {
13117 this.__processTx(tx, false)
13118 }
13119
13120 // FIXME: remove in 2.0.0
13121 Wallet.prototype.__processTx = function (tx, isPending) {
13122 console.warn('processTransaction is considered harmful, see issue #260 for more information')
13123
13124 var txId = tx.getId()
13125 var txHash = tx.getHash()
13126
13127 tx.outs.forEach(function (txOut, i) {
13128 var address
13129
13130 try {
13131 address = Address.fromOutputScript(txOut.script, this.network).toString()
13132 } catch (e) {
13133 if (!(e.message.match(/has no matching Address/)))
13134 throw e
13135 }
13136
13137 var myAddresses = this.addresses.concat(this.changeAddresses)
13138 if (myAddresses.indexOf(address) > -1) {
13139 var lookup = txId + ':' + i
13140 if (lookup in this.unspentMap) return
13141
13142 // its unique, add it
13143 var unspent = {
13144 address: address,
13145 confirmations: 0, // no way to determine this without more information
13146 index: i,
13147 txHash: txHash,
13148 txId: txId,
13149 value: txOut.value,
13150 pending: isPending
13151 }
13152
13153 this.unspentMap[lookup] = unspent
13154 this.unspents.push(unspent)
13155 }
13156 }, this)
13157
13158 tx.ins.forEach(function (txIn) {
13159 // copy and convert to big-endian hex
13160 var txInId = bufferutils.reverse(txIn.hash).toString('hex')
13161
13162 var lookup = txInId + ':' + txIn.index
13163 if (!(lookup in this.unspentMap)) return
13164
13165 var unspent = this.unspentMap[lookup]
13166
13167 if (isPending) {
13168 unspent.pending = true
13169 unspent.spent = true
13170 } else {
13171 delete this.unspentMap[lookup]
13172
13173 this.unspents = this.unspents.filter(function (unspent2) {
13174 return unspent !== unspent2
13175 })
13176 }
13177 }, this)
13178 }
13179
13180 Wallet.prototype.generateAddress = function () {
13181 var k = this.addresses.length
13182 var address = this.getExternalAccount().derive(k).getAddress()
13183
13184 this.addresses.push(address.toString())
13185
13186 return this.getReceiveAddress()
13187 }
13188
13189 Wallet.prototype.generateChangeAddress = function () {
13190 var k = this.changeAddresses.length
13191 var address = this.getInternalAccount().derive(k).getAddress()
13192
13193 this.changeAddresses.push(address.toString())
13194
13195 return this.getChangeAddress()
13196 }
13197
13198 Wallet.prototype.getAddress = function () {
13199 if (this.addresses.length === 0) {
13200 this.generateAddress()
13201 }
13202
13203 return this.addresses[this.addresses.length - 1]
13204 }
13205
13206 Wallet.prototype.getBalance = function (minConf) {
13207 minConf = minConf || 0
13208
13209 return this.unspents.filter(function (unspent) {
13210 return unspent.confirmations >= minConf
13211
13212 // FIXME: remove spent filter in 2.0.0
13213 }).filter(function (unspent) {
13214 return !unspent.spent
13215 }).reduce(function (accum, unspent) {
13216 return accum + unspent.value
13217 }, 0)
13218 }
13219
13220 Wallet.prototype.getChangeAddress = function () {
13221 if (this.changeAddresses.length === 0) {
13222 this.generateChangeAddress()
13223 }
13224
13225 return this.changeAddresses[this.changeAddresses.length - 1]
13226 }
13227
13228 Wallet.prototype.getInternalPrivateKey = function (index) {
13229 return this.getInternalAccount().derive(index).privKey
13230 }
13231
13232 Wallet.prototype.getPrivateKey = function (index) {
13233 return this.getExternalAccount().derive(index).privKey
13234 }
13235
13236 Wallet.prototype.getPrivateKeyForAddress = function (address) {
13237 var index
13238
13239 if ((index = this.addresses.indexOf(address)) > -1) {
13240 return this.getPrivateKey(index)
13241 }
13242
13243 if ((index = this.changeAddresses.indexOf(address)) > -1) {
13244 return this.getInternalPrivateKey(index)
13245 }
13246
13247 assert(false, 'Unknown address. Make sure the address is from the keychain and has been generated')
13248 }
13249
13250 Wallet.prototype.getUnspentOutputs = function (minConf) {
13251 minConf = minConf || 0
13252
13253 return this.unspents.filter(function (unspent) {
13254 return unspent.confirmations >= minConf
13255
13256 // FIXME: remove spent filter in 2.0.0
13257 }).filter(function (unspent) {
13258 return !unspent.spent
13259 }).map(function (unspent) {
13260 return {
13261 address: unspent.address,
13262 confirmations: unspent.confirmations,
13263 index: unspent.index,
13264 txId: unspent.txId,
13265 value: unspent.value,
13266
13267 // FIXME: remove in 2.0.0
13268 hash: unspent.txId,
13269 pending: unspent.pending
13270 }
13271 })
13272 }
13273
13274 Wallet.prototype.setUnspentOutputs = function (unspents) {
13275 this.unspentMap = {}
13276 this.unspents = unspents.map(function (unspent) {
13277 // FIXME: remove unspent.hash in 2.0.0
13278 var txId = unspent.txId || unspent.hash
13279 var index = unspent.index
13280
13281 // FIXME: remove in 2.0.0
13282 if (unspent.hash !== undefined) {
13283 console.warn('unspent.hash is deprecated, use unspent.txId instead')
13284 }
13285
13286 // FIXME: remove in 2.0.0
13287 if (index === undefined) {
13288 console.warn('unspent.outputIndex is deprecated, use unspent.index instead')
13289 index = unspent.outputIndex
13290 }
13291
13292 typeForce('String', txId)
13293 typeForce('Number', index)
13294 typeForce('Number', unspent.value)
13295
13296 assert.equal(txId.length, 64, 'Expected valid txId, got ' + txId)
13297 assert.doesNotThrow(function () {
13298 Address.fromBase58Check(unspent.address)
13299 }, 'Expected Base58 Address, got ' + unspent.address)
13300 assert(isFinite(index), 'Expected finite index, got ' + index)
13301
13302 // FIXME: remove branch in 2.0.0
13303 if (unspent.confirmations !== undefined) {
13304 typeForce('Number', unspent.confirmations)
13305 }
13306
13307 var txHash = bufferutils.reverse(new Buffer(txId, 'hex'))
13308
13309 unspent = {
13310 address: unspent.address,
13311 confirmations: unspent.confirmations || 0,
13312 index: index,
13313 txHash: txHash,
13314 txId: txId,
13315 value: unspent.value,
13316
13317 // FIXME: remove in 2.0.0
13318 pending: unspent.pending || false
13319 }
13320
13321 // FIXME: remove in 2.0.0
13322 this.unspentMap[txId + ':' + index] = unspent
13323
13324 return unspent
13325 }, this)
13326 }
13327
13328 Wallet.prototype.signWith = function (tx, addresses) {
13329 addresses.forEach(function (address, i) {
13330 var privKey = this.getPrivateKeyForAddress(address)
13331
13332 tx.sign(i, privKey)
13333 }, this)
13334
13335 return tx
13336 }
13337
13338 function estimatePaddedFee (tx, network) {
13339 var tmpTx = tx.clone()
13340 tmpTx.addOutput(Script.EMPTY, network.dustSoftThreshold || 0)
13341
13342 return network.estimateFee(tmpTx)
13343 }
13344
13345 // FIXME: 1.0.0 shims, remove in 2.0.0
13346 Wallet.prototype.getReceiveAddress = Wallet.prototype.getAddress
13347 Wallet.prototype.createTx = Wallet.prototype.createTransaction
13348
13349 module.exports = Wallet
13350
13351 }).call(this,require("buffer").Buffer)
13352 },{"./address":54,"./bufferutils":57,"./hdnode":63,"./networks":66,"./script":68,"./transaction_builder":71,"assert":5,"buffer":7,"randombytes":52,"typeforce":53}]},{},[64])(64)
13353 });</script>
13354 <script>bitcoin.networks.shadow = {
13355 magicPrefix: '\x19ShadowCash Signed Message:\n',
13356 bip32: {
13357 public: 0xEE80286A,
13358 private: 0xEE8031E8
13359 },
13360 pubKeyHash: 0x3f,
13361 scriptHash: 0x7d,
13362 wif: 0xbf,
13363 dustThreshold: 0,
13364 feePerKb: 1000,
13365 estimateFee: function() { return "unused in this app" },
13366 };
13367
13368 bitcoin.networks.shadowtn = {
13369 magicPrefix: '\x19ShadowCash Signed Message:\n',
13370 bip32: {
13371 public: 0x76C0FDFB,
13372 private: 0x76C1077A
13373 },
13374 pubKeyHash: 0x7f,
13375 scriptHash: 0xc4,
13376 wif: 0xff,
13377 dustThreshold: 0,
13378 feePerKb: 1000,
13379 estimateFee: function() { return "unused in this app" },
13380 };
13381
13382 bitcoin.networks.clam = {
13383 bip32: {
13384 public: 0xa8c26d64,
13385 private: 0xa8c17826
13386 },
13387 pubKeyHash: 0x89,
13388 wif: 0x85,
13389 };
13390
13391 bitcoin.networks.dash = {
13392 bip32: {
13393 public: 0x0488b21e,
13394 private: 0x0488ade4
13395 },
13396 pubKeyHash: 0x4c,
13397 scriptHash: 0x10,
13398 wif: 0xcc,
13399 };
13400
13401 bitcoin.networks.namecoin = {
13402 bip32: {
13403 public: 0x0488b21e,
13404 private: 0x0488ade4
13405 },
13406 pubKeyHash: 0x34,
13407 //scriptHash: 0x10,
13408 wif: 0x80,
13409 };
13410
13411 bitcoin.networks.peercoin = {
13412 bip32: {
13413 public: 0x0488b21e,
13414 private: 0x0488ade4
13415 },
13416 pubKeyHash: 0x37,
13417 //scriptHash: 0x10,
13418 wif: 0xb7,
13419 };
13420
13421 </script>
13422 <script>// Select components from sjcl to suit the crypto operations bip39 requires.
13423
13424 //// base.js
13425
13426 /** @fileOverview Javascript cryptography implementation.
13427 *
13428 * Crush to remove comments, shorten variable names and
13429 * generally reduce transmission size.
13430 *
13431 * @author Emily Stark
13432 * @author Mike Hamburg
13433 * @author Dan Boneh
13434 */
13435
13436 "use strict";
13437 /*jslint indent: 2, bitwise: false, nomen: false, plusplus: false, white: false, regexp: false */
13438 /*global document, window, escape, unescape, module, require, Uint32Array */
13439
13440 /** @namespace The Stanford Javascript Crypto Library, top-level namespace. */
13441 var sjcl = {
13442 /** @namespace Symmetric ciphers. */
13443 cipher: {},
13444
13445 /** @namespace Hash functions. Right now only SHA256 is implemented. */
13446 hash: {},
13447
13448 /** @namespace Key exchange functions. Right now only SRP is implemented. */
13449 keyexchange: {},
13450
13451 /** @namespace Block cipher modes of operation. */
13452 mode: {},
13453
13454 /** @namespace Miscellaneous. HMAC and PBKDF2. */
13455 misc: {},
13456
13457 /**
13458 * @namespace Bit array encoders and decoders.
13459 *
13460 * @description
13461 * The members of this namespace are functions which translate between
13462 * SJCL's bitArrays and other objects (usually strings). Because it
13463 * isn't always clear which direction is encoding and which is decoding,
13464 * the method names are "fromBits" and "toBits".
13465 */
13466 codec: {},
13467
13468 /** @namespace Exceptions. */
13469 exception: {
13470 /** @constructor Ciphertext is corrupt. */
13471 corrupt: function(message) {
13472 this.toString = function() { return "CORRUPT: "+this.message; };
13473 this.message = message;
13474 },
13475
13476 /** @constructor Invalid parameter. */
13477 invalid: function(message) {
13478 this.toString = function() { return "INVALID: "+this.message; };
13479 this.message = message;
13480 },
13481
13482 /** @constructor Bug or missing feature in SJCL. @constructor */
13483 bug: function(message) {
13484 this.toString = function() { return "BUG: "+this.message; };
13485 this.message = message;
13486 },
13487
13488 /** @constructor Something isn't ready. */
13489 notReady: function(message) {
13490 this.toString = function() { return "NOT READY: "+this.message; };
13491 this.message = message;
13492 }
13493 }
13494 };
13495
13496 if(typeof module !== 'undefined' && module.exports){
13497 module.exports = sjcl;
13498 }
13499 if (typeof define === "function") {
13500 define([], function () {
13501 return sjcl;
13502 });
13503 }
13504
13505
13506 //// bitArray.js
13507
13508 /** @fileOverview Arrays of bits, encoded as arrays of Numbers.
13509 *
13510 * @author Emily Stark
13511 * @author Mike Hamburg
13512 * @author Dan Boneh
13513 */
13514
13515 /** @namespace Arrays of bits, encoded as arrays of Numbers.
13516 *
13517 * @description
13518 * <p>
13519 * These objects are the currency accepted by SJCL's crypto functions.
13520 * </p>
13521 *
13522 * <p>
13523 * Most of our crypto primitives operate on arrays of 4-byte words internally,
13524 * but many of them can take arguments that are not a multiple of 4 bytes.
13525 * This library encodes arrays of bits (whose size need not be a multiple of 8
13526 * bits) as arrays of 32-bit words. The bits are packed, big-endian, into an
13527 * array of words, 32 bits at a time. Since the words are double-precision
13528 * floating point numbers, they fit some extra data. We use this (in a private,
13529 * possibly-changing manner) to encode the number of bits actually present
13530 * in the last word of the array.
13531 * </p>
13532 *
13533 * <p>
13534 * Because bitwise ops clear this out-of-band data, these arrays can be passed
13535 * to ciphers like AES which want arrays of words.
13536 * </p>
13537 */
13538 sjcl.bitArray = {
13539 /**
13540 * Array slices in units of bits.
13541 * @param {bitArray} a The array to slice.
13542 * @param {Number} bstart The offset to the start of the slice, in bits.
13543 * @param {Number} bend The offset to the end of the slice, in bits. If this is undefined,
13544 * slice until the end of the array.
13545 * @return {bitArray} The requested slice.
13546 */
13547 bitSlice: function (a, bstart, bend) {
13548 a = sjcl.bitArray._shiftRight(a.slice(bstart/32), 32 - (bstart & 31)).slice(1);
13549 return (bend === undefined) ? a : sjcl.bitArray.clamp(a, bend-bstart);
13550 },
13551
13552 /**
13553 * Extract a number packed into a bit array.
13554 * @param {bitArray} a The array to slice.
13555 * @param {Number} bstart The offset to the start of the slice, in bits.
13556 * @param {Number} length The length of the number to extract.
13557 * @return {Number} The requested slice.
13558 */
13559 extract: function(a, bstart, blength) {
13560 // FIXME: this Math.floor is not necessary at all, but for some reason
13561 // seems to suppress a bug in the Chromium JIT.
13562 var x, sh = Math.floor((-bstart-blength) & 31);
13563 if ((bstart + blength - 1 ^ bstart) & -32) {
13564 // it crosses a boundary
13565 x = (a[bstart/32|0] << (32 - sh)) ^ (a[bstart/32+1|0] >>> sh);
13566 } else {
13567 // within a single word
13568 x = a[bstart/32|0] >>> sh;
13569 }
13570 return x & ((1<<blength) - 1);
13571 },
13572
13573 /**
13574 * Concatenate two bit arrays.
13575 * @param {bitArray} a1 The first array.
13576 * @param {bitArray} a2 The second array.
13577 * @return {bitArray} The concatenation of a1 and a2.
13578 */
13579 concat: function (a1, a2) {
13580 if (a1.length === 0 || a2.length === 0) {
13581 return a1.concat(a2);
13582 }
13583
13584 var last = a1[a1.length-1], shift = sjcl.bitArray.getPartial(last);
13585 if (shift === 32) {
13586 return a1.concat(a2);
13587 } else {
13588 return sjcl.bitArray._shiftRight(a2, shift, last|0, a1.slice(0,a1.length-1));
13589 }
13590 },
13591
13592 /**
13593 * Find the length of an array of bits.
13594 * @param {bitArray} a The array.
13595 * @return {Number} The length of a, in bits.
13596 */
13597 bitLength: function (a) {
13598 var l = a.length, x;
13599 if (l === 0) { return 0; }
13600 x = a[l - 1];
13601 return (l-1) * 32 + sjcl.bitArray.getPartial(x);
13602 },
13603
13604 /**
13605 * Truncate an array.
13606 * @param {bitArray} a The array.
13607 * @param {Number} len The length to truncate to, in bits.
13608 * @return {bitArray} A new array, truncated to len bits.
13609 */
13610 clamp: function (a, len) {
13611 if (a.length * 32 < len) { return a; }
13612 a = a.slice(0, Math.ceil(len / 32));
13613 var l = a.length;
13614 len = len & 31;
13615 if (l > 0 && len) {
13616 a[l-1] = sjcl.bitArray.partial(len, a[l-1] & 0x80000000 >> (len-1), 1);
13617 }
13618 return a;
13619 },
13620
13621 /**
13622 * Make a partial word for a bit array.
13623 * @param {Number} len The number of bits in the word.
13624 * @param {Number} x The bits.
13625 * @param {Number} [0] _end Pass 1 if x has already been shifted to the high side.
13626 * @return {Number} The partial word.
13627 */
13628 partial: function (len, x, _end) {
13629 if (len === 32) { return x; }
13630 return (_end ? x|0 : x << (32-len)) + len * 0x10000000000;
13631 },
13632
13633 /**
13634 * Get the number of bits used by a partial word.
13635 * @param {Number} x The partial word.
13636 * @return {Number} The number of bits used by the partial word.
13637 */
13638 getPartial: function (x) {
13639 return Math.round(x/0x10000000000) || 32;
13640 },
13641
13642 /**
13643 * Compare two arrays for equality in a predictable amount of time.
13644 * @param {bitArray} a The first array.
13645 * @param {bitArray} b The second array.
13646 * @return {boolean} true if a == b; false otherwise.
13647 */
13648 equal: function (a, b) {
13649 if (sjcl.bitArray.bitLength(a) !== sjcl.bitArray.bitLength(b)) {
13650 return false;
13651 }
13652 var x = 0, i;
13653 for (i=0; i<a.length; i++) {
13654 x |= a[i]^b[i];
13655 }
13656 return (x === 0);
13657 },
13658
13659 /** Shift an array right.
13660 * @param {bitArray} a The array to shift.
13661 * @param {Number} shift The number of bits to shift.
13662 * @param {Number} [carry=0] A byte to carry in
13663 * @param {bitArray} [out=[]] An array to prepend to the output.
13664 * @private
13665 */
13666 _shiftRight: function (a, shift, carry, out) {
13667 var i, last2=0, shift2;
13668 if (out === undefined) { out = []; }
13669
13670 for (; shift >= 32; shift -= 32) {
13671 out.push(carry);
13672 carry = 0;
13673 }
13674 if (shift === 0) {
13675 return out.concat(a);
13676 }
13677
13678 for (i=0; i<a.length; i++) {
13679 out.push(carry | a[i]>>>shift);
13680 carry = a[i] << (32-shift);
13681 }
13682 last2 = a.length ? a[a.length-1] : 0;
13683 shift2 = sjcl.bitArray.getPartial(last2);
13684 out.push(sjcl.bitArray.partial(shift+shift2 & 31, (shift + shift2 > 32) ? carry : out.pop(),1));
13685 return out;
13686 },
13687
13688 /** xor a block of 4 words together.
13689 * @private
13690 */
13691 _xor4: function(x,y) {
13692 return [x[0]^y[0],x[1]^y[1],x[2]^y[2],x[3]^y[3]];
13693 },
13694
13695 /** byteswap a word array inplace.
13696 * (does not handle partial words)
13697 * @param {sjcl.bitArray} a word array
13698 * @return {sjcl.bitArray} byteswapped array
13699 */
13700 byteswapM: function(a) {
13701 var i, v, m = 0xff00;
13702 for (i = 0; i < a.length; ++i) {
13703 v = a[i];
13704 a[i] = (v >>> 24) | ((v >>> 8) & m) | ((v & m) << 8) | (v << 24);
13705 }
13706 return a;
13707 }
13708 };
13709
13710
13711 //// codecString.js
13712
13713 /** @fileOverview Bit array codec implementations.
13714 *
13715 * @author Emily Stark
13716 * @author Mike Hamburg
13717 * @author Dan Boneh
13718 */
13719
13720 /** @namespace UTF-8 strings */
13721 sjcl.codec.utf8String = {
13722 /** Convert from a bitArray to a UTF-8 string. */
13723 fromBits: function (arr) {
13724 var out = "", bl = sjcl.bitArray.bitLength(arr), i, tmp;
13725 for (i=0; i<bl/8; i++) {
13726 if ((i&3) === 0) {
13727 tmp = arr[i/4];
13728 }
13729 out += String.fromCharCode(tmp >>> 24);
13730 tmp <<= 8;
13731 }
13732 return decodeURIComponent(escape(out));
13733 },
13734
13735 /** Convert from a UTF-8 string to a bitArray. */
13736 toBits: function (str) {
13737 str = unescape(encodeURIComponent(str));
13738 var out = [], i, tmp=0;
13739 for (i=0; i<str.length; i++) {
13740 tmp = tmp << 8 | str.charCodeAt(i);
13741 if ((i&3) === 3) {
13742 out.push(tmp);
13743 tmp = 0;
13744 }
13745 }
13746 if (i&3) {
13747 out.push(sjcl.bitArray.partial(8*(i&3), tmp));
13748 }
13749 return out;
13750 }
13751 };
13752
13753
13754 //// codecHex.js
13755
13756 /** @fileOverview Bit array codec implementations.
13757 *
13758 * @author Emily Stark
13759 * @author Mike Hamburg
13760 * @author Dan Boneh
13761 */
13762
13763 /** @namespace Hexadecimal */
13764 sjcl.codec.hex = {
13765 /** Convert from a bitArray to a hex string. */
13766 fromBits: function (arr) {
13767 var out = "", i;
13768 for (i=0; i<arr.length; i++) {
13769 out += ((arr[i]|0)+0xF00000000000).toString(16).substr(4);
13770 }
13771 return out.substr(0, sjcl.bitArray.bitLength(arr)/4);//.replace(/(.{8})/g, "$1 ");
13772 },
13773 /** Convert from a hex string to a bitArray. */
13774 toBits: function (str) {
13775 var i, out=[], len;
13776 str = str.replace(/\s|0x/g, "");
13777 len = str.length;
13778 str = str + "00000000";
13779 for (i=0; i<str.length; i+=8) {
13780 out.push(parseInt(str.substr(i,8),16)^0);
13781 }
13782 return sjcl.bitArray.clamp(out, len*4);
13783 }
13784 };
13785
13786
13787 //// sha512.js
13788
13789 /** @fileOverview Javascript SHA-512 implementation.
13790 *
13791 * This implementation was written for CryptoJS by Jeff Mott and adapted for
13792 * SJCL by Stefan Thomas.
13793 *
13794 * CryptoJS (c) 20092012 by Jeff Mott. All rights reserved.
13795 * Released with New BSD License
13796 *
13797 * @author Emily Stark
13798 * @author Mike Hamburg
13799 * @author Dan Boneh
13800 * @author Jeff Mott
13801 * @author Stefan Thomas
13802 */
13803
13804 /**
13805 * Context for a SHA-512 operation in progress.
13806 * @constructor
13807 * @class Secure Hash Algorithm, 512 bits.
13808 */
13809 sjcl.hash.sha512 = function (hash) {
13810 if (!this._key[0]) { this._precompute(); }
13811 if (hash) {
13812 this._h = hash._h.slice(0);
13813 this._buffer = hash._buffer.slice(0);
13814 this._length = hash._length;
13815 } else {
13816 this.reset();
13817 }
13818 };
13819
13820 /**
13821 * Hash a string or an array of words.
13822 * @static
13823 * @param {bitArray|String} data the data to hash.
13824 * @return {bitArray} The hash value, an array of 16 big-endian words.
13825 */
13826 sjcl.hash.sha512.hash = function (data) {
13827 return (new sjcl.hash.sha512()).update(data).finalize();
13828 };
13829
13830 sjcl.hash.sha512.prototype = {
13831 /**
13832 * The hash's block size, in bits.
13833 * @constant
13834 */
13835 blockSize: 1024,
13836
13837 /**
13838 * Reset the hash state.
13839 * @return this
13840 */
13841 reset:function () {
13842 this._h = this._init.slice(0);
13843 this._buffer = [];
13844 this._length = 0;
13845 return this;
13846 },
13847
13848 /**
13849 * Input several words to the hash.
13850 * @param {bitArray|String} data the data to hash.
13851 * @return this
13852 */
13853 update: function (data) {
13854 if (typeof data === "string") {
13855 data = sjcl.codec.utf8String.toBits(data);
13856 }
13857 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
13858 ol = this._length,
13859 nl = this._length = ol + sjcl.bitArray.bitLength(data);
13860 for (i = 1024+ol & -1024; i <= nl; i+= 1024) {
13861 this._block(b.splice(0,32));
13862 }
13863 return this;
13864 },
13865
13866 /**
13867 * Complete hashing and output the hash value.
13868 * @return {bitArray} The hash value, an array of 16 big-endian words.
13869 */
13870 finalize:function () {
13871 var i, b = this._buffer, h = this._h;
13872
13873 // Round out and push the buffer
13874 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(1,1)]);
13875
13876 // Round out the buffer to a multiple of 32 words, less the 4 length words.
13877 for (i = b.length + 4; i & 31; i++) {
13878 b.push(0);
13879 }
13880
13881 // append the length
13882 b.push(0);
13883 b.push(0);
13884 b.push(Math.floor(this._length / 0x100000000));
13885 b.push(this._length | 0);
13886
13887 while (b.length) {
13888 this._block(b.splice(0,32));
13889 }
13890
13891 this.reset();
13892 return h;
13893 },
13894
13895 /**
13896 * The SHA-512 initialization vector, to be precomputed.
13897 * @private
13898 */
13899 _init:[],
13900
13901 /**
13902 * Least significant 24 bits of SHA512 initialization values.
13903 *
13904 * Javascript only has 53 bits of precision, so we compute the 40 most
13905 * significant bits and add the remaining 24 bits as constants.
13906 *
13907 * @private
13908 */
13909 _initr: [ 0xbcc908, 0xcaa73b, 0x94f82b, 0x1d36f1, 0xe682d1, 0x3e6c1f, 0x41bd6b, 0x7e2179 ],
13910
13911 /*
13912 _init:
13913 [0x6a09e667, 0xf3bcc908, 0xbb67ae85, 0x84caa73b, 0x3c6ef372, 0xfe94f82b, 0xa54ff53a, 0x5f1d36f1,
13914 0x510e527f, 0xade682d1, 0x9b05688c, 0x2b3e6c1f, 0x1f83d9ab, 0xfb41bd6b, 0x5be0cd19, 0x137e2179],
13915 */
13916
13917 /**
13918 * The SHA-512 hash key, to be precomputed.
13919 * @private
13920 */
13921 _key:[],
13922
13923 /**
13924 * Least significant 24 bits of SHA512 key values.
13925 * @private
13926 */
13927 _keyr:
13928 [0x28ae22, 0xef65cd, 0x4d3b2f, 0x89dbbc, 0x48b538, 0x05d019, 0x194f9b, 0x6d8118,
13929 0x030242, 0x706fbe, 0xe4b28c, 0xffb4e2, 0x7b896f, 0x1696b1, 0xc71235, 0x692694,
13930 0xf14ad2, 0x4f25e3, 0x8cd5b5, 0xac9c65, 0x2b0275, 0xa6e483, 0x41fbd4, 0x1153b5,
13931 0x66dfab, 0xb43210, 0xfb213f, 0xef0ee4, 0xa88fc2, 0x0aa725, 0x03826f, 0x0e6e70,
13932 0xd22ffc, 0x26c926, 0xc42aed, 0x95b3df, 0xaf63de, 0x77b2a8, 0xedaee6, 0x82353b,
13933 0xf10364, 0x423001, 0xf89791, 0x54be30, 0xef5218, 0x65a910, 0x71202a, 0xbbd1b8,
13934 0xd2d0c8, 0x41ab53, 0x8eeb99, 0x9b48a8, 0xc95a63, 0x418acb, 0x63e373, 0xb2b8a3,
13935 0xefb2fc, 0x172f60, 0xf0ab72, 0x6439ec, 0x631e28, 0x82bde9, 0xc67915, 0x72532b,
13936 0x26619c, 0xc0c207, 0xe0eb1e, 0x6ed178, 0x176fba, 0xc898a6, 0xf90dae, 0x1c471b,
13937 0x047d84, 0xc72493, 0xc9bebc, 0x100d4c, 0x3e42b6, 0x657e2a, 0xd6faec, 0x475817],
13938
13939 /*
13940 _key:
13941 [0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd, 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
13942 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019, 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
13943 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe, 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
13944 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1, 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
13945 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3, 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
13946 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483, 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
13947 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210, 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
13948 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725, 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
13949 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926, 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
13950 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8, 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
13951 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001, 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
13952 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910, 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
13953 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53, 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
13954 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb, 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
13955 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60, 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
13956 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9, 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
13957 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207, 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
13958 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6, 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
13959 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493, 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
13960 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a, 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817],
13961 */
13962
13963 /**
13964 * Function to precompute _init and _key.
13965 * @private
13966 */
13967 _precompute: function () {
13968 // XXX: This code is for precomputing the SHA256 constants, change for
13969 // SHA512 and re-enable.
13970 var i = 0, prime = 2, factor;
13971
13972 function frac(x) { return (x-Math.floor(x)) * 0x100000000 | 0; }
13973 function frac2(x) { return (x-Math.floor(x)) * 0x10000000000 & 0xff; }
13974
13975 outer: for (; i<80; prime++) {
13976 for (factor=2; factor*factor <= prime; factor++) {
13977 if (prime % factor === 0) {
13978 // not a prime
13979 continue outer;
13980 }
13981 }
13982
13983 if (i<8) {
13984 this._init[i*2] = frac(Math.pow(prime, 1/2));
13985 this._init[i*2+1] = (frac2(Math.pow(prime, 1/2)) << 24) | this._initr[i];
13986 }
13987 this._key[i*2] = frac(Math.pow(prime, 1/3));
13988 this._key[i*2+1] = (frac2(Math.pow(prime, 1/3)) << 24) | this._keyr[i];
13989 i++;
13990 }
13991 },
13992
13993 /**
13994 * Perform one cycle of SHA-512.
13995 * @param {bitArray} words one block of words.
13996 * @private
13997 */
13998 _block:function (words) {
13999 var i, wrh, wrl,
14000 w = words.slice(0),
14001 h = this._h,
14002 k = this._key,
14003 h0h = h[ 0], h0l = h[ 1], h1h = h[ 2], h1l = h[ 3],
14004 h2h = h[ 4], h2l = h[ 5], h3h = h[ 6], h3l = h[ 7],
14005 h4h = h[ 8], h4l = h[ 9], h5h = h[10], h5l = h[11],
14006 h6h = h[12], h6l = h[13], h7h = h[14], h7l = h[15];
14007
14008 // Working variables
14009 var ah = h0h, al = h0l, bh = h1h, bl = h1l,
14010 ch = h2h, cl = h2l, dh = h3h, dl = h3l,
14011 eh = h4h, el = h4l, fh = h5h, fl = h5l,
14012 gh = h6h, gl = h6l, hh = h7h, hl = h7l;
14013
14014 for (i=0; i<80; i++) {
14015 // load up the input word for this round
14016 if (i<16) {
14017 wrh = w[i * 2];
14018 wrl = w[i * 2 + 1];
14019 } else {
14020 // Gamma0
14021 var gamma0xh = w[(i-15) * 2];
14022 var gamma0xl = w[(i-15) * 2 + 1];
14023 var gamma0h =
14024 ((gamma0xl << 31) | (gamma0xh >>> 1)) ^
14025 ((gamma0xl << 24) | (gamma0xh >>> 8)) ^
14026 (gamma0xh >>> 7);
14027 var gamma0l =
14028 ((gamma0xh << 31) | (gamma0xl >>> 1)) ^
14029 ((gamma0xh << 24) | (gamma0xl >>> 8)) ^
14030 ((gamma0xh << 25) | (gamma0xl >>> 7));
14031
14032 // Gamma1
14033 var gamma1xh = w[(i-2) * 2];
14034 var gamma1xl = w[(i-2) * 2 + 1];
14035 var gamma1h =
14036 ((gamma1xl << 13) | (gamma1xh >>> 19)) ^
14037 ((gamma1xh << 3) | (gamma1xl >>> 29)) ^
14038 (gamma1xh >>> 6);
14039 var gamma1l =
14040 ((gamma1xh << 13) | (gamma1xl >>> 19)) ^
14041 ((gamma1xl << 3) | (gamma1xh >>> 29)) ^
14042 ((gamma1xh << 26) | (gamma1xl >>> 6));
14043
14044 // Shortcuts
14045 var wr7h = w[(i-7) * 2];
14046 var wr7l = w[(i-7) * 2 + 1];
14047
14048 var wr16h = w[(i-16) * 2];
14049 var wr16l = w[(i-16) * 2 + 1];
14050
14051 // W(round) = gamma0 + W(round - 7) + gamma1 + W(round - 16)
14052 wrl = gamma0l + wr7l;
14053 wrh = gamma0h + wr7h + ((wrl >>> 0) < (gamma0l >>> 0) ? 1 : 0);
14054 wrl += gamma1l;
14055 wrh += gamma1h + ((wrl >>> 0) < (gamma1l >>> 0) ? 1 : 0);
14056 wrl += wr16l;
14057 wrh += wr16h + ((wrl >>> 0) < (wr16l >>> 0) ? 1 : 0);
14058 }
14059
14060 w[i*2] = wrh |= 0;
14061 w[i*2 + 1] = wrl |= 0;
14062
14063 // Ch
14064 var chh = (eh & fh) ^ (~eh & gh);
14065 var chl = (el & fl) ^ (~el & gl);
14066
14067 // Maj
14068 var majh = (ah & bh) ^ (ah & ch) ^ (bh & ch);
14069 var majl = (al & bl) ^ (al & cl) ^ (bl & cl);
14070
14071 // Sigma0
14072 var sigma0h = ((al << 4) | (ah >>> 28)) ^ ((ah << 30) | (al >>> 2)) ^ ((ah << 25) | (al >>> 7));
14073 var sigma0l = ((ah << 4) | (al >>> 28)) ^ ((al << 30) | (ah >>> 2)) ^ ((al << 25) | (ah >>> 7));
14074
14075 // Sigma1
14076 var sigma1h = ((el << 18) | (eh >>> 14)) ^ ((el << 14) | (eh >>> 18)) ^ ((eh << 23) | (el >>> 9));
14077 var sigma1l = ((eh << 18) | (el >>> 14)) ^ ((eh << 14) | (el >>> 18)) ^ ((el << 23) | (eh >>> 9));
14078
14079 // K(round)
14080 var krh = k[i*2];
14081 var krl = k[i*2+1];
14082
14083 // t1 = h + sigma1 + ch + K(round) + W(round)
14084 var t1l = hl + sigma1l;
14085 var t1h = hh + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0);
14086 t1l += chl;
14087 t1h += chh + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0);
14088 t1l += krl;
14089 t1h += krh + ((t1l >>> 0) < (krl >>> 0) ? 1 : 0);
14090 t1l = t1l + wrl|0; // FF32..FF34 perf issue https://bugzilla.mozilla.org/show_bug.cgi?id=1054972
14091 t1h += wrh + ((t1l >>> 0) < (wrl >>> 0) ? 1 : 0);
14092
14093 // t2 = sigma0 + maj
14094 var t2l = sigma0l + majl;
14095 var t2h = sigma0h + majh + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0);
14096
14097 // Update working variables
14098 hh = gh;
14099 hl = gl;
14100 gh = fh;
14101 gl = fl;
14102 fh = eh;
14103 fl = el;
14104 el = (dl + t1l) | 0;
14105 eh = (dh + t1h + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;
14106 dh = ch;
14107 dl = cl;
14108 ch = bh;
14109 cl = bl;
14110 bh = ah;
14111 bl = al;
14112 al = (t1l + t2l) | 0;
14113 ah = (t1h + t2h + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0;
14114 }
14115
14116 // Intermediate hash
14117 h0l = h[1] = (h0l + al) | 0;
14118 h[0] = (h0h + ah + ((h0l >>> 0) < (al >>> 0) ? 1 : 0)) | 0;
14119 h1l = h[3] = (h1l + bl) | 0;
14120 h[2] = (h1h + bh + ((h1l >>> 0) < (bl >>> 0) ? 1 : 0)) | 0;
14121 h2l = h[5] = (h2l + cl) | 0;
14122 h[4] = (h2h + ch + ((h2l >>> 0) < (cl >>> 0) ? 1 : 0)) | 0;
14123 h3l = h[7] = (h3l + dl) | 0;
14124 h[6] = (h3h + dh + ((h3l >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;
14125 h4l = h[9] = (h4l + el) | 0;
14126 h[8] = (h4h + eh + ((h4l >>> 0) < (el >>> 0) ? 1 : 0)) | 0;
14127 h5l = h[11] = (h5l + fl) | 0;
14128 h[10] = (h5h + fh + ((h5l >>> 0) < (fl >>> 0) ? 1 : 0)) | 0;
14129 h6l = h[13] = (h6l + gl) | 0;
14130 h[12] = (h6h + gh + ((h6l >>> 0) < (gl >>> 0) ? 1 : 0)) | 0;
14131 h7l = h[15] = (h7l + hl) | 0;
14132 h[14] = (h7h + hh + ((h7l >>> 0) < (hl >>> 0) ? 1 : 0)) | 0;
14133 }
14134 };
14135
14136
14137 //// hmac.js
14138
14139 /** @fileOverview HMAC implementation.
14140 *
14141 * @author Emily Stark
14142 * @author Mike Hamburg
14143 * @author Dan Boneh
14144 */
14145
14146 /** HMAC with the specified hash function.
14147 * @constructor
14148 * @param {bitArray} key the key for HMAC.
14149 * @param {Object} [hash=sjcl.hash.sha256] The hash function to use.
14150 */
14151 sjcl.misc.hmac = function (key, Hash) {
14152 this._hash = Hash = Hash || sjcl.hash.sha256;
14153 var exKey = [[],[]], i,
14154 bs = Hash.prototype.blockSize / 32;
14155 this._baseHash = [new Hash(), new Hash()];
14156
14157 if (key.length > bs) {
14158 key = Hash.hash(key);
14159 }
14160
14161 for (i=0; i<bs; i++) {
14162 exKey[0][i] = key[i]^0x36363636;
14163 exKey[1][i] = key[i]^0x5C5C5C5C;
14164 }
14165
14166 this._baseHash[0].update(exKey[0]);
14167 this._baseHash[1].update(exKey[1]);
14168 this._resultHash = new Hash(this._baseHash[0]);
14169 };
14170
14171 /** HMAC with the specified hash function. Also called encrypt since it's a prf.
14172 * @param {bitArray|String} data The data to mac.
14173 */
14174 sjcl.misc.hmac.prototype.encrypt = sjcl.misc.hmac.prototype.mac = function (data) {
14175 if (!this._updated) {
14176 this.update(data);
14177 return this.digest(data);
14178 } else {
14179 throw new sjcl.exception.invalid("encrypt on already updated hmac called!");
14180 }
14181 };
14182
14183 sjcl.misc.hmac.prototype.reset = function () {
14184 this._resultHash = new this._hash(this._baseHash[0]);
14185 this._updated = false;
14186 };
14187
14188 sjcl.misc.hmac.prototype.update = function (data) {
14189 this._updated = true;
14190 this._resultHash.update(data);
14191 };
14192
14193 sjcl.misc.hmac.prototype.digest = function () {
14194 var w = this._resultHash.finalize(), result = new (this._hash)(this._baseHash[1]).update(w).finalize();
14195
14196 this.reset();
14197
14198 return result;
14199 };
14200
14201
14202 //// pbkdf2.js
14203
14204
14205 /** @fileOverview Password-based key-derivation function, version 2.0.
14206 *
14207 * @author Emily Stark
14208 * @author Mike Hamburg
14209 * @author Dan Boneh
14210 */
14211
14212 /** Password-Based Key-Derivation Function, version 2.0.
14213 *
14214 * Generate keys from passwords using PBKDF2-HMAC-SHA256.
14215 *
14216 * This is the method specified by RSA's PKCS #5 standard.
14217 *
14218 * @param {bitArray|String} password The password.
14219 * @param {bitArray|String} salt The salt. Should have lots of entropy.
14220 * @param {Number} [count=1000] The number of iterations. Higher numbers make the function slower but more secure.
14221 * @param {Number} [length] The length of the derived key. Defaults to the
14222 output size of the hash function.
14223 * @param {Object} [Prff=sjcl.misc.hmac] The pseudorandom function family.
14224 * @return {bitArray} the derived key.
14225 */
14226 sjcl.misc.pbkdf2 = function (password, salt, count, length, Prff) {
14227 count = count || 1000;
14228
14229 if (length < 0 || count < 0) {
14230 throw sjcl.exception.invalid("invalid params to pbkdf2");
14231 }
14232
14233 if (typeof password === "string") {
14234 password = sjcl.codec.utf8String.toBits(password);
14235 }
14236
14237 if (typeof salt === "string") {
14238 salt = sjcl.codec.utf8String.toBits(salt);
14239 }
14240
14241 Prff = Prff || sjcl.misc.hmac;
14242
14243 var prf = new Prff(password),
14244 u, ui, i, j, k, out = [], b = sjcl.bitArray;
14245
14246 for (k = 1; 32 * out.length < (length || 1); k++) {
14247 u = ui = prf.encrypt(b.concat(salt,[k]));
14248
14249 for (i=1; i<count; i++) {
14250 ui = prf.encrypt(ui);
14251 for (j=0; j<ui.length; j++) {
14252 u[j] ^= ui[j];
14253 }
14254 }
14255
14256 out = out.concat(u);
14257 }
14258
14259 if (length) { out = b.clamp(out, length); }
14260
14261 return out;
14262 };
14263
14264
14265 //// sha256.js
14266
14267 /** @fileOverview Javascript SHA-256 implementation.
14268 *
14269 * An older version of this implementation is available in the public
14270 * domain, but this one is (c) Emily Stark, Mike Hamburg, Dan Boneh,
14271 * Stanford University 2008-2010 and BSD-licensed for liability
14272 * reasons.
14273 *
14274 * Special thanks to Aldo Cortesi for pointing out several bugs in
14275 * this code.
14276 *
14277 * @author Emily Stark
14278 * @author Mike Hamburg
14279 * @author Dan Boneh
14280 */
14281
14282 /**
14283 * Context for a SHA-256 operation in progress.
14284 * @constructor
14285 * @class Secure Hash Algorithm, 256 bits.
14286 */
14287 sjcl.hash.sha256 = function (hash) {
14288 if (!this._key[0]) { this._precompute(); }
14289 if (hash) {
14290 this._h = hash._h.slice(0);
14291 this._buffer = hash._buffer.slice(0);
14292 this._length = hash._length;
14293 } else {
14294 this.reset();
14295 }
14296 };
14297
14298 /**
14299 * Hash a string or an array of words.
14300 * @static
14301 * @param {bitArray|String} data the data to hash.
14302 * @return {bitArray} The hash value, an array of 16 big-endian words.
14303 */
14304 sjcl.hash.sha256.hash = function (data) {
14305 return (new sjcl.hash.sha256()).update(data).finalize();
14306 };
14307
14308 sjcl.hash.sha256.prototype = {
14309 /**
14310 * The hash's block size, in bits.
14311 * @constant
14312 */
14313 blockSize: 512,
14314
14315 /**
14316 * Reset the hash state.
14317 * @return this
14318 */
14319 reset:function () {
14320 this._h = this._init.slice(0);
14321 this._buffer = [];
14322 this._length = 0;
14323 return this;
14324 },
14325
14326 /**
14327 * Input several words to the hash.
14328 * @param {bitArray|String} data the data to hash.
14329 * @return this
14330 */
14331 update: function (data) {
14332 if (typeof data === "string") {
14333 data = sjcl.codec.utf8String.toBits(data);
14334 }
14335 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
14336 ol = this._length,
14337 nl = this._length = ol + sjcl.bitArray.bitLength(data);
14338 for (i = 512+ol & -512; i <= nl; i+= 512) {
14339 this._block(b.splice(0,16));
14340 }
14341 return this;
14342 },
14343
14344 /**
14345 * Complete hashing and output the hash value.
14346 * @return {bitArray} The hash value, an array of 8 big-endian words.
14347 */
14348 finalize:function () {
14349 var i, b = this._buffer, h = this._h;
14350
14351 // Round out and push the buffer
14352 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(1,1)]);
14353
14354 // Round out the buffer to a multiple of 16 words, less the 2 length words.
14355 for (i = b.length + 2; i & 15; i++) {
14356 b.push(0);
14357 }
14358
14359 // append the length
14360 b.push(Math.floor(this._length / 0x100000000));
14361 b.push(this._length | 0);
14362
14363 while (b.length) {
14364 this._block(b.splice(0,16));
14365 }
14366
14367 this.reset();
14368 return h;
14369 },
14370
14371 /**
14372 * The SHA-256 initialization vector, to be precomputed.
14373 * @private
14374 */
14375 _init:[],
14376 /*
14377 _init:[0x6a09e667,0xbb67ae85,0x3c6ef372,0xa54ff53a,0x510e527f,0x9b05688c,0x1f83d9ab,0x5be0cd19],
14378 */
14379
14380 /**
14381 * The SHA-256 hash key, to be precomputed.
14382 * @private
14383 */
14384 _key:[],
14385 /*
14386 _key:
14387 [0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
14388 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
14389 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
14390 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
14391 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
14392 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
14393 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
14394 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2],
14395 */
14396
14397
14398 /**
14399 * Function to precompute _init and _key.
14400 * @private
14401 */
14402 _precompute: function () {
14403 var i = 0, prime = 2, factor;
14404
14405 function frac(x) { return (x-Math.floor(x)) * 0x100000000 | 0; }
14406
14407 outer: for (; i<64; prime++) {
14408 for (factor=2; factor*factor <= prime; factor++) {
14409 if (prime % factor === 0) {
14410 // not a prime
14411 continue outer;
14412 }
14413 }
14414
14415 if (i<8) {
14416 this._init[i] = frac(Math.pow(prime, 1/2));
14417 }
14418 this._key[i] = frac(Math.pow(prime, 1/3));
14419 i++;
14420 }
14421 },
14422
14423 /**
14424 * Perform one cycle of SHA-256.
14425 * @param {bitArray} words one block of words.
14426 * @private
14427 */
14428 _block:function (words) {
14429 var i, tmp, a, b,
14430 w = words.slice(0),
14431 h = this._h,
14432 k = this._key,
14433 h0 = h[0], h1 = h[1], h2 = h[2], h3 = h[3],
14434 h4 = h[4], h5 = h[5], h6 = h[6], h7 = h[7];
14435
14436 /* Rationale for placement of |0 :
14437 * If a value can overflow is original 32 bits by a factor of more than a few
14438 * million (2^23 ish), there is a possibility that it might overflow the
14439 * 53-bit mantissa and lose precision.
14440 *
14441 * To avoid this, we clamp back to 32 bits by |'ing with 0 on any value that
14442 * propagates around the loop, and on the hash state h[]. I don't believe
14443 * that the clamps on h4 and on h0 are strictly necessary, but it's close
14444 * (for h4 anyway), and better safe than sorry.
14445 *
14446 * The clamps on h[] are necessary for the output to be correct even in the
14447 * common case and for short inputs.
14448 */
14449 for (i=0; i<64; i++) {
14450 // load up the input word for this round
14451 if (i<16) {
14452 tmp = w[i];
14453 } else {
14454 a = w[(i+1 ) & 15];
14455 b = w[(i+14) & 15];
14456 tmp = w[i&15] = ((a>>>7 ^ a>>>18 ^ a>>>3 ^ a<<25 ^ a<<14) +
14457 (b>>>17 ^ b>>>19 ^ b>>>10 ^ b<<15 ^ b<<13) +
14458 w[i&15] + w[(i+9) & 15]) | 0;
14459 }
14460
14461 tmp = (tmp + h7 + (h4>>>6 ^ h4>>>11 ^ h4>>>25 ^ h4<<26 ^ h4<<21 ^ h4<<7) + (h6 ^ h4&(h5^h6)) + k[i]); // | 0;
14462
14463 // shift register
14464 h7 = h6; h6 = h5; h5 = h4;
14465 h4 = h3 + tmp | 0;
14466 h3 = h2; h2 = h1; h1 = h0;
14467
14468 h0 = (tmp + ((h1&h2) ^ (h3&(h1^h2))) + (h1>>>2 ^ h1>>>13 ^ h1>>>22 ^ h1<<30 ^ h1<<19 ^ h1<<10)) | 0;
14469 }
14470
14471 h[0] = h[0]+h0 | 0;
14472 h[1] = h[1]+h1 | 0;
14473 h[2] = h[2]+h2 | 0;
14474 h[3] = h[3]+h3 | 0;
14475 h[4] = h[4]+h4 | 0;
14476 h[5] = h[5]+h5 | 0;
14477 h[6] = h[6]+h6 | 0;
14478 h[7] = h[7]+h7 | 0;
14479 }
14480 };
14481 </script>
14482 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
14483 WORDLISTS["english"] = [
14484 "abandon","ability","able","about","above","absent","absorb","abstract","absurd","abuse",
14485 "access","accident","account","accuse","achieve","acid","acoustic","acquire","across","act",
14486 "action","actor","actress","actual","adapt","add","addict","address","adjust","admit",
14487 "adult","advance","advice","aerobic","affair","afford","afraid","again","age","agent",
14488 "agree","ahead","aim","air","airport","aisle","alarm","album","alcohol","alert",
14489 "alien","all","alley","allow","almost","alone","alpha","already","also","alter",
14490 "always","amateur","amazing","among","amount","amused","analyst","anchor","ancient","anger",
14491 "angle","angry","animal","ankle","announce","annual","another","answer","antenna","antique",
14492 "anxiety","any","apart","apology","appear","apple","approve","april","arch","arctic",
14493 "area","arena","argue","arm","armed","armor","army","around","arrange","arrest",
14494 "arrive","arrow","art","artefact","artist","artwork","ask","aspect","assault","asset",
14495 "assist","assume","asthma","athlete","atom","attack","attend","attitude","attract","auction",
14496 "audit","august","aunt","author","auto","autumn","average","avocado","avoid","awake",
14497 "aware","away","awesome","awful","awkward","axis","baby","bachelor","bacon","badge",
14498 "bag","balance","balcony","ball","bamboo","banana","banner","bar","barely","bargain",
14499 "barrel","base","basic","basket","battle","beach","bean","beauty","because","become",
14500 "beef","before","begin","behave","behind","believe","below","belt","bench","benefit",
14501 "best","betray","better","between","beyond","bicycle","bid","bike","bind","biology",
14502 "bird","birth","bitter","black","blade","blame","blanket","blast","bleak","bless",
14503 "blind","blood","blossom","blouse","blue","blur","blush","board","boat","body",
14504 "boil","bomb","bone","bonus","book","boost","border","boring","borrow","boss",
14505 "bottom","bounce","box","boy","bracket","brain","brand","brass","brave","bread",
14506 "breeze","brick","bridge","brief","bright","bring","brisk","broccoli","broken","bronze",
14507 "broom","brother","brown","brush","bubble","buddy","budget","buffalo","build","bulb",
14508 "bulk","bullet","bundle","bunker","burden","burger","burst","bus","business","busy",
14509 "butter","buyer","buzz","cabbage","cabin","cable","cactus","cage","cake","call",
14510 "calm","camera","camp","can","canal","cancel","candy","cannon","canoe","canvas",
14511 "canyon","capable","capital","captain","car","carbon","card","cargo","carpet","carry",
14512 "cart","case","cash","casino","castle","casual","cat","catalog","catch","category",
14513 "cattle","caught","cause","caution","cave","ceiling","celery","cement","census","century",
14514 "cereal","certain","chair","chalk","champion","change","chaos","chapter","charge","chase",
14515 "chat","cheap","check","cheese","chef","cherry","chest","chicken","chief","child",
14516 "chimney","choice","choose","chronic","chuckle","chunk","churn","cigar","cinnamon","circle",
14517 "citizen","city","civil","claim","clap","clarify","claw","clay","clean","clerk",
14518 "clever","click","client","cliff","climb","clinic","clip","clock","clog","close",
14519 "cloth","cloud","clown","club","clump","cluster","clutch","coach","coast","coconut",
14520 "code","coffee","coil","coin","collect","color","column","combine","come","comfort",
14521 "comic","common","company","concert","conduct","confirm","congress","connect","consider","control",
14522 "convince","cook","cool","copper","copy","coral","core","corn","correct","cost",
14523 "cotton","couch","country","couple","course","cousin","cover","coyote","crack","cradle",
14524 "craft","cram","crane","crash","crater","crawl","crazy","cream","credit","creek",
14525 "crew","cricket","crime","crisp","critic","crop","cross","crouch","crowd","crucial",
14526 "cruel","cruise","crumble","crunch","crush","cry","crystal","cube","culture","cup",
14527 "cupboard","curious","current","curtain","curve","cushion","custom","cute","cycle","dad",
14528 "damage","damp","dance","danger","daring","dash","daughter","dawn","day","deal",
14529 "debate","debris","decade","december","decide","decline","decorate","decrease","deer","defense",
14530 "define","defy","degree","delay","deliver","demand","demise","denial","dentist","deny",
14531 "depart","depend","deposit","depth","deputy","derive","describe","desert","design","desk",
14532 "despair","destroy","detail","detect","develop","device","devote","diagram","dial","diamond",
14533 "diary","dice","diesel","diet","differ","digital","dignity","dilemma","dinner","dinosaur",
14534 "direct","dirt","disagree","discover","disease","dish","dismiss","disorder","display","distance",
14535 "divert","divide","divorce","dizzy","doctor","document","dog","doll","dolphin","domain",
14536 "donate","donkey","donor","door","dose","double","dove","draft","dragon","drama",
14537 "drastic","draw","dream","dress","drift","drill","drink","drip","drive","drop",
14538 "drum","dry","duck","dumb","dune","during","dust","dutch","duty","dwarf",
14539 "dynamic","eager","eagle","early","earn","earth","easily","east","easy","echo",
14540 "ecology","economy","edge","edit","educate","effort","egg","eight","either","elbow",
14541 "elder","electric","elegant","element","elephant","elevator","elite","else","embark","embody",
14542 "embrace","emerge","emotion","employ","empower","empty","enable","enact","end","endless",
14543 "endorse","enemy","energy","enforce","engage","engine","enhance","enjoy","enlist","enough",
14544 "enrich","enroll","ensure","enter","entire","entry","envelope","episode","equal","equip",
14545 "era","erase","erode","erosion","error","erupt","escape","essay","essence","estate",
14546 "eternal","ethics","evidence","evil","evoke","evolve","exact","example","excess","exchange",
14547 "excite","exclude","excuse","execute","exercise","exhaust","exhibit","exile","exist","exit",
14548 "exotic","expand","expect","expire","explain","expose","express","extend","extra","eye",
14549 "eyebrow","fabric","face","faculty","fade","faint","faith","fall","false","fame",
14550 "family","famous","fan","fancy","fantasy","farm","fashion","fat","fatal","father",
14551 "fatigue","fault","favorite","feature","february","federal","fee","feed","feel","female",
14552 "fence","festival","fetch","fever","few","fiber","fiction","field","figure","file",
14553 "film","filter","final","find","fine","finger","finish","fire","firm","first",
14554 "fiscal","fish","fit","fitness","fix","flag","flame","flash","flat","flavor",
14555 "flee","flight","flip","float","flock","floor","flower","fluid","flush","fly",
14556 "foam","focus","fog","foil","fold","follow","food","foot","force","forest",
14557 "forget","fork","fortune","forum","forward","fossil","foster","found","fox","fragile",
14558 "frame","frequent","fresh","friend","fringe","frog","front","frost","frown","frozen",
14559 "fruit","fuel","fun","funny","furnace","fury","future","gadget","gain","galaxy",
14560 "gallery","game","gap","garage","garbage","garden","garlic","garment","gas","gasp",
14561 "gate","gather","gauge","gaze","general","genius","genre","gentle","genuine","gesture",
14562 "ghost","giant","gift","giggle","ginger","giraffe","girl","give","glad","glance",
14563 "glare","glass","glide","glimpse","globe","gloom","glory","glove","glow","glue",
14564 "goat","goddess","gold","good","goose","gorilla","gospel","gossip","govern","gown",
14565 "grab","grace","grain","grant","grape","grass","gravity","great","green","grid",
14566 "grief","grit","grocery","group","grow","grunt","guard","guess","guide","guilt",
14567 "guitar","gun","gym","habit","hair","half","hammer","hamster","hand","happy",
14568 "harbor","hard","harsh","harvest","hat","have","hawk","hazard","head","health",
14569 "heart","heavy","hedgehog","height","hello","helmet","help","hen","hero","hidden",
14570 "high","hill","hint","hip","hire","history","hobby","hockey","hold","hole",
14571 "holiday","hollow","home","honey","hood","hope","horn","horror","horse","hospital",
14572 "host","hotel","hour","hover","hub","huge","human","humble","humor","hundred",
14573 "hungry","hunt","hurdle","hurry","hurt","husband","hybrid","ice","icon","idea",
14574 "identify","idle","ignore","ill","illegal","illness","image","imitate","immense","immune",
14575 "impact","impose","improve","impulse","inch","include","income","increase","index","indicate",
14576 "indoor","industry","infant","inflict","inform","inhale","inherit","initial","inject","injury",
14577 "inmate","inner","innocent","input","inquiry","insane","insect","inside","inspire","install",
14578 "intact","interest","into","invest","invite","involve","iron","island","isolate","issue",
14579 "item","ivory","jacket","jaguar","jar","jazz","jealous","jeans","jelly","jewel",
14580 "job","join","joke","journey","joy","judge","juice","jump","jungle","junior",
14581 "junk","just","kangaroo","keen","keep","ketchup","key","kick","kid","kidney",
14582 "kind","kingdom","kiss","kit","kitchen","kite","kitten","kiwi","knee","knife",
14583 "knock","know","lab","label","labor","ladder","lady","lake","lamp","language",
14584 "laptop","large","later","latin","laugh","laundry","lava","law","lawn","lawsuit",
14585 "layer","lazy","leader","leaf","learn","leave","lecture","left","leg","legal",
14586 "legend","leisure","lemon","lend","length","lens","leopard","lesson","letter","level",
14587 "liar","liberty","library","license","life","lift","light","like","limb","limit",
14588 "link","lion","liquid","list","little","live","lizard","load","loan","lobster",
14589 "local","lock","logic","lonely","long","loop","lottery","loud","lounge","love",
14590 "loyal","lucky","luggage","lumber","lunar","lunch","luxury","lyrics","machine","mad",
14591 "magic","magnet","maid","mail","main","major","make","mammal","man","manage",
14592 "mandate","mango","mansion","manual","maple","marble","march","margin","marine","market",
14593 "marriage","mask","mass","master","match","material","math","matrix","matter","maximum",
14594 "maze","meadow","mean","measure","meat","mechanic","medal","media","melody","melt",
14595 "member","memory","mention","menu","mercy","merge","merit","merry","mesh","message",
14596 "metal","method","middle","midnight","milk","million","mimic","mind","minimum","minor",
14597 "minute","miracle","mirror","misery","miss","mistake","mix","mixed","mixture","mobile",
14598 "model","modify","mom","moment","monitor","monkey","monster","month","moon","moral",
14599 "more","morning","mosquito","mother","motion","motor","mountain","mouse","move","movie",
14600 "much","muffin","mule","multiply","muscle","museum","mushroom","music","must","mutual",
14601 "myself","mystery","myth","naive","name","napkin","narrow","nasty","nation","nature",
14602 "near","neck","need","negative","neglect","neither","nephew","nerve","nest","net",
14603 "network","neutral","never","news","next","nice","night","noble","noise","nominee",
14604 "noodle","normal","north","nose","notable","note","nothing","notice","novel","now",
14605 "nuclear","number","nurse","nut","oak","obey","object","oblige","obscure","observe",
14606 "obtain","obvious","occur","ocean","october","odor","off","offer","office","often",
14607 "oil","okay","old","olive","olympic","omit","once","one","onion","online",
14608 "only","open","opera","opinion","oppose","option","orange","orbit","orchard","order",
14609 "ordinary","organ","orient","original","orphan","ostrich","other","outdoor","outer","output",
14610 "outside","oval","oven","over","own","owner","oxygen","oyster","ozone","pact",
14611 "paddle","page","pair","palace","palm","panda","panel","panic","panther","paper",
14612 "parade","parent","park","parrot","party","pass","patch","path","patient","patrol",
14613 "pattern","pause","pave","payment","peace","peanut","pear","peasant","pelican","pen",
14614 "penalty","pencil","people","pepper","perfect","permit","person","pet","phone","photo",
14615 "phrase","physical","piano","picnic","picture","piece","pig","pigeon","pill","pilot",
14616 "pink","pioneer","pipe","pistol","pitch","pizza","place","planet","plastic","plate",
14617 "play","please","pledge","pluck","plug","plunge","poem","poet","point","polar",
14618 "pole","police","pond","pony","pool","popular","portion","position","possible","post",
14619 "potato","pottery","poverty","powder","power","practice","praise","predict","prefer","prepare",
14620 "present","pretty","prevent","price","pride","primary","print","priority","prison","private",
14621 "prize","problem","process","produce","profit","program","project","promote","proof","property",
14622 "prosper","protect","proud","provide","public","pudding","pull","pulp","pulse","pumpkin",
14623 "punch","pupil","puppy","purchase","purity","purpose","purse","push","put","puzzle",
14624 "pyramid","quality","quantum","quarter","question","quick","quit","quiz","quote","rabbit",
14625 "raccoon","race","rack","radar","radio","rail","rain","raise","rally","ramp",
14626 "ranch","random","range","rapid","rare","rate","rather","raven","raw","razor",
14627 "ready","real","reason","rebel","rebuild","recall","receive","recipe","record","recycle",
14628 "reduce","reflect","reform","refuse","region","regret","regular","reject","relax","release",
14629 "relief","rely","remain","remember","remind","remove","render","renew","rent","reopen",
14630 "repair","repeat","replace","report","require","rescue","resemble","resist","resource","response",
14631 "result","retire","retreat","return","reunion","reveal","review","reward","rhythm","rib",
14632 "ribbon","rice","rich","ride","ridge","rifle","right","rigid","ring","riot",
14633 "ripple","risk","ritual","rival","river","road","roast","robot","robust","rocket",
14634 "romance","roof","rookie","room","rose","rotate","rough","round","route","royal",
14635 "rubber","rude","rug","rule","run","runway","rural","sad","saddle","sadness",
14636 "safe","sail","salad","salmon","salon","salt","salute","same","sample","sand",
14637 "satisfy","satoshi","sauce","sausage","save","say","scale","scan","scare","scatter",
14638 "scene","scheme","school","science","scissors","scorpion","scout","scrap","screen","script",
14639 "scrub","sea","search","season","seat","second","secret","section","security","seed",
14640 "seek","segment","select","sell","seminar","senior","sense","sentence","series","service",
14641 "session","settle","setup","seven","shadow","shaft","shallow","share","shed","shell",
14642 "sheriff","shield","shift","shine","ship","shiver","shock","shoe","shoot","shop",
14643 "short","shoulder","shove","shrimp","shrug","shuffle","shy","sibling","sick","side",
14644 "siege","sight","sign","silent","silk","silly","silver","similar","simple","since",
14645 "sing","siren","sister","situate","six","size","skate","sketch","ski","skill",
14646 "skin","skirt","skull","slab","slam","sleep","slender","slice","slide","slight",
14647 "slim","slogan","slot","slow","slush","small","smart","smile","smoke","smooth",
14648 "snack","snake","snap","sniff","snow","soap","soccer","social","sock","soda",
14649 "soft","solar","soldier","solid","solution","solve","someone","song","soon","sorry",
14650 "sort","soul","sound","soup","source","south","space","spare","spatial","spawn",
14651 "speak","special","speed","spell","spend","sphere","spice","spider","spike","spin",
14652 "spirit","split","spoil","sponsor","spoon","sport","spot","spray","spread","spring",
14653 "spy","square","squeeze","squirrel","stable","stadium","staff","stage","stairs","stamp",
14654 "stand","start","state","stay","steak","steel","stem","step","stereo","stick",
14655 "still","sting","stock","stomach","stone","stool","story","stove","strategy","street",
14656 "strike","strong","struggle","student","stuff","stumble","style","subject","submit","subway",
14657 "success","such","sudden","suffer","sugar","suggest","suit","summer","sun","sunny",
14658 "sunset","super","supply","supreme","sure","surface","surge","surprise","surround","survey",
14659 "suspect","sustain","swallow","swamp","swap","swarm","swear","sweet","swift","swim",
14660 "swing","switch","sword","symbol","symptom","syrup","system","table","tackle","tag",
14661 "tail","talent","talk","tank","tape","target","task","taste","tattoo","taxi",
14662 "teach","team","tell","ten","tenant","tennis","tent","term","test","text",
14663 "thank","that","theme","then","theory","there","they","thing","this","thought",
14664 "three","thrive","throw","thumb","thunder","ticket","tide","tiger","tilt","timber",
14665 "time","tiny","tip","tired","tissue","title","toast","tobacco","today","toddler",
14666 "toe","together","toilet","token","tomato","tomorrow","tone","tongue","tonight","tool",
14667 "tooth","top","topic","topple","torch","tornado","tortoise","toss","total","tourist",
14668 "toward","tower","town","toy","track","trade","traffic","tragic","train","transfer",
14669 "trap","trash","travel","tray","treat","tree","trend","trial","tribe","trick",
14670 "trigger","trim","trip","trophy","trouble","truck","true","truly","trumpet","trust",
14671 "truth","try","tube","tuition","tumble","tuna","tunnel","turkey","turn","turtle",
14672 "twelve","twenty","twice","twin","twist","two","type","typical","ugly","umbrella",
14673 "unable","unaware","uncle","uncover","under","undo","unfair","unfold","unhappy","uniform",
14674 "unique","unit","universe","unknown","unlock","until","unusual","unveil","update","upgrade",
14675 "uphold","upon","upper","upset","urban","urge","usage","use","used","useful",
14676 "useless","usual","utility","vacant","vacuum","vague","valid","valley","valve","van",
14677 "vanish","vapor","various","vast","vault","vehicle","velvet","vendor","venture","venue",
14678 "verb","verify","version","very","vessel","veteran","viable","vibrant","vicious","victory",
14679 "video","view","village","vintage","violin","virtual","virus","visa","visit","visual",
14680 "vital","vivid","vocal","voice","void","volcano","volume","vote","voyage","wage",
14681 "wagon","wait","walk","wall","walnut","want","warfare","warm","warrior","wash",
14682 "wasp","waste","water","wave","way","wealth","weapon","wear","weasel","weather",
14683 "web","wedding","weekend","weird","welcome","west","wet","whale","what","wheat",
14684 "wheel","when","where","whip","whisper","wide","width","wife","wild","will",
14685 "win","window","wine","wing","wink","winner","winter","wire","wisdom","wise",
14686 "wish","witness","wolf","woman","wonder","wood","wool","word","work","world",
14687 "worry","worth","wrap","wreck","wrestle","wrist","write","wrong","yard","year",
14688 "yellow","you","young","youth","zebra","zero","zone","zoo"]
14689 </script>
14690 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
14691 WORDLISTS["japanese"] = [
14692 "あいこくしん", "あいさつ", "あいだ", "あおぞら", "あかちゃん", "あきる", "あけがた", "あける", "あこがれる", "あさい",
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 </script>
14898 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
14899 WORDLISTS["spanish"] = [
14900 "ábaco", "abdomen", "abeja", "abierto", "abogado", "abono", "aborto", "abrazo", "abrir", "abuelo",
14901 "abuso", "acabar", "academia", "acceso", "acción", "aceite", "acelga", "acento", "aceptar", "ácido",
14902 "aclarar", "acné", "acoger", "acoso", "activo", "acto", "actriz", "actuar", "acudir", "acuerdo",
14903 "acusar", "adicto", "admitir", "adoptar", "adorno", "aduana", "adulto", "aéreo", "afectar", "afición",
14904 "afinar", "afirmar", "ágil", "agitar", "agonía", "agosto", "agotar", "agregar", "agrio", "agua",
14905 "agudo", "águila", "aguja", "ahogo", "ahorro", "aire", "aislar", "ajedrez", "ajeno", "ajuste",
14906 "alacrán", "alambre", "alarma", "alba", "álbum", "alcalde", "aldea", "alegre", "alejar", "alerta",
14907 "aleta", "alfiler", "alga", "algodón", "aliado", "aliento", "alivio", "alma", "almeja", "almíbar",
14908 "altar", "alteza", "altivo", "alto", "altura", "alumno", "alzar", "amable", "amante", "amapola",
14909 "amargo", "amasar", "ámbar", "ámbito", "ameno", "amigo", "amistad", "amor", "amparo", "amplio",
14910 "ancho", "anciano", "ancla", "andar", "andén", "anemia", "ángulo", "anillo", "ánimo", "anís",
14911 "anotar", "antena", "antiguo", "antojo", "anual", "anular", "anuncio", "añadir", "añejo", "año",
14912 "apagar", "aparato", "apetito", "apio", "aplicar", "apodo", "aporte", "apoyo", "aprender", "aprobar",
14913 "apuesta", "apuro", "arado", "araña", "arar", "árbitro", "árbol", "arbusto", "archivo", "arco",
14914 "arder", "ardilla", "arduo", "área", "árido", "aries", "armonía", "arnés", "aroma", "arpa",
14915 "arpón", "arreglo", "arroz", "arruga", "arte", "artista", "asa", "asado", "asalto", "ascenso",
14916 "asegurar", "aseo", "asesor", "asiento", "asilo", "asistir", "asno", "asombro", "áspero", "astilla",
14917 "astro", "astuto", "asumir", "asunto", "atajo", "ataque", "atar", "atento", "ateo", "ático",
14918 "atleta", "átomo", "atraer", "atroz", "atún", "audaz", "audio", "auge", "aula", "aumento",
14919 "ausente", "autor", "aval", "avance", "avaro", "ave", "avellana", "avena", "avestruz", "avión",
14920 "aviso", "ayer", "ayuda", "ayuno", "azafrán", "azar", "azote", "azúcar", "azufre", "azul",
14921 "baba", "babor", "bache", "bahía", "baile", "bajar", "balanza", "balcón", "balde", "bambú",
14922 "banco", "banda", "baño", "barba", "barco", "barniz", "barro", "báscula", "bastón", "basura",
14923 "batalla", "batería", "batir", "batuta", "baúl", "bazar", "bebé", "bebida", "bello", "besar",
14924 "beso", "bestia", "bicho", "bien", "bingo", "blanco", "bloque", "blusa", "boa", "bobina",
14925 "bobo", "boca", "bocina", "boda", "bodega", "boina", "bola", "bolero", "bolsa", "bomba",
14926 "bondad", "bonito", "bono", "bonsái", "borde", "borrar", "bosque", "bote", "botín", "bóveda",
14927 "bozal", "bravo", "brazo", "brecha", "breve", "brillo", "brinco", "brisa", "broca", "broma",
14928 "bronce", "brote", "bruja", "brusco", "bruto", "buceo", "bucle", "bueno", "buey", "bufanda",
14929 "bufón", "búho", "buitre", "bulto", "burbuja", "burla", "burro", "buscar", "butaca", "buzón",
14930 "caballo", "cabeza", "cabina", "cabra", "cacao", "cadáver", "cadena", "caer", "café", "caída",
14931 "caimán", "caja", "cajón", "cal", "calamar", "calcio", "caldo", "calidad", "calle", "calma",
14932 "calor", "calvo", "cama", "cambio", "camello", "camino", "campo", "cáncer", "candil", "canela",
14933 "canguro", "canica", "canto", "caña", "cañón", "caoba", "caos", "capaz", "capitán", "capote",
14934 "captar", "capucha", "cara", "carbón", "cárcel", "careta", "carga", "cariño", "carne", "carpeta",
14935 "carro", "carta", "casa", "casco", "casero", "caspa", "castor", "catorce", "catre", "caudal",
14936 "causa", "cazo", "cebolla", "ceder", "cedro", "celda", "célebre", "celoso", "célula", "cemento",
14937 "ceniza", "centro", "cerca", "cerdo", "cereza", "cero", "cerrar", "certeza", "césped", "cetro",
14938 "chacal", "chaleco", "champú", "chancla", "chapa", "charla", "chico", "chiste", "chivo", "choque",
14939 "choza", "chuleta", "chupar", "ciclón", "ciego", "cielo", "cien", "cierto", "cifra", "cigarro",
14940 "cima", "cinco", "cine", "cinta", "ciprés", "circo", "ciruela", "cisne", "cita", "ciudad",
14941 "clamor", "clan", "claro", "clase", "clave", "cliente", "clima", "clínica", "cobre", "cocción",
14942 "cochino", "cocina", "coco", "código", "codo", "cofre", "coger", "cohete", "cojín", "cojo",
14943 "cola", "colcha", "colegio", "colgar", "colina", "collar", "colmo", "columna", "combate", "comer",
14944 "comida", "cómodo", "compra", "conde", "conejo", "conga", "conocer", "consejo", "contar", "copa",
14945 "copia", "corazón", "corbata", "corcho", "cordón", "corona", "correr", "coser", "cosmos", "costa",
14946 "cráneo", "cráter", "crear", "crecer", "creído", "crema", "cría", "crimen", "cripta", "crisis",
14947 "cromo", "crónica", "croqueta", "crudo", "cruz", "cuadro", "cuarto", "cuatro", "cubo", "cubrir",
14948 "cuchara", "cuello", "cuento", "cuerda", "cuesta", "cueva", "cuidar", "culebra", "culpa", "culto",
14949 "cumbre", "cumplir", "cuna", "cuneta", "cuota", "cupón", "cúpula", "curar", "curioso", "curso",
14950 "curva", "cutis", "dama", "danza", "dar", "dardo", "dátil", "deber", "débil", "década",
14951 "decir", "dedo", "defensa", "definir", "dejar", "delfín", "delgado", "delito", "demora", "denso",
14952 "dental", "deporte", "derecho", "derrota", "desayuno", "deseo", "desfile", "desnudo", "destino", "desvío",
14953 "detalle", "detener", "deuda", "día", "diablo", "diadema", "diamante", "diana", "diario", "dibujo",
14954 "dictar", "diente", "dieta", "diez", "difícil", "digno", "dilema", "diluir", "dinero", "directo",
14955 "dirigir", "disco", "diseño", "disfraz", "diva", "divino", "doble", "doce", "dolor", "domingo",
14956 "don", "donar", "dorado", "dormir", "dorso", "dos", "dosis", "dragón", "droga", "ducha",
14957 "duda", "duelo", "dueño", "dulce", "dúo", "duque", "durar", "dureza", "duro", "ébano",
14958 "ebrio", "echar", "eco", "ecuador", "edad", "edición", "edificio", "editor", "educar", "efecto",
14959 "eficaz", "eje", "ejemplo", "elefante", "elegir", "elemento", "elevar", "elipse", "élite", "elixir",
14960 "elogio", "eludir", "embudo", "emitir", "emoción", "empate", "empeño", "empleo", "empresa", "enano",
14961 "encargo", "enchufe", "encía", "enemigo", "enero", "enfado", "enfermo", "engaño", "enigma", "enlace",
14962 "enorme", "enredo", "ensayo", "enseñar", "entero", "entrar", "envase", "envío", "época", "equipo",
14963 "erizo", "escala", "escena", "escolar", "escribir", "escudo", "esencia", "esfera", "esfuerzo", "espada",
14964 "espejo", "espía", "esposa", "espuma", "esquí", "estar", "este", "estilo", "estufa", "etapa",
14965 "eterno", "ética", "etnia", "evadir", "evaluar", "evento", "evitar", "exacto", "examen", "exceso",
14966 "excusa", "exento", "exigir", "exilio", "existir", "éxito", "experto", "explicar", "exponer", "extremo",
14967 "fábrica", "fábula", "fachada", "fácil", "factor", "faena", "faja", "falda", "fallo", "falso",
14968 "faltar", "fama", "familia", "famoso", "faraón", "farmacia", "farol", "farsa", "fase", "fatiga",
14969 "fauna", "favor", "fax", "febrero", "fecha", "feliz", "feo", "feria", "feroz", "fértil",
14970 "fervor", "festín", "fiable", "fianza", "fiar", "fibra", "ficción", "ficha", "fideo", "fiebre",
14971 "fiel", "fiera", "fiesta", "figura", "fijar", "fijo", "fila", "filete", "filial", "filtro",
14972 "fin", "finca", "fingir", "finito", "firma", "flaco", "flauta", "flecha", "flor", "flota",
14973 "fluir", "flujo", "flúor", "fobia", "foca", "fogata", "fogón", "folio", "folleto", "fondo",
14974 "forma", "forro", "fortuna", "forzar", "fosa", "foto", "fracaso", "frágil", "franja", "frase",
14975 "fraude", "freír", "freno", "fresa", "frío", "frito", "fruta", "fuego", "fuente", "fuerza",
14976 "fuga", "fumar", "función", "funda", "furgón", "furia", "fusil", "fútbol", "futuro", "gacela",
14977 "gafas", "gaita", "gajo", "gala", "galería", "gallo", "gamba", "ganar", "gancho", "ganga",
14978 "ganso", "garaje", "garza", "gasolina", "gastar", "gato", "gavilán", "gemelo", "gemir", "gen",
14979 "género", "genio", "gente", "geranio", "gerente", "germen", "gesto", "gigante", "gimnasio", "girar",
14980 "giro", "glaciar", "globo", "gloria", "gol", "golfo", "goloso", "golpe", "goma", "gordo",
14981 "gorila", "gorra", "gota", "goteo", "gozar", "grada", "gráfico", "grano", "grasa", "gratis",
14982 "grave", "grieta", "grillo", "gripe", "gris", "grito", "grosor", "grúa", "grueso", "grumo",
14983 "grupo", "guante", "guapo", "guardia", "guerra", "guía", "guiño", "guion", "guiso", "guitarra",
14984 "gusano", "gustar", "haber", "hábil", "hablar", "hacer", "hacha", "hada", "hallar", "hamaca",
14985 "harina", "haz", "hazaña", "hebilla", "hebra", "hecho", "helado", "helio", "hembra", "herir",
14986 "hermano", "héroe", "hervir", "hielo", "hierro", "hígado", "higiene", "hijo", "himno", "historia",
14987 "hocico", "hogar", "hoguera", "hoja", "hombre", "hongo", "honor", "honra", "hora", "hormiga",
14988 "horno", "hostil", "hoyo", "hueco", "huelga", "huerta", "hueso", "huevo", "huida", "huir",
14989 "humano", "húmedo", "humilde", "humo", "hundir", "huracán", "hurto", "icono", "ideal", "idioma",
14990 "ídolo", "iglesia", "iglú", "igual", "ilegal", "ilusión", "imagen", "imán", "imitar", "impar",
14991 "imperio", "imponer", "impulso", "incapaz", "índice", "inerte", "infiel", "informe", "ingenio", "inicio",
14992 "inmenso", "inmune", "innato", "insecto", "instante", "interés", "íntimo", "intuir", "inútil", "invierno",
14993 "ira", "iris", "ironía", "isla", "islote", "jabalí", "jabón", "jamón", "jarabe", "jardín",
14994 "jarra", "jaula", "jazmín", "jefe", "jeringa", "jinete", "jornada", "joroba", "joven", "joya",
14995 "juerga", "jueves", "juez", "jugador", "jugo", "juguete", "juicio", "junco", "jungla", "junio",
14996 "juntar", "júpiter", "jurar", "justo", "juvenil", "juzgar", "kilo", "koala", "labio", "lacio",
14997 "lacra", "lado", "ladrón", "lagarto", "lágrima", "laguna", "laico", "lamer", "lámina", "lámpara",
14998 "lana", "lancha", "langosta", "lanza", "lápiz", "largo", "larva", "lástima", "lata", "látex",
14999 "latir", "laurel", "lavar", "lazo", "leal", "lección", "leche", "lector", "leer", "legión",
15000 "legumbre", "lejano", "lengua", "lento", "leña", "león", "leopardo", "lesión", "letal", "letra",
15001 "leve", "leyenda", "libertad", "libro", "licor", "líder", "lidiar", "lienzo", "liga", "ligero",
15002 "lima", "límite", "limón", "limpio", "lince", "lindo", "línea", "lingote", "lino", "linterna",
15003 "líquido", "liso", "lista", "litera", "litio", "litro", "llaga", "llama", "llanto", "llave",
15004 "llegar", "llenar", "llevar", "llorar", "llover", "lluvia", "lobo", "loción", "loco", "locura",
15005 "lógica", "logro", "lombriz", "lomo", "lonja", "lote", "lucha", "lucir", "lugar", "lujo",
15006 "luna", "lunes", "lupa", "lustro", "luto", "luz", "maceta", "macho", "madera", "madre",
15007 "maduro", "maestro", "mafia", "magia", "mago", "maíz", "maldad", "maleta", "malla", "malo",
15008 "mamá", "mambo", "mamut", "manco", "mando", "manejar", "manga", "maniquí", "manjar", "mano",
15009 "manso", "manta", "mañana", "mapa", "máquina", "mar", "marco", "marea", "marfil", "margen",
15010 "marido", "mármol", "marrón", "martes", "marzo", "masa", "máscara", "masivo", "matar", "materia",
15011 "matiz", "matriz", "máximo", "mayor", "mazorca", "mecha", "medalla", "medio", "médula", "mejilla",
15012 "mejor", "melena", "melón", "memoria", "menor", "mensaje", "mente", "menú", "mercado", "merengue",
15013 "mérito", "mes", "mesón", "meta", "meter", "método", "metro", "mezcla", "miedo", "miel",
15014 "miembro", "miga", "mil", "milagro", "militar", "millón", "mimo", "mina", "minero", "mínimo",
15015 "minuto", "miope", "mirar", "misa", "miseria", "misil", "mismo", "mitad", "mito", "mochila",
15016 "moción", "moda", "modelo", "moho", "mojar", "molde", "moler", "molino", "momento", "momia",
15017 "monarca", "moneda", "monja", "monto", "moño", "morada", "morder", "moreno", "morir", "morro",
15018 "morsa", "mortal", "mosca", "mostrar", "motivo", "mover", "móvil", "mozo", "mucho", "mudar",
15019 "mueble", "muela", "muerte", "muestra", "mugre", "mujer", "mula", "muleta", "multa", "mundo",
15020 "muñeca", "mural", "muro", "músculo", "museo", "musgo", "música", "muslo", "nácar", "nación",
15021 "nadar", "naipe", "naranja", "nariz", "narrar", "nasal", "natal", "nativo", "natural", "náusea",
15022 "naval", "nave", "navidad", "necio", "néctar", "negar", "negocio", "negro", "neón", "nervio",
15023 "neto", "neutro", "nevar", "nevera", "nicho", "nido", "niebla", "nieto", "niñez", "niño",
15024 "nítido", "nivel", "nobleza", "noche", "nómina", "noria", "norma", "norte", "nota", "noticia",
15025 "novato", "novela", "novio", "nube", "nuca", "núcleo", "nudillo", "nudo", "nuera", "nueve",
15026 "nuez", "nulo", "número", "nutria", "oasis", "obeso", "obispo", "objeto", "obra", "obrero",
15027 "observar", "obtener", "obvio", "oca", "ocaso", "océano", "ochenta", "ocho", "ocio", "ocre",
15028 "octavo", "octubre", "oculto", "ocupar", "ocurrir", "odiar", "odio", "odisea", "oeste", "ofensa",
15029 "oferta", "oficio", "ofrecer", "ogro", "oído", "oír", "ojo", "ola", "oleada", "olfato",
15030 "olivo", "olla", "olmo", "olor", "olvido", "ombligo", "onda", "onza", "opaco", "opción",
15031 "ópera", "opinar", "oponer", "optar", "óptica", "opuesto", "oración", "orador", "oral", "órbita",
15032 "orca", "orden", "oreja", "órgano", "orgía", "orgullo", "oriente", "origen", "orilla", "oro",
15033 "orquesta", "oruga", "osadía", "oscuro", "osezno", "oso", "ostra", "otoño", "otro", "oveja",
15034 "óvulo", "óxido", "oxígeno", "oyente", "ozono", "pacto", "padre", "paella", "página", "pago",
15035 "país", "pájaro", "palabra", "palco", "paleta", "pálido", "palma", "paloma", "palpar", "pan",
15036 "panal", "pánico", "pantera", "pañuelo", "papá", "papel", "papilla", "paquete", "parar", "parcela",
15037 "pared", "parir", "paro", "párpado", "parque", "párrafo", "parte", "pasar", "paseo", "pasión",
15038 "paso", "pasta", "pata", "patio", "patria", "pausa", "pauta", "pavo", "payaso", "peatón",
15039 "pecado", "pecera", "pecho", "pedal", "pedir", "pegar", "peine", "pelar", "peldaño", "pelea",
15040 "peligro", "pellejo", "pelo", "peluca", "pena", "pensar", "peñón", "peón", "peor", "pepino",
15041 "pequeño", "pera", "percha", "perder", "pereza", "perfil", "perico", "perla", "permiso", "perro",
15042 "persona", "pesa", "pesca", "pésimo", "pestaña", "pétalo", "petróleo", "pez", "pezuña", "picar",
15043 "pichón", "pie", "piedra", "pierna", "pieza", "pijama", "pilar", "piloto", "pimienta", "pino",
15044 "pintor", "pinza", "piña", "piojo", "pipa", "pirata", "pisar", "piscina", "piso", "pista",
15045 "pitón", "pizca", "placa", "plan", "plata", "playa", "plaza", "pleito", "pleno", "plomo",
15046 "pluma", "plural", "pobre", "poco", "poder", "podio", "poema", "poesía", "poeta", "polen",
15047 "policía", "pollo", "polvo", "pomada", "pomelo", "pomo", "pompa", "poner", "porción", "portal",
15048 "posada", "poseer", "posible", "poste", "potencia", "potro", "pozo", "prado", "precoz", "pregunta",
15049 "premio", "prensa", "preso", "previo", "primo", "príncipe", "prisión", "privar", "proa", "probar",
15050 "proceso", "producto", "proeza", "profesor", "programa", "prole", "promesa", "pronto", "propio", "próximo",
15051 "prueba", "público", "puchero", "pudor", "pueblo", "puerta", "puesto", "pulga", "pulir", "pulmón",
15052 "pulpo", "pulso", "puma", "punto", "puñal", "puño", "pupa", "pupila", "puré", "quedar",
15053 "queja", "quemar", "querer", "queso", "quieto", "química", "quince", "quitar", "rábano", "rabia",
15054 "rabo", "ración", "radical", "raíz", "rama", "rampa", "rancho", "rango", "rapaz", "rápido",
15055 "rapto", "rasgo", "raspa", "rato", "rayo", "raza", "razón", "reacción", "realidad", "rebaño",
15056 "rebote", "recaer", "receta", "rechazo", "recoger", "recreo", "recto", "recurso", "red", "redondo",
15057 "reducir", "reflejo", "reforma", "refrán", "refugio", "regalo", "regir", "regla", "regreso", "rehén",
15058 "reino", "reír", "reja", "relato", "relevo", "relieve", "relleno", "reloj", "remar", "remedio",
15059 "remo", "rencor", "rendir", "renta", "reparto", "repetir", "reposo", "reptil", "res", "rescate",
15060 "resina", "respeto", "resto", "resumen", "retiro", "retorno", "retrato", "reunir", "revés", "revista",
15061 "rey", "rezar", "rico", "riego", "rienda", "riesgo", "rifa", "rígido", "rigor", "rincón",
15062 "riñón", "río", "riqueza", "risa", "ritmo", "rito", "rizo", "roble", "roce", "rociar",
15063 "rodar", "rodeo", "rodilla", "roer", "rojizo", "rojo", "romero", "romper", "ron", "ronco",
15064 "ronda", "ropa", "ropero", "rosa", "rosca", "rostro", "rotar", "rubí", "rubor", "rudo",
15065 "rueda", "rugir", "ruido", "ruina", "ruleta", "rulo", "rumbo", "rumor", "ruptura", "ruta",
15066 "rutina", "sábado", "saber", "sabio", "sable", "sacar", "sagaz", "sagrado", "sala", "saldo",
15067 "salero", "salir", "salmón", "salón", "salsa", "salto", "salud", "salvar", "samba", "sanción",
15068 "sandía", "sanear", "sangre", "sanidad", "sano", "santo", "sapo", "saque", "sardina", "sartén",
15069 "sastre", "satán", "sauna", "saxofón", "sección", "seco", "secreto", "secta", "sed", "seguir",
15070 "seis", "sello", "selva", "semana", "semilla", "senda", "sensor", "señal", "señor", "separar",
15071 "sepia", "sequía", "ser", "serie", "sermón", "servir", "sesenta", "sesión", "seta", "setenta",
15072 "severo", "sexo", "sexto", "sidra", "siesta", "siete", "siglo", "signo", "sílaba", "silbar",
15073 "silencio", "silla", "símbolo", "simio", "sirena", "sistema", "sitio", "situar", "sobre", "socio",
15074 "sodio", "sol", "solapa", "soldado", "soledad", "sólido", "soltar", "solución", "sombra", "sondeo",
15075 "sonido", "sonoro", "sonrisa", "sopa", "soplar", "soporte", "sordo", "sorpresa", "sorteo", "sostén",
15076 "sótano", "suave", "subir", "suceso", "sudor", "suegra", "suelo", "sueño", "suerte", "sufrir",
15077 "sujeto", "sultán", "sumar", "superar", "suplir", "suponer", "supremo", "sur", "surco", "sureño",
15078 "surgir", "susto", "sutil", "tabaco", "tabique", "tabla", "tabú", "taco", "tacto", "tajo",
15079 "talar", "talco", "talento", "talla", "talón", "tamaño", "tambor", "tango", "tanque", "tapa",
15080 "tapete", "tapia", "tapón", "taquilla", "tarde", "tarea", "tarifa", "tarjeta", "tarot", "tarro",
15081 "tarta", "tatuaje", "tauro", "taza", "tazón", "teatro", "techo", "tecla", "técnica", "tejado",
15082 "tejer", "tejido", "tela", "teléfono", "tema", "temor", "templo", "tenaz", "tender", "tener",
15083 "tenis", "tenso", "teoría", "terapia", "terco", "término", "ternura", "terror", "tesis", "tesoro",
15084 "testigo", "tetera", "texto", "tez", "tibio", "tiburón", "tiempo", "tienda", "tierra", "tieso",
15085 "tigre", "tijera", "tilde", "timbre", "tímido", "timo", "tinta", "tío", "típico", "tipo",
15086 "tira", "tirón", "titán", "títere", "título", "tiza", "toalla", "tobillo", "tocar", "tocino",
15087 "todo", "toga", "toldo", "tomar", "tono", "tonto", "topar", "tope", "toque", "tórax",
15088 "torero", "tormenta", "torneo", "toro", "torpedo", "torre", "torso", "tortuga", "tos", "tosco",
15089 "toser", "tóxico", "trabajo", "tractor", "traer", "tráfico", "trago", "traje", "tramo", "trance",
15090 "trato", "trauma", "trazar", "trébol", "tregua", "treinta", "tren", "trepar", "tres", "tribu",
15091 "trigo", "tripa", "triste", "triunfo", "trofeo", "trompa", "tronco", "tropa", "trote", "trozo",
15092 "truco", "trueno", "trufa", "tubería", "tubo", "tuerto", "tumba", "tumor", "túnel", "túnica",
15093 "turbina", "turismo", "turno", "tutor", "ubicar", "úlcera", "umbral", "unidad", "unir", "universo",
15094 "uno", "untar", "uña", "urbano", "urbe", "urgente", "urna", "usar", "usuario", "útil",
15095 "utopía", "uva", "vaca", "vacío", "vacuna", "vagar", "vago", "vaina", "vajilla", "vale",
15096 "válido", "valle", "valor", "válvula", "vampiro", "vara", "variar", "varón", "vaso", "vecino",
15097 "vector", "vehículo", "veinte", "vejez", "vela", "velero", "veloz", "vena", "vencer", "venda",
15098 "veneno", "vengar", "venir", "venta", "venus", "ver", "verano", "verbo", "verde", "vereda",
15099 "verja", "verso", "verter", "vía", "viaje", "vibrar", "vicio", "víctima", "vida", "vídeo",
15100 "vidrio", "viejo", "viernes", "vigor", "vil", "villa", "vinagre", "vino", "viñedo", "violín",
15101 "viral", "virgo", "virtud", "visor", "víspera", "vista", "vitamina", "viudo", "vivaz", "vivero",
15102 "vivir", "vivo", "volcán", "volumen", "volver", "voraz", "votar", "voto", "voz", "vuelo",
15103 "vulgar", "yacer", "yate", "yegua", "yema", "yerno", "yeso", "yodo", "yoga", "yogur",
15104 "zafiro", "zanja", "zapato", "zarza", "zona", "zorro", "zumo", "zurdo"]
15105 </script>
15106 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
15107 WORDLISTS["chinese_simplified"] = [
15108 "的", "一", "是", "在", "不", "了", "有", "和", "人", "这",
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 </script>
15314 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
15315 WORDLISTS["chinese_traditional"] = [
15316 "的", "一", "是", "在", "不", "了", "有", "和", "人", "這",
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 </script>
15522 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
15523 WORDLISTS["french"] = [
15524 "abaisser", "abandon", "abdiquer", "abeille", "abolir", "aborder", "aboutir", "aboyer", "abrasif", "abreuver",
15525 "abriter", "abroger", "abrupt", "absence", "absolu", "absurde", "abusif", "abyssal", "académie", "acajou",
15526 "acarien", "accabler", "accepter", "acclamer", "accolade", "accroche", "accuser", "acerbe", "achat", "acheter",
15527 "aciduler", "acier", "acompte", "acquérir", "acronyme", "acteur", "actif", "actuel", "adepte", "adéquat",
15528 "adhésif", "adjectif", "adjuger", "admettre", "admirer", "adopter", "adorer", "adoucir", "adresse", "adroit",
15529 "adulte", "adverbe", "aérer", "aéronef", "affaire", "affecter", "affiche", "affreux", "affubler", "agacer",
15530 "agencer", "agile", "agiter", "agrafer", "agréable", "agrume", "aider", "aiguille", "ailier", "aimable",
15531 "aisance", "ajouter", "ajuster", "alarmer", "alchimie", "alerte", "algèbre", "algue", "aliéner", "aliment",
15532 "alléger", "alliage", "allouer", "allumer", "alourdir", "alpaga", "altesse", "alvéole", "amateur", "ambigu",
15533 "ambre", "aménager", "amertume", "amidon", "amiral", "amorcer", "amour", "amovible", "amphibie", "ampleur",
15534 "amusant", "analyse", "anaphore", "anarchie", "anatomie", "ancien", "anéantir", "angle", "angoisse", "anguleux",
15535 "animal", "annexer", "annonce", "annuel", "anodin", "anomalie", "anonyme", "anormal", "antenne", "antidote",
15536 "anxieux", "apaiser", "apéritif", "aplanir", "apologie", "appareil", "appeler", "apporter", "appuyer", "aquarium",
15537 "aqueduc", "arbitre", "arbuste", "ardeur", "ardoise", "argent", "arlequin", "armature", "armement", "armoire",
15538 "armure", "arpenter", "arracher", "arriver", "arroser", "arsenic", "artériel", "article", "aspect", "asphalte",
15539 "aspirer", "assaut", "asservir", "assiette", "associer", "assurer", "asticot", "astre", "astuce", "atelier",
15540 "atome", "atrium", "atroce", "attaque", "attentif", "attirer", "attraper", "aubaine", "auberge", "audace",
15541 "audible", "augurer", "aurore", "automne", "autruche", "avaler", "avancer", "avarice", "avenir", "averse",
15542 "aveugle", "aviateur", "avide", "avion", "aviser", "avoine", "avouer", "avril", "axial", "axiome",
15543 "badge", "bafouer", "bagage", "baguette", "baignade", "balancer", "balcon", "baleine", "balisage", "bambin",
15544 "bancaire", "bandage", "banlieue", "bannière", "banquier", "barbier", "baril", "baron", "barque", "barrage",
15545 "bassin", "bastion", "bataille", "bateau", "batterie", "baudrier", "bavarder", "belette", "bélier", "belote",
15546 "bénéfice", "berceau", "berger", "berline", "bermuda", "besace", "besogne", "bétail", "beurre", "biberon",
15547 "bicycle", "bidule", "bijou", "bilan", "bilingue", "billard", "binaire", "biologie", "biopsie", "biotype",
15548 "biscuit", "bison", "bistouri", "bitume", "bizarre", "blafard", "blague", "blanchir", "blessant", "blinder",
15549 "blond", "bloquer", "blouson", "bobard", "bobine", "boire", "boiser", "bolide", "bonbon", "bondir",
15550 "bonheur", "bonifier", "bonus", "bordure", "borne", "botte", "boucle", "boueux", "bougie", "boulon",
15551 "bouquin", "bourse", "boussole", "boutique", "boxeur", "branche", "brasier", "brave", "brebis", "brèche",
15552 "breuvage", "bricoler", "brigade", "brillant", "brioche", "brique", "brochure", "broder", "bronzer", "brousse",
15553 "broyeur", "brume", "brusque", "brutal", "bruyant", "buffle", "buisson", "bulletin", "bureau", "burin",
15554 "bustier", "butiner", "butoir", "buvable", "buvette", "cabanon", "cabine", "cachette", "cadeau", "cadre",
15555 "caféine", "caillou", "caisson", "calculer", "calepin", "calibre", "calmer", "calomnie", "calvaire", "camarade",
15556 "caméra", "camion", "campagne", "canal", "caneton", "canon", "cantine", "canular", "capable", "caporal",
15557 "caprice", "capsule", "capter", "capuche", "carabine", "carbone", "caresser", "caribou", "carnage", "carotte",
15558 "carreau", "carton", "cascade", "casier", "casque", "cassure", "causer", "caution", "cavalier", "caverne",
15559 "caviar", "cédille", "ceinture", "céleste", "cellule", "cendrier", "censurer", "central", "cercle", "cérébral",
15560 "cerise", "cerner", "cerveau", "cesser", "chagrin", "chaise", "chaleur", "chambre", "chance", "chapitre",
15561 "charbon", "chasseur", "chaton", "chausson", "chavirer", "chemise", "chenille", "chéquier", "chercher", "cheval",
15562 "chien", "chiffre", "chignon", "chimère", "chiot", "chlorure", "chocolat", "choisir", "chose", "chouette",
15563 "chrome", "chute", "cigare", "cigogne", "cimenter", "cinéma", "cintrer", "circuler", "cirer", "cirque",
15564 "citerne", "citoyen", "citron", "civil", "clairon", "clameur", "claquer", "classe", "clavier", "client",
15565 "cligner", "climat", "clivage", "cloche", "clonage", "cloporte", "cobalt", "cobra", "cocasse", "cocotier",
15566 "coder", "codifier", "coffre", "cogner", "cohésion", "coiffer", "coincer", "colère", "colibri", "colline",
15567 "colmater", "colonel", "combat", "comédie", "commande", "compact", "concert", "conduire", "confier", "congeler",
15568 "connoter", "consonne", "contact", "convexe", "copain", "copie", "corail", "corbeau", "cordage", "corniche",
15569 "corpus", "correct", "cortège", "cosmique", "costume", "coton", "coude", "coupure", "courage", "couteau",
15570 "couvrir", "coyote", "crabe", "crainte", "cravate", "crayon", "créature", "créditer", "crémeux", "creuser",
15571 "crevette", "cribler", "crier", "cristal", "critère", "croire", "croquer", "crotale", "crucial", "cruel",
15572 "crypter", "cubique", "cueillir", "cuillère", "cuisine", "cuivre", "culminer", "cultiver", "cumuler", "cupide",
15573 "curatif", "curseur", "cyanure", "cycle", "cylindre", "cynique", "daigner", "damier", "danger", "danseur",
15574 "dauphin", "débattre", "débiter", "déborder", "débrider", "débutant", "décaler", "décembre", "déchirer", "décider",
15575 "déclarer", "décorer", "décrire", "décupler", "dédale", "déductif", "déesse", "défensif", "défiler", "défrayer",
15576 "dégager", "dégivrer", "déglutir", "dégrafer", "déjeuner", "délice", "déloger", "demander", "demeurer", "démolir",
15577 "dénicher", "dénouer", "dentelle", "dénuder", "départ", "dépenser", "déphaser", "déplacer", "déposer", "déranger",
15578 "dérober", "désastre", "descente", "désert", "désigner", "désobéir", "dessiner", "destrier", "détacher", "détester",
15579 "détourer", "détresse", "devancer", "devenir", "deviner", "devoir", "diable", "dialogue", "diamant", "dicter",
15580 "différer", "digérer", "digital", "digne", "diluer", "dimanche", "diminuer", "dioxyde", "directif", "diriger",
15581 "discuter", "disposer", "dissiper", "distance", "divertir", "diviser", "docile", "docteur", "dogme", "doigt",
15582 "domaine", "domicile", "dompter", "donateur", "donjon", "donner", "dopamine", "dortoir", "dorure", "dosage",
15583 "doseur", "dossier", "dotation", "douanier", "double", "douceur", "douter", "doyen", "dragon", "draper",
15584 "dresser", "dribbler", "droiture", "duperie", "duplexe", "durable", "durcir", "dynastie", "éblouir", "écarter",
15585 "écharpe", "échelle", "éclairer", "éclipse", "éclore", "écluse", "école", "économie", "écorce", "écouter",
15586 "écraser", "écrémer", "écrivain", "écrou", "écume", "écureuil", "édifier", "éduquer", "effacer", "effectif",
15587 "effigie", "effort", "effrayer", "effusion", "égaliser", "égarer", "éjecter", "élaborer", "élargir", "électron",
15588 "élégant", "éléphant", "élève", "éligible", "élitisme", "éloge", "élucider", "éluder", "emballer", "embellir",
15589 "embryon", "émeraude", "émission", "emmener", "émotion", "émouvoir", "empereur", "employer", "emporter", "emprise",
15590 "émulsion", "encadrer", "enchère", "enclave", "encoche", "endiguer", "endosser", "endroit", "enduire", "énergie",
15591 "enfance", "enfermer", "enfouir", "engager", "engin", "englober", "énigme", "enjamber", "enjeu", "enlever",
15592 "ennemi", "ennuyeux", "enrichir", "enrobage", "enseigne", "entasser", "entendre", "entier", "entourer", "entraver",
15593 "énumérer", "envahir", "enviable", "envoyer", "enzyme", "éolien", "épaissir", "épargne", "épatant", "épaule",
15594 "épicerie", "épidémie", "épier", "épilogue", "épine", "épisode", "épitaphe", "époque", "épreuve", "éprouver",
15595 "épuisant", "équerre", "équipe", "ériger", "érosion", "erreur", "éruption", "escalier", "espadon", "espèce",
15596 "espiègle", "espoir", "esprit", "esquiver", "essayer", "essence", "essieu", "essorer", "estime", "estomac",
15597 "estrade", "étagère", "étaler", "étanche", "étatique", "éteindre", "étendoir", "éternel", "éthanol", "éthique",
15598 "ethnie", "étirer", "étoffer", "étoile", "étonnant", "étourdir", "étrange", "étroit", "étude", "euphorie",
15599 "évaluer", "évasion", "éventail", "évidence", "éviter", "évolutif", "évoquer", "exact", "exagérer", "exaucer",
15600 "exceller", "excitant", "exclusif", "excuse", "exécuter", "exemple", "exercer", "exhaler", "exhorter", "exigence",
15601 "exiler", "exister", "exotique", "expédier", "explorer", "exposer", "exprimer", "exquis", "extensif", "extraire",
15602 "exulter", "fable", "fabuleux", "facette", "facile", "facture", "faiblir", "falaise", "fameux", "famille",
15603 "farceur", "farfelu", "farine", "farouche", "fasciner", "fatal", "fatigue", "faucon", "fautif", "faveur",
15604 "favori", "fébrile", "féconder", "fédérer", "félin", "femme", "fémur", "fendoir", "féodal", "fermer",
15605 "féroce", "ferveur", "festival", "feuille", "feutre", "février", "fiasco", "ficeler", "fictif", "fidèle",
15606 "figure", "filature", "filetage", "filière", "filleul", "filmer", "filou", "filtrer", "financer", "finir",
15607 "fiole", "firme", "fissure", "fixer", "flairer", "flamme", "flasque", "flatteur", "fléau", "flèche",
15608 "fleur", "flexion", "flocon", "flore", "fluctuer", "fluide", "fluvial", "folie", "fonderie", "fongible",
15609 "fontaine", "forcer", "forgeron", "formuler", "fortune", "fossile", "foudre", "fougère", "fouiller", "foulure",
15610 "fourmi", "fragile", "fraise", "franchir", "frapper", "frayeur", "frégate", "freiner", "frelon", "frémir",
15611 "frénésie", "frère", "friable", "friction", "frisson", "frivole", "froid", "fromage", "frontal", "frotter",
15612 "fruit", "fugitif", "fuite", "fureur", "furieux", "furtif", "fusion", "futur", "gagner", "galaxie",
15613 "galerie", "gambader", "garantir", "gardien", "garnir", "garrigue", "gazelle", "gazon", "géant", "gélatine",
15614 "gélule", "gendarme", "général", "génie", "genou", "gentil", "géologie", "géomètre", "géranium", "germe",
15615 "gestuel", "geyser", "gibier", "gicler", "girafe", "givre", "glace", "glaive", "glisser", "globe",
15616 "gloire", "glorieux", "golfeur", "gomme", "gonfler", "gorge", "gorille", "goudron", "gouffre", "goulot",
15617 "goupille", "gourmand", "goutte", "graduel", "graffiti", "graine", "grand", "grappin", "gratuit", "gravir",
15618 "grenat", "griffure", "griller", "grimper", "grogner", "gronder", "grotte", "groupe", "gruger", "grutier",
15619 "gruyère", "guépard", "guerrier", "guide", "guimauve", "guitare", "gustatif", "gymnaste", "gyrostat", "habitude",
15620 "hachoir", "halte", "hameau", "hangar", "hanneton", "haricot", "harmonie", "harpon", "hasard", "hélium",
15621 "hématome", "herbe", "hérisson", "hermine", "héron", "hésiter", "heureux", "hiberner", "hibou", "hilarant",
15622 "histoire", "hiver", "homard", "hommage", "homogène", "honneur", "honorer", "honteux", "horde", "horizon",
15623 "horloge", "hormone", "horrible", "houleux", "housse", "hublot", "huileux", "humain", "humble", "humide",
15624 "humour", "hurler", "hydromel", "hygiène", "hymne", "hypnose", "idylle", "ignorer", "iguane", "illicite",
15625 "illusion", "image", "imbiber", "imiter", "immense", "immobile", "immuable", "impact", "impérial", "implorer",
15626 "imposer", "imprimer", "imputer", "incarner", "incendie", "incident", "incliner", "incolore", "indexer", "indice",
15627 "inductif", "inédit", "ineptie", "inexact", "infini", "infliger", "informer", "infusion", "ingérer", "inhaler",
15628 "inhiber", "injecter", "injure", "innocent", "inoculer", "inonder", "inscrire", "insecte", "insigne", "insolite",
15629 "inspirer", "instinct", "insulter", "intact", "intense", "intime", "intrigue", "intuitif", "inutile", "invasion",
15630 "inventer", "inviter", "invoquer", "ironique", "irradier", "irréel", "irriter", "isoler", "ivoire", "ivresse",
15631 "jaguar", "jaillir", "jambe", "janvier", "jardin", "jauger", "jaune", "javelot", "jetable", "jeton",
15632 "jeudi", "jeunesse", "joindre", "joncher", "jongler", "joueur", "jouissif", "journal", "jovial", "joyau",
15633 "joyeux", "jubiler", "jugement", "junior", "jupon", "juriste", "justice", "juteux", "juvénile", "kayak",
15634 "kimono", "kiosque", "label", "labial", "labourer", "lacérer", "lactose", "lagune", "laine", "laisser",
15635 "laitier", "lambeau", "lamelle", "lampe", "lanceur", "langage", "lanterne", "lapin", "largeur", "larme",
15636 "laurier", "lavabo", "lavoir", "lecture", "légal", "léger", "légume", "lessive", "lettre", "levier",
15637 "lexique", "lézard", "liasse", "libérer", "libre", "licence", "licorne", "liège", "lièvre", "ligature",
15638 "ligoter", "ligue", "limer", "limite", "limonade", "limpide", "linéaire", "lingot", "lionceau", "liquide",
15639 "lisière", "lister", "lithium", "litige", "littoral", "livreur", "logique", "lointain", "loisir", "lombric",
15640 "loterie", "louer", "lourd", "loutre", "louve", "loyal", "lubie", "lucide", "lucratif", "lueur",
15641 "lugubre", "luisant", "lumière", "lunaire", "lundi", "luron", "lutter", "luxueux", "machine", "magasin",
15642 "magenta", "magique", "maigre", "maillon", "maintien", "mairie", "maison", "majorer", "malaxer", "maléfice",
15643 "malheur", "malice", "mallette", "mammouth", "mandater", "maniable", "manquant", "manteau", "manuel", "marathon",
15644 "marbre", "marchand", "mardi", "maritime", "marqueur", "marron", "marteler", "mascotte", "massif", "matériel",
15645 "matière", "matraque", "maudire", "maussade", "mauve", "maximal", "méchant", "méconnu", "médaille", "médecin",
15646 "méditer", "méduse", "meilleur", "mélange", "mélodie", "membre", "mémoire", "menacer", "mener", "menhir",
15647 "mensonge", "mentor", "mercredi", "mérite", "merle", "messager", "mesure", "métal", "météore", "méthode",
15648 "métier", "meuble", "miauler", "microbe", "miette", "mignon", "migrer", "milieu", "million", "mimique",
15649 "mince", "minéral", "minimal", "minorer", "minute", "miracle", "miroiter", "missile", "mixte", "mobile",
15650 "moderne", "moelleux", "mondial", "moniteur", "monnaie", "monotone", "monstre", "montagne", "monument", "moqueur",
15651 "morceau", "morsure", "mortier", "moteur", "motif", "mouche", "moufle", "moulin", "mousson", "mouton",
15652 "mouvant", "multiple", "munition", "muraille", "murène", "murmure", "muscle", "muséum", "musicien", "mutation",
15653 "muter", "mutuel", "myriade", "myrtille", "mystère", "mythique", "nageur", "nappe", "narquois", "narrer",
15654 "natation", "nation", "nature", "naufrage", "nautique", "navire", "nébuleux", "nectar", "néfaste", "négation",
15655 "négliger", "négocier", "neige", "nerveux", "nettoyer", "neurone", "neutron", "neveu", "niche", "nickel",
15656 "nitrate", "niveau", "noble", "nocif", "nocturne", "noirceur", "noisette", "nomade", "nombreux", "nommer",
15657 "normatif", "notable", "notifier", "notoire", "nourrir", "nouveau", "novateur", "novembre", "novice", "nuage",
15658 "nuancer", "nuire", "nuisible", "numéro", "nuptial", "nuque", "nutritif", "obéir", "objectif", "obliger",
15659 "obscur", "observer", "obstacle", "obtenir", "obturer", "occasion", "occuper", "océan", "octobre", "octroyer",
15660 "octupler", "oculaire", "odeur", "odorant", "offenser", "officier", "offrir", "ogive", "oiseau", "oisillon",
15661 "olfactif", "olivier", "ombrage", "omettre", "onctueux", "onduler", "onéreux", "onirique", "opale", "opaque",
15662 "opérer", "opinion", "opportun", "opprimer", "opter", "optique", "orageux", "orange", "orbite", "ordonner",
15663 "oreille", "organe", "orgueil", "orifice", "ornement", "orque", "ortie", "osciller", "osmose", "ossature",
15664 "otarie", "ouragan", "ourson", "outil", "outrager", "ouvrage", "ovation", "oxyde", "oxygène", "ozone",
15665 "paisible", "palace", "palmarès", "palourde", "palper", "panache", "panda", "pangolin", "paniquer", "panneau",
15666 "panorama", "pantalon", "papaye", "papier", "papoter", "papyrus", "paradoxe", "parcelle", "paresse", "parfumer",
15667 "parler", "parole", "parrain", "parsemer", "partager", "parure", "parvenir", "passion", "pastèque", "paternel",
15668 "patience", "patron", "pavillon", "pavoiser", "payer", "paysage", "peigne", "peintre", "pelage", "pélican",
15669 "pelle", "pelouse", "peluche", "pendule", "pénétrer", "pénible", "pensif", "pénurie", "pépite", "péplum",
15670 "perdrix", "perforer", "période", "permuter", "perplexe", "persil", "perte", "peser", "pétale", "petit",
15671 "pétrir", "peuple", "pharaon", "phobie", "phoque", "photon", "phrase", "physique", "piano", "pictural",
15672 "pièce", "pierre", "pieuvre", "pilote", "pinceau", "pipette", "piquer", "pirogue", "piscine", "piston",
15673 "pivoter", "pixel", "pizza", "placard", "plafond", "plaisir", "planer", "plaque", "plastron", "plateau",
15674 "pleurer", "plexus", "pliage", "plomb", "plonger", "pluie", "plumage", "pochette", "poésie", "poète",
15675 "pointe", "poirier", "poisson", "poivre", "polaire", "policier", "pollen", "polygone", "pommade", "pompier",
15676 "ponctuel", "pondérer", "poney", "portique", "position", "posséder", "posture", "potager", "poteau", "potion",
15677 "pouce", "poulain", "poumon", "pourpre", "poussin", "pouvoir", "prairie", "pratique", "précieux", "prédire",
15678 "préfixe", "prélude", "prénom", "présence", "prétexte", "prévoir", "primitif", "prince", "prison", "priver",
15679 "problème", "procéder", "prodige", "profond", "progrès", "proie", "projeter", "prologue", "promener", "propre",
15680 "prospère", "protéger", "prouesse", "proverbe", "prudence", "pruneau", "psychose", "public", "puceron", "puiser",
15681 "pulpe", "pulsar", "punaise", "punitif", "pupitre", "purifier", "puzzle", "pyramide", "quasar", "querelle",
15682 "question", "quiétude", "quitter", "quotient", "racine", "raconter", "radieux", "ragondin", "raideur", "raisin",
15683 "ralentir", "rallonge", "ramasser", "rapide", "rasage", "ratisser", "ravager", "ravin", "rayonner", "réactif",
15684 "réagir", "réaliser", "réanimer", "recevoir", "réciter", "réclamer", "récolter", "recruter", "reculer", "recycler",
15685 "rédiger", "redouter", "refaire", "réflexe", "réformer", "refrain", "refuge", "régalien", "région", "réglage",
15686 "régulier", "réitérer", "rejeter", "rejouer", "relatif", "relever", "relief", "remarque", "remède", "remise",
15687 "remonter", "remplir", "remuer", "renard", "renfort", "renifler", "renoncer", "rentrer", "renvoi", "replier",
15688 "reporter", "reprise", "reptile", "requin", "réserve", "résineux", "résoudre", "respect", "rester", "résultat",
15689 "rétablir", "retenir", "réticule", "retomber", "retracer", "réunion", "réussir", "revanche", "revivre", "révolte",
15690 "révulsif", "richesse", "rideau", "rieur", "rigide", "rigoler", "rincer", "riposter", "risible", "risque",
15691 "rituel", "rival", "rivière", "rocheux", "romance", "rompre", "ronce", "rondin", "roseau", "rosier",
15692 "rotatif", "rotor", "rotule", "rouge", "rouille", "rouleau", "routine", "royaume", "ruban", "rubis",
15693 "ruche", "ruelle", "rugueux", "ruiner", "ruisseau", "ruser", "rustique", "rythme", "sabler", "saboter",
15694 "sabre", "sacoche", "safari", "sagesse", "saisir", "salade", "salive", "salon", "saluer", "samedi",
15695 "sanction", "sanglier", "sarcasme", "sardine", "saturer", "saugrenu", "saumon", "sauter", "sauvage", "savant",
15696 "savonner", "scalpel", "scandale", "scélérat", "scénario", "sceptre", "schéma", "science", "scinder", "score",
15697 "scrutin", "sculpter", "séance", "sécable", "sécher", "secouer", "sécréter", "sédatif", "séduire", "seigneur",
15698 "séjour", "sélectif", "semaine", "sembler", "semence", "séminal", "sénateur", "sensible", "sentence", "séparer",
15699 "séquence", "serein", "sergent", "sérieux", "serrure", "sérum", "service", "sésame", "sévir", "sevrage",
15700 "sextuple", "sidéral", "siècle", "siéger", "siffler", "sigle", "signal", "silence", "silicium", "simple",
15701 "sincère", "sinistre", "siphon", "sirop", "sismique", "situer", "skier", "social", "socle", "sodium",
15702 "soigneux", "soldat", "soleil", "solitude", "soluble", "sombre", "sommeil", "somnoler", "sonde", "songeur",
15703 "sonnette", "sonore", "sorcier", "sortir", "sosie", "sottise", "soucieux", "soudure", "souffle", "soulever",
15704 "soupape", "source", "soutirer", "souvenir", "spacieux", "spatial", "spécial", "sphère", "spiral", "stable",
15705 "station", "sternum", "stimulus", "stipuler", "strict", "studieux", "stupeur", "styliste", "sublime", "substrat",
15706 "subtil", "subvenir", "succès", "sucre", "suffixe", "suggérer", "suiveur", "sulfate", "superbe", "supplier",
15707 "surface", "suricate", "surmener", "surprise", "sursaut", "survie", "suspect", "syllabe", "symbole", "symétrie",
15708 "synapse", "syntaxe", "système", "tabac", "tablier", "tactile", "tailler", "talent", "talisman", "talonner",
15709 "tambour", "tamiser", "tangible", "tapis", "taquiner", "tarder", "tarif", "tartine", "tasse", "tatami",
15710 "tatouage", "taupe", "taureau", "taxer", "témoin", "temporel", "tenaille", "tendre", "teneur", "tenir",
15711 "tension", "terminer", "terne", "terrible", "tétine", "texte", "thème", "théorie", "thérapie", "thorax",
15712 "tibia", "tiède", "timide", "tirelire", "tiroir", "tissu", "titane", "titre", "tituber", "toboggan",
15713 "tolérant", "tomate", "tonique", "tonneau", "toponyme", "torche", "tordre", "tornade", "torpille", "torrent",
15714 "torse", "tortue", "totem", "toucher", "tournage", "tousser", "toxine", "traction", "trafic", "tragique",
15715 "trahir", "train", "trancher", "travail", "trèfle", "tremper", "trésor", "treuil", "triage", "tribunal",
15716 "tricoter", "trilogie", "triomphe", "tripler", "triturer", "trivial", "trombone", "tronc", "tropical", "troupeau",
15717 "tuile", "tulipe", "tumulte", "tunnel", "turbine", "tuteur", "tutoyer", "tuyau", "tympan", "typhon",
15718 "typique", "tyran", "ubuesque", "ultime", "ultrason", "unanime", "unifier", "union", "unique", "unitaire",
15719 "univers", "uranium", "urbain", "urticant", "usage", "usine", "usuel", "usure", "utile", "utopie",
15720 "vacarme", "vaccin", "vagabond", "vague", "vaillant", "vaincre", "vaisseau", "valable", "valise", "vallon",
15721 "valve", "vampire", "vanille", "vapeur", "varier", "vaseux", "vassal", "vaste", "vecteur", "vedette",
15722 "végétal", "véhicule", "veinard", "véloce", "vendredi", "vénérer", "venger", "venimeux", "ventouse", "verdure",
15723 "vérin", "vernir", "verrou", "verser", "vertu", "veston", "vétéran", "vétuste", "vexant", "vexer",
15724 "viaduc", "viande", "victoire", "vidange", "vidéo", "vignette", "vigueur", "vilain", "village", "vinaigre",
15725 "violon", "vipère", "virement", "virtuose", "virus", "visage", "viseur", "vision", "visqueux", "visuel",
15726 "vital", "vitesse", "viticole", "vitrine", "vivace", "vivipare", "vocation", "voguer", "voile", "voisin",
15727 "voiture", "volaille", "volcan", "voltiger", "volume", "vorace", "vortex", "voter", "vouloir", "voyage",
15728 "voyelle", "wagon", "xénon", "yacht", "zèbre", "zénith", "zeste", "zoologie"]
15729 </script>
15730 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
15731 WORDLISTS["italian"] = [
15732 "abaco", "abbaglio", "abbinato", "abete", "abisso", "abolire", "abrasivo", "abrogato", "accadere", "accenno",
15733 "accusato", "acetone", "achille", "acido", "acqua", "acre", "acrilico", "acrobata", "acuto", "adagio",
15734 "addebito", "addome", "adeguato", "aderire", "adipe", "adottare", "adulare", "affabile", "affetto", "affisso",
15735 "affranto", "aforisma", "afoso", "africano", "agave", "agente", "agevole", "aggancio", "agire", "agitare",
15736 "agonismo", "agricolo", "agrumeto", "aguzzo", "alabarda", "alato", "albatro", "alberato", "albo", "albume",
15737 "alce", "alcolico", "alettone", "alfa", "algebra", "aliante", "alibi", "alimento", "allagato", "allegro",
15738 "allievo", "allodola", "allusivo", "almeno", "alogeno", "alpaca", "alpestre", "altalena", "alterno", "alticcio",
15739 "altrove", "alunno", "alveolo", "alzare", "amalgama", "amanita", "amarena", "ambito", "ambrato", "ameba",
15740 "america", "ametista", "amico", "ammasso", "ammenda", "ammirare", "ammonito", "amore", "ampio", "ampliare",
15741 "amuleto", "anacardo", "anagrafe", "analista", "anarchia", "anatra", "anca", "ancella", "ancora", "andare",
15742 "andrea", "anello", "angelo", "angolare", "angusto", "anima", "annegare", "annidato", "anno", "annuncio",
15743 "anonimo", "anticipo", "anzi", "apatico", "apertura", "apode", "apparire", "appetito", "appoggio", "approdo",
15744 "appunto", "aprile", "arabica", "arachide", "aragosta", "araldica", "arancio", "aratura", "arazzo", "arbitro",
15745 "archivio", "ardito", "arenile", "argento", "argine", "arguto", "aria", "armonia", "arnese", "arredato",
15746 "arringa", "arrosto", "arsenico", "arso", "artefice", "arzillo", "asciutto", "ascolto", "asepsi", "asettico",
15747 "asfalto", "asino", "asola", "aspirato", "aspro", "assaggio", "asse", "assoluto", "assurdo", "asta",
15748 "astenuto", "astice", "astratto", "atavico", "ateismo", "atomico", "atono", "attesa", "attivare", "attorno",
15749 "attrito", "attuale", "ausilio", "austria", "autista", "autonomo", "autunno", "avanzato", "avere", "avvenire",
15750 "avviso", "avvolgere", "azione", "azoto", "azzimo", "azzurro", "babele", "baccano", "bacino", "baco",
15751 "badessa", "badilata", "bagnato", "baita", "balcone", "baldo", "balena", "ballata", "balzano", "bambino",
15752 "bandire", "baraonda", "barbaro", "barca", "baritono", "barlume", "barocco", "basilico", "basso", "batosta",
15753 "battuto", "baule", "bava", "bavosa", "becco", "beffa", "belgio", "belva", "benda", "benevole",
15754 "benigno", "benzina", "bere", "berlina", "beta", "bibita", "bici", "bidone", "bifido", "biga",
15755 "bilancia", "bimbo", "binocolo", "biologo", "bipede", "bipolare", "birbante", "birra", "biscotto", "bisesto",
15756 "bisnonno", "bisonte", "bisturi", "bizzarro", "blando", "blatta", "bollito", "bonifico", "bordo", "bosco",
15757 "botanico", "bottino", "bozzolo", "braccio", "bradipo", "brama", "branca", "bravura", "bretella", "brevetto",
15758 "brezza", "briglia", "brillante", "brindare", "broccolo", "brodo", "bronzina", "brullo", "bruno", "bubbone",
15759 "buca", "budino", "buffone", "buio", "bulbo", "buono", "burlone", "burrasca", "bussola", "busta",
15760 "cadetto", "caduco", "calamaro", "calcolo", "calesse", "calibro", "calmo", "caloria", "cambusa", "camerata",
15761 "camicia", "cammino", "camola", "campale", "canapa", "candela", "cane", "canino", "canotto", "cantina",
15762 "capace", "capello", "capitolo", "capogiro", "cappero", "capra", "capsula", "carapace", "carcassa", "cardo",
15763 "carisma", "carovana", "carretto", "cartolina", "casaccio", "cascata", "caserma", "caso", "cassone", "castello",
15764 "casuale", "catasta", "catena", "catrame", "cauto", "cavillo", "cedibile", "cedrata", "cefalo", "celebre",
15765 "cellulare", "cena", "cenone", "centesimo", "ceramica", "cercare", "certo", "cerume", "cervello", "cesoia",
15766 "cespo", "ceto", "chela", "chiaro", "chicca", "chiedere", "chimera", "china", "chirurgo", "chitarra",
15767 "ciao", "ciclismo", "cifrare", "cigno", "cilindro", "ciottolo", "circa", "cirrosi", "citrico", "cittadino",
15768 "ciuffo", "civetta", "civile", "classico", "clinica", "cloro", "cocco", "codardo", "codice", "coerente",
15769 "cognome", "collare", "colmato", "colore", "colposo", "coltivato", "colza", "coma", "cometa", "commando",
15770 "comodo", "computer", "comune", "conciso", "condurre", "conferma", "congelare", "coniuge", "connesso", "conoscere",
15771 "consumo", "continuo", "convegno", "coperto", "copione", "coppia", "copricapo", "corazza", "cordata", "coricato",
15772 "cornice", "corolla", "corpo", "corredo", "corsia", "cortese", "cosmico", "costante", "cottura", "covato",
15773 "cratere", "cravatta", "creato", "credere", "cremoso", "crescita", "creta", "criceto", "crinale", "crisi",
15774 "critico", "croce", "cronaca", "crostata", "cruciale", "crusca", "cucire", "cuculo", "cugino", "cullato",
15775 "cupola", "curatore", "cursore", "curvo", "cuscino", "custode", "dado", "daino", "dalmata", "damerino",
15776 "daniela", "dannoso", "danzare", "datato", "davanti", "davvero", "debutto", "decennio", "deciso", "declino",
15777 "decollo", "decreto", "dedicato", "definito", "deforme", "degno", "delegare", "delfino", "delirio", "delta",
15778 "demenza", "denotato", "dentro", "deposito", "derapata", "derivare", "deroga", "descritto", "deserto", "desiderio",
15779 "desumere", "detersivo", "devoto", "diametro", "dicembre", "diedro", "difeso", "diffuso", "digerire", "digitale",
15780 "diluvio", "dinamico", "dinnanzi", "dipinto", "diploma", "dipolo", "diradare", "dire", "dirotto", "dirupo",
15781 "disagio", "discreto", "disfare", "disgelo", "disposto", "distanza", "disumano", "dito", "divano", "divelto",
15782 "dividere", "divorato", "doblone", "docente", "doganale", "dogma", "dolce", "domato", "domenica", "dominare",
15783 "dondolo", "dono", "dormire", "dote", "dottore", "dovuto", "dozzina", "drago", "druido", "dubbio",
15784 "dubitare", "ducale", "duna", "duomo", "duplice", "duraturo", "ebano", "eccesso", "ecco", "eclissi",
15785 "economia", "edera", "edicola", "edile", "editoria", "educare", "egemonia", "egli", "egoismo", "egregio",
15786 "elaborato", "elargire", "elegante", "elencato", "eletto", "elevare", "elfico", "elica", "elmo", "elsa",
15787 "eluso", "emanato", "emblema", "emesso", "emiro", "emotivo", "emozione", "empirico", "emulo", "endemico",
15788 "enduro", "energia", "enfasi", "enoteca", "entrare", "enzima", "epatite", "epilogo", "episodio", "epocale",
15789 "eppure", "equatore", "erario", "erba", "erboso", "erede", "eremita", "erigere", "ermetico", "eroe",
15790 "erosivo", "errante", "esagono", "esame", "esanime", "esaudire", "esca", "esempio", "esercito", "esibito",
15791 "esigente", "esistere", "esito", "esofago", "esortato", "esoso", "espanso", "espresso", "essenza", "esso",
15792 "esteso", "estimare", "estonia", "estroso", "esultare", "etilico", "etnico", "etrusco", "etto", "euclideo",
15793 "europa", "evaso", "evidenza", "evitato", "evoluto", "evviva", "fabbrica", "faccenda", "fachiro", "falco",
15794 "famiglia", "fanale", "fanfara", "fango", "fantasma", "fare", "farfalla", "farinoso", "farmaco", "fascia",
15795 "fastoso", "fasullo", "faticare", "fato", "favoloso", "febbre", "fecola", "fede", "fegato", "felpa",
15796 "feltro", "femmina", "fendere", "fenomeno", "fermento", "ferro", "fertile", "fessura", "festivo", "fetta",
15797 "feudo", "fiaba", "fiducia", "fifa", "figurato", "filo", "finanza", "finestra", "finire", "fiore",
15798 "fiscale", "fisico", "fiume", "flacone", "flamenco", "flebo", "flemma", "florido", "fluente", "fluoro",
15799 "fobico", "focaccia", "focoso", "foderato", "foglio", "folata", "folclore", "folgore", "fondente", "fonetico",
15800 "fonia", "fontana", "forbito", "forchetta", "foresta", "formica", "fornaio", "foro", "fortezza", "forzare",
15801 "fosfato", "fosso", "fracasso", "frana", "frassino", "fratello", "freccetta", "frenata", "fresco", "frigo",
15802 "frollino", "fronde", "frugale", "frutta", "fucilata", "fucsia", "fuggente", "fulmine", "fulvo", "fumante",
15803 "fumetto", "fumoso", "fune", "funzione", "fuoco", "furbo", "furgone", "furore", "fuso", "futile",
15804 "gabbiano", "gaffe", "galateo", "gallina", "galoppo", "gambero", "gamma", "garanzia", "garbo", "garofano",
15805 "garzone", "gasdotto", "gasolio", "gastrico", "gatto", "gaudio", "gazebo", "gazzella", "geco", "gelatina",
15806 "gelso", "gemello", "gemmato", "gene", "genitore", "gennaio", "genotipo", "gergo", "ghepardo", "ghiaccio",
15807 "ghisa", "giallo", "gilda", "ginepro", "giocare", "gioiello", "giorno", "giove", "girato", "girone",
15808 "gittata", "giudizio", "giurato", "giusto", "globulo", "glutine", "gnomo", "gobba", "golf", "gomito",
15809 "gommone", "gonfio", "gonna", "governo", "gracile", "grado", "grafico", "grammo", "grande", "grattare",
15810 "gravoso", "grazia", "greca", "gregge", "grifone", "grigio", "grinza", "grotta", "gruppo", "guadagno",
15811 "guaio", "guanto", "guardare", "gufo", "guidare", "ibernato", "icona", "identico", "idillio", "idolo",
15812 "idra", "idrico", "idrogeno", "igiene", "ignaro", "ignorato", "ilare", "illeso", "illogico", "illudere",
15813 "imballo", "imbevuto", "imbocco", "imbuto", "immane", "immerso", "immolato", "impacco", "impeto", "impiego",
15814 "importo", "impronta", "inalare", "inarcare", "inattivo", "incanto", "incendio", "inchino", "incisivo", "incluso",
15815 "incontro", "incrocio", "incubo", "indagine", "india", "indole", "inedito", "infatti", "infilare", "inflitto",
15816 "ingaggio", "ingegno", "inglese", "ingordo", "ingrosso", "innesco", "inodore", "inoltrare", "inondato", "insano",
15817 "insetto", "insieme", "insonnia", "insulina", "intasato", "intero", "intonaco", "intuito", "inumidire", "invalido",
15818 "invece", "invito", "iperbole", "ipnotico", "ipotesi", "ippica", "iride", "irlanda", "ironico", "irrigato",
15819 "irrorare", "isolato", "isotopo", "isterico", "istituto", "istrice", "italia", "iterare", "labbro", "labirinto",
15820 "lacca", "lacerato", "lacrima", "lacuna", "laddove", "lago", "lampo", "lancetta", "lanterna", "lardoso",
15821 "larga", "laringe", "lastra", "latenza", "latino", "lattuga", "lavagna", "lavoro", "legale", "leggero",
15822 "lembo", "lentezza", "lenza", "leone", "lepre", "lesivo", "lessato", "lesto", "letterale", "leva",
15823 "levigato", "libero", "lido", "lievito", "lilla", "limatura", "limitare", "limpido", "lineare", "lingua",
15824 "liquido", "lira", "lirica", "lisca", "lite", "litigio", "livrea", "locanda", "lode", "logica",
15825 "lombare", "londra", "longevo", "loquace", "lorenzo", "loto", "lotteria", "luce", "lucidato", "lumaca",
15826 "luminoso", "lungo", "lupo", "luppolo", "lusinga", "lusso", "lutto", "macabro", "macchina", "macero",
15827 "macinato", "madama", "magico", "maglia", "magnete", "magro", "maiolica", "malafede", "malgrado", "malinteso",
15828 "malsano", "malto", "malumore", "mana", "mancia", "mandorla", "mangiare", "manifesto", "mannaro", "manovra",
15829 "mansarda", "mantide", "manubrio", "mappa", "maratona", "marcire", "maretta", "marmo", "marsupio", "maschera",
15830 "massaia", "mastino", "materasso", "matricola", "mattone", "maturo", "mazurca", "meandro", "meccanico", "mecenate",
15831 "medesimo", "meditare", "mega", "melassa", "melis", "melodia", "meninge", "meno", "mensola", "mercurio",
15832 "merenda", "merlo", "meschino", "mese", "messere", "mestolo", "metallo", "metodo", "mettere", "miagolare",
15833 "mica", "micelio", "michele", "microbo", "midollo", "miele", "migliore", "milano", "milite", "mimosa",
15834 "minerale", "mini", "minore", "mirino", "mirtillo", "miscela", "missiva", "misto", "misurare", "mitezza",
15835 "mitigare", "mitra", "mittente", "mnemonico", "modello", "modifica", "modulo", "mogano", "mogio", "mole",
15836 "molosso", "monastero", "monco", "mondina", "monetario", "monile", "monotono", "monsone", "montato", "monviso",
15837 "mora", "mordere", "morsicato", "mostro", "motivato", "motosega", "motto", "movenza", "movimento", "mozzo",
15838 "mucca", "mucosa", "muffa", "mughetto", "mugnaio", "mulatto", "mulinello", "multiplo", "mummia", "munto",
15839 "muovere", "murale", "musa", "muscolo", "musica", "mutevole", "muto", "nababbo", "nafta", "nanometro",
15840 "narciso", "narice", "narrato", "nascere", "nastrare", "naturale", "nautica", "naviglio", "nebulosa", "necrosi",
15841 "negativo", "negozio", "nemmeno", "neofita", "neretto", "nervo", "nessuno", "nettuno", "neutrale", "neve",
15842 "nevrotico", "nicchia", "ninfa", "nitido", "nobile", "nocivo", "nodo", "nome", "nomina", "nordico",
15843 "normale", "norvegese", "nostrano", "notare", "notizia", "notturno", "novella", "nucleo", "nulla", "numero",
15844 "nuovo", "nutrire", "nuvola", "nuziale", "oasi", "obbedire", "obbligo", "obelisco", "oblio", "obolo",
15845 "obsoleto", "occasione", "occhio", "occidente", "occorrere", "occultare", "ocra", "oculato", "odierno", "odorare",
15846 "offerta", "offrire", "offuscato", "oggetto", "oggi", "ognuno", "olandese", "olfatto", "oliato", "oliva",
15847 "ologramma", "oltre", "omaggio", "ombelico", "ombra", "omega", "omissione", "ondoso", "onere", "onice",
15848 "onnivoro", "onorevole", "onta", "operato", "opinione", "opposto", "oracolo", "orafo", "ordine", "orecchino",
15849 "orefice", "orfano", "organico", "origine", "orizzonte", "orma", "ormeggio", "ornativo", "orologio", "orrendo",
15850 "orribile", "ortensia", "ortica", "orzata", "orzo", "osare", "oscurare", "osmosi", "ospedale", "ospite",
15851 "ossa", "ossidare", "ostacolo", "oste", "otite", "otre", "ottagono", "ottimo", "ottobre", "ovale",
15852 "ovest", "ovino", "oviparo", "ovocito", "ovunque", "ovviare", "ozio", "pacchetto", "pace", "pacifico",
15853 "padella", "padrone", "paese", "paga", "pagina", "palazzina", "palesare", "pallido", "palo", "palude",
15854 "pandoro", "pannello", "paolo", "paonazzo", "paprica", "parabola", "parcella", "parere", "pargolo", "pari",
15855 "parlato", "parola", "partire", "parvenza", "parziale", "passivo", "pasticca", "patacca", "patologia", "pattume",
15856 "pavone", "peccato", "pedalare", "pedonale", "peggio", "peloso", "penare", "pendice", "penisola", "pennuto",
15857 "penombra", "pensare", "pentola", "pepe", "pepita", "perbene", "percorso", "perdonato", "perforare", "pergamena",
15858 "periodo", "permesso", "perno", "perplesso", "persuaso", "pertugio", "pervaso", "pesatore", "pesista", "peso",
15859 "pestifero", "petalo", "pettine", "petulante", "pezzo", "piacere", "pianta", "piattino", "piccino", "picozza",
15860 "piega", "pietra", "piffero", "pigiama", "pigolio", "pigro", "pila", "pilifero", "pillola", "pilota",
15861 "pimpante", "pineta", "pinna", "pinolo", "pioggia", "piombo", "piramide", "piretico", "pirite", "pirolisi",
15862 "pitone", "pizzico", "placebo", "planare", "plasma", "platano", "plenario", "pochezza", "poderoso", "podismo",
15863 "poesia", "poggiare", "polenta", "poligono", "pollice", "polmonite", "polpetta", "polso", "poltrona", "polvere",
15864 "pomice", "pomodoro", "ponte", "popoloso", "porfido", "poroso", "porpora", "porre", "portata", "posa",
15865 "positivo", "possesso", "postulato", "potassio", "potere", "pranzo", "prassi", "pratica", "precluso", "predica",
15866 "prefisso", "pregiato", "prelievo", "premere", "prenotare", "preparato", "presenza", "pretesto", "prevalso", "prima",
15867 "principe", "privato", "problema", "procura", "produrre", "profumo", "progetto", "prolunga", "promessa", "pronome",
15868 "proposta", "proroga", "proteso", "prova", "prudente", "prugna", "prurito", "psiche", "pubblico", "pudica",
15869 "pugilato", "pugno", "pulce", "pulito", "pulsante", "puntare", "pupazzo", "pupilla", "puro", "quadro",
15870 "qualcosa", "quasi", "querela", "quota", "raccolto", "raddoppio", "radicale", "radunato", "raffica", "ragazzo",
15871 "ragione", "ragno", "ramarro", "ramingo", "ramo", "randagio", "rantolare", "rapato", "rapina", "rappreso",
15872 "rasatura", "raschiato", "rasente", "rassegna", "rastrello", "rata", "ravveduto", "reale", "recepire", "recinto",
15873 "recluta", "recondito", "recupero", "reddito", "redimere", "regalato", "registro", "regola", "regresso", "relazione",
15874 "remare", "remoto", "renna", "replica", "reprimere", "reputare", "resa", "residente", "responso", "restauro",
15875 "rete", "retina", "retorica", "rettifica", "revocato", "riassunto", "ribadire", "ribelle", "ribrezzo", "ricarica",
15876 "ricco", "ricevere", "riciclato", "ricordo", "ricreduto", "ridicolo", "ridurre", "rifasare", "riflesso", "riforma",
15877 "rifugio", "rigare", "rigettato", "righello", "rilassato", "rilevato", "rimanere", "rimbalzo", "rimedio", "rimorchio",
15878 "rinascita", "rincaro", "rinforzo", "rinnovo", "rinomato", "rinsavito", "rintocco", "rinuncia", "rinvenire", "riparato",
15879 "ripetuto", "ripieno", "riportare", "ripresa", "ripulire", "risata", "rischio", "riserva", "risibile", "riso",
15880 "rispetto", "ristoro", "risultato", "risvolto", "ritardo", "ritegno", "ritmico", "ritrovo", "riunione", "riva",
15881 "riverso", "rivincita", "rivolto", "rizoma", "roba", "robotico", "robusto", "roccia", "roco", "rodaggio",
15882 "rodere", "roditore", "rogito", "rollio", "romantico", "rompere", "ronzio", "rosolare", "rospo", "rotante",
15883 "rotondo", "rotula", "rovescio", "rubizzo", "rubrica", "ruga", "rullino", "rumine", "rumoroso", "ruolo",
15884 "rupe", "russare", "rustico", "sabato", "sabbiare", "sabotato", "sagoma", "salasso", "saldatura", "salgemma",
15885 "salivare", "salmone", "salone", "saltare", "saluto", "salvo", "sapere", "sapido", "saporito", "saraceno",
15886 "sarcasmo", "sarto", "sassoso", "satellite", "satira", "satollo", "saturno", "savana", "savio", "saziato",
15887 "sbadiglio", "sbalzo", "sbancato", "sbarra", "sbattere", "sbavare", "sbendare", "sbirciare", "sbloccato", "sbocciato",
15888 "sbrinare", "sbruffone", "sbuffare", "scabroso", "scadenza", "scala", "scambiare", "scandalo", "scapola", "scarso",
15889 "scatenare", "scavato", "scelto", "scenico", "scettro", "scheda", "schiena", "sciarpa", "scienza", "scindere",
15890 "scippo", "sciroppo", "scivolo", "sclerare", "scodella", "scolpito", "scomparto", "sconforto", "scoprire", "scorta",
15891 "scossone", "scozzese", "scriba", "scrollare", "scrutinio", "scuderia", "scultore", "scuola", "scuro", "scusare",
15892 "sdebitare", "sdoganare", "seccatura", "secondo", "sedano", "seggiola", "segnalato", "segregato", "seguito", "selciato",
15893 "selettivo", "sella", "selvaggio", "semaforo", "sembrare", "seme", "seminato", "sempre", "senso", "sentire",
15894 "sepolto", "sequenza", "serata", "serbato", "sereno", "serio", "serpente", "serraglio", "servire", "sestina",
15895 "setola", "settimana", "sfacelo", "sfaldare", "sfamato", "sfarzoso", "sfaticato", "sfera", "sfida", "sfilato",
15896 "sfinge", "sfocato", "sfoderare", "sfogo", "sfoltire", "sforzato", "sfratto", "sfruttato", "sfuggito", "sfumare",
15897 "sfuso", "sgabello", "sgarbato", "sgonfiare", "sgorbio", "sgrassato", "sguardo", "sibilo", "siccome", "sierra",
15898 "sigla", "signore", "silenzio", "sillaba", "simbolo", "simpatico", "simulato", "sinfonia", "singolo", "sinistro",
15899 "sino", "sintesi", "sinusoide", "sipario", "sisma", "sistole", "situato", "slitta", "slogatura", "sloveno",
15900 "smarrito", "smemorato", "smentito", "smeraldo", "smilzo", "smontare", "smottato", "smussato", "snellire", "snervato",
15901 "snodo", "sobbalzo", "sobrio", "soccorso", "sociale", "sodale", "soffitto", "sogno", "soldato", "solenne",
15902 "solido", "sollazzo", "solo", "solubile", "solvente", "somatico", "somma", "sonda", "sonetto", "sonnifero",
15903 "sopire", "soppeso", "sopra", "sorgere", "sorpasso", "sorriso", "sorso", "sorteggio", "sorvolato", "sospiro",
15904 "sosta", "sottile", "spada", "spalla", "spargere", "spatola", "spavento", "spazzola", "specie", "spedire",
15905 "spegnere", "spelatura", "speranza", "spessore", "spettrale", "spezzato", "spia", "spigoloso", "spillato", "spinoso",
15906 "spirale", "splendido", "sportivo", "sposo", "spranga", "sprecare", "spronato", "spruzzo", "spuntino", "squillo",
15907 "sradicare", "srotolato", "stabile", "stacco", "staffa", "stagnare", "stampato", "stantio", "starnuto", "stasera",
15908 "statuto", "stelo", "steppa", "sterzo", "stiletto", "stima", "stirpe", "stivale", "stizzoso", "stonato",
15909 "storico", "strappo", "stregato", "stridulo", "strozzare", "strutto", "stuccare", "stufo", "stupendo", "subentro",
15910 "succoso", "sudore", "suggerito", "sugo", "sultano", "suonare", "superbo", "supporto", "surgelato", "surrogato",
15911 "sussurro", "sutura", "svagare", "svedese", "sveglio", "svelare", "svenuto", "svezia", "sviluppo", "svista",
15912 "svizzera", "svolta", "svuotare", "tabacco", "tabulato", "tacciare", "taciturno", "tale", "talismano", "tampone",
15913 "tannino", "tara", "tardivo", "targato", "tariffa", "tarpare", "tartaruga", "tasto", "tattico", "taverna",
15914 "tavolata", "tazza", "teca", "tecnico", "telefono", "temerario", "tempo", "temuto", "tendone", "tenero",
15915 "tensione", "tentacolo", "teorema", "terme", "terrazzo", "terzetto", "tesi", "tesserato", "testato", "tetro",
15916 "tettoia", "tifare", "tigella", "timbro", "tinto", "tipico", "tipografo", "tiraggio", "tiro", "titanio",
15917 "titolo", "titubante", "tizio", "tizzone", "toccare", "tollerare", "tolto", "tombola", "tomo", "tonfo",
15918 "tonsilla", "topazio", "topologia", "toppa", "torba", "tornare", "torrone", "tortora", "toscano", "tossire",
15919 "tostatura", "totano", "trabocco", "trachea", "trafila", "tragedia", "tralcio", "tramonto", "transito", "trapano",
15920 "trarre", "trasloco", "trattato", "trave", "treccia", "tremolio", "trespolo", "tributo", "tricheco", "trifoglio",
15921 "trillo", "trincea", "trio", "tristezza", "triturato", "trivella", "tromba", "trono", "troppo", "trottola",
15922 "trovare", "truccato", "tubatura", "tuffato", "tulipano", "tumulto", "tunisia", "turbare", "turchino", "tuta",
15923 "tutela", "ubicato", "uccello", "uccisore", "udire", "uditivo", "uffa", "ufficio", "uguale", "ulisse",
15924 "ultimato", "umano", "umile", "umorismo", "uncinetto", "ungere", "ungherese", "unicorno", "unificato", "unisono",
15925 "unitario", "unte", "uovo", "upupa", "uragano", "urgenza", "urlo", "usanza", "usato", "uscito",
15926 "usignolo", "usuraio", "utensile", "utilizzo", "utopia", "vacante", "vaccinato", "vagabondo", "vagliato", "valanga",
15927 "valgo", "valico", "valletta", "valoroso", "valutare", "valvola", "vampata", "vangare", "vanitoso", "vano",
15928 "vantaggio", "vanvera", "vapore", "varano", "varcato", "variante", "vasca", "vedetta", "vedova", "veduto",
15929 "vegetale", "veicolo", "velcro", "velina", "velluto", "veloce", "venato", "vendemmia", "vento", "verace",
15930 "verbale", "vergogna", "verifica", "vero", "verruca", "verticale", "vescica", "vessillo", "vestale", "veterano",
15931 "vetrina", "vetusto", "viandante", "vibrante", "vicenda", "vichingo", "vicinanza", "vidimare", "vigilia", "vigneto",
15932 "vigore", "vile", "villano", "vimini", "vincitore", "viola", "vipera", "virgola", "virologo", "virulento",
15933 "viscoso", "visione", "vispo", "vissuto", "visura", "vita", "vitello", "vittima", "vivanda", "vivido",
15934 "viziare", "voce", "voga", "volatile", "volere", "volpe", "voragine", "vulcano", "zampogna", "zanna",
15935 "zappato", "zattera", "zavorra", "zefiro", "zelante", "zelo", "zenzero", "zerbino", "zibetto", "zinco",
15936 "zircone", "zitto", "zolla", "zotico", "zucchero", "zufolo", "zulu", "zuppa"]
15937 </script>
15938 <script>/*
15939 * Copyright (c) 2013 Pavol Rusnak
15940 *
15941 * Permission is hereby granted, free of charge, to any person obtaining a copy of
15942 * this software and associated documentation files (the "Software"), to deal in
15943 * the Software without restriction, including without limitation the rights to
15944 * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
15945 * of the Software, and to permit persons to whom the Software is furnished to do
15946 * so, subject to the following conditions:
15947 *
15948 * The above copyright notice and this permission notice shall be included in all
15949 * copies or substantial portions of the Software.
15950 *
15951 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15952 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15953 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
15954 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
15955 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
15956 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
15957 */
15958
15959 /*
15960 * Javascript port from python by Ian Coleman
15961 *
15962 * Requires code from sjcl
15963 * https://github.com/bitwiseshiftleft/sjcl
15964 */
15965
15966 var Mnemonic = function(language) {
15967
15968 var PBKDF2_ROUNDS = 2048;
15969 var RADIX = 2048;
15970
15971 var self = this;
15972 var wordlist = [];
15973
15974 var hmacSHA512 = function(key) {
15975 var hasher = new sjcl.misc.hmac(key, sjcl.hash.sha512);
15976 this.encrypt = function() {
15977 return hasher.encrypt.apply(hasher, arguments);
15978 };
15979 };
15980
15981 function init() {
15982 wordlist = WORDLISTS[language];
15983 if (wordlist.length != RADIX) {
15984 err = 'Wordlist should contain ' + RADIX + ' words, but it contains ' + wordlist.length + ' words.';
15985 throw err;
15986 }
15987 }
15988
15989 self.generate = function(strength) {
15990 strength = strength || 128;
15991 var r = strength % 32;
15992 if (r > 0) {
15993 throw 'Strength should be divisible by 32, but it is not (' + r + ').';
15994 }
15995 var hasStrongCrypto = 'crypto' in window && window['crypto'] !== null;
15996 if (!hasStrongCrypto) {
15997 throw 'Mnemonic should be generated with strong randomness, but crypto.getRandomValues is unavailable';
15998 }
15999 var buffer = new Uint8Array(strength / 8);
16000 var data = crypto.getRandomValues(buffer);
16001 return self.toMnemonic(data);
16002 }
16003
16004 self.toMnemonic = function(byteArray) {
16005 if (byteArray.length % 4 > 0) {
16006 throw 'Data length in bits should be divisible by 32, but it is not (' + byteArray.length + ' bytes = ' + byteArray.length*8 + ' bits).'
16007 }
16008
16009 //h = hashlib.sha256(data).hexdigest()
16010 var data = byteArrayToWordArray(byteArray);
16011 var hash = sjcl.hash.sha256.hash(data);
16012 var h = sjcl.codec.hex.fromBits(hash);
16013
16014 // b is a binary string, eg '00111010101100...'
16015 //b = bin(int(binascii.hexlify(data), 16))[2:].zfill(len(data) * 8) + \
16016 // bin(int(h, 16))[2:].zfill(256)[:len(data) * 8 / 32]
16017 //
16018 // a = bin(int(binascii.hexlify(data), 16))[2:].zfill(len(data) * 8)
16019 // c = bin(int(h, 16))[2:].zfill(256)
16020 // d = c[:len(data) * 8 / 32]
16021 var a = byteArrayToBinaryString(byteArray);
16022 var c = zfill(hexStringToBinaryString(h), 256);
16023 var d = c.substring(0, byteArray.length * 8 / 32);
16024 // b = line1 + line2
16025 var b = a + d;
16026
16027 var result = [];
16028 var blen = b.length / 11;
16029 for (var i=0; i<blen; i++) {
16030 var idx = parseInt(b.substring(i * 11, (i + 1) * 11), 2);
16031 result.push(wordlist[idx]);
16032 }
16033 return self.joinWords(result);
16034 }
16035
16036 self.check = function(mnemonic) {
16037 var mnemonic = self.splitWords(mnemonic);
16038 if (mnemonic.length % 3 > 0) {
16039 return false
16040 }
16041 // idx = map(lambda x: bin(self.wordlist.index(x))[2:].zfill(11), mnemonic)
16042 var idx = [];
16043 for (var i=0; i<mnemonic.length; i++) {
16044 var word = mnemonic[i];
16045 var wordIndex = wordlist.indexOf(word);
16046 if (wordIndex == -1) {
16047 return false;
16048 }
16049 var binaryIndex = zfill(wordIndex.toString(2), 11);
16050 idx.push(binaryIndex);
16051 }
16052 var b = idx.join('');
16053 var l = b.length;
16054 //d = b[:l / 33 * 32]
16055 //h = b[-l / 33:]
16056 var d = b.substring(0, l / 33 * 32);
16057 var h = b.substring(l - l / 33, l);
16058 //nd = binascii.unhexlify(hex(int(d, 2))[2:].rstrip('L').zfill(l / 33 * 8))
16059 var nd = binaryStringToWordArray(d);
16060 //nh = bin(int(hashlib.sha256(nd).hexdigest(), 16))[2:].zfill(256)[:l / 33]
16061 var ndHash = sjcl.hash.sha256.hash(nd);
16062 var ndHex = sjcl.codec.hex.fromBits(ndHash);
16063 var ndBstr = zfill(hexStringToBinaryString(ndHex), 256);
16064 var nh = ndBstr.substring(0,l/33);
16065 return h == nh;
16066 }
16067
16068 self.toSeed = function(mnemonic, passphrase) {
16069 passphrase = passphrase || '';
16070 mnemonic = self.joinWords(self.splitWords(self.normalizeString(mnemonic))); // removes blanks
16071 passphrase = self.normalizeString(passphrase)
16072 passphrase = "mnemonic" + passphrase;
16073 var mnemonicBits = sjcl.codec.utf8String.toBits(mnemonic);
16074 var passphraseBits = sjcl.codec.utf8String.toBits(passphrase);
16075 var result = sjcl.misc.pbkdf2(mnemonicBits, passphraseBits, PBKDF2_ROUNDS, 512, hmacSHA512);
16076 var hashHex = sjcl.codec.hex.fromBits(result);
16077 return hashHex;
16078 }
16079
16080 self.splitWords = function(mnemonic) {
16081 return mnemonic.split(/\s/g).filter(function(x) { return x.length; });
16082 }
16083
16084 self.joinWords = function(words) {
16085 // Set space correctly depending on the language
16086 // see https://github.com/bitcoin/bips/blob/master/bip-0039/bip-0039-wordlists.md#japanese
16087 var space = " ";
16088 if (language == "japanese") {
16089 space = "\u3000"; // ideographic space
16090 }
16091 return words.join(space);
16092 }
16093
16094 self.normalizeString = function(str) {
16095 if (typeof str.normalize == "function") {
16096 return str.normalize("NFKD");
16097 }
16098 else {
16099 // TODO decide how to handle this in the future.
16100 // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize
16101 return str;
16102 }
16103 }
16104
16105 function byteArrayToWordArray(data) {
16106 var a = [];
16107 for (var i=0; i<data.length/4; i++) {
16108 v = 0;
16109 v += data[i*4 + 0] << 8 * 3;
16110 v += data[i*4 + 1] << 8 * 2;
16111 v += data[i*4 + 2] << 8 * 1;
16112 v += data[i*4 + 3] << 8 * 0;
16113 a.push(v);
16114 }
16115 return a;
16116 }
16117
16118 function byteArrayToBinaryString(data) {
16119 var bin = "";
16120 for (var i=0; i<data.length; i++) {
16121 bin += zfill(data[i].toString(2), 8);
16122 }
16123 return bin;
16124 }
16125
16126 function hexStringToBinaryString(hexString) {
16127 binaryString = "";
16128 for (var i=0; i<hexString.length; i++) {
16129 binaryString += zfill(parseInt(hexString[i], 16).toString(2),4);
16130 }
16131 return binaryString;
16132 }
16133
16134 function binaryStringToWordArray(binary) {
16135 var aLen = binary.length / 32;
16136 var a = [];
16137 for (var i=0; i<aLen; i++) {
16138 var valueStr = binary.substring(0,32);
16139 var value = parseInt(valueStr, 2);
16140 a.push(value);
16141 binary = binary.slice(32);
16142 }
16143 return a;
16144 }
16145
16146 // Pad a numeric string on the left with zero digits until the given width
16147 // is reached.
16148 // Note this differs to the python implementation because it does not
16149 // handle numbers starting with a sign.
16150 function zfill(source, length) {
16151 source = source.toString();
16152 while (source.length < length) {
16153 source = '0' + source;
16154 }
16155 return source;
16156 }
16157
16158 init();
16159
16160 }
16161 </script>
16162 <script>(function() {
16163
16164 // mnemonics is populated as required by getLanguage
16165 var mnemonics = { "english": new Mnemonic("english") };
16166 var mnemonic = mnemonics["english"];
16167 var seed = null
16168 var bip32RootKey = null;
16169 var bip32ExtendedKey = null;
16170 var network = bitcoin.networks.bitcoin;
16171 var addressRowTemplate = $("#address-row-template");
16172
16173 var showIndex = true;
16174 var showAddress = true;
16175 var showPrivKey = true;
16176
16177 var phraseChangeTimeoutEvent = null;
16178 var rootKeyChangedTimeoutEvent = null;
16179
16180 var DOM = {};
16181 DOM.network = $(".network");
16182 DOM.phraseNetwork = $("#network-phrase");
16183 DOM.phrase = $(".phrase");
16184 DOM.passphrase = $(".passphrase");
16185 DOM.generate = $(".generate");
16186 DOM.seed = $(".seed");
16187 DOM.rootKey = $(".root-key");
16188 DOM.extendedPrivKey = $(".extended-priv-key");
16189 DOM.extendedPubKey = $(".extended-pub-key");
16190 DOM.bip32tab = $("#bip32-tab");
16191 DOM.bip44tab = $("#bip44-tab");
16192 DOM.bip32panel = $("#bip32");
16193 DOM.bip44panel = $("#bip44");
16194 DOM.bip32path = $("#bip32-path");
16195 DOM.bip44path = $("#bip44-path");
16196 DOM.bip44purpose = $("#bip44 .purpose");
16197 DOM.bip44coin = $("#bip44 .coin");
16198 DOM.bip44account = $("#bip44 .account");
16199 DOM.bip44change = $("#bip44 .change");
16200 DOM.strength = $(".strength");
16201 DOM.hardenedAddresses = $(".hardened-addresses");
16202 DOM.addresses = $(".addresses");
16203 DOM.rowsToAdd = $(".rows-to-add");
16204 DOM.more = $(".more");
16205 DOM.feedback = $(".feedback");
16206 DOM.tab = $(".derivation-type a");
16207 DOM.indexToggle = $(".index-toggle");
16208 DOM.addressToggle = $(".address-toggle");
16209 DOM.privateKeyToggle = $(".private-key-toggle");
16210 DOM.languages = $(".languages a");
16211
16212 function init() {
16213 // Events
16214 DOM.network.on("change", networkChanged);
16215 DOM.phrase.on("input", delayedPhraseChanged);
16216 DOM.passphrase.on("input", delayedPhraseChanged);
16217 DOM.generate.on("click", generateClicked);
16218 DOM.more.on("click", showMore);
16219 DOM.rootKey.on("input", delayedRootKeyChanged);
16220 DOM.bip32path.on("input", calcForDerivationPath);
16221 DOM.bip44purpose.on("input", calcForDerivationPath);
16222 DOM.bip44coin.on("input", calcForDerivationPath);
16223 DOM.bip44account.on("input", calcForDerivationPath);
16224 DOM.bip44change.on("input", calcForDerivationPath);
16225 DOM.tab.on("shown.bs.tab", calcForDerivationPath);
16226 DOM.hardenedAddresses.on("change", calcForDerivationPath);
16227 DOM.indexToggle.on("click", toggleIndexes);
16228 DOM.addressToggle.on("click", toggleAddresses);
16229 DOM.privateKeyToggle.on("click", togglePrivateKeys);
16230 DOM.languages.on("click", languageChanged);
16231 disableForms();
16232 hidePending();
16233 hideValidationError();
16234 populateNetworkSelect();
16235 }
16236
16237 // Event handlers
16238
16239 function networkChanged(e) {
16240 var networkIndex = e.target.value;
16241 networks[networkIndex].onSelect();
16242 if (seed != null) {
16243 phraseChanged();
16244 }
16245 else {
16246 rootKeyChanged();
16247 }
16248 }
16249
16250 function delayedPhraseChanged() {
16251 hideValidationError();
16252 showPending();
16253 if (phraseChangeTimeoutEvent != null) {
16254 clearTimeout(phraseChangeTimeoutEvent);
16255 }
16256 phraseChangeTimeoutEvent = setTimeout(phraseChanged, 400);
16257 }
16258
16259 function phraseChanged() {
16260 showPending();
16261 hideValidationError();
16262 setMnemonicLanguage();
16263 // Get the mnemonic phrase
16264 var phrase = DOM.phrase.val();
16265 var errorText = findPhraseErrors(phrase);
16266 if (errorText) {
16267 showValidationError(errorText);
16268 return;
16269 }
16270 // Calculate and display
16271 var passphrase = DOM.passphrase.val();
16272 calcBip32RootKeyFromSeed(phrase, passphrase);
16273 calcForDerivationPath();
16274 hidePending();
16275 }
16276
16277 function delayedRootKeyChanged() {
16278 // Warn if there is an existing mnemonic or passphrase.
16279 if (DOM.phrase.val().length > 0 || DOM.passphrase.val().length > 0) {
16280 if (!confirm("This will clear existing mnemonic and passphrase")) {
16281 DOM.rootKey.val(bip32RootKey);
16282 return
16283 }
16284 }
16285 hideValidationError();
16286 showPending();
16287 // Clear existing mnemonic and passphrase
16288 DOM.phrase.val("");
16289 DOM.passphrase.val("");
16290 seed = null;
16291 if (rootKeyChangedTimeoutEvent != null) {
16292 clearTimeout(rootKeyChangedTimeoutEvent);
16293 }
16294 rootKeyChangedTimeoutEvent = setTimeout(rootKeyChanged, 400);
16295 }
16296
16297 function rootKeyChanged() {
16298 showPending();
16299 hideValidationError();
16300 // Validate the root key TODO
16301 var rootKeyBase58 = DOM.rootKey.val();
16302 var errorText = validateRootKey(rootKeyBase58);
16303 if (errorText) {
16304 showValidationError(errorText);
16305 return;
16306 }
16307 // Calculate and display
16308 calcBip32RootKeyFromBase58(rootKeyBase58);
16309 calcForDerivationPath();
16310 hidePending();
16311 }
16312
16313 function calcForDerivationPath() {
16314 showPending();
16315 hideValidationError();
16316 // Get the derivation path
16317 var derivationPath = getDerivationPath();
16318 var errorText = findDerivationPathErrors(derivationPath);
16319 if (errorText) {
16320 showValidationError(errorText);
16321 return;
16322 }
16323 calcBip32ExtendedKey(derivationPath);
16324 displayBip32Info();
16325 hidePending();
16326 }
16327
16328 function generateClicked() {
16329 clearDisplay();
16330 showPending();
16331 setTimeout(function() {
16332 setMnemonicLanguage();
16333 var phrase = generateRandomPhrase();
16334 if (!phrase) {
16335 return;
16336 }
16337 phraseChanged();
16338 }, 50);
16339 }
16340
16341 function languageChanged() {
16342 setTimeout(function() {
16343 setMnemonicLanguage();
16344 if (DOM.phrase.val().length > 0) {
16345 var newPhrase = convertPhraseToNewLanguage();
16346 DOM.phrase.val(newPhrase);
16347 phraseChanged();
16348 }
16349 else {
16350 DOM.generate.trigger("click");
16351 }
16352 }, 50);
16353 }
16354
16355 function toggleIndexes() {
16356 showIndex = !showIndex;
16357 $("td.index span").toggleClass("invisible");
16358 }
16359
16360 function toggleAddresses() {
16361 showAddress = !showAddress;
16362 $("td.address span").toggleClass("invisible");
16363 }
16364
16365 function togglePrivateKeys() {
16366 showPrivKey = !showPrivKey;
16367 $("td.privkey span").toggleClass("invisible");
16368 }
16369
16370 // Private methods
16371
16372 function generateRandomPhrase() {
16373 if (!hasStrongRandom()) {
16374 var errorText = "This browser does not support strong randomness";
16375 showValidationError(errorText);
16376 return;
16377 }
16378 var numWords = parseInt(DOM.strength.val());
16379 var strength = numWords / 3 * 32;
16380 var words = mnemonic.generate(strength);
16381 DOM.phrase.val(words);
16382 return words;
16383 }
16384
16385 function calcBip32RootKeyFromSeed(phrase, passphrase) {
16386 seed = mnemonic.toSeed(phrase, passphrase);
16387 bip32RootKey = bitcoin.HDNode.fromSeedHex(seed, network);
16388 }
16389
16390 function calcBip32RootKeyFromBase58(rootKeyBase58) {
16391 bip32RootKey = bitcoin.HDNode.fromBase58(rootKeyBase58, network);
16392 }
16393
16394 function calcBip32ExtendedKey(path) {
16395 bip32ExtendedKey = bip32RootKey;
16396 // Derive the key from the path
16397 var pathBits = path.split("/");
16398 for (var i=0; i<pathBits.length; i++) {
16399 var bit = pathBits[i];
16400 var index = parseInt(bit);
16401 if (isNaN(index)) {
16402 continue;
16403 }
16404 var hardened = bit[bit.length-1] == "'";
16405 if (hardened) {
16406 bip32ExtendedKey = bip32ExtendedKey.deriveHardened(index);
16407 }
16408 else {
16409 bip32ExtendedKey = bip32ExtendedKey.derive(index);
16410 }
16411 }
16412 }
16413
16414 function showValidationError(errorText) {
16415 DOM.feedback
16416 .text(errorText)
16417 .show();
16418 }
16419
16420 function hideValidationError() {
16421 DOM.feedback
16422 .text("")
16423 .hide();
16424 }
16425
16426 function findPhraseErrors(phrase) {
16427 // TODO make this right
16428 // Preprocess the words
16429 phrase = mnemonic.normalizeString(phrase);
16430 var words = phraseToWordArray(phrase);
16431 // Check each word
16432 for (var i=0; i<words.length; i++) {
16433 var word = words[i];
16434 var language = getLanguage();
16435 if (WORDLISTS[language].indexOf(word) == -1) {
16436 console.log("Finding closest match to " + word);
16437 var nearestWord = findNearestWord(word);
16438 return word + " not in wordlist, did you mean " + nearestWord + "?";
16439 }
16440 }
16441 // Check the words are valid
16442 var properPhrase = wordArrayToPhrase(words);
16443 var isValid = mnemonic.check(properPhrase);
16444 if (!isValid) {
16445 return "Invalid mnemonic";
16446 }
16447 return false;
16448 }
16449
16450 function validateRootKey(rootKeyBase58) {
16451 try {
16452 bitcoin.HDNode.fromBase58(rootKeyBase58);
16453 }
16454 catch (e) {
16455 return "Invalid root key";
16456 }
16457 return "";
16458 }
16459
16460 function getDerivationPath() {
16461 if (DOM.bip44tab.hasClass("active")) {
16462 var purpose = parseIntNoNaN(DOM.bip44purpose.val(), 44);
16463 var coin = parseIntNoNaN(DOM.bip44coin.val(), 0);
16464 var account = parseIntNoNaN(DOM.bip44account.val(), 0);
16465 var change = parseIntNoNaN(DOM.bip44change.val(), 0);
16466 var path = "m/";
16467 path += purpose + "'/";
16468 path += coin + "'/";
16469 path += account + "'/";
16470 path += change;
16471 DOM.bip44path.val(path);
16472 var derivationPath = DOM.bip44path.val();
16473 console.log("Using derivation path from BIP44 tab: " + derivationPath);
16474 return derivationPath;
16475 }
16476 else if (DOM.bip32tab.hasClass("active")) {
16477 var derivationPath = DOM.bip32path.val();
16478 console.log("Using derivation path from BIP32 tab: " + derivationPath);
16479 return derivationPath;
16480 }
16481 else {
16482 console.log("Unknown derivation path");
16483 }
16484 }
16485
16486 function findDerivationPathErrors(path) {
16487 // TODO is not perfect but is better than nothing
16488 // Inspired by
16489 // https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#test-vectors
16490 // and
16491 // https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#extended-keys
16492 var maxDepth = 255; // TODO verify this!!
16493 var maxIndexValue = Math.pow(2, 31); // TODO verify this!!
16494 if (path[0] != "m") {
16495 return "First character must be 'm'";
16496 }
16497 if (path.length > 1) {
16498 if (path[1] != "/") {
16499 return "Separator must be '/'";
16500 }
16501 var indexes = path.split("/");
16502 if (indexes.length > maxDepth) {
16503 return "Derivation depth is " + indexes.length + ", must be less than " + maxDepth;
16504 }
16505 for (var depth = 1; depth<indexes.length; depth++) {
16506 var index = indexes[depth];
16507 var invalidChars = index.replace(/^[0-9]+'?$/g, "")
16508 if (invalidChars.length > 0) {
16509 return "Invalid characters " + invalidChars + " found at depth " + depth;
16510 }
16511 var indexValue = parseInt(index.replace("'", ""));
16512 if (isNaN(depth)) {
16513 return "Invalid number at depth " + depth;
16514 }
16515 if (indexValue > maxIndexValue) {
16516 return "Value of " + indexValue + " at depth " + depth + " must be less than " + maxIndexValue;
16517 }
16518 }
16519 }
16520 return false;
16521 }
16522
16523 function displayBip32Info() {
16524 // Display the key
16525 DOM.seed.val(seed);
16526 var rootKey = bip32RootKey.toBase58();
16527 DOM.rootKey.val(rootKey);
16528 var extendedPrivKey = bip32ExtendedKey.toBase58();
16529 DOM.extendedPrivKey.val(extendedPrivKey);
16530 var extendedPubKey = bip32ExtendedKey.toBase58(false);
16531 DOM.extendedPubKey.val(extendedPubKey);
16532 // Display the addresses and privkeys
16533 clearAddressesList();
16534 displayAddresses(0, 20);
16535 }
16536
16537 function displayAddresses(start, total) {
16538 for (var i=0; i<total; i++) {
16539 var index = i + start;
16540 new TableRow(index);
16541 }
16542 }
16543
16544 function TableRow(index) {
16545
16546 var useHardenedAddresses = DOM.hardenedAddresses.prop("checked");
16547
16548 function init() {
16549 calculateValues();
16550 }
16551
16552 function calculateValues() {
16553 setTimeout(function() {
16554 var key = "";
16555 if (useHardenedAddresses) {
16556 key = bip32ExtendedKey.deriveHardened(index);
16557 }
16558 else {
16559 key = bip32ExtendedKey.derive(index);
16560 }
16561 var address = key.getAddress().toString();
16562 var privkey = key.privKey.toWIF(network);
16563 var indexText = getDerivationPath() + "/" + index;
16564 if (useHardenedAddresses) {
16565 indexText = indexText + "'";
16566 }
16567 addAddressToList(indexText, address, privkey);
16568 }, 50)
16569 }
16570
16571 init();
16572
16573 }
16574
16575 function showMore() {
16576 var start = DOM.addresses.children().length;
16577 var rowsToAdd = parseInt(DOM.rowsToAdd.val());
16578 if (isNaN(rowsToAdd)) {
16579 rowsToAdd = 20;
16580 DOM.rowsToAdd.val("20");
16581 }
16582 if (rowsToAdd > 200) {
16583 var msg = "Generating " + rowsToAdd + " rows could take a while. ";
16584 msg += "Do you want to continue?";
16585 if (!confirm(msg)) {
16586 return;
16587 }
16588 }
16589 displayAddresses(start, rowsToAdd);
16590 }
16591
16592 function clearDisplay() {
16593 clearAddressesList();
16594 clearKey();
16595 hideValidationError();
16596 }
16597
16598 function clearAddressesList() {
16599 DOM.addresses.empty();
16600 }
16601
16602 function clearKey() {
16603 DOM.rootKey.val("");
16604 DOM.extendedPrivKey.val("");
16605 DOM.extendedPubKey.val("");
16606 }
16607
16608 function addAddressToList(indexText, address, privkey) {
16609 var row = $(addressRowTemplate.html());
16610 // Elements
16611 var indexCell = row.find(".index span");
16612 var addressCell = row.find(".address span");
16613 var privkeyCell = row.find(".privkey span");
16614 // Content
16615 indexCell.text(indexText);
16616 addressCell.text(address);
16617 privkeyCell.text(privkey);
16618 // Visibility
16619 if (!showIndex) {
16620 indexCell.addClass("invisible");
16621 }
16622 if (!showAddress) {
16623 addressCell.addClass("invisible");
16624 }
16625 if (!showPrivKey) {
16626 privkeyCell.addClass("invisible");
16627 }
16628 DOM.addresses.append(row);
16629 }
16630
16631 function hasStrongRandom() {
16632 return 'crypto' in window && window['crypto'] !== null;
16633 }
16634
16635 function disableForms() {
16636 $("form").on("submit", function(e) {
16637 e.preventDefault();
16638 });
16639 }
16640
16641 function parseIntNoNaN(val, defaultVal) {
16642 var v = parseInt(val);
16643 if (isNaN(v)) {
16644 return defaultVal;
16645 }
16646 return v;
16647 }
16648
16649 function showPending() {
16650 DOM.feedback
16651 .text("Calculating...")
16652 .show();
16653 }
16654
16655 function findNearestWord(word) {
16656 var language = getLanguage();
16657 var words = WORDLISTS[language];
16658 var minDistance = 99;
16659 var closestWord = words[0];
16660 for (var i=0; i<words.length; i++) {
16661 var comparedTo = words[i];
16662 var distance = Levenshtein.get(word, comparedTo);
16663 if (distance < minDistance) {
16664 closestWord = comparedTo;
16665 minDistance = distance;
16666 }
16667 }
16668 return closestWord;
16669 }
16670
16671 function hidePending() {
16672 DOM.feedback
16673 .text("")
16674 .hide();
16675 }
16676
16677 function populateNetworkSelect() {
16678 for (var i=0; i<networks.length; i++) {
16679 var network = networks[i];
16680 var option = $("<option>");
16681 option.attr("value", i);
16682 option.text(network.name);
16683 DOM.phraseNetwork.append(option);
16684 }
16685 }
16686
16687 function getLanguage() {
16688 var defaultLanguage = "english";
16689 // Try to get from existing phrase
16690 var language = getLanguageFromPhrase();
16691 // Try to get from url if not from phrase
16692 if (language.length == 0) {
16693 language = getLanguageFromUrl();
16694 }
16695 // Default to English if no other option
16696 if (language.length == 0) {
16697 language = defaultLanguage;
16698 }
16699 return language;
16700 }
16701
16702 function getLanguageFromPhrase(phrase) {
16703 // Check if how many words from existing phrase match a language.
16704 var language = "";
16705 if (!phrase) {
16706 phrase = DOM.phrase.val();
16707 }
16708 if (phrase.length > 0) {
16709 var words = phraseToWordArray(phrase);
16710 var languageMatches = {};
16711 for (l in WORDLISTS) {
16712 // Track how many words match in this language
16713 languageMatches[l] = 0;
16714 for (var i=0; i<words.length; i++) {
16715 var wordInLanguage = WORDLISTS[l].indexOf(words[i]) > -1;
16716 if (wordInLanguage) {
16717 languageMatches[l]++;
16718 }
16719 }
16720 // Find languages with most word matches.
16721 // This is made difficult due to commonalities between Chinese
16722 // simplified vs traditional.
16723 var mostMatches = 0;
16724 var mostMatchedLanguages = [];
16725 for (var l in languageMatches) {
16726 var numMatches = languageMatches[l];
16727 if (numMatches > mostMatches) {
16728 mostMatches = numMatches;
16729 mostMatchedLanguages = [l];
16730 }
16731 else if (numMatches == mostMatches) {
16732 mostMatchedLanguages.push(l);
16733 }
16734 }
16735 }
16736 if (mostMatchedLanguages.length > 0) {
16737 // Use first language and warn if multiple detected
16738 language = mostMatchedLanguages[0];
16739 if (mostMatchedLanguages.length > 1) {
16740 console.warn("Multiple possible languages");
16741 console.warn(mostMatchedLanguages);
16742 }
16743 }
16744 }
16745 return language;
16746 }
16747
16748 function getLanguageFromUrl() {
16749 return window.location.hash.substring(1);
16750 }
16751
16752 function setMnemonicLanguage() {
16753 var language = getLanguage();
16754 // Load the bip39 mnemonic generator for this language if required
16755 if (!(language in mnemonics)) {
16756 mnemonics[language] = new Mnemonic(language);
16757 }
16758 mnemonic = mnemonics[language];
16759 }
16760
16761 function convertPhraseToNewLanguage() {
16762 var oldLanguage = getLanguageFromPhrase();
16763 var newLanguage = getLanguageFromUrl();
16764 var oldPhrase = DOM.phrase.val();
16765 var oldWords = phraseToWordArray(oldPhrase);
16766 var newWords = [];
16767 for (var i=0; i<oldWords.length; i++) {
16768 var oldWord = oldWords[i];
16769 var index = WORDLISTS[oldLanguage].indexOf(oldWord);
16770 var newWord = WORDLISTS[newLanguage][index];
16771 newWords.push(newWord);
16772 }
16773 newPhrase = wordArrayToPhrase(newWords);
16774 return newPhrase;
16775 }
16776
16777 // TODO look at jsbip39 - mnemonic.splitWords
16778 function phraseToWordArray(phrase) {
16779 var words = phrase.split(/\s/g);
16780 var noBlanks = [];
16781 for (var i=0; i<words.length; i++) {
16782 var word = words[i];
16783 if (word.length > 0) {
16784 noBlanks.push(word);
16785 }
16786 }
16787 return noBlanks;
16788 }
16789
16790 // TODO look at jsbip39 - mnemonic.joinWords
16791 function wordArrayToPhrase(words) {
16792 var phrase = words.join(" ");
16793 var language = getLanguageFromPhrase(phrase);
16794 if (language == "japanese") {
16795 phrase = words.join("\u3000");
16796 }
16797 return phrase;
16798 }
16799
16800 var networks = [
16801 {
16802 name: "Bitcoin",
16803 onSelect: function() {
16804 network = bitcoin.networks.bitcoin;
16805 DOM.bip44coin.val(0);
16806 },
16807 },
16808 {
16809 name: "Bitcoin Testnet",
16810 onSelect: function() {
16811 network = bitcoin.networks.testnet;
16812 DOM.bip44coin.val(1);
16813 },
16814 },
16815 {
16816 name: "Litecoin",
16817 onSelect: function() {
16818 network = bitcoin.networks.litecoin;
16819 DOM.bip44coin.val(2);
16820 },
16821 },
16822 {
16823 name: "Dogecoin",
16824 onSelect: function() {
16825 network = bitcoin.networks.dogecoin;
16826 DOM.bip44coin.val(3);
16827 },
16828 },
16829 {
16830 name: "ShadowCash",
16831 onSelect: function() {
16832 network = bitcoin.networks.shadow;
16833 DOM.bip44coin.val(35);
16834 },
16835 },
16836 {
16837 name: "ShadowCash Testnet",
16838 onSelect: function() {
16839 network = bitcoin.networks.shadowtn;
16840 DOM.bip44coin.val(1);
16841 },
16842 },
16843 {
16844 name: "Viacoin",
16845 onSelect: function() {
16846 network = bitcoin.networks.viacoin;
16847 DOM.bip44coin.val(14);
16848 },
16849 },
16850 {
16851 name: "Viacoin Testnet",
16852 onSelect: function() {
16853 network = bitcoin.networks.viacointestnet;
16854 DOM.bip44coin.val(1);
16855 },
16856 },
16857 {
16858 name: "Jumbucks",
16859 onSelect: function() {
16860 network = bitcoin.networks.jumbucks;
16861 DOM.bip44coin.val(26);
16862 },
16863 },
16864 {
16865 name: "CLAM",
16866 onSelect: function() {
16867 network = bitcoin.networks.clam;
16868 DOM.bip44coin.val(23);
16869 },
16870 },
16871 {
16872 name: "DASH",
16873 onSelect: function() {
16874 network = bitcoin.networks.dash;
16875 DOM.bip44coin.val(5);
16876 },
16877 },
16878 {
16879 name: "Namecoin",
16880 onSelect: function() {
16881 network = bitcoin.networks.namecoin;
16882 DOM.bip44coin.val(7);
16883 },
16884 },
16885 {
16886 name: "Peercoin",
16887 onSelect: function() {
16888 network = bitcoin.networks.peercoin;
16889 DOM.bip44coin.val(6);
16890 },
16891 },
16892 ]
16893
16894 init();
16895
16896 })();
16897 </script>
16898 </body>
16899 </html>