]> git.immae.eu Git - perso/Immae/Projets/Cryptomonnaies/BIP39.git/blob - bip39-standalone.html
Links and author changed to iancoleman
[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 .strength {
48 /* override mobile width from bootstrap */
49 width: auto!important;
50 display: inline-block;
51 }
52 </style>
53 </head>
54 <body>
55 <div class="container">
56
57 <h1 class="text-center">Mnemonic Code Converter</h1>
58 <hr>
59 <div class="row">
60 <div class="col-md-12">
61 <h2>Mnemonic</h2>
62 <form class="form-horizontal" role="form">
63 <div class="col-sm-2"></div>
64 <div class="col-sm-10">
65 <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>
66 <p>For more info see the <a href="https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki" target="_blank">BIP39 spec</a></p>
67 </div>
68 <div class="form-group">
69 <label class="col-sm-2 control-label"></label>
70 <div class="col-sm-10">
71 <div class="form-inline">
72 <div class="input-group-inline">
73 <button class="btn generate">Generate</button>
74 <span>a random</span>
75 <select id="strength" class="strength form-control">
76 <option value="3">3</option>
77 <option value="6">6</option>
78 <option value="9">9</option>
79 <option value="12">12</option>
80 <option value="15" selected>15</option>
81 <option value="18">18</option>
82 <option value="21">21</option>
83 <option value="24">24</option>
84 </select>
85 word mnemonic, or enter your own below.
86 </div>
87 </div>
88 </div>
89 </div>
90 <div class="form-group">
91 <label for="phrase" class="col-sm-2 control-label">BIP39 Mnemonic</label>
92 <div class="col-sm-10">
93 <textarea id="phrase" class="phrase form-control"></textarea>
94 </div>
95 </div>
96 <div class="form-group">
97 <label for="passphrase" class="col-sm-2 control-label">BIP39 Passphrase (optional)</label>
98 <div class="col-sm-10">
99 <textarea id="passphrase" class="passphrase form-control"></textarea>
100 </div>
101 </div>
102 <div class="form-group">
103 <label for="seed" class="col-sm-2 control-label">BIP39 Seed</label>
104 <div class="col-sm-10">
105 <textarea id="seed" class="seed form-control" readonly="readonly"></textarea>
106 </div>
107 </div>
108 <div class="form-group">
109 <label for="network-phrase" class="col-sm-2 control-label">Coin</label>
110 <div class="col-sm-10">
111 <select id="network-phrase" class="network form-control">
112 <!-- populated by javascript -->
113 </select>
114 </div>
115 </div>
116 <div class="form-group">
117 <label for="root-key" class="col-sm-2 control-label">BIP32 Root Key</label>
118 <div class="col-sm-10">
119 <textarea id="root-key" class="root-key form-control"></textarea>
120 </div>
121 </div>
122 </form>
123 </div>
124 </div>
125
126 <hr>
127
128 <div class="row">
129 <div class="col-md-12">
130 <h2>Derivation Path</h2>
131 <ul class="derivation-type nav nav-tabs" role="tablist">
132 <li id="bip44-tab" class="active">
133 <a href="#bip44" role="tab" data-toggle="tab">BIP44</a>
134 </li>
135 <li id="bip32-tab">
136 <a href="#bip32" role="tab" data-toggle="tab">BIP32</a>
137 </li>
138 </ul>
139 <div class="derivation-type tab-content">
140 <div id="bip44" class="tab-pane active">
141 <form class="form-horizontal" role="form">
142 <br>
143 <div class="col-sm-2"></div>
144 <div class="col-sm-10">
145 <p>For more info see the <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target="_blank">BIP44 spec</a></p>
146 </div>
147 <div class="form-group">
148 <label for="purpose" class="col-sm-2 control-label">
149 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#purpose" target="_blank">Purpose</a>
150 </label>
151 <div class="col-sm-10">
152 <input id="purpose" type="text" class="purpose form-control" value="44">
153 </div>
154 </div>
155 <div class="form-group">
156 <label for="coin" class="col-sm-2 control-label">
157 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#registered-coin-types" target="_blank">Coin</a>
158 </label>
159 <div class="col-sm-10">
160 <input id="coin" type="text" class="coin form-control" value="0">
161 </div>
162 </div>
163 <div class="form-group">
164 <label for="account" class="col-sm-2 control-label">
165 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#account" target="_blank">Account</a>
166 </label>
167 <div class="col-sm-10">
168 <input id="account" type="text" class="account form-control" value="0">
169 </div>
170 </div>
171 <div class="form-group">
172 <label for="change" class="col-sm-2 control-label">
173 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#change" target="_blank">External / Internal</a>
174 </label>
175 <div class="col-sm-10">
176 <input id="change" type="text" class="change form-control" value="0">
177 </div>
178 </div>
179 <div class="form-group">
180 <label for="bip44-path" class="col-sm-2 control-label">BIP32 Derivation Path</label>
181 <div class="col-sm-10">
182 <input id="bip44-path" type="text" class="path form-control" value="m/44'/0'/0'/0" readonly="readonly">
183 </div>
184 </div>
185 </form>
186 </div>
187 <div id="bip32" class="tab-pane">
188 <form class="form-horizontal" role="form">
189 <br>
190 <div class="col-sm-2"></div>
191 <div class="col-sm-10">
192 <p>For more info see the <a href="https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target="_blank">BIP32 spec</a></p>
193 </div>
194 <div class="form-group">
195 <label for="bip32-path" class="col-sm-2 control-label">BIP32 Derivation Path</label>
196 <div class="col-sm-10">
197 <input id="bip32-path" type="text" class="path form-control" value="m/0">
198 </div>
199 </div>
200 <div class="form-group">
201 <div class="col-sm-2"></div>
202 <label class="col-sm-10">
203 <input class="hardened-addresses" type="checkbox">
204 Use hardened addresses
205 </label>
206 </div>
207 <div class="form-group">
208 <label class="col-sm-2 control-label">Hive Wallet</label>
209 <div class="col-sm-10">
210 <p class="form-control no-border">
211 Use path <code>m/0'/0</code>.
212 For more info see the <a href="https://www.hivewallet.com/" target="_blank">Hive Wallet homepage</a>
213 </p>
214 </div>
215 </div>
216 <div class="form-group">
217 <label for="mycelium-path" class="col-sm-2 control-label">Mycelium Wallet</label>
218 <div class="col-sm-10">
219 <p class="form-control no-border">
220 Use path <code>m/44'/0'/0'/0</code>.
221 For more info see the <a href="http://www.mycelium.com/" target="_blank">Mycelium Wallet homepage</a>
222 </p>
223 </div>
224 </div>
225 <div class="form-group">
226 <label for="core-path" class="col-sm-2 control-label">Bitcoin Core</label>
227 <div class="col-sm-10">
228 <p class="form-control no-border">
229 Use path <code>m/0'/0'</code> with hardened addresses.
230 For more info see the <a href="https://github.com/bitcoin/bitcoin/pull/8035" target="_blank">Bitcoin Core BIP32 implementation</a>
231 </p>
232 </div>
233 </div>
234 <div class="form-group">
235 <label class="col-sm-2 control-label">Block Explorers</label>
236 <div class="col-sm-10">
237 <p class="form-control no-border">
238 Use path <code>m/44'/0'/0'</code>.
239 Only enter the <code>xpub</code> extended key into block explorer search fields, never the <code>xpriv</code> key.
240 </p>
241 </div>
242 </div>
243 </form>
244 </div>
245 </div>
246 <form class="form-horizontal" role="form">
247 <div class="form-group">
248 <label for="extended-priv-key" class="col-sm-2 control-label">BIP32 Extended Key</label>
249 <div class="col-sm-10">
250 <textarea id="extended-priv-key" class="extended-priv-key form-control" readonly="readonly"></textarea>
251 </div>
252 </div>
253 <div class="form-group">
254 <label for="extended-pub-key" class="col-sm-2 control-label">BIP32 Extended Key (addresses only)</label>
255 <div class="col-sm-10">
256 <textarea id="extended-pub-key" class="extended-pub-key form-control" readonly="readonly"></textarea>
257 </div>
258 </div>
259 </form>
260 </div>
261 </div>
262
263 <hr>
264
265 <div class="row">
266 <div class="col-md-12">
267 <h2>Derived Addresses</h2>
268 <p>Note these addreses are derived from the <strong>BIP32 Extended Key</strong></p>
269 <table class="table table-striped">
270 <thead>
271 <th>
272 <div class="input-group">
273 Path&nbsp;&nbsp;
274 <button class="index-toggle">Toggle</button>
275 </div>
276 </th>
277 <th>
278 <div class="input-group">
279 Address&nbsp;&nbsp;
280 <button class="address-toggle">Toggle</button>
281 </div>
282 </th>
283 <th>
284 <div class="input-group">
285 Private Key&nbsp;&nbsp;
286 <button class="private-key-toggle">Toggle</button>
287 </div>
288 </th>
289 </thead>
290 <tbody class="addresses">
291 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
292 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
293 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
294 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
295 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
296 </tbody>
297 </table>
298 </div>
299 </div>
300 <span>Show next </button>
301 <input type="number" class="rows-to-add" value="20">
302 <button class="more">Show</button>
303
304 <hr>
305
306 <div class="row">
307 <div class="col-md-12">
308 <h2>More info</h2>
309 <h3>BIP39 <span class="small">Mnemonic code for generating deterministic keys</span></h3>
310 <p>
311 Read more at the
312 <a href="https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki">official BIP39 spec</a>
313 </p>
314 <h3>BIP32 <span class="small">Hierarchical Deterministic Wallets</span></h3>
315 <p>
316 Read more at the
317 <a href="https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target="_blank">official BIP32 spec</a>
318 and see the demo at
319 <a href="http://bip32.org/" target="_blank">bip32.org</a>
320 </p>
321 <h3>BIP44 <span class="small">Multi-Account Hierarchy for Deterministic Wallets</span></h3>
322 <p>
323 Read more at the
324 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target="_blank">official BIP44 spec</a>
325 </p>
326 <h3>Private Keys</h3>
327 <p>
328 Use private keys at
329 <a href="https://web.archive.org/web/20150707020924/https://brainwallet.org/" target="_blank">brainwallet.org</a>,
330 but be careful - it can be easy to make mistakes if you
331 don't know what you're doing
332 </p>
333 </div>
334 </div>
335
336 <hr>
337
338 <div class="row">
339 <div class="col-md-12">
340
341 <h2>Offline Usage</h2>
342
343 <p>
344 You can use this tool without having to be online.
345 </p>
346 <p>
347 In your browser, select file save-as, and save this page
348 as a file.
349 </p>
350 <p>
351 Double-click that file to open it in a browser
352 on any offline computer.
353 </p>
354 <p>
355 Alternatively, download it from
356 <a href="https://github.com/iancoleman/bip39">
357 https://github.com/iancoleman/bip39
358 </a>
359
360 </div>
361 </div>
362
363 <hr>
364
365 <div class="row">
366 <div class="col-md-12">
367
368 <h2>This project is 100% open-source code</h2>
369
370 <p>
371 <span>Get the source code at - </span>
372 <a href="https://github.com/iancoleman/bip39" target="_blank">
373 https://github.com/iancoleman/bip39
374 </a>
375 </p>
376
377 <h3>Libraries</h3>
378
379 <p>
380 <span>BitcoinJS - </span>
381 <a href="https://github.com/bitcoinjs/bitcoinjs-lib" target="_blank">
382 https://github.com/bitcoinjs/bitcoinjs-lib
383 </a>
384 </p>
385
386 <p>
387 <span>jsBIP39 - </span>
388 <a href="https://github.com/iancoleman/jsbip39" target="_blank">
389 https://github.com/iancoleman/jsbip39
390 </a>
391 </p>
392
393 <p>
394 <span>sjcl - </span>
395 <a href="https://github.com/bitwiseshiftleft/sjcl" target="_blank">
396 https://github.com/bitwiseshiftleft/sjcl
397 </a>
398 </p>
399
400 <p>
401 <span>jQuery - </span>
402 <a href="https://jquery.com/" target="_blank">
403 https://jquery.com/
404 </a>
405 </p>
406
407 <p>
408 <span>Twitter Bootstrap - </span>
409 <a href="http://getbootstrap.com/" target="_blank">
410 http://getbootstrap.com/
411 </a>
412 </p>
413
414 </div>
415 </div>
416
417 </div>
418
419 <div class="feedback-container">
420 <div class="feedback">Loading...</div>
421 </div>
422
423 <script type="text/template" id="address-row-template">
424 <tr>
425 <td class="index"><span></span></td>
426 <td class="address"><span></span></td>
427 <td class="privkey"><span></span></td>
428 </tr>
429 </script>
430 <script>/*! jQuery v2.1.1 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */
431 !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)
432 },_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))
433 },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});
434 </script>
435 <script>/*!
436 * Bootstrap v3.2.0 (http://getbootstrap.com)
437 * Copyright 2011-2014 Twitter, Inc.
438 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
439 */
440 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>
441 <script>(function() {
442 'use strict';
443
444 /**
445 * Extend an Object with another Object's properties.
446 *
447 * The source objects are specified as additional arguments.
448 *
449 * @param dst Object the object to extend.
450 *
451 * @return Object the final object.
452 */
453 var _extend = function(dst) {
454 var sources = Array.prototype.slice.call(arguments, 1);
455 for (var i=0; i<sources.length; ++i) {
456 var src = sources[i];
457 for (var p in src) {
458 if (src.hasOwnProperty(p)) dst[p] = src[p];
459 }
460 }
461 return dst;
462 };
463
464
465 /**
466 * Defer execution of given function.
467 * @param {Function} func
468 */
469 var _defer = function(func) {
470 if (typeof setImmediate === 'function') {
471 return setImmediate(func);
472 } else {
473 return setTimeout(func, 0);
474 }
475 };
476
477 /**
478 * Based on the algorithm at http://en.wikipedia.org/wiki/Levenshtein_distance.
479 */
480 var Levenshtein = {
481 /**
482 * Calculate levenshtein distance of the two strings.
483 *
484 * @param str1 String the first string.
485 * @param str2 String the second string.
486 * @return Integer the levenshtein distance (0 and above).
487 */
488 get: function(str1, str2) {
489 // base cases
490 if (str1 === str2) return 0;
491 if (str1.length === 0) return str2.length;
492 if (str2.length === 0) return str1.length;
493
494 // two rows
495 var prevRow = new Array(str2.length + 1),
496 curCol, nextCol, i, j, tmp;
497
498 // initialise previous row
499 for (i=0; i<prevRow.length; ++i) {
500 prevRow[i] = i;
501 }
502
503 // calculate current row distance from previous row
504 for (i=0; i<str1.length; ++i) {
505 nextCol = i + 1;
506
507 for (j=0; j<str2.length; ++j) {
508 curCol = nextCol;
509
510 // substution
511 nextCol = prevRow[j] + ( (str1.charAt(i) === str2.charAt(j)) ? 0 : 1 );
512 // insertion
513 tmp = curCol + 1;
514 if (nextCol > tmp) {
515 nextCol = tmp;
516 }
517 // deletion
518 tmp = prevRow[j + 1] + 1;
519 if (nextCol > tmp) {
520 nextCol = tmp;
521 }
522
523 // copy current col value into previous (in preparation for next iteration)
524 prevRow[j] = curCol;
525 }
526
527 // copy last col value into previous (in preparation for next iteration)
528 prevRow[j] = nextCol;
529 }
530
531 return nextCol;
532 },
533
534 /**
535 * Asynchronously calculate levenshtein distance of the two strings.
536 *
537 * @param str1 String the first string.
538 * @param str2 String the second string.
539 * @param cb Function callback function with signature: function(Error err, int distance)
540 * @param [options] Object additional options.
541 * @param [options.progress] Function progress callback with signature: function(percentComplete)
542 */
543 getAsync: function(str1, str2, cb, options) {
544 options = _extend({}, {
545 progress: null
546 }, options);
547
548 // base cases
549 if (str1 === str2) return cb(null, 0);
550 if (str1.length === 0) return cb(null, str2.length);
551 if (str2.length === 0) return cb(null, str1.length);
552
553 // two rows
554 var prevRow = new Array(str2.length + 1),
555 curCol, nextCol,
556 i, j, tmp,
557 startTime, currentTime;
558
559 // initialise previous row
560 for (i=0; i<prevRow.length; ++i) {
561 prevRow[i] = i;
562 }
563
564 nextCol = 1;
565 i = 0;
566 j = -1;
567
568 var __calculate = function() {
569 // reset timer
570 startTime = new Date().valueOf();
571 currentTime = startTime;
572
573 // keep going until one second has elapsed
574 while (currentTime - startTime < 1000) {
575 // reached end of current row?
576 if (str2.length <= (++j)) {
577 // copy current into previous (in preparation for next iteration)
578 prevRow[j] = nextCol;
579
580 // if already done all chars
581 if (str1.length <= (++i)) {
582 return cb(null, nextCol);
583 }
584 // else if we have more left to do
585 else {
586 nextCol = i + 1;
587 j = 0;
588 }
589 }
590
591 // calculation
592 curCol = nextCol;
593
594 // substution
595 nextCol = prevRow[j] + ( (str1.charAt(i) === str2.charAt(j)) ? 0 : 1 );
596 // insertion
597 tmp = curCol + 1;
598 if (nextCol > tmp) {
599 nextCol = tmp;
600 }
601 // deletion
602 tmp = prevRow[j + 1] + 1;
603 if (nextCol > tmp) {
604 nextCol = tmp;
605 }
606
607 // copy current into previous (in preparation for next iteration)
608 prevRow[j] = curCol;
609
610 // get current time
611 currentTime = new Date().valueOf();
612 }
613
614 // send a progress update?
615 if (null !== options.progress) {
616 try {
617 options.progress.call(null, (i * 100.0/ str1.length));
618 } catch (err) {
619 return cb('Progress callback: ' + err.toString());
620 }
621 }
622
623 // next iteration
624 _defer(__calculate);
625 };
626
627 __calculate();
628 }
629
630 };
631
632 // amd
633 if (typeof define !== "undefined" && define !== null && define.amd) {
634 define(function() {
635 return Levenshtein;
636 });
637 }
638 // commonjs
639 else if (typeof module !== "undefined" && module !== null && typeof exports !== "undefined" && module.exports === exports) {
640 module.exports = Levenshtein;
641 }
642 // web worker
643 else if (typeof self !== "undefined" && typeof self.postMessage === 'function' && typeof self.importScripts === 'function') {
644 self.Levenshtein = Levenshtein;
645 }
646 // browser main thread
647 else if (typeof window !== "undefined" && window !== null) {
648 window.Levenshtein = Levenshtein;
649 }
650 }());
651
652 </script>
653 <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){
654 // (public) Constructor
655 function BigInteger(a, b, c) {
656 if (!(this instanceof BigInteger))
657 return new BigInteger(a, b, c)
658
659 if (a != null) {
660 if ("number" == typeof a) this.fromNumber(a, b, c)
661 else if (b == null && "string" != typeof a) this.fromString(a, 256)
662 else this.fromString(a, b)
663 }
664 }
665
666 var proto = BigInteger.prototype
667
668 // duck-typed isBigInteger
669 proto.__bigi = require('../package.json').version
670 BigInteger.isBigInteger = function (obj, check_ver) {
671 return obj && obj.__bigi && (!check_ver || obj.__bigi === proto.__bigi)
672 }
673
674 // Bits per digit
675 var dbits
676
677 // am: Compute w_j += (x*this_i), propagate carries,
678 // c is initial carry, returns final carry.
679 // c < 3*dvalue, x < 2*dvalue, this_i < dvalue
680 // We need to select the fastest one that works in this environment.
681
682 // am1: use a single mult and divide to get the high bits,
683 // max digit bits should be 26 because
684 // max internal value = 2*dvalue^2-2*dvalue (< 2^53)
685 function am1(i, x, w, j, c, n) {
686 while (--n >= 0) {
687 var v = x * this[i++] + w[j] + c
688 c = Math.floor(v / 0x4000000)
689 w[j++] = v & 0x3ffffff
690 }
691 return c
692 }
693 // am2 avoids a big mult-and-extract completely.
694 // Max digit bits should be <= 30 because we do bitwise ops
695 // on values up to 2*hdvalue^2-hdvalue-1 (< 2^31)
696 function am2(i, x, w, j, c, n) {
697 var xl = x & 0x7fff,
698 xh = x >> 15
699 while (--n >= 0) {
700 var l = this[i] & 0x7fff
701 var h = this[i++] >> 15
702 var m = xh * l + h * xl
703 l = xl * l + ((m & 0x7fff) << 15) + w[j] + (c & 0x3fffffff)
704 c = (l >>> 30) + (m >>> 15) + xh * h + (c >>> 30)
705 w[j++] = l & 0x3fffffff
706 }
707 return c
708 }
709 // Alternately, set max digit bits to 28 since some
710 // browsers slow down when dealing with 32-bit numbers.
711 function am3(i, x, w, j, c, n) {
712 var xl = x & 0x3fff,
713 xh = x >> 14
714 while (--n >= 0) {
715 var l = this[i] & 0x3fff
716 var h = this[i++] >> 14
717 var m = xh * l + h * xl
718 l = xl * l + ((m & 0x3fff) << 14) + w[j] + c
719 c = (l >> 28) + (m >> 14) + xh * h
720 w[j++] = l & 0xfffffff
721 }
722 return c
723 }
724
725 // wtf?
726 BigInteger.prototype.am = am1
727 dbits = 26
728
729 BigInteger.prototype.DB = dbits
730 BigInteger.prototype.DM = ((1 << dbits) - 1)
731 var DV = BigInteger.prototype.DV = (1 << dbits)
732
733 var BI_FP = 52
734 BigInteger.prototype.FV = Math.pow(2, BI_FP)
735 BigInteger.prototype.F1 = BI_FP - dbits
736 BigInteger.prototype.F2 = 2 * dbits - BI_FP
737
738 // Digit conversions
739 var BI_RM = "0123456789abcdefghijklmnopqrstuvwxyz"
740 var BI_RC = new Array()
741 var rr, vv
742 rr = "0".charCodeAt(0)
743 for (vv = 0; vv <= 9; ++vv) BI_RC[rr++] = vv
744 rr = "a".charCodeAt(0)
745 for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv
746 rr = "A".charCodeAt(0)
747 for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv
748
749 function int2char(n) {
750 return BI_RM.charAt(n)
751 }
752
753 function intAt(s, i) {
754 var c = BI_RC[s.charCodeAt(i)]
755 return (c == null) ? -1 : c
756 }
757
758 // (protected) copy this to r
759 function bnpCopyTo(r) {
760 for (var i = this.t - 1; i >= 0; --i) r[i] = this[i]
761 r.t = this.t
762 r.s = this.s
763 }
764
765 // (protected) set from integer value x, -DV <= x < DV
766 function bnpFromInt(x) {
767 this.t = 1
768 this.s = (x < 0) ? -1 : 0
769 if (x > 0) this[0] = x
770 else if (x < -1) this[0] = x + DV
771 else this.t = 0
772 }
773
774 // return bigint initialized to value
775 function nbv(i) {
776 var r = new BigInteger()
777 r.fromInt(i)
778 return r
779 }
780
781 // (protected) set from string and radix
782 function bnpFromString(s, b) {
783 var self = this
784
785 var k
786 if (b == 16) k = 4
787 else if (b == 8) k = 3
788 else if (b == 256) k = 8; // byte array
789 else if (b == 2) k = 1
790 else if (b == 32) k = 5
791 else if (b == 4) k = 2
792 else {
793 self.fromRadix(s, b)
794 return
795 }
796 self.t = 0
797 self.s = 0
798 var i = s.length,
799 mi = false,
800 sh = 0
801 while (--i >= 0) {
802 var x = (k == 8) ? s[i] & 0xff : intAt(s, i)
803 if (x < 0) {
804 if (s.charAt(i) == "-") mi = true
805 continue
806 }
807 mi = false
808 if (sh == 0)
809 self[self.t++] = x
810 else if (sh + k > self.DB) {
811 self[self.t - 1] |= (x & ((1 << (self.DB - sh)) - 1)) << sh
812 self[self.t++] = (x >> (self.DB - sh))
813 } else
814 self[self.t - 1] |= x << sh
815 sh += k
816 if (sh >= self.DB) sh -= self.DB
817 }
818 if (k == 8 && (s[0] & 0x80) != 0) {
819 self.s = -1
820 if (sh > 0) self[self.t - 1] |= ((1 << (self.DB - sh)) - 1) << sh
821 }
822 self.clamp()
823 if (mi) BigInteger.ZERO.subTo(self, self)
824 }
825
826 // (protected) clamp off excess high words
827 function bnpClamp() {
828 var c = this.s & this.DM
829 while (this.t > 0 && this[this.t - 1] == c)--this.t
830 }
831
832 // (public) return string representation in given radix
833 function bnToString(b) {
834 var self = this
835 if (self.s < 0) return "-" + self.negate()
836 .toString(b)
837 var k
838 if (b == 16) k = 4
839 else if (b == 8) k = 3
840 else if (b == 2) k = 1
841 else if (b == 32) k = 5
842 else if (b == 4) k = 2
843 else return self.toRadix(b)
844 var km = (1 << k) - 1,
845 d, m = false,
846 r = "",
847 i = self.t
848 var p = self.DB - (i * self.DB) % k
849 if (i-- > 0) {
850 if (p < self.DB && (d = self[i] >> p) > 0) {
851 m = true
852 r = int2char(d)
853 }
854 while (i >= 0) {
855 if (p < k) {
856 d = (self[i] & ((1 << p) - 1)) << (k - p)
857 d |= self[--i] >> (p += self.DB - k)
858 } else {
859 d = (self[i] >> (p -= k)) & km
860 if (p <= 0) {
861 p += self.DB
862 --i
863 }
864 }
865 if (d > 0) m = true
866 if (m) r += int2char(d)
867 }
868 }
869 return m ? r : "0"
870 }
871
872 // (public) -this
873 function bnNegate() {
874 var r = new BigInteger()
875 BigInteger.ZERO.subTo(this, r)
876 return r
877 }
878
879 // (public) |this|
880 function bnAbs() {
881 return (this.s < 0) ? this.negate() : this
882 }
883
884 // (public) return + if this > a, - if this < a, 0 if equal
885 function bnCompareTo(a) {
886 var r = this.s - a.s
887 if (r != 0) return r
888 var i = this.t
889 r = i - a.t
890 if (r != 0) return (this.s < 0) ? -r : r
891 while (--i >= 0)
892 if ((r = this[i] - a[i]) != 0) return r
893 return 0
894 }
895
896 // returns bit length of the integer x
897 function nbits(x) {
898 var r = 1,
899 t
900 if ((t = x >>> 16) != 0) {
901 x = t
902 r += 16
903 }
904 if ((t = x >> 8) != 0) {
905 x = t
906 r += 8
907 }
908 if ((t = x >> 4) != 0) {
909 x = t
910 r += 4
911 }
912 if ((t = x >> 2) != 0) {
913 x = t
914 r += 2
915 }
916 if ((t = x >> 1) != 0) {
917 x = t
918 r += 1
919 }
920 return r
921 }
922
923 // (public) return the number of bits in "this"
924 function bnBitLength() {
925 if (this.t <= 0) return 0
926 return this.DB * (this.t - 1) + nbits(this[this.t - 1] ^ (this.s & this.DM))
927 }
928
929 // (public) return the number of bytes in "this"
930 function bnByteLength() {
931 return this.bitLength() >> 3
932 }
933
934 // (protected) r = this << n*DB
935 function bnpDLShiftTo(n, r) {
936 var i
937 for (i = this.t - 1; i >= 0; --i) r[i + n] = this[i]
938 for (i = n - 1; i >= 0; --i) r[i] = 0
939 r.t = this.t + n
940 r.s = this.s
941 }
942
943 // (protected) r = this >> n*DB
944 function bnpDRShiftTo(n, r) {
945 for (var i = n; i < this.t; ++i) r[i - n] = this[i]
946 r.t = Math.max(this.t - n, 0)
947 r.s = this.s
948 }
949
950 // (protected) r = this << n
951 function bnpLShiftTo(n, r) {
952 var self = this
953 var bs = n % self.DB
954 var cbs = self.DB - bs
955 var bm = (1 << cbs) - 1
956 var ds = Math.floor(n / self.DB),
957 c = (self.s << bs) & self.DM,
958 i
959 for (i = self.t - 1; i >= 0; --i) {
960 r[i + ds + 1] = (self[i] >> cbs) | c
961 c = (self[i] & bm) << bs
962 }
963 for (i = ds - 1; i >= 0; --i) r[i] = 0
964 r[ds] = c
965 r.t = self.t + ds + 1
966 r.s = self.s
967 r.clamp()
968 }
969
970 // (protected) r = this >> n
971 function bnpRShiftTo(n, r) {
972 var self = this
973 r.s = self.s
974 var ds = Math.floor(n / self.DB)
975 if (ds >= self.t) {
976 r.t = 0
977 return
978 }
979 var bs = n % self.DB
980 var cbs = self.DB - bs
981 var bm = (1 << bs) - 1
982 r[0] = self[ds] >> bs
983 for (var i = ds + 1; i < self.t; ++i) {
984 r[i - ds - 1] |= (self[i] & bm) << cbs
985 r[i - ds] = self[i] >> bs
986 }
987 if (bs > 0) r[self.t - ds - 1] |= (self.s & bm) << cbs
988 r.t = self.t - ds
989 r.clamp()
990 }
991
992 // (protected) r = this - a
993 function bnpSubTo(a, r) {
994 var self = this
995 var i = 0,
996 c = 0,
997 m = Math.min(a.t, self.t)
998 while (i < m) {
999 c += self[i] - a[i]
1000 r[i++] = c & self.DM
1001 c >>= self.DB
1002 }
1003 if (a.t < self.t) {
1004 c -= a.s
1005 while (i < self.t) {
1006 c += self[i]
1007 r[i++] = c & self.DM
1008 c >>= self.DB
1009 }
1010 c += self.s
1011 } else {
1012 c += self.s
1013 while (i < a.t) {
1014 c -= a[i]
1015 r[i++] = c & self.DM
1016 c >>= self.DB
1017 }
1018 c -= a.s
1019 }
1020 r.s = (c < 0) ? -1 : 0
1021 if (c < -1) r[i++] = self.DV + c
1022 else if (c > 0) r[i++] = c
1023 r.t = i
1024 r.clamp()
1025 }
1026
1027 // (protected) r = this * a, r != this,a (HAC 14.12)
1028 // "this" should be the larger one if appropriate.
1029 function bnpMultiplyTo(a, r) {
1030 var x = this.abs(),
1031 y = a.abs()
1032 var i = x.t
1033 r.t = i + y.t
1034 while (--i >= 0) r[i] = 0
1035 for (i = 0; i < y.t; ++i) r[i + x.t] = x.am(0, y[i], r, i, 0, x.t)
1036 r.s = 0
1037 r.clamp()
1038 if (this.s != a.s) BigInteger.ZERO.subTo(r, r)
1039 }
1040
1041 // (protected) r = this^2, r != this (HAC 14.16)
1042 function bnpSquareTo(r) {
1043 var x = this.abs()
1044 var i = r.t = 2 * x.t
1045 while (--i >= 0) r[i] = 0
1046 for (i = 0; i < x.t - 1; ++i) {
1047 var c = x.am(i, x[i], r, 2 * i, 0, 1)
1048 if ((r[i + x.t] += x.am(i + 1, 2 * x[i], r, 2 * i + 1, c, x.t - i - 1)) >= x.DV) {
1049 r[i + x.t] -= x.DV
1050 r[i + x.t + 1] = 1
1051 }
1052 }
1053 if (r.t > 0) r[r.t - 1] += x.am(i, x[i], r, 2 * i, 0, 1)
1054 r.s = 0
1055 r.clamp()
1056 }
1057
1058 // (protected) divide this by m, quotient and remainder to q, r (HAC 14.20)
1059 // r != q, this != m. q or r may be null.
1060 function bnpDivRemTo(m, q, r) {
1061 var self = this
1062 var pm = m.abs()
1063 if (pm.t <= 0) return
1064 var pt = self.abs()
1065 if (pt.t < pm.t) {
1066 if (q != null) q.fromInt(0)
1067 if (r != null) self.copyTo(r)
1068 return
1069 }
1070 if (r == null) r = new BigInteger()
1071 var y = new BigInteger(),
1072 ts = self.s,
1073 ms = m.s
1074 var nsh = self.DB - nbits(pm[pm.t - 1]); // normalize modulus
1075 if (nsh > 0) {
1076 pm.lShiftTo(nsh, y)
1077 pt.lShiftTo(nsh, r)
1078 } else {
1079 pm.copyTo(y)
1080 pt.copyTo(r)
1081 }
1082 var ys = y.t
1083 var y0 = y[ys - 1]
1084 if (y0 == 0) return
1085 var yt = y0 * (1 << self.F1) + ((ys > 1) ? y[ys - 2] >> self.F2 : 0)
1086 var d1 = self.FV / yt,
1087 d2 = (1 << self.F1) / yt,
1088 e = 1 << self.F2
1089 var i = r.t,
1090 j = i - ys,
1091 t = (q == null) ? new BigInteger() : q
1092 y.dlShiftTo(j, t)
1093 if (r.compareTo(t) >= 0) {
1094 r[r.t++] = 1
1095 r.subTo(t, r)
1096 }
1097 BigInteger.ONE.dlShiftTo(ys, t)
1098 t.subTo(y, y); // "negative" y so we can replace sub with am later
1099 while (y.t < ys) y[y.t++] = 0
1100 while (--j >= 0) {
1101 // Estimate quotient digit
1102 var qd = (r[--i] == y0) ? self.DM : Math.floor(r[i] * d1 + (r[i - 1] + e) * d2)
1103 if ((r[i] += y.am(0, qd, r, j, 0, ys)) < qd) { // Try it out
1104 y.dlShiftTo(j, t)
1105 r.subTo(t, r)
1106 while (r[i] < --qd) r.subTo(t, r)
1107 }
1108 }
1109 if (q != null) {
1110 r.drShiftTo(ys, q)
1111 if (ts != ms) BigInteger.ZERO.subTo(q, q)
1112 }
1113 r.t = ys
1114 r.clamp()
1115 if (nsh > 0) r.rShiftTo(nsh, r); // Denormalize remainder
1116 if (ts < 0) BigInteger.ZERO.subTo(r, r)
1117 }
1118
1119 // (public) this mod a
1120 function bnMod(a) {
1121 var r = new BigInteger()
1122 this.abs()
1123 .divRemTo(a, null, r)
1124 if (this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) a.subTo(r, r)
1125 return r
1126 }
1127
1128 // Modular reduction using "classic" algorithm
1129 function Classic(m) {
1130 this.m = m
1131 }
1132
1133 function cConvert(x) {
1134 if (x.s < 0 || x.compareTo(this.m) >= 0) return x.mod(this.m)
1135 else return x
1136 }
1137
1138 function cRevert(x) {
1139 return x
1140 }
1141
1142 function cReduce(x) {
1143 x.divRemTo(this.m, null, x)
1144 }
1145
1146 function cMulTo(x, y, r) {
1147 x.multiplyTo(y, r)
1148 this.reduce(r)
1149 }
1150
1151 function cSqrTo(x, r) {
1152 x.squareTo(r)
1153 this.reduce(r)
1154 }
1155
1156 Classic.prototype.convert = cConvert
1157 Classic.prototype.revert = cRevert
1158 Classic.prototype.reduce = cReduce
1159 Classic.prototype.mulTo = cMulTo
1160 Classic.prototype.sqrTo = cSqrTo
1161
1162 // (protected) return "-1/this % 2^DB"; useful for Mont. reduction
1163 // justification:
1164 // xy == 1 (mod m)
1165 // xy = 1+km
1166 // xy(2-xy) = (1+km)(1-km)
1167 // x[y(2-xy)] = 1-k^2m^2
1168 // x[y(2-xy)] == 1 (mod m^2)
1169 // if y is 1/x mod m, then y(2-xy) is 1/x mod m^2
1170 // should reduce x and y(2-xy) by m^2 at each step to keep size bounded.
1171 // JS multiply "overflows" differently from C/C++, so care is needed here.
1172 function bnpInvDigit() {
1173 if (this.t < 1) return 0
1174 var x = this[0]
1175 if ((x & 1) == 0) return 0
1176 var y = x & 3; // y == 1/x mod 2^2
1177 y = (y * (2 - (x & 0xf) * y)) & 0xf; // y == 1/x mod 2^4
1178 y = (y * (2 - (x & 0xff) * y)) & 0xff; // y == 1/x mod 2^8
1179 y = (y * (2 - (((x & 0xffff) * y) & 0xffff))) & 0xffff; // y == 1/x mod 2^16
1180 // last step - calculate inverse mod DV directly
1181 // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints
1182 y = (y * (2 - x * y % this.DV)) % this.DV; // y == 1/x mod 2^dbits
1183 // we really want the negative inverse, and -DV < y < DV
1184 return (y > 0) ? this.DV - y : -y
1185 }
1186
1187 // Montgomery reduction
1188 function Montgomery(m) {
1189 this.m = m
1190 this.mp = m.invDigit()
1191 this.mpl = this.mp & 0x7fff
1192 this.mph = this.mp >> 15
1193 this.um = (1 << (m.DB - 15)) - 1
1194 this.mt2 = 2 * m.t
1195 }
1196
1197 // xR mod m
1198 function montConvert(x) {
1199 var r = new BigInteger()
1200 x.abs()
1201 .dlShiftTo(this.m.t, r)
1202 r.divRemTo(this.m, null, r)
1203 if (x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) this.m.subTo(r, r)
1204 return r
1205 }
1206
1207 // x/R mod m
1208 function montRevert(x) {
1209 var r = new BigInteger()
1210 x.copyTo(r)
1211 this.reduce(r)
1212 return r
1213 }
1214
1215 // x = x/R mod m (HAC 14.32)
1216 function montReduce(x) {
1217 while (x.t <= this.mt2) // pad x so am has enough room later
1218 x[x.t++] = 0
1219 for (var i = 0; i < this.m.t; ++i) {
1220 // faster way of calculating u0 = x[i]*mp mod DV
1221 var j = x[i] & 0x7fff
1222 var u0 = (j * this.mpl + (((j * this.mph + (x[i] >> 15) * this.mpl) & this.um) << 15)) & x.DM
1223 // use am to combine the multiply-shift-add into one call
1224 j = i + this.m.t
1225 x[j] += this.m.am(0, u0, x, i, 0, this.m.t)
1226 // propagate carry
1227 while (x[j] >= x.DV) {
1228 x[j] -= x.DV
1229 x[++j]++
1230 }
1231 }
1232 x.clamp()
1233 x.drShiftTo(this.m.t, x)
1234 if (x.compareTo(this.m) >= 0) x.subTo(this.m, x)
1235 }
1236
1237 // r = "x^2/R mod m"; x != r
1238 function montSqrTo(x, r) {
1239 x.squareTo(r)
1240 this.reduce(r)
1241 }
1242
1243 // r = "xy/R mod m"; x,y != r
1244 function montMulTo(x, y, r) {
1245 x.multiplyTo(y, r)
1246 this.reduce(r)
1247 }
1248
1249 Montgomery.prototype.convert = montConvert
1250 Montgomery.prototype.revert = montRevert
1251 Montgomery.prototype.reduce = montReduce
1252 Montgomery.prototype.mulTo = montMulTo
1253 Montgomery.prototype.sqrTo = montSqrTo
1254
1255 // (protected) true iff this is even
1256 function bnpIsEven() {
1257 return ((this.t > 0) ? (this[0] & 1) : this.s) == 0
1258 }
1259
1260 // (protected) this^e, e < 2^32, doing sqr and mul with "r" (HAC 14.79)
1261 function bnpExp(e, z) {
1262 if (e > 0xffffffff || e < 1) return BigInteger.ONE
1263 var r = new BigInteger(),
1264 r2 = new BigInteger(),
1265 g = z.convert(this),
1266 i = nbits(e) - 1
1267 g.copyTo(r)
1268 while (--i >= 0) {
1269 z.sqrTo(r, r2)
1270 if ((e & (1 << i)) > 0) z.mulTo(r2, g, r)
1271 else {
1272 var t = r
1273 r = r2
1274 r2 = t
1275 }
1276 }
1277 return z.revert(r)
1278 }
1279
1280 // (public) this^e % m, 0 <= e < 2^32
1281 function bnModPowInt(e, m) {
1282 var z
1283 if (e < 256 || m.isEven()) z = new Classic(m)
1284 else z = new Montgomery(m)
1285 return this.exp(e, z)
1286 }
1287
1288 // protected
1289 proto.copyTo = bnpCopyTo
1290 proto.fromInt = bnpFromInt
1291 proto.fromString = bnpFromString
1292 proto.clamp = bnpClamp
1293 proto.dlShiftTo = bnpDLShiftTo
1294 proto.drShiftTo = bnpDRShiftTo
1295 proto.lShiftTo = bnpLShiftTo
1296 proto.rShiftTo = bnpRShiftTo
1297 proto.subTo = bnpSubTo
1298 proto.multiplyTo = bnpMultiplyTo
1299 proto.squareTo = bnpSquareTo
1300 proto.divRemTo = bnpDivRemTo
1301 proto.invDigit = bnpInvDigit
1302 proto.isEven = bnpIsEven
1303 proto.exp = bnpExp
1304
1305 // public
1306 proto.toString = bnToString
1307 proto.negate = bnNegate
1308 proto.abs = bnAbs
1309 proto.compareTo = bnCompareTo
1310 proto.bitLength = bnBitLength
1311 proto.byteLength = bnByteLength
1312 proto.mod = bnMod
1313 proto.modPowInt = bnModPowInt
1314
1315 // (public)
1316 function bnClone() {
1317 var r = new BigInteger()
1318 this.copyTo(r)
1319 return r
1320 }
1321
1322 // (public) return value as integer
1323 function bnIntValue() {
1324 if (this.s < 0) {
1325 if (this.t == 1) return this[0] - this.DV
1326 else if (this.t == 0) return -1
1327 } else if (this.t == 1) return this[0]
1328 else if (this.t == 0) return 0
1329 // assumes 16 < DB < 32
1330 return ((this[1] & ((1 << (32 - this.DB)) - 1)) << this.DB) | this[0]
1331 }
1332
1333 // (public) return value as byte
1334 function bnByteValue() {
1335 return (this.t == 0) ? this.s : (this[0] << 24) >> 24
1336 }
1337
1338 // (public) return value as short (assumes DB>=16)
1339 function bnShortValue() {
1340 return (this.t == 0) ? this.s : (this[0] << 16) >> 16
1341 }
1342
1343 // (protected) return x s.t. r^x < DV
1344 function bnpChunkSize(r) {
1345 return Math.floor(Math.LN2 * this.DB / Math.log(r))
1346 }
1347
1348 // (public) 0 if this == 0, 1 if this > 0
1349 function bnSigNum() {
1350 if (this.s < 0) return -1
1351 else if (this.t <= 0 || (this.t == 1 && this[0] <= 0)) return 0
1352 else return 1
1353 }
1354
1355 // (protected) convert to radix string
1356 function bnpToRadix(b) {
1357 if (b == null) b = 10
1358 if (this.signum() == 0 || b < 2 || b > 36) return "0"
1359 var cs = this.chunkSize(b)
1360 var a = Math.pow(b, cs)
1361 var d = nbv(a),
1362 y = new BigInteger(),
1363 z = new BigInteger(),
1364 r = ""
1365 this.divRemTo(d, y, z)
1366 while (y.signum() > 0) {
1367 r = (a + z.intValue())
1368 .toString(b)
1369 .substr(1) + r
1370 y.divRemTo(d, y, z)
1371 }
1372 return z.intValue()
1373 .toString(b) + r
1374 }
1375
1376 // (protected) convert from radix string
1377 function bnpFromRadix(s, b) {
1378 var self = this
1379 self.fromInt(0)
1380 if (b == null) b = 10
1381 var cs = self.chunkSize(b)
1382 var d = Math.pow(b, cs),
1383 mi = false,
1384 j = 0,
1385 w = 0
1386 for (var i = 0; i < s.length; ++i) {
1387 var x = intAt(s, i)
1388 if (x < 0) {
1389 if (s.charAt(i) == "-" && self.signum() == 0) mi = true
1390 continue
1391 }
1392 w = b * w + x
1393 if (++j >= cs) {
1394 self.dMultiply(d)
1395 self.dAddOffset(w, 0)
1396 j = 0
1397 w = 0
1398 }
1399 }
1400 if (j > 0) {
1401 self.dMultiply(Math.pow(b, j))
1402 self.dAddOffset(w, 0)
1403 }
1404 if (mi) BigInteger.ZERO.subTo(self, self)
1405 }
1406
1407 // (protected) alternate constructor
1408 function bnpFromNumber(a, b, c) {
1409 var self = this
1410 if ("number" == typeof b) {
1411 // new BigInteger(int,int,RNG)
1412 if (a < 2) self.fromInt(1)
1413 else {
1414 self.fromNumber(a, c)
1415 if (!self.testBit(a - 1)) // force MSB set
1416 self.bitwiseTo(BigInteger.ONE.shiftLeft(a - 1), op_or, self)
1417 if (self.isEven()) self.dAddOffset(1, 0); // force odd
1418 while (!self.isProbablePrime(b)) {
1419 self.dAddOffset(2, 0)
1420 if (self.bitLength() > a) self.subTo(BigInteger.ONE.shiftLeft(a - 1), self)
1421 }
1422 }
1423 } else {
1424 // new BigInteger(int,RNG)
1425 var x = new Array(),
1426 t = a & 7
1427 x.length = (a >> 3) + 1
1428 b.nextBytes(x)
1429 if (t > 0) x[0] &= ((1 << t) - 1)
1430 else x[0] = 0
1431 self.fromString(x, 256)
1432 }
1433 }
1434
1435 // (public) convert to bigendian byte array
1436 function bnToByteArray() {
1437 var self = this
1438 var i = self.t,
1439 r = new Array()
1440 r[0] = self.s
1441 var p = self.DB - (i * self.DB) % 8,
1442 d, k = 0
1443 if (i-- > 0) {
1444 if (p < self.DB && (d = self[i] >> p) != (self.s & self.DM) >> p)
1445 r[k++] = d | (self.s << (self.DB - p))
1446 while (i >= 0) {
1447 if (p < 8) {
1448 d = (self[i] & ((1 << p) - 1)) << (8 - p)
1449 d |= self[--i] >> (p += self.DB - 8)
1450 } else {
1451 d = (self[i] >> (p -= 8)) & 0xff
1452 if (p <= 0) {
1453 p += self.DB
1454 --i
1455 }
1456 }
1457 if ((d & 0x80) != 0) d |= -256
1458 if (k === 0 && (self.s & 0x80) != (d & 0x80))++k
1459 if (k > 0 || d != self.s) r[k++] = d
1460 }
1461 }
1462 return r
1463 }
1464
1465 function bnEquals(a) {
1466 return (this.compareTo(a) == 0)
1467 }
1468
1469 function bnMin(a) {
1470 return (this.compareTo(a) < 0) ? this : a
1471 }
1472
1473 function bnMax(a) {
1474 return (this.compareTo(a) > 0) ? this : a
1475 }
1476
1477 // (protected) r = this op a (bitwise)
1478 function bnpBitwiseTo(a, op, r) {
1479 var self = this
1480 var i, f, m = Math.min(a.t, self.t)
1481 for (i = 0; i < m; ++i) r[i] = op(self[i], a[i])
1482 if (a.t < self.t) {
1483 f = a.s & self.DM
1484 for (i = m; i < self.t; ++i) r[i] = op(self[i], f)
1485 r.t = self.t
1486 } else {
1487 f = self.s & self.DM
1488 for (i = m; i < a.t; ++i) r[i] = op(f, a[i])
1489 r.t = a.t
1490 }
1491 r.s = op(self.s, a.s)
1492 r.clamp()
1493 }
1494
1495 // (public) this & a
1496 function op_and(x, y) {
1497 return x & y
1498 }
1499
1500 function bnAnd(a) {
1501 var r = new BigInteger()
1502 this.bitwiseTo(a, op_and, r)
1503 return r
1504 }
1505
1506 // (public) this | a
1507 function op_or(x, y) {
1508 return x | y
1509 }
1510
1511 function bnOr(a) {
1512 var r = new BigInteger()
1513 this.bitwiseTo(a, op_or, r)
1514 return r
1515 }
1516
1517 // (public) this ^ a
1518 function op_xor(x, y) {
1519 return x ^ y
1520 }
1521
1522 function bnXor(a) {
1523 var r = new BigInteger()
1524 this.bitwiseTo(a, op_xor, r)
1525 return r
1526 }
1527
1528 // (public) this & ~a
1529 function op_andnot(x, y) {
1530 return x & ~y
1531 }
1532
1533 function bnAndNot(a) {
1534 var r = new BigInteger()
1535 this.bitwiseTo(a, op_andnot, r)
1536 return r
1537 }
1538
1539 // (public) ~this
1540 function bnNot() {
1541 var r = new BigInteger()
1542 for (var i = 0; i < this.t; ++i) r[i] = this.DM & ~this[i]
1543 r.t = this.t
1544 r.s = ~this.s
1545 return r
1546 }
1547
1548 // (public) this << n
1549 function bnShiftLeft(n) {
1550 var r = new BigInteger()
1551 if (n < 0) this.rShiftTo(-n, r)
1552 else this.lShiftTo(n, r)
1553 return r
1554 }
1555
1556 // (public) this >> n
1557 function bnShiftRight(n) {
1558 var r = new BigInteger()
1559 if (n < 0) this.lShiftTo(-n, r)
1560 else this.rShiftTo(n, r)
1561 return r
1562 }
1563
1564 // return index of lowest 1-bit in x, x < 2^31
1565 function lbit(x) {
1566 if (x == 0) return -1
1567 var r = 0
1568 if ((x & 0xffff) == 0) {
1569 x >>= 16
1570 r += 16
1571 }
1572 if ((x & 0xff) == 0) {
1573 x >>= 8
1574 r += 8
1575 }
1576 if ((x & 0xf) == 0) {
1577 x >>= 4
1578 r += 4
1579 }
1580 if ((x & 3) == 0) {
1581 x >>= 2
1582 r += 2
1583 }
1584 if ((x & 1) == 0)++r
1585 return r
1586 }
1587
1588 // (public) returns index of lowest 1-bit (or -1 if none)
1589 function bnGetLowestSetBit() {
1590 for (var i = 0; i < this.t; ++i)
1591 if (this[i] != 0) return i * this.DB + lbit(this[i])
1592 if (this.s < 0) return this.t * this.DB
1593 return -1
1594 }
1595
1596 // return number of 1 bits in x
1597 function cbit(x) {
1598 var r = 0
1599 while (x != 0) {
1600 x &= x - 1
1601 ++r
1602 }
1603 return r
1604 }
1605
1606 // (public) return number of set bits
1607 function bnBitCount() {
1608 var r = 0,
1609 x = this.s & this.DM
1610 for (var i = 0; i < this.t; ++i) r += cbit(this[i] ^ x)
1611 return r
1612 }
1613
1614 // (public) true iff nth bit is set
1615 function bnTestBit(n) {
1616 var j = Math.floor(n / this.DB)
1617 if (j >= this.t) return (this.s != 0)
1618 return ((this[j] & (1 << (n % this.DB))) != 0)
1619 }
1620
1621 // (protected) this op (1<<n)
1622 function bnpChangeBit(n, op) {
1623 var r = BigInteger.ONE.shiftLeft(n)
1624 this.bitwiseTo(r, op, r)
1625 return r
1626 }
1627
1628 // (public) this | (1<<n)
1629 function bnSetBit(n) {
1630 return this.changeBit(n, op_or)
1631 }
1632
1633 // (public) this & ~(1<<n)
1634 function bnClearBit(n) {
1635 return this.changeBit(n, op_andnot)
1636 }
1637
1638 // (public) this ^ (1<<n)
1639 function bnFlipBit(n) {
1640 return this.changeBit(n, op_xor)
1641 }
1642
1643 // (protected) r = this + a
1644 function bnpAddTo(a, r) {
1645 var self = this
1646
1647 var i = 0,
1648 c = 0,
1649 m = Math.min(a.t, self.t)
1650 while (i < m) {
1651 c += self[i] + a[i]
1652 r[i++] = c & self.DM
1653 c >>= self.DB
1654 }
1655 if (a.t < self.t) {
1656 c += a.s
1657 while (i < self.t) {
1658 c += self[i]
1659 r[i++] = c & self.DM
1660 c >>= self.DB
1661 }
1662 c += self.s
1663 } else {
1664 c += self.s
1665 while (i < a.t) {
1666 c += a[i]
1667 r[i++] = c & self.DM
1668 c >>= self.DB
1669 }
1670 c += a.s
1671 }
1672 r.s = (c < 0) ? -1 : 0
1673 if (c > 0) r[i++] = c
1674 else if (c < -1) r[i++] = self.DV + c
1675 r.t = i
1676 r.clamp()
1677 }
1678
1679 // (public) this + a
1680 function bnAdd(a) {
1681 var r = new BigInteger()
1682 this.addTo(a, r)
1683 return r
1684 }
1685
1686 // (public) this - a
1687 function bnSubtract(a) {
1688 var r = new BigInteger()
1689 this.subTo(a, r)
1690 return r
1691 }
1692
1693 // (public) this * a
1694 function bnMultiply(a) {
1695 var r = new BigInteger()
1696 this.multiplyTo(a, r)
1697 return r
1698 }
1699
1700 // (public) this^2
1701 function bnSquare() {
1702 var r = new BigInteger()
1703 this.squareTo(r)
1704 return r
1705 }
1706
1707 // (public) this / a
1708 function bnDivide(a) {
1709 var r = new BigInteger()
1710 this.divRemTo(a, r, null)
1711 return r
1712 }
1713
1714 // (public) this % a
1715 function bnRemainder(a) {
1716 var r = new BigInteger()
1717 this.divRemTo(a, null, r)
1718 return r
1719 }
1720
1721 // (public) [this/a,this%a]
1722 function bnDivideAndRemainder(a) {
1723 var q = new BigInteger(),
1724 r = new BigInteger()
1725 this.divRemTo(a, q, r)
1726 return new Array(q, r)
1727 }
1728
1729 // (protected) this *= n, this >= 0, 1 < n < DV
1730 function bnpDMultiply(n) {
1731 this[this.t] = this.am(0, n - 1, this, 0, 0, this.t)
1732 ++this.t
1733 this.clamp()
1734 }
1735
1736 // (protected) this += n << w words, this >= 0
1737 function bnpDAddOffset(n, w) {
1738 if (n == 0) return
1739 while (this.t <= w) this[this.t++] = 0
1740 this[w] += n
1741 while (this[w] >= this.DV) {
1742 this[w] -= this.DV
1743 if (++w >= this.t) this[this.t++] = 0
1744 ++this[w]
1745 }
1746 }
1747
1748 // A "null" reducer
1749 function NullExp() {}
1750
1751 function nNop(x) {
1752 return x
1753 }
1754
1755 function nMulTo(x, y, r) {
1756 x.multiplyTo(y, r)
1757 }
1758
1759 function nSqrTo(x, r) {
1760 x.squareTo(r)
1761 }
1762
1763 NullExp.prototype.convert = nNop
1764 NullExp.prototype.revert = nNop
1765 NullExp.prototype.mulTo = nMulTo
1766 NullExp.prototype.sqrTo = nSqrTo
1767
1768 // (public) this^e
1769 function bnPow(e) {
1770 return this.exp(e, new NullExp())
1771 }
1772
1773 // (protected) r = lower n words of "this * a", a.t <= n
1774 // "this" should be the larger one if appropriate.
1775 function bnpMultiplyLowerTo(a, n, r) {
1776 var i = Math.min(this.t + a.t, n)
1777 r.s = 0; // assumes a,this >= 0
1778 r.t = i
1779 while (i > 0) r[--i] = 0
1780 var j
1781 for (j = r.t - this.t; i < j; ++i) r[i + this.t] = this.am(0, a[i], r, i, 0, this.t)
1782 for (j = Math.min(a.t, n); i < j; ++i) this.am(0, a[i], r, i, 0, n - i)
1783 r.clamp()
1784 }
1785
1786 // (protected) r = "this * a" without lower n words, n > 0
1787 // "this" should be the larger one if appropriate.
1788 function bnpMultiplyUpperTo(a, n, r) {
1789 --n
1790 var i = r.t = this.t + a.t - n
1791 r.s = 0; // assumes a,this >= 0
1792 while (--i >= 0) r[i] = 0
1793 for (i = Math.max(n - this.t, 0); i < a.t; ++i)
1794 r[this.t + i - n] = this.am(n - i, a[i], r, 0, 0, this.t + i - n)
1795 r.clamp()
1796 r.drShiftTo(1, r)
1797 }
1798
1799 // Barrett modular reduction
1800 function Barrett(m) {
1801 // setup Barrett
1802 this.r2 = new BigInteger()
1803 this.q3 = new BigInteger()
1804 BigInteger.ONE.dlShiftTo(2 * m.t, this.r2)
1805 this.mu = this.r2.divide(m)
1806 this.m = m
1807 }
1808
1809 function barrettConvert(x) {
1810 if (x.s < 0 || x.t > 2 * this.m.t) return x.mod(this.m)
1811 else if (x.compareTo(this.m) < 0) return x
1812 else {
1813 var r = new BigInteger()
1814 x.copyTo(r)
1815 this.reduce(r)
1816 return r
1817 }
1818 }
1819
1820 function barrettRevert(x) {
1821 return x
1822 }
1823
1824 // x = x mod m (HAC 14.42)
1825 function barrettReduce(x) {
1826 var self = this
1827 x.drShiftTo(self.m.t - 1, self.r2)
1828 if (x.t > self.m.t + 1) {
1829 x.t = self.m.t + 1
1830 x.clamp()
1831 }
1832 self.mu.multiplyUpperTo(self.r2, self.m.t + 1, self.q3)
1833 self.m.multiplyLowerTo(self.q3, self.m.t + 1, self.r2)
1834 while (x.compareTo(self.r2) < 0) x.dAddOffset(1, self.m.t + 1)
1835 x.subTo(self.r2, x)
1836 while (x.compareTo(self.m) >= 0) x.subTo(self.m, x)
1837 }
1838
1839 // r = x^2 mod m; x != r
1840 function barrettSqrTo(x, r) {
1841 x.squareTo(r)
1842 this.reduce(r)
1843 }
1844
1845 // r = x*y mod m; x,y != r
1846 function barrettMulTo(x, y, r) {
1847 x.multiplyTo(y, r)
1848 this.reduce(r)
1849 }
1850
1851 Barrett.prototype.convert = barrettConvert
1852 Barrett.prototype.revert = barrettRevert
1853 Barrett.prototype.reduce = barrettReduce
1854 Barrett.prototype.mulTo = barrettMulTo
1855 Barrett.prototype.sqrTo = barrettSqrTo
1856
1857 // (public) this^e % m (HAC 14.85)
1858 function bnModPow(e, m) {
1859 var i = e.bitLength(),
1860 k, r = nbv(1),
1861 z
1862 if (i <= 0) return r
1863 else if (i < 18) k = 1
1864 else if (i < 48) k = 3
1865 else if (i < 144) k = 4
1866 else if (i < 768) k = 5
1867 else k = 6
1868 if (i < 8)
1869 z = new Classic(m)
1870 else if (m.isEven())
1871 z = new Barrett(m)
1872 else
1873 z = new Montgomery(m)
1874
1875 // precomputation
1876 var g = new Array(),
1877 n = 3,
1878 k1 = k - 1,
1879 km = (1 << k) - 1
1880 g[1] = z.convert(this)
1881 if (k > 1) {
1882 var g2 = new BigInteger()
1883 z.sqrTo(g[1], g2)
1884 while (n <= km) {
1885 g[n] = new BigInteger()
1886 z.mulTo(g2, g[n - 2], g[n])
1887 n += 2
1888 }
1889 }
1890
1891 var j = e.t - 1,
1892 w, is1 = true,
1893 r2 = new BigInteger(),
1894 t
1895 i = nbits(e[j]) - 1
1896 while (j >= 0) {
1897 if (i >= k1) w = (e[j] >> (i - k1)) & km
1898 else {
1899 w = (e[j] & ((1 << (i + 1)) - 1)) << (k1 - i)
1900 if (j > 0) w |= e[j - 1] >> (this.DB + i - k1)
1901 }
1902
1903 n = k
1904 while ((w & 1) == 0) {
1905 w >>= 1
1906 --n
1907 }
1908 if ((i -= n) < 0) {
1909 i += this.DB
1910 --j
1911 }
1912 if (is1) { // ret == 1, don't bother squaring or multiplying it
1913 g[w].copyTo(r)
1914 is1 = false
1915 } else {
1916 while (n > 1) {
1917 z.sqrTo(r, r2)
1918 z.sqrTo(r2, r)
1919 n -= 2
1920 }
1921 if (n > 0) z.sqrTo(r, r2)
1922 else {
1923 t = r
1924 r = r2
1925 r2 = t
1926 }
1927 z.mulTo(r2, g[w], r)
1928 }
1929
1930 while (j >= 0 && (e[j] & (1 << i)) == 0) {
1931 z.sqrTo(r, r2)
1932 t = r
1933 r = r2
1934 r2 = t
1935 if (--i < 0) {
1936 i = this.DB - 1
1937 --j
1938 }
1939 }
1940 }
1941 return z.revert(r)
1942 }
1943
1944 // (public) gcd(this,a) (HAC 14.54)
1945 function bnGCD(a) {
1946 var x = (this.s < 0) ? this.negate() : this.clone()
1947 var y = (a.s < 0) ? a.negate() : a.clone()
1948 if (x.compareTo(y) < 0) {
1949 var t = x
1950 x = y
1951 y = t
1952 }
1953 var i = x.getLowestSetBit(),
1954 g = y.getLowestSetBit()
1955 if (g < 0) return x
1956 if (i < g) g = i
1957 if (g > 0) {
1958 x.rShiftTo(g, x)
1959 y.rShiftTo(g, y)
1960 }
1961 while (x.signum() > 0) {
1962 if ((i = x.getLowestSetBit()) > 0) x.rShiftTo(i, x)
1963 if ((i = y.getLowestSetBit()) > 0) y.rShiftTo(i, y)
1964 if (x.compareTo(y) >= 0) {
1965 x.subTo(y, x)
1966 x.rShiftTo(1, x)
1967 } else {
1968 y.subTo(x, y)
1969 y.rShiftTo(1, y)
1970 }
1971 }
1972 if (g > 0) y.lShiftTo(g, y)
1973 return y
1974 }
1975
1976 // (protected) this % n, n < 2^26
1977 function bnpModInt(n) {
1978 if (n <= 0) return 0
1979 var d = this.DV % n,
1980 r = (this.s < 0) ? n - 1 : 0
1981 if (this.t > 0)
1982 if (d == 0) r = this[0] % n
1983 else
1984 for (var i = this.t - 1; i >= 0; --i) r = (d * r + this[i]) % n
1985 return r
1986 }
1987
1988 // (public) 1/this % m (HAC 14.61)
1989 function bnModInverse(m) {
1990 var ac = m.isEven()
1991 if ((this.isEven() && ac) || m.signum() == 0) return BigInteger.ZERO
1992 var u = m.clone(),
1993 v = this.clone()
1994 var a = nbv(1),
1995 b = nbv(0),
1996 c = nbv(0),
1997 d = nbv(1)
1998 while (u.signum() != 0) {
1999 while (u.isEven()) {
2000 u.rShiftTo(1, u)
2001 if (ac) {
2002 if (!a.isEven() || !b.isEven()) {
2003 a.addTo(this, a)
2004 b.subTo(m, b)
2005 }
2006 a.rShiftTo(1, a)
2007 } else if (!b.isEven()) b.subTo(m, b)
2008 b.rShiftTo(1, b)
2009 }
2010 while (v.isEven()) {
2011 v.rShiftTo(1, v)
2012 if (ac) {
2013 if (!c.isEven() || !d.isEven()) {
2014 c.addTo(this, c)
2015 d.subTo(m, d)
2016 }
2017 c.rShiftTo(1, c)
2018 } else if (!d.isEven()) d.subTo(m, d)
2019 d.rShiftTo(1, d)
2020 }
2021 if (u.compareTo(v) >= 0) {
2022 u.subTo(v, u)
2023 if (ac) a.subTo(c, a)
2024 b.subTo(d, b)
2025 } else {
2026 v.subTo(u, v)
2027 if (ac) c.subTo(a, c)
2028 d.subTo(b, d)
2029 }
2030 }
2031 if (v.compareTo(BigInteger.ONE) != 0) return BigInteger.ZERO
2032 if (d.compareTo(m) >= 0) return d.subtract(m)
2033 if (d.signum() < 0) d.addTo(m, d)
2034 else return d
2035 if (d.signum() < 0) return d.add(m)
2036 else return d
2037 }
2038
2039 var lowprimes = [
2040 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71,
2041 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151,
2042 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233,
2043 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317,
2044 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419,
2045 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503,
2046 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607,
2047 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701,
2048 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811,
2049 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911,
2050 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997
2051 ]
2052
2053 var lplim = (1 << 26) / lowprimes[lowprimes.length - 1]
2054
2055 // (public) test primality with certainty >= 1-.5^t
2056 function bnIsProbablePrime(t) {
2057 var i, x = this.abs()
2058 if (x.t == 1 && x[0] <= lowprimes[lowprimes.length - 1]) {
2059 for (i = 0; i < lowprimes.length; ++i)
2060 if (x[0] == lowprimes[i]) return true
2061 return false
2062 }
2063 if (x.isEven()) return false
2064 i = 1
2065 while (i < lowprimes.length) {
2066 var m = lowprimes[i],
2067 j = i + 1
2068 while (j < lowprimes.length && m < lplim) m *= lowprimes[j++]
2069 m = x.modInt(m)
2070 while (i < j) if (m % lowprimes[i++] == 0) return false
2071 }
2072 return x.millerRabin(t)
2073 }
2074
2075 // (protected) true if probably prime (HAC 4.24, Miller-Rabin)
2076 function bnpMillerRabin(t) {
2077 var n1 = this.subtract(BigInteger.ONE)
2078 var k = n1.getLowestSetBit()
2079 if (k <= 0) return false
2080 var r = n1.shiftRight(k)
2081 t = (t + 1) >> 1
2082 if (t > lowprimes.length) t = lowprimes.length
2083 var a = new BigInteger(null)
2084 var j, bases = []
2085 for (var i = 0; i < t; ++i) {
2086 for (;;) {
2087 j = lowprimes[Math.floor(Math.random() * lowprimes.length)]
2088 if (bases.indexOf(j) == -1) break
2089 }
2090 bases.push(j)
2091 a.fromInt(j)
2092 var y = a.modPow(r, this)
2093 if (y.compareTo(BigInteger.ONE) != 0 && y.compareTo(n1) != 0) {
2094 var j = 1
2095 while (j++ < k && y.compareTo(n1) != 0) {
2096 y = y.modPowInt(2, this)
2097 if (y.compareTo(BigInteger.ONE) == 0) return false
2098 }
2099 if (y.compareTo(n1) != 0) return false
2100 }
2101 }
2102 return true
2103 }
2104
2105 // protected
2106 proto.chunkSize = bnpChunkSize
2107 proto.toRadix = bnpToRadix
2108 proto.fromRadix = bnpFromRadix
2109 proto.fromNumber = bnpFromNumber
2110 proto.bitwiseTo = bnpBitwiseTo
2111 proto.changeBit = bnpChangeBit
2112 proto.addTo = bnpAddTo
2113 proto.dMultiply = bnpDMultiply
2114 proto.dAddOffset = bnpDAddOffset
2115 proto.multiplyLowerTo = bnpMultiplyLowerTo
2116 proto.multiplyUpperTo = bnpMultiplyUpperTo
2117 proto.modInt = bnpModInt
2118 proto.millerRabin = bnpMillerRabin
2119
2120 // public
2121 proto.clone = bnClone
2122 proto.intValue = bnIntValue
2123 proto.byteValue = bnByteValue
2124 proto.shortValue = bnShortValue
2125 proto.signum = bnSigNum
2126 proto.toByteArray = bnToByteArray
2127 proto.equals = bnEquals
2128 proto.min = bnMin
2129 proto.max = bnMax
2130 proto.and = bnAnd
2131 proto.or = bnOr
2132 proto.xor = bnXor
2133 proto.andNot = bnAndNot
2134 proto.not = bnNot
2135 proto.shiftLeft = bnShiftLeft
2136 proto.shiftRight = bnShiftRight
2137 proto.getLowestSetBit = bnGetLowestSetBit
2138 proto.bitCount = bnBitCount
2139 proto.testBit = bnTestBit
2140 proto.setBit = bnSetBit
2141 proto.clearBit = bnClearBit
2142 proto.flipBit = bnFlipBit
2143 proto.add = bnAdd
2144 proto.subtract = bnSubtract
2145 proto.multiply = bnMultiply
2146 proto.divide = bnDivide
2147 proto.remainder = bnRemainder
2148 proto.divideAndRemainder = bnDivideAndRemainder
2149 proto.modPow = bnModPow
2150 proto.modInverse = bnModInverse
2151 proto.pow = bnPow
2152 proto.gcd = bnGCD
2153 proto.isProbablePrime = bnIsProbablePrime
2154
2155 // JSBN-specific extension
2156 proto.square = bnSquare
2157
2158 // constants
2159 BigInteger.ZERO = nbv(0)
2160 BigInteger.ONE = nbv(1)
2161 BigInteger.valueOf = nbv
2162
2163 module.exports = BigInteger
2164
2165 },{"../package.json":4}],2:[function(require,module,exports){
2166 (function (Buffer){
2167 // FIXME: Kind of a weird way to throw exceptions, consider removing
2168 var assert = require('assert')
2169 var BigInteger = require('./bigi')
2170
2171 /**
2172 * Turns a byte array into a big integer.
2173 *
2174 * This function will interpret a byte array as a big integer in big
2175 * endian notation.
2176 */
2177 BigInteger.fromByteArrayUnsigned = function(byteArray) {
2178 // BigInteger expects a DER integer conformant byte array
2179 if (byteArray[0] & 0x80) {
2180 return new BigInteger([0].concat(byteArray))
2181 }
2182
2183 return new BigInteger(byteArray)
2184 }
2185
2186 /**
2187 * Returns a byte array representation of the big integer.
2188 *
2189 * This returns the absolute of the contained value in big endian
2190 * form. A value of zero results in an empty array.
2191 */
2192 BigInteger.prototype.toByteArrayUnsigned = function() {
2193 var byteArray = this.toByteArray()
2194 return byteArray[0] === 0 ? byteArray.slice(1) : byteArray
2195 }
2196
2197 BigInteger.fromDERInteger = function(byteArray) {
2198 return new BigInteger(byteArray)
2199 }
2200
2201 /*
2202 * Converts BigInteger to a DER integer representation.
2203 *
2204 * The format for this value uses the most significant bit as a sign
2205 * bit. If the most significant bit is already set and the integer is
2206 * positive, a 0x00 is prepended.
2207 *
2208 * Examples:
2209 *
2210 * 0 => 0x00
2211 * 1 => 0x01
2212 * -1 => 0xff
2213 * 127 => 0x7f
2214 * -127 => 0x81
2215 * 128 => 0x0080
2216 * -128 => 0x80
2217 * 255 => 0x00ff
2218 * -255 => 0xff01
2219 * 16300 => 0x3fac
2220 * -16300 => 0xc054
2221 * 62300 => 0x00f35c
2222 * -62300 => 0xff0ca4
2223 */
2224 BigInteger.prototype.toDERInteger = BigInteger.prototype.toByteArray
2225
2226 BigInteger.fromBuffer = function(buffer) {
2227 // BigInteger expects a DER integer conformant byte array
2228 if (buffer[0] & 0x80) {
2229 var byteArray = Array.prototype.slice.call(buffer)
2230
2231 return new BigInteger([0].concat(byteArray))
2232 }
2233
2234 return new BigInteger(buffer)
2235 }
2236
2237 BigInteger.fromHex = function(hex) {
2238 if (hex === '') return BigInteger.ZERO
2239
2240 assert.equal(hex, hex.match(/^[A-Fa-f0-9]+/), 'Invalid hex string')
2241 assert.equal(hex.length % 2, 0, 'Incomplete hex')
2242 return new BigInteger(hex, 16)
2243 }
2244
2245 BigInteger.prototype.toBuffer = function(size) {
2246 var byteArray = this.toByteArrayUnsigned()
2247 var zeros = []
2248
2249 var padding = size - byteArray.length
2250 while (zeros.length < padding) zeros.push(0)
2251
2252 return new Buffer(zeros.concat(byteArray))
2253 }
2254
2255 BigInteger.prototype.toHex = function(size) {
2256 return this.toBuffer(size).toString('hex')
2257 }
2258
2259 }).call(this,require("buffer").Buffer)
2260 },{"./bigi":1,"assert":5,"buffer":7}],3:[function(require,module,exports){
2261 var BigInteger = require('./bigi')
2262
2263 //addons
2264 require('./convert')
2265
2266 module.exports = BigInteger
2267 },{"./bigi":1,"./convert":2}],4:[function(require,module,exports){
2268 module.exports={
2269 "name": "bigi",
2270 "version": "1.4.0",
2271 "description": "Big integers.",
2272 "keywords": [
2273 "cryptography",
2274 "math",
2275 "bitcoin",
2276 "arbitrary",
2277 "precision",
2278 "arithmetic",
2279 "big",
2280 "integer",
2281 "int",
2282 "number",
2283 "biginteger",
2284 "bigint",
2285 "bignumber",
2286 "decimal",
2287 "float"
2288 ],
2289 "devDependencies": {
2290 "mocha": "^1.20.1",
2291 "jshint": "^2.5.1",
2292 "coveralls": "^2.10.0",
2293 "istanbul": "^0.2.11"
2294 },
2295 "repository": {
2296 "url": "https://github.com/cryptocoinjs/bigi",
2297 "type": "git"
2298 },
2299 "main": "./lib/index.js",
2300 "scripts": {
2301 "test": "_mocha -- test/*.js",
2302 "jshint": "jshint --config jshint.json lib/*.js ; true",
2303 "unit": "mocha",
2304 "coverage": "istanbul cover ./node_modules/.bin/_mocha -- --reporter list test/*.js",
2305 "coveralls": "npm run-script coverage && node ./node_modules/.bin/coveralls < coverage/lcov.info"
2306 },
2307 "dependencies": {},
2308 "testling": {
2309 "files": "test/*.js",
2310 "harness": "mocha",
2311 "browsers": [
2312 "ie/9..latest",
2313 "firefox/latest",
2314 "chrome/latest",
2315 "safari/6.0..latest",
2316 "iphone/6.0..latest",
2317 "android-browser/4.2..latest"
2318 ]
2319 },
2320 "bugs": {
2321 "url": "https://github.com/cryptocoinjs/bigi/issues"
2322 },
2323 "homepage": "https://github.com/cryptocoinjs/bigi",
2324 "_id": "bigi@1.4.0",
2325 "dist": {
2326 "shasum": "90ac1aeac0a531216463bdb58f42c1e05c8407ac",
2327 "tarball": "http://registry.npmjs.org/bigi/-/bigi-1.4.0.tgz"
2328 },
2329 "_from": "bigi@^1.4.0",
2330 "_npmVersion": "1.4.3",
2331 "_npmUser": {
2332 "name": "jp",
2333 "email": "jprichardson@gmail.com"
2334 },
2335 "maintainers": [
2336 {
2337 "name": "jp",
2338 "email": "jprichardson@gmail.com"
2339 },
2340 {
2341 "name": "midnightlightning",
2342 "email": "boydb@midnightdesign.ws"
2343 },
2344 {
2345 "name": "sidazhang",
2346 "email": "sidazhang89@gmail.com"
2347 },
2348 {
2349 "name": "nadav",
2350 "email": "npm@shesek.info"
2351 }
2352 ],
2353 "directories": {},
2354 "_shasum": "90ac1aeac0a531216463bdb58f42c1e05c8407ac",
2355 "_resolved": "https://registry.npmjs.org/bigi/-/bigi-1.4.0.tgz"
2356 }
2357
2358 },{}],5:[function(require,module,exports){
2359 // http://wiki.commonjs.org/wiki/Unit_Testing/1.0
2360 //
2361 // THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!
2362 //
2363 // Originally from narwhal.js (http://narwhaljs.org)
2364 // Copyright (c) 2009 Thomas Robinson <280north.com>
2365 //
2366 // Permission is hereby granted, free of charge, to any person obtaining a copy
2367 // of this software and associated documentation files (the 'Software'), to
2368 // deal in the Software without restriction, including without limitation the
2369 // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
2370 // sell copies of the Software, and to permit persons to whom the Software is
2371 // furnished to do so, subject to the following conditions:
2372 //
2373 // The above copyright notice and this permission notice shall be included in
2374 // all copies or substantial portions of the Software.
2375 //
2376 // THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
2377 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
2378 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
2379 // AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
2380 // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
2381 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
2382
2383 // when used in node, this will actually load the util module we depend on
2384 // versus loading the builtin util module as happens otherwise
2385 // this is a bug in node module loading as far as I am concerned
2386 var util = require('util/');
2387
2388 var pSlice = Array.prototype.slice;
2389 var hasOwn = Object.prototype.hasOwnProperty;
2390
2391 // 1. The assert module provides functions that throw
2392 // AssertionError's when particular conditions are not met. The
2393 // assert module must conform to the following interface.
2394
2395 var assert = module.exports = ok;
2396
2397 // 2. The AssertionError is defined in assert.
2398 // new assert.AssertionError({ message: message,
2399 // actual: actual,
2400 // expected: expected })
2401
2402 assert.AssertionError = function AssertionError(options) {
2403 this.name = 'AssertionError';
2404 this.actual = options.actual;
2405 this.expected = options.expected;
2406 this.operator = options.operator;
2407 if (options.message) {
2408 this.message = options.message;
2409 this.generatedMessage = false;
2410 } else {
2411 this.message = getMessage(this);
2412 this.generatedMessage = true;
2413 }
2414 var stackStartFunction = options.stackStartFunction || fail;
2415
2416 if (Error.captureStackTrace) {
2417 Error.captureStackTrace(this, stackStartFunction);
2418 }
2419 else {
2420 // non v8 browsers so we can have a stacktrace
2421 var err = new Error();
2422 if (err.stack) {
2423 var out = err.stack;
2424
2425 // try to strip useless frames
2426 var fn_name = stackStartFunction.name;
2427 var idx = out.indexOf('\n' + fn_name);
2428 if (idx >= 0) {
2429 // once we have located the function frame
2430 // we need to strip out everything before it (and its line)
2431 var next_line = out.indexOf('\n', idx + 1);
2432 out = out.substring(next_line + 1);
2433 }
2434
2435 this.stack = out;
2436 }
2437 }
2438 };
2439
2440 // assert.AssertionError instanceof Error
2441 util.inherits(assert.AssertionError, Error);
2442
2443 function replacer(key, value) {
2444 if (util.isUndefined(value)) {
2445 return '' + value;
2446 }
2447 if (util.isNumber(value) && !isFinite(value)) {
2448 return value.toString();
2449 }
2450 if (util.isFunction(value) || util.isRegExp(value)) {
2451 return value.toString();
2452 }
2453 return value;
2454 }
2455
2456 function truncate(s, n) {
2457 if (util.isString(s)) {
2458 return s.length < n ? s : s.slice(0, n);
2459 } else {
2460 return s;
2461 }
2462 }
2463
2464 function getMessage(self) {
2465 return truncate(JSON.stringify(self.actual, replacer), 128) + ' ' +
2466 self.operator + ' ' +
2467 truncate(JSON.stringify(self.expected, replacer), 128);
2468 }
2469
2470 // At present only the three keys mentioned above are used and
2471 // understood by the spec. Implementations or sub modules can pass
2472 // other keys to the AssertionError's constructor - they will be
2473 // ignored.
2474
2475 // 3. All of the following functions must throw an AssertionError
2476 // when a corresponding condition is not met, with a message that
2477 // may be undefined if not provided. All assertion methods provide
2478 // both the actual and expected values to the assertion error for
2479 // display purposes.
2480
2481 function fail(actual, expected, message, operator, stackStartFunction) {
2482 throw new assert.AssertionError({
2483 message: message,
2484 actual: actual,
2485 expected: expected,
2486 operator: operator,
2487 stackStartFunction: stackStartFunction
2488 });
2489 }
2490
2491 // EXTENSION! allows for well behaved errors defined elsewhere.
2492 assert.fail = fail;
2493
2494 // 4. Pure assertion tests whether a value is truthy, as determined
2495 // by !!guard.
2496 // assert.ok(guard, message_opt);
2497 // This statement is equivalent to assert.equal(true, !!guard,
2498 // message_opt);. To test strictly for the value true, use
2499 // assert.strictEqual(true, guard, message_opt);.
2500
2501 function ok(value, message) {
2502 if (!value) fail(value, true, message, '==', assert.ok);
2503 }
2504 assert.ok = ok;
2505
2506 // 5. The equality assertion tests shallow, coercive equality with
2507 // ==.
2508 // assert.equal(actual, expected, message_opt);
2509
2510 assert.equal = function equal(actual, expected, message) {
2511 if (actual != expected) fail(actual, expected, message, '==', assert.equal);
2512 };
2513
2514 // 6. The non-equality assertion tests for whether two objects are not equal
2515 // with != assert.notEqual(actual, expected, message_opt);
2516
2517 assert.notEqual = function notEqual(actual, expected, message) {
2518 if (actual == expected) {
2519 fail(actual, expected, message, '!=', assert.notEqual);
2520 }
2521 };
2522
2523 // 7. The equivalence assertion tests a deep equality relation.
2524 // assert.deepEqual(actual, expected, message_opt);
2525
2526 assert.deepEqual = function deepEqual(actual, expected, message) {
2527 if (!_deepEqual(actual, expected)) {
2528 fail(actual, expected, message, 'deepEqual', assert.deepEqual);
2529 }
2530 };
2531
2532 function _deepEqual(actual, expected) {
2533 // 7.1. All identical values are equivalent, as determined by ===.
2534 if (actual === expected) {
2535 return true;
2536
2537 } else if (util.isBuffer(actual) && util.isBuffer(expected)) {
2538 if (actual.length != expected.length) return false;
2539
2540 for (var i = 0; i < actual.length; i++) {
2541 if (actual[i] !== expected[i]) return false;
2542 }
2543
2544 return true;
2545
2546 // 7.2. If the expected value is a Date object, the actual value is
2547 // equivalent if it is also a Date object that refers to the same time.
2548 } else if (util.isDate(actual) && util.isDate(expected)) {
2549 return actual.getTime() === expected.getTime();
2550
2551 // 7.3 If the expected value is a RegExp object, the actual value is
2552 // equivalent if it is also a RegExp object with the same source and
2553 // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).
2554 } else if (util.isRegExp(actual) && util.isRegExp(expected)) {
2555 return actual.source === expected.source &&
2556 actual.global === expected.global &&
2557 actual.multiline === expected.multiline &&
2558 actual.lastIndex === expected.lastIndex &&
2559 actual.ignoreCase === expected.ignoreCase;
2560
2561 // 7.4. Other pairs that do not both pass typeof value == 'object',
2562 // equivalence is determined by ==.
2563 } else if (!util.isObject(actual) && !util.isObject(expected)) {
2564 return actual == expected;
2565
2566 // 7.5 For all other Object pairs, including Array objects, equivalence is
2567 // determined by having the same number of owned properties (as verified
2568 // with Object.prototype.hasOwnProperty.call), the same set of keys
2569 // (although not necessarily the same order), equivalent values for every
2570 // corresponding key, and an identical 'prototype' property. Note: this
2571 // accounts for both named and indexed properties on Arrays.
2572 } else {
2573 return objEquiv(actual, expected);
2574 }
2575 }
2576
2577 function isArguments(object) {
2578 return Object.prototype.toString.call(object) == '[object Arguments]';
2579 }
2580
2581 function objEquiv(a, b) {
2582 if (util.isNullOrUndefined(a) || util.isNullOrUndefined(b))
2583 return false;
2584 // an identical 'prototype' property.
2585 if (a.prototype !== b.prototype) return false;
2586 // if one is a primitive, the other must be same
2587 if (util.isPrimitive(a) || util.isPrimitive(b)) {
2588 return a === b;
2589 }
2590 var aIsArgs = isArguments(a),
2591 bIsArgs = isArguments(b);
2592 if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))
2593 return false;
2594 if (aIsArgs) {
2595 a = pSlice.call(a);
2596 b = pSlice.call(b);
2597 return _deepEqual(a, b);
2598 }
2599 var ka = objectKeys(a),
2600 kb = objectKeys(b),
2601 key, i;
2602 // having the same number of owned properties (keys incorporates
2603 // hasOwnProperty)
2604 if (ka.length != kb.length)
2605 return false;
2606 //the same set of keys (although not necessarily the same order),
2607 ka.sort();
2608 kb.sort();
2609 //~~~cheap key test
2610 for (i = ka.length - 1; i >= 0; i--) {
2611 if (ka[i] != kb[i])
2612 return false;
2613 }
2614 //equivalent values for every corresponding key, and
2615 //~~~possibly expensive deep test
2616 for (i = ka.length - 1; i >= 0; i--) {
2617 key = ka[i];
2618 if (!_deepEqual(a[key], b[key])) return false;
2619 }
2620 return true;
2621 }
2622
2623 // 8. The non-equivalence assertion tests for any deep inequality.
2624 // assert.notDeepEqual(actual, expected, message_opt);
2625
2626 assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
2627 if (_deepEqual(actual, expected)) {
2628 fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
2629 }
2630 };
2631
2632 // 9. The strict equality assertion tests strict equality, as determined by ===.
2633 // assert.strictEqual(actual, expected, message_opt);
2634
2635 assert.strictEqual = function strictEqual(actual, expected, message) {
2636 if (actual !== expected) {
2637 fail(actual, expected, message, '===', assert.strictEqual);
2638 }
2639 };
2640
2641 // 10. The strict non-equality assertion tests for strict inequality, as
2642 // determined by !==. assert.notStrictEqual(actual, expected, message_opt);
2643
2644 assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
2645 if (actual === expected) {
2646 fail(actual, expected, message, '!==', assert.notStrictEqual);
2647 }
2648 };
2649
2650 function expectedException(actual, expected) {
2651 if (!actual || !expected) {
2652 return false;
2653 }
2654
2655 if (Object.prototype.toString.call(expected) == '[object RegExp]') {
2656 return expected.test(actual);
2657 } else if (actual instanceof expected) {
2658 return true;
2659 } else if (expected.call({}, actual) === true) {
2660 return true;
2661 }
2662
2663 return false;
2664 }
2665
2666 function _throws(shouldThrow, block, expected, message) {
2667 var actual;
2668
2669 if (util.isString(expected)) {
2670 message = expected;
2671 expected = null;
2672 }
2673
2674 try {
2675 block();
2676 } catch (e) {
2677 actual = e;
2678 }
2679
2680 message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
2681 (message ? ' ' + message : '.');
2682
2683 if (shouldThrow && !actual) {
2684 fail(actual, expected, 'Missing expected exception' + message);
2685 }
2686
2687 if (!shouldThrow && expectedException(actual, expected)) {
2688 fail(actual, expected, 'Got unwanted exception' + message);
2689 }
2690
2691 if ((shouldThrow && actual && expected &&
2692 !expectedException(actual, expected)) || (!shouldThrow && actual)) {
2693 throw actual;
2694 }
2695 }
2696
2697 // 11. Expected to throw an error:
2698 // assert.throws(block, Error_opt, message_opt);
2699
2700 assert.throws = function(block, /*optional*/error, /*optional*/message) {
2701 _throws.apply(this, [true].concat(pSlice.call(arguments)));
2702 };
2703
2704 // EXTENSION! This is annoying to write outside this module.
2705 assert.doesNotThrow = function(block, /*optional*/message) {
2706 _throws.apply(this, [false].concat(pSlice.call(arguments)));
2707 };
2708
2709 assert.ifError = function(err) { if (err) {throw err;}};
2710
2711 var objectKeys = Object.keys || function (obj) {
2712 var keys = [];
2713 for (var key in obj) {
2714 if (hasOwn.call(obj, key)) keys.push(key);
2715 }
2716 return keys;
2717 };
2718
2719 },{"util/":29}],6:[function(require,module,exports){
2720
2721 },{}],7:[function(require,module,exports){
2722 /*!
2723 * The buffer module from node.js, for the browser.
2724 *
2725 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
2726 * @license MIT
2727 */
2728
2729 var base64 = require('base64-js')
2730 var ieee754 = require('ieee754')
2731 var isArray = require('is-array')
2732
2733 exports.Buffer = Buffer
2734 exports.SlowBuffer = SlowBuffer
2735 exports.INSPECT_MAX_BYTES = 50
2736 Buffer.poolSize = 8192 // not used by this implementation
2737
2738 var rootParent = {}
2739
2740 /**
2741 * If `Buffer.TYPED_ARRAY_SUPPORT`:
2742 * === true Use Uint8Array implementation (fastest)
2743 * === false Use Object implementation (most compatible, even IE6)
2744 *
2745 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
2746 * Opera 11.6+, iOS 4.2+.
2747 *
2748 * Due to various browser bugs, sometimes the Object implementation will be used even
2749 * when the browser supports typed arrays.
2750 *
2751 * Note:
2752 *
2753 * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,
2754 * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.
2755 *
2756 * - Safari 5-7 lacks support for changing the `Object.prototype.constructor` property
2757 * on objects.
2758 *
2759 * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.
2760 *
2761 * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of
2762 * incorrect length in some situations.
2763
2764 * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they
2765 * get the Object implementation, which is slower but behaves correctly.
2766 */
2767 Buffer.TYPED_ARRAY_SUPPORT = (function () {
2768 function Bar () {}
2769 try {
2770 var arr = new Uint8Array(1)
2771 arr.foo = function () { return 42 }
2772 arr.constructor = Bar
2773 return arr.foo() === 42 && // typed array instances can be augmented
2774 arr.constructor === Bar && // constructor can be set
2775 typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`
2776 arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`
2777 } catch (e) {
2778 return false
2779 }
2780 })()
2781
2782 function kMaxLength () {
2783 return Buffer.TYPED_ARRAY_SUPPORT
2784 ? 0x7fffffff
2785 : 0x3fffffff
2786 }
2787
2788 /**
2789 * Class: Buffer
2790 * =============
2791 *
2792 * The Buffer constructor returns instances of `Uint8Array` that are augmented
2793 * with function properties for all the node `Buffer` API functions. We use
2794 * `Uint8Array` so that square bracket notation works as expected -- it returns
2795 * a single octet.
2796 *
2797 * By augmenting the instances, we can avoid modifying the `Uint8Array`
2798 * prototype.
2799 */
2800 function Buffer (arg) {
2801 if (!(this instanceof Buffer)) {
2802 // Avoid going through an ArgumentsAdaptorTrampoline in the common case.
2803 if (arguments.length > 1) return new Buffer(arg, arguments[1])
2804 return new Buffer(arg)
2805 }
2806
2807 this.length = 0
2808 this.parent = undefined
2809
2810 // Common case.
2811 if (typeof arg === 'number') {
2812 return fromNumber(this, arg)
2813 }
2814
2815 // Slightly less common case.
2816 if (typeof arg === 'string') {
2817 return fromString(this, arg, arguments.length > 1 ? arguments[1] : 'utf8')
2818 }
2819
2820 // Unusual.
2821 return fromObject(this, arg)
2822 }
2823
2824 function fromNumber (that, length) {
2825 that = allocate(that, length < 0 ? 0 : checked(length) | 0)
2826 if (!Buffer.TYPED_ARRAY_SUPPORT) {
2827 for (var i = 0; i < length; i++) {
2828 that[i] = 0
2829 }
2830 }
2831 return that
2832 }
2833
2834 function fromString (that, string, encoding) {
2835 if (typeof encoding !== 'string' || encoding === '') encoding = 'utf8'
2836
2837 // Assumption: byteLength() return value is always < kMaxLength.
2838 var length = byteLength(string, encoding) | 0
2839 that = allocate(that, length)
2840
2841 that.write(string, encoding)
2842 return that
2843 }
2844
2845 function fromObject (that, object) {
2846 if (Buffer.isBuffer(object)) return fromBuffer(that, object)
2847
2848 if (isArray(object)) return fromArray(that, object)
2849
2850 if (object == null) {
2851 throw new TypeError('must start with number, buffer, array or string')
2852 }
2853
2854 if (typeof ArrayBuffer !== 'undefined') {
2855 if (object.buffer instanceof ArrayBuffer) {
2856 return fromTypedArray(that, object)
2857 }
2858 if (object instanceof ArrayBuffer) {
2859 return fromArrayBuffer(that, object)
2860 }
2861 }
2862
2863 if (object.length) return fromArrayLike(that, object)
2864
2865 return fromJsonObject(that, object)
2866 }
2867
2868 function fromBuffer (that, buffer) {
2869 var length = checked(buffer.length) | 0
2870 that = allocate(that, length)
2871 buffer.copy(that, 0, 0, length)
2872 return that
2873 }
2874
2875 function fromArray (that, array) {
2876 var length = checked(array.length) | 0
2877 that = allocate(that, length)
2878 for (var i = 0; i < length; i += 1) {
2879 that[i] = array[i] & 255
2880 }
2881 return that
2882 }
2883
2884 // Duplicate of fromArray() to keep fromArray() monomorphic.
2885 function fromTypedArray (that, array) {
2886 var length = checked(array.length) | 0
2887 that = allocate(that, length)
2888 // Truncating the elements is probably not what people expect from typed
2889 // arrays with BYTES_PER_ELEMENT > 1 but it's compatible with the behavior
2890 // of the old Buffer constructor.
2891 for (var i = 0; i < length; i += 1) {
2892 that[i] = array[i] & 255
2893 }
2894 return that
2895 }
2896
2897 function fromArrayBuffer (that, array) {
2898 if (Buffer.TYPED_ARRAY_SUPPORT) {
2899 // Return an augmented `Uint8Array` instance, for best performance
2900 array.byteLength
2901 that = Buffer._augment(new Uint8Array(array))
2902 } else {
2903 // Fallback: Return an object instance of the Buffer class
2904 that = fromTypedArray(that, new Uint8Array(array))
2905 }
2906 return that
2907 }
2908
2909 function fromArrayLike (that, array) {
2910 var length = checked(array.length) | 0
2911 that = allocate(that, length)
2912 for (var i = 0; i < length; i += 1) {
2913 that[i] = array[i] & 255
2914 }
2915 return that
2916 }
2917
2918 // Deserialize { type: 'Buffer', data: [1,2,3,...] } into a Buffer object.
2919 // Returns a zero-length buffer for inputs that don't conform to the spec.
2920 function fromJsonObject (that, object) {
2921 var array
2922 var length = 0
2923
2924 if (object.type === 'Buffer' && isArray(object.data)) {
2925 array = object.data
2926 length = checked(array.length) | 0
2927 }
2928 that = allocate(that, length)
2929
2930 for (var i = 0; i < length; i += 1) {
2931 that[i] = array[i] & 255
2932 }
2933 return that
2934 }
2935
2936 function allocate (that, length) {
2937 if (Buffer.TYPED_ARRAY_SUPPORT) {
2938 // Return an augmented `Uint8Array` instance, for best performance
2939 that = Buffer._augment(new Uint8Array(length))
2940 } else {
2941 // Fallback: Return an object instance of the Buffer class
2942 that.length = length
2943 that._isBuffer = true
2944 }
2945
2946 var fromPool = length !== 0 && length <= Buffer.poolSize >>> 1
2947 if (fromPool) that.parent = rootParent
2948
2949 return that
2950 }
2951
2952 function checked (length) {
2953 // Note: cannot use `length < kMaxLength` here because that fails when
2954 // length is NaN (which is otherwise coerced to zero.)
2955 if (length >= kMaxLength()) {
2956 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
2957 'size: 0x' + kMaxLength().toString(16) + ' bytes')
2958 }
2959 return length | 0
2960 }
2961
2962 function SlowBuffer (subject, encoding) {
2963 if (!(this instanceof SlowBuffer)) return new SlowBuffer(subject, encoding)
2964
2965 var buf = new Buffer(subject, encoding)
2966 delete buf.parent
2967 return buf
2968 }
2969
2970 Buffer.isBuffer = function isBuffer (b) {
2971 return !!(b != null && b._isBuffer)
2972 }
2973
2974 Buffer.compare = function compare (a, b) {
2975 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
2976 throw new TypeError('Arguments must be Buffers')
2977 }
2978
2979 if (a === b) return 0
2980
2981 var x = a.length
2982 var y = b.length
2983
2984 var i = 0
2985 var len = Math.min(x, y)
2986 while (i < len) {
2987 if (a[i] !== b[i]) break
2988
2989 ++i
2990 }
2991
2992 if (i !== len) {
2993 x = a[i]
2994 y = b[i]
2995 }
2996
2997 if (x < y) return -1
2998 if (y < x) return 1
2999 return 0
3000 }
3001
3002 Buffer.isEncoding = function isEncoding (encoding) {
3003 switch (String(encoding).toLowerCase()) {
3004 case 'hex':
3005 case 'utf8':
3006 case 'utf-8':
3007 case 'ascii':
3008 case 'binary':
3009 case 'base64':
3010 case 'raw':
3011 case 'ucs2':
3012 case 'ucs-2':
3013 case 'utf16le':
3014 case 'utf-16le':
3015 return true
3016 default:
3017 return false
3018 }
3019 }
3020
3021 Buffer.concat = function concat (list, length) {
3022 if (!isArray(list)) throw new TypeError('list argument must be an Array of Buffers.')
3023
3024 if (list.length === 0) {
3025 return new Buffer(0)
3026 }
3027
3028 var i
3029 if (length === undefined) {
3030 length = 0
3031 for (i = 0; i < list.length; i++) {
3032 length += list[i].length
3033 }
3034 }
3035
3036 var buf = new Buffer(length)
3037 var pos = 0
3038 for (i = 0; i < list.length; i++) {
3039 var item = list[i]
3040 item.copy(buf, pos)
3041 pos += item.length
3042 }
3043 return buf
3044 }
3045
3046 function byteLength (string, encoding) {
3047 if (typeof string !== 'string') string = '' + string
3048
3049 var len = string.length
3050 if (len === 0) return 0
3051
3052 // Use a for loop to avoid recursion
3053 var loweredCase = false
3054 for (;;) {
3055 switch (encoding) {
3056 case 'ascii':
3057 case 'binary':
3058 // Deprecated
3059 case 'raw':
3060 case 'raws':
3061 return len
3062 case 'utf8':
3063 case 'utf-8':
3064 return utf8ToBytes(string).length
3065 case 'ucs2':
3066 case 'ucs-2':
3067 case 'utf16le':
3068 case 'utf-16le':
3069 return len * 2
3070 case 'hex':
3071 return len >>> 1
3072 case 'base64':
3073 return base64ToBytes(string).length
3074 default:
3075 if (loweredCase) return utf8ToBytes(string).length // assume utf8
3076 encoding = ('' + encoding).toLowerCase()
3077 loweredCase = true
3078 }
3079 }
3080 }
3081 Buffer.byteLength = byteLength
3082
3083 // pre-set for values that may exist in the future
3084 Buffer.prototype.length = undefined
3085 Buffer.prototype.parent = undefined
3086
3087 function slowToString (encoding, start, end) {
3088 var loweredCase = false
3089
3090 start = start | 0
3091 end = end === undefined || end === Infinity ? this.length : end | 0
3092
3093 if (!encoding) encoding = 'utf8'
3094 if (start < 0) start = 0
3095 if (end > this.length) end = this.length
3096 if (end <= start) return ''
3097
3098 while (true) {
3099 switch (encoding) {
3100 case 'hex':
3101 return hexSlice(this, start, end)
3102
3103 case 'utf8':
3104 case 'utf-8':
3105 return utf8Slice(this, start, end)
3106
3107 case 'ascii':
3108 return asciiSlice(this, start, end)
3109
3110 case 'binary':
3111 return binarySlice(this, start, end)
3112
3113 case 'base64':
3114 return base64Slice(this, start, end)
3115
3116 case 'ucs2':
3117 case 'ucs-2':
3118 case 'utf16le':
3119 case 'utf-16le':
3120 return utf16leSlice(this, start, end)
3121
3122 default:
3123 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
3124 encoding = (encoding + '').toLowerCase()
3125 loweredCase = true
3126 }
3127 }
3128 }
3129
3130 Buffer.prototype.toString = function toString () {
3131 var length = this.length | 0
3132 if (length === 0) return ''
3133 if (arguments.length === 0) return utf8Slice(this, 0, length)
3134 return slowToString.apply(this, arguments)
3135 }
3136
3137 Buffer.prototype.equals = function equals (b) {
3138 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
3139 if (this === b) return true
3140 return Buffer.compare(this, b) === 0
3141 }
3142
3143 Buffer.prototype.inspect = function inspect () {
3144 var str = ''
3145 var max = exports.INSPECT_MAX_BYTES
3146 if (this.length > 0) {
3147 str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
3148 if (this.length > max) str += ' ... '
3149 }
3150 return '<Buffer ' + str + '>'
3151 }
3152
3153 Buffer.prototype.compare = function compare (b) {
3154 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
3155 if (this === b) return 0
3156 return Buffer.compare(this, b)
3157 }
3158
3159 Buffer.prototype.indexOf = function indexOf (val, byteOffset) {
3160 if (byteOffset > 0x7fffffff) byteOffset = 0x7fffffff
3161 else if (byteOffset < -0x80000000) byteOffset = -0x80000000
3162 byteOffset >>= 0
3163
3164 if (this.length === 0) return -1
3165 if (byteOffset >= this.length) return -1
3166
3167 // Negative offsets start from the end of the buffer
3168 if (byteOffset < 0) byteOffset = Math.max(this.length + byteOffset, 0)
3169
3170 if (typeof val === 'string') {
3171 if (val.length === 0) return -1 // special case: looking for empty string always fails
3172 return String.prototype.indexOf.call(this, val, byteOffset)
3173 }
3174 if (Buffer.isBuffer(val)) {
3175 return arrayIndexOf(this, val, byteOffset)
3176 }
3177 if (typeof val === 'number') {
3178 if (Buffer.TYPED_ARRAY_SUPPORT && Uint8Array.prototype.indexOf === 'function') {
3179 return Uint8Array.prototype.indexOf.call(this, val, byteOffset)
3180 }
3181 return arrayIndexOf(this, [ val ], byteOffset)
3182 }
3183
3184 function arrayIndexOf (arr, val, byteOffset) {
3185 var foundIndex = -1
3186 for (var i = 0; byteOffset + i < arr.length; i++) {
3187 if (arr[byteOffset + i] === val[foundIndex === -1 ? 0 : i - foundIndex]) {
3188 if (foundIndex === -1) foundIndex = i
3189 if (i - foundIndex + 1 === val.length) return byteOffset + foundIndex
3190 } else {
3191 foundIndex = -1
3192 }
3193 }
3194 return -1
3195 }
3196
3197 throw new TypeError('val must be string, number or Buffer')
3198 }
3199
3200 // `get` is deprecated
3201 Buffer.prototype.get = function get (offset) {
3202 console.log('.get() is deprecated. Access using array indexes instead.')
3203 return this.readUInt8(offset)
3204 }
3205
3206 // `set` is deprecated
3207 Buffer.prototype.set = function set (v, offset) {
3208 console.log('.set() is deprecated. Access using array indexes instead.')
3209 return this.writeUInt8(v, offset)
3210 }
3211
3212 function hexWrite (buf, string, offset, length) {
3213 offset = Number(offset) || 0
3214 var remaining = buf.length - offset
3215 if (!length) {
3216 length = remaining
3217 } else {
3218 length = Number(length)
3219 if (length > remaining) {
3220 length = remaining
3221 }
3222 }
3223
3224 // must be an even number of digits
3225 var strLen = string.length
3226 if (strLen % 2 !== 0) throw new Error('Invalid hex string')
3227
3228 if (length > strLen / 2) {
3229 length = strLen / 2
3230 }
3231 for (var i = 0; i < length; i++) {
3232 var parsed = parseInt(string.substr(i * 2, 2), 16)
3233 if (isNaN(parsed)) throw new Error('Invalid hex string')
3234 buf[offset + i] = parsed
3235 }
3236 return i
3237 }
3238
3239 function utf8Write (buf, string, offset, length) {
3240 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
3241 }
3242
3243 function asciiWrite (buf, string, offset, length) {
3244 return blitBuffer(asciiToBytes(string), buf, offset, length)
3245 }
3246
3247 function binaryWrite (buf, string, offset, length) {
3248 return asciiWrite(buf, string, offset, length)
3249 }
3250
3251 function base64Write (buf, string, offset, length) {
3252 return blitBuffer(base64ToBytes(string), buf, offset, length)
3253 }
3254
3255 function ucs2Write (buf, string, offset, length) {
3256 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
3257 }
3258
3259 Buffer.prototype.write = function write (string, offset, length, encoding) {
3260 // Buffer#write(string)
3261 if (offset === undefined) {
3262 encoding = 'utf8'
3263 length = this.length
3264 offset = 0
3265 // Buffer#write(string, encoding)
3266 } else if (length === undefined && typeof offset === 'string') {
3267 encoding = offset
3268 length = this.length
3269 offset = 0
3270 // Buffer#write(string, offset[, length][, encoding])
3271 } else if (isFinite(offset)) {
3272 offset = offset | 0
3273 if (isFinite(length)) {
3274 length = length | 0
3275 if (encoding === undefined) encoding = 'utf8'
3276 } else {
3277 encoding = length
3278 length = undefined
3279 }
3280 // legacy write(string, encoding, offset, length) - remove in v0.13
3281 } else {
3282 var swap = encoding
3283 encoding = offset
3284 offset = length | 0
3285 length = swap
3286 }
3287
3288 var remaining = this.length - offset
3289 if (length === undefined || length > remaining) length = remaining
3290
3291 if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
3292 throw new RangeError('attempt to write outside buffer bounds')
3293 }
3294
3295 if (!encoding) encoding = 'utf8'
3296
3297 var loweredCase = false
3298 for (;;) {
3299 switch (encoding) {
3300 case 'hex':
3301 return hexWrite(this, string, offset, length)
3302
3303 case 'utf8':
3304 case 'utf-8':
3305 return utf8Write(this, string, offset, length)
3306
3307 case 'ascii':
3308 return asciiWrite(this, string, offset, length)
3309
3310 case 'binary':
3311 return binaryWrite(this, string, offset, length)
3312
3313 case 'base64':
3314 // Warning: maxLength not taken into account in base64Write
3315 return base64Write(this, string, offset, length)
3316
3317 case 'ucs2':
3318 case 'ucs-2':
3319 case 'utf16le':
3320 case 'utf-16le':
3321 return ucs2Write(this, string, offset, length)
3322
3323 default:
3324 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
3325 encoding = ('' + encoding).toLowerCase()
3326 loweredCase = true
3327 }
3328 }
3329 }
3330
3331 Buffer.prototype.toJSON = function toJSON () {
3332 return {
3333 type: 'Buffer',
3334 data: Array.prototype.slice.call(this._arr || this, 0)
3335 }
3336 }
3337
3338 function base64Slice (buf, start, end) {
3339 if (start === 0 && end === buf.length) {
3340 return base64.fromByteArray(buf)
3341 } else {
3342 return base64.fromByteArray(buf.slice(start, end))
3343 }
3344 }
3345
3346 function utf8Slice (buf, start, end) {
3347 end = Math.min(buf.length, end)
3348 var firstByte
3349 var secondByte
3350 var thirdByte
3351 var fourthByte
3352 var bytesPerSequence
3353 var tempCodePoint
3354 var codePoint
3355 var res = []
3356 var i = start
3357
3358 for (; i < end; i += bytesPerSequence) {
3359 firstByte = buf[i]
3360 codePoint = 0xFFFD
3361
3362 if (firstByte > 0xEF) {
3363 bytesPerSequence = 4
3364 } else if (firstByte > 0xDF) {
3365 bytesPerSequence = 3
3366 } else if (firstByte > 0xBF) {
3367 bytesPerSequence = 2
3368 } else {
3369 bytesPerSequence = 1
3370 }
3371
3372 if (i + bytesPerSequence <= end) {
3373 switch (bytesPerSequence) {
3374 case 1:
3375 if (firstByte < 0x80) {
3376 codePoint = firstByte
3377 }
3378 break
3379 case 2:
3380 secondByte = buf[i + 1]
3381 if ((secondByte & 0xC0) === 0x80) {
3382 tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
3383 if (tempCodePoint > 0x7F) {
3384 codePoint = tempCodePoint
3385 }
3386 }
3387 break
3388 case 3:
3389 secondByte = buf[i + 1]
3390 thirdByte = buf[i + 2]
3391 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
3392 tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
3393 if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
3394 codePoint = tempCodePoint
3395 }
3396 }
3397 break
3398 case 4:
3399 secondByte = buf[i + 1]
3400 thirdByte = buf[i + 2]
3401 fourthByte = buf[i + 3]
3402 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
3403 tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
3404 if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
3405 codePoint = tempCodePoint
3406 }
3407 }
3408 }
3409 }
3410
3411 if (codePoint === 0xFFFD) {
3412 // we generated an invalid codePoint so make sure to only advance by 1 byte
3413 bytesPerSequence = 1
3414 } else if (codePoint > 0xFFFF) {
3415 // encode to utf16 (surrogate pair dance)
3416 codePoint -= 0x10000
3417 res.push(codePoint >>> 10 & 0x3FF | 0xD800)
3418 codePoint = 0xDC00 | codePoint & 0x3FF
3419 }
3420
3421 res.push(codePoint)
3422 }
3423
3424 return String.fromCharCode.apply(String, res)
3425 }
3426
3427 function asciiSlice (buf, start, end) {
3428 var ret = ''
3429 end = Math.min(buf.length, end)
3430
3431 for (var i = start; i < end; i++) {
3432 ret += String.fromCharCode(buf[i] & 0x7F)
3433 }
3434 return ret
3435 }
3436
3437 function binarySlice (buf, start, end) {
3438 var ret = ''
3439 end = Math.min(buf.length, end)
3440
3441 for (var i = start; i < end; i++) {
3442 ret += String.fromCharCode(buf[i])
3443 }
3444 return ret
3445 }
3446
3447 function hexSlice (buf, start, end) {
3448 var len = buf.length
3449
3450 if (!start || start < 0) start = 0
3451 if (!end || end < 0 || end > len) end = len
3452
3453 var out = ''
3454 for (var i = start; i < end; i++) {
3455 out += toHex(buf[i])
3456 }
3457 return out
3458 }
3459
3460 function utf16leSlice (buf, start, end) {
3461 var bytes = buf.slice(start, end)
3462 var res = ''
3463 for (var i = 0; i < bytes.length; i += 2) {
3464 res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)
3465 }
3466 return res
3467 }
3468
3469 Buffer.prototype.slice = function slice (start, end) {
3470 var len = this.length
3471 start = ~~start
3472 end = end === undefined ? len : ~~end
3473
3474 if (start < 0) {
3475 start += len
3476 if (start < 0) start = 0
3477 } else if (start > len) {
3478 start = len
3479 }
3480
3481 if (end < 0) {
3482 end += len
3483 if (end < 0) end = 0
3484 } else if (end > len) {
3485 end = len
3486 }
3487
3488 if (end < start) end = start
3489
3490 var newBuf
3491 if (Buffer.TYPED_ARRAY_SUPPORT) {
3492 newBuf = Buffer._augment(this.subarray(start, end))
3493 } else {
3494 var sliceLen = end - start
3495 newBuf = new Buffer(sliceLen, undefined)
3496 for (var i = 0; i < sliceLen; i++) {
3497 newBuf[i] = this[i + start]
3498 }
3499 }
3500
3501 if (newBuf.length) newBuf.parent = this.parent || this
3502
3503 return newBuf
3504 }
3505
3506 /*
3507 * Need to make sure that buffer isn't trying to write out of bounds.
3508 */
3509 function checkOffset (offset, ext, length) {
3510 if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
3511 if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
3512 }
3513
3514 Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
3515 offset = offset | 0
3516 byteLength = byteLength | 0
3517 if (!noAssert) checkOffset(offset, byteLength, this.length)
3518
3519 var val = this[offset]
3520 var mul = 1
3521 var i = 0
3522 while (++i < byteLength && (mul *= 0x100)) {
3523 val += this[offset + i] * mul
3524 }
3525
3526 return val
3527 }
3528
3529 Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
3530 offset = offset | 0
3531 byteLength = byteLength | 0
3532 if (!noAssert) {
3533 checkOffset(offset, byteLength, this.length)
3534 }
3535
3536 var val = this[offset + --byteLength]
3537 var mul = 1
3538 while (byteLength > 0 && (mul *= 0x100)) {
3539 val += this[offset + --byteLength] * mul
3540 }
3541
3542 return val
3543 }
3544
3545 Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
3546 if (!noAssert) checkOffset(offset, 1, this.length)
3547 return this[offset]
3548 }
3549
3550 Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
3551 if (!noAssert) checkOffset(offset, 2, this.length)
3552 return this[offset] | (this[offset + 1] << 8)
3553 }
3554
3555 Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
3556 if (!noAssert) checkOffset(offset, 2, this.length)
3557 return (this[offset] << 8) | this[offset + 1]
3558 }
3559
3560 Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
3561 if (!noAssert) checkOffset(offset, 4, this.length)
3562
3563 return ((this[offset]) |
3564 (this[offset + 1] << 8) |
3565 (this[offset + 2] << 16)) +
3566 (this[offset + 3] * 0x1000000)
3567 }
3568
3569 Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
3570 if (!noAssert) checkOffset(offset, 4, this.length)
3571
3572 return (this[offset] * 0x1000000) +
3573 ((this[offset + 1] << 16) |
3574 (this[offset + 2] << 8) |
3575 this[offset + 3])
3576 }
3577
3578 Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
3579 offset = offset | 0
3580 byteLength = byteLength | 0
3581 if (!noAssert) checkOffset(offset, byteLength, this.length)
3582
3583 var val = this[offset]
3584 var mul = 1
3585 var i = 0
3586 while (++i < byteLength && (mul *= 0x100)) {
3587 val += this[offset + i] * mul
3588 }
3589 mul *= 0x80
3590
3591 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
3592
3593 return val
3594 }
3595
3596 Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
3597 offset = offset | 0
3598 byteLength = byteLength | 0
3599 if (!noAssert) checkOffset(offset, byteLength, this.length)
3600
3601 var i = byteLength
3602 var mul = 1
3603 var val = this[offset + --i]
3604 while (i > 0 && (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.readInt8 = function readInt8 (offset, noAssert) {
3615 if (!noAssert) checkOffset(offset, 1, this.length)
3616 if (!(this[offset] & 0x80)) return (this[offset])
3617 return ((0xff - this[offset] + 1) * -1)
3618 }
3619
3620 Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
3621 if (!noAssert) checkOffset(offset, 2, this.length)
3622 var val = this[offset] | (this[offset + 1] << 8)
3623 return (val & 0x8000) ? val | 0xFFFF0000 : val
3624 }
3625
3626 Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
3627 if (!noAssert) checkOffset(offset, 2, this.length)
3628 var val = this[offset + 1] | (this[offset] << 8)
3629 return (val & 0x8000) ? val | 0xFFFF0000 : val
3630 }
3631
3632 Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
3633 if (!noAssert) checkOffset(offset, 4, this.length)
3634
3635 return (this[offset]) |
3636 (this[offset + 1] << 8) |
3637 (this[offset + 2] << 16) |
3638 (this[offset + 3] << 24)
3639 }
3640
3641 Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
3642 if (!noAssert) checkOffset(offset, 4, this.length)
3643
3644 return (this[offset] << 24) |
3645 (this[offset + 1] << 16) |
3646 (this[offset + 2] << 8) |
3647 (this[offset + 3])
3648 }
3649
3650 Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
3651 if (!noAssert) checkOffset(offset, 4, this.length)
3652 return ieee754.read(this, offset, true, 23, 4)
3653 }
3654
3655 Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
3656 if (!noAssert) checkOffset(offset, 4, this.length)
3657 return ieee754.read(this, offset, false, 23, 4)
3658 }
3659
3660 Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
3661 if (!noAssert) checkOffset(offset, 8, this.length)
3662 return ieee754.read(this, offset, true, 52, 8)
3663 }
3664
3665 Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
3666 if (!noAssert) checkOffset(offset, 8, this.length)
3667 return ieee754.read(this, offset, false, 52, 8)
3668 }
3669
3670 function checkInt (buf, value, offset, ext, max, min) {
3671 if (!Buffer.isBuffer(buf)) throw new TypeError('buffer must be a Buffer instance')
3672 if (value > max || value < min) throw new RangeError('value is out of bounds')
3673 if (offset + ext > buf.length) throw new RangeError('index out of range')
3674 }
3675
3676 Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
3677 value = +value
3678 offset = offset | 0
3679 byteLength = byteLength | 0
3680 if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0)
3681
3682 var mul = 1
3683 var i = 0
3684 this[offset] = value & 0xFF
3685 while (++i < byteLength && (mul *= 0x100)) {
3686 this[offset + i] = (value / mul) & 0xFF
3687 }
3688
3689 return offset + byteLength
3690 }
3691
3692 Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
3693 value = +value
3694 offset = offset | 0
3695 byteLength = byteLength | 0
3696 if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0)
3697
3698 var i = byteLength - 1
3699 var mul = 1
3700 this[offset + i] = value & 0xFF
3701 while (--i >= 0 && (mul *= 0x100)) {
3702 this[offset + i] = (value / mul) & 0xFF
3703 }
3704
3705 return offset + byteLength
3706 }
3707
3708 Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
3709 value = +value
3710 offset = offset | 0
3711 if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
3712 if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
3713 this[offset] = value
3714 return offset + 1
3715 }
3716
3717 function objectWriteUInt16 (buf, value, offset, littleEndian) {
3718 if (value < 0) value = 0xffff + value + 1
3719 for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; i++) {
3720 buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>
3721 (littleEndian ? i : 1 - i) * 8
3722 }
3723 }
3724
3725 Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
3726 value = +value
3727 offset = offset | 0
3728 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
3729 if (Buffer.TYPED_ARRAY_SUPPORT) {
3730 this[offset] = value
3731 this[offset + 1] = (value >>> 8)
3732 } else {
3733 objectWriteUInt16(this, value, offset, true)
3734 }
3735 return offset + 2
3736 }
3737
3738 Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
3739 value = +value
3740 offset = offset | 0
3741 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
3742 if (Buffer.TYPED_ARRAY_SUPPORT) {
3743 this[offset] = (value >>> 8)
3744 this[offset + 1] = value
3745 } else {
3746 objectWriteUInt16(this, value, offset, false)
3747 }
3748 return offset + 2
3749 }
3750
3751 function objectWriteUInt32 (buf, value, offset, littleEndian) {
3752 if (value < 0) value = 0xffffffff + value + 1
3753 for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; i++) {
3754 buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff
3755 }
3756 }
3757
3758 Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
3759 value = +value
3760 offset = offset | 0
3761 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
3762 if (Buffer.TYPED_ARRAY_SUPPORT) {
3763 this[offset + 3] = (value >>> 24)
3764 this[offset + 2] = (value >>> 16)
3765 this[offset + 1] = (value >>> 8)
3766 this[offset] = value
3767 } else {
3768 objectWriteUInt32(this, value, offset, true)
3769 }
3770 return offset + 4
3771 }
3772
3773 Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
3774 value = +value
3775 offset = offset | 0
3776 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
3777 if (Buffer.TYPED_ARRAY_SUPPORT) {
3778 this[offset] = (value >>> 24)
3779 this[offset + 1] = (value >>> 16)
3780 this[offset + 2] = (value >>> 8)
3781 this[offset + 3] = value
3782 } else {
3783 objectWriteUInt32(this, value, offset, false)
3784 }
3785 return offset + 4
3786 }
3787
3788 Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
3789 value = +value
3790 offset = offset | 0
3791 if (!noAssert) {
3792 var limit = Math.pow(2, 8 * byteLength - 1)
3793
3794 checkInt(this, value, offset, byteLength, limit - 1, -limit)
3795 }
3796
3797 var i = 0
3798 var mul = 1
3799 var sub = value < 0 ? 1 : 0
3800 this[offset] = value & 0xFF
3801 while (++i < byteLength && (mul *= 0x100)) {
3802 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
3803 }
3804
3805 return offset + byteLength
3806 }
3807
3808 Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
3809 value = +value
3810 offset = offset | 0
3811 if (!noAssert) {
3812 var limit = Math.pow(2, 8 * byteLength - 1)
3813
3814 checkInt(this, value, offset, byteLength, limit - 1, -limit)
3815 }
3816
3817 var i = byteLength - 1
3818 var mul = 1
3819 var sub = value < 0 ? 1 : 0
3820 this[offset + i] = value & 0xFF
3821 while (--i >= 0 && (mul *= 0x100)) {
3822 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
3823 }
3824
3825 return offset + byteLength
3826 }
3827
3828 Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
3829 value = +value
3830 offset = offset | 0
3831 if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
3832 if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
3833 if (value < 0) value = 0xff + value + 1
3834 this[offset] = value
3835 return offset + 1
3836 }
3837
3838 Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
3839 value = +value
3840 offset = offset | 0
3841 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
3842 if (Buffer.TYPED_ARRAY_SUPPORT) {
3843 this[offset] = value
3844 this[offset + 1] = (value >>> 8)
3845 } else {
3846 objectWriteUInt16(this, value, offset, true)
3847 }
3848 return offset + 2
3849 }
3850
3851 Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
3852 value = +value
3853 offset = offset | 0
3854 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
3855 if (Buffer.TYPED_ARRAY_SUPPORT) {
3856 this[offset] = (value >>> 8)
3857 this[offset + 1] = value
3858 } else {
3859 objectWriteUInt16(this, value, offset, false)
3860 }
3861 return offset + 2
3862 }
3863
3864 Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
3865 value = +value
3866 offset = offset | 0
3867 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
3868 if (Buffer.TYPED_ARRAY_SUPPORT) {
3869 this[offset] = value
3870 this[offset + 1] = (value >>> 8)
3871 this[offset + 2] = (value >>> 16)
3872 this[offset + 3] = (value >>> 24)
3873 } else {
3874 objectWriteUInt32(this, value, offset, true)
3875 }
3876 return offset + 4
3877 }
3878
3879 Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
3880 value = +value
3881 offset = offset | 0
3882 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
3883 if (value < 0) value = 0xffffffff + value + 1
3884 if (Buffer.TYPED_ARRAY_SUPPORT) {
3885 this[offset] = (value >>> 24)
3886 this[offset + 1] = (value >>> 16)
3887 this[offset + 2] = (value >>> 8)
3888 this[offset + 3] = value
3889 } else {
3890 objectWriteUInt32(this, value, offset, false)
3891 }
3892 return offset + 4
3893 }
3894
3895 function checkIEEE754 (buf, value, offset, ext, max, min) {
3896 if (value > max || value < min) throw new RangeError('value is out of bounds')
3897 if (offset + ext > buf.length) throw new RangeError('index out of range')
3898 if (offset < 0) throw new RangeError('index out of range')
3899 }
3900
3901 function writeFloat (buf, value, offset, littleEndian, noAssert) {
3902 if (!noAssert) {
3903 checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
3904 }
3905 ieee754.write(buf, value, offset, littleEndian, 23, 4)
3906 return offset + 4
3907 }
3908
3909 Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
3910 return writeFloat(this, value, offset, true, noAssert)
3911 }
3912
3913 Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
3914 return writeFloat(this, value, offset, false, noAssert)
3915 }
3916
3917 function writeDouble (buf, value, offset, littleEndian, noAssert) {
3918 if (!noAssert) {
3919 checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
3920 }
3921 ieee754.write(buf, value, offset, littleEndian, 52, 8)
3922 return offset + 8
3923 }
3924
3925 Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
3926 return writeDouble(this, value, offset, true, noAssert)
3927 }
3928
3929 Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
3930 return writeDouble(this, value, offset, false, noAssert)
3931 }
3932
3933 // copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
3934 Buffer.prototype.copy = function copy (target, targetStart, start, end) {
3935 if (!start) start = 0
3936 if (!end && end !== 0) end = this.length
3937 if (targetStart >= target.length) targetStart = target.length
3938 if (!targetStart) targetStart = 0
3939 if (end > 0 && end < start) end = start
3940
3941 // Copy 0 bytes; we're done
3942 if (end === start) return 0
3943 if (target.length === 0 || this.length === 0) return 0
3944
3945 // Fatal error conditions
3946 if (targetStart < 0) {
3947 throw new RangeError('targetStart out of bounds')
3948 }
3949 if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
3950 if (end < 0) throw new RangeError('sourceEnd out of bounds')
3951
3952 // Are we oob?
3953 if (end > this.length) end = this.length
3954 if (target.length - targetStart < end - start) {
3955 end = target.length - targetStart + start
3956 }
3957
3958 var len = end - start
3959 var i
3960
3961 if (this === target && start < targetStart && targetStart < end) {
3962 // descending copy from end
3963 for (i = len - 1; i >= 0; i--) {
3964 target[i + targetStart] = this[i + start]
3965 }
3966 } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {
3967 // ascending copy from start
3968 for (i = 0; i < len; i++) {
3969 target[i + targetStart] = this[i + start]
3970 }
3971 } else {
3972 target._set(this.subarray(start, start + len), targetStart)
3973 }
3974
3975 return len
3976 }
3977
3978 // fill(value, start=0, end=buffer.length)
3979 Buffer.prototype.fill = function fill (value, start, end) {
3980 if (!value) value = 0
3981 if (!start) start = 0
3982 if (!end) end = this.length
3983
3984 if (end < start) throw new RangeError('end < start')
3985
3986 // Fill 0 bytes; we're done
3987 if (end === start) return
3988 if (this.length === 0) return
3989
3990 if (start < 0 || start >= this.length) throw new RangeError('start out of bounds')
3991 if (end < 0 || end > this.length) throw new RangeError('end out of bounds')
3992
3993 var i
3994 if (typeof value === 'number') {
3995 for (i = start; i < end; i++) {
3996 this[i] = value
3997 }
3998 } else {
3999 var bytes = utf8ToBytes(value.toString())
4000 var len = bytes.length
4001 for (i = start; i < end; i++) {
4002 this[i] = bytes[i % len]
4003 }
4004 }
4005
4006 return this
4007 }
4008
4009 /**
4010 * Creates a new `ArrayBuffer` with the *copied* memory of the buffer instance.
4011 * Added in Node 0.12. Only available in browsers that support ArrayBuffer.
4012 */
4013 Buffer.prototype.toArrayBuffer = function toArrayBuffer () {
4014 if (typeof Uint8Array !== 'undefined') {
4015 if (Buffer.TYPED_ARRAY_SUPPORT) {
4016 return (new Buffer(this)).buffer
4017 } else {
4018 var buf = new Uint8Array(this.length)
4019 for (var i = 0, len = buf.length; i < len; i += 1) {
4020 buf[i] = this[i]
4021 }
4022 return buf.buffer
4023 }
4024 } else {
4025 throw new TypeError('Buffer.toArrayBuffer not supported in this browser')
4026 }
4027 }
4028
4029 // HELPER FUNCTIONS
4030 // ================
4031
4032 var BP = Buffer.prototype
4033
4034 /**
4035 * Augment a Uint8Array *instance* (not the Uint8Array class!) with Buffer methods
4036 */
4037 Buffer._augment = function _augment (arr) {
4038 arr.constructor = Buffer
4039 arr._isBuffer = true
4040
4041 // save reference to original Uint8Array set method before overwriting
4042 arr._set = arr.set
4043
4044 // deprecated
4045 arr.get = BP.get
4046 arr.set = BP.set
4047
4048 arr.write = BP.write
4049 arr.toString = BP.toString
4050 arr.toLocaleString = BP.toString
4051 arr.toJSON = BP.toJSON
4052 arr.equals = BP.equals
4053 arr.compare = BP.compare
4054 arr.indexOf = BP.indexOf
4055 arr.copy = BP.copy
4056 arr.slice = BP.slice
4057 arr.readUIntLE = BP.readUIntLE
4058 arr.readUIntBE = BP.readUIntBE
4059 arr.readUInt8 = BP.readUInt8
4060 arr.readUInt16LE = BP.readUInt16LE
4061 arr.readUInt16BE = BP.readUInt16BE
4062 arr.readUInt32LE = BP.readUInt32LE
4063 arr.readUInt32BE = BP.readUInt32BE
4064 arr.readIntLE = BP.readIntLE
4065 arr.readIntBE = BP.readIntBE
4066 arr.readInt8 = BP.readInt8
4067 arr.readInt16LE = BP.readInt16LE
4068 arr.readInt16BE = BP.readInt16BE
4069 arr.readInt32LE = BP.readInt32LE
4070 arr.readInt32BE = BP.readInt32BE
4071 arr.readFloatLE = BP.readFloatLE
4072 arr.readFloatBE = BP.readFloatBE
4073 arr.readDoubleLE = BP.readDoubleLE
4074 arr.readDoubleBE = BP.readDoubleBE
4075 arr.writeUInt8 = BP.writeUInt8
4076 arr.writeUIntLE = BP.writeUIntLE
4077 arr.writeUIntBE = BP.writeUIntBE
4078 arr.writeUInt16LE = BP.writeUInt16LE
4079 arr.writeUInt16BE = BP.writeUInt16BE
4080 arr.writeUInt32LE = BP.writeUInt32LE
4081 arr.writeUInt32BE = BP.writeUInt32BE
4082 arr.writeIntLE = BP.writeIntLE
4083 arr.writeIntBE = BP.writeIntBE
4084 arr.writeInt8 = BP.writeInt8
4085 arr.writeInt16LE = BP.writeInt16LE
4086 arr.writeInt16BE = BP.writeInt16BE
4087 arr.writeInt32LE = BP.writeInt32LE
4088 arr.writeInt32BE = BP.writeInt32BE
4089 arr.writeFloatLE = BP.writeFloatLE
4090 arr.writeFloatBE = BP.writeFloatBE
4091 arr.writeDoubleLE = BP.writeDoubleLE
4092 arr.writeDoubleBE = BP.writeDoubleBE
4093 arr.fill = BP.fill
4094 arr.inspect = BP.inspect
4095 arr.toArrayBuffer = BP.toArrayBuffer
4096
4097 return arr
4098 }
4099
4100 var INVALID_BASE64_RE = /[^+\/0-9A-Za-z-_]/g
4101
4102 function base64clean (str) {
4103 // Node strips out invalid characters like \n and \t from the string, base64-js does not
4104 str = stringtrim(str).replace(INVALID_BASE64_RE, '')
4105 // Node converts strings with length < 2 to ''
4106 if (str.length < 2) return ''
4107 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
4108 while (str.length % 4 !== 0) {
4109 str = str + '='
4110 }
4111 return str
4112 }
4113
4114 function stringtrim (str) {
4115 if (str.trim) return str.trim()
4116 return str.replace(/^\s+|\s+$/g, '')
4117 }
4118
4119 function toHex (n) {
4120 if (n < 16) return '0' + n.toString(16)
4121 return n.toString(16)
4122 }
4123
4124 function utf8ToBytes (string, units) {
4125 units = units || Infinity
4126 var codePoint
4127 var length = string.length
4128 var leadSurrogate = null
4129 var bytes = []
4130
4131 for (var i = 0; i < length; i++) {
4132 codePoint = string.charCodeAt(i)
4133
4134 // is surrogate component
4135 if (codePoint > 0xD7FF && codePoint < 0xE000) {
4136 // last char was a lead
4137 if (!leadSurrogate) {
4138 // no lead yet
4139 if (codePoint > 0xDBFF) {
4140 // unexpected trail
4141 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
4142 continue
4143
4144 } else if (i + 1 === length) {
4145 // unpaired lead
4146 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
4147 continue
4148 }
4149
4150 // valid lead
4151 leadSurrogate = codePoint
4152
4153 continue
4154 }
4155
4156 // 2 leads in a row
4157 if (codePoint < 0xDC00) {
4158 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
4159 leadSurrogate = codePoint
4160 continue
4161 }
4162
4163 // valid surrogate pair
4164 codePoint = leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00 | 0x10000
4165
4166 } else if (leadSurrogate) {
4167 // valid bmp char, but last char was a lead
4168 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
4169 }
4170
4171 leadSurrogate = null
4172
4173 // encode utf8
4174 if (codePoint < 0x80) {
4175 if ((units -= 1) < 0) break
4176 bytes.push(codePoint)
4177 } else if (codePoint < 0x800) {
4178 if ((units -= 2) < 0) break
4179 bytes.push(
4180 codePoint >> 0x6 | 0xC0,
4181 codePoint & 0x3F | 0x80
4182 )
4183 } else if (codePoint < 0x10000) {
4184 if ((units -= 3) < 0) break
4185 bytes.push(
4186 codePoint >> 0xC | 0xE0,
4187 codePoint >> 0x6 & 0x3F | 0x80,
4188 codePoint & 0x3F | 0x80
4189 )
4190 } else if (codePoint < 0x110000) {
4191 if ((units -= 4) < 0) break
4192 bytes.push(
4193 codePoint >> 0x12 | 0xF0,
4194 codePoint >> 0xC & 0x3F | 0x80,
4195 codePoint >> 0x6 & 0x3F | 0x80,
4196 codePoint & 0x3F | 0x80
4197 )
4198 } else {
4199 throw new Error('Invalid code point')
4200 }
4201 }
4202
4203 return bytes
4204 }
4205
4206 function asciiToBytes (str) {
4207 var byteArray = []
4208 for (var i = 0; i < str.length; i++) {
4209 // Node's code seems to be doing this and not & 0x7F..
4210 byteArray.push(str.charCodeAt(i) & 0xFF)
4211 }
4212 return byteArray
4213 }
4214
4215 function utf16leToBytes (str, units) {
4216 var c, hi, lo
4217 var byteArray = []
4218 for (var i = 0; i < str.length; i++) {
4219 if ((units -= 2) < 0) break
4220
4221 c = str.charCodeAt(i)
4222 hi = c >> 8
4223 lo = c % 256
4224 byteArray.push(lo)
4225 byteArray.push(hi)
4226 }
4227
4228 return byteArray
4229 }
4230
4231 function base64ToBytes (str) {
4232 return base64.toByteArray(base64clean(str))
4233 }
4234
4235 function blitBuffer (src, dst, offset, length) {
4236 for (var i = 0; i < length; i++) {
4237 if ((i + offset >= dst.length) || (i >= src.length)) break
4238 dst[i + offset] = src[i]
4239 }
4240 return i
4241 }
4242
4243 },{"base64-js":8,"ieee754":9,"is-array":10}],8:[function(require,module,exports){
4244 var lookup = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
4245
4246 ;(function (exports) {
4247 'use strict';
4248
4249 var Arr = (typeof Uint8Array !== 'undefined')
4250 ? Uint8Array
4251 : Array
4252
4253 var PLUS = '+'.charCodeAt(0)
4254 var SLASH = '/'.charCodeAt(0)
4255 var NUMBER = '0'.charCodeAt(0)
4256 var LOWER = 'a'.charCodeAt(0)
4257 var UPPER = 'A'.charCodeAt(0)
4258 var PLUS_URL_SAFE = '-'.charCodeAt(0)
4259 var SLASH_URL_SAFE = '_'.charCodeAt(0)
4260
4261 function decode (elt) {
4262 var code = elt.charCodeAt(0)
4263 if (code === PLUS ||
4264 code === PLUS_URL_SAFE)
4265 return 62 // '+'
4266 if (code === SLASH ||
4267 code === SLASH_URL_SAFE)
4268 return 63 // '/'
4269 if (code < NUMBER)
4270 return -1 //no match
4271 if (code < NUMBER + 10)
4272 return code - NUMBER + 26 + 26
4273 if (code < UPPER + 26)
4274 return code - UPPER
4275 if (code < LOWER + 26)
4276 return code - LOWER + 26
4277 }
4278
4279 function b64ToByteArray (b64) {
4280 var i, j, l, tmp, placeHolders, arr
4281
4282 if (b64.length % 4 > 0) {
4283 throw new Error('Invalid string. Length must be a multiple of 4')
4284 }
4285
4286 // the number of equal signs (place holders)
4287 // if there are two placeholders, than the two characters before it
4288 // represent one byte
4289 // if there is only one, then the three characters before it represent 2 bytes
4290 // this is just a cheap hack to not do indexOf twice
4291 var len = b64.length
4292 placeHolders = '=' === b64.charAt(len - 2) ? 2 : '=' === b64.charAt(len - 1) ? 1 : 0
4293
4294 // base64 is 4/3 + up to two characters of the original data
4295 arr = new Arr(b64.length * 3 / 4 - placeHolders)
4296
4297 // if there are placeholders, only get up to the last complete 4 chars
4298 l = placeHolders > 0 ? b64.length - 4 : b64.length
4299
4300 var L = 0
4301
4302 function push (v) {
4303 arr[L++] = v
4304 }
4305
4306 for (i = 0, j = 0; i < l; i += 4, j += 3) {
4307 tmp = (decode(b64.charAt(i)) << 18) | (decode(b64.charAt(i + 1)) << 12) | (decode(b64.charAt(i + 2)) << 6) | decode(b64.charAt(i + 3))
4308 push((tmp & 0xFF0000) >> 16)
4309 push((tmp & 0xFF00) >> 8)
4310 push(tmp & 0xFF)
4311 }
4312
4313 if (placeHolders === 2) {
4314 tmp = (decode(b64.charAt(i)) << 2) | (decode(b64.charAt(i + 1)) >> 4)
4315 push(tmp & 0xFF)
4316 } else if (placeHolders === 1) {
4317 tmp = (decode(b64.charAt(i)) << 10) | (decode(b64.charAt(i + 1)) << 4) | (decode(b64.charAt(i + 2)) >> 2)
4318 push((tmp >> 8) & 0xFF)
4319 push(tmp & 0xFF)
4320 }
4321
4322 return arr
4323 }
4324
4325 function uint8ToBase64 (uint8) {
4326 var i,
4327 extraBytes = uint8.length % 3, // if we have 1 byte left, pad 2 bytes
4328 output = "",
4329 temp, length
4330
4331 function encode (num) {
4332 return lookup.charAt(num)
4333 }
4334
4335 function tripletToBase64 (num) {
4336 return encode(num >> 18 & 0x3F) + encode(num >> 12 & 0x3F) + encode(num >> 6 & 0x3F) + encode(num & 0x3F)
4337 }
4338
4339 // go through the array every three bytes, we'll deal with trailing stuff later
4340 for (i = 0, length = uint8.length - extraBytes; i < length; i += 3) {
4341 temp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
4342 output += tripletToBase64(temp)
4343 }
4344
4345 // pad the end with zeros, but make sure to not forget the extra bytes
4346 switch (extraBytes) {
4347 case 1:
4348 temp = uint8[uint8.length - 1]
4349 output += encode(temp >> 2)
4350 output += encode((temp << 4) & 0x3F)
4351 output += '=='
4352 break
4353 case 2:
4354 temp = (uint8[uint8.length - 2] << 8) + (uint8[uint8.length - 1])
4355 output += encode(temp >> 10)
4356 output += encode((temp >> 4) & 0x3F)
4357 output += encode((temp << 2) & 0x3F)
4358 output += '='
4359 break
4360 }
4361
4362 return output
4363 }
4364
4365 exports.toByteArray = b64ToByteArray
4366 exports.fromByteArray = uint8ToBase64
4367 }(typeof exports === 'undefined' ? (this.base64js = {}) : exports))
4368
4369 },{}],9:[function(require,module,exports){
4370 exports.read = function (buffer, offset, isLE, mLen, nBytes) {
4371 var e, m
4372 var eLen = nBytes * 8 - mLen - 1
4373 var eMax = (1 << eLen) - 1
4374 var eBias = eMax >> 1
4375 var nBits = -7
4376 var i = isLE ? (nBytes - 1) : 0
4377 var d = isLE ? -1 : 1
4378 var s = buffer[offset + i]
4379
4380 i += d
4381
4382 e = s & ((1 << (-nBits)) - 1)
4383 s >>= (-nBits)
4384 nBits += eLen
4385 for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
4386
4387 m = e & ((1 << (-nBits)) - 1)
4388 e >>= (-nBits)
4389 nBits += mLen
4390 for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
4391
4392 if (e === 0) {
4393 e = 1 - eBias
4394 } else if (e === eMax) {
4395 return m ? NaN : ((s ? -1 : 1) * Infinity)
4396 } else {
4397 m = m + Math.pow(2, mLen)
4398 e = e - eBias
4399 }
4400 return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
4401 }
4402
4403 exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
4404 var e, m, c
4405 var eLen = nBytes * 8 - mLen - 1
4406 var eMax = (1 << eLen) - 1
4407 var eBias = eMax >> 1
4408 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
4409 var i = isLE ? 0 : (nBytes - 1)
4410 var d = isLE ? 1 : -1
4411 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
4412
4413 value = Math.abs(value)
4414
4415 if (isNaN(value) || value === Infinity) {
4416 m = isNaN(value) ? 1 : 0
4417 e = eMax
4418 } else {
4419 e = Math.floor(Math.log(value) / Math.LN2)
4420 if (value * (c = Math.pow(2, -e)) < 1) {
4421 e--
4422 c *= 2
4423 }
4424 if (e + eBias >= 1) {
4425 value += rt / c
4426 } else {
4427 value += rt * Math.pow(2, 1 - eBias)
4428 }
4429 if (value * c >= 2) {
4430 e++
4431 c /= 2
4432 }
4433
4434 if (e + eBias >= eMax) {
4435 m = 0
4436 e = eMax
4437 } else if (e + eBias >= 1) {
4438 m = (value * c - 1) * Math.pow(2, mLen)
4439 e = e + eBias
4440 } else {
4441 m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
4442 e = 0
4443 }
4444 }
4445
4446 for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
4447
4448 e = (e << mLen) | m
4449 eLen += mLen
4450 for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
4451
4452 buffer[offset + i - d] |= s * 128
4453 }
4454
4455 },{}],10:[function(require,module,exports){
4456
4457 /**
4458 * isArray
4459 */
4460
4461 var isArray = Array.isArray;
4462
4463 /**
4464 * toString
4465 */
4466
4467 var str = Object.prototype.toString;
4468
4469 /**
4470 * Whether or not the given `val`
4471 * is an array.
4472 *
4473 * example:
4474 *
4475 * isArray([]);
4476 * // > true
4477 * isArray(arguments);
4478 * // > false
4479 * isArray('');
4480 * // > false
4481 *
4482 * @param {mixed} val
4483 * @return {bool}
4484 */
4485
4486 module.exports = isArray || function (val) {
4487 return !! val && '[object Array]' == str.call(val);
4488 };
4489
4490 },{}],11:[function(require,module,exports){
4491 // Copyright Joyent, Inc. and other Node contributors.
4492 //
4493 // Permission is hereby granted, free of charge, to any person obtaining a
4494 // copy of this software and associated documentation files (the
4495 // "Software"), to deal in the Software without restriction, including
4496 // without limitation the rights to use, copy, modify, merge, publish,
4497 // distribute, sublicense, and/or sell copies of the Software, and to permit
4498 // persons to whom the Software is furnished to do so, subject to the
4499 // following conditions:
4500 //
4501 // The above copyright notice and this permission notice shall be included
4502 // in all copies or substantial portions of the Software.
4503 //
4504 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
4505 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
4506 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
4507 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
4508 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
4509 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
4510 // USE OR OTHER DEALINGS IN THE SOFTWARE.
4511
4512 function EventEmitter() {
4513 this._events = this._events || {};
4514 this._maxListeners = this._maxListeners || undefined;
4515 }
4516 module.exports = EventEmitter;
4517
4518 // Backwards-compat with node 0.10.x
4519 EventEmitter.EventEmitter = EventEmitter;
4520
4521 EventEmitter.prototype._events = undefined;
4522 EventEmitter.prototype._maxListeners = undefined;
4523
4524 // By default EventEmitters will print a warning if more than 10 listeners are
4525 // added to it. This is a useful default which helps finding memory leaks.
4526 EventEmitter.defaultMaxListeners = 10;
4527
4528 // Obviously not all Emitters should be limited to 10. This function allows
4529 // that to be increased. Set to zero for unlimited.
4530 EventEmitter.prototype.setMaxListeners = function(n) {
4531 if (!isNumber(n) || n < 0 || isNaN(n))
4532 throw TypeError('n must be a positive number');
4533 this._maxListeners = n;
4534 return this;
4535 };
4536
4537 EventEmitter.prototype.emit = function(type) {
4538 var er, handler, len, args, i, listeners;
4539
4540 if (!this._events)
4541 this._events = {};
4542
4543 // If there is no 'error' event listener then throw.
4544 if (type === 'error') {
4545 if (!this._events.error ||
4546 (isObject(this._events.error) && !this._events.error.length)) {
4547 er = arguments[1];
4548 if (er instanceof Error) {
4549 throw er; // Unhandled 'error' event
4550 }
4551 throw TypeError('Uncaught, unspecified "error" event.');
4552 }
4553 }
4554
4555 handler = this._events[type];
4556
4557 if (isUndefined(handler))
4558 return false;
4559
4560 if (isFunction(handler)) {
4561 switch (arguments.length) {
4562 // fast cases
4563 case 1:
4564 handler.call(this);
4565 break;
4566 case 2:
4567 handler.call(this, arguments[1]);
4568 break;
4569 case 3:
4570 handler.call(this, arguments[1], arguments[2]);
4571 break;
4572 // slower
4573 default:
4574 len = arguments.length;
4575 args = new Array(len - 1);
4576 for (i = 1; i < len; i++)
4577 args[i - 1] = arguments[i];
4578 handler.apply(this, args);
4579 }
4580 } else if (isObject(handler)) {
4581 len = arguments.length;
4582 args = new Array(len - 1);
4583 for (i = 1; i < len; i++)
4584 args[i - 1] = arguments[i];
4585
4586 listeners = handler.slice();
4587 len = listeners.length;
4588 for (i = 0; i < len; i++)
4589 listeners[i].apply(this, args);
4590 }
4591
4592 return true;
4593 };
4594
4595 EventEmitter.prototype.addListener = function(type, listener) {
4596 var m;
4597
4598 if (!isFunction(listener))
4599 throw TypeError('listener must be a function');
4600
4601 if (!this._events)
4602 this._events = {};
4603
4604 // To avoid recursion in the case that type === "newListener"! Before
4605 // adding it to the listeners, first emit "newListener".
4606 if (this._events.newListener)
4607 this.emit('newListener', type,
4608 isFunction(listener.listener) ?
4609 listener.listener : listener);
4610
4611 if (!this._events[type])
4612 // Optimize the case of one listener. Don't need the extra array object.
4613 this._events[type] = listener;
4614 else if (isObject(this._events[type]))
4615 // If we've already got an array, just append.
4616 this._events[type].push(listener);
4617 else
4618 // Adding the second element, need to change to array.
4619 this._events[type] = [this._events[type], listener];
4620
4621 // Check for listener leak
4622 if (isObject(this._events[type]) && !this._events[type].warned) {
4623 var m;
4624 if (!isUndefined(this._maxListeners)) {
4625 m = this._maxListeners;
4626 } else {
4627 m = EventEmitter.defaultMaxListeners;
4628 }
4629
4630 if (m && m > 0 && this._events[type].length > m) {
4631 this._events[type].warned = true;
4632 console.error('(node) warning: possible EventEmitter memory ' +
4633 'leak detected. %d listeners added. ' +
4634 'Use emitter.setMaxListeners() to increase limit.',
4635 this._events[type].length);
4636 if (typeof console.trace === 'function') {
4637 // not supported in IE 10
4638 console.trace();
4639 }
4640 }
4641 }
4642
4643 return this;
4644 };
4645
4646 EventEmitter.prototype.on = EventEmitter.prototype.addListener;
4647
4648 EventEmitter.prototype.once = function(type, listener) {
4649 if (!isFunction(listener))
4650 throw TypeError('listener must be a function');
4651
4652 var fired = false;
4653
4654 function g() {
4655 this.removeListener(type, g);
4656
4657 if (!fired) {
4658 fired = true;
4659 listener.apply(this, arguments);
4660 }
4661 }
4662
4663 g.listener = listener;
4664 this.on(type, g);
4665
4666 return this;
4667 };
4668
4669 // emits a 'removeListener' event iff the listener was removed
4670 EventEmitter.prototype.removeListener = function(type, listener) {
4671 var list, position, length, i;
4672
4673 if (!isFunction(listener))
4674 throw TypeError('listener must be a function');
4675
4676 if (!this._events || !this._events[type])
4677 return this;
4678
4679 list = this._events[type];
4680 length = list.length;
4681 position = -1;
4682
4683 if (list === listener ||
4684 (isFunction(list.listener) && list.listener === listener)) {
4685 delete this._events[type];
4686 if (this._events.removeListener)
4687 this.emit('removeListener', type, listener);
4688
4689 } else if (isObject(list)) {
4690 for (i = length; i-- > 0;) {
4691 if (list[i] === listener ||
4692 (list[i].listener && list[i].listener === listener)) {
4693 position = i;
4694 break;
4695 }
4696 }
4697
4698 if (position < 0)
4699 return this;
4700
4701 if (list.length === 1) {
4702 list.length = 0;
4703 delete this._events[type];
4704 } else {
4705 list.splice(position, 1);
4706 }
4707
4708 if (this._events.removeListener)
4709 this.emit('removeListener', type, listener);
4710 }
4711
4712 return this;
4713 };
4714
4715 EventEmitter.prototype.removeAllListeners = function(type) {
4716 var key, listeners;
4717
4718 if (!this._events)
4719 return this;
4720
4721 // not listening for removeListener, no need to emit
4722 if (!this._events.removeListener) {
4723 if (arguments.length === 0)
4724 this._events = {};
4725 else if (this._events[type])
4726 delete this._events[type];
4727 return this;
4728 }
4729
4730 // emit removeListener for all listeners on all events
4731 if (arguments.length === 0) {
4732 for (key in this._events) {
4733 if (key === 'removeListener') continue;
4734 this.removeAllListeners(key);
4735 }
4736 this.removeAllListeners('removeListener');
4737 this._events = {};
4738 return this;
4739 }
4740
4741 listeners = this._events[type];
4742
4743 if (isFunction(listeners)) {
4744 this.removeListener(type, listeners);
4745 } else {
4746 // LIFO order
4747 while (listeners.length)
4748 this.removeListener(type, listeners[listeners.length - 1]);
4749 }
4750 delete this._events[type];
4751
4752 return this;
4753 };
4754
4755 EventEmitter.prototype.listeners = function(type) {
4756 var ret;
4757 if (!this._events || !this._events[type])
4758 ret = [];
4759 else if (isFunction(this._events[type]))
4760 ret = [this._events[type]];
4761 else
4762 ret = this._events[type].slice();
4763 return ret;
4764 };
4765
4766 EventEmitter.listenerCount = function(emitter, type) {
4767 var ret;
4768 if (!emitter._events || !emitter._events[type])
4769 ret = 0;
4770 else if (isFunction(emitter._events[type]))
4771 ret = 1;
4772 else
4773 ret = emitter._events[type].length;
4774 return ret;
4775 };
4776
4777 function isFunction(arg) {
4778 return typeof arg === 'function';
4779 }
4780
4781 function isNumber(arg) {
4782 return typeof arg === 'number';
4783 }
4784
4785 function isObject(arg) {
4786 return typeof arg === 'object' && arg !== null;
4787 }
4788
4789 function isUndefined(arg) {
4790 return arg === void 0;
4791 }
4792
4793 },{}],12:[function(require,module,exports){
4794 if (typeof Object.create === 'function') {
4795 // implementation from standard node.js 'util' module
4796 module.exports = function inherits(ctor, superCtor) {
4797 ctor.super_ = superCtor
4798 ctor.prototype = Object.create(superCtor.prototype, {
4799 constructor: {
4800 value: ctor,
4801 enumerable: false,
4802 writable: true,
4803 configurable: true
4804 }
4805 });
4806 };
4807 } else {
4808 // old school shim for old browsers
4809 module.exports = function inherits(ctor, superCtor) {
4810 ctor.super_ = superCtor
4811 var TempCtor = function () {}
4812 TempCtor.prototype = superCtor.prototype
4813 ctor.prototype = new TempCtor()
4814 ctor.prototype.constructor = ctor
4815 }
4816 }
4817
4818 },{}],13:[function(require,module,exports){
4819 module.exports = Array.isArray || function (arr) {
4820 return Object.prototype.toString.call(arr) == '[object Array]';
4821 };
4822
4823 },{}],14:[function(require,module,exports){
4824 // shim for using process in browser
4825
4826 var process = module.exports = {};
4827 var queue = [];
4828 var draining = false;
4829 var currentQueue;
4830 var queueIndex = -1;
4831
4832 function cleanUpNextTick() {
4833 draining = false;
4834 if (currentQueue.length) {
4835 queue = currentQueue.concat(queue);
4836 } else {
4837 queueIndex = -1;
4838 }
4839 if (queue.length) {
4840 drainQueue();
4841 }
4842 }
4843
4844 function drainQueue() {
4845 if (draining) {
4846 return;
4847 }
4848 var timeout = setTimeout(cleanUpNextTick);
4849 draining = true;
4850
4851 var len = queue.length;
4852 while(len) {
4853 currentQueue = queue;
4854 queue = [];
4855 while (++queueIndex < len) {
4856 currentQueue[queueIndex].run();
4857 }
4858 queueIndex = -1;
4859 len = queue.length;
4860 }
4861 currentQueue = null;
4862 draining = false;
4863 clearTimeout(timeout);
4864 }
4865
4866 process.nextTick = function (fun) {
4867 var args = new Array(arguments.length - 1);
4868 if (arguments.length > 1) {
4869 for (var i = 1; i < arguments.length; i++) {
4870 args[i - 1] = arguments[i];
4871 }
4872 }
4873 queue.push(new Item(fun, args));
4874 if (queue.length === 1 && !draining) {
4875 setTimeout(drainQueue, 0);
4876 }
4877 };
4878
4879 // v8 likes predictible objects
4880 function Item(fun, array) {
4881 this.fun = fun;
4882 this.array = array;
4883 }
4884 Item.prototype.run = function () {
4885 this.fun.apply(null, this.array);
4886 };
4887 process.title = 'browser';
4888 process.browser = true;
4889 process.env = {};
4890 process.argv = [];
4891 process.version = ''; // empty string to avoid regexp issues
4892 process.versions = {};
4893
4894 function noop() {}
4895
4896 process.on = noop;
4897 process.addListener = noop;
4898 process.once = noop;
4899 process.off = noop;
4900 process.removeListener = noop;
4901 process.removeAllListeners = noop;
4902 process.emit = noop;
4903
4904 process.binding = function (name) {
4905 throw new Error('process.binding is not supported');
4906 };
4907
4908 // TODO(shtylman)
4909 process.cwd = function () { return '/' };
4910 process.chdir = function (dir) {
4911 throw new Error('process.chdir is not supported');
4912 };
4913 process.umask = function() { return 0; };
4914
4915 },{}],15:[function(require,module,exports){
4916 module.exports = require("./lib/_stream_duplex.js")
4917
4918 },{"./lib/_stream_duplex.js":16}],16:[function(require,module,exports){
4919 (function (process){
4920 // Copyright Joyent, Inc. and other Node contributors.
4921 //
4922 // Permission is hereby granted, free of charge, to any person obtaining a
4923 // copy of this software and associated documentation files (the
4924 // "Software"), to deal in the Software without restriction, including
4925 // without limitation the rights to use, copy, modify, merge, publish,
4926 // distribute, sublicense, and/or sell copies of the Software, and to permit
4927 // persons to whom the Software is furnished to do so, subject to the
4928 // following conditions:
4929 //
4930 // The above copyright notice and this permission notice shall be included
4931 // in all copies or substantial portions of the Software.
4932 //
4933 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
4934 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
4935 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
4936 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
4937 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
4938 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
4939 // USE OR OTHER DEALINGS IN THE SOFTWARE.
4940
4941 // a duplex stream is just a stream that is both readable and writable.
4942 // Since JS doesn't have multiple prototypal inheritance, this class
4943 // prototypally inherits from Readable, and then parasitically from
4944 // Writable.
4945
4946 module.exports = Duplex;
4947
4948 /*<replacement>*/
4949 var objectKeys = Object.keys || function (obj) {
4950 var keys = [];
4951 for (var key in obj) keys.push(key);
4952 return keys;
4953 }
4954 /*</replacement>*/
4955
4956
4957 /*<replacement>*/
4958 var util = require('core-util-is');
4959 util.inherits = require('inherits');
4960 /*</replacement>*/
4961
4962 var Readable = require('./_stream_readable');
4963 var Writable = require('./_stream_writable');
4964
4965 util.inherits(Duplex, Readable);
4966
4967 forEach(objectKeys(Writable.prototype), function(method) {
4968 if (!Duplex.prototype[method])
4969 Duplex.prototype[method] = Writable.prototype[method];
4970 });
4971
4972 function Duplex(options) {
4973 if (!(this instanceof Duplex))
4974 return new Duplex(options);
4975
4976 Readable.call(this, options);
4977 Writable.call(this, options);
4978
4979 if (options && options.readable === false)
4980 this.readable = false;
4981
4982 if (options && options.writable === false)
4983 this.writable = false;
4984
4985 this.allowHalfOpen = true;
4986 if (options && options.allowHalfOpen === false)
4987 this.allowHalfOpen = false;
4988
4989 this.once('end', onend);
4990 }
4991
4992 // the no-half-open enforcer
4993 function onend() {
4994 // if we allow half-open state, or if the writable side ended,
4995 // then we're ok.
4996 if (this.allowHalfOpen || this._writableState.ended)
4997 return;
4998
4999 // no more data can be written.
5000 // But allow more writes to happen in this tick.
5001 process.nextTick(this.end.bind(this));
5002 }
5003
5004 function forEach (xs, f) {
5005 for (var i = 0, l = xs.length; i < l; i++) {
5006 f(xs[i], i);
5007 }
5008 }
5009
5010 }).call(this,require('_process'))
5011 },{"./_stream_readable":18,"./_stream_writable":20,"_process":14,"core-util-is":21,"inherits":12}],17:[function(require,module,exports){
5012 // Copyright Joyent, Inc. and other Node contributors.
5013 //
5014 // Permission is hereby granted, free of charge, to any person obtaining a
5015 // copy of this software and associated documentation files (the
5016 // "Software"), to deal in the Software without restriction, including
5017 // without limitation the rights to use, copy, modify, merge, publish,
5018 // distribute, sublicense, and/or sell copies of the Software, and to permit
5019 // persons to whom the Software is furnished to do so, subject to the
5020 // following conditions:
5021 //
5022 // The above copyright notice and this permission notice shall be included
5023 // in all copies or substantial portions of the Software.
5024 //
5025 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
5026 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
5027 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
5028 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
5029 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
5030 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
5031 // USE OR OTHER DEALINGS IN THE SOFTWARE.
5032
5033 // a passthrough stream.
5034 // basically just the most minimal sort of Transform stream.
5035 // Every written chunk gets output as-is.
5036
5037 module.exports = PassThrough;
5038
5039 var Transform = require('./_stream_transform');
5040
5041 /*<replacement>*/
5042 var util = require('core-util-is');
5043 util.inherits = require('inherits');
5044 /*</replacement>*/
5045
5046 util.inherits(PassThrough, Transform);
5047
5048 function PassThrough(options) {
5049 if (!(this instanceof PassThrough))
5050 return new PassThrough(options);
5051
5052 Transform.call(this, options);
5053 }
5054
5055 PassThrough.prototype._transform = function(chunk, encoding, cb) {
5056 cb(null, chunk);
5057 };
5058
5059 },{"./_stream_transform":19,"core-util-is":21,"inherits":12}],18:[function(require,module,exports){
5060 (function (process){
5061 // Copyright Joyent, Inc. and other Node contributors.
5062 //
5063 // Permission is hereby granted, free of charge, to any person obtaining a
5064 // copy of this software and associated documentation files (the
5065 // "Software"), to deal in the Software without restriction, including
5066 // without limitation the rights to use, copy, modify, merge, publish,
5067 // distribute, sublicense, and/or sell copies of the Software, and to permit
5068 // persons to whom the Software is furnished to do so, subject to the
5069 // following conditions:
5070 //
5071 // The above copyright notice and this permission notice shall be included
5072 // in all copies or substantial portions of the Software.
5073 //
5074 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
5075 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
5076 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
5077 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
5078 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
5079 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
5080 // USE OR OTHER DEALINGS IN THE SOFTWARE.
5081
5082 module.exports = Readable;
5083
5084 /*<replacement>*/
5085 var isArray = require('isarray');
5086 /*</replacement>*/
5087
5088
5089 /*<replacement>*/
5090 var Buffer = require('buffer').Buffer;
5091 /*</replacement>*/
5092
5093 Readable.ReadableState = ReadableState;
5094
5095 var EE = require('events').EventEmitter;
5096
5097 /*<replacement>*/
5098 if (!EE.listenerCount) EE.listenerCount = function(emitter, type) {
5099 return emitter.listeners(type).length;
5100 };
5101 /*</replacement>*/
5102
5103 var Stream = require('stream');
5104
5105 /*<replacement>*/
5106 var util = require('core-util-is');
5107 util.inherits = require('inherits');
5108 /*</replacement>*/
5109
5110 var StringDecoder;
5111
5112
5113 /*<replacement>*/
5114 var debug = require('util');
5115 if (debug && debug.debuglog) {
5116 debug = debug.debuglog('stream');
5117 } else {
5118 debug = function () {};
5119 }
5120 /*</replacement>*/
5121
5122
5123 util.inherits(Readable, Stream);
5124
5125 function ReadableState(options, stream) {
5126 var Duplex = require('./_stream_duplex');
5127
5128 options = options || {};
5129
5130 // the point at which it stops calling _read() to fill the buffer
5131 // Note: 0 is a valid value, means "don't call _read preemptively ever"
5132 var hwm = options.highWaterMark;
5133 var defaultHwm = options.objectMode ? 16 : 16 * 1024;
5134 this.highWaterMark = (hwm || hwm === 0) ? hwm : defaultHwm;
5135
5136 // cast to ints.
5137 this.highWaterMark = ~~this.highWaterMark;
5138
5139 this.buffer = [];
5140 this.length = 0;
5141 this.pipes = null;
5142 this.pipesCount = 0;
5143 this.flowing = null;
5144 this.ended = false;
5145 this.endEmitted = false;
5146 this.reading = false;
5147
5148 // a flag to be able to tell if the onwrite cb is called immediately,
5149 // or on a later tick. We set this to true at first, because any
5150 // actions that shouldn't happen until "later" should generally also
5151 // not happen before the first write call.
5152 this.sync = true;
5153
5154 // whenever we return null, then we set a flag to say
5155 // that we're awaiting a 'readable' event emission.
5156 this.needReadable = false;
5157 this.emittedReadable = false;
5158 this.readableListening = false;
5159
5160
5161 // object stream flag. Used to make read(n) ignore n and to
5162 // make all the buffer merging and length checks go away
5163 this.objectMode = !!options.objectMode;
5164
5165 if (stream instanceof Duplex)
5166 this.objectMode = this.objectMode || !!options.readableObjectMode;
5167
5168 // Crypto is kind of old and crusty. Historically, its default string
5169 // encoding is 'binary' so we have to make this configurable.
5170 // Everything else in the universe uses 'utf8', though.
5171 this.defaultEncoding = options.defaultEncoding || 'utf8';
5172
5173 // when piping, we only care about 'readable' events that happen
5174 // after read()ing all the bytes and not getting any pushback.
5175 this.ranOut = false;
5176
5177 // the number of writers that are awaiting a drain event in .pipe()s
5178 this.awaitDrain = 0;
5179
5180 // if true, a maybeReadMore has been scheduled
5181 this.readingMore = false;
5182
5183 this.decoder = null;
5184 this.encoding = null;
5185 if (options.encoding) {
5186 if (!StringDecoder)
5187 StringDecoder = require('string_decoder/').StringDecoder;
5188 this.decoder = new StringDecoder(options.encoding);
5189 this.encoding = options.encoding;
5190 }
5191 }
5192
5193 function Readable(options) {
5194 var Duplex = require('./_stream_duplex');
5195
5196 if (!(this instanceof Readable))
5197 return new Readable(options);
5198
5199 this._readableState = new ReadableState(options, this);
5200
5201 // legacy
5202 this.readable = true;
5203
5204 Stream.call(this);
5205 }
5206
5207 // Manually shove something into the read() buffer.
5208 // This returns true if the highWaterMark has not been hit yet,
5209 // similar to how Writable.write() returns true if you should
5210 // write() some more.
5211 Readable.prototype.push = function(chunk, encoding) {
5212 var state = this._readableState;
5213
5214 if (util.isString(chunk) && !state.objectMode) {
5215 encoding = encoding || state.defaultEncoding;
5216 if (encoding !== state.encoding) {
5217 chunk = new Buffer(chunk, encoding);
5218 encoding = '';
5219 }
5220 }
5221
5222 return readableAddChunk(this, state, chunk, encoding, false);
5223 };
5224
5225 // Unshift should *always* be something directly out of read()
5226 Readable.prototype.unshift = function(chunk) {
5227 var state = this._readableState;
5228 return readableAddChunk(this, state, chunk, '', true);
5229 };
5230
5231 function readableAddChunk(stream, state, chunk, encoding, addToFront) {
5232 var er = chunkInvalid(state, chunk);
5233 if (er) {
5234 stream.emit('error', er);
5235 } else if (util.isNullOrUndefined(chunk)) {
5236 state.reading = false;
5237 if (!state.ended)
5238 onEofChunk(stream, state);
5239 } else if (state.objectMode || chunk && chunk.length > 0) {
5240 if (state.ended && !addToFront) {
5241 var e = new Error('stream.push() after EOF');
5242 stream.emit('error', e);
5243 } else if (state.endEmitted && addToFront) {
5244 var e = new Error('stream.unshift() after end event');
5245 stream.emit('error', e);
5246 } else {
5247 if (state.decoder && !addToFront && !encoding)
5248 chunk = state.decoder.write(chunk);
5249
5250 if (!addToFront)
5251 state.reading = false;
5252
5253 // if we want the data now, just emit it.
5254 if (state.flowing && state.length === 0 && !state.sync) {
5255 stream.emit('data', chunk);
5256 stream.read(0);
5257 } else {
5258 // update the buffer info.
5259 state.length += state.objectMode ? 1 : chunk.length;
5260 if (addToFront)
5261 state.buffer.unshift(chunk);
5262 else
5263 state.buffer.push(chunk);
5264
5265 if (state.needReadable)
5266 emitReadable(stream);
5267 }
5268
5269 maybeReadMore(stream, state);
5270 }
5271 } else if (!addToFront) {
5272 state.reading = false;
5273 }
5274
5275 return needMoreData(state);
5276 }
5277
5278
5279
5280 // if it's past the high water mark, we can push in some more.
5281 // Also, if we have no data yet, we can stand some
5282 // more bytes. This is to work around cases where hwm=0,
5283 // such as the repl. Also, if the push() triggered a
5284 // readable event, and the user called read(largeNumber) such that
5285 // needReadable was set, then we ought to push more, so that another
5286 // 'readable' event will be triggered.
5287 function needMoreData(state) {
5288 return !state.ended &&
5289 (state.needReadable ||
5290 state.length < state.highWaterMark ||
5291 state.length === 0);
5292 }
5293
5294 // backwards compatibility.
5295 Readable.prototype.setEncoding = function(enc) {
5296 if (!StringDecoder)
5297 StringDecoder = require('string_decoder/').StringDecoder;
5298 this._readableState.decoder = new StringDecoder(enc);
5299 this._readableState.encoding = enc;
5300 return this;
5301 };
5302
5303 // Don't raise the hwm > 128MB
5304 var MAX_HWM = 0x800000;
5305 function roundUpToNextPowerOf2(n) {
5306 if (n >= MAX_HWM) {
5307 n = MAX_HWM;
5308 } else {
5309 // Get the next highest power of 2
5310 n--;
5311 for (var p = 1; p < 32; p <<= 1) n |= n >> p;
5312 n++;
5313 }
5314 return n;
5315 }
5316
5317 function howMuchToRead(n, state) {
5318 if (state.length === 0 && state.ended)
5319 return 0;
5320
5321 if (state.objectMode)
5322 return n === 0 ? 0 : 1;
5323
5324 if (isNaN(n) || util.isNull(n)) {
5325 // only flow one buffer at a time
5326 if (state.flowing && state.buffer.length)
5327 return state.buffer[0].length;
5328 else
5329 return state.length;
5330 }
5331
5332 if (n <= 0)
5333 return 0;
5334
5335 // If we're asking for more than the target buffer level,
5336 // then raise the water mark. Bump up to the next highest
5337 // power of 2, to prevent increasing it excessively in tiny
5338 // amounts.
5339 if (n > state.highWaterMark)
5340 state.highWaterMark = roundUpToNextPowerOf2(n);
5341
5342 // don't have that much. return null, unless we've ended.
5343 if (n > state.length) {
5344 if (!state.ended) {
5345 state.needReadable = true;
5346 return 0;
5347 } else
5348 return state.length;
5349 }
5350
5351 return n;
5352 }
5353
5354 // you can override either this method, or the async _read(n) below.
5355 Readable.prototype.read = function(n) {
5356 debug('read', n);
5357 var state = this._readableState;
5358 var nOrig = n;
5359
5360 if (!util.isNumber(n) || n > 0)
5361 state.emittedReadable = false;
5362
5363 // if we're doing read(0) to trigger a readable event, but we
5364 // already have a bunch of data in the buffer, then just trigger
5365 // the 'readable' event and move on.
5366 if (n === 0 &&
5367 state.needReadable &&
5368 (state.length >= state.highWaterMark || state.ended)) {
5369 debug('read: emitReadable', state.length, state.ended);
5370 if (state.length === 0 && state.ended)
5371 endReadable(this);
5372 else
5373 emitReadable(this);
5374 return null;
5375 }
5376
5377 n = howMuchToRead(n, state);
5378
5379 // if we've ended, and we're now clear, then finish it up.
5380 if (n === 0 && state.ended) {
5381 if (state.length === 0)
5382 endReadable(this);
5383 return null;
5384 }
5385
5386 // All the actual chunk generation logic needs to be
5387 // *below* the call to _read. The reason is that in certain
5388 // synthetic stream cases, such as passthrough streams, _read
5389 // may be a completely synchronous operation which may change
5390 // the state of the read buffer, providing enough data when
5391 // before there was *not* enough.
5392 //
5393 // So, the steps are:
5394 // 1. Figure out what the state of things will be after we do
5395 // a read from the buffer.
5396 //
5397 // 2. If that resulting state will trigger a _read, then call _read.
5398 // Note that this may be asynchronous, or synchronous. Yes, it is
5399 // deeply ugly to write APIs this way, but that still doesn't mean
5400 // that the Readable class should behave improperly, as streams are
5401 // designed to be sync/async agnostic.
5402 // Take note if the _read call is sync or async (ie, if the read call
5403 // has returned yet), so that we know whether or not it's safe to emit
5404 // 'readable' etc.
5405 //
5406 // 3. Actually pull the requested chunks out of the buffer and return.
5407
5408 // if we need a readable event, then we need to do some reading.
5409 var doRead = state.needReadable;
5410 debug('need readable', doRead);
5411
5412 // if we currently have less than the highWaterMark, then also read some
5413 if (state.length === 0 || state.length - n < state.highWaterMark) {
5414 doRead = true;
5415 debug('length less than watermark', doRead);
5416 }
5417
5418 // however, if we've ended, then there's no point, and if we're already
5419 // reading, then it's unnecessary.
5420 if (state.ended || state.reading) {
5421 doRead = false;
5422 debug('reading or ended', doRead);
5423 }
5424
5425 if (doRead) {
5426 debug('do read');
5427 state.reading = true;
5428 state.sync = true;
5429 // if the length is currently zero, then we *need* a readable event.
5430 if (state.length === 0)
5431 state.needReadable = true;
5432 // call internal read method
5433 this._read(state.highWaterMark);
5434 state.sync = false;
5435 }
5436
5437 // If _read pushed data synchronously, then `reading` will be false,
5438 // and we need to re-evaluate how much data we can return to the user.
5439 if (doRead && !state.reading)
5440 n = howMuchToRead(nOrig, state);
5441
5442 var ret;
5443 if (n > 0)
5444 ret = fromList(n, state);
5445 else
5446 ret = null;
5447
5448 if (util.isNull(ret)) {
5449 state.needReadable = true;
5450 n = 0;
5451 }
5452
5453 state.length -= n;
5454
5455 // If we have nothing in the buffer, then we want to know
5456 // as soon as we *do* get something into the buffer.
5457 if (state.length === 0 && !state.ended)
5458 state.needReadable = true;
5459
5460 // If we tried to read() past the EOF, then emit end on the next tick.
5461 if (nOrig !== n && state.ended && state.length === 0)
5462 endReadable(this);
5463
5464 if (!util.isNull(ret))
5465 this.emit('data', ret);
5466
5467 return ret;
5468 };
5469
5470 function chunkInvalid(state, chunk) {
5471 var er = null;
5472 if (!util.isBuffer(chunk) &&
5473 !util.isString(chunk) &&
5474 !util.isNullOrUndefined(chunk) &&
5475 !state.objectMode) {
5476 er = new TypeError('Invalid non-string/buffer chunk');
5477 }
5478 return er;
5479 }
5480
5481
5482 function onEofChunk(stream, state) {
5483 if (state.decoder && !state.ended) {
5484 var chunk = state.decoder.end();
5485 if (chunk && chunk.length) {
5486 state.buffer.push(chunk);
5487 state.length += state.objectMode ? 1 : chunk.length;
5488 }
5489 }
5490 state.ended = true;
5491
5492 // emit 'readable' now to make sure it gets picked up.
5493 emitReadable(stream);
5494 }
5495
5496 // Don't emit readable right away in sync mode, because this can trigger
5497 // another read() call => stack overflow. This way, it might trigger
5498 // a nextTick recursion warning, but that's not so bad.
5499 function emitReadable(stream) {
5500 var state = stream._readableState;
5501 state.needReadable = false;
5502 if (!state.emittedReadable) {
5503 debug('emitReadable', state.flowing);
5504 state.emittedReadable = true;
5505 if (state.sync)
5506 process.nextTick(function() {
5507 emitReadable_(stream);
5508 });
5509 else
5510 emitReadable_(stream);
5511 }
5512 }
5513
5514 function emitReadable_(stream) {
5515 debug('emit readable');
5516 stream.emit('readable');
5517 flow(stream);
5518 }
5519
5520
5521 // at this point, the user has presumably seen the 'readable' event,
5522 // and called read() to consume some data. that may have triggered
5523 // in turn another _read(n) call, in which case reading = true if
5524 // it's in progress.
5525 // However, if we're not ended, or reading, and the length < hwm,
5526 // then go ahead and try to read some more preemptively.
5527 function maybeReadMore(stream, state) {
5528 if (!state.readingMore) {
5529 state.readingMore = true;
5530 process.nextTick(function() {
5531 maybeReadMore_(stream, state);
5532 });
5533 }
5534 }
5535
5536 function maybeReadMore_(stream, state) {
5537 var len = state.length;
5538 while (!state.reading && !state.flowing && !state.ended &&
5539 state.length < state.highWaterMark) {
5540 debug('maybeReadMore read 0');
5541 stream.read(0);
5542 if (len === state.length)
5543 // didn't get any data, stop spinning.
5544 break;
5545 else
5546 len = state.length;
5547 }
5548 state.readingMore = false;
5549 }
5550
5551 // abstract method. to be overridden in specific implementation classes.
5552 // call cb(er, data) where data is <= n in length.
5553 // for virtual (non-string, non-buffer) streams, "length" is somewhat
5554 // arbitrary, and perhaps not very meaningful.
5555 Readable.prototype._read = function(n) {
5556 this.emit('error', new Error('not implemented'));
5557 };
5558
5559 Readable.prototype.pipe = function(dest, pipeOpts) {
5560 var src = this;
5561 var state = this._readableState;
5562
5563 switch (state.pipesCount) {
5564 case 0:
5565 state.pipes = dest;
5566 break;
5567 case 1:
5568 state.pipes = [state.pipes, dest];
5569 break;
5570 default:
5571 state.pipes.push(dest);
5572 break;
5573 }
5574 state.pipesCount += 1;
5575 debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
5576
5577 var doEnd = (!pipeOpts || pipeOpts.end !== false) &&
5578 dest !== process.stdout &&
5579 dest !== process.stderr;
5580
5581 var endFn = doEnd ? onend : cleanup;
5582 if (state.endEmitted)
5583 process.nextTick(endFn);
5584 else
5585 src.once('end', endFn);
5586
5587 dest.on('unpipe', onunpipe);
5588 function onunpipe(readable) {
5589 debug('onunpipe');
5590 if (readable === src) {
5591 cleanup();
5592 }
5593 }
5594
5595 function onend() {
5596 debug('onend');
5597 dest.end();
5598 }
5599
5600 // when the dest drains, it reduces the awaitDrain counter
5601 // on the source. This would be more elegant with a .once()
5602 // handler in flow(), but adding and removing repeatedly is
5603 // too slow.
5604 var ondrain = pipeOnDrain(src);
5605 dest.on('drain', ondrain);
5606
5607 function cleanup() {
5608 debug('cleanup');
5609 // cleanup event handlers once the pipe is broken
5610 dest.removeListener('close', onclose);
5611 dest.removeListener('finish', onfinish);
5612 dest.removeListener('drain', ondrain);
5613 dest.removeListener('error', onerror);
5614 dest.removeListener('unpipe', onunpipe);
5615 src.removeListener('end', onend);
5616 src.removeListener('end', cleanup);
5617 src.removeListener('data', ondata);
5618
5619 // if the reader is waiting for a drain event from this
5620 // specific writer, then it would cause it to never start
5621 // flowing again.
5622 // So, if this is awaiting a drain, then we just call it now.
5623 // If we don't know, then assume that we are waiting for one.
5624 if (state.awaitDrain &&
5625 (!dest._writableState || dest._writableState.needDrain))
5626 ondrain();
5627 }
5628
5629 src.on('data', ondata);
5630 function ondata(chunk) {
5631 debug('ondata');
5632 var ret = dest.write(chunk);
5633 if (false === ret) {
5634 debug('false write response, pause',
5635 src._readableState.awaitDrain);
5636 src._readableState.awaitDrain++;
5637 src.pause();
5638 }
5639 }
5640
5641 // if the dest has an error, then stop piping into it.
5642 // however, don't suppress the throwing behavior for this.
5643 function onerror(er) {
5644 debug('onerror', er);
5645 unpipe();
5646 dest.removeListener('error', onerror);
5647 if (EE.listenerCount(dest, 'error') === 0)
5648 dest.emit('error', er);
5649 }
5650 // This is a brutally ugly hack to make sure that our error handler
5651 // is attached before any userland ones. NEVER DO THIS.
5652 if (!dest._events || !dest._events.error)
5653 dest.on('error', onerror);
5654 else if (isArray(dest._events.error))
5655 dest._events.error.unshift(onerror);
5656 else
5657 dest._events.error = [onerror, dest._events.error];
5658
5659
5660
5661 // Both close and finish should trigger unpipe, but only once.
5662 function onclose() {
5663 dest.removeListener('finish', onfinish);
5664 unpipe();
5665 }
5666 dest.once('close', onclose);
5667 function onfinish() {
5668 debug('onfinish');
5669 dest.removeListener('close', onclose);
5670 unpipe();
5671 }
5672 dest.once('finish', onfinish);
5673
5674 function unpipe() {
5675 debug('unpipe');
5676 src.unpipe(dest);
5677 }
5678
5679 // tell the dest that it's being piped to
5680 dest.emit('pipe', src);
5681
5682 // start the flow if it hasn't been started already.
5683 if (!state.flowing) {
5684 debug('pipe resume');
5685 src.resume();
5686 }
5687
5688 return dest;
5689 };
5690
5691 function pipeOnDrain(src) {
5692 return function() {
5693 var state = src._readableState;
5694 debug('pipeOnDrain', state.awaitDrain);
5695 if (state.awaitDrain)
5696 state.awaitDrain--;
5697 if (state.awaitDrain === 0 && EE.listenerCount(src, 'data')) {
5698 state.flowing = true;
5699 flow(src);
5700 }
5701 };
5702 }
5703
5704
5705 Readable.prototype.unpipe = function(dest) {
5706 var state = this._readableState;
5707
5708 // if we're not piping anywhere, then do nothing.
5709 if (state.pipesCount === 0)
5710 return this;
5711
5712 // just one destination. most common case.
5713 if (state.pipesCount === 1) {
5714 // passed in one, but it's not the right one.
5715 if (dest && dest !== state.pipes)
5716 return this;
5717
5718 if (!dest)
5719 dest = state.pipes;
5720
5721 // got a match.
5722 state.pipes = null;
5723 state.pipesCount = 0;
5724 state.flowing = false;
5725 if (dest)
5726 dest.emit('unpipe', this);
5727 return this;
5728 }
5729
5730 // slow case. multiple pipe destinations.
5731
5732 if (!dest) {
5733 // remove all.
5734 var dests = state.pipes;
5735 var len = state.pipesCount;
5736 state.pipes = null;
5737 state.pipesCount = 0;
5738 state.flowing = false;
5739
5740 for (var i = 0; i < len; i++)
5741 dests[i].emit('unpipe', this);
5742 return this;
5743 }
5744
5745 // try to find the right one.
5746 var i = indexOf(state.pipes, dest);
5747 if (i === -1)
5748 return this;
5749
5750 state.pipes.splice(i, 1);
5751 state.pipesCount -= 1;
5752 if (state.pipesCount === 1)
5753 state.pipes = state.pipes[0];
5754
5755 dest.emit('unpipe', this);
5756
5757 return this;
5758 };
5759
5760 // set up data events if they are asked for
5761 // Ensure readable listeners eventually get something
5762 Readable.prototype.on = function(ev, fn) {
5763 var res = Stream.prototype.on.call(this, ev, fn);
5764
5765 // If listening to data, and it has not explicitly been paused,
5766 // then call resume to start the flow of data on the next tick.
5767 if (ev === 'data' && false !== this._readableState.flowing) {
5768 this.resume();
5769 }
5770
5771 if (ev === 'readable' && this.readable) {
5772 var state = this._readableState;
5773 if (!state.readableListening) {
5774 state.readableListening = true;
5775 state.emittedReadable = false;
5776 state.needReadable = true;
5777 if (!state.reading) {
5778 var self = this;
5779 process.nextTick(function() {
5780 debug('readable nexttick read 0');
5781 self.read(0);
5782 });
5783 } else if (state.length) {
5784 emitReadable(this, state);
5785 }
5786 }
5787 }
5788
5789 return res;
5790 };
5791 Readable.prototype.addListener = Readable.prototype.on;
5792
5793 // pause() and resume() are remnants of the legacy readable stream API
5794 // If the user uses them, then switch into old mode.
5795 Readable.prototype.resume = function() {
5796 var state = this._readableState;
5797 if (!state.flowing) {
5798 debug('resume');
5799 state.flowing = true;
5800 if (!state.reading) {
5801 debug('resume read 0');
5802 this.read(0);
5803 }
5804 resume(this, state);
5805 }
5806 return this;
5807 };
5808
5809 function resume(stream, state) {
5810 if (!state.resumeScheduled) {
5811 state.resumeScheduled = true;
5812 process.nextTick(function() {
5813 resume_(stream, state);
5814 });
5815 }
5816 }
5817
5818 function resume_(stream, state) {
5819 state.resumeScheduled = false;
5820 stream.emit('resume');
5821 flow(stream);
5822 if (state.flowing && !state.reading)
5823 stream.read(0);
5824 }
5825
5826 Readable.prototype.pause = function() {
5827 debug('call pause flowing=%j', this._readableState.flowing);
5828 if (false !== this._readableState.flowing) {
5829 debug('pause');
5830 this._readableState.flowing = false;
5831 this.emit('pause');
5832 }
5833 return this;
5834 };
5835
5836 function flow(stream) {
5837 var state = stream._readableState;
5838 debug('flow', state.flowing);
5839 if (state.flowing) {
5840 do {
5841 var chunk = stream.read();
5842 } while (null !== chunk && state.flowing);
5843 }
5844 }
5845
5846 // wrap an old-style stream as the async data source.
5847 // This is *not* part of the readable stream interface.
5848 // It is an ugly unfortunate mess of history.
5849 Readable.prototype.wrap = function(stream) {
5850 var state = this._readableState;
5851 var paused = false;
5852
5853 var self = this;
5854 stream.on('end', function() {
5855 debug('wrapped end');
5856 if (state.decoder && !state.ended) {
5857 var chunk = state.decoder.end();
5858 if (chunk && chunk.length)
5859 self.push(chunk);
5860 }
5861
5862 self.push(null);
5863 });
5864
5865 stream.on('data', function(chunk) {
5866 debug('wrapped data');
5867 if (state.decoder)
5868 chunk = state.decoder.write(chunk);
5869 if (!chunk || !state.objectMode && !chunk.length)
5870 return;
5871
5872 var ret = self.push(chunk);
5873 if (!ret) {
5874 paused = true;
5875 stream.pause();
5876 }
5877 });
5878
5879 // proxy all the other methods.
5880 // important when wrapping filters and duplexes.
5881 for (var i in stream) {
5882 if (util.isFunction(stream[i]) && util.isUndefined(this[i])) {
5883 this[i] = function(method) { return function() {
5884 return stream[method].apply(stream, arguments);
5885 }}(i);
5886 }
5887 }
5888
5889 // proxy certain important events.
5890 var events = ['error', 'close', 'destroy', 'pause', 'resume'];
5891 forEach(events, function(ev) {
5892 stream.on(ev, self.emit.bind(self, ev));
5893 });
5894
5895 // when we try to consume some more bytes, simply unpause the
5896 // underlying stream.
5897 self._read = function(n) {
5898 debug('wrapped _read', n);
5899 if (paused) {
5900 paused = false;
5901 stream.resume();
5902 }
5903 };
5904
5905 return self;
5906 };
5907
5908
5909
5910 // exposed for testing purposes only.
5911 Readable._fromList = fromList;
5912
5913 // Pluck off n bytes from an array of buffers.
5914 // Length is the combined lengths of all the buffers in the list.
5915 function fromList(n, state) {
5916 var list = state.buffer;
5917 var length = state.length;
5918 var stringMode = !!state.decoder;
5919 var objectMode = !!state.objectMode;
5920 var ret;
5921
5922 // nothing in the list, definitely empty.
5923 if (list.length === 0)
5924 return null;
5925
5926 if (length === 0)
5927 ret = null;
5928 else if (objectMode)
5929 ret = list.shift();
5930 else if (!n || n >= length) {
5931 // read it all, truncate the array.
5932 if (stringMode)
5933 ret = list.join('');
5934 else
5935 ret = Buffer.concat(list, length);
5936 list.length = 0;
5937 } else {
5938 // read just some of it.
5939 if (n < list[0].length) {
5940 // just take a part of the first list item.
5941 // slice is the same for buffers and strings.
5942 var buf = list[0];
5943 ret = buf.slice(0, n);
5944 list[0] = buf.slice(n);
5945 } else if (n === list[0].length) {
5946 // first list is a perfect match
5947 ret = list.shift();
5948 } else {
5949 // complex case.
5950 // we have enough to cover it, but it spans past the first buffer.
5951 if (stringMode)
5952 ret = '';
5953 else
5954 ret = new Buffer(n);
5955
5956 var c = 0;
5957 for (var i = 0, l = list.length; i < l && c < n; i++) {
5958 var buf = list[0];
5959 var cpy = Math.min(n - c, buf.length);
5960
5961 if (stringMode)
5962 ret += buf.slice(0, cpy);
5963 else
5964 buf.copy(ret, c, 0, cpy);
5965
5966 if (cpy < buf.length)
5967 list[0] = buf.slice(cpy);
5968 else
5969 list.shift();
5970
5971 c += cpy;
5972 }
5973 }
5974 }
5975
5976 return ret;
5977 }
5978
5979 function endReadable(stream) {
5980 var state = stream._readableState;
5981
5982 // If we get here before consuming all the bytes, then that is a
5983 // bug in node. Should never happen.
5984 if (state.length > 0)
5985 throw new Error('endReadable called on non-empty stream');
5986
5987 if (!state.endEmitted) {
5988 state.ended = true;
5989 process.nextTick(function() {
5990 // Check that we didn't get one last unshift.
5991 if (!state.endEmitted && state.length === 0) {
5992 state.endEmitted = true;
5993 stream.readable = false;
5994 stream.emit('end');
5995 }
5996 });
5997 }
5998 }
5999
6000 function forEach (xs, f) {
6001 for (var i = 0, l = xs.length; i < l; i++) {
6002 f(xs[i], i);
6003 }
6004 }
6005
6006 function indexOf (xs, x) {
6007 for (var i = 0, l = xs.length; i < l; i++) {
6008 if (xs[i] === x) return i;
6009 }
6010 return -1;
6011 }
6012
6013 }).call(this,require('_process'))
6014 },{"./_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){
6015 // Copyright Joyent, Inc. and other Node contributors.
6016 //
6017 // Permission is hereby granted, free of charge, to any person obtaining a
6018 // copy of this software and associated documentation files (the
6019 // "Software"), to deal in the Software without restriction, including
6020 // without limitation the rights to use, copy, modify, merge, publish,
6021 // distribute, sublicense, and/or sell copies of the Software, and to permit
6022 // persons to whom the Software is furnished to do so, subject to the
6023 // following conditions:
6024 //
6025 // The above copyright notice and this permission notice shall be included
6026 // in all copies or substantial portions of the Software.
6027 //
6028 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6029 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6030 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6031 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6032 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6033 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6034 // USE OR OTHER DEALINGS IN THE SOFTWARE.
6035
6036
6037 // a transform stream is a readable/writable stream where you do
6038 // something with the data. Sometimes it's called a "filter",
6039 // but that's not a great name for it, since that implies a thing where
6040 // some bits pass through, and others are simply ignored. (That would
6041 // be a valid example of a transform, of course.)
6042 //
6043 // While the output is causally related to the input, it's not a
6044 // necessarily symmetric or synchronous transformation. For example,
6045 // a zlib stream might take multiple plain-text writes(), and then
6046 // emit a single compressed chunk some time in the future.
6047 //
6048 // Here's how this works:
6049 //
6050 // The Transform stream has all the aspects of the readable and writable
6051 // stream classes. When you write(chunk), that calls _write(chunk,cb)
6052 // internally, and returns false if there's a lot of pending writes
6053 // buffered up. When you call read(), that calls _read(n) until
6054 // there's enough pending readable data buffered up.
6055 //
6056 // In a transform stream, the written data is placed in a buffer. When
6057 // _read(n) is called, it transforms the queued up data, calling the
6058 // buffered _write cb's as it consumes chunks. If consuming a single
6059 // written chunk would result in multiple output chunks, then the first
6060 // outputted bit calls the readcb, and subsequent chunks just go into
6061 // the read buffer, and will cause it to emit 'readable' if necessary.
6062 //
6063 // This way, back-pressure is actually determined by the reading side,
6064 // since _read has to be called to start processing a new chunk. However,
6065 // a pathological inflate type of transform can cause excessive buffering
6066 // here. For example, imagine a stream where every byte of input is
6067 // interpreted as an integer from 0-255, and then results in that many
6068 // bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in
6069 // 1kb of data being output. In this case, you could write a very small
6070 // amount of input, and end up with a very large amount of output. In
6071 // such a pathological inflating mechanism, there'd be no way to tell
6072 // the system to stop doing the transform. A single 4MB write could
6073 // cause the system to run out of memory.
6074 //
6075 // However, even in such a pathological case, only a single written chunk
6076 // would be consumed, and then the rest would wait (un-transformed) until
6077 // the results of the previous transformed chunk were consumed.
6078
6079 module.exports = Transform;
6080
6081 var Duplex = require('./_stream_duplex');
6082
6083 /*<replacement>*/
6084 var util = require('core-util-is');
6085 util.inherits = require('inherits');
6086 /*</replacement>*/
6087
6088 util.inherits(Transform, Duplex);
6089
6090
6091 function TransformState(options, stream) {
6092 this.afterTransform = function(er, data) {
6093 return afterTransform(stream, er, data);
6094 };
6095
6096 this.needTransform = false;
6097 this.transforming = false;
6098 this.writecb = null;
6099 this.writechunk = null;
6100 }
6101
6102 function afterTransform(stream, er, data) {
6103 var ts = stream._transformState;
6104 ts.transforming = false;
6105
6106 var cb = ts.writecb;
6107
6108 if (!cb)
6109 return stream.emit('error', new Error('no writecb in Transform class'));
6110
6111 ts.writechunk = null;
6112 ts.writecb = null;
6113
6114 if (!util.isNullOrUndefined(data))
6115 stream.push(data);
6116
6117 if (cb)
6118 cb(er);
6119
6120 var rs = stream._readableState;
6121 rs.reading = false;
6122 if (rs.needReadable || rs.length < rs.highWaterMark) {
6123 stream._read(rs.highWaterMark);
6124 }
6125 }
6126
6127
6128 function Transform(options) {
6129 if (!(this instanceof Transform))
6130 return new Transform(options);
6131
6132 Duplex.call(this, options);
6133
6134 this._transformState = new TransformState(options, this);
6135
6136 // when the writable side finishes, then flush out anything remaining.
6137 var stream = this;
6138
6139 // start out asking for a readable event once data is transformed.
6140 this._readableState.needReadable = true;
6141
6142 // we have implemented the _read method, and done the other things
6143 // that Readable wants before the first _read call, so unset the
6144 // sync guard flag.
6145 this._readableState.sync = false;
6146
6147 this.once('prefinish', function() {
6148 if (util.isFunction(this._flush))
6149 this._flush(function(er) {
6150 done(stream, er);
6151 });
6152 else
6153 done(stream);
6154 });
6155 }
6156
6157 Transform.prototype.push = function(chunk, encoding) {
6158 this._transformState.needTransform = false;
6159 return Duplex.prototype.push.call(this, chunk, encoding);
6160 };
6161
6162 // This is the part where you do stuff!
6163 // override this function in implementation classes.
6164 // 'chunk' is an input chunk.
6165 //
6166 // Call `push(newChunk)` to pass along transformed output
6167 // to the readable side. You may call 'push' zero or more times.
6168 //
6169 // Call `cb(err)` when you are done with this chunk. If you pass
6170 // an error, then that'll put the hurt on the whole operation. If you
6171 // never call cb(), then you'll never get another chunk.
6172 Transform.prototype._transform = function(chunk, encoding, cb) {
6173 throw new Error('not implemented');
6174 };
6175
6176 Transform.prototype._write = function(chunk, encoding, cb) {
6177 var ts = this._transformState;
6178 ts.writecb = cb;
6179 ts.writechunk = chunk;
6180 ts.writeencoding = encoding;
6181 if (!ts.transforming) {
6182 var rs = this._readableState;
6183 if (ts.needTransform ||
6184 rs.needReadable ||
6185 rs.length < rs.highWaterMark)
6186 this._read(rs.highWaterMark);
6187 }
6188 };
6189
6190 // Doesn't matter what the args are here.
6191 // _transform does all the work.
6192 // That we got here means that the readable side wants more data.
6193 Transform.prototype._read = function(n) {
6194 var ts = this._transformState;
6195
6196 if (!util.isNull(ts.writechunk) && ts.writecb && !ts.transforming) {
6197 ts.transforming = true;
6198 this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
6199 } else {
6200 // mark that we need a transform, so that any data that comes in
6201 // will get processed, now that we've asked for it.
6202 ts.needTransform = true;
6203 }
6204 };
6205
6206
6207 function done(stream, er) {
6208 if (er)
6209 return stream.emit('error', er);
6210
6211 // if there's nothing in the write buffer, then that means
6212 // that nothing more will ever be provided
6213 var ws = stream._writableState;
6214 var ts = stream._transformState;
6215
6216 if (ws.length)
6217 throw new Error('calling transform done when ws.length != 0');
6218
6219 if (ts.transforming)
6220 throw new Error('calling transform done when still transforming');
6221
6222 return stream.push(null);
6223 }
6224
6225 },{"./_stream_duplex":16,"core-util-is":21,"inherits":12}],20:[function(require,module,exports){
6226 (function (process){
6227 // Copyright Joyent, Inc. and other Node contributors.
6228 //
6229 // Permission is hereby granted, free of charge, to any person obtaining a
6230 // copy of this software and associated documentation files (the
6231 // "Software"), to deal in the Software without restriction, including
6232 // without limitation the rights to use, copy, modify, merge, publish,
6233 // distribute, sublicense, and/or sell copies of the Software, and to permit
6234 // persons to whom the Software is furnished to do so, subject to the
6235 // following conditions:
6236 //
6237 // The above copyright notice and this permission notice shall be included
6238 // in all copies or substantial portions of the Software.
6239 //
6240 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6241 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6242 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6243 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6244 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6245 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6246 // USE OR OTHER DEALINGS IN THE SOFTWARE.
6247
6248 // A bit simpler than readable streams.
6249 // Implement an async ._write(chunk, cb), and it'll handle all
6250 // the drain event emission and buffering.
6251
6252 module.exports = Writable;
6253
6254 /*<replacement>*/
6255 var Buffer = require('buffer').Buffer;
6256 /*</replacement>*/
6257
6258 Writable.WritableState = WritableState;
6259
6260
6261 /*<replacement>*/
6262 var util = require('core-util-is');
6263 util.inherits = require('inherits');
6264 /*</replacement>*/
6265
6266 var Stream = require('stream');
6267
6268 util.inherits(Writable, Stream);
6269
6270 function WriteReq(chunk, encoding, cb) {
6271 this.chunk = chunk;
6272 this.encoding = encoding;
6273 this.callback = cb;
6274 }
6275
6276 function WritableState(options, stream) {
6277 var Duplex = require('./_stream_duplex');
6278
6279 options = options || {};
6280
6281 // the point at which write() starts returning false
6282 // Note: 0 is a valid value, means that we always return false if
6283 // the entire buffer is not flushed immediately on write()
6284 var hwm = options.highWaterMark;
6285 var defaultHwm = options.objectMode ? 16 : 16 * 1024;
6286 this.highWaterMark = (hwm || hwm === 0) ? hwm : defaultHwm;
6287
6288 // object stream flag to indicate whether or not this stream
6289 // contains buffers or objects.
6290 this.objectMode = !!options.objectMode;
6291
6292 if (stream instanceof Duplex)
6293 this.objectMode = this.objectMode || !!options.writableObjectMode;
6294
6295 // cast to ints.
6296 this.highWaterMark = ~~this.highWaterMark;
6297
6298 this.needDrain = false;
6299 // at the start of calling end()
6300 this.ending = false;
6301 // when end() has been called, and returned
6302 this.ended = false;
6303 // when 'finish' is emitted
6304 this.finished = false;
6305
6306 // should we decode strings into buffers before passing to _write?
6307 // this is here so that some node-core streams can optimize string
6308 // handling at a lower level.
6309 var noDecode = options.decodeStrings === false;
6310 this.decodeStrings = !noDecode;
6311
6312 // Crypto is kind of old and crusty. Historically, its default string
6313 // encoding is 'binary' so we have to make this configurable.
6314 // Everything else in the universe uses 'utf8', though.
6315 this.defaultEncoding = options.defaultEncoding || 'utf8';
6316
6317 // not an actual buffer we keep track of, but a measurement
6318 // of how much we're waiting to get pushed to some underlying
6319 // socket or file.
6320 this.length = 0;
6321
6322 // a flag to see when we're in the middle of a write.
6323 this.writing = false;
6324
6325 // when true all writes will be buffered until .uncork() call
6326 this.corked = 0;
6327
6328 // a flag to be able to tell if the onwrite cb is called immediately,
6329 // or on a later tick. We set this to true at first, because any
6330 // actions that shouldn't happen until "later" should generally also
6331 // not happen before the first write call.
6332 this.sync = true;
6333
6334 // a flag to know if we're processing previously buffered items, which
6335 // may call the _write() callback in the same tick, so that we don't
6336 // end up in an overlapped onwrite situation.
6337 this.bufferProcessing = false;
6338
6339 // the callback that's passed to _write(chunk,cb)
6340 this.onwrite = function(er) {
6341 onwrite(stream, er);
6342 };
6343
6344 // the callback that the user supplies to write(chunk,encoding,cb)
6345 this.writecb = null;
6346
6347 // the amount that is being written when _write is called.
6348 this.writelen = 0;
6349
6350 this.buffer = [];
6351
6352 // number of pending user-supplied write callbacks
6353 // this must be 0 before 'finish' can be emitted
6354 this.pendingcb = 0;
6355
6356 // emit prefinish if the only thing we're waiting for is _write cbs
6357 // This is relevant for synchronous Transform streams
6358 this.prefinished = false;
6359
6360 // True if the error was already emitted and should not be thrown again
6361 this.errorEmitted = false;
6362 }
6363
6364 function Writable(options) {
6365 var Duplex = require('./_stream_duplex');
6366
6367 // Writable ctor is applied to Duplexes, though they're not
6368 // instanceof Writable, they're instanceof Readable.
6369 if (!(this instanceof Writable) && !(this instanceof Duplex))
6370 return new Writable(options);
6371
6372 this._writableState = new WritableState(options, this);
6373
6374 // legacy.
6375 this.writable = true;
6376
6377 Stream.call(this);
6378 }
6379
6380 // Otherwise people can pipe Writable streams, which is just wrong.
6381 Writable.prototype.pipe = function() {
6382 this.emit('error', new Error('Cannot pipe. Not readable.'));
6383 };
6384
6385
6386 function writeAfterEnd(stream, state, cb) {
6387 var er = new Error('write after end');
6388 // TODO: defer error events consistently everywhere, not just the cb
6389 stream.emit('error', er);
6390 process.nextTick(function() {
6391 cb(er);
6392 });
6393 }
6394
6395 // If we get something that is not a buffer, string, null, or undefined,
6396 // and we're not in objectMode, then that's an error.
6397 // Otherwise stream chunks are all considered to be of length=1, and the
6398 // watermarks determine how many objects to keep in the buffer, rather than
6399 // how many bytes or characters.
6400 function validChunk(stream, state, chunk, cb) {
6401 var valid = true;
6402 if (!util.isBuffer(chunk) &&
6403 !util.isString(chunk) &&
6404 !util.isNullOrUndefined(chunk) &&
6405 !state.objectMode) {
6406 var er = new TypeError('Invalid non-string/buffer chunk');
6407 stream.emit('error', er);
6408 process.nextTick(function() {
6409 cb(er);
6410 });
6411 valid = false;
6412 }
6413 return valid;
6414 }
6415
6416 Writable.prototype.write = function(chunk, encoding, cb) {
6417 var state = this._writableState;
6418 var ret = false;
6419
6420 if (util.isFunction(encoding)) {
6421 cb = encoding;
6422 encoding = null;
6423 }
6424
6425 if (util.isBuffer(chunk))
6426 encoding = 'buffer';
6427 else if (!encoding)
6428 encoding = state.defaultEncoding;
6429
6430 if (!util.isFunction(cb))
6431 cb = function() {};
6432
6433 if (state.ended)
6434 writeAfterEnd(this, state, cb);
6435 else if (validChunk(this, state, chunk, cb)) {
6436 state.pendingcb++;
6437 ret = writeOrBuffer(this, state, chunk, encoding, cb);
6438 }
6439
6440 return ret;
6441 };
6442
6443 Writable.prototype.cork = function() {
6444 var state = this._writableState;
6445
6446 state.corked++;
6447 };
6448
6449 Writable.prototype.uncork = function() {
6450 var state = this._writableState;
6451
6452 if (state.corked) {
6453 state.corked--;
6454
6455 if (!state.writing &&
6456 !state.corked &&
6457 !state.finished &&
6458 !state.bufferProcessing &&
6459 state.buffer.length)
6460 clearBuffer(this, state);
6461 }
6462 };
6463
6464 function decodeChunk(state, chunk, encoding) {
6465 if (!state.objectMode &&
6466 state.decodeStrings !== false &&
6467 util.isString(chunk)) {
6468 chunk = new Buffer(chunk, encoding);
6469 }
6470 return chunk;
6471 }
6472
6473 // if we're already writing something, then just put this
6474 // in the queue, and wait our turn. Otherwise, call _write
6475 // If we return false, then we need a drain event, so set that flag.
6476 function writeOrBuffer(stream, state, chunk, encoding, cb) {
6477 chunk = decodeChunk(state, chunk, encoding);
6478 if (util.isBuffer(chunk))
6479 encoding = 'buffer';
6480 var len = state.objectMode ? 1 : chunk.length;
6481
6482 state.length += len;
6483
6484 var ret = state.length < state.highWaterMark;
6485 // we must ensure that previous needDrain will not be reset to false.
6486 if (!ret)
6487 state.needDrain = true;
6488
6489 if (state.writing || state.corked)
6490 state.buffer.push(new WriteReq(chunk, encoding, cb));
6491 else
6492 doWrite(stream, state, false, len, chunk, encoding, cb);
6493
6494 return ret;
6495 }
6496
6497 function doWrite(stream, state, writev, len, chunk, encoding, cb) {
6498 state.writelen = len;
6499 state.writecb = cb;
6500 state.writing = true;
6501 state.sync = true;
6502 if (writev)
6503 stream._writev(chunk, state.onwrite);
6504 else
6505 stream._write(chunk, encoding, state.onwrite);
6506 state.sync = false;
6507 }
6508
6509 function onwriteError(stream, state, sync, er, cb) {
6510 if (sync)
6511 process.nextTick(function() {
6512 state.pendingcb--;
6513 cb(er);
6514 });
6515 else {
6516 state.pendingcb--;
6517 cb(er);
6518 }
6519
6520 stream._writableState.errorEmitted = true;
6521 stream.emit('error', er);
6522 }
6523
6524 function onwriteStateUpdate(state) {
6525 state.writing = false;
6526 state.writecb = null;
6527 state.length -= state.writelen;
6528 state.writelen = 0;
6529 }
6530
6531 function onwrite(stream, er) {
6532 var state = stream._writableState;
6533 var sync = state.sync;
6534 var cb = state.writecb;
6535
6536 onwriteStateUpdate(state);
6537
6538 if (er)
6539 onwriteError(stream, state, sync, er, cb);
6540 else {
6541 // Check if we're actually ready to finish, but don't emit yet
6542 var finished = needFinish(stream, state);
6543
6544 if (!finished &&
6545 !state.corked &&
6546 !state.bufferProcessing &&
6547 state.buffer.length) {
6548 clearBuffer(stream, state);
6549 }
6550
6551 if (sync) {
6552 process.nextTick(function() {
6553 afterWrite(stream, state, finished, cb);
6554 });
6555 } else {
6556 afterWrite(stream, state, finished, cb);
6557 }
6558 }
6559 }
6560
6561 function afterWrite(stream, state, finished, cb) {
6562 if (!finished)
6563 onwriteDrain(stream, state);
6564 state.pendingcb--;
6565 cb();
6566 finishMaybe(stream, state);
6567 }
6568
6569 // Must force callback to be called on nextTick, so that we don't
6570 // emit 'drain' before the write() consumer gets the 'false' return
6571 // value, and has a chance to attach a 'drain' listener.
6572 function onwriteDrain(stream, state) {
6573 if (state.length === 0 && state.needDrain) {
6574 state.needDrain = false;
6575 stream.emit('drain');
6576 }
6577 }
6578
6579
6580 // if there's something in the buffer waiting, then process it
6581 function clearBuffer(stream, state) {
6582 state.bufferProcessing = true;
6583
6584 if (stream._writev && state.buffer.length > 1) {
6585 // Fast case, write everything using _writev()
6586 var cbs = [];
6587 for (var c = 0; c < state.buffer.length; c++)
6588 cbs.push(state.buffer[c].callback);
6589
6590 // count the one we are adding, as well.
6591 // TODO(isaacs) clean this up
6592 state.pendingcb++;
6593 doWrite(stream, state, true, state.length, state.buffer, '', function(err) {
6594 for (var i = 0; i < cbs.length; i++) {
6595 state.pendingcb--;
6596 cbs[i](err);
6597 }
6598 });
6599
6600 // Clear buffer
6601 state.buffer = [];
6602 } else {
6603 // Slow case, write chunks one-by-one
6604 for (var c = 0; c < state.buffer.length; c++) {
6605 var entry = state.buffer[c];
6606 var chunk = entry.chunk;
6607 var encoding = entry.encoding;
6608 var cb = entry.callback;
6609 var len = state.objectMode ? 1 : chunk.length;
6610
6611 doWrite(stream, state, false, len, chunk, encoding, cb);
6612
6613 // if we didn't call the onwrite immediately, then
6614 // it means that we need to wait until it does.
6615 // also, that means that the chunk and cb are currently
6616 // being processed, so move the buffer counter past them.
6617 if (state.writing) {
6618 c++;
6619 break;
6620 }
6621 }
6622
6623 if (c < state.buffer.length)
6624 state.buffer = state.buffer.slice(c);
6625 else
6626 state.buffer.length = 0;
6627 }
6628
6629 state.bufferProcessing = false;
6630 }
6631
6632 Writable.prototype._write = function(chunk, encoding, cb) {
6633 cb(new Error('not implemented'));
6634
6635 };
6636
6637 Writable.prototype._writev = null;
6638
6639 Writable.prototype.end = function(chunk, encoding, cb) {
6640 var state = this._writableState;
6641
6642 if (util.isFunction(chunk)) {
6643 cb = chunk;
6644 chunk = null;
6645 encoding = null;
6646 } else if (util.isFunction(encoding)) {
6647 cb = encoding;
6648 encoding = null;
6649 }
6650
6651 if (!util.isNullOrUndefined(chunk))
6652 this.write(chunk, encoding);
6653
6654 // .end() fully uncorks
6655 if (state.corked) {
6656 state.corked = 1;
6657 this.uncork();
6658 }
6659
6660 // ignore unnecessary end() calls.
6661 if (!state.ending && !state.finished)
6662 endWritable(this, state, cb);
6663 };
6664
6665
6666 function needFinish(stream, state) {
6667 return (state.ending &&
6668 state.length === 0 &&
6669 !state.finished &&
6670 !state.writing);
6671 }
6672
6673 function prefinish(stream, state) {
6674 if (!state.prefinished) {
6675 state.prefinished = true;
6676 stream.emit('prefinish');
6677 }
6678 }
6679
6680 function finishMaybe(stream, state) {
6681 var need = needFinish(stream, state);
6682 if (need) {
6683 if (state.pendingcb === 0) {
6684 prefinish(stream, state);
6685 state.finished = true;
6686 stream.emit('finish');
6687 } else
6688 prefinish(stream, state);
6689 }
6690 return need;
6691 }
6692
6693 function endWritable(stream, state, cb) {
6694 state.ending = true;
6695 finishMaybe(stream, state);
6696 if (cb) {
6697 if (state.finished)
6698 process.nextTick(cb);
6699 else
6700 stream.once('finish', cb);
6701 }
6702 state.ended = true;
6703 }
6704
6705 }).call(this,require('_process'))
6706 },{"./_stream_duplex":16,"_process":14,"buffer":7,"core-util-is":21,"inherits":12,"stream":26}],21:[function(require,module,exports){
6707 (function (Buffer){
6708 // Copyright Joyent, Inc. and other Node contributors.
6709 //
6710 // Permission is hereby granted, free of charge, to any person obtaining a
6711 // copy of this software and associated documentation files (the
6712 // "Software"), to deal in the Software without restriction, including
6713 // without limitation the rights to use, copy, modify, merge, publish,
6714 // distribute, sublicense, and/or sell copies of the Software, and to permit
6715 // persons to whom the Software is furnished to do so, subject to the
6716 // following conditions:
6717 //
6718 // The above copyright notice and this permission notice shall be included
6719 // in all copies or substantial portions of the Software.
6720 //
6721 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6722 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6723 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6724 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6725 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6726 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6727 // USE OR OTHER DEALINGS IN THE SOFTWARE.
6728
6729 // NOTE: These type checking functions intentionally don't use `instanceof`
6730 // because it is fragile and can be easily faked with `Object.create()`.
6731 function isArray(ar) {
6732 return Array.isArray(ar);
6733 }
6734 exports.isArray = isArray;
6735
6736 function isBoolean(arg) {
6737 return typeof arg === 'boolean';
6738 }
6739 exports.isBoolean = isBoolean;
6740
6741 function isNull(arg) {
6742 return arg === null;
6743 }
6744 exports.isNull = isNull;
6745
6746 function isNullOrUndefined(arg) {
6747 return arg == null;
6748 }
6749 exports.isNullOrUndefined = isNullOrUndefined;
6750
6751 function isNumber(arg) {
6752 return typeof arg === 'number';
6753 }
6754 exports.isNumber = isNumber;
6755
6756 function isString(arg) {
6757 return typeof arg === 'string';
6758 }
6759 exports.isString = isString;
6760
6761 function isSymbol(arg) {
6762 return typeof arg === 'symbol';
6763 }
6764 exports.isSymbol = isSymbol;
6765
6766 function isUndefined(arg) {
6767 return arg === void 0;
6768 }
6769 exports.isUndefined = isUndefined;
6770
6771 function isRegExp(re) {
6772 return isObject(re) && objectToString(re) === '[object RegExp]';
6773 }
6774 exports.isRegExp = isRegExp;
6775
6776 function isObject(arg) {
6777 return typeof arg === 'object' && arg !== null;
6778 }
6779 exports.isObject = isObject;
6780
6781 function isDate(d) {
6782 return isObject(d) && objectToString(d) === '[object Date]';
6783 }
6784 exports.isDate = isDate;
6785
6786 function isError(e) {
6787 return isObject(e) &&
6788 (objectToString(e) === '[object Error]' || e instanceof Error);
6789 }
6790 exports.isError = isError;
6791
6792 function isFunction(arg) {
6793 return typeof arg === 'function';
6794 }
6795 exports.isFunction = isFunction;
6796
6797 function isPrimitive(arg) {
6798 return arg === null ||
6799 typeof arg === 'boolean' ||
6800 typeof arg === 'number' ||
6801 typeof arg === 'string' ||
6802 typeof arg === 'symbol' || // ES6 symbol
6803 typeof arg === 'undefined';
6804 }
6805 exports.isPrimitive = isPrimitive;
6806
6807 function isBuffer(arg) {
6808 return Buffer.isBuffer(arg);
6809 }
6810 exports.isBuffer = isBuffer;
6811
6812 function objectToString(o) {
6813 return Object.prototype.toString.call(o);
6814 }
6815 }).call(this,require("buffer").Buffer)
6816 },{"buffer":7}],22:[function(require,module,exports){
6817 module.exports = require("./lib/_stream_passthrough.js")
6818
6819 },{"./lib/_stream_passthrough.js":17}],23:[function(require,module,exports){
6820 exports = module.exports = require('./lib/_stream_readable.js');
6821 exports.Stream = require('stream');
6822 exports.Readable = exports;
6823 exports.Writable = require('./lib/_stream_writable.js');
6824 exports.Duplex = require('./lib/_stream_duplex.js');
6825 exports.Transform = require('./lib/_stream_transform.js');
6826 exports.PassThrough = require('./lib/_stream_passthrough.js');
6827
6828 },{"./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){
6829 module.exports = require("./lib/_stream_transform.js")
6830
6831 },{"./lib/_stream_transform.js":19}],25:[function(require,module,exports){
6832 module.exports = require("./lib/_stream_writable.js")
6833
6834 },{"./lib/_stream_writable.js":20}],26:[function(require,module,exports){
6835 // Copyright Joyent, Inc. and other Node contributors.
6836 //
6837 // Permission is hereby granted, free of charge, to any person obtaining a
6838 // copy of this software and associated documentation files (the
6839 // "Software"), to deal in the Software without restriction, including
6840 // without limitation the rights to use, copy, modify, merge, publish,
6841 // distribute, sublicense, and/or sell copies of the Software, and to permit
6842 // persons to whom the Software is furnished to do so, subject to the
6843 // following conditions:
6844 //
6845 // The above copyright notice and this permission notice shall be included
6846 // in all copies or substantial portions of the Software.
6847 //
6848 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6849 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6850 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6851 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6852 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6853 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6854 // USE OR OTHER DEALINGS IN THE SOFTWARE.
6855
6856 module.exports = Stream;
6857
6858 var EE = require('events').EventEmitter;
6859 var inherits = require('inherits');
6860
6861 inherits(Stream, EE);
6862 Stream.Readable = require('readable-stream/readable.js');
6863 Stream.Writable = require('readable-stream/writable.js');
6864 Stream.Duplex = require('readable-stream/duplex.js');
6865 Stream.Transform = require('readable-stream/transform.js');
6866 Stream.PassThrough = require('readable-stream/passthrough.js');
6867
6868 // Backwards-compat with node 0.4.x
6869 Stream.Stream = Stream;
6870
6871
6872
6873 // old-style streams. Note that the pipe method (the only relevant
6874 // part of this class) is overridden in the Readable class.
6875
6876 function Stream() {
6877 EE.call(this);
6878 }
6879
6880 Stream.prototype.pipe = function(dest, options) {
6881 var source = this;
6882
6883 function ondata(chunk) {
6884 if (dest.writable) {
6885 if (false === dest.write(chunk) && source.pause) {
6886 source.pause();
6887 }
6888 }
6889 }
6890
6891 source.on('data', ondata);
6892
6893 function ondrain() {
6894 if (source.readable && source.resume) {
6895 source.resume();
6896 }
6897 }
6898
6899 dest.on('drain', ondrain);
6900
6901 // If the 'end' option is not supplied, dest.end() will be called when
6902 // source gets the 'end' or 'close' events. Only dest.end() once.
6903 if (!dest._isStdio && (!options || options.end !== false)) {
6904 source.on('end', onend);
6905 source.on('close', onclose);
6906 }
6907
6908 var didOnEnd = false;
6909 function onend() {
6910 if (didOnEnd) return;
6911 didOnEnd = true;
6912
6913 dest.end();
6914 }
6915
6916
6917 function onclose() {
6918 if (didOnEnd) return;
6919 didOnEnd = true;
6920
6921 if (typeof dest.destroy === 'function') dest.destroy();
6922 }
6923
6924 // don't leave dangling pipes when there are errors.
6925 function onerror(er) {
6926 cleanup();
6927 if (EE.listenerCount(this, 'error') === 0) {
6928 throw er; // Unhandled stream error in pipe.
6929 }
6930 }
6931
6932 source.on('error', onerror);
6933 dest.on('error', onerror);
6934
6935 // remove all the event listeners that were added.
6936 function cleanup() {
6937 source.removeListener('data', ondata);
6938 dest.removeListener('drain', ondrain);
6939
6940 source.removeListener('end', onend);
6941 source.removeListener('close', onclose);
6942
6943 source.removeListener('error', onerror);
6944 dest.removeListener('error', onerror);
6945
6946 source.removeListener('end', cleanup);
6947 source.removeListener('close', cleanup);
6948
6949 dest.removeListener('close', cleanup);
6950 }
6951
6952 source.on('end', cleanup);
6953 source.on('close', cleanup);
6954
6955 dest.on('close', cleanup);
6956
6957 dest.emit('pipe', source);
6958
6959 // Allow for unix-like usage: A.pipe(B).pipe(C)
6960 return dest;
6961 };
6962
6963 },{"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){
6964 // Copyright Joyent, Inc. and other Node contributors.
6965 //
6966 // Permission is hereby granted, free of charge, to any person obtaining a
6967 // copy of this software and associated documentation files (the
6968 // "Software"), to deal in the Software without restriction, including
6969 // without limitation the rights to use, copy, modify, merge, publish,
6970 // distribute, sublicense, and/or sell copies of the Software, and to permit
6971 // persons to whom the Software is furnished to do so, subject to the
6972 // following conditions:
6973 //
6974 // The above copyright notice and this permission notice shall be included
6975 // in all copies or substantial portions of the Software.
6976 //
6977 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6978 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6979 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6980 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6981 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6982 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6983 // USE OR OTHER DEALINGS IN THE SOFTWARE.
6984
6985 var Buffer = require('buffer').Buffer;
6986
6987 var isBufferEncoding = Buffer.isEncoding
6988 || function(encoding) {
6989 switch (encoding && encoding.toLowerCase()) {
6990 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;
6991 default: return false;
6992 }
6993 }
6994
6995
6996 function assertEncoding(encoding) {
6997 if (encoding && !isBufferEncoding(encoding)) {
6998 throw new Error('Unknown encoding: ' + encoding);
6999 }
7000 }
7001
7002 // StringDecoder provides an interface for efficiently splitting a series of
7003 // buffers into a series of JS strings without breaking apart multi-byte
7004 // characters. CESU-8 is handled as part of the UTF-8 encoding.
7005 //
7006 // @TODO Handling all encodings inside a single object makes it very difficult
7007 // to reason about this code, so it should be split up in the future.
7008 // @TODO There should be a utf8-strict encoding that rejects invalid UTF-8 code
7009 // points as used by CESU-8.
7010 var StringDecoder = exports.StringDecoder = function(encoding) {
7011 this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, '');
7012 assertEncoding(encoding);
7013 switch (this.encoding) {
7014 case 'utf8':
7015 // CESU-8 represents each of Surrogate Pair by 3-bytes
7016 this.surrogateSize = 3;
7017 break;
7018 case 'ucs2':
7019 case 'utf16le':
7020 // UTF-16 represents each of Surrogate Pair by 2-bytes
7021 this.surrogateSize = 2;
7022 this.detectIncompleteChar = utf16DetectIncompleteChar;
7023 break;
7024 case 'base64':
7025 // Base-64 stores 3 bytes in 4 chars, and pads the remainder.
7026 this.surrogateSize = 3;
7027 this.detectIncompleteChar = base64DetectIncompleteChar;
7028 break;
7029 default:
7030 this.write = passThroughWrite;
7031 return;
7032 }
7033
7034 // Enough space to store all bytes of a single character. UTF-8 needs 4
7035 // bytes, but CESU-8 may require up to 6 (3 bytes per surrogate).
7036 this.charBuffer = new Buffer(6);
7037 // Number of bytes received for the current incomplete multi-byte character.
7038 this.charReceived = 0;
7039 // Number of bytes expected for the current incomplete multi-byte character.
7040 this.charLength = 0;
7041 };
7042
7043
7044 // write decodes the given buffer and returns it as JS string that is
7045 // guaranteed to not contain any partial multi-byte characters. Any partial
7046 // character found at the end of the buffer is buffered up, and will be
7047 // returned when calling write again with the remaining bytes.
7048 //
7049 // Note: Converting a Buffer containing an orphan surrogate to a String
7050 // currently works, but converting a String to a Buffer (via `new Buffer`, or
7051 // Buffer#write) will replace incomplete surrogates with the unicode
7052 // replacement character. See https://codereview.chromium.org/121173009/ .
7053 StringDecoder.prototype.write = function(buffer) {
7054 var charStr = '';
7055 // if our last write ended with an incomplete multibyte character
7056 while (this.charLength) {
7057 // determine how many remaining bytes this buffer has to offer for this char
7058 var available = (buffer.length >= this.charLength - this.charReceived) ?
7059 this.charLength - this.charReceived :
7060 buffer.length;
7061
7062 // add the new bytes to the char buffer
7063 buffer.copy(this.charBuffer, this.charReceived, 0, available);
7064 this.charReceived += available;
7065
7066 if (this.charReceived < this.charLength) {
7067 // still not enough chars in this buffer? wait for more ...
7068 return '';
7069 }
7070
7071 // remove bytes belonging to the current character from the buffer
7072 buffer = buffer.slice(available, buffer.length);
7073
7074 // get the character that was split
7075 charStr = this.charBuffer.slice(0, this.charLength).toString(this.encoding);
7076
7077 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
7078 var charCode = charStr.charCodeAt(charStr.length - 1);
7079 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
7080 this.charLength += this.surrogateSize;
7081 charStr = '';
7082 continue;
7083 }
7084 this.charReceived = this.charLength = 0;
7085
7086 // if there are no more bytes in this buffer, just emit our char
7087 if (buffer.length === 0) {
7088 return charStr;
7089 }
7090 break;
7091 }
7092
7093 // determine and set charLength / charReceived
7094 this.detectIncompleteChar(buffer);
7095
7096 var end = buffer.length;
7097 if (this.charLength) {
7098 // buffer the incomplete character bytes we got
7099 buffer.copy(this.charBuffer, 0, buffer.length - this.charReceived, end);
7100 end -= this.charReceived;
7101 }
7102
7103 charStr += buffer.toString(this.encoding, 0, end);
7104
7105 var end = charStr.length - 1;
7106 var charCode = charStr.charCodeAt(end);
7107 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
7108 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
7109 var size = this.surrogateSize;
7110 this.charLength += size;
7111 this.charReceived += size;
7112 this.charBuffer.copy(this.charBuffer, size, 0, size);
7113 buffer.copy(this.charBuffer, 0, 0, size);
7114 return charStr.substring(0, end);
7115 }
7116
7117 // or just emit the charStr
7118 return charStr;
7119 };
7120
7121 // detectIncompleteChar determines if there is an incomplete UTF-8 character at
7122 // the end of the given buffer. If so, it sets this.charLength to the byte
7123 // length that character, and sets this.charReceived to the number of bytes
7124 // that are available for this character.
7125 StringDecoder.prototype.detectIncompleteChar = function(buffer) {
7126 // determine how many bytes we have to check at the end of this buffer
7127 var i = (buffer.length >= 3) ? 3 : buffer.length;
7128
7129 // Figure out if one of the last i bytes of our buffer announces an
7130 // incomplete char.
7131 for (; i > 0; i--) {
7132 var c = buffer[buffer.length - i];
7133
7134 // See http://en.wikipedia.org/wiki/UTF-8#Description
7135
7136 // 110XXXXX
7137 if (i == 1 && c >> 5 == 0x06) {
7138 this.charLength = 2;
7139 break;
7140 }
7141
7142 // 1110XXXX
7143 if (i <= 2 && c >> 4 == 0x0E) {
7144 this.charLength = 3;
7145 break;
7146 }
7147
7148 // 11110XXX
7149 if (i <= 3 && c >> 3 == 0x1E) {
7150 this.charLength = 4;
7151 break;
7152 }
7153 }
7154 this.charReceived = i;
7155 };
7156
7157 StringDecoder.prototype.end = function(buffer) {
7158 var res = '';
7159 if (buffer && buffer.length)
7160 res = this.write(buffer);
7161
7162 if (this.charReceived) {
7163 var cr = this.charReceived;
7164 var buf = this.charBuffer;
7165 var enc = this.encoding;
7166 res += buf.slice(0, cr).toString(enc);
7167 }
7168
7169 return res;
7170 };
7171
7172 function passThroughWrite(buffer) {
7173 return buffer.toString(this.encoding);
7174 }
7175
7176 function utf16DetectIncompleteChar(buffer) {
7177 this.charReceived = buffer.length % 2;
7178 this.charLength = this.charReceived ? 2 : 0;
7179 }
7180
7181 function base64DetectIncompleteChar(buffer) {
7182 this.charReceived = buffer.length % 3;
7183 this.charLength = this.charReceived ? 3 : 0;
7184 }
7185
7186 },{"buffer":7}],28:[function(require,module,exports){
7187 module.exports = function isBuffer(arg) {
7188 return arg && typeof arg === 'object'
7189 && typeof arg.copy === 'function'
7190 && typeof arg.fill === 'function'
7191 && typeof arg.readUInt8 === 'function';
7192 }
7193 },{}],29:[function(require,module,exports){
7194 (function (process,global){
7195 // Copyright Joyent, Inc. and other Node contributors.
7196 //
7197 // Permission is hereby granted, free of charge, to any person obtaining a
7198 // copy of this software and associated documentation files (the
7199 // "Software"), to deal in the Software without restriction, including
7200 // without limitation the rights to use, copy, modify, merge, publish,
7201 // distribute, sublicense, and/or sell copies of the Software, and to permit
7202 // persons to whom the Software is furnished to do so, subject to the
7203 // following conditions:
7204 //
7205 // The above copyright notice and this permission notice shall be included
7206 // in all copies or substantial portions of the Software.
7207 //
7208 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
7209 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
7210 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
7211 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
7212 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
7213 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
7214 // USE OR OTHER DEALINGS IN THE SOFTWARE.
7215
7216 var formatRegExp = /%[sdj%]/g;
7217 exports.format = function(f) {
7218 if (!isString(f)) {
7219 var objects = [];
7220 for (var i = 0; i < arguments.length; i++) {
7221 objects.push(inspect(arguments[i]));
7222 }
7223 return objects.join(' ');
7224 }
7225
7226 var i = 1;
7227 var args = arguments;
7228 var len = args.length;
7229 var str = String(f).replace(formatRegExp, function(x) {
7230 if (x === '%%') return '%';
7231 if (i >= len) return x;
7232 switch (x) {
7233 case '%s': return String(args[i++]);
7234 case '%d': return Number(args[i++]);
7235 case '%j':
7236 try {
7237 return JSON.stringify(args[i++]);
7238 } catch (_) {
7239 return '[Circular]';
7240 }
7241 default:
7242 return x;
7243 }
7244 });
7245 for (var x = args[i]; i < len; x = args[++i]) {
7246 if (isNull(x) || !isObject(x)) {
7247 str += ' ' + x;
7248 } else {
7249 str += ' ' + inspect(x);
7250 }
7251 }
7252 return str;
7253 };
7254
7255
7256 // Mark that a method should not be used.
7257 // Returns a modified function which warns once by default.
7258 // If --no-deprecation is set, then it is a no-op.
7259 exports.deprecate = function(fn, msg) {
7260 // Allow for deprecating things in the process of starting up.
7261 if (isUndefined(global.process)) {
7262 return function() {
7263 return exports.deprecate(fn, msg).apply(this, arguments);
7264 };
7265 }
7266
7267 if (process.noDeprecation === true) {
7268 return fn;
7269 }
7270
7271 var warned = false;
7272 function deprecated() {
7273 if (!warned) {
7274 if (process.throwDeprecation) {
7275 throw new Error(msg);
7276 } else if (process.traceDeprecation) {
7277 console.trace(msg);
7278 } else {
7279 console.error(msg);
7280 }
7281 warned = true;
7282 }
7283 return fn.apply(this, arguments);
7284 }
7285
7286 return deprecated;
7287 };
7288
7289
7290 var debugs = {};
7291 var debugEnviron;
7292 exports.debuglog = function(set) {
7293 if (isUndefined(debugEnviron))
7294 debugEnviron = process.env.NODE_DEBUG || '';
7295 set = set.toUpperCase();
7296 if (!debugs[set]) {
7297 if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
7298 var pid = process.pid;
7299 debugs[set] = function() {
7300 var msg = exports.format.apply(exports, arguments);
7301 console.error('%s %d: %s', set, pid, msg);
7302 };
7303 } else {
7304 debugs[set] = function() {};
7305 }
7306 }
7307 return debugs[set];
7308 };
7309
7310
7311 /**
7312 * Echos the value of a value. Trys to print the value out
7313 * in the best way possible given the different types.
7314 *
7315 * @param {Object} obj The object to print out.
7316 * @param {Object} opts Optional options object that alters the output.
7317 */
7318 /* legacy: obj, showHidden, depth, colors*/
7319 function inspect(obj, opts) {
7320 // default options
7321 var ctx = {
7322 seen: [],
7323 stylize: stylizeNoColor
7324 };
7325 // legacy...
7326 if (arguments.length >= 3) ctx.depth = arguments[2];
7327 if (arguments.length >= 4) ctx.colors = arguments[3];
7328 if (isBoolean(opts)) {
7329 // legacy...
7330 ctx.showHidden = opts;
7331 } else if (opts) {
7332 // got an "options" object
7333 exports._extend(ctx, opts);
7334 }
7335 // set default options
7336 if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
7337 if (isUndefined(ctx.depth)) ctx.depth = 2;
7338 if (isUndefined(ctx.colors)) ctx.colors = false;
7339 if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
7340 if (ctx.colors) ctx.stylize = stylizeWithColor;
7341 return formatValue(ctx, obj, ctx.depth);
7342 }
7343 exports.inspect = inspect;
7344
7345
7346 // http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
7347 inspect.colors = {
7348 'bold' : [1, 22],
7349 'italic' : [3, 23],
7350 'underline' : [4, 24],
7351 'inverse' : [7, 27],
7352 'white' : [37, 39],
7353 'grey' : [90, 39],
7354 'black' : [30, 39],
7355 'blue' : [34, 39],
7356 'cyan' : [36, 39],
7357 'green' : [32, 39],
7358 'magenta' : [35, 39],
7359 'red' : [31, 39],
7360 'yellow' : [33, 39]
7361 };
7362
7363 // Don't use 'blue' not visible on cmd.exe
7364 inspect.styles = {
7365 'special': 'cyan',
7366 'number': 'yellow',
7367 'boolean': 'yellow',
7368 'undefined': 'grey',
7369 'null': 'bold',
7370 'string': 'green',
7371 'date': 'magenta',
7372 // "name": intentionally not styling
7373 'regexp': 'red'
7374 };
7375
7376
7377 function stylizeWithColor(str, styleType) {
7378 var style = inspect.styles[styleType];
7379
7380 if (style) {
7381 return '\u001b[' + inspect.colors[style][0] + 'm' + str +
7382 '\u001b[' + inspect.colors[style][1] + 'm';
7383 } else {
7384 return str;
7385 }
7386 }
7387
7388
7389 function stylizeNoColor(str, styleType) {
7390 return str;
7391 }
7392
7393
7394 function arrayToHash(array) {
7395 var hash = {};
7396
7397 array.forEach(function(val, idx) {
7398 hash[val] = true;
7399 });
7400
7401 return hash;
7402 }
7403
7404
7405 function formatValue(ctx, value, recurseTimes) {
7406 // Provide a hook for user-specified inspect functions.
7407 // Check that value is an object with an inspect function on it
7408 if (ctx.customInspect &&
7409 value &&
7410 isFunction(value.inspect) &&
7411 // Filter out the util module, it's inspect function is special
7412 value.inspect !== exports.inspect &&
7413 // Also filter out any prototype objects using the circular check.
7414 !(value.constructor && value.constructor.prototype === value)) {
7415 var ret = value.inspect(recurseTimes, ctx);
7416 if (!isString(ret)) {
7417 ret = formatValue(ctx, ret, recurseTimes);
7418 }
7419 return ret;
7420 }
7421
7422 // Primitive types cannot have properties
7423 var primitive = formatPrimitive(ctx, value);
7424 if (primitive) {
7425 return primitive;
7426 }
7427
7428 // Look up the keys of the object.
7429 var keys = Object.keys(value);
7430 var visibleKeys = arrayToHash(keys);
7431
7432 if (ctx.showHidden) {
7433 keys = Object.getOwnPropertyNames(value);
7434 }
7435
7436 // IE doesn't make error fields non-enumerable
7437 // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx
7438 if (isError(value)
7439 && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {
7440 return formatError(value);
7441 }
7442
7443 // Some type of object without properties can be shortcutted.
7444 if (keys.length === 0) {
7445 if (isFunction(value)) {
7446 var name = value.name ? ': ' + value.name : '';
7447 return ctx.stylize('[Function' + name + ']', 'special');
7448 }
7449 if (isRegExp(value)) {
7450 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
7451 }
7452 if (isDate(value)) {
7453 return ctx.stylize(Date.prototype.toString.call(value), 'date');
7454 }
7455 if (isError(value)) {
7456 return formatError(value);
7457 }
7458 }
7459
7460 var base = '', array = false, braces = ['{', '}'];
7461
7462 // Make Array say that they are Array
7463 if (isArray(value)) {
7464 array = true;
7465 braces = ['[', ']'];
7466 }
7467
7468 // Make functions say that they are functions
7469 if (isFunction(value)) {
7470 var n = value.name ? ': ' + value.name : '';
7471 base = ' [Function' + n + ']';
7472 }
7473
7474 // Make RegExps say that they are RegExps
7475 if (isRegExp(value)) {
7476 base = ' ' + RegExp.prototype.toString.call(value);
7477 }
7478
7479 // Make dates with properties first say the date
7480 if (isDate(value)) {
7481 base = ' ' + Date.prototype.toUTCString.call(value);
7482 }
7483
7484 // Make error with message first say the error
7485 if (isError(value)) {
7486 base = ' ' + formatError(value);
7487 }
7488
7489 if (keys.length === 0 && (!array || value.length == 0)) {
7490 return braces[0] + base + braces[1];
7491 }
7492
7493 if (recurseTimes < 0) {
7494 if (isRegExp(value)) {
7495 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
7496 } else {
7497 return ctx.stylize('[Object]', 'special');
7498 }
7499 }
7500
7501 ctx.seen.push(value);
7502
7503 var output;
7504 if (array) {
7505 output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
7506 } else {
7507 output = keys.map(function(key) {
7508 return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
7509 });
7510 }
7511
7512 ctx.seen.pop();
7513
7514 return reduceToSingleString(output, base, braces);
7515 }
7516
7517
7518 function formatPrimitive(ctx, value) {
7519 if (isUndefined(value))
7520 return ctx.stylize('undefined', 'undefined');
7521 if (isString(value)) {
7522 var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
7523 .replace(/'/g, "\\'")
7524 .replace(/\\"/g, '"') + '\'';
7525 return ctx.stylize(simple, 'string');
7526 }
7527 if (isNumber(value))
7528 return ctx.stylize('' + value, 'number');
7529 if (isBoolean(value))
7530 return ctx.stylize('' + value, 'boolean');
7531 // For some reason typeof null is "object", so special case here.
7532 if (isNull(value))
7533 return ctx.stylize('null', 'null');
7534 }
7535
7536
7537 function formatError(value) {
7538 return '[' + Error.prototype.toString.call(value) + ']';
7539 }
7540
7541
7542 function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
7543 var output = [];
7544 for (var i = 0, l = value.length; i < l; ++i) {
7545 if (hasOwnProperty(value, String(i))) {
7546 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
7547 String(i), true));
7548 } else {
7549 output.push('');
7550 }
7551 }
7552 keys.forEach(function(key) {
7553 if (!key.match(/^\d+$/)) {
7554 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
7555 key, true));
7556 }
7557 });
7558 return output;
7559 }
7560
7561
7562 function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
7563 var name, str, desc;
7564 desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
7565 if (desc.get) {
7566 if (desc.set) {
7567 str = ctx.stylize('[Getter/Setter]', 'special');
7568 } else {
7569 str = ctx.stylize('[Getter]', 'special');
7570 }
7571 } else {
7572 if (desc.set) {
7573 str = ctx.stylize('[Setter]', 'special');
7574 }
7575 }
7576 if (!hasOwnProperty(visibleKeys, key)) {
7577 name = '[' + key + ']';
7578 }
7579 if (!str) {
7580 if (ctx.seen.indexOf(desc.value) < 0) {
7581 if (isNull(recurseTimes)) {
7582 str = formatValue(ctx, desc.value, null);
7583 } else {
7584 str = formatValue(ctx, desc.value, recurseTimes - 1);
7585 }
7586 if (str.indexOf('\n') > -1) {
7587 if (array) {
7588 str = str.split('\n').map(function(line) {
7589 return ' ' + line;
7590 }).join('\n').substr(2);
7591 } else {
7592 str = '\n' + str.split('\n').map(function(line) {
7593 return ' ' + line;
7594 }).join('\n');
7595 }
7596 }
7597 } else {
7598 str = ctx.stylize('[Circular]', 'special');
7599 }
7600 }
7601 if (isUndefined(name)) {
7602 if (array && key.match(/^\d+$/)) {
7603 return str;
7604 }
7605 name = JSON.stringify('' + key);
7606 if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
7607 name = name.substr(1, name.length - 2);
7608 name = ctx.stylize(name, 'name');
7609 } else {
7610 name = name.replace(/'/g, "\\'")
7611 .replace(/\\"/g, '"')
7612 .replace(/(^"|"$)/g, "'");
7613 name = ctx.stylize(name, 'string');
7614 }
7615 }
7616
7617 return name + ': ' + str;
7618 }
7619
7620
7621 function reduceToSingleString(output, base, braces) {
7622 var numLinesEst = 0;
7623 var length = output.reduce(function(prev, cur) {
7624 numLinesEst++;
7625 if (cur.indexOf('\n') >= 0) numLinesEst++;
7626 return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;
7627 }, 0);
7628
7629 if (length > 60) {
7630 return braces[0] +
7631 (base === '' ? '' : base + '\n ') +
7632 ' ' +
7633 output.join(',\n ') +
7634 ' ' +
7635 braces[1];
7636 }
7637
7638 return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
7639 }
7640
7641
7642 // NOTE: These type checking functions intentionally don't use `instanceof`
7643 // because it is fragile and can be easily faked with `Object.create()`.
7644 function isArray(ar) {
7645 return Array.isArray(ar);
7646 }
7647 exports.isArray = isArray;
7648
7649 function isBoolean(arg) {
7650 return typeof arg === 'boolean';
7651 }
7652 exports.isBoolean = isBoolean;
7653
7654 function isNull(arg) {
7655 return arg === null;
7656 }
7657 exports.isNull = isNull;
7658
7659 function isNullOrUndefined(arg) {
7660 return arg == null;
7661 }
7662 exports.isNullOrUndefined = isNullOrUndefined;
7663
7664 function isNumber(arg) {
7665 return typeof arg === 'number';
7666 }
7667 exports.isNumber = isNumber;
7668
7669 function isString(arg) {
7670 return typeof arg === 'string';
7671 }
7672 exports.isString = isString;
7673
7674 function isSymbol(arg) {
7675 return typeof arg === 'symbol';
7676 }
7677 exports.isSymbol = isSymbol;
7678
7679 function isUndefined(arg) {
7680 return arg === void 0;
7681 }
7682 exports.isUndefined = isUndefined;
7683
7684 function isRegExp(re) {
7685 return isObject(re) && objectToString(re) === '[object RegExp]';
7686 }
7687 exports.isRegExp = isRegExp;
7688
7689 function isObject(arg) {
7690 return typeof arg === 'object' && arg !== null;
7691 }
7692 exports.isObject = isObject;
7693
7694 function isDate(d) {
7695 return isObject(d) && objectToString(d) === '[object Date]';
7696 }
7697 exports.isDate = isDate;
7698
7699 function isError(e) {
7700 return isObject(e) &&
7701 (objectToString(e) === '[object Error]' || e instanceof Error);
7702 }
7703 exports.isError = isError;
7704
7705 function isFunction(arg) {
7706 return typeof arg === 'function';
7707 }
7708 exports.isFunction = isFunction;
7709
7710 function isPrimitive(arg) {
7711 return arg === null ||
7712 typeof arg === 'boolean' ||
7713 typeof arg === 'number' ||
7714 typeof arg === 'string' ||
7715 typeof arg === 'symbol' || // ES6 symbol
7716 typeof arg === 'undefined';
7717 }
7718 exports.isPrimitive = isPrimitive;
7719
7720 exports.isBuffer = require('./support/isBuffer');
7721
7722 function objectToString(o) {
7723 return Object.prototype.toString.call(o);
7724 }
7725
7726
7727 function pad(n) {
7728 return n < 10 ? '0' + n.toString(10) : n.toString(10);
7729 }
7730
7731
7732 var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
7733 'Oct', 'Nov', 'Dec'];
7734
7735 // 26 Feb 16:19:34
7736 function timestamp() {
7737 var d = new Date();
7738 var time = [pad(d.getHours()),
7739 pad(d.getMinutes()),
7740 pad(d.getSeconds())].join(':');
7741 return [d.getDate(), months[d.getMonth()], time].join(' ');
7742 }
7743
7744
7745 // log is just a thin wrapper to console.log that prepends a timestamp
7746 exports.log = function() {
7747 console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
7748 };
7749
7750
7751 /**
7752 * Inherit the prototype methods from one constructor into another.
7753 *
7754 * The Function.prototype.inherits from lang.js rewritten as a standalone
7755 * function (not on Function.prototype). NOTE: If this file is to be loaded
7756 * during bootstrapping this function needs to be rewritten using some native
7757 * functions as prototype setup using normal JavaScript does not work as
7758 * expected during bootstrapping (see mirror.js in r114903).
7759 *
7760 * @param {function} ctor Constructor function which needs to inherit the
7761 * prototype.
7762 * @param {function} superCtor Constructor function to inherit prototype from.
7763 */
7764 exports.inherits = require('inherits');
7765
7766 exports._extend = function(origin, add) {
7767 // Don't do anything if add isn't an object
7768 if (!add || !isObject(add)) return origin;
7769
7770 var keys = Object.keys(add);
7771 var i = keys.length;
7772 while (i--) {
7773 origin[keys[i]] = add[keys[i]];
7774 }
7775 return origin;
7776 };
7777
7778 function hasOwnProperty(obj, prop) {
7779 return Object.prototype.hasOwnProperty.call(obj, prop);
7780 }
7781
7782 }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
7783 },{"./support/isBuffer":28,"_process":14,"inherits":12}],30:[function(require,module,exports){
7784 // Base58 encoding/decoding
7785 // Originally written by Mike Hearn for BitcoinJ
7786 // Copyright (c) 2011 Google Inc
7787 // Ported to JavaScript by Stefan Thomas
7788 // Merged Buffer refactorings from base58-native by Stephen Pair
7789 // Copyright (c) 2013 BitPay Inc
7790
7791 var ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
7792 var ALPHABET_MAP = {}
7793 for(var i = 0; i < ALPHABET.length; i++) {
7794 ALPHABET_MAP[ALPHABET.charAt(i)] = i
7795 }
7796 var BASE = 58
7797
7798 function encode(buffer) {
7799 if (buffer.length === 0) return ''
7800
7801 var i, j, digits = [0]
7802 for (i = 0; i < buffer.length; i++) {
7803 for (j = 0; j < digits.length; j++) digits[j] <<= 8
7804
7805 digits[0] += buffer[i]
7806
7807 var carry = 0
7808 for (j = 0; j < digits.length; ++j) {
7809 digits[j] += carry
7810
7811 carry = (digits[j] / BASE) | 0
7812 digits[j] %= BASE
7813 }
7814
7815 while (carry) {
7816 digits.push(carry % BASE)
7817
7818 carry = (carry / BASE) | 0
7819 }
7820 }
7821
7822 // deal with leading zeros
7823 for (i = 0; buffer[i] === 0 && i < buffer.length - 1; i++) digits.push(0)
7824
7825 // convert digits to a string
7826 var stringOutput = ""
7827 for (var i = digits.length - 1; i >= 0; i--) {
7828 stringOutput = stringOutput + ALPHABET[digits[i]]
7829 }
7830 return stringOutput
7831 }
7832
7833 function decode(string) {
7834 if (string.length === 0) return []
7835
7836 var i, j, bytes = [0]
7837 for (i = 0; i < string.length; i++) {
7838 var c = string[i]
7839 if (!(c in ALPHABET_MAP)) throw new Error('Non-base58 character')
7840
7841 for (j = 0; j < bytes.length; j++) bytes[j] *= BASE
7842 bytes[0] += ALPHABET_MAP[c]
7843
7844 var carry = 0
7845 for (j = 0; j < bytes.length; ++j) {
7846 bytes[j] += carry
7847
7848 carry = bytes[j] >> 8
7849 bytes[j] &= 0xff
7850 }
7851
7852 while (carry) {
7853 bytes.push(carry & 0xff)
7854
7855 carry >>= 8
7856 }
7857 }
7858
7859 // deal with leading zeros
7860 for (i = 0; string[i] === '1' && i < string.length - 1; i++) bytes.push(0)
7861
7862 return bytes.reverse()
7863 }
7864
7865 module.exports = {
7866 encode: encode,
7867 decode: decode
7868 }
7869
7870 },{}],31:[function(require,module,exports){
7871 (function (Buffer){
7872 'use strict'
7873
7874 var base58 = require('bs58')
7875 var createHash = require('create-hash')
7876
7877 // SHA256(SHA256(buffer))
7878 function sha256x2 (buffer) {
7879 buffer = createHash('sha256').update(buffer).digest()
7880 return createHash('sha256').update(buffer).digest()
7881 }
7882
7883 // Encode a buffer as a base58-check encoded string
7884 function encode (payload) {
7885 var checksum = sha256x2(payload).slice(0, 4)
7886
7887 return base58.encode(Buffer.concat([
7888 payload,
7889 checksum
7890 ]))
7891 }
7892
7893 // Decode a base58-check encoded string to a buffer
7894 function decode (string) {
7895 var buffer = new Buffer(base58.decode(string))
7896
7897 var payload = buffer.slice(0, -4)
7898 var checksum = buffer.slice(-4)
7899 var newChecksum = sha256x2(payload).slice(0, 4)
7900
7901 for (var i = 0; i < newChecksum.length; ++i) {
7902 if (newChecksum[i] === checksum[i]) continue
7903
7904 throw new Error('Invalid checksum')
7905 }
7906
7907 return payload
7908 }
7909
7910 module.exports = {
7911 encode: encode,
7912 decode: decode
7913 }
7914
7915 }).call(this,require("buffer").Buffer)
7916 },{"bs58":30,"buffer":7,"create-hash":32}],32:[function(require,module,exports){
7917 (function (Buffer){
7918 'use strict';
7919 var inherits = require('inherits')
7920 var md5 = require('./md5')
7921 var rmd160 = require('ripemd160')
7922 var sha = require('sha.js')
7923
7924 var Transform = require('stream').Transform
7925
7926 function HashNoConstructor(hash) {
7927 Transform.call(this)
7928
7929 this._hash = hash
7930 this.buffers = []
7931 }
7932
7933 inherits(HashNoConstructor, Transform)
7934
7935 HashNoConstructor.prototype._transform = function (data, _, next) {
7936 this.buffers.push(data)
7937
7938 next()
7939 }
7940
7941 HashNoConstructor.prototype._flush = function (next) {
7942 this.push(this.digest())
7943 next()
7944 }
7945
7946 HashNoConstructor.prototype.update = function (data, enc) {
7947 if (typeof data === 'string') {
7948 data = new Buffer(data, enc)
7949 }
7950
7951 this.buffers.push(data)
7952 return this
7953 }
7954
7955 HashNoConstructor.prototype.digest = function (enc) {
7956 var buf = Buffer.concat(this.buffers)
7957 var r = this._hash(buf)
7958 this.buffers = null
7959
7960 return enc ? r.toString(enc) : r
7961 }
7962
7963 function Hash(hash) {
7964 Transform.call(this)
7965
7966 this._hash = hash
7967 }
7968
7969 inherits(Hash, Transform)
7970
7971 Hash.prototype._transform = function (data, enc, next) {
7972 if (enc) data = new Buffer(data, enc)
7973
7974 this._hash.update(data)
7975
7976 next()
7977 }
7978
7979 Hash.prototype._flush = function (next) {
7980 this.push(this._hash.digest())
7981 this._hash = null
7982
7983 next()
7984 }
7985
7986 Hash.prototype.update = function (data, enc) {
7987 if (typeof data === 'string') {
7988 data = new Buffer(data, enc)
7989 }
7990
7991 this._hash.update(data)
7992 return this
7993 }
7994
7995 Hash.prototype.digest = function (enc) {
7996 var outData = this._hash.digest()
7997
7998 return enc ? outData.toString(enc) : outData
7999 }
8000
8001 module.exports = function createHash (alg) {
8002 if ('md5' === alg) return new HashNoConstructor(md5)
8003 if ('rmd160' === alg) return new HashNoConstructor(rmd160)
8004
8005 return new Hash(sha(alg))
8006 }
8007
8008 }).call(this,require("buffer").Buffer)
8009 },{"./md5":34,"buffer":7,"inherits":35,"ripemd160":36,"sha.js":38,"stream":26}],33:[function(require,module,exports){
8010 (function (Buffer){
8011 'use strict';
8012 var intSize = 4;
8013 var zeroBuffer = new Buffer(intSize); zeroBuffer.fill(0);
8014 var chrsz = 8;
8015
8016 function toArray(buf, bigEndian) {
8017 if ((buf.length % intSize) !== 0) {
8018 var len = buf.length + (intSize - (buf.length % intSize));
8019 buf = Buffer.concat([buf, zeroBuffer], len);
8020 }
8021
8022 var arr = [];
8023 var fn = bigEndian ? buf.readInt32BE : buf.readInt32LE;
8024 for (var i = 0; i < buf.length; i += intSize) {
8025 arr.push(fn.call(buf, i));
8026 }
8027 return arr;
8028 }
8029
8030 function toBuffer(arr, size, bigEndian) {
8031 var buf = new Buffer(size);
8032 var fn = bigEndian ? buf.writeInt32BE : buf.writeInt32LE;
8033 for (var i = 0; i < arr.length; i++) {
8034 fn.call(buf, arr[i], i * 4, true);
8035 }
8036 return buf;
8037 }
8038
8039 function hash(buf, fn, hashSize, bigEndian) {
8040 if (!Buffer.isBuffer(buf)) buf = new Buffer(buf);
8041 var arr = fn(toArray(buf, bigEndian), buf.length * chrsz);
8042 return toBuffer(arr, hashSize, bigEndian);
8043 }
8044 exports.hash = hash;
8045 }).call(this,require("buffer").Buffer)
8046 },{"buffer":7}],34:[function(require,module,exports){
8047 'use strict';
8048 /*
8049 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
8050 * Digest Algorithm, as defined in RFC 1321.
8051 * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
8052 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8053 * Distributed under the BSD License
8054 * See http://pajhome.org.uk/crypt/md5 for more info.
8055 */
8056
8057 var helpers = require('./helpers');
8058
8059 /*
8060 * Calculate the MD5 of an array of little-endian words, and a bit length
8061 */
8062 function core_md5(x, len)
8063 {
8064 /* append padding */
8065 x[len >> 5] |= 0x80 << ((len) % 32);
8066 x[(((len + 64) >>> 9) << 4) + 14] = len;
8067
8068 var a = 1732584193;
8069 var b = -271733879;
8070 var c = -1732584194;
8071 var d = 271733878;
8072
8073 for(var i = 0; i < x.length; i += 16)
8074 {
8075 var olda = a;
8076 var oldb = b;
8077 var oldc = c;
8078 var oldd = d;
8079
8080 a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936);
8081 d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586);
8082 c = md5_ff(c, d, a, b, x[i+ 2], 17, 606105819);
8083 b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330);
8084 a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897);
8085 d = md5_ff(d, a, b, c, x[i+ 5], 12, 1200080426);
8086 c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341);
8087 b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983);
8088 a = md5_ff(a, b, c, d, x[i+ 8], 7 , 1770035416);
8089 d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417);
8090 c = md5_ff(c, d, a, b, x[i+10], 17, -42063);
8091 b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162);
8092 a = md5_ff(a, b, c, d, x[i+12], 7 , 1804603682);
8093 d = md5_ff(d, a, b, c, x[i+13], 12, -40341101);
8094 c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290);
8095 b = md5_ff(b, c, d, a, x[i+15], 22, 1236535329);
8096
8097 a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510);
8098 d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632);
8099 c = md5_gg(c, d, a, b, x[i+11], 14, 643717713);
8100 b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302);
8101 a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691);
8102 d = md5_gg(d, a, b, c, x[i+10], 9 , 38016083);
8103 c = md5_gg(c, d, a, b, x[i+15], 14, -660478335);
8104 b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848);
8105 a = md5_gg(a, b, c, d, x[i+ 9], 5 , 568446438);
8106 d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690);
8107 c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961);
8108 b = md5_gg(b, c, d, a, x[i+ 8], 20, 1163531501);
8109 a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467);
8110 d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784);
8111 c = md5_gg(c, d, a, b, x[i+ 7], 14, 1735328473);
8112 b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734);
8113
8114 a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558);
8115 d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463);
8116 c = md5_hh(c, d, a, b, x[i+11], 16, 1839030562);
8117 b = md5_hh(b, c, d, a, x[i+14], 23, -35309556);
8118 a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060);
8119 d = md5_hh(d, a, b, c, x[i+ 4], 11, 1272893353);
8120 c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632);
8121 b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640);
8122 a = md5_hh(a, b, c, d, x[i+13], 4 , 681279174);
8123 d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222);
8124 c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979);
8125 b = md5_hh(b, c, d, a, x[i+ 6], 23, 76029189);
8126 a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487);
8127 d = md5_hh(d, a, b, c, x[i+12], 11, -421815835);
8128 c = md5_hh(c, d, a, b, x[i+15], 16, 530742520);
8129 b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651);
8130
8131 a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844);
8132 d = md5_ii(d, a, b, c, x[i+ 7], 10, 1126891415);
8133 c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905);
8134 b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055);
8135 a = md5_ii(a, b, c, d, x[i+12], 6 , 1700485571);
8136 d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606);
8137 c = md5_ii(c, d, a, b, x[i+10], 15, -1051523);
8138 b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799);
8139 a = md5_ii(a, b, c, d, x[i+ 8], 6 , 1873313359);
8140 d = md5_ii(d, a, b, c, x[i+15], 10, -30611744);
8141 c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380);
8142 b = md5_ii(b, c, d, a, x[i+13], 21, 1309151649);
8143 a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070);
8144 d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379);
8145 c = md5_ii(c, d, a, b, x[i+ 2], 15, 718787259);
8146 b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551);
8147
8148 a = safe_add(a, olda);
8149 b = safe_add(b, oldb);
8150 c = safe_add(c, oldc);
8151 d = safe_add(d, oldd);
8152 }
8153 return Array(a, b, c, d);
8154
8155 }
8156
8157 /*
8158 * These functions implement the four basic operations the algorithm uses.
8159 */
8160 function md5_cmn(q, a, b, x, s, t)
8161 {
8162 return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b);
8163 }
8164 function md5_ff(a, b, c, d, x, s, t)
8165 {
8166 return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
8167 }
8168 function md5_gg(a, b, c, d, x, s, t)
8169 {
8170 return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
8171 }
8172 function md5_hh(a, b, c, d, x, s, t)
8173 {
8174 return md5_cmn(b ^ c ^ d, a, b, x, s, t);
8175 }
8176 function md5_ii(a, b, c, d, x, s, t)
8177 {
8178 return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
8179 }
8180
8181 /*
8182 * Add integers, wrapping at 2^32. This uses 16-bit operations internally
8183 * to work around bugs in some JS interpreters.
8184 */
8185 function safe_add(x, y)
8186 {
8187 var lsw = (x & 0xFFFF) + (y & 0xFFFF);
8188 var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
8189 return (msw << 16) | (lsw & 0xFFFF);
8190 }
8191
8192 /*
8193 * Bitwise rotate a 32-bit number to the left.
8194 */
8195 function bit_rol(num, cnt)
8196 {
8197 return (num << cnt) | (num >>> (32 - cnt));
8198 }
8199
8200 module.exports = function md5(buf) {
8201 return helpers.hash(buf, core_md5, 16);
8202 };
8203 },{"./helpers":33}],35:[function(require,module,exports){
8204 arguments[4][12][0].apply(exports,arguments)
8205 },{"dup":12}],36:[function(require,module,exports){
8206 (function (Buffer){
8207 /*
8208 CryptoJS v3.1.2
8209 code.google.com/p/crypto-js
8210 (c) 2009-2013 by Jeff Mott. All rights reserved.
8211 code.google.com/p/crypto-js/wiki/License
8212 */
8213 /** @preserve
8214 (c) 2012 by Cédric Mesnil. All rights reserved.
8215
8216 Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
8217
8218 - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
8219 - 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.
8220
8221 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.
8222 */
8223
8224 // constants table
8225 var zl = [
8226 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
8227 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
8228 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
8229 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
8230 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
8231 ]
8232
8233 var zr = [
8234 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
8235 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
8236 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
8237 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
8238 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
8239 ]
8240
8241 var sl = [
8242 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
8243 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
8244 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
8245 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
8246 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
8247 ]
8248
8249 var sr = [
8250 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
8251 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
8252 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
8253 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
8254 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
8255 ]
8256
8257 var hl = [0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]
8258 var hr = [0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]
8259
8260 function bytesToWords (bytes) {
8261 var words = []
8262 for (var i = 0, b = 0; i < bytes.length; i++, b += 8) {
8263 words[b >>> 5] |= bytes[i] << (24 - b % 32)
8264 }
8265 return words
8266 }
8267
8268 function wordsToBytes (words) {
8269 var bytes = []
8270 for (var b = 0; b < words.length * 32; b += 8) {
8271 bytes.push((words[b >>> 5] >>> (24 - b % 32)) & 0xFF)
8272 }
8273 return bytes
8274 }
8275
8276 function processBlock (H, M, offset) {
8277 // swap endian
8278 for (var i = 0; i < 16; i++) {
8279 var offset_i = offset + i
8280 var M_offset_i = M[offset_i]
8281
8282 // Swap
8283 M[offset_i] = (
8284 (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |
8285 (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)
8286 )
8287 }
8288
8289 // Working variables
8290 var al, bl, cl, dl, el
8291 var ar, br, cr, dr, er
8292
8293 ar = al = H[0]
8294 br = bl = H[1]
8295 cr = cl = H[2]
8296 dr = dl = H[3]
8297 er = el = H[4]
8298
8299 // computation
8300 var t
8301 for (i = 0; i < 80; i += 1) {
8302 t = (al + M[offset + zl[i]]) | 0
8303 if (i < 16) {
8304 t += f1(bl, cl, dl) + hl[0]
8305 } else if (i < 32) {
8306 t += f2(bl, cl, dl) + hl[1]
8307 } else if (i < 48) {
8308 t += f3(bl, cl, dl) + hl[2]
8309 } else if (i < 64) {
8310 t += f4(bl, cl, dl) + hl[3]
8311 } else {// if (i<80) {
8312 t += f5(bl, cl, dl) + hl[4]
8313 }
8314 t = t | 0
8315 t = rotl(t, sl[i])
8316 t = (t + el) | 0
8317 al = el
8318 el = dl
8319 dl = rotl(cl, 10)
8320 cl = bl
8321 bl = t
8322
8323 t = (ar + M[offset + zr[i]]) | 0
8324 if (i < 16) {
8325 t += f5(br, cr, dr) + hr[0]
8326 } else if (i < 32) {
8327 t += f4(br, cr, dr) + hr[1]
8328 } else if (i < 48) {
8329 t += f3(br, cr, dr) + hr[2]
8330 } else if (i < 64) {
8331 t += f2(br, cr, dr) + hr[3]
8332 } else {// if (i<80) {
8333 t += f1(br, cr, dr) + hr[4]
8334 }
8335
8336 t = t | 0
8337 t = rotl(t, sr[i])
8338 t = (t + er) | 0
8339 ar = er
8340 er = dr
8341 dr = rotl(cr, 10)
8342 cr = br
8343 br = t
8344 }
8345
8346 // intermediate hash value
8347 t = (H[1] + cl + dr) | 0
8348 H[1] = (H[2] + dl + er) | 0
8349 H[2] = (H[3] + el + ar) | 0
8350 H[3] = (H[4] + al + br) | 0
8351 H[4] = (H[0] + bl + cr) | 0
8352 H[0] = t
8353 }
8354
8355 function f1 (x, y, z) {
8356 return ((x) ^ (y) ^ (z))
8357 }
8358
8359 function f2 (x, y, z) {
8360 return (((x) & (y)) | ((~x) & (z)))
8361 }
8362
8363 function f3 (x, y, z) {
8364 return (((x) | (~(y))) ^ (z))
8365 }
8366
8367 function f4 (x, y, z) {
8368 return (((x) & (z)) | ((y) & (~(z))))
8369 }
8370
8371 function f5 (x, y, z) {
8372 return ((x) ^ ((y) | (~(z))))
8373 }
8374
8375 function rotl (x, n) {
8376 return (x << n) | (x >>> (32 - n))
8377 }
8378
8379 function ripemd160 (message) {
8380 var H = [0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]
8381
8382 if (typeof message === 'string') {
8383 message = new Buffer(message, 'utf8')
8384 }
8385
8386 var m = bytesToWords(message)
8387
8388 var nBitsLeft = message.length * 8
8389 var nBitsTotal = message.length * 8
8390
8391 // Add padding
8392 m[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32)
8393 m[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (
8394 (((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff) |
8395 (((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00)
8396 )
8397
8398 for (var i = 0; i < m.length; i += 16) {
8399 processBlock(H, m, i)
8400 }
8401
8402 // swap endian
8403 for (i = 0; i < 5; i++) {
8404 // shortcut
8405 var H_i = H[i]
8406
8407 // Swap
8408 H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |
8409 (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00)
8410 }
8411
8412 var digestbytes = wordsToBytes(H)
8413 return new Buffer(digestbytes)
8414 }
8415
8416 module.exports = ripemd160
8417
8418 }).call(this,require("buffer").Buffer)
8419 },{"buffer":7}],37:[function(require,module,exports){
8420 (function (Buffer){
8421 // prototype class for hash functions
8422 function Hash (blockSize, finalSize) {
8423 this._block = new Buffer(blockSize)
8424 this._finalSize = finalSize
8425 this._blockSize = blockSize
8426 this._len = 0
8427 this._s = 0
8428 }
8429
8430 Hash.prototype.update = function (data, enc) {
8431 if (typeof data === 'string') {
8432 enc = enc || 'utf8'
8433 data = new Buffer(data, enc)
8434 }
8435
8436 var l = this._len += data.length
8437 var s = this._s || 0
8438 var f = 0
8439 var buffer = this._block
8440
8441 while (s < l) {
8442 var t = Math.min(data.length, f + this._blockSize - (s % this._blockSize))
8443 var ch = (t - f)
8444
8445 for (var i = 0; i < ch; i++) {
8446 buffer[(s % this._blockSize) + i] = data[i + f]
8447 }
8448
8449 s += ch
8450 f += ch
8451
8452 if ((s % this._blockSize) === 0) {
8453 this._update(buffer)
8454 }
8455 }
8456 this._s = s
8457
8458 return this
8459 }
8460
8461 Hash.prototype.digest = function (enc) {
8462 // Suppose the length of the message M, in bits, is l
8463 var l = this._len * 8
8464
8465 // Append the bit 1 to the end of the message
8466 this._block[this._len % this._blockSize] = 0x80
8467
8468 // and then k zero bits, where k is the smallest non-negative solution to the equation (l + 1 + k) === finalSize mod blockSize
8469 this._block.fill(0, this._len % this._blockSize + 1)
8470
8471 if (l % (this._blockSize * 8) >= this._finalSize * 8) {
8472 this._update(this._block)
8473 this._block.fill(0)
8474 }
8475
8476 // to this append the block which is equal to the number l written in binary
8477 // TODO: handle case where l is > Math.pow(2, 29)
8478 this._block.writeInt32BE(l, this._blockSize - 4)
8479
8480 var hash = this._update(this._block) || this._hash()
8481
8482 return enc ? hash.toString(enc) : hash
8483 }
8484
8485 Hash.prototype._update = function () {
8486 throw new Error('_update must be implemented by subclass')
8487 }
8488
8489 module.exports = Hash
8490
8491 }).call(this,require("buffer").Buffer)
8492 },{"buffer":7}],38:[function(require,module,exports){
8493 var exports = module.exports = function SHA (algorithm) {
8494 algorithm = algorithm.toLowerCase()
8495
8496 var Algorithm = exports[algorithm]
8497 if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')
8498
8499 return new Algorithm()
8500 }
8501
8502 exports.sha = require('./sha')
8503 exports.sha1 = require('./sha1')
8504 exports.sha224 = require('./sha224')
8505 exports.sha256 = require('./sha256')
8506 exports.sha384 = require('./sha384')
8507 exports.sha512 = require('./sha512')
8508
8509 },{"./sha":39,"./sha1":40,"./sha224":41,"./sha256":42,"./sha384":43,"./sha512":44}],39:[function(require,module,exports){
8510 (function (Buffer){
8511 /*
8512 * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined
8513 * in FIPS PUB 180-1
8514 * This source code is derived from sha1.js of the same repository.
8515 * The difference between SHA-0 and SHA-1 is just a bitwise rotate left
8516 * operation was added.
8517 */
8518
8519 var inherits = require('inherits')
8520 var Hash = require('./hash')
8521
8522 var W = new Array(80)
8523
8524 function Sha () {
8525 this.init()
8526 this._w = W
8527
8528 Hash.call(this, 64, 56)
8529 }
8530
8531 inherits(Sha, Hash)
8532
8533 Sha.prototype.init = function () {
8534 this._a = 0x67452301 | 0
8535 this._b = 0xefcdab89 | 0
8536 this._c = 0x98badcfe | 0
8537 this._d = 0x10325476 | 0
8538 this._e = 0xc3d2e1f0 | 0
8539
8540 return this
8541 }
8542
8543 /*
8544 * Bitwise rotate a 32-bit number to the left.
8545 */
8546 function rol (num, cnt) {
8547 return (num << cnt) | (num >>> (32 - cnt))
8548 }
8549
8550 Sha.prototype._update = function (M) {
8551 var W = this._w
8552
8553 var a = this._a
8554 var b = this._b
8555 var c = this._c
8556 var d = this._d
8557 var e = this._e
8558
8559 var j = 0, k
8560
8561 /*
8562 * SHA-1 has a bitwise rotate left operation. But, SHA is not
8563 * function calcW() { return rol(W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16], 1) }
8564 */
8565 function calcW () { return W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16] }
8566 function loop (w, f) {
8567 W[j] = w
8568
8569 var t = rol(a, 5) + f + e + w + k
8570
8571 e = d
8572 d = c
8573 c = rol(b, 30)
8574 b = a
8575 a = t
8576 j++
8577 }
8578
8579 k = 1518500249
8580 while (j < 16) loop(M.readInt32BE(j * 4), (b & c) | ((~b) & d))
8581 while (j < 20) loop(calcW(), (b & c) | ((~b) & d))
8582 k = 1859775393
8583 while (j < 40) loop(calcW(), b ^ c ^ d)
8584 k = -1894007588
8585 while (j < 60) loop(calcW(), (b & c) | (b & d) | (c & d))
8586 k = -899497514
8587 while (j < 80) loop(calcW(), b ^ c ^ d)
8588
8589 this._a = (a + this._a) | 0
8590 this._b = (b + this._b) | 0
8591 this._c = (c + this._c) | 0
8592 this._d = (d + this._d) | 0
8593 this._e = (e + this._e) | 0
8594 }
8595
8596 Sha.prototype._hash = function () {
8597 var H = new Buffer(20)
8598
8599 H.writeInt32BE(this._a | 0, 0)
8600 H.writeInt32BE(this._b | 0, 4)
8601 H.writeInt32BE(this._c | 0, 8)
8602 H.writeInt32BE(this._d | 0, 12)
8603 H.writeInt32BE(this._e | 0, 16)
8604
8605 return H
8606 }
8607
8608 module.exports = Sha
8609
8610
8611 }).call(this,require("buffer").Buffer)
8612 },{"./hash":37,"buffer":7,"inherits":35}],40:[function(require,module,exports){
8613 (function (Buffer){
8614 /*
8615 * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
8616 * in FIPS PUB 180-1
8617 * Version 2.1a Copyright Paul Johnston 2000 - 2002.
8618 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8619 * Distributed under the BSD License
8620 * See http://pajhome.org.uk/crypt/md5 for details.
8621 */
8622
8623 var inherits = require('inherits')
8624 var Hash = require('./hash')
8625
8626 var W = new Array(80)
8627
8628 function Sha1 () {
8629 this.init()
8630 this._w = W
8631
8632 Hash.call(this, 64, 56)
8633 }
8634
8635 inherits(Sha1, Hash)
8636
8637 Sha1.prototype.init = function () {
8638 this._a = 0x67452301 | 0
8639 this._b = 0xefcdab89 | 0
8640 this._c = 0x98badcfe | 0
8641 this._d = 0x10325476 | 0
8642 this._e = 0xc3d2e1f0 | 0
8643
8644 return this
8645 }
8646
8647 /*
8648 * Bitwise rotate a 32-bit number to the left.
8649 */
8650 function rol (num, cnt) {
8651 return (num << cnt) | (num >>> (32 - cnt))
8652 }
8653
8654 Sha1.prototype._update = function (M) {
8655 var W = this._w
8656
8657 var a = this._a
8658 var b = this._b
8659 var c = this._c
8660 var d = this._d
8661 var e = this._e
8662
8663 var j = 0, k
8664
8665 function calcW () { return rol(W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16], 1) }
8666 function loop (w, f) {
8667 W[j] = w
8668
8669 var t = rol(a, 5) + f + e + w + k
8670
8671 e = d
8672 d = c
8673 c = rol(b, 30)
8674 b = a
8675 a = t
8676 j++
8677 }
8678
8679 k = 1518500249
8680 while (j < 16) loop(M.readInt32BE(j * 4), (b & c) | ((~b) & d))
8681 while (j < 20) loop(calcW(), (b & c) | ((~b) & d))
8682 k = 1859775393
8683 while (j < 40) loop(calcW(), b ^ c ^ d)
8684 k = -1894007588
8685 while (j < 60) loop(calcW(), (b & c) | (b & d) | (c & d))
8686 k = -899497514
8687 while (j < 80) loop(calcW(), b ^ c ^ d)
8688
8689 this._a = (a + this._a) | 0
8690 this._b = (b + this._b) | 0
8691 this._c = (c + this._c) | 0
8692 this._d = (d + this._d) | 0
8693 this._e = (e + this._e) | 0
8694 }
8695
8696 Sha1.prototype._hash = function () {
8697 var H = new Buffer(20)
8698
8699 H.writeInt32BE(this._a | 0, 0)
8700 H.writeInt32BE(this._b | 0, 4)
8701 H.writeInt32BE(this._c | 0, 8)
8702 H.writeInt32BE(this._d | 0, 12)
8703 H.writeInt32BE(this._e | 0, 16)
8704
8705 return H
8706 }
8707
8708 module.exports = Sha1
8709
8710 }).call(this,require("buffer").Buffer)
8711 },{"./hash":37,"buffer":7,"inherits":35}],41:[function(require,module,exports){
8712 (function (Buffer){
8713 /**
8714 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
8715 * in FIPS 180-2
8716 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
8717 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8718 *
8719 */
8720
8721 var inherits = require('inherits')
8722 var Sha256 = require('./sha256')
8723 var Hash = require('./hash')
8724
8725 var W = new Array(64)
8726
8727 function Sha224 () {
8728 this.init()
8729
8730 this._w = W // new Array(64)
8731
8732 Hash.call(this, 64, 56)
8733 }
8734
8735 inherits(Sha224, Sha256)
8736
8737 Sha224.prototype.init = function () {
8738 this._a = 0xc1059ed8 | 0
8739 this._b = 0x367cd507 | 0
8740 this._c = 0x3070dd17 | 0
8741 this._d = 0xf70e5939 | 0
8742 this._e = 0xffc00b31 | 0
8743 this._f = 0x68581511 | 0
8744 this._g = 0x64f98fa7 | 0
8745 this._h = 0xbefa4fa4 | 0
8746
8747 return this
8748 }
8749
8750 Sha224.prototype._hash = function () {
8751 var H = new Buffer(28)
8752
8753 H.writeInt32BE(this._a, 0)
8754 H.writeInt32BE(this._b, 4)
8755 H.writeInt32BE(this._c, 8)
8756 H.writeInt32BE(this._d, 12)
8757 H.writeInt32BE(this._e, 16)
8758 H.writeInt32BE(this._f, 20)
8759 H.writeInt32BE(this._g, 24)
8760
8761 return H
8762 }
8763
8764 module.exports = Sha224
8765
8766 }).call(this,require("buffer").Buffer)
8767 },{"./hash":37,"./sha256":42,"buffer":7,"inherits":35}],42:[function(require,module,exports){
8768 (function (Buffer){
8769 /**
8770 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
8771 * in FIPS 180-2
8772 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
8773 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8774 *
8775 */
8776
8777 var inherits = require('inherits')
8778 var Hash = require('./hash')
8779
8780 var K = [
8781 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,
8782 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,
8783 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,
8784 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,
8785 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,
8786 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,
8787 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,
8788 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,
8789 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,
8790 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,
8791 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,
8792 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,
8793 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,
8794 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,
8795 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,
8796 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2
8797 ]
8798
8799 var W = new Array(64)
8800
8801 function Sha256 () {
8802 this.init()
8803
8804 this._w = W // new Array(64)
8805
8806 Hash.call(this, 64, 56)
8807 }
8808
8809 inherits(Sha256, Hash)
8810
8811 Sha256.prototype.init = function () {
8812 this._a = 0x6a09e667 | 0
8813 this._b = 0xbb67ae85 | 0
8814 this._c = 0x3c6ef372 | 0
8815 this._d = 0xa54ff53a | 0
8816 this._e = 0x510e527f | 0
8817 this._f = 0x9b05688c | 0
8818 this._g = 0x1f83d9ab | 0
8819 this._h = 0x5be0cd19 | 0
8820
8821 return this
8822 }
8823
8824 function S (X, n) {
8825 return (X >>> n) | (X << (32 - n))
8826 }
8827
8828 function R (X, n) {
8829 return (X >>> n)
8830 }
8831
8832 function Ch (x, y, z) {
8833 return ((x & y) ^ ((~x) & z))
8834 }
8835
8836 function Maj (x, y, z) {
8837 return ((x & y) ^ (x & z) ^ (y & z))
8838 }
8839
8840 function Sigma0256 (x) {
8841 return (S(x, 2) ^ S(x, 13) ^ S(x, 22))
8842 }
8843
8844 function Sigma1256 (x) {
8845 return (S(x, 6) ^ S(x, 11) ^ S(x, 25))
8846 }
8847
8848 function Gamma0256 (x) {
8849 return (S(x, 7) ^ S(x, 18) ^ R(x, 3))
8850 }
8851
8852 function Gamma1256 (x) {
8853 return (S(x, 17) ^ S(x, 19) ^ R(x, 10))
8854 }
8855
8856 Sha256.prototype._update = function (M) {
8857 var W = this._w
8858
8859 var a = this._a | 0
8860 var b = this._b | 0
8861 var c = this._c | 0
8862 var d = this._d | 0
8863 var e = this._e | 0
8864 var f = this._f | 0
8865 var g = this._g | 0
8866 var h = this._h | 0
8867
8868 var j = 0
8869
8870 function calcW () { return Gamma1256(W[j - 2]) + W[j - 7] + Gamma0256(W[j - 15]) + W[j - 16] }
8871 function loop (w) {
8872 W[j] = w
8873
8874 var T1 = h + Sigma1256(e) + Ch(e, f, g) + K[j] + w
8875 var T2 = Sigma0256(a) + Maj(a, b, c)
8876
8877 h = g
8878 g = f
8879 f = e
8880 e = d + T1
8881 d = c
8882 c = b
8883 b = a
8884 a = T1 + T2
8885
8886 j++
8887 }
8888
8889 while (j < 16) loop(M.readInt32BE(j * 4))
8890 while (j < 64) loop(calcW())
8891
8892 this._a = (a + this._a) | 0
8893 this._b = (b + this._b) | 0
8894 this._c = (c + this._c) | 0
8895 this._d = (d + this._d) | 0
8896 this._e = (e + this._e) | 0
8897 this._f = (f + this._f) | 0
8898 this._g = (g + this._g) | 0
8899 this._h = (h + this._h) | 0
8900 }
8901
8902 Sha256.prototype._hash = function () {
8903 var H = new Buffer(32)
8904
8905 H.writeInt32BE(this._a, 0)
8906 H.writeInt32BE(this._b, 4)
8907 H.writeInt32BE(this._c, 8)
8908 H.writeInt32BE(this._d, 12)
8909 H.writeInt32BE(this._e, 16)
8910 H.writeInt32BE(this._f, 20)
8911 H.writeInt32BE(this._g, 24)
8912 H.writeInt32BE(this._h, 28)
8913
8914 return H
8915 }
8916
8917 module.exports = Sha256
8918
8919 }).call(this,require("buffer").Buffer)
8920 },{"./hash":37,"buffer":7,"inherits":35}],43:[function(require,module,exports){
8921 (function (Buffer){
8922 var inherits = require('inherits')
8923 var SHA512 = require('./sha512')
8924 var Hash = require('./hash')
8925
8926 var W = new Array(160)
8927
8928 function Sha384 () {
8929 this.init()
8930 this._w = W
8931
8932 Hash.call(this, 128, 112)
8933 }
8934
8935 inherits(Sha384, SHA512)
8936
8937 Sha384.prototype.init = function () {
8938 this._a = 0xcbbb9d5d | 0
8939 this._b = 0x629a292a | 0
8940 this._c = 0x9159015a | 0
8941 this._d = 0x152fecd8 | 0
8942 this._e = 0x67332667 | 0
8943 this._f = 0x8eb44a87 | 0
8944 this._g = 0xdb0c2e0d | 0
8945 this._h = 0x47b5481d | 0
8946
8947 this._al = 0xc1059ed8 | 0
8948 this._bl = 0x367cd507 | 0
8949 this._cl = 0x3070dd17 | 0
8950 this._dl = 0xf70e5939 | 0
8951 this._el = 0xffc00b31 | 0
8952 this._fl = 0x68581511 | 0
8953 this._gl = 0x64f98fa7 | 0
8954 this._hl = 0xbefa4fa4 | 0
8955
8956 return this
8957 }
8958
8959 Sha384.prototype._hash = function () {
8960 var H = new Buffer(48)
8961
8962 function writeInt64BE (h, l, offset) {
8963 H.writeInt32BE(h, offset)
8964 H.writeInt32BE(l, offset + 4)
8965 }
8966
8967 writeInt64BE(this._a, this._al, 0)
8968 writeInt64BE(this._b, this._bl, 8)
8969 writeInt64BE(this._c, this._cl, 16)
8970 writeInt64BE(this._d, this._dl, 24)
8971 writeInt64BE(this._e, this._el, 32)
8972 writeInt64BE(this._f, this._fl, 40)
8973
8974 return H
8975 }
8976
8977 module.exports = Sha384
8978
8979 }).call(this,require("buffer").Buffer)
8980 },{"./hash":37,"./sha512":44,"buffer":7,"inherits":35}],44:[function(require,module,exports){
8981 (function (Buffer){
8982 var inherits = require('inherits')
8983 var Hash = require('./hash')
8984
8985 var K = [
8986 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
8987 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
8988 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
8989 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
8990 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
8991 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
8992 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
8993 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
8994 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
8995 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
8996 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
8997 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
8998 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
8999 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
9000 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
9001 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
9002 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
9003 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
9004 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
9005 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
9006 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
9007 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
9008 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
9009 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
9010 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
9011 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
9012 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
9013 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
9014 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
9015 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
9016 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
9017 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
9018 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
9019 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
9020 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
9021 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
9022 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
9023 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
9024 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
9025 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
9026 ]
9027
9028 var W = new Array(160)
9029
9030 function Sha512 () {
9031 this.init()
9032 this._w = W
9033
9034 Hash.call(this, 128, 112)
9035 }
9036
9037 inherits(Sha512, Hash)
9038
9039 Sha512.prototype.init = function () {
9040 this._a = 0x6a09e667 | 0
9041 this._b = 0xbb67ae85 | 0
9042 this._c = 0x3c6ef372 | 0
9043 this._d = 0xa54ff53a | 0
9044 this._e = 0x510e527f | 0
9045 this._f = 0x9b05688c | 0
9046 this._g = 0x1f83d9ab | 0
9047 this._h = 0x5be0cd19 | 0
9048
9049 this._al = 0xf3bcc908 | 0
9050 this._bl = 0x84caa73b | 0
9051 this._cl = 0xfe94f82b | 0
9052 this._dl = 0x5f1d36f1 | 0
9053 this._el = 0xade682d1 | 0
9054 this._fl = 0x2b3e6c1f | 0
9055 this._gl = 0xfb41bd6b | 0
9056 this._hl = 0x137e2179 | 0
9057
9058 return this
9059 }
9060
9061 function S (X, Xl, n) {
9062 return (X >>> n) | (Xl << (32 - n))
9063 }
9064
9065 function Ch (x, y, z) {
9066 return ((x & y) ^ ((~x) & z))
9067 }
9068
9069 function Maj (x, y, z) {
9070 return ((x & y) ^ (x & z) ^ (y & z))
9071 }
9072
9073 Sha512.prototype._update = function (M) {
9074 var W = this._w
9075
9076 var a = this._a | 0
9077 var b = this._b | 0
9078 var c = this._c | 0
9079 var d = this._d | 0
9080 var e = this._e | 0
9081 var f = this._f | 0
9082 var g = this._g | 0
9083 var h = this._h | 0
9084
9085 var al = this._al | 0
9086 var bl = this._bl | 0
9087 var cl = this._cl | 0
9088 var dl = this._dl | 0
9089 var el = this._el | 0
9090 var fl = this._fl | 0
9091 var gl = this._gl | 0
9092 var hl = this._hl | 0
9093
9094 var i = 0, j = 0
9095 var Wi, Wil
9096 function calcW () {
9097 var x = W[j - 15 * 2]
9098 var xl = W[j - 15 * 2 + 1]
9099 var gamma0 = S(x, xl, 1) ^ S(x, xl, 8) ^ (x >>> 7)
9100 var gamma0l = S(xl, x, 1) ^ S(xl, x, 8) ^ S(xl, x, 7)
9101
9102 x = W[j - 2 * 2]
9103 xl = W[j - 2 * 2 + 1]
9104 var gamma1 = S(x, xl, 19) ^ S(xl, x, 29) ^ (x >>> 6)
9105 var gamma1l = S(xl, x, 19) ^ S(x, xl, 29) ^ S(xl, x, 6)
9106
9107 // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]
9108 var Wi7 = W[j - 7 * 2]
9109 var Wi7l = W[j - 7 * 2 + 1]
9110
9111 var Wi16 = W[j - 16 * 2]
9112 var Wi16l = W[j - 16 * 2 + 1]
9113
9114 Wil = gamma0l + Wi7l
9115 Wi = gamma0 + Wi7 + ((Wil >>> 0) < (gamma0l >>> 0) ? 1 : 0)
9116 Wil = Wil + gamma1l
9117 Wi = Wi + gamma1 + ((Wil >>> 0) < (gamma1l >>> 0) ? 1 : 0)
9118 Wil = Wil + Wi16l
9119 Wi = Wi + Wi16 + ((Wil >>> 0) < (Wi16l >>> 0) ? 1 : 0)
9120 }
9121
9122 function loop () {
9123 W[j] = Wi
9124 W[j + 1] = Wil
9125
9126 var maj = Maj(a, b, c)
9127 var majl = Maj(al, bl, cl)
9128
9129 var sigma0h = S(a, al, 28) ^ S(al, a, 2) ^ S(al, a, 7)
9130 var sigma0l = S(al, a, 28) ^ S(a, al, 2) ^ S(a, al, 7)
9131 var sigma1h = S(e, el, 14) ^ S(e, el, 18) ^ S(el, e, 9)
9132 var sigma1l = S(el, e, 14) ^ S(el, e, 18) ^ S(e, el, 9)
9133
9134 // t1 = h + sigma1 + ch + K[i] + W[i]
9135 var Ki = K[j]
9136 var Kil = K[j + 1]
9137
9138 var ch = Ch(e, f, g)
9139 var chl = Ch(el, fl, gl)
9140
9141 var t1l = hl + sigma1l
9142 var t1 = h + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0)
9143 t1l = t1l + chl
9144 t1 = t1 + ch + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0)
9145 t1l = t1l + Kil
9146 t1 = t1 + Ki + ((t1l >>> 0) < (Kil >>> 0) ? 1 : 0)
9147 t1l = t1l + Wil
9148 t1 = t1 + Wi + ((t1l >>> 0) < (Wil >>> 0) ? 1 : 0)
9149
9150 // t2 = sigma0 + maj
9151 var t2l = sigma0l + majl
9152 var t2 = sigma0h + maj + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0)
9153
9154 h = g
9155 hl = gl
9156 g = f
9157 gl = fl
9158 f = e
9159 fl = el
9160 el = (dl + t1l) | 0
9161 e = (d + t1 + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0
9162 d = c
9163 dl = cl
9164 c = b
9165 cl = bl
9166 b = a
9167 bl = al
9168 al = (t1l + t2l) | 0
9169 a = (t1 + t2 + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0
9170
9171 i++
9172 j += 2
9173 }
9174
9175 while (i < 16) {
9176 Wi = M.readInt32BE(j * 4)
9177 Wil = M.readInt32BE(j * 4 + 4)
9178
9179 loop()
9180 }
9181
9182 while (i < 80) {
9183 calcW()
9184 loop()
9185 }
9186
9187 this._al = (this._al + al) | 0
9188 this._bl = (this._bl + bl) | 0
9189 this._cl = (this._cl + cl) | 0
9190 this._dl = (this._dl + dl) | 0
9191 this._el = (this._el + el) | 0
9192 this._fl = (this._fl + fl) | 0
9193 this._gl = (this._gl + gl) | 0
9194 this._hl = (this._hl + hl) | 0
9195
9196 this._a = (this._a + a + ((this._al >>> 0) < (al >>> 0) ? 1 : 0)) | 0
9197 this._b = (this._b + b + ((this._bl >>> 0) < (bl >>> 0) ? 1 : 0)) | 0
9198 this._c = (this._c + c + ((this._cl >>> 0) < (cl >>> 0) ? 1 : 0)) | 0
9199 this._d = (this._d + d + ((this._dl >>> 0) < (dl >>> 0) ? 1 : 0)) | 0
9200 this._e = (this._e + e + ((this._el >>> 0) < (el >>> 0) ? 1 : 0)) | 0
9201 this._f = (this._f + f + ((this._fl >>> 0) < (fl >>> 0) ? 1 : 0)) | 0
9202 this._g = (this._g + g + ((this._gl >>> 0) < (gl >>> 0) ? 1 : 0)) | 0
9203 this._h = (this._h + h + ((this._hl >>> 0) < (hl >>> 0) ? 1 : 0)) | 0
9204 }
9205
9206 Sha512.prototype._hash = function () {
9207 var H = new Buffer(64)
9208
9209 function writeInt64BE (h, l, offset) {
9210 H.writeInt32BE(h, offset)
9211 H.writeInt32BE(l, offset + 4)
9212 }
9213
9214 writeInt64BE(this._a, this._al, 0)
9215 writeInt64BE(this._b, this._bl, 8)
9216 writeInt64BE(this._c, this._cl, 16)
9217 writeInt64BE(this._d, this._dl, 24)
9218 writeInt64BE(this._e, this._el, 32)
9219 writeInt64BE(this._f, this._fl, 40)
9220 writeInt64BE(this._g, this._gl, 48)
9221 writeInt64BE(this._h, this._hl, 56)
9222
9223 return H
9224 }
9225
9226 module.exports = Sha512
9227
9228 }).call(this,require("buffer").Buffer)
9229 },{"./hash":37,"buffer":7,"inherits":35}],45:[function(require,module,exports){
9230 (function (Buffer){
9231 'use strict';
9232 var createHash = require('create-hash/browser');
9233 var inherits = require('inherits')
9234
9235 var Transform = require('stream').Transform
9236
9237 var ZEROS = new Buffer(128)
9238 ZEROS.fill(0)
9239
9240 function Hmac(alg, key) {
9241 Transform.call(this)
9242
9243 if (typeof key === 'string') {
9244 key = new Buffer(key)
9245 }
9246
9247 var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64
9248
9249 this._alg = alg
9250 this._key = key
9251
9252 if (key.length > blocksize) {
9253 key = createHash(alg).update(key).digest()
9254
9255 } else if (key.length < blocksize) {
9256 key = Buffer.concat([key, ZEROS], blocksize)
9257 }
9258
9259 var ipad = this._ipad = new Buffer(blocksize)
9260 var opad = this._opad = new Buffer(blocksize)
9261
9262 for (var i = 0; i < blocksize; i++) {
9263 ipad[i] = key[i] ^ 0x36
9264 opad[i] = key[i] ^ 0x5C
9265 }
9266
9267 this._hash = createHash(alg).update(ipad)
9268 }
9269
9270 inherits(Hmac, Transform)
9271
9272 Hmac.prototype.update = function (data, enc) {
9273 this._hash.update(data, enc)
9274
9275 return this
9276 }
9277
9278 Hmac.prototype._transform = function (data, _, next) {
9279 this._hash.update(data)
9280
9281 next()
9282 }
9283
9284 Hmac.prototype._flush = function (next) {
9285 this.push(this.digest())
9286
9287 next()
9288 }
9289
9290 Hmac.prototype.digest = function (enc) {
9291 var h = this._hash.digest()
9292
9293 return createHash(this._alg).update(this._opad).update(h).digest(enc)
9294 }
9295
9296 module.exports = function createHmac(alg, key) {
9297 return new Hmac(alg, key)
9298 }
9299
9300 }).call(this,require("buffer").Buffer)
9301 },{"buffer":7,"create-hash/browser":32,"inherits":46,"stream":26}],46:[function(require,module,exports){
9302 arguments[4][12][0].apply(exports,arguments)
9303 },{"dup":12}],47:[function(require,module,exports){
9304 var assert = require('assert')
9305 var BigInteger = require('bigi')
9306
9307 var Point = require('./point')
9308
9309 function Curve(p, a, b, Gx, Gy, n, h) {
9310 this.p = p
9311 this.a = a
9312 this.b = b
9313 this.G = Point.fromAffine(this, Gx, Gy)
9314 this.n = n
9315 this.h = h
9316
9317 this.infinity = new Point(this, null, null, BigInteger.ZERO)
9318
9319 // result caching
9320 this.pOverFour = p.add(BigInteger.ONE).shiftRight(2)
9321 }
9322
9323 Curve.prototype.pointFromX = function(isOdd, x) {
9324 var alpha = x.pow(3).add(this.a.multiply(x)).add(this.b).mod(this.p)
9325 var beta = alpha.modPow(this.pOverFour, this.p) // XXX: not compatible with all curves
9326
9327 var y = beta
9328 if (beta.isEven() ^ !isOdd) {
9329 y = this.p.subtract(y) // -y % p
9330 }
9331
9332 return Point.fromAffine(this, x, y)
9333 }
9334
9335 Curve.prototype.isInfinity = function(Q) {
9336 if (Q === this.infinity) return true
9337
9338 return Q.z.signum() === 0 && Q.y.signum() !== 0
9339 }
9340
9341 Curve.prototype.isOnCurve = function(Q) {
9342 if (this.isInfinity(Q)) return true
9343
9344 var x = Q.affineX
9345 var y = Q.affineY
9346 var a = this.a
9347 var b = this.b
9348 var p = this.p
9349
9350 // Check that xQ and yQ are integers in the interval [0, p - 1]
9351 if (x.signum() < 0 || x.compareTo(p) >= 0) return false
9352 if (y.signum() < 0 || y.compareTo(p) >= 0) return false
9353
9354 // and check that y^2 = x^3 + ax + b (mod p)
9355 var lhs = y.square().mod(p)
9356 var rhs = x.pow(3).add(a.multiply(x)).add(b).mod(p)
9357 return lhs.equals(rhs)
9358 }
9359
9360 /**
9361 * Validate an elliptic curve point.
9362 *
9363 * See SEC 1, section 3.2.2.1: Elliptic Curve Public Key Validation Primitive
9364 */
9365 Curve.prototype.validate = function(Q) {
9366 // Check Q != O
9367 assert(!this.isInfinity(Q), 'Point is at infinity')
9368 assert(this.isOnCurve(Q), 'Point is not on the curve')
9369
9370 // Check nQ = O (where Q is a scalar multiple of G)
9371 var nQ = Q.multiply(this.n)
9372 assert(this.isInfinity(nQ), 'Point is not a scalar multiple of G')
9373
9374 return true
9375 }
9376
9377 module.exports = Curve
9378
9379 },{"./point":51,"assert":5,"bigi":3}],48:[function(require,module,exports){
9380 module.exports={
9381 "secp128r1": {
9382 "p": "fffffffdffffffffffffffffffffffff",
9383 "a": "fffffffdfffffffffffffffffffffffc",
9384 "b": "e87579c11079f43dd824993c2cee5ed3",
9385 "n": "fffffffe0000000075a30d1b9038a115",
9386 "h": "01",
9387 "Gx": "161ff7528b899b2d0c28607ca52c5b86",
9388 "Gy": "cf5ac8395bafeb13c02da292dded7a83"
9389 },
9390 "secp160k1": {
9391 "p": "fffffffffffffffffffffffffffffffeffffac73",
9392 "a": "00",
9393 "b": "07",
9394 "n": "0100000000000000000001b8fa16dfab9aca16b6b3",
9395 "h": "01",
9396 "Gx": "3b4c382ce37aa192a4019e763036f4f5dd4d7ebb",
9397 "Gy": "938cf935318fdced6bc28286531733c3f03c4fee"
9398 },
9399 "secp160r1": {
9400 "p": "ffffffffffffffffffffffffffffffff7fffffff",
9401 "a": "ffffffffffffffffffffffffffffffff7ffffffc",
9402 "b": "1c97befc54bd7a8b65acf89f81d4d4adc565fa45",
9403 "n": "0100000000000000000001f4c8f927aed3ca752257",
9404 "h": "01",
9405 "Gx": "4a96b5688ef573284664698968c38bb913cbfc82",
9406 "Gy": "23a628553168947d59dcc912042351377ac5fb32"
9407 },
9408 "secp192k1": {
9409 "p": "fffffffffffffffffffffffffffffffffffffffeffffee37",
9410 "a": "00",
9411 "b": "03",
9412 "n": "fffffffffffffffffffffffe26f2fc170f69466a74defd8d",
9413 "h": "01",
9414 "Gx": "db4ff10ec057e9ae26b07d0280b7f4341da5d1b1eae06c7d",
9415 "Gy": "9b2f2f6d9c5628a7844163d015be86344082aa88d95e2f9d"
9416 },
9417 "secp192r1": {
9418 "p": "fffffffffffffffffffffffffffffffeffffffffffffffff",
9419 "a": "fffffffffffffffffffffffffffffffefffffffffffffffc",
9420 "b": "64210519e59c80e70fa7e9ab72243049feb8deecc146b9b1",
9421 "n": "ffffffffffffffffffffffff99def836146bc9b1b4d22831",
9422 "h": "01",
9423 "Gx": "188da80eb03090f67cbf20eb43a18800f4ff0afd82ff1012",
9424 "Gy": "07192b95ffc8da78631011ed6b24cdd573f977a11e794811"
9425 },
9426 "secp256k1": {
9427 "p": "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f",
9428 "a": "00",
9429 "b": "07",
9430 "n": "fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141",
9431 "h": "01",
9432 "Gx": "79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
9433 "Gy": "483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8"
9434 },
9435 "secp256r1": {
9436 "p": "ffffffff00000001000000000000000000000000ffffffffffffffffffffffff",
9437 "a": "ffffffff00000001000000000000000000000000fffffffffffffffffffffffc",
9438 "b": "5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b",
9439 "n": "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551",
9440 "h": "01",
9441 "Gx": "6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
9442 "Gy": "4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5"
9443 }
9444 }
9445
9446 },{}],49:[function(require,module,exports){
9447 var Point = require('./point')
9448 var Curve = require('./curve')
9449
9450 var getCurveByName = require('./names')
9451
9452 module.exports = {
9453 Curve: Curve,
9454 Point: Point,
9455 getCurveByName: getCurveByName
9456 }
9457
9458 },{"./curve":47,"./names":50,"./point":51}],50:[function(require,module,exports){
9459 var BigInteger = require('bigi')
9460
9461 var curves = require('./curves')
9462 var Curve = require('./curve')
9463
9464 function getCurveByName(name) {
9465 var curve = curves[name]
9466 if (!curve) return null
9467
9468 var p = new BigInteger(curve.p, 16)
9469 var a = new BigInteger(curve.a, 16)
9470 var b = new BigInteger(curve.b, 16)
9471 var n = new BigInteger(curve.n, 16)
9472 var h = new BigInteger(curve.h, 16)
9473 var Gx = new BigInteger(curve.Gx, 16)
9474 var Gy = new BigInteger(curve.Gy, 16)
9475
9476 return new Curve(p, a, b, Gx, Gy, n, h)
9477 }
9478
9479 module.exports = getCurveByName
9480
9481 },{"./curve":47,"./curves":48,"bigi":3}],51:[function(require,module,exports){
9482 (function (Buffer){
9483 var assert = require('assert')
9484 var BigInteger = require('bigi')
9485
9486 var THREE = BigInteger.valueOf(3)
9487
9488 function Point(curve, x, y, z) {
9489 assert.notStrictEqual(z, undefined, 'Missing Z coordinate')
9490
9491 this.curve = curve
9492 this.x = x
9493 this.y = y
9494 this.z = z
9495 this._zInv = null
9496
9497 this.compressed = true
9498 }
9499
9500 Object.defineProperty(Point.prototype, 'zInv', {
9501 get: function() {
9502 if (this._zInv === null) {
9503 this._zInv = this.z.modInverse(this.curve.p)
9504 }
9505
9506 return this._zInv
9507 }
9508 })
9509
9510 Object.defineProperty(Point.prototype, 'affineX', {
9511 get: function() {
9512 return this.x.multiply(this.zInv).mod(this.curve.p)
9513 }
9514 })
9515
9516 Object.defineProperty(Point.prototype, 'affineY', {
9517 get: function() {
9518 return this.y.multiply(this.zInv).mod(this.curve.p)
9519 }
9520 })
9521
9522 Point.fromAffine = function(curve, x, y) {
9523 return new Point(curve, x, y, BigInteger.ONE)
9524 }
9525
9526 Point.prototype.equals = function(other) {
9527 if (other === this) return true
9528 if (this.curve.isInfinity(this)) return this.curve.isInfinity(other)
9529 if (this.curve.isInfinity(other)) return this.curve.isInfinity(this)
9530
9531 // u = Y2 * Z1 - Y1 * Z2
9532 var u = other.y.multiply(this.z).subtract(this.y.multiply(other.z)).mod(this.curve.p)
9533
9534 if (u.signum() !== 0) return false
9535
9536 // v = X2 * Z1 - X1 * Z2
9537 var v = other.x.multiply(this.z).subtract(this.x.multiply(other.z)).mod(this.curve.p)
9538
9539 return v.signum() === 0
9540 }
9541
9542 Point.prototype.negate = function() {
9543 var y = this.curve.p.subtract(this.y)
9544
9545 return new Point(this.curve, this.x, y, this.z)
9546 }
9547
9548 Point.prototype.add = function(b) {
9549 if (this.curve.isInfinity(this)) return b
9550 if (this.curve.isInfinity(b)) return this
9551
9552 var x1 = this.x
9553 var y1 = this.y
9554 var x2 = b.x
9555 var y2 = b.y
9556
9557 // u = Y2 * Z1 - Y1 * Z2
9558 var u = y2.multiply(this.z).subtract(y1.multiply(b.z)).mod(this.curve.p)
9559 // v = X2 * Z1 - X1 * Z2
9560 var v = x2.multiply(this.z).subtract(x1.multiply(b.z)).mod(this.curve.p)
9561
9562 if (v.signum() === 0) {
9563 if (u.signum() === 0) {
9564 return this.twice() // this == b, so double
9565 }
9566
9567 return this.curve.infinity // this = -b, so infinity
9568 }
9569
9570 var v2 = v.square()
9571 var v3 = v2.multiply(v)
9572 var x1v2 = x1.multiply(v2)
9573 var zu2 = u.square().multiply(this.z)
9574
9575 // x3 = v * (z2 * (z1 * u^2 - 2 * x1 * v^2) - v^3)
9576 var x3 = zu2.subtract(x1v2.shiftLeft(1)).multiply(b.z).subtract(v3).multiply(v).mod(this.curve.p)
9577 // y3 = z2 * (3 * x1 * u * v^2 - y1 * v^3 - z1 * u^3) + u * v^3
9578 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)
9579 // z3 = v^3 * z1 * z2
9580 var z3 = v3.multiply(this.z).multiply(b.z).mod(this.curve.p)
9581
9582 return new Point(this.curve, x3, y3, z3)
9583 }
9584
9585 Point.prototype.twice = function() {
9586 if (this.curve.isInfinity(this)) return this
9587 if (this.y.signum() === 0) return this.curve.infinity
9588
9589 var x1 = this.x
9590 var y1 = this.y
9591
9592 var y1z1 = y1.multiply(this.z)
9593 var y1sqz1 = y1z1.multiply(y1).mod(this.curve.p)
9594 var a = this.curve.a
9595
9596 // w = 3 * x1^2 + a * z1^2
9597 var w = x1.square().multiply(THREE)
9598
9599 if (a.signum() !== 0) {
9600 w = w.add(this.z.square().multiply(a))
9601 }
9602
9603 w = w.mod(this.curve.p)
9604 // x3 = 2 * y1 * z1 * (w^2 - 8 * x1 * y1^2 * z1)
9605 var x3 = w.square().subtract(x1.shiftLeft(3).multiply(y1sqz1)).shiftLeft(1).multiply(y1z1).mod(this.curve.p)
9606 // y3 = 4 * y1^2 * z1 * (3 * w * x1 - 2 * y1^2 * z1) - w^3
9607 var y3 = w.multiply(THREE).multiply(x1).subtract(y1sqz1.shiftLeft(1)).shiftLeft(2).multiply(y1sqz1).subtract(w.pow(3)).mod(this.curve.p)
9608 // z3 = 8 * (y1 * z1)^3
9609 var z3 = y1z1.pow(3).shiftLeft(3).mod(this.curve.p)
9610
9611 return new Point(this.curve, x3, y3, z3)
9612 }
9613
9614 // Simple NAF (Non-Adjacent Form) multiplication algorithm
9615 // TODO: modularize the multiplication algorithm
9616 Point.prototype.multiply = function(k) {
9617 if (this.curve.isInfinity(this)) return this
9618 if (k.signum() === 0) return this.curve.infinity
9619
9620 var e = k
9621 var h = e.multiply(THREE)
9622
9623 var neg = this.negate()
9624 var R = this
9625
9626 for (var i = h.bitLength() - 2; i > 0; --i) {
9627 R = R.twice()
9628
9629 var hBit = h.testBit(i)
9630 var eBit = e.testBit(i)
9631
9632 if (hBit != eBit) {
9633 R = R.add(hBit ? this : neg)
9634 }
9635 }
9636
9637 return R
9638 }
9639
9640 // Compute this*j + x*k (simultaneous multiplication)
9641 Point.prototype.multiplyTwo = function(j, x, k) {
9642 var i
9643
9644 if (j.bitLength() > k.bitLength())
9645 i = j.bitLength() - 1
9646 else
9647 i = k.bitLength() - 1
9648
9649 var R = this.curve.infinity
9650 var both = this.add(x)
9651
9652 while (i >= 0) {
9653 R = R.twice()
9654
9655 var jBit = j.testBit(i)
9656 var kBit = k.testBit(i)
9657
9658 if (jBit) {
9659 if (kBit) {
9660 R = R.add(both)
9661
9662 } else {
9663 R = R.add(this)
9664 }
9665
9666 } else {
9667 if (kBit) {
9668 R = R.add(x)
9669 }
9670 }
9671 --i
9672 }
9673
9674 return R
9675 }
9676
9677 Point.prototype.getEncoded = function(compressed) {
9678 if (compressed == undefined) compressed = this.compressed
9679 if (this.curve.isInfinity(this)) return new Buffer('00', 'hex') // Infinity point encoded is simply '00'
9680
9681 var x = this.affineX
9682 var y = this.affineY
9683
9684 var buffer
9685
9686 // Determine size of q in bytes
9687 var byteLength = Math.floor((this.curve.p.bitLength() + 7) / 8)
9688
9689 // 0x02/0x03 | X
9690 if (compressed) {
9691 buffer = new Buffer(1 + byteLength)
9692 buffer.writeUInt8(y.isEven() ? 0x02 : 0x03, 0)
9693
9694 // 0x04 | X | Y
9695 } else {
9696 buffer = new Buffer(1 + byteLength + byteLength)
9697 buffer.writeUInt8(0x04, 0)
9698
9699 y.toBuffer(byteLength).copy(buffer, 1 + byteLength)
9700 }
9701
9702 x.toBuffer(byteLength).copy(buffer, 1)
9703
9704 return buffer
9705 }
9706
9707 Point.decodeFrom = function(curve, buffer) {
9708 var type = buffer.readUInt8(0)
9709 var compressed = (type !== 4)
9710
9711 var byteLength = Math.floor((curve.p.bitLength() + 7) / 8)
9712 var x = BigInteger.fromBuffer(buffer.slice(1, 1 + byteLength))
9713
9714 var Q
9715 if (compressed) {
9716 assert.equal(buffer.length, byteLength + 1, 'Invalid sequence length')
9717 assert(type === 0x02 || type === 0x03, 'Invalid sequence tag')
9718
9719 var isOdd = (type === 0x03)
9720 Q = curve.pointFromX(isOdd, x)
9721
9722 } else {
9723 assert.equal(buffer.length, 1 + byteLength + byteLength, 'Invalid sequence length')
9724
9725 var y = BigInteger.fromBuffer(buffer.slice(1 + byteLength))
9726 Q = Point.fromAffine(curve, x, y)
9727 }
9728
9729 Q.compressed = compressed
9730 return Q
9731 }
9732
9733 Point.prototype.toString = function () {
9734 if (this.curve.isInfinity(this)) return '(INFINITY)'
9735
9736 return '(' + this.affineX.toString() + ',' + this.affineY.toString() + ')'
9737 }
9738
9739 module.exports = Point
9740
9741 }).call(this,require("buffer").Buffer)
9742 },{"assert":5,"bigi":3,"buffer":7}],52:[function(require,module,exports){
9743 (function (process,global,Buffer){
9744 'use strict';
9745
9746 var crypto = global.crypto || global.msCrypto
9747 if(crypto && crypto.getRandomValues) {
9748 module.exports = randomBytes;
9749 } else {
9750 module.exports = oldBrowser;
9751 }
9752 function randomBytes(size, cb) {
9753 var bytes = new Buffer(size); //in browserify, this is an extended Uint8Array
9754 /* This will not work in older browsers.
9755 * See https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues
9756 */
9757
9758 crypto.getRandomValues(bytes);
9759 if (typeof cb === 'function') {
9760 return process.nextTick(function () {
9761 cb(null, bytes);
9762 });
9763 }
9764 return bytes;
9765 }
9766 function oldBrowser() {
9767 throw new Error(
9768 'secure random number generation not supported by this browser\n'+
9769 'use chrome, FireFox or Internet Explorer 11'
9770 )
9771 }
9772
9773 }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer)
9774 },{"_process":14,"buffer":7}],53:[function(require,module,exports){
9775 (function (Buffer){
9776 'use strict';
9777
9778 function getFunctionName(fn) {
9779 return fn.name || fn.toString().match(/function (.*?)\s*\(/)[1];
9780 }
9781
9782 function getTypeTypeName(type) {
9783 if (nativeTypes.Function(type)) {
9784 type = type.toJSON ? type.toJSON() : getFunctionName(type);
9785 }
9786 if (nativeTypes.Object(type)) return JSON.stringify(type);
9787
9788 return type;
9789 }
9790
9791 function getValueTypeName(value) {
9792 if (nativeTypes.Null(value)) return '';
9793
9794 return getFunctionName(value.constructor);
9795 }
9796
9797 function tfErrorString(type, value) {
9798 var typeTypeName = getTypeTypeName(type);
9799 var valueTypeName = getValueTypeName(value);
9800
9801 return 'Expected ' + typeTypeName + ', got ' + (valueTypeName && valueTypeName + ' ') + JSON.stringify(value);
9802 }
9803
9804 function tfPropertyErrorString(type, name, value) {
9805 return tfErrorString('property \"' + name + '\" of type ' + getTypeTypeName(type), value);
9806 }
9807
9808 var nativeTypes = {
9809 Array: (function (_Array) {
9810 function Array(_x) {
9811 return _Array.apply(this, arguments);
9812 }
9813
9814 Array.toString = function () {
9815 return _Array.toString();
9816 };
9817
9818 return Array;
9819 })(function (value) {
9820 return value !== null && value !== undefined && value.constructor === Array;
9821 }),
9822 Boolean: function Boolean(value) {
9823 return typeof value === 'boolean';
9824 },
9825 Buffer: (function (_Buffer) {
9826 function Buffer(_x2) {
9827 return _Buffer.apply(this, arguments);
9828 }
9829
9830 Buffer.toString = function () {
9831 return _Buffer.toString();
9832 };
9833
9834 return Buffer;
9835 })(function (value) {
9836 return Buffer.isBuffer(value);
9837 }),
9838 Function: function Function(value) {
9839 return typeof value === 'function';
9840 },
9841 Null: function Null(value) {
9842 return value === undefined || value === null;
9843 },
9844 Number: function Number(value) {
9845 return typeof value === 'number';
9846 },
9847 Object: function Object(value) {
9848 return typeof value === 'object';
9849 },
9850 String: function String(value) {
9851 return typeof value === 'string';
9852 },
9853 '': function _() {
9854 return true;
9855 }
9856 };
9857
9858 function tJSON(type) {
9859 return type && type.toJSON ? type.toJSON() : type;
9860 }
9861
9862 function sJSON(type) {
9863 var json = tJSON(type);
9864 return nativeTypes.Object(json) ? JSON.stringify(json) : json;
9865 }
9866
9867 var otherTypes = {
9868 arrayOf: function arrayOf(type) {
9869 function arrayOf(value, strict) {
9870 try {
9871 return nativeTypes.Array(value) && value.every(function (x) {
9872 return typeforce(type, x, strict);
9873 });
9874 } catch (e) {
9875 return false;
9876 }
9877 }
9878 arrayOf.toJSON = function () {
9879 return [tJSON(type)];
9880 };
9881
9882 return arrayOf;
9883 },
9884
9885 maybe: function maybe(type) {
9886 function maybe(value, strict) {
9887 return nativeTypes.Null(value) || typeforce(type, value, strict);
9888 }
9889 maybe.toJSON = function () {
9890 return '?' + sJSON(type);
9891 };
9892
9893 return maybe;
9894 },
9895
9896 object: function object(type) {
9897 function object(value, strict) {
9898 typeforce(nativeTypes.Object, value, strict);
9899
9900 var propertyName, propertyType, propertyValue;
9901
9902 try {
9903 for (propertyName in type) {
9904 propertyType = type[propertyName];
9905 propertyValue = value[propertyName];
9906
9907 typeforce(propertyType, propertyValue, strict);
9908 }
9909 } catch (e) {
9910 throw new TypeError(tfPropertyErrorString(propertyType, propertyName, propertyValue));
9911 }
9912
9913 if (strict) {
9914 for (propertyName in value) {
9915 if (type[propertyName]) continue;
9916
9917 throw new TypeError('Unexpected property "' + propertyName + '"');
9918 }
9919 }
9920
9921 return true;
9922 }
9923 object.toJSON = function () {
9924 return type;
9925 };
9926
9927 return object;
9928 },
9929
9930 oneOf: function oneOf() {
9931 for (var _len = arguments.length, types = Array(_len), _key = 0; _key < _len; _key++) {
9932 types[_key] = arguments[_key];
9933 }
9934
9935 function oneOf(value, strict) {
9936 return types.some(function (type) {
9937 try {
9938 return typeforce(type, value, strict);
9939 } catch (e) {
9940 return false;
9941 }
9942 });
9943 }
9944 oneOf.toJSON = function () {
9945 return types.map(sJSON).join('|');
9946 };
9947
9948 return oneOf;
9949 },
9950
9951 quacksLike: function quacksLike(type) {
9952 function quacksLike(value, strict) {
9953 return type === getValueTypeName(value);
9954 }
9955 quacksLike.toJSON = function () {
9956 return type;
9957 };
9958
9959 return quacksLike;
9960 },
9961
9962 tuple: function tuple() {
9963 for (var _len2 = arguments.length, types = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
9964 types[_key2] = arguments[_key2];
9965 }
9966
9967 function tuple(value, strict) {
9968 return types.every(function (type, i) {
9969 return typeforce(type, value[i], strict);
9970 });
9971 }
9972 tuple.toJSON = function () {
9973 return '(' + types.map(sJSON).join(', ') + ')';
9974 };
9975
9976 return tuple;
9977 },
9978
9979 value: function value(expected) {
9980 function value(actual) {
9981 return actual === expected;
9982 }
9983 value.toJSON = function () {
9984 return expected;
9985 };
9986
9987 return value;
9988 }
9989 };
9990
9991 function compile(type) {
9992 if (nativeTypes.String(type)) {
9993 if (type[0] === '?') return otherTypes.maybe(compile(type.slice(1)));
9994
9995 return nativeTypes[type] || otherTypes.quacksLike(type);
9996 } else if (type && nativeTypes.Object(type)) {
9997 if (nativeTypes.Array(type)) return otherTypes.arrayOf(compile(type[0]));
9998
9999 var compiled = {};
10000
10001 for (var propertyName in type) {
10002 compiled[propertyName] = compile(type[propertyName]);
10003 }
10004
10005 return otherTypes.object(compiled);
10006 } else if (nativeTypes.Function(type)) {
10007 return type;
10008 }
10009
10010 return otherTypes.value(type);
10011 }
10012
10013 function typeforce(_x3, _x4, _x5) {
10014 var _again = true;
10015
10016 _function: while (_again) {
10017 var type = _x3,
10018 value = _x4,
10019 strict = _x5;
10020 _again = false;
10021
10022 if (nativeTypes.Function(type)) {
10023 if (type(value, strict)) return true;
10024
10025 throw new TypeError(tfErrorString(type, value));
10026 }
10027
10028 // JIT
10029 _x3 = compile(type);
10030 _x4 = value;
10031 _x5 = strict;
10032 _again = true;
10033 continue _function;
10034 }
10035 }
10036
10037 // assign all types to typeforce function
10038 var typeName;
10039 Object.keys(nativeTypes).forEach(function (typeName) {
10040 var nativeType = nativeTypes[typeName];
10041 nativeType.toJSON = function () {
10042 return typeName;
10043 };
10044
10045 typeforce[typeName] = nativeType;
10046 });
10047
10048 for (typeName in otherTypes) {
10049 typeforce[typeName] = otherTypes[typeName];
10050 }
10051
10052 module.exports = typeforce;
10053 module.exports.compile = compile;
10054 }).call(this,require("buffer").Buffer)
10055 },{"buffer":7}],54:[function(require,module,exports){
10056 (function (Buffer){
10057 var assert = require('assert')
10058 var base58check = require('bs58check')
10059 var typeForce = require('typeforce')
10060 var networks = require('./networks')
10061 var scripts = require('./scripts')
10062
10063 function findScriptTypeByVersion (version) {
10064 for (var networkName in networks) {
10065 var network = networks[networkName]
10066
10067 if (version === network.pubKeyHash) return 'pubkeyhash'
10068 if (version === network.scriptHash) return 'scripthash'
10069 }
10070 }
10071
10072 function Address (hash, version) {
10073 typeForce('Buffer', hash)
10074
10075 assert.strictEqual(hash.length, 20, 'Invalid hash length')
10076 assert.strictEqual(version & 0xff, version, 'Invalid version byte')
10077
10078 this.hash = hash
10079 this.version = version
10080 }
10081
10082 Address.fromBase58Check = function (string) {
10083 var payload = base58check.decode(string)
10084 var version = payload.readUInt8(0)
10085 var hash = payload.slice(1)
10086
10087 return new Address(hash, version)
10088 }
10089
10090 Address.fromOutputScript = function (script, network) {
10091 network = network || networks.bitcoin
10092
10093 if (scripts.isPubKeyHashOutput(script)) return new Address(script.chunks[2], network.pubKeyHash)
10094 if (scripts.isScriptHashOutput(script)) return new Address(script.chunks[1], network.scriptHash)
10095
10096 assert(false, script.toASM() + ' has no matching Address')
10097 }
10098
10099 Address.prototype.toBase58Check = function () {
10100 var payload = new Buffer(21)
10101 payload.writeUInt8(this.version, 0)
10102 this.hash.copy(payload, 1)
10103
10104 return base58check.encode(payload)
10105 }
10106
10107 Address.prototype.toOutputScript = function () {
10108 var scriptType = findScriptTypeByVersion(this.version)
10109
10110 if (scriptType === 'pubkeyhash') return scripts.pubKeyHashOutput(this.hash)
10111 if (scriptType === 'scripthash') return scripts.scriptHashOutput(this.hash)
10112
10113 assert(false, this.toString() + ' has no matching Script')
10114 }
10115
10116 Address.prototype.toString = Address.prototype.toBase58Check
10117
10118 module.exports = Address
10119
10120 }).call(this,require("buffer").Buffer)
10121 },{"./networks":66,"./scripts":69,"assert":5,"bs58check":31,"buffer":7,"typeforce":53}],55:[function(require,module,exports){
10122 var bs58check = require('bs58check')
10123
10124 function decode () {
10125 console.warn('bs58check will be removed in 2.0.0. require("bs58check") instead.')
10126
10127 return bs58check.decode.apply(undefined, arguments)
10128 }
10129
10130 function encode () {
10131 console.warn('bs58check will be removed in 2.0.0. require("bs58check") instead.')
10132
10133 return bs58check.encode.apply(undefined, arguments)
10134 }
10135
10136 module.exports = {
10137 decode: decode,
10138 encode: encode
10139 }
10140
10141 },{"bs58check":31}],56:[function(require,module,exports){
10142 (function (Buffer){
10143 var assert = require('assert')
10144 var bufferutils = require('./bufferutils')
10145 var crypto = require('./crypto')
10146
10147 var Transaction = require('./transaction')
10148
10149 function Block () {
10150 this.version = 1
10151 this.prevHash = null
10152 this.merkleRoot = null
10153 this.timestamp = 0
10154 this.bits = 0
10155 this.nonce = 0
10156 }
10157
10158 Block.fromBuffer = function (buffer) {
10159 assert(buffer.length >= 80, 'Buffer too small (< 80 bytes)')
10160
10161 var offset = 0
10162 function readSlice (n) {
10163 offset += n
10164 return buffer.slice(offset - n, offset)
10165 }
10166
10167 function readUInt32 () {
10168 var i = buffer.readUInt32LE(offset)
10169 offset += 4
10170 return i
10171 }
10172
10173 var block = new Block()
10174 block.version = readUInt32()
10175 block.prevHash = readSlice(32)
10176 block.merkleRoot = readSlice(32)
10177 block.timestamp = readUInt32()
10178 block.bits = readUInt32()
10179 block.nonce = readUInt32()
10180
10181 if (buffer.length === 80) return block
10182
10183 function readVarInt () {
10184 var vi = bufferutils.readVarInt(buffer, offset)
10185 offset += vi.size
10186 return vi.number
10187 }
10188
10189 // FIXME: poor performance
10190 function readTransaction () {
10191 var tx = Transaction.fromBuffer(buffer.slice(offset), true)
10192
10193 offset += tx.toBuffer().length
10194 return tx
10195 }
10196
10197 var nTransactions = readVarInt()
10198 block.transactions = []
10199
10200 for (var i = 0; i < nTransactions; ++i) {
10201 var tx = readTransaction()
10202 block.transactions.push(tx)
10203 }
10204
10205 return block
10206 }
10207
10208 Block.fromHex = function (hex) {
10209 return Block.fromBuffer(new Buffer(hex, 'hex'))
10210 }
10211
10212 Block.prototype.getHash = function () {
10213 return crypto.hash256(this.toBuffer(true))
10214 }
10215
10216 Block.prototype.getId = function () {
10217 return bufferutils.reverse(this.getHash()).toString('hex')
10218 }
10219
10220 Block.prototype.getUTCDate = function () {
10221 var date = new Date(0) // epoch
10222 date.setUTCSeconds(this.timestamp)
10223
10224 return date
10225 }
10226
10227 Block.prototype.toBuffer = function (headersOnly) {
10228 var buffer = new Buffer(80)
10229
10230 var offset = 0
10231 function writeSlice (slice) {
10232 slice.copy(buffer, offset)
10233 offset += slice.length
10234 }
10235
10236 function writeUInt32 (i) {
10237 buffer.writeUInt32LE(i, offset)
10238 offset += 4
10239 }
10240
10241 writeUInt32(this.version)
10242 writeSlice(this.prevHash)
10243 writeSlice(this.merkleRoot)
10244 writeUInt32(this.timestamp)
10245 writeUInt32(this.bits)
10246 writeUInt32(this.nonce)
10247
10248 if (headersOnly || !this.transactions) return buffer
10249
10250 var txLenBuffer = bufferutils.varIntBuffer(this.transactions.length)
10251 var txBuffers = this.transactions.map(function (tx) {
10252 return tx.toBuffer()
10253 })
10254
10255 return Buffer.concat([buffer, txLenBuffer].concat(txBuffers))
10256 }
10257
10258 Block.prototype.toHex = function (headersOnly) {
10259 return this.toBuffer(headersOnly).toString('hex')
10260 }
10261
10262 module.exports = Block
10263
10264 }).call(this,require("buffer").Buffer)
10265 },{"./bufferutils":57,"./crypto":58,"./transaction":70,"assert":5,"buffer":7}],57:[function(require,module,exports){
10266 (function (Buffer){
10267 var assert = require('assert')
10268 var opcodes = require('./opcodes')
10269
10270 // https://github.com/feross/buffer/blob/master/index.js#L1127
10271 function verifuint (value, max) {
10272 assert(typeof value === 'number', 'cannot write a non-number as a number')
10273 assert(value >= 0, 'specified a negative value for writing an unsigned value')
10274 assert(value <= max, 'value is larger than maximum value for type')
10275 assert(Math.floor(value) === value, 'value has a fractional component')
10276 }
10277
10278 function pushDataSize (i) {
10279 return i < opcodes.OP_PUSHDATA1 ? 1
10280 : i < 0xff ? 2
10281 : i < 0xffff ? 3
10282 : 5
10283 }
10284
10285 function readPushDataInt (buffer, offset) {
10286 var opcode = buffer.readUInt8(offset)
10287 var number, size
10288
10289 // ~6 bit
10290 if (opcode < opcodes.OP_PUSHDATA1) {
10291 number = opcode
10292 size = 1
10293
10294 // 8 bit
10295 } else if (opcode === opcodes.OP_PUSHDATA1) {
10296 if (offset + 2 > buffer.length) return null
10297 number = buffer.readUInt8(offset + 1)
10298 size = 2
10299
10300 // 16 bit
10301 } else if (opcode === opcodes.OP_PUSHDATA2) {
10302 if (offset + 3 > buffer.length) return null
10303 number = buffer.readUInt16LE(offset + 1)
10304 size = 3
10305
10306 // 32 bit
10307 } else {
10308 if (offset + 5 > buffer.length) return null
10309 assert.equal(opcode, opcodes.OP_PUSHDATA4, 'Unexpected opcode')
10310
10311 number = buffer.readUInt32LE(offset + 1)
10312 size = 5
10313 }
10314
10315 return {
10316 opcode: opcode,
10317 number: number,
10318 size: size
10319 }
10320 }
10321
10322 function readUInt64LE (buffer, offset) {
10323 var a = buffer.readUInt32LE(offset)
10324 var b = buffer.readUInt32LE(offset + 4)
10325 b *= 0x100000000
10326
10327 verifuint(b + a, 0x001fffffffffffff)
10328
10329 return b + a
10330 }
10331
10332 function readVarInt (buffer, offset) {
10333 var t = buffer.readUInt8(offset)
10334 var number, size
10335
10336 // 8 bit
10337 if (t < 253) {
10338 number = t
10339 size = 1
10340
10341 // 16 bit
10342 } else if (t < 254) {
10343 number = buffer.readUInt16LE(offset + 1)
10344 size = 3
10345
10346 // 32 bit
10347 } else if (t < 255) {
10348 number = buffer.readUInt32LE(offset + 1)
10349 size = 5
10350
10351 // 64 bit
10352 } else {
10353 number = readUInt64LE(buffer, offset + 1)
10354 size = 9
10355 }
10356
10357 return {
10358 number: number,
10359 size: size
10360 }
10361 }
10362
10363 function writePushDataInt (buffer, number, offset) {
10364 var size = pushDataSize(number)
10365
10366 // ~6 bit
10367 if (size === 1) {
10368 buffer.writeUInt8(number, offset)
10369
10370 // 8 bit
10371 } else if (size === 2) {
10372 buffer.writeUInt8(opcodes.OP_PUSHDATA1, offset)
10373 buffer.writeUInt8(number, offset + 1)
10374
10375 // 16 bit
10376 } else if (size === 3) {
10377 buffer.writeUInt8(opcodes.OP_PUSHDATA2, offset)
10378 buffer.writeUInt16LE(number, offset + 1)
10379
10380 // 32 bit
10381 } else {
10382 buffer.writeUInt8(opcodes.OP_PUSHDATA4, offset)
10383 buffer.writeUInt32LE(number, offset + 1)
10384 }
10385
10386 return size
10387 }
10388
10389 function writeUInt64LE (buffer, value, offset) {
10390 verifuint(value, 0x001fffffffffffff)
10391
10392 buffer.writeInt32LE(value & -1, offset)
10393 buffer.writeUInt32LE(Math.floor(value / 0x100000000), offset + 4)
10394 }
10395
10396 function varIntSize (i) {
10397 return i < 253 ? 1
10398 : i < 0x10000 ? 3
10399 : i < 0x100000000 ? 5
10400 : 9
10401 }
10402
10403 function writeVarInt (buffer, number, offset) {
10404 var size = varIntSize(number)
10405
10406 // 8 bit
10407 if (size === 1) {
10408 buffer.writeUInt8(number, offset)
10409
10410 // 16 bit
10411 } else if (size === 3) {
10412 buffer.writeUInt8(253, offset)
10413 buffer.writeUInt16LE(number, offset + 1)
10414
10415 // 32 bit
10416 } else if (size === 5) {
10417 buffer.writeUInt8(254, offset)
10418 buffer.writeUInt32LE(number, offset + 1)
10419
10420 // 64 bit
10421 } else {
10422 buffer.writeUInt8(255, offset)
10423 writeUInt64LE(buffer, number, offset + 1)
10424 }
10425
10426 return size
10427 }
10428
10429 function varIntBuffer (i) {
10430 var size = varIntSize(i)
10431 var buffer = new Buffer(size)
10432 writeVarInt(buffer, i, 0)
10433
10434 return buffer
10435 }
10436
10437 function reverse (buffer) {
10438 var buffer2 = new Buffer(buffer)
10439 Array.prototype.reverse.call(buffer2)
10440 return buffer2
10441 }
10442
10443 module.exports = {
10444 pushDataSize: pushDataSize,
10445 readPushDataInt: readPushDataInt,
10446 readUInt64LE: readUInt64LE,
10447 readVarInt: readVarInt,
10448 reverse: reverse,
10449 varIntBuffer: varIntBuffer,
10450 varIntSize: varIntSize,
10451 writePushDataInt: writePushDataInt,
10452 writeUInt64LE: writeUInt64LE,
10453 writeVarInt: writeVarInt
10454 }
10455
10456 }).call(this,require("buffer").Buffer)
10457 },{"./opcodes":67,"assert":5,"buffer":7}],58:[function(require,module,exports){
10458 var createHash = require('create-hash')
10459
10460 function hash160 (buffer) {
10461 return ripemd160(sha256(buffer))
10462 }
10463
10464 function hash256 (buffer) {
10465 return sha256(sha256(buffer))
10466 }
10467
10468 function ripemd160 (buffer) {
10469 return createHash('rmd160').update(buffer).digest()
10470 }
10471
10472 function sha1 (buffer) {
10473 return createHash('sha1').update(buffer).digest()
10474 }
10475
10476 function sha256 (buffer) {
10477 return createHash('sha256').update(buffer).digest()
10478 }
10479
10480 // FIXME: Name not consistent with others
10481 var createHmac = require('create-hmac')
10482
10483 function HmacSHA256 (buffer, secret) {
10484 console.warn('Hmac* functions are deprecated for removal in 2.0.0, use node crypto instead')
10485 return createHmac('sha256', secret).update(buffer).digest()
10486 }
10487
10488 function HmacSHA512 (buffer, secret) {
10489 console.warn('Hmac* functions are deprecated for removal in 2.0.0, use node crypto instead')
10490 return createHmac('sha512', secret).update(buffer).digest()
10491 }
10492
10493 module.exports = {
10494 ripemd160: ripemd160,
10495 sha1: sha1,
10496 sha256: sha256,
10497 hash160: hash160,
10498 hash256: hash256,
10499 HmacSHA256: HmacSHA256,
10500 HmacSHA512: HmacSHA512
10501 }
10502
10503 },{"create-hash":32,"create-hmac":45}],59:[function(require,module,exports){
10504 (function (Buffer){
10505 var assert = require('assert')
10506 var createHmac = require('create-hmac')
10507 var typeForce = require('typeforce')
10508
10509 var BigInteger = require('bigi')
10510 var ECSignature = require('./ecsignature')
10511
10512 var ZERO = new Buffer([0])
10513 var ONE = new Buffer([1])
10514
10515 // https://tools.ietf.org/html/rfc6979#section-3.2
10516 function deterministicGenerateK (curve, hash, d, checkSig) {
10517 typeForce('Buffer', hash)
10518 typeForce('BigInteger', d)
10519
10520 // FIXME: remove/uncomment for 2.0.0
10521 // typeForce('Function', checkSig)
10522
10523 if (typeof checkSig !== 'function') {
10524 console.warn('deterministicGenerateK requires a checkSig callback in 2.0.0, see #337 for more information')
10525
10526 checkSig = function (k) {
10527 var G = curve.G
10528 var n = curve.n
10529 var e = BigInteger.fromBuffer(hash)
10530
10531 var Q = G.multiply(k)
10532
10533 if (curve.isInfinity(Q))
10534 return false
10535
10536 var r = Q.affineX.mod(n)
10537 if (r.signum() === 0)
10538 return false
10539
10540 var s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n)
10541 if (s.signum() === 0)
10542 return false
10543
10544 return true
10545 }
10546 }
10547
10548 // sanity check
10549 assert.equal(hash.length, 32, 'Hash must be 256 bit')
10550
10551 var x = d.toBuffer(32)
10552 var k = new Buffer(32)
10553 var v = new Buffer(32)
10554
10555 // Step A, ignored as hash already provided
10556 // Step B
10557 v.fill(1)
10558
10559 // Step C
10560 k.fill(0)
10561
10562 // Step D
10563 k = createHmac('sha256', k)
10564 .update(v)
10565 .update(ZERO)
10566 .update(x)
10567 .update(hash)
10568 .digest()
10569
10570 // Step E
10571 v = createHmac('sha256', k).update(v).digest()
10572
10573 // Step F
10574 k = createHmac('sha256', k)
10575 .update(v)
10576 .update(ONE)
10577 .update(x)
10578 .update(hash)
10579 .digest()
10580
10581 // Step G
10582 v = createHmac('sha256', k).update(v).digest()
10583
10584 // Step H1/H2a, ignored as tlen === qlen (256 bit)
10585 // Step H2b
10586 v = createHmac('sha256', k).update(v).digest()
10587
10588 var T = BigInteger.fromBuffer(v)
10589
10590 // Step H3, repeat until T is within the interval [1, n - 1] and is suitable for ECDSA
10591 while ((T.signum() <= 0) || (T.compareTo(curve.n) >= 0) || !checkSig(T)) {
10592 k = createHmac('sha256', k)
10593 .update(v)
10594 .update(ZERO)
10595 .digest()
10596
10597 v = createHmac('sha256', k).update(v).digest()
10598
10599 // Step H1/H2a, again, ignored as tlen === qlen (256 bit)
10600 // Step H2b again
10601 v = createHmac('sha256', k).update(v).digest()
10602 T = BigInteger.fromBuffer(v)
10603 }
10604
10605 return T
10606 }
10607
10608 function sign (curve, hash, d) {
10609 var r, s
10610
10611 var e = BigInteger.fromBuffer(hash)
10612 var n = curve.n
10613 var G = curve.G
10614
10615 deterministicGenerateK(curve, hash, d, function (k) {
10616 var Q = G.multiply(k)
10617
10618 if (curve.isInfinity(Q))
10619 return false
10620
10621 r = Q.affineX.mod(n)
10622 if (r.signum() === 0)
10623 return false
10624
10625 s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n)
10626 if (s.signum() === 0)
10627 return false
10628
10629 return true
10630 })
10631
10632 var N_OVER_TWO = n.shiftRight(1)
10633
10634 // enforce low S values, see bip62: 'low s values in signatures'
10635 if (s.compareTo(N_OVER_TWO) > 0) {
10636 s = n.subtract(s)
10637 }
10638
10639 return new ECSignature(r, s)
10640 }
10641
10642 function verifyRaw (curve, e, signature, Q) {
10643 var n = curve.n
10644 var G = curve.G
10645
10646 var r = signature.r
10647 var s = signature.s
10648
10649 // 1.4.1 Enforce r and s are both integers in the interval [1, n − 1]
10650 if (r.signum() <= 0 || r.compareTo(n) >= 0) return false
10651 if (s.signum() <= 0 || s.compareTo(n) >= 0) return false
10652
10653 // c = s^-1 mod n
10654 var c = s.modInverse(n)
10655
10656 // 1.4.4 Compute u1 = es^−1 mod n
10657 // u2 = rs^−1 mod n
10658 var u1 = e.multiply(c).mod(n)
10659 var u2 = r.multiply(c).mod(n)
10660
10661 // 1.4.5 Compute R = (xR, yR) = u1G + u2Q
10662 var R = G.multiplyTwo(u1, Q, u2)
10663 var v = R.affineX.mod(n)
10664
10665 // 1.4.5 (cont.) Enforce R is not at infinity
10666 if (curve.isInfinity(R)) return false
10667
10668 // 1.4.8 If v = r, output "valid", and if v != r, output "invalid"
10669 return v.equals(r)
10670 }
10671
10672 function verify (curve, hash, signature, Q) {
10673 // 1.4.2 H = Hash(M), already done by the user
10674 // 1.4.3 e = H
10675 var e = BigInteger.fromBuffer(hash)
10676
10677 return verifyRaw(curve, e, signature, Q)
10678 }
10679
10680 /**
10681 * Recover a public key from a signature.
10682 *
10683 * See SEC 1: Elliptic Curve Cryptography, section 4.1.6, "Public
10684 * Key Recovery Operation".
10685 *
10686 * http://www.secg.org/download/aid-780/sec1-v2.pdf
10687 */
10688 function recoverPubKey (curve, e, signature, i) {
10689 assert.strictEqual(i & 3, i, 'Recovery param is more than two bits')
10690
10691 var n = curve.n
10692 var G = curve.G
10693
10694 var r = signature.r
10695 var s = signature.s
10696
10697 assert(r.signum() > 0 && r.compareTo(n) < 0, 'Invalid r value')
10698 assert(s.signum() > 0 && s.compareTo(n) < 0, 'Invalid s value')
10699
10700 // A set LSB signifies that the y-coordinate is odd
10701 var isYOdd = i & 1
10702
10703 // The more significant bit specifies whether we should use the
10704 // first or second candidate key.
10705 var isSecondKey = i >> 1
10706
10707 // 1.1 Let x = r + jn
10708 var x = isSecondKey ? r.add(n) : r
10709 var R = curve.pointFromX(isYOdd, x)
10710
10711 // 1.4 Check that nR is at infinity
10712 var nR = R.multiply(n)
10713 assert(curve.isInfinity(nR), 'nR is not a valid curve point')
10714
10715 // Compute -e from e
10716 var eNeg = e.negate().mod(n)
10717
10718 // 1.6.1 Compute Q = r^-1 (sR - eG)
10719 // Q = r^-1 (sR + -eG)
10720 var rInv = r.modInverse(n)
10721
10722 var Q = R.multiplyTwo(s, G, eNeg).multiply(rInv)
10723 curve.validate(Q)
10724
10725 return Q
10726 }
10727
10728 /**
10729 * Calculate pubkey extraction parameter.
10730 *
10731 * When extracting a pubkey from a signature, we have to
10732 * distinguish four different cases. Rather than putting this
10733 * burden on the verifier, Bitcoin includes a 2-bit value with the
10734 * signature.
10735 *
10736 * This function simply tries all four cases and returns the value
10737 * that resulted in a successful pubkey recovery.
10738 */
10739 function calcPubKeyRecoveryParam (curve, e, signature, Q) {
10740 for (var i = 0; i < 4; i++) {
10741 var Qprime = recoverPubKey(curve, e, signature, i)
10742
10743 // 1.6.2 Verify Q
10744 if (Qprime.equals(Q)) {
10745 return i
10746 }
10747 }
10748
10749 throw new Error('Unable to find valid recovery factor')
10750 }
10751
10752 module.exports = {
10753 calcPubKeyRecoveryParam: calcPubKeyRecoveryParam,
10754 deterministicGenerateK: deterministicGenerateK,
10755 recoverPubKey: recoverPubKey,
10756 sign: sign,
10757 verify: verify,
10758 verifyRaw: verifyRaw
10759 }
10760
10761 }).call(this,require("buffer").Buffer)
10762 },{"./ecsignature":62,"assert":5,"bigi":3,"buffer":7,"create-hmac":45,"typeforce":53}],60:[function(require,module,exports){
10763 (function (Buffer){
10764 var assert = require('assert')
10765 var base58check = require('bs58check')
10766 var ecdsa = require('./ecdsa')
10767 var networks = require('./networks')
10768 var randomBytes = require('randombytes')
10769 var typeForce = require('typeforce')
10770
10771 var BigInteger = require('bigi')
10772 var ECPubKey = require('./ecpubkey')
10773
10774 var ecurve = require('ecurve')
10775 var secp256k1 = ecurve.getCurveByName('secp256k1')
10776
10777 function ECKey (d, compressed) {
10778 assert(d.signum() > 0, 'Private key must be greater than 0')
10779 assert(d.compareTo(ECKey.curve.n) < 0, 'Private key must be less than the curve order')
10780
10781 var Q = ECKey.curve.G.multiply(d)
10782
10783 this.d = d
10784 this.pub = new ECPubKey(Q, compressed)
10785 }
10786
10787 // Constants
10788 ECKey.curve = secp256k1
10789
10790 // Static constructors
10791 ECKey.fromWIF = function (string) {
10792 var payload = base58check.decode(string)
10793 var compressed = false
10794
10795 // Ignore the version byte
10796 payload = payload.slice(1)
10797
10798 if (payload.length === 33) {
10799 assert.strictEqual(payload[32], 0x01, 'Invalid compression flag')
10800
10801 // Truncate the compression flag
10802 payload = payload.slice(0, -1)
10803 compressed = true
10804 }
10805
10806 assert.equal(payload.length, 32, 'Invalid WIF payload length')
10807
10808 var d = BigInteger.fromBuffer(payload)
10809 return new ECKey(d, compressed)
10810 }
10811
10812 ECKey.makeRandom = function (compressed, rng) {
10813 rng = rng || randomBytes
10814
10815 var buffer = rng(32)
10816 typeForce('Buffer', buffer)
10817 assert.equal(buffer.length, 32, 'Expected 256-bit Buffer from RNG')
10818
10819 var d = BigInteger.fromBuffer(buffer)
10820 d = d.mod(ECKey.curve.n)
10821
10822 return new ECKey(d, compressed)
10823 }
10824
10825 // Export functions
10826 ECKey.prototype.toWIF = function (network) {
10827 network = network || networks.bitcoin
10828
10829 var bufferLen = this.pub.compressed ? 34 : 33
10830 var buffer = new Buffer(bufferLen)
10831
10832 buffer.writeUInt8(network.wif, 0)
10833 this.d.toBuffer(32).copy(buffer, 1)
10834
10835 if (this.pub.compressed) {
10836 buffer.writeUInt8(0x01, 33)
10837 }
10838
10839 return base58check.encode(buffer)
10840 }
10841
10842 // Operations
10843 ECKey.prototype.sign = function (hash) {
10844 return ecdsa.sign(ECKey.curve, hash, this.d)
10845 }
10846
10847 module.exports = ECKey
10848
10849 }).call(this,require("buffer").Buffer)
10850 },{"./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){
10851 (function (Buffer){
10852 var crypto = require('./crypto')
10853 var ecdsa = require('./ecdsa')
10854 var typeForce = require('typeforce')
10855 var networks = require('./networks')
10856
10857 var Address = require('./address')
10858
10859 var ecurve = require('ecurve')
10860 var secp256k1 = ecurve.getCurveByName('secp256k1')
10861
10862 function ECPubKey (Q, compressed) {
10863 if (compressed === undefined) {
10864 compressed = true
10865 }
10866
10867 typeForce('Point', Q)
10868 typeForce('Boolean', compressed)
10869
10870 this.compressed = compressed
10871 this.Q = Q
10872 }
10873
10874 // Constants
10875 ECPubKey.curve = secp256k1
10876
10877 // Static constructors
10878 ECPubKey.fromBuffer = function (buffer) {
10879 var Q = ecurve.Point.decodeFrom(ECPubKey.curve, buffer)
10880 return new ECPubKey(Q, Q.compressed)
10881 }
10882
10883 ECPubKey.fromHex = function (hex) {
10884 return ECPubKey.fromBuffer(new Buffer(hex, 'hex'))
10885 }
10886
10887 // Operations
10888 ECPubKey.prototype.getAddress = function (network) {
10889 network = network || networks.bitcoin
10890
10891 return new Address(crypto.hash160(this.toBuffer()), network.pubKeyHash)
10892 }
10893
10894 ECPubKey.prototype.verify = function (hash, signature) {
10895 return ecdsa.verify(ECPubKey.curve, hash, signature, this.Q)
10896 }
10897
10898 // Export functions
10899 ECPubKey.prototype.toBuffer = function () {
10900 return this.Q.getEncoded(this.compressed)
10901 }
10902
10903 ECPubKey.prototype.toHex = function () {
10904 return this.toBuffer().toString('hex')
10905 }
10906
10907 module.exports = ECPubKey
10908
10909 }).call(this,require("buffer").Buffer)
10910 },{"./address":54,"./crypto":58,"./ecdsa":59,"./networks":66,"buffer":7,"ecurve":49,"typeforce":53}],62:[function(require,module,exports){
10911 (function (Buffer){
10912 var assert = require('assert')
10913 var typeForce = require('typeforce')
10914
10915 var BigInteger = require('bigi')
10916
10917 function ECSignature (r, s) {
10918 typeForce('BigInteger', r)
10919 typeForce('BigInteger', s)
10920
10921 this.r = r
10922 this.s = s
10923 }
10924
10925 ECSignature.parseCompact = function (buffer) {
10926 assert.equal(buffer.length, 65, 'Invalid signature length')
10927 var i = buffer.readUInt8(0) - 27
10928
10929 // At most 3 bits
10930 assert.equal(i, i & 7, 'Invalid signature parameter')
10931 var compressed = !!(i & 4)
10932
10933 // Recovery param only
10934 i = i & 3
10935
10936 var r = BigInteger.fromBuffer(buffer.slice(1, 33))
10937 var s = BigInteger.fromBuffer(buffer.slice(33))
10938
10939 return {
10940 compressed: compressed,
10941 i: i,
10942 signature: new ECSignature(r, s)
10943 }
10944 }
10945
10946 ECSignature.fromDER = function (buffer) {
10947 assert.equal(buffer.readUInt8(0), 0x30, 'Not a DER sequence')
10948 assert.equal(buffer.readUInt8(1), buffer.length - 2, 'Invalid sequence length')
10949 assert.equal(buffer.readUInt8(2), 0x02, 'Expected a DER integer')
10950
10951 var rLen = buffer.readUInt8(3)
10952 assert(rLen > 0, 'R length is zero')
10953
10954 var offset = 4 + rLen
10955 assert.equal(buffer.readUInt8(offset), 0x02, 'Expected a DER integer (2)')
10956
10957 var sLen = buffer.readUInt8(offset + 1)
10958 assert(sLen > 0, 'S length is zero')
10959
10960 var rB = buffer.slice(4, offset)
10961 var sB = buffer.slice(offset + 2)
10962 offset += 2 + sLen
10963
10964 if (rLen > 1 && rB.readUInt8(0) === 0x00) {
10965 assert(rB.readUInt8(1) & 0x80, 'R value excessively padded')
10966 }
10967
10968 if (sLen > 1 && sB.readUInt8(0) === 0x00) {
10969 assert(sB.readUInt8(1) & 0x80, 'S value excessively padded')
10970 }
10971
10972 assert.equal(offset, buffer.length, 'Invalid DER encoding')
10973 var r = BigInteger.fromDERInteger(rB)
10974 var s = BigInteger.fromDERInteger(sB)
10975
10976 assert(r.signum() >= 0, 'R value is negative')
10977 assert(s.signum() >= 0, 'S value is negative')
10978
10979 return new ECSignature(r, s)
10980 }
10981
10982 // BIP62: 1 byte hashType flag (only 0x01, 0x02, 0x03, 0x81, 0x82 and 0x83 are allowed)
10983 ECSignature.parseScriptSignature = function (buffer) {
10984 var hashType = buffer.readUInt8(buffer.length - 1)
10985 var hashTypeMod = hashType & ~0x80
10986
10987 assert(hashTypeMod > 0x00 && hashTypeMod < 0x04, 'Invalid hashType ' + hashType)
10988
10989 return {
10990 signature: ECSignature.fromDER(buffer.slice(0, -1)),
10991 hashType: hashType
10992 }
10993 }
10994
10995 ECSignature.prototype.toCompact = function (i, compressed) {
10996 if (compressed) {
10997 i += 4
10998 }
10999
11000 i += 27
11001
11002 var buffer = new Buffer(65)
11003 buffer.writeUInt8(i, 0)
11004
11005 this.r.toBuffer(32).copy(buffer, 1)
11006 this.s.toBuffer(32).copy(buffer, 33)
11007
11008 return buffer
11009 }
11010
11011 ECSignature.prototype.toDER = function () {
11012 var rBa = this.r.toDERInteger()
11013 var sBa = this.s.toDERInteger()
11014
11015 var sequence = []
11016
11017 // INTEGER
11018 sequence.push(0x02, rBa.length)
11019 sequence = sequence.concat(rBa)
11020
11021 // INTEGER
11022 sequence.push(0x02, sBa.length)
11023 sequence = sequence.concat(sBa)
11024
11025 // SEQUENCE
11026 sequence.unshift(0x30, sequence.length)
11027
11028 return new Buffer(sequence)
11029 }
11030
11031 ECSignature.prototype.toScriptSignature = function (hashType) {
11032 var hashTypeMod = hashType & ~0x80
11033 assert(hashTypeMod > 0x00 && hashTypeMod < 0x04, 'Invalid hashType ' + hashType)
11034
11035 var hashTypeBuffer = new Buffer(1)
11036 hashTypeBuffer.writeUInt8(hashType, 0)
11037
11038 return Buffer.concat([this.toDER(), hashTypeBuffer])
11039 }
11040
11041 module.exports = ECSignature
11042
11043 }).call(this,require("buffer").Buffer)
11044 },{"assert":5,"bigi":3,"buffer":7,"typeforce":53}],63:[function(require,module,exports){
11045 (function (Buffer){
11046 var assert = require('assert')
11047 var base58check = require('bs58check')
11048 var bcrypto = require('./crypto')
11049 var createHmac = require('create-hmac')
11050 var typeForce = require('typeforce')
11051 var networks = require('./networks')
11052
11053 var BigInteger = require('bigi')
11054 var ECKey = require('./eckey')
11055 var ECPubKey = require('./ecpubkey')
11056
11057 var ecurve = require('ecurve')
11058 var curve = ecurve.getCurveByName('secp256k1')
11059
11060 function findBIP32NetworkByVersion (version) {
11061 for (var name in networks) {
11062 var network = networks[name]
11063
11064 if (version === network.bip32.private || version === network.bip32.public) {
11065 return network
11066 }
11067 }
11068
11069 assert(false, 'Could not find network for ' + version.toString(16))
11070 }
11071
11072 function HDNode (K, chainCode, network) {
11073 network = network || networks.bitcoin
11074
11075 typeForce('Buffer', chainCode)
11076
11077 assert.equal(chainCode.length, 32, 'Expected chainCode length of 32, got ' + chainCode.length)
11078 assert(network.bip32, 'Unknown BIP32 constants for network')
11079
11080 this.chainCode = chainCode
11081 this.depth = 0
11082 this.index = 0
11083 this.parentFingerprint = 0x00000000
11084 this.network = network
11085
11086 if (K instanceof BigInteger) {
11087 this.privKey = new ECKey(K, true)
11088 this.pubKey = this.privKey.pub
11089 } else if (K instanceof ECKey) {
11090 assert(K.pub.compressed, 'ECKey must be compressed')
11091 this.privKey = K
11092 this.pubKey = K.pub
11093 } else if (K instanceof ECPubKey) {
11094 assert(K.compressed, 'ECPubKey must be compressed')
11095 this.pubKey = K
11096 } else {
11097 this.pubKey = new ECPubKey(K, true)
11098 }
11099 }
11100
11101 HDNode.MASTER_SECRET = new Buffer('Bitcoin seed')
11102 HDNode.HIGHEST_BIT = 0x80000000
11103 HDNode.LENGTH = 78
11104
11105 HDNode.fromSeedBuffer = function (seed, network) {
11106 typeForce('Buffer', seed)
11107
11108 assert(seed.length >= 16, 'Seed should be at least 128 bits')
11109 assert(seed.length <= 64, 'Seed should be at most 512 bits')
11110
11111 var I = createHmac('sha512', HDNode.MASTER_SECRET).update(seed).digest()
11112 var IL = I.slice(0, 32)
11113 var IR = I.slice(32)
11114
11115 // In case IL is 0 or >= n, the master key is invalid
11116 // This is handled by `new ECKey` in the HDNode constructor
11117 var pIL = BigInteger.fromBuffer(IL)
11118
11119 return new HDNode(pIL, IR, network)
11120 }
11121
11122 HDNode.fromSeedHex = function (hex, network) {
11123 return HDNode.fromSeedBuffer(new Buffer(hex, 'hex'), network)
11124 }
11125
11126 HDNode.fromBase58 = function (string, network) {
11127 return HDNode.fromBuffer(base58check.decode(string), network, true)
11128 }
11129
11130 // FIXME: remove in 2.x.y
11131 HDNode.fromBuffer = function (buffer, network, __ignoreDeprecation) {
11132 if (!__ignoreDeprecation) {
11133 console.warn('HDNode.fromBuffer() is deprecated for removal in 2.x.y, use fromBase58 instead')
11134 }
11135
11136 assert.strictEqual(buffer.length, HDNode.LENGTH, 'Invalid buffer length')
11137
11138 // 4 byte: version bytes
11139 var version = buffer.readUInt32BE(0)
11140
11141 if (network) {
11142 assert(version === network.bip32.private || version === network.bip32.public, "Network doesn't match")
11143
11144 // auto-detect
11145 } else {
11146 network = findBIP32NetworkByVersion(version)
11147 }
11148
11149 // 1 byte: depth: 0x00 for master nodes, 0x01 for level-1 descendants, ...
11150 var depth = buffer.readUInt8(4)
11151
11152 // 4 bytes: the fingerprint of the parent's key (0x00000000 if master key)
11153 var parentFingerprint = buffer.readUInt32BE(5)
11154 if (depth === 0) {
11155 assert.strictEqual(parentFingerprint, 0x00000000, 'Invalid parent fingerprint')
11156 }
11157
11158 // 4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
11159 // This is encoded in MSB order. (0x00000000 if master key)
11160 var index = buffer.readUInt32BE(9)
11161 assert(depth > 0 || index === 0, 'Invalid index')
11162
11163 // 32 bytes: the chain code
11164 var chainCode = buffer.slice(13, 45)
11165 var data, hd
11166
11167 // 33 bytes: private key data (0x00 + k)
11168 if (version === network.bip32.private) {
11169 assert.strictEqual(buffer.readUInt8(45), 0x00, 'Invalid private key')
11170 data = buffer.slice(46, 78)
11171 var d = BigInteger.fromBuffer(data)
11172 hd = new HDNode(d, chainCode, network)
11173
11174 // 33 bytes: public key data (0x02 + X or 0x03 + X)
11175 } else {
11176 data = buffer.slice(45, 78)
11177 var Q = ecurve.Point.decodeFrom(curve, data)
11178 assert.equal(Q.compressed, true, 'Invalid public key')
11179
11180 // Verify that the X coordinate in the public point corresponds to a point on the curve.
11181 // If not, the extended public key is invalid.
11182 curve.validate(Q)
11183
11184 hd = new HDNode(Q, chainCode, network)
11185 }
11186
11187 hd.depth = depth
11188 hd.index = index
11189 hd.parentFingerprint = parentFingerprint
11190
11191 return hd
11192 }
11193
11194 // FIXME: remove in 2.x.y
11195 HDNode.fromHex = function (hex, network) {
11196 return HDNode.fromBuffer(new Buffer(hex, 'hex'), network)
11197 }
11198
11199 HDNode.prototype.getIdentifier = function () {
11200 return bcrypto.hash160(this.pubKey.toBuffer())
11201 }
11202
11203 HDNode.prototype.getFingerprint = function () {
11204 return this.getIdentifier().slice(0, 4)
11205 }
11206
11207 HDNode.prototype.getAddress = function () {
11208 return this.pubKey.getAddress(this.network)
11209 }
11210
11211 HDNode.prototype.neutered = function () {
11212 var neutered = new HDNode(this.pubKey.Q, this.chainCode, this.network)
11213 neutered.depth = this.depth
11214 neutered.index = this.index
11215 neutered.parentFingerprint = this.parentFingerprint
11216
11217 return neutered
11218 }
11219
11220 HDNode.prototype.toBase58 = function (isPrivate) {
11221 return base58check.encode(this.toBuffer(isPrivate, true))
11222 }
11223
11224 // FIXME: remove in 2.x.y
11225 HDNode.prototype.toBuffer = function (isPrivate, __ignoreDeprecation) {
11226 if (isPrivate === undefined) {
11227 isPrivate = !!this.privKey
11228
11229 // FIXME: remove in 2.x.y
11230 } else {
11231 console.warn('isPrivate flag is deprecated, please use the .neutered() method instead')
11232 }
11233
11234 if (!__ignoreDeprecation) {
11235 console.warn('HDNode.toBuffer() is deprecated for removal in 2.x.y, use toBase58 instead')
11236 }
11237
11238 // Version
11239 var version = isPrivate ? this.network.bip32.private : this.network.bip32.public
11240 var buffer = new Buffer(HDNode.LENGTH)
11241
11242 // 4 bytes: version bytes
11243 buffer.writeUInt32BE(version, 0)
11244
11245 // Depth
11246 // 1 byte: depth: 0x00 for master nodes, 0x01 for level-1 descendants, ....
11247 buffer.writeUInt8(this.depth, 4)
11248
11249 // 4 bytes: the fingerprint of the parent's key (0x00000000 if master key)
11250 buffer.writeUInt32BE(this.parentFingerprint, 5)
11251
11252 // 4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
11253 // This is encoded in Big endian. (0x00000000 if master key)
11254 buffer.writeUInt32BE(this.index, 9)
11255
11256 // 32 bytes: the chain code
11257 this.chainCode.copy(buffer, 13)
11258
11259 // 33 bytes: the public key or private key data
11260 if (isPrivate) {
11261 // FIXME: remove in 2.x.y
11262 assert(this.privKey, 'Missing private key')
11263
11264 // 0x00 + k for private keys
11265 buffer.writeUInt8(0, 45)
11266 this.privKey.d.toBuffer(32).copy(buffer, 46)
11267 } else {
11268 // X9.62 encoding for public keys
11269 this.pubKey.toBuffer().copy(buffer, 45)
11270 }
11271
11272 return buffer
11273 }
11274
11275 // FIXME: remove in 2.x.y
11276 HDNode.prototype.toHex = function (isPrivate) {
11277 return this.toBuffer(isPrivate).toString('hex')
11278 }
11279
11280 // https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#child-key-derivation-ckd-functions
11281 HDNode.prototype.derive = function (index) {
11282 var isHardened = index >= HDNode.HIGHEST_BIT
11283 var indexBuffer = new Buffer(4)
11284 indexBuffer.writeUInt32BE(index, 0)
11285
11286 var data
11287
11288 // Hardened child
11289 if (isHardened) {
11290 assert(this.privKey, 'Could not derive hardened child key')
11291
11292 // data = 0x00 || ser256(kpar) || ser32(index)
11293 data = Buffer.concat([
11294 this.privKey.d.toBuffer(33),
11295 indexBuffer
11296 ])
11297
11298 // Normal child
11299 } else {
11300 // data = serP(point(kpar)) || ser32(index)
11301 // = serP(Kpar) || ser32(index)
11302 data = Buffer.concat([
11303 this.pubKey.toBuffer(),
11304 indexBuffer
11305 ])
11306 }
11307
11308 var I = createHmac('sha512', this.chainCode).update(data).digest()
11309 var IL = I.slice(0, 32)
11310 var IR = I.slice(32)
11311
11312 var pIL = BigInteger.fromBuffer(IL)
11313
11314 // In case parse256(IL) >= n, proceed with the next value for i
11315 if (pIL.compareTo(curve.n) >= 0) {
11316 return this.derive(index + 1)
11317 }
11318
11319 // Private parent key -> private child key
11320 var hd
11321 if (this.privKey) {
11322 // ki = parse256(IL) + kpar (mod n)
11323 var ki = pIL.add(this.privKey.d).mod(curve.n)
11324
11325 // In case ki == 0, proceed with the next value for i
11326 if (ki.signum() === 0) {
11327 return this.derive(index + 1)
11328 }
11329
11330 hd = new HDNode(ki, IR, this.network)
11331
11332 // Public parent key -> public child key
11333 } else {
11334 // Ki = point(parse256(IL)) + Kpar
11335 // = G*IL + Kpar
11336 var Ki = curve.G.multiply(pIL).add(this.pubKey.Q)
11337
11338 // In case Ki is the point at infinity, proceed with the next value for i
11339 if (curve.isInfinity(Ki)) {
11340 return this.derive(index + 1)
11341 }
11342
11343 hd = new HDNode(Ki, IR, this.network)
11344 }
11345
11346 hd.depth = this.depth + 1
11347 hd.index = index
11348 hd.parentFingerprint = this.getFingerprint().readUInt32BE(0)
11349
11350 return hd
11351 }
11352
11353 HDNode.prototype.deriveHardened = function (index) {
11354 // Only derives hardened private keys by default
11355 return this.derive(index + HDNode.HIGHEST_BIT)
11356 }
11357
11358 HDNode.prototype.toString = HDNode.prototype.toBase58
11359
11360 module.exports = HDNode
11361
11362 }).call(this,require("buffer").Buffer)
11363 },{"./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){
11364 module.exports = {
11365 Address: require('./address'),
11366 base58check: require('./base58check'),
11367 Block: require('./block'),
11368 bufferutils: require('./bufferutils'),
11369 crypto: require('./crypto'),
11370 ecdsa: require('./ecdsa'),
11371 ECKey: require('./eckey'),
11372 ECPubKey: require('./ecpubkey'),
11373 ECSignature: require('./ecsignature'),
11374 Message: require('./message'),
11375 opcodes: require('./opcodes'),
11376 HDNode: require('./hdnode'),
11377 Script: require('./script'),
11378 scripts: require('./scripts'),
11379 Transaction: require('./transaction'),
11380 TransactionBuilder: require('./transaction_builder'),
11381 networks: require('./networks'),
11382 Wallet: require('./wallet')
11383 }
11384
11385 },{"./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){
11386 (function (Buffer){
11387 var bufferutils = require('./bufferutils')
11388 var crypto = require('./crypto')
11389 var ecdsa = require('./ecdsa')
11390 var networks = require('./networks')
11391
11392 var BigInteger = require('bigi')
11393 var ECPubKey = require('./ecpubkey')
11394 var ECSignature = require('./ecsignature')
11395
11396 var ecurve = require('ecurve')
11397 var ecparams = ecurve.getCurveByName('secp256k1')
11398
11399 function magicHash (message, network) {
11400 var magicPrefix = new Buffer(network.magicPrefix)
11401 var messageBuffer = new Buffer(message)
11402 var lengthBuffer = bufferutils.varIntBuffer(messageBuffer.length)
11403
11404 var buffer = Buffer.concat([magicPrefix, lengthBuffer, messageBuffer])
11405 return crypto.hash256(buffer)
11406 }
11407
11408 function sign (privKey, message, network) {
11409 network = network || networks.bitcoin
11410
11411 var hash = magicHash(message, network)
11412 var signature = privKey.sign(hash)
11413 var e = BigInteger.fromBuffer(hash)
11414 var i = ecdsa.calcPubKeyRecoveryParam(ecparams, e, signature, privKey.pub.Q)
11415
11416 return signature.toCompact(i, privKey.pub.compressed)
11417 }
11418
11419 // TODO: network could be implied from address
11420 function verify (address, signature, message, network) {
11421 if (!Buffer.isBuffer(signature)) {
11422 signature = new Buffer(signature, 'base64')
11423 }
11424
11425 network = network || networks.bitcoin
11426
11427 var hash = magicHash(message, network)
11428 var parsed = ECSignature.parseCompact(signature)
11429 var e = BigInteger.fromBuffer(hash)
11430 var Q = ecdsa.recoverPubKey(ecparams, e, parsed.signature, parsed.i)
11431
11432 var pubKey = new ECPubKey(Q, parsed.compressed)
11433 return pubKey.getAddress(network).toString() === address.toString()
11434 }
11435
11436 module.exports = {
11437 magicHash: magicHash,
11438 sign: sign,
11439 verify: verify
11440 }
11441
11442 }).call(this,require("buffer").Buffer)
11443 },{"./bufferutils":57,"./crypto":58,"./ecdsa":59,"./ecpubkey":61,"./ecsignature":62,"./networks":66,"bigi":3,"buffer":7,"ecurve":49}],66:[function(require,module,exports){
11444 // https://en.bitcoin.it/wiki/List_of_address_prefixes
11445 // Dogecoin BIP32 is a proposed standard: https://bitcointalk.org/index.php?topic=409731
11446
11447 var networks = {
11448 bitcoin: {
11449 magicPrefix: '\x18Bitcoin Signed Message:\n',
11450 bip32: {
11451 public: 0x0488b21e,
11452 private: 0x0488ade4
11453 },
11454 pubKeyHash: 0x00,
11455 scriptHash: 0x05,
11456 wif: 0x80,
11457 dustThreshold: 546, // https://github.com/bitcoin/bitcoin/blob/v0.9.2/src/core.h#L151-L162
11458 feePerKb: 10000, // https://github.com/bitcoin/bitcoin/blob/v0.9.2/src/main.cpp#L53
11459 estimateFee: estimateFee('bitcoin')
11460 },
11461 testnet: {
11462 magicPrefix: '\x18Bitcoin Signed Message:\n',
11463 bip32: {
11464 public: 0x043587cf,
11465 private: 0x04358394
11466 },
11467 pubKeyHash: 0x6f,
11468 scriptHash: 0xc4,
11469 wif: 0xef,
11470 dustThreshold: 546,
11471 feePerKb: 10000,
11472 estimateFee: estimateFee('testnet')
11473 },
11474 litecoin: {
11475 magicPrefix: '\x19Litecoin Signed Message:\n',
11476 bip32: {
11477 public: 0x019da462,
11478 private: 0x019d9cfe
11479 },
11480 pubKeyHash: 0x30,
11481 scriptHash: 0x05,
11482 wif: 0xb0,
11483 dustThreshold: 0, // https://github.com/litecoin-project/litecoin/blob/v0.8.7.2/src/main.cpp#L360-L365
11484 dustSoftThreshold: 100000, // https://github.com/litecoin-project/litecoin/blob/v0.8.7.2/src/main.h#L53
11485 feePerKb: 100000, // https://github.com/litecoin-project/litecoin/blob/v0.8.7.2/src/main.cpp#L56
11486 estimateFee: estimateFee('litecoin')
11487 },
11488 dogecoin: {
11489 magicPrefix: '\x19Dogecoin Signed Message:\n',
11490 bip32: {
11491 public: 0x02facafd,
11492 private: 0x02fac398
11493 },
11494 pubKeyHash: 0x1e,
11495 scriptHash: 0x16,
11496 wif: 0x9e,
11497 dustThreshold: 0, // https://github.com/dogecoin/dogecoin/blob/v1.7.1/src/core.h#L155-L160
11498 dustSoftThreshold: 100000000, // https://github.com/dogecoin/dogecoin/blob/v1.7.1/src/main.h#L62
11499 feePerKb: 100000000, // https://github.com/dogecoin/dogecoin/blob/v1.7.1/src/main.cpp#L58
11500 estimateFee: estimateFee('dogecoin')
11501 },
11502 viacoin: {
11503 magicPrefix: '\x18Viacoin Signed Message:\n',
11504 bip32: {
11505 public: 0x0488b21e,
11506 private: 0x0488ade4
11507 },
11508 pubKeyHash: 0x47,
11509 scriptHash: 0x21,
11510 wif: 0xc7,
11511 dustThreshold: 560,
11512 dustSoftThreshold: 100000,
11513 feePerKb: 100000, //
11514 estimateFee: estimateFee('viacoin')
11515 },
11516 viacointestnet: {
11517 magicPrefix: '\x18Viacoin Signed Message:\n',
11518 bip32: {
11519 public: 0x043587cf,
11520 private: 0x04358394
11521 },
11522 pubKeyHash: 0x7f,
11523 scriptHash: 0xc4,
11524 wif: 0xff,
11525 dustThreshold: 560,
11526 dustSoftThreshold: 100000,
11527 feePerKb: 100000,
11528 estimateFee: estimateFee('viacointestnet')
11529 },
11530 gamerscoin: {
11531 magicPrefix: '\x19Gamerscoin Signed Message:\n',
11532 bip32: {
11533 public: 0x019da462,
11534 private: 0x019d9cfe
11535 },
11536 pubKeyHash: 0x26,
11537 scriptHash: 0x05,
11538 wif: 0xA6,
11539 dustThreshold: 0, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L358-L363
11540 dustSoftThreshold: 100000, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L51
11541 feePerKb: 100000, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L54
11542 estimateFee: estimateFee('gamerscoin')
11543 },
11544 jumbucks: {
11545 magicPrefix: '\x19Jumbucks Signed Message:\n',
11546 bip32: {
11547 public: 0x037a689a,
11548 private: 0x037a6460
11549 },
11550 pubKeyHash: 0x2b,
11551 scriptHash: 0x05,
11552 wif: 0xab,
11553 dustThreshold: 0,
11554 dustSoftThreshold: 10000,
11555 feePerKb: 10000,
11556 estimateFee: estimateFee('jumbucks')
11557 },
11558 zetacoin: {
11559 magicPrefix: '\x18Zetacoin Signed Message:\n',
11560 bip32: {
11561 public: 0x0488b21e,
11562 private: 0x0488ade4
11563 },
11564 pubKeyHash: 0x50,
11565 scriptHash: 0x09,
11566 wif: 0xe0,
11567 dustThreshold: 546, // https://github.com/zetacoin/zetacoin/blob/master/src/core.h#L159
11568 feePerKb: 10000, // https://github.com/zetacoin/zetacoin/blob/master/src/main.cpp#L54
11569 estimateFee: estimateFee('zetacoin')
11570 }
11571 }
11572
11573 function estimateFee (type) {
11574 return function (tx) {
11575 var network = networks[type]
11576 var baseFee = network.feePerKb
11577 var byteSize = tx.toBuffer().length
11578
11579 var fee = baseFee * Math.ceil(byteSize / 1000)
11580 if (network.dustSoftThreshold === undefined) return fee
11581
11582 tx.outs.forEach(function (e) {
11583 if (e.value < network.dustSoftThreshold) {
11584 fee += baseFee
11585 }
11586 })
11587
11588 return fee
11589 }
11590 }
11591
11592 module.exports = networks
11593
11594 },{}],67:[function(require,module,exports){
11595 module.exports = {
11596 // push value
11597 OP_FALSE: 0,
11598 OP_0: 0,
11599 OP_PUSHDATA1: 76,
11600 OP_PUSHDATA2: 77,
11601 OP_PUSHDATA4: 78,
11602 OP_1NEGATE: 79,
11603 OP_RESERVED: 80,
11604 OP_1: 81,
11605 OP_TRUE: 81,
11606 OP_2: 82,
11607 OP_3: 83,
11608 OP_4: 84,
11609 OP_5: 85,
11610 OP_6: 86,
11611 OP_7: 87,
11612 OP_8: 88,
11613 OP_9: 89,
11614 OP_10: 90,
11615 OP_11: 91,
11616 OP_12: 92,
11617 OP_13: 93,
11618 OP_14: 94,
11619 OP_15: 95,
11620 OP_16: 96,
11621
11622 // control
11623 OP_NOP: 97,
11624 OP_VER: 98,
11625 OP_IF: 99,
11626 OP_NOTIF: 100,
11627 OP_VERIF: 101,
11628 OP_VERNOTIF: 102,
11629 OP_ELSE: 103,
11630 OP_ENDIF: 104,
11631 OP_VERIFY: 105,
11632 OP_RETURN: 106,
11633
11634 // stack ops
11635 OP_TOALTSTACK: 107,
11636 OP_FROMALTSTACK: 108,
11637 OP_2DROP: 109,
11638 OP_2DUP: 110,
11639 OP_3DUP: 111,
11640 OP_2OVER: 112,
11641 OP_2ROT: 113,
11642 OP_2SWAP: 114,
11643 OP_IFDUP: 115,
11644 OP_DEPTH: 116,
11645 OP_DROP: 117,
11646 OP_DUP: 118,
11647 OP_NIP: 119,
11648 OP_OVER: 120,
11649 OP_PICK: 121,
11650 OP_ROLL: 122,
11651 OP_ROT: 123,
11652 OP_SWAP: 124,
11653 OP_TUCK: 125,
11654
11655 // splice ops
11656 OP_CAT: 126,
11657 OP_SUBSTR: 127,
11658 OP_LEFT: 128,
11659 OP_RIGHT: 129,
11660 OP_SIZE: 130,
11661
11662 // bit logic
11663 OP_INVERT: 131,
11664 OP_AND: 132,
11665 OP_OR: 133,
11666 OP_XOR: 134,
11667 OP_EQUAL: 135,
11668 OP_EQUALVERIFY: 136,
11669 OP_RESERVED1: 137,
11670 OP_RESERVED2: 138,
11671
11672 // numeric
11673 OP_1ADD: 139,
11674 OP_1SUB: 140,
11675 OP_2MUL: 141,
11676 OP_2DIV: 142,
11677 OP_NEGATE: 143,
11678 OP_ABS: 144,
11679 OP_NOT: 145,
11680 OP_0NOTEQUAL: 146,
11681
11682 OP_ADD: 147,
11683 OP_SUB: 148,
11684 OP_MUL: 149,
11685 OP_DIV: 150,
11686 OP_MOD: 151,
11687 OP_LSHIFT: 152,
11688 OP_RSHIFT: 153,
11689
11690 OP_BOOLAND: 154,
11691 OP_BOOLOR: 155,
11692 OP_NUMEQUAL: 156,
11693 OP_NUMEQUALVERIFY: 157,
11694 OP_NUMNOTEQUAL: 158,
11695 OP_LESSTHAN: 159,
11696 OP_GREATERTHAN: 160,
11697 OP_LESSTHANOREQUAL: 161,
11698 OP_GREATERTHANOREQUAL: 162,
11699 OP_MIN: 163,
11700 OP_MAX: 164,
11701
11702 OP_WITHIN: 165,
11703
11704 // crypto
11705 OP_RIPEMD160: 166,
11706 OP_SHA1: 167,
11707 OP_SHA256: 168,
11708 OP_HASH160: 169,
11709 OP_HASH256: 170,
11710 OP_CODESEPARATOR: 171,
11711 OP_CHECKSIG: 172,
11712 OP_CHECKSIGVERIFY: 173,
11713 OP_CHECKMULTISIG: 174,
11714 OP_CHECKMULTISIGVERIFY: 175,
11715
11716 // expansion
11717 OP_NOP1: 176,
11718 OP_NOP2: 177,
11719 OP_NOP3: 178,
11720 OP_NOP4: 179,
11721 OP_NOP5: 180,
11722 OP_NOP6: 181,
11723 OP_NOP7: 182,
11724 OP_NOP8: 183,
11725 OP_NOP9: 184,
11726 OP_NOP10: 185,
11727
11728 // template matching params
11729 OP_PUBKEYHASH: 253,
11730 OP_PUBKEY: 254,
11731 OP_INVALIDOPCODE: 255
11732 }
11733
11734 },{}],68:[function(require,module,exports){
11735 (function (Buffer){
11736 var assert = require('assert')
11737 var bufferutils = require('./bufferutils')
11738 var crypto = require('./crypto')
11739 var typeForce = require('typeforce')
11740 var opcodes = require('./opcodes')
11741
11742 function Script (buffer, chunks) {
11743 typeForce('Buffer', buffer)
11744 typeForce('Array', chunks)
11745
11746 this.buffer = buffer
11747 this.chunks = chunks
11748 }
11749
11750 Script.fromASM = function (asm) {
11751 var strChunks = asm.split(' ')
11752 var chunks = strChunks.map(function (strChunk) {
11753 // opcode
11754 if (strChunk in opcodes) {
11755 return opcodes[strChunk]
11756
11757 // data chunk
11758 } else {
11759 return new Buffer(strChunk, 'hex')
11760 }
11761 })
11762
11763 return Script.fromChunks(chunks)
11764 }
11765
11766 Script.fromBuffer = function (buffer) {
11767 var chunks = []
11768 var i = 0
11769
11770 while (i < buffer.length) {
11771 var opcode = buffer.readUInt8(i)
11772
11773 // data chunk
11774 if ((opcode > opcodes.OP_0) && (opcode <= opcodes.OP_PUSHDATA4)) {
11775 var d = bufferutils.readPushDataInt(buffer, i)
11776
11777 // did reading a pushDataInt fail? return non-chunked script
11778 if (d === null) return new Script(buffer, [])
11779 i += d.size
11780
11781 // attempt to read too much data?
11782 if (i + d.number > buffer.length) return new Script(buffer, [])
11783
11784 var data = buffer.slice(i, i + d.number)
11785 i += d.number
11786
11787 chunks.push(data)
11788
11789 // opcode
11790 } else {
11791 chunks.push(opcode)
11792
11793 i += 1
11794 }
11795 }
11796
11797 return new Script(buffer, chunks)
11798 }
11799
11800 Script.fromChunks = function (chunks) {
11801 typeForce('Array', chunks)
11802
11803 var bufferSize = chunks.reduce(function (accum, chunk) {
11804 // data chunk
11805 if (Buffer.isBuffer(chunk)) {
11806 return accum + bufferutils.pushDataSize(chunk.length) + chunk.length
11807 }
11808
11809 // opcode
11810 return accum + 1
11811 }, 0.0)
11812
11813 var buffer = new Buffer(bufferSize)
11814 var offset = 0
11815
11816 chunks.forEach(function (chunk) {
11817 // data chunk
11818 if (Buffer.isBuffer(chunk)) {
11819 offset += bufferutils.writePushDataInt(buffer, chunk.length, offset)
11820
11821 chunk.copy(buffer, offset)
11822 offset += chunk.length
11823
11824 // opcode
11825 } else {
11826 buffer.writeUInt8(chunk, offset)
11827 offset += 1
11828 }
11829 })
11830
11831 assert.equal(offset, buffer.length, 'Could not decode chunks')
11832 return new Script(buffer, chunks)
11833 }
11834
11835 Script.fromHex = function (hex) {
11836 return Script.fromBuffer(new Buffer(hex, 'hex'))
11837 }
11838
11839 Script.EMPTY = Script.fromChunks([])
11840
11841 Script.prototype.getHash = function () {
11842 return crypto.hash160(this.buffer)
11843 }
11844
11845 // FIXME: doesn't work for data chunks, maybe time to use buffertools.compare...
11846 Script.prototype.without = function (needle) {
11847 return Script.fromChunks(this.chunks.filter(function (op) {
11848 return op !== needle
11849 }))
11850 }
11851
11852 var reverseOps = []
11853 for (var op in opcodes) {
11854 var code = opcodes[op]
11855 reverseOps[code] = op
11856 }
11857
11858 Script.prototype.toASM = function () {
11859 return this.chunks.map(function (chunk) {
11860 // data chunk
11861 if (Buffer.isBuffer(chunk)) {
11862 return chunk.toString('hex')
11863
11864 // opcode
11865 } else {
11866 return reverseOps[chunk]
11867 }
11868 }).join(' ')
11869 }
11870
11871 Script.prototype.toBuffer = function () {
11872 return this.buffer
11873 }
11874
11875 Script.prototype.toHex = function () {
11876 return this.toBuffer().toString('hex')
11877 }
11878
11879 module.exports = Script
11880
11881 }).call(this,require("buffer").Buffer)
11882 },{"./bufferutils":57,"./crypto":58,"./opcodes":67,"assert":5,"buffer":7,"typeforce":53}],69:[function(require,module,exports){
11883 (function (Buffer){
11884 var assert = require('assert')
11885 var ops = require('./opcodes')
11886 var typeForce = require('typeforce')
11887
11888 var ecurve = require('ecurve')
11889 var curve = ecurve.getCurveByName('secp256k1')
11890
11891 var ECSignature = require('./ecsignature')
11892 var Script = require('./script')
11893
11894 function isCanonicalPubKey (buffer) {
11895 if (!Buffer.isBuffer(buffer)) return false
11896
11897 try {
11898 ecurve.Point.decodeFrom(curve, buffer)
11899 } catch (e) {
11900 if (!(e.message.match(/Invalid sequence (length|tag)/)))
11901 throw e
11902
11903 return false
11904 }
11905
11906 return true
11907 }
11908
11909 function isCanonicalSignature (buffer) {
11910 if (!Buffer.isBuffer(buffer)) return false
11911
11912 try {
11913 ECSignature.parseScriptSignature(buffer)
11914 } catch (e) {
11915 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/))) {
11916 throw e
11917 }
11918
11919 return false
11920 }
11921
11922 return true
11923 }
11924
11925 function isPubKeyHashInput (script) {
11926 return script.chunks.length === 2 &&
11927 isCanonicalSignature(script.chunks[0]) &&
11928 isCanonicalPubKey(script.chunks[1])
11929 }
11930
11931 function isPubKeyHashOutput (script) {
11932 return script.chunks.length === 5 &&
11933 script.chunks[0] === ops.OP_DUP &&
11934 script.chunks[1] === ops.OP_HASH160 &&
11935 Buffer.isBuffer(script.chunks[2]) &&
11936 script.chunks[2].length === 20 &&
11937 script.chunks[3] === ops.OP_EQUALVERIFY &&
11938 script.chunks[4] === ops.OP_CHECKSIG
11939 }
11940
11941 function isPubKeyInput (script) {
11942 return script.chunks.length === 1 &&
11943 isCanonicalSignature(script.chunks[0])
11944 }
11945
11946 function isPubKeyOutput (script) {
11947 return script.chunks.length === 2 &&
11948 isCanonicalPubKey(script.chunks[0]) &&
11949 script.chunks[1] === ops.OP_CHECKSIG
11950 }
11951
11952 function isScriptHashInput (script, allowIncomplete) {
11953 if (script.chunks.length < 2) return false
11954
11955 var lastChunk = script.chunks[script.chunks.length - 1]
11956 if (!Buffer.isBuffer(lastChunk)) return false
11957
11958 var scriptSig = Script.fromChunks(script.chunks.slice(0, -1))
11959 var redeemScript = Script.fromBuffer(lastChunk)
11960
11961 // is redeemScript a valid script?
11962 if (redeemScript.chunks.length === 0) return false
11963
11964 return classifyInput(scriptSig, allowIncomplete) === classifyOutput(redeemScript)
11965 }
11966
11967 function isScriptHashOutput (script) {
11968 return script.chunks.length === 3 &&
11969 script.chunks[0] === ops.OP_HASH160 &&
11970 Buffer.isBuffer(script.chunks[1]) &&
11971 script.chunks[1].length === 20 &&
11972 script.chunks[2] === ops.OP_EQUAL
11973 }
11974
11975 // allowIncomplete is to account for combining signatures
11976 // See https://github.com/bitcoin/bitcoin/blob/f425050546644a36b0b8e0eb2f6934a3e0f6f80f/src/script/sign.cpp#L195-L197
11977 function isMultisigInput (script, allowIncomplete) {
11978 if (script.chunks.length < 2) return false
11979 if (script.chunks[0] !== ops.OP_0) return false
11980
11981 if (allowIncomplete) {
11982 return script.chunks.slice(1).every(function (chunk) {
11983 return chunk === ops.OP_0 || isCanonicalSignature(chunk)
11984 })
11985 }
11986
11987 return script.chunks.slice(1).every(isCanonicalSignature)
11988 }
11989
11990 function isMultisigOutput (script) {
11991 if (script.chunks.length < 4) return false
11992 if (script.chunks[script.chunks.length - 1] !== ops.OP_CHECKMULTISIG) return false
11993
11994 var mOp = script.chunks[0]
11995 if (mOp === ops.OP_0) return false
11996 if (mOp < ops.OP_1) return false
11997 if (mOp > ops.OP_16) return false
11998
11999 var nOp = script.chunks[script.chunks.length - 2]
12000 if (nOp === ops.OP_0) return false
12001 if (nOp < ops.OP_1) return false
12002 if (nOp > ops.OP_16) return false
12003
12004 var m = mOp - (ops.OP_1 - 1)
12005 var n = nOp - (ops.OP_1 - 1)
12006 if (n < m) return false
12007
12008 var pubKeys = script.chunks.slice(1, -2)
12009 if (n < pubKeys.length) return false
12010
12011 return pubKeys.every(isCanonicalPubKey)
12012 }
12013
12014 function isNullDataOutput (script) {
12015 return script.chunks[0] === ops.OP_RETURN
12016 }
12017
12018 function classifyOutput (script) {
12019 typeForce('Script', script)
12020
12021 if (isPubKeyHashOutput(script)) {
12022 return 'pubkeyhash'
12023 } else if (isScriptHashOutput(script)) {
12024 return 'scripthash'
12025 } else if (isMultisigOutput(script)) {
12026 return 'multisig'
12027 } else if (isPubKeyOutput(script)) {
12028 return 'pubkey'
12029 } else if (isNullDataOutput(script)) {
12030 return 'nulldata'
12031 }
12032
12033 return 'nonstandard'
12034 }
12035
12036 function classifyInput (script, allowIncomplete) {
12037 typeForce('Script', script)
12038
12039 if (isPubKeyHashInput(script)) {
12040 return 'pubkeyhash'
12041 } else if (isMultisigInput(script, allowIncomplete)) {
12042 return 'multisig'
12043 } else if (isScriptHashInput(script, allowIncomplete)) {
12044 return 'scripthash'
12045 } else if (isPubKeyInput(script)) {
12046 return 'pubkey'
12047 }
12048
12049 return 'nonstandard'
12050 }
12051
12052 // Standard Script Templates
12053 // {pubKey} OP_CHECKSIG
12054 function pubKeyOutput (pubKey) {
12055 return Script.fromChunks([
12056 pubKey.toBuffer(),
12057 ops.OP_CHECKSIG
12058 ])
12059 }
12060
12061 // OP_DUP OP_HASH160 {pubKeyHash} OP_EQUALVERIFY OP_CHECKSIG
12062 function pubKeyHashOutput (hash) {
12063 typeForce('Buffer', hash)
12064
12065 return Script.fromChunks([
12066 ops.OP_DUP,
12067 ops.OP_HASH160,
12068 hash,
12069 ops.OP_EQUALVERIFY,
12070 ops.OP_CHECKSIG
12071 ])
12072 }
12073
12074 // OP_HASH160 {scriptHash} OP_EQUAL
12075 function scriptHashOutput (hash) {
12076 typeForce('Buffer', hash)
12077
12078 return Script.fromChunks([
12079 ops.OP_HASH160,
12080 hash,
12081 ops.OP_EQUAL
12082 ])
12083 }
12084
12085 // m [pubKeys ...] n OP_CHECKMULTISIG
12086 function multisigOutput (m, pubKeys) {
12087 typeForce(['ECPubKey'], pubKeys)
12088
12089 assert(pubKeys.length >= m, 'Not enough pubKeys provided')
12090
12091 var pubKeyBuffers = pubKeys.map(function (pubKey) {
12092 return pubKey.toBuffer()
12093 })
12094 var n = pubKeys.length
12095
12096 return Script.fromChunks([].concat(
12097 (ops.OP_1 - 1) + m,
12098 pubKeyBuffers,
12099 (ops.OP_1 - 1) + n,
12100 ops.OP_CHECKMULTISIG
12101 ))
12102 }
12103
12104 // {signature}
12105 function pubKeyInput (signature) {
12106 typeForce('Buffer', signature)
12107
12108 return Script.fromChunks([signature])
12109 }
12110
12111 // {signature} {pubKey}
12112 function pubKeyHashInput (signature, pubKey) {
12113 typeForce('Buffer', signature)
12114
12115 return Script.fromChunks([signature, pubKey.toBuffer()])
12116 }
12117
12118 // <scriptSig> {serialized scriptPubKey script}
12119 function scriptHashInput (scriptSig, scriptPubKey) {
12120 return Script.fromChunks([].concat(
12121 scriptSig.chunks,
12122 scriptPubKey.toBuffer()
12123 ))
12124 }
12125
12126 // OP_0 [signatures ...]
12127 function multisigInput (signatures, scriptPubKey) {
12128 if (scriptPubKey) {
12129 assert(isMultisigOutput(scriptPubKey))
12130
12131 var mOp = scriptPubKey.chunks[0]
12132 var nOp = scriptPubKey.chunks[scriptPubKey.chunks.length - 2]
12133 var m = mOp - (ops.OP_1 - 1)
12134 var n = nOp - (ops.OP_1 - 1)
12135
12136 assert(signatures.length >= m, 'Not enough signatures provided')
12137 assert(signatures.length <= n, 'Too many signatures provided')
12138 }
12139
12140 return Script.fromChunks([].concat(ops.OP_0, signatures))
12141 }
12142
12143 function nullDataOutput (data) {
12144 return Script.fromChunks([ops.OP_RETURN, data])
12145 }
12146
12147 module.exports = {
12148 isCanonicalPubKey: isCanonicalPubKey,
12149 isCanonicalSignature: isCanonicalSignature,
12150 isPubKeyHashInput: isPubKeyHashInput,
12151 isPubKeyHashOutput: isPubKeyHashOutput,
12152 isPubKeyInput: isPubKeyInput,
12153 isPubKeyOutput: isPubKeyOutput,
12154 isScriptHashInput: isScriptHashInput,
12155 isScriptHashOutput: isScriptHashOutput,
12156 isMultisigInput: isMultisigInput,
12157 isMultisigOutput: isMultisigOutput,
12158 isNullDataOutput: isNullDataOutput,
12159 classifyOutput: classifyOutput,
12160 classifyInput: classifyInput,
12161 pubKeyOutput: pubKeyOutput,
12162 pubKeyHashOutput: pubKeyHashOutput,
12163 scriptHashOutput: scriptHashOutput,
12164 multisigOutput: multisigOutput,
12165 pubKeyInput: pubKeyInput,
12166 pubKeyHashInput: pubKeyHashInput,
12167 scriptHashInput: scriptHashInput,
12168 multisigInput: multisigInput,
12169 dataOutput: function (data) {
12170 console.warn('dataOutput is deprecated, use nullDataOutput by 2.0.0')
12171 return nullDataOutput(data)
12172 },
12173 nullDataOutput: nullDataOutput
12174 }
12175
12176 }).call(this,require("buffer").Buffer)
12177 },{"./ecsignature":62,"./opcodes":67,"./script":68,"assert":5,"buffer":7,"ecurve":49,"typeforce":53}],70:[function(require,module,exports){
12178 (function (Buffer){
12179 var assert = require('assert')
12180 var bufferutils = require('./bufferutils')
12181 var crypto = require('./crypto')
12182 var typeForce = require('typeforce')
12183 var opcodes = require('./opcodes')
12184 var scripts = require('./scripts')
12185
12186 var Address = require('./address')
12187 var ECSignature = require('./ecsignature')
12188 var Script = require('./script')
12189
12190 function Transaction () {
12191 this.version = 1
12192 this.locktime = 0
12193 this.ins = []
12194 this.outs = []
12195 }
12196
12197 Transaction.DEFAULT_SEQUENCE = 0xffffffff
12198 Transaction.SIGHASH_ALL = 0x01
12199 Transaction.SIGHASH_NONE = 0x02
12200 Transaction.SIGHASH_SINGLE = 0x03
12201 Transaction.SIGHASH_ANYONECANPAY = 0x80
12202
12203 Transaction.fromBuffer = function (buffer, __disableAssert) {
12204 var offset = 0
12205 function readSlice (n) {
12206 offset += n
12207 return buffer.slice(offset - n, offset)
12208 }
12209
12210 function readUInt32 () {
12211 var i = buffer.readUInt32LE(offset)
12212 offset += 4
12213 return i
12214 }
12215
12216 function readUInt64 () {
12217 var i = bufferutils.readUInt64LE(buffer, offset)
12218 offset += 8
12219 return i
12220 }
12221
12222 function readVarInt () {
12223 var vi = bufferutils.readVarInt(buffer, offset)
12224 offset += vi.size
12225 return vi.number
12226 }
12227
12228 function readScript () {
12229 return Script.fromBuffer(readSlice(readVarInt()))
12230 }
12231
12232 function readGenerationScript () {
12233 return new Script(readSlice(readVarInt()), [])
12234 }
12235
12236 var tx = new Transaction()
12237 tx.version = readUInt32()
12238
12239 var vinLen = readVarInt()
12240 for (var i = 0; i < vinLen; ++i) {
12241 var hash = readSlice(32)
12242
12243 if (Transaction.isCoinbaseHash(hash)) {
12244 tx.ins.push({
12245 hash: hash,
12246 index: readUInt32(),
12247 script: readGenerationScript(),
12248 sequence: readUInt32()
12249 })
12250 } else {
12251 tx.ins.push({
12252 hash: hash,
12253 index: readUInt32(),
12254 script: readScript(),
12255 sequence: readUInt32()
12256 })
12257 }
12258 }
12259
12260 var voutLen = readVarInt()
12261 for (i = 0; i < voutLen; ++i) {
12262 tx.outs.push({
12263 value: readUInt64(),
12264 script: readScript()
12265 })
12266 }
12267
12268 tx.locktime = readUInt32()
12269
12270 if (!__disableAssert) {
12271 assert.equal(offset, buffer.length, 'Transaction has unexpected data')
12272 }
12273
12274 return tx
12275 }
12276
12277 Transaction.fromHex = function (hex) {
12278 return Transaction.fromBuffer(new Buffer(hex, 'hex'))
12279 }
12280
12281 Transaction.isCoinbaseHash = function (buffer) {
12282 return Array.prototype.every.call(buffer, function (x) {
12283 return x === 0
12284 })
12285 }
12286
12287 /**
12288 * Create a new txIn.
12289 *
12290 * Can be called with any of:
12291 *
12292 * - A transaction and an index
12293 * - A transaction hash and an index
12294 *
12295 * Note that this method does not sign the created input.
12296 */
12297 Transaction.prototype.addInput = function (hash, index, sequence, script) {
12298 if (sequence === undefined || sequence === null) {
12299 sequence = Transaction.DEFAULT_SEQUENCE
12300 }
12301
12302 script = script || Script.EMPTY
12303
12304 if (typeof hash === 'string') {
12305 // TxId hex is big-endian, we need little-endian
12306 hash = bufferutils.reverse(new Buffer(hash, 'hex'))
12307 } else if (hash instanceof Transaction) {
12308 hash = hash.getHash()
12309 }
12310
12311 typeForce('Buffer', hash)
12312 typeForce('Number', index)
12313 typeForce('Number', sequence)
12314 typeForce('Script', script)
12315
12316 assert.equal(hash.length, 32, 'Expected hash length of 32, got ' + hash.length)
12317
12318 // Add the input and return the input's index
12319 return (this.ins.push({
12320 hash: hash,
12321 index: index,
12322 script: script,
12323 sequence: sequence
12324 }) - 1)
12325 }
12326
12327 /**
12328 * Create a new txOut.
12329 *
12330 * Can be called with:
12331 *
12332 * - A base58 address string and a value
12333 * - An Address object and a value
12334 * - A scriptPubKey Script and a value
12335 */
12336 Transaction.prototype.addOutput = function (scriptPubKey, value) {
12337 // Attempt to get a valid address if it's a base58 address string
12338 if (typeof scriptPubKey === 'string') {
12339 scriptPubKey = Address.fromBase58Check(scriptPubKey)
12340 }
12341
12342 // Attempt to get a valid script if it's an Address object
12343 if (scriptPubKey instanceof Address) {
12344 scriptPubKey = scriptPubKey.toOutputScript()
12345 }
12346
12347 typeForce('Script', scriptPubKey)
12348 typeForce('Number', value)
12349
12350 // Add the output and return the output's index
12351 return (this.outs.push({
12352 script: scriptPubKey,
12353 value: value
12354 }) - 1)
12355 }
12356
12357 Transaction.prototype.clone = function () {
12358 var newTx = new Transaction()
12359 newTx.version = this.version
12360 newTx.locktime = this.locktime
12361
12362 newTx.ins = this.ins.map(function (txIn) {
12363 return {
12364 hash: txIn.hash,
12365 index: txIn.index,
12366 script: txIn.script,
12367 sequence: txIn.sequence
12368 }
12369 })
12370
12371 newTx.outs = this.outs.map(function (txOut) {
12372 return {
12373 script: txOut.script,
12374 value: txOut.value
12375 }
12376 })
12377
12378 return newTx
12379 }
12380
12381 /**
12382 * Hash transaction for signing a specific input.
12383 *
12384 * Bitcoin uses a different hash for each signed transaction input. This
12385 * method copies the transaction, makes the necessary changes based on the
12386 * hashType, serializes and finally hashes the result. This hash can then be
12387 * used to sign the transaction input in question.
12388 */
12389 Transaction.prototype.hashForSignature = function (inIndex, prevOutScript, hashType) {
12390 // FIXME: remove in 2.x.y
12391 if (arguments[0] instanceof Script) {
12392 console.warn('hashForSignature(prevOutScript, inIndex, ...) has been deprecated. Use hashForSignature(inIndex, prevOutScript, ...)')
12393
12394 // swap the arguments (must be stored in tmp, arguments is special)
12395 var tmp = arguments[0]
12396 inIndex = arguments[1]
12397 prevOutScript = tmp
12398 }
12399
12400 typeForce('Number', inIndex)
12401 typeForce('Script', prevOutScript)
12402 typeForce('Number', hashType)
12403
12404 assert(inIndex >= 0, 'Invalid vin index')
12405 assert(inIndex < this.ins.length, 'Invalid vin index')
12406
12407 var txTmp = this.clone()
12408 var hashScript = prevOutScript.without(opcodes.OP_CODESEPARATOR)
12409
12410 // Blank out other inputs' signatures
12411 txTmp.ins.forEach(function (txIn) {
12412 txIn.script = Script.EMPTY
12413 })
12414 txTmp.ins[inIndex].script = hashScript
12415
12416 var hashTypeModifier = hashType & 0x1f
12417
12418 if (hashTypeModifier === Transaction.SIGHASH_NONE) {
12419 assert(false, 'SIGHASH_NONE not yet supported')
12420 } else if (hashTypeModifier === Transaction.SIGHASH_SINGLE) {
12421 assert(false, 'SIGHASH_SINGLE not yet supported')
12422 }
12423
12424 if (hashType & Transaction.SIGHASH_ANYONECANPAY) {
12425 assert(false, 'SIGHASH_ANYONECANPAY not yet supported')
12426 }
12427
12428 var hashTypeBuffer = new Buffer(4)
12429 hashTypeBuffer.writeInt32LE(hashType, 0)
12430
12431 var buffer = Buffer.concat([txTmp.toBuffer(), hashTypeBuffer])
12432 return crypto.hash256(buffer)
12433 }
12434
12435 Transaction.prototype.getHash = function () {
12436 return crypto.hash256(this.toBuffer())
12437 }
12438
12439 Transaction.prototype.getId = function () {
12440 // TxHash is little-endian, we need big-endian
12441 return bufferutils.reverse(this.getHash()).toString('hex')
12442 }
12443
12444 Transaction.prototype.toBuffer = function () {
12445 function scriptSize (script) {
12446 var length = script.buffer.length
12447
12448 return bufferutils.varIntSize(length) + length
12449 }
12450
12451 var buffer = new Buffer(
12452 8 +
12453 bufferutils.varIntSize(this.ins.length) +
12454 bufferutils.varIntSize(this.outs.length) +
12455 this.ins.reduce(function (sum, input) { return sum + 40 + scriptSize(input.script) }, 0) +
12456 this.outs.reduce(function (sum, output) { return sum + 8 + scriptSize(output.script) }, 0)
12457 )
12458
12459 var offset = 0
12460 function writeSlice (slice) {
12461 slice.copy(buffer, offset)
12462 offset += slice.length
12463 }
12464
12465 function writeUInt32 (i) {
12466 buffer.writeUInt32LE(i, offset)
12467 offset += 4
12468 }
12469
12470 function writeUInt64 (i) {
12471 bufferutils.writeUInt64LE(buffer, i, offset)
12472 offset += 8
12473 }
12474
12475 function writeVarInt (i) {
12476 var n = bufferutils.writeVarInt(buffer, i, offset)
12477 offset += n
12478 }
12479
12480 writeUInt32(this.version)
12481 writeVarInt(this.ins.length)
12482
12483 this.ins.forEach(function (txIn) {
12484 writeSlice(txIn.hash)
12485 writeUInt32(txIn.index)
12486 writeVarInt(txIn.script.buffer.length)
12487 writeSlice(txIn.script.buffer)
12488 writeUInt32(txIn.sequence)
12489 })
12490
12491 writeVarInt(this.outs.length)
12492 this.outs.forEach(function (txOut) {
12493 writeUInt64(txOut.value)
12494 writeVarInt(txOut.script.buffer.length)
12495 writeSlice(txOut.script.buffer)
12496 })
12497
12498 writeUInt32(this.locktime)
12499
12500 return buffer
12501 }
12502
12503 Transaction.prototype.toHex = function () {
12504 return this.toBuffer().toString('hex')
12505 }
12506
12507 Transaction.prototype.setInputScript = function (index, script) {
12508 typeForce('Number', index)
12509 typeForce('Script', script)
12510
12511 this.ins[index].script = script
12512 }
12513
12514 // FIXME: remove in 2.x.y
12515 Transaction.prototype.sign = function (index, privKey, hashType) {
12516 console.warn('Transaction.prototype.sign is deprecated. Use TransactionBuilder instead.')
12517
12518 var prevOutScript = privKey.pub.getAddress().toOutputScript()
12519 var signature = this.signInput(index, prevOutScript, privKey, hashType)
12520
12521 var scriptSig = scripts.pubKeyHashInput(signature, privKey.pub)
12522 this.setInputScript(index, scriptSig)
12523 }
12524
12525 // FIXME: remove in 2.x.y
12526 Transaction.prototype.signInput = function (index, prevOutScript, privKey, hashType) {
12527 console.warn('Transaction.prototype.signInput is deprecated. Use TransactionBuilder instead.')
12528
12529 hashType = hashType || Transaction.SIGHASH_ALL
12530
12531 var hash = this.hashForSignature(index, prevOutScript, hashType)
12532 var signature = privKey.sign(hash)
12533
12534 return signature.toScriptSignature(hashType)
12535 }
12536
12537 // FIXME: remove in 2.x.y
12538 Transaction.prototype.validateInput = function (index, prevOutScript, pubKey, buffer) {
12539 console.warn('Transaction.prototype.validateInput is deprecated. Use TransactionBuilder instead.')
12540
12541 var parsed = ECSignature.parseScriptSignature(buffer)
12542 var hash = this.hashForSignature(index, prevOutScript, parsed.hashType)
12543
12544 return pubKey.verify(hash, parsed.signature)
12545 }
12546
12547 module.exports = Transaction
12548
12549 }).call(this,require("buffer").Buffer)
12550 },{"./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){
12551 (function (Buffer){
12552 var assert = require('assert')
12553 var ops = require('./opcodes')
12554 var scripts = require('./scripts')
12555
12556 var ECPubKey = require('./ecpubkey')
12557 var ECSignature = require('./ecsignature')
12558 var Script = require('./script')
12559 var Transaction = require('./transaction')
12560
12561 function extractInput (txIn) {
12562 var redeemScript
12563 var scriptSig = txIn.script
12564 var prevOutScript
12565 var prevOutType = scripts.classifyInput(scriptSig, true)
12566 var scriptType
12567
12568 // Re-classify if scriptHash
12569 if (prevOutType === 'scripthash') {
12570 redeemScript = Script.fromBuffer(scriptSig.chunks.slice(-1)[0])
12571 prevOutScript = scripts.scriptHashOutput(redeemScript.getHash())
12572
12573 scriptSig = Script.fromChunks(scriptSig.chunks.slice(0, -1))
12574 scriptType = scripts.classifyInput(scriptSig, true)
12575 } else {
12576 scriptType = prevOutType
12577 }
12578
12579 // Extract hashType, pubKeys and signatures
12580 var hashType, parsed, pubKeys, signatures
12581
12582 switch (scriptType) {
12583 case 'pubkeyhash': {
12584 parsed = ECSignature.parseScriptSignature(scriptSig.chunks[0])
12585 hashType = parsed.hashType
12586 pubKeys = [ECPubKey.fromBuffer(scriptSig.chunks[1])]
12587 signatures = [parsed.signature]
12588 prevOutScript = pubKeys[0].getAddress().toOutputScript()
12589
12590 break
12591 }
12592
12593 case 'pubkey': {
12594 parsed = ECSignature.parseScriptSignature(scriptSig.chunks[0])
12595 hashType = parsed.hashType
12596 signatures = [parsed.signature]
12597
12598 if (redeemScript) {
12599 pubKeys = [ECPubKey.fromBuffer(redeemScript.chunks[0])]
12600 }
12601
12602 break
12603 }
12604
12605 case 'multisig': {
12606 signatures = scriptSig.chunks.slice(1).map(function (chunk) {
12607 if (chunk === ops.OP_0) return chunk
12608
12609 var parsed = ECSignature.parseScriptSignature(chunk)
12610 hashType = parsed.hashType
12611
12612 return parsed.signature
12613 })
12614
12615 if (redeemScript) {
12616 pubKeys = redeemScript.chunks.slice(1, -2).map(ECPubKey.fromBuffer)
12617 }
12618
12619 break
12620 }
12621 }
12622
12623 return {
12624 hashType: hashType,
12625 prevOutScript: prevOutScript,
12626 prevOutType: prevOutType,
12627 pubKeys: pubKeys,
12628 redeemScript: redeemScript,
12629 scriptType: scriptType,
12630 signatures: signatures
12631 }
12632 }
12633
12634 function TransactionBuilder () {
12635 this.prevTxMap = {}
12636 this.prevOutScripts = {}
12637 this.prevOutTypes = {}
12638
12639 this.inputs = []
12640 this.tx = new Transaction()
12641 }
12642
12643 TransactionBuilder.fromTransaction = function (transaction) {
12644 var txb = new TransactionBuilder()
12645
12646 // Copy other transaction fields
12647 txb.tx.version = transaction.version
12648 txb.tx.locktime = transaction.locktime
12649
12650 // Extract/add inputs
12651 transaction.ins.forEach(function (txIn) {
12652 txb.addInput(txIn.hash, txIn.index, txIn.sequence)
12653 })
12654
12655 // Extract/add outputs
12656 transaction.outs.forEach(function (txOut) {
12657 txb.addOutput(txOut.script, txOut.value)
12658 })
12659
12660 // Extract/add signatures
12661 txb.inputs = transaction.ins.map(function (txIn) {
12662 // TODO: remove me after testcase added
12663 assert(!Transaction.isCoinbaseHash(txIn.hash), 'coinbase inputs not supported')
12664
12665 // Ignore empty scripts
12666 if (txIn.script.buffer.length === 0) return {}
12667
12668 return extractInput(txIn)
12669 })
12670
12671 return txb
12672 }
12673
12674 TransactionBuilder.prototype.addInput = function (prevTx, index, sequence, prevOutScript) {
12675 var prevOutHash
12676
12677 // txId
12678 if (typeof prevTx === 'string') {
12679 prevOutHash = new Buffer(prevTx, 'hex')
12680
12681 // TxId hex is big-endian, we want little-endian hash
12682 Array.prototype.reverse.call(prevOutHash)
12683
12684 // Transaction
12685 } else if (prevTx instanceof Transaction) {
12686 prevOutHash = prevTx.getHash()
12687 prevOutScript = prevTx.outs[index].script
12688
12689 // txHash
12690 } else {
12691 prevOutHash = prevTx
12692 }
12693
12694 var input = {}
12695 if (prevOutScript) {
12696 var prevOutType = scripts.classifyOutput(prevOutScript)
12697
12698 // if we can, extract pubKey information
12699 switch (prevOutType) {
12700 case 'multisig': {
12701 input.pubKeys = prevOutScript.chunks.slice(1, -2).map(ECPubKey.fromBuffer)
12702 break
12703 }
12704
12705 case 'pubkey': {
12706 input.pubKeys = prevOutScript.chunks.slice(0, 1).map(ECPubKey.fromBuffer)
12707 break
12708 }
12709 }
12710
12711 if (prevOutType !== 'scripthash') {
12712 input.scriptType = prevOutType
12713 }
12714
12715 input.prevOutScript = prevOutScript
12716 input.prevOutType = prevOutType
12717 }
12718
12719 assert(this.inputs.every(function (input2) {
12720 if (input2.hashType === undefined) return true
12721
12722 return input2.hashType & Transaction.SIGHASH_ANYONECANPAY
12723 }), 'No, this would invalidate signatures')
12724
12725 var prevOut = prevOutHash.toString('hex') + ':' + index
12726 assert(!(prevOut in this.prevTxMap), 'Transaction is already an input')
12727
12728 var vin = this.tx.addInput(prevOutHash, index, sequence)
12729 this.inputs[vin] = input
12730 this.prevTxMap[prevOut] = vin
12731
12732 return vin
12733 }
12734
12735 TransactionBuilder.prototype.addOutput = function (scriptPubKey, value) {
12736 assert(this.inputs.every(function (input) {
12737 if (input.hashType === undefined) return true
12738
12739 return (input.hashType & 0x1f) === Transaction.SIGHASH_SINGLE
12740 }), 'No, this would invalidate signatures')
12741
12742 return this.tx.addOutput(scriptPubKey, value)
12743 }
12744
12745 TransactionBuilder.prototype.build = function () {
12746 return this.__build(false)
12747 }
12748 TransactionBuilder.prototype.buildIncomplete = function () {
12749 return this.__build(true)
12750 }
12751
12752 var canSignTypes = {
12753 'pubkeyhash': true,
12754 'multisig': true,
12755 'pubkey': true
12756 }
12757
12758 TransactionBuilder.prototype.__build = function (allowIncomplete) {
12759 if (!allowIncomplete) {
12760 assert(this.tx.ins.length > 0, 'Transaction has no inputs')
12761 assert(this.tx.outs.length > 0, 'Transaction has no outputs')
12762 }
12763
12764 var tx = this.tx.clone()
12765
12766 // Create script signatures from signature meta-data
12767 this.inputs.forEach(function (input, index) {
12768 var scriptType = input.scriptType
12769 var scriptSig
12770
12771 if (!allowIncomplete) {
12772 assert(!!scriptType, 'Transaction is not complete')
12773 assert(scriptType in canSignTypes, scriptType + ' not supported')
12774 assert(input.signatures, 'Transaction is missing signatures')
12775 }
12776
12777 if (input.signatures) {
12778 switch (scriptType) {
12779 case 'pubkeyhash': {
12780 var pkhSignature = input.signatures[0].toScriptSignature(input.hashType)
12781 scriptSig = scripts.pubKeyHashInput(pkhSignature, input.pubKeys[0])
12782 break
12783 }
12784
12785 case 'multisig': {
12786 // Array.prototype.map is sparse-compatible
12787 var msSignatures = input.signatures.map(function (signature) {
12788 return signature && signature.toScriptSignature(input.hashType)
12789 })
12790
12791 // fill in blanks with OP_0
12792 if (allowIncomplete) {
12793 for (var i = 0; i < msSignatures.length; ++i) {
12794 if (msSignatures[i]) continue
12795
12796 msSignatures[i] = ops.OP_0
12797 }
12798 } else {
12799 // Array.prototype.filter returns non-sparse array
12800 msSignatures = msSignatures.filter(function (x) { return x })
12801 }
12802
12803 var redeemScript = allowIncomplete ? undefined : input.redeemScript
12804 scriptSig = scripts.multisigInput(msSignatures, redeemScript)
12805 break
12806 }
12807
12808 case 'pubkey': {
12809 var pkSignature = input.signatures[0].toScriptSignature(input.hashType)
12810 scriptSig = scripts.pubKeyInput(pkSignature)
12811 break
12812 }
12813 }
12814 }
12815
12816 // did we build a scriptSig?
12817 if (scriptSig) {
12818 // wrap as scriptHash if necessary
12819 if (input.prevOutType === 'scripthash') {
12820 scriptSig = scripts.scriptHashInput(scriptSig, input.redeemScript)
12821 }
12822
12823 tx.setInputScript(index, scriptSig)
12824 }
12825 })
12826
12827 return tx
12828 }
12829
12830 TransactionBuilder.prototype.sign = function (index, privKey, redeemScript, hashType) {
12831 assert(index in this.inputs, 'No input at index: ' + index)
12832 hashType = hashType || Transaction.SIGHASH_ALL
12833
12834 var input = this.inputs[index]
12835 var canSign = input.hashType &&
12836 input.prevOutScript &&
12837 input.prevOutType &&
12838 input.pubKeys &&
12839 input.scriptType &&
12840 input.signatures
12841
12842 // are we almost ready to sign?
12843 if (canSign) {
12844 // if redeemScript was provided, enforce consistency
12845 if (redeemScript) {
12846 assert.deepEqual(input.redeemScript, redeemScript, 'Inconsistent redeemScript')
12847 }
12848
12849 assert.equal(input.hashType, hashType, 'Inconsistent hashType')
12850
12851 // no? prepare
12852 } else {
12853 // must be pay-to-scriptHash?
12854 if (redeemScript) {
12855 // if we have a prevOutScript, enforce scriptHash equality to the redeemScript
12856 if (input.prevOutScript) {
12857 assert.equal(input.prevOutType, 'scripthash', 'PrevOutScript must be P2SH')
12858
12859 var scriptHash = input.prevOutScript.chunks[1]
12860 assert.deepEqual(scriptHash, redeemScript.getHash(), 'RedeemScript does not match ' + scriptHash.toString('hex'))
12861 }
12862
12863 var scriptType = scripts.classifyOutput(redeemScript)
12864 assert(scriptType in canSignTypes, 'RedeemScript not supported (' + scriptType + ')')
12865
12866 var pubKeys = []
12867 switch (scriptType) {
12868 case 'multisig': {
12869 pubKeys = redeemScript.chunks.slice(1, -2).map(ECPubKey.fromBuffer)
12870 break
12871 }
12872
12873 case 'pubkeyhash': {
12874 var pkh1 = redeemScript.chunks[2]
12875 var pkh2 = privKey.pub.getAddress().hash
12876
12877 assert.deepEqual(pkh1, pkh2, 'privateKey cannot sign for this input')
12878 pubKeys = [privKey.pub]
12879 break
12880 }
12881
12882 case 'pubkey': {
12883 pubKeys = redeemScript.chunks.slice(0, 1).map(ECPubKey.fromBuffer)
12884 break
12885 }
12886 }
12887
12888 if (!input.prevOutScript) {
12889 input.prevOutScript = scripts.scriptHashOutput(redeemScript.getHash())
12890 input.prevOutType = 'scripthash'
12891 }
12892
12893 input.pubKeys = pubKeys
12894 input.redeemScript = redeemScript
12895 input.scriptType = scriptType
12896
12897 // cannot be pay-to-scriptHash
12898 } else {
12899 assert.notEqual(input.prevOutType, 'scripthash', 'PrevOutScript is P2SH, missing redeemScript')
12900
12901 // can we otherwise sign this?
12902 if (input.scriptType) {
12903 assert(input.pubKeys, input.scriptType + ' not supported')
12904
12905 // we know nothin' Jon Snow, assume pubKeyHash
12906 } else {
12907 input.prevOutScript = privKey.pub.getAddress().toOutputScript()
12908 input.prevOutType = 'pubkeyhash'
12909 input.pubKeys = [privKey.pub]
12910 input.scriptType = input.prevOutType
12911 }
12912 }
12913
12914 input.hashType = hashType
12915 input.signatures = input.signatures || []
12916 }
12917
12918 var signatureScript = input.redeemScript || input.prevOutScript
12919 var signatureHash = this.tx.hashForSignature(index, signatureScript, hashType)
12920
12921 // enforce signature order matches public keys
12922 if (input.scriptType === 'multisig' && input.redeemScript && input.signatures.length !== input.pubKeys.length) {
12923 // maintain a local copy of unmatched signatures
12924 var unmatched = input.signatures.slice()
12925
12926 input.signatures = input.pubKeys.map(function (pubKey) {
12927 var match
12928
12929 // check for any matching signatures
12930 unmatched.some(function (signature, i) {
12931 if (!pubKey.verify(signatureHash, signature)) return false
12932 match = signature
12933
12934 // remove matched signature from unmatched
12935 unmatched.splice(i, 1)
12936
12937 return true
12938 })
12939
12940 return match || undefined
12941 })
12942 }
12943
12944 // enforce in order signing of public keys
12945 assert(input.pubKeys.some(function (pubKey, i) {
12946 if (!privKey.pub.Q.equals(pubKey.Q)) return false
12947
12948 assert(!input.signatures[i], 'Signature already exists')
12949 var signature = privKey.sign(signatureHash)
12950 input.signatures[i] = signature
12951
12952 return true
12953 }, this), 'privateKey cannot sign for this input')
12954 }
12955
12956 module.exports = TransactionBuilder
12957
12958 }).call(this,require("buffer").Buffer)
12959 },{"./ecpubkey":61,"./ecsignature":62,"./opcodes":67,"./script":68,"./scripts":69,"./transaction":70,"assert":5,"buffer":7}],72:[function(require,module,exports){
12960 (function (Buffer){
12961 var assert = require('assert')
12962 var bufferutils = require('./bufferutils')
12963 var typeForce = require('typeforce')
12964 var networks = require('./networks')
12965 var randomBytes = require('randombytes')
12966
12967 var Address = require('./address')
12968 var HDNode = require('./hdnode')
12969 var TransactionBuilder = require('./transaction_builder')
12970 var Script = require('./script')
12971
12972 function Wallet (seed, network) {
12973 console.warn('Wallet is deprecated and will be removed in 2.0.0, see #296')
12974
12975 seed = seed || randomBytes(32)
12976 network = network || networks.bitcoin
12977
12978 // Stored in a closure to make accidental serialization less likely
12979 var masterKey = HDNode.fromSeedBuffer(seed, network)
12980
12981 // HD first-level child derivation method should be hardened
12982 // See https://bitcointalk.org/index.php?topic=405179.msg4415254#msg4415254
12983 var accountZero = masterKey.deriveHardened(0)
12984 var externalAccount = accountZero.derive(0)
12985 var internalAccount = accountZero.derive(1)
12986
12987 this.addresses = []
12988 this.changeAddresses = []
12989 this.network = network
12990 this.unspents = []
12991
12992 // FIXME: remove in 2.0.0
12993 this.unspentMap = {}
12994
12995 // FIXME: remove in 2.0.0
12996 var me = this
12997 this.newMasterKey = function (seed) {
12998 console.warn('newMasterKey is deprecated, please make a new Wallet instance instead')
12999
13000 seed = seed || randomBytes(32)
13001 masterKey = HDNode.fromSeedBuffer(seed, network)
13002
13003 accountZero = masterKey.deriveHardened(0)
13004 externalAccount = accountZero.derive(0)
13005 internalAccount = accountZero.derive(1)
13006
13007 me.addresses = []
13008 me.changeAddresses = []
13009
13010 me.unspents = []
13011 me.unspentMap = {}
13012 }
13013
13014 this.getMasterKey = function () {
13015 return masterKey
13016 }
13017 this.getAccountZero = function () {
13018 return accountZero
13019 }
13020 this.getExternalAccount = function () {
13021 return externalAccount
13022 }
13023 this.getInternalAccount = function () {
13024 return internalAccount
13025 }
13026 }
13027
13028 Wallet.prototype.createTransaction = function (to, value, options) {
13029 // FIXME: remove in 2.0.0
13030 if (typeof options !== 'object') {
13031 if (options !== undefined) {
13032 console.warn('Non options object parameters are deprecated, use options object instead')
13033
13034 options = {
13035 fixedFee: arguments[2],
13036 changeAddress: arguments[3]
13037 }
13038 }
13039 }
13040
13041 options = options || {}
13042
13043 assert(value > this.network.dustThreshold, value + ' must be above dust threshold (' + this.network.dustThreshold + ' Satoshis)')
13044
13045 var changeAddress = options.changeAddress
13046 var fixedFee = options.fixedFee
13047 var minConf = options.minConf === undefined ? 0 : options.minConf // FIXME: change minConf:1 by default in 2.0.0
13048
13049 // filter by minConf, then pending and sort by descending value
13050 var unspents = this.unspents.filter(function (unspent) {
13051 return unspent.confirmations >= minConf
13052 }).filter(function (unspent) {
13053 return !unspent.pending
13054 }).sort(function (o1, o2) {
13055 return o2.value - o1.value
13056 })
13057
13058 var accum = 0
13059 var addresses = []
13060 var subTotal = value
13061
13062 var txb = new TransactionBuilder()
13063 txb.addOutput(to, value)
13064
13065 for (var i = 0; i < unspents.length; ++i) {
13066 var unspent = unspents[i]
13067 addresses.push(unspent.address)
13068
13069 txb.addInput(unspent.txHash, unspent.index)
13070
13071 var fee = fixedFee === undefined ? estimatePaddedFee(txb.buildIncomplete(), this.network) : fixedFee
13072
13073 accum += unspent.value
13074 subTotal = value + fee
13075
13076 if (accum >= subTotal) {
13077 var change = accum - subTotal
13078
13079 if (change > this.network.dustThreshold) {
13080 txb.addOutput(changeAddress || this.getChangeAddress(), change)
13081 }
13082
13083 break
13084 }
13085 }
13086
13087 assert(accum >= subTotal, 'Not enough funds (incl. fee): ' + accum + ' < ' + subTotal)
13088
13089 return this.signWith(txb, addresses).build()
13090 }
13091
13092 // FIXME: remove in 2.0.0
13093 Wallet.prototype.processPendingTx = function (tx) {
13094 this.__processTx(tx, true)
13095 }
13096
13097 // FIXME: remove in 2.0.0
13098 Wallet.prototype.processConfirmedTx = function (tx) {
13099 this.__processTx(tx, false)
13100 }
13101
13102 // FIXME: remove in 2.0.0
13103 Wallet.prototype.__processTx = function (tx, isPending) {
13104 console.warn('processTransaction is considered harmful, see issue #260 for more information')
13105
13106 var txId = tx.getId()
13107 var txHash = tx.getHash()
13108
13109 tx.outs.forEach(function (txOut, i) {
13110 var address
13111
13112 try {
13113 address = Address.fromOutputScript(txOut.script, this.network).toString()
13114 } catch (e) {
13115 if (!(e.message.match(/has no matching Address/)))
13116 throw e
13117 }
13118
13119 var myAddresses = this.addresses.concat(this.changeAddresses)
13120 if (myAddresses.indexOf(address) > -1) {
13121 var lookup = txId + ':' + i
13122 if (lookup in this.unspentMap) return
13123
13124 // its unique, add it
13125 var unspent = {
13126 address: address,
13127 confirmations: 0, // no way to determine this without more information
13128 index: i,
13129 txHash: txHash,
13130 txId: txId,
13131 value: txOut.value,
13132 pending: isPending
13133 }
13134
13135 this.unspentMap[lookup] = unspent
13136 this.unspents.push(unspent)
13137 }
13138 }, this)
13139
13140 tx.ins.forEach(function (txIn) {
13141 // copy and convert to big-endian hex
13142 var txInId = bufferutils.reverse(txIn.hash).toString('hex')
13143
13144 var lookup = txInId + ':' + txIn.index
13145 if (!(lookup in this.unspentMap)) return
13146
13147 var unspent = this.unspentMap[lookup]
13148
13149 if (isPending) {
13150 unspent.pending = true
13151 unspent.spent = true
13152 } else {
13153 delete this.unspentMap[lookup]
13154
13155 this.unspents = this.unspents.filter(function (unspent2) {
13156 return unspent !== unspent2
13157 })
13158 }
13159 }, this)
13160 }
13161
13162 Wallet.prototype.generateAddress = function () {
13163 var k = this.addresses.length
13164 var address = this.getExternalAccount().derive(k).getAddress()
13165
13166 this.addresses.push(address.toString())
13167
13168 return this.getReceiveAddress()
13169 }
13170
13171 Wallet.prototype.generateChangeAddress = function () {
13172 var k = this.changeAddresses.length
13173 var address = this.getInternalAccount().derive(k).getAddress()
13174
13175 this.changeAddresses.push(address.toString())
13176
13177 return this.getChangeAddress()
13178 }
13179
13180 Wallet.prototype.getAddress = function () {
13181 if (this.addresses.length === 0) {
13182 this.generateAddress()
13183 }
13184
13185 return this.addresses[this.addresses.length - 1]
13186 }
13187
13188 Wallet.prototype.getBalance = function (minConf) {
13189 minConf = minConf || 0
13190
13191 return this.unspents.filter(function (unspent) {
13192 return unspent.confirmations >= minConf
13193
13194 // FIXME: remove spent filter in 2.0.0
13195 }).filter(function (unspent) {
13196 return !unspent.spent
13197 }).reduce(function (accum, unspent) {
13198 return accum + unspent.value
13199 }, 0)
13200 }
13201
13202 Wallet.prototype.getChangeAddress = function () {
13203 if (this.changeAddresses.length === 0) {
13204 this.generateChangeAddress()
13205 }
13206
13207 return this.changeAddresses[this.changeAddresses.length - 1]
13208 }
13209
13210 Wallet.prototype.getInternalPrivateKey = function (index) {
13211 return this.getInternalAccount().derive(index).privKey
13212 }
13213
13214 Wallet.prototype.getPrivateKey = function (index) {
13215 return this.getExternalAccount().derive(index).privKey
13216 }
13217
13218 Wallet.prototype.getPrivateKeyForAddress = function (address) {
13219 var index
13220
13221 if ((index = this.addresses.indexOf(address)) > -1) {
13222 return this.getPrivateKey(index)
13223 }
13224
13225 if ((index = this.changeAddresses.indexOf(address)) > -1) {
13226 return this.getInternalPrivateKey(index)
13227 }
13228
13229 assert(false, 'Unknown address. Make sure the address is from the keychain and has been generated')
13230 }
13231
13232 Wallet.prototype.getUnspentOutputs = function (minConf) {
13233 minConf = minConf || 0
13234
13235 return this.unspents.filter(function (unspent) {
13236 return unspent.confirmations >= minConf
13237
13238 // FIXME: remove spent filter in 2.0.0
13239 }).filter(function (unspent) {
13240 return !unspent.spent
13241 }).map(function (unspent) {
13242 return {
13243 address: unspent.address,
13244 confirmations: unspent.confirmations,
13245 index: unspent.index,
13246 txId: unspent.txId,
13247 value: unspent.value,
13248
13249 // FIXME: remove in 2.0.0
13250 hash: unspent.txId,
13251 pending: unspent.pending
13252 }
13253 })
13254 }
13255
13256 Wallet.prototype.setUnspentOutputs = function (unspents) {
13257 this.unspentMap = {}
13258 this.unspents = unspents.map(function (unspent) {
13259 // FIXME: remove unspent.hash in 2.0.0
13260 var txId = unspent.txId || unspent.hash
13261 var index = unspent.index
13262
13263 // FIXME: remove in 2.0.0
13264 if (unspent.hash !== undefined) {
13265 console.warn('unspent.hash is deprecated, use unspent.txId instead')
13266 }
13267
13268 // FIXME: remove in 2.0.0
13269 if (index === undefined) {
13270 console.warn('unspent.outputIndex is deprecated, use unspent.index instead')
13271 index = unspent.outputIndex
13272 }
13273
13274 typeForce('String', txId)
13275 typeForce('Number', index)
13276 typeForce('Number', unspent.value)
13277
13278 assert.equal(txId.length, 64, 'Expected valid txId, got ' + txId)
13279 assert.doesNotThrow(function () {
13280 Address.fromBase58Check(unspent.address)
13281 }, 'Expected Base58 Address, got ' + unspent.address)
13282 assert(isFinite(index), 'Expected finite index, got ' + index)
13283
13284 // FIXME: remove branch in 2.0.0
13285 if (unspent.confirmations !== undefined) {
13286 typeForce('Number', unspent.confirmations)
13287 }
13288
13289 var txHash = bufferutils.reverse(new Buffer(txId, 'hex'))
13290
13291 unspent = {
13292 address: unspent.address,
13293 confirmations: unspent.confirmations || 0,
13294 index: index,
13295 txHash: txHash,
13296 txId: txId,
13297 value: unspent.value,
13298
13299 // FIXME: remove in 2.0.0
13300 pending: unspent.pending || false
13301 }
13302
13303 // FIXME: remove in 2.0.0
13304 this.unspentMap[txId + ':' + index] = unspent
13305
13306 return unspent
13307 }, this)
13308 }
13309
13310 Wallet.prototype.signWith = function (tx, addresses) {
13311 addresses.forEach(function (address, i) {
13312 var privKey = this.getPrivateKeyForAddress(address)
13313
13314 tx.sign(i, privKey)
13315 }, this)
13316
13317 return tx
13318 }
13319
13320 function estimatePaddedFee (tx, network) {
13321 var tmpTx = tx.clone()
13322 tmpTx.addOutput(Script.EMPTY, network.dustSoftThreshold || 0)
13323
13324 return network.estimateFee(tmpTx)
13325 }
13326
13327 // FIXME: 1.0.0 shims, remove in 2.0.0
13328 Wallet.prototype.getReceiveAddress = Wallet.prototype.getAddress
13329 Wallet.prototype.createTx = Wallet.prototype.createTransaction
13330
13331 module.exports = Wallet
13332
13333 }).call(this,require("buffer").Buffer)
13334 },{"./address":54,"./bufferutils":57,"./hdnode":63,"./networks":66,"./script":68,"./transaction_builder":71,"assert":5,"buffer":7,"randombytes":52,"typeforce":53}]},{},[64])(64)
13335 });</script>
13336 <script>bitcoin.networks.shadow = {
13337 magicPrefix: '\x19ShadowCash Signed Message:\n',
13338 bip32: {
13339 public: 0xEE80286A,
13340 private: 0xEE8031E8
13341 },
13342 pubKeyHash: 0x3f,
13343 scriptHash: 0x7d,
13344 wif: 0xbf,
13345 dustThreshold: 0,
13346 feePerKb: 1000,
13347 estimateFee: function() { return "unused in this app" },
13348 };
13349
13350 bitcoin.networks.shadowtn = {
13351 magicPrefix: '\x19ShadowCash Signed Message:\n',
13352 bip32: {
13353 public: 0x76C0FDFB,
13354 private: 0x76C1077A
13355 },
13356 pubKeyHash: 0x7f,
13357 scriptHash: 0xc4,
13358 wif: 0xff,
13359 dustThreshold: 0,
13360 feePerKb: 1000,
13361 estimateFee: function() { return "unused in this app" },
13362 };
13363
13364 bitcoin.networks.clam = {
13365 bip32: {
13366 public: 0xa8c26d64,
13367 private: 0xa8c17826
13368 },
13369 pubKeyHash: 0x89,
13370 wif: 0x85,
13371 };
13372
13373 bitcoin.networks.dash = {
13374 bip32: {
13375 public: 0x0488b21e,
13376 private: 0x0488ade4
13377 },
13378 pubKeyHash: 0x4c,
13379 scriptHash: 0x10,
13380 wif: 0xcc,
13381 };
13382
13383 bitcoin.networks.namecoin = {
13384 bip32: {
13385 public: 0x0488b21e,
13386 private: 0x0488ade4
13387 },
13388 pubKeyHash: 0x34,
13389 //scriptHash: 0x10,
13390 wif: 0x80,
13391 };
13392
13393 bitcoin.networks.peercoin = {
13394 bip32: {
13395 public: 0x0488b21e,
13396 private: 0x0488ade4
13397 },
13398 pubKeyHash: 0x37,
13399 //scriptHash: 0x10,
13400 wif: 0xb7,
13401 };
13402
13403 </script>
13404 <script>// Select components from sjcl to suit the crypto operations bip39 requires.
13405
13406 //// base.js
13407
13408 /** @fileOverview Javascript cryptography implementation.
13409 *
13410 * Crush to remove comments, shorten variable names and
13411 * generally reduce transmission size.
13412 *
13413 * @author Emily Stark
13414 * @author Mike Hamburg
13415 * @author Dan Boneh
13416 */
13417
13418 "use strict";
13419 /*jslint indent: 2, bitwise: false, nomen: false, plusplus: false, white: false, regexp: false */
13420 /*global document, window, escape, unescape, module, require, Uint32Array */
13421
13422 /** @namespace The Stanford Javascript Crypto Library, top-level namespace. */
13423 var sjcl = {
13424 /** @namespace Symmetric ciphers. */
13425 cipher: {},
13426
13427 /** @namespace Hash functions. Right now only SHA256 is implemented. */
13428 hash: {},
13429
13430 /** @namespace Key exchange functions. Right now only SRP is implemented. */
13431 keyexchange: {},
13432
13433 /** @namespace Block cipher modes of operation. */
13434 mode: {},
13435
13436 /** @namespace Miscellaneous. HMAC and PBKDF2. */
13437 misc: {},
13438
13439 /**
13440 * @namespace Bit array encoders and decoders.
13441 *
13442 * @description
13443 * The members of this namespace are functions which translate between
13444 * SJCL's bitArrays and other objects (usually strings). Because it
13445 * isn't always clear which direction is encoding and which is decoding,
13446 * the method names are "fromBits" and "toBits".
13447 */
13448 codec: {},
13449
13450 /** @namespace Exceptions. */
13451 exception: {
13452 /** @constructor Ciphertext is corrupt. */
13453 corrupt: function(message) {
13454 this.toString = function() { return "CORRUPT: "+this.message; };
13455 this.message = message;
13456 },
13457
13458 /** @constructor Invalid parameter. */
13459 invalid: function(message) {
13460 this.toString = function() { return "INVALID: "+this.message; };
13461 this.message = message;
13462 },
13463
13464 /** @constructor Bug or missing feature in SJCL. @constructor */
13465 bug: function(message) {
13466 this.toString = function() { return "BUG: "+this.message; };
13467 this.message = message;
13468 },
13469
13470 /** @constructor Something isn't ready. */
13471 notReady: function(message) {
13472 this.toString = function() { return "NOT READY: "+this.message; };
13473 this.message = message;
13474 }
13475 }
13476 };
13477
13478 if(typeof module !== 'undefined' && module.exports){
13479 module.exports = sjcl;
13480 }
13481 if (typeof define === "function") {
13482 define([], function () {
13483 return sjcl;
13484 });
13485 }
13486
13487
13488 //// bitArray.js
13489
13490 /** @fileOverview Arrays of bits, encoded as arrays of Numbers.
13491 *
13492 * @author Emily Stark
13493 * @author Mike Hamburg
13494 * @author Dan Boneh
13495 */
13496
13497 /** @namespace Arrays of bits, encoded as arrays of Numbers.
13498 *
13499 * @description
13500 * <p>
13501 * These objects are the currency accepted by SJCL's crypto functions.
13502 * </p>
13503 *
13504 * <p>
13505 * Most of our crypto primitives operate on arrays of 4-byte words internally,
13506 * but many of them can take arguments that are not a multiple of 4 bytes.
13507 * This library encodes arrays of bits (whose size need not be a multiple of 8
13508 * bits) as arrays of 32-bit words. The bits are packed, big-endian, into an
13509 * array of words, 32 bits at a time. Since the words are double-precision
13510 * floating point numbers, they fit some extra data. We use this (in a private,
13511 * possibly-changing manner) to encode the number of bits actually present
13512 * in the last word of the array.
13513 * </p>
13514 *
13515 * <p>
13516 * Because bitwise ops clear this out-of-band data, these arrays can be passed
13517 * to ciphers like AES which want arrays of words.
13518 * </p>
13519 */
13520 sjcl.bitArray = {
13521 /**
13522 * Array slices in units of bits.
13523 * @param {bitArray} a The array to slice.
13524 * @param {Number} bstart The offset to the start of the slice, in bits.
13525 * @param {Number} bend The offset to the end of the slice, in bits. If this is undefined,
13526 * slice until the end of the array.
13527 * @return {bitArray} The requested slice.
13528 */
13529 bitSlice: function (a, bstart, bend) {
13530 a = sjcl.bitArray._shiftRight(a.slice(bstart/32), 32 - (bstart & 31)).slice(1);
13531 return (bend === undefined) ? a : sjcl.bitArray.clamp(a, bend-bstart);
13532 },
13533
13534 /**
13535 * Extract a number packed into a bit array.
13536 * @param {bitArray} a The array to slice.
13537 * @param {Number} bstart The offset to the start of the slice, in bits.
13538 * @param {Number} length The length of the number to extract.
13539 * @return {Number} The requested slice.
13540 */
13541 extract: function(a, bstart, blength) {
13542 // FIXME: this Math.floor is not necessary at all, but for some reason
13543 // seems to suppress a bug in the Chromium JIT.
13544 var x, sh = Math.floor((-bstart-blength) & 31);
13545 if ((bstart + blength - 1 ^ bstart) & -32) {
13546 // it crosses a boundary
13547 x = (a[bstart/32|0] << (32 - sh)) ^ (a[bstart/32+1|0] >>> sh);
13548 } else {
13549 // within a single word
13550 x = a[bstart/32|0] >>> sh;
13551 }
13552 return x & ((1<<blength) - 1);
13553 },
13554
13555 /**
13556 * Concatenate two bit arrays.
13557 * @param {bitArray} a1 The first array.
13558 * @param {bitArray} a2 The second array.
13559 * @return {bitArray} The concatenation of a1 and a2.
13560 */
13561 concat: function (a1, a2) {
13562 if (a1.length === 0 || a2.length === 0) {
13563 return a1.concat(a2);
13564 }
13565
13566 var last = a1[a1.length-1], shift = sjcl.bitArray.getPartial(last);
13567 if (shift === 32) {
13568 return a1.concat(a2);
13569 } else {
13570 return sjcl.bitArray._shiftRight(a2, shift, last|0, a1.slice(0,a1.length-1));
13571 }
13572 },
13573
13574 /**
13575 * Find the length of an array of bits.
13576 * @param {bitArray} a The array.
13577 * @return {Number} The length of a, in bits.
13578 */
13579 bitLength: function (a) {
13580 var l = a.length, x;
13581 if (l === 0) { return 0; }
13582 x = a[l - 1];
13583 return (l-1) * 32 + sjcl.bitArray.getPartial(x);
13584 },
13585
13586 /**
13587 * Truncate an array.
13588 * @param {bitArray} a The array.
13589 * @param {Number} len The length to truncate to, in bits.
13590 * @return {bitArray} A new array, truncated to len bits.
13591 */
13592 clamp: function (a, len) {
13593 if (a.length * 32 < len) { return a; }
13594 a = a.slice(0, Math.ceil(len / 32));
13595 var l = a.length;
13596 len = len & 31;
13597 if (l > 0 && len) {
13598 a[l-1] = sjcl.bitArray.partial(len, a[l-1] & 0x80000000 >> (len-1), 1);
13599 }
13600 return a;
13601 },
13602
13603 /**
13604 * Make a partial word for a bit array.
13605 * @param {Number} len The number of bits in the word.
13606 * @param {Number} x The bits.
13607 * @param {Number} [0] _end Pass 1 if x has already been shifted to the high side.
13608 * @return {Number} The partial word.
13609 */
13610 partial: function (len, x, _end) {
13611 if (len === 32) { return x; }
13612 return (_end ? x|0 : x << (32-len)) + len * 0x10000000000;
13613 },
13614
13615 /**
13616 * Get the number of bits used by a partial word.
13617 * @param {Number} x The partial word.
13618 * @return {Number} The number of bits used by the partial word.
13619 */
13620 getPartial: function (x) {
13621 return Math.round(x/0x10000000000) || 32;
13622 },
13623
13624 /**
13625 * Compare two arrays for equality in a predictable amount of time.
13626 * @param {bitArray} a The first array.
13627 * @param {bitArray} b The second array.
13628 * @return {boolean} true if a == b; false otherwise.
13629 */
13630 equal: function (a, b) {
13631 if (sjcl.bitArray.bitLength(a) !== sjcl.bitArray.bitLength(b)) {
13632 return false;
13633 }
13634 var x = 0, i;
13635 for (i=0; i<a.length; i++) {
13636 x |= a[i]^b[i];
13637 }
13638 return (x === 0);
13639 },
13640
13641 /** Shift an array right.
13642 * @param {bitArray} a The array to shift.
13643 * @param {Number} shift The number of bits to shift.
13644 * @param {Number} [carry=0] A byte to carry in
13645 * @param {bitArray} [out=[]] An array to prepend to the output.
13646 * @private
13647 */
13648 _shiftRight: function (a, shift, carry, out) {
13649 var i, last2=0, shift2;
13650 if (out === undefined) { out = []; }
13651
13652 for (; shift >= 32; shift -= 32) {
13653 out.push(carry);
13654 carry = 0;
13655 }
13656 if (shift === 0) {
13657 return out.concat(a);
13658 }
13659
13660 for (i=0; i<a.length; i++) {
13661 out.push(carry | a[i]>>>shift);
13662 carry = a[i] << (32-shift);
13663 }
13664 last2 = a.length ? a[a.length-1] : 0;
13665 shift2 = sjcl.bitArray.getPartial(last2);
13666 out.push(sjcl.bitArray.partial(shift+shift2 & 31, (shift + shift2 > 32) ? carry : out.pop(),1));
13667 return out;
13668 },
13669
13670 /** xor a block of 4 words together.
13671 * @private
13672 */
13673 _xor4: function(x,y) {
13674 return [x[0]^y[0],x[1]^y[1],x[2]^y[2],x[3]^y[3]];
13675 },
13676
13677 /** byteswap a word array inplace.
13678 * (does not handle partial words)
13679 * @param {sjcl.bitArray} a word array
13680 * @return {sjcl.bitArray} byteswapped array
13681 */
13682 byteswapM: function(a) {
13683 var i, v, m = 0xff00;
13684 for (i = 0; i < a.length; ++i) {
13685 v = a[i];
13686 a[i] = (v >>> 24) | ((v >>> 8) & m) | ((v & m) << 8) | (v << 24);
13687 }
13688 return a;
13689 }
13690 };
13691
13692
13693 //// codecString.js
13694
13695 /** @fileOverview Bit array codec implementations.
13696 *
13697 * @author Emily Stark
13698 * @author Mike Hamburg
13699 * @author Dan Boneh
13700 */
13701
13702 /** @namespace UTF-8 strings */
13703 sjcl.codec.utf8String = {
13704 /** Convert from a bitArray to a UTF-8 string. */
13705 fromBits: function (arr) {
13706 var out = "", bl = sjcl.bitArray.bitLength(arr), i, tmp;
13707 for (i=0; i<bl/8; i++) {
13708 if ((i&3) === 0) {
13709 tmp = arr[i/4];
13710 }
13711 out += String.fromCharCode(tmp >>> 24);
13712 tmp <<= 8;
13713 }
13714 return decodeURIComponent(escape(out));
13715 },
13716
13717 /** Convert from a UTF-8 string to a bitArray. */
13718 toBits: function (str) {
13719 str = unescape(encodeURIComponent(str));
13720 var out = [], i, tmp=0;
13721 for (i=0; i<str.length; i++) {
13722 tmp = tmp << 8 | str.charCodeAt(i);
13723 if ((i&3) === 3) {
13724 out.push(tmp);
13725 tmp = 0;
13726 }
13727 }
13728 if (i&3) {
13729 out.push(sjcl.bitArray.partial(8*(i&3), tmp));
13730 }
13731 return out;
13732 }
13733 };
13734
13735
13736 //// codecHex.js
13737
13738 /** @fileOverview Bit array codec implementations.
13739 *
13740 * @author Emily Stark
13741 * @author Mike Hamburg
13742 * @author Dan Boneh
13743 */
13744
13745 /** @namespace Hexadecimal */
13746 sjcl.codec.hex = {
13747 /** Convert from a bitArray to a hex string. */
13748 fromBits: function (arr) {
13749 var out = "", i;
13750 for (i=0; i<arr.length; i++) {
13751 out += ((arr[i]|0)+0xF00000000000).toString(16).substr(4);
13752 }
13753 return out.substr(0, sjcl.bitArray.bitLength(arr)/4);//.replace(/(.{8})/g, "$1 ");
13754 },
13755 /** Convert from a hex string to a bitArray. */
13756 toBits: function (str) {
13757 var i, out=[], len;
13758 str = str.replace(/\s|0x/g, "");
13759 len = str.length;
13760 str = str + "00000000";
13761 for (i=0; i<str.length; i+=8) {
13762 out.push(parseInt(str.substr(i,8),16)^0);
13763 }
13764 return sjcl.bitArray.clamp(out, len*4);
13765 }
13766 };
13767
13768
13769 //// sha512.js
13770
13771 /** @fileOverview Javascript SHA-512 implementation.
13772 *
13773 * This implementation was written for CryptoJS by Jeff Mott and adapted for
13774 * SJCL by Stefan Thomas.
13775 *
13776 * CryptoJS (c) 2009–2012 by Jeff Mott. All rights reserved.
13777 * Released with New BSD License
13778 *
13779 * @author Emily Stark
13780 * @author Mike Hamburg
13781 * @author Dan Boneh
13782 * @author Jeff Mott
13783 * @author Stefan Thomas
13784 */
13785
13786 /**
13787 * Context for a SHA-512 operation in progress.
13788 * @constructor
13789 * @class Secure Hash Algorithm, 512 bits.
13790 */
13791 sjcl.hash.sha512 = function (hash) {
13792 if (!this._key[0]) { this._precompute(); }
13793 if (hash) {
13794 this._h = hash._h.slice(0);
13795 this._buffer = hash._buffer.slice(0);
13796 this._length = hash._length;
13797 } else {
13798 this.reset();
13799 }
13800 };
13801
13802 /**
13803 * Hash a string or an array of words.
13804 * @static
13805 * @param {bitArray|String} data the data to hash.
13806 * @return {bitArray} The hash value, an array of 16 big-endian words.
13807 */
13808 sjcl.hash.sha512.hash = function (data) {
13809 return (new sjcl.hash.sha512()).update(data).finalize();
13810 };
13811
13812 sjcl.hash.sha512.prototype = {
13813 /**
13814 * The hash's block size, in bits.
13815 * @constant
13816 */
13817 blockSize: 1024,
13818
13819 /**
13820 * Reset the hash state.
13821 * @return this
13822 */
13823 reset:function () {
13824 this._h = this._init.slice(0);
13825 this._buffer = [];
13826 this._length = 0;
13827 return this;
13828 },
13829
13830 /**
13831 * Input several words to the hash.
13832 * @param {bitArray|String} data the data to hash.
13833 * @return this
13834 */
13835 update: function (data) {
13836 if (typeof data === "string") {
13837 data = sjcl.codec.utf8String.toBits(data);
13838 }
13839 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
13840 ol = this._length,
13841 nl = this._length = ol + sjcl.bitArray.bitLength(data);
13842 for (i = 1024+ol & -1024; i <= nl; i+= 1024) {
13843 this._block(b.splice(0,32));
13844 }
13845 return this;
13846 },
13847
13848 /**
13849 * Complete hashing and output the hash value.
13850 * @return {bitArray} The hash value, an array of 16 big-endian words.
13851 */
13852 finalize:function () {
13853 var i, b = this._buffer, h = this._h;
13854
13855 // Round out and push the buffer
13856 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(1,1)]);
13857
13858 // Round out the buffer to a multiple of 32 words, less the 4 length words.
13859 for (i = b.length + 4; i & 31; i++) {
13860 b.push(0);
13861 }
13862
13863 // append the length
13864 b.push(0);
13865 b.push(0);
13866 b.push(Math.floor(this._length / 0x100000000));
13867 b.push(this._length | 0);
13868
13869 while (b.length) {
13870 this._block(b.splice(0,32));
13871 }
13872
13873 this.reset();
13874 return h;
13875 },
13876
13877 /**
13878 * The SHA-512 initialization vector, to be precomputed.
13879 * @private
13880 */
13881 _init:[],
13882
13883 /**
13884 * Least significant 24 bits of SHA512 initialization values.
13885 *
13886 * Javascript only has 53 bits of precision, so we compute the 40 most
13887 * significant bits and add the remaining 24 bits as constants.
13888 *
13889 * @private
13890 */
13891 _initr: [ 0xbcc908, 0xcaa73b, 0x94f82b, 0x1d36f1, 0xe682d1, 0x3e6c1f, 0x41bd6b, 0x7e2179 ],
13892
13893 /*
13894 _init:
13895 [0x6a09e667, 0xf3bcc908, 0xbb67ae85, 0x84caa73b, 0x3c6ef372, 0xfe94f82b, 0xa54ff53a, 0x5f1d36f1,
13896 0x510e527f, 0xade682d1, 0x9b05688c, 0x2b3e6c1f, 0x1f83d9ab, 0xfb41bd6b, 0x5be0cd19, 0x137e2179],
13897 */
13898
13899 /**
13900 * The SHA-512 hash key, to be precomputed.
13901 * @private
13902 */
13903 _key:[],
13904
13905 /**
13906 * Least significant 24 bits of SHA512 key values.
13907 * @private
13908 */
13909 _keyr:
13910 [0x28ae22, 0xef65cd, 0x4d3b2f, 0x89dbbc, 0x48b538, 0x05d019, 0x194f9b, 0x6d8118,
13911 0x030242, 0x706fbe, 0xe4b28c, 0xffb4e2, 0x7b896f, 0x1696b1, 0xc71235, 0x692694,
13912 0xf14ad2, 0x4f25e3, 0x8cd5b5, 0xac9c65, 0x2b0275, 0xa6e483, 0x41fbd4, 0x1153b5,
13913 0x66dfab, 0xb43210, 0xfb213f, 0xef0ee4, 0xa88fc2, 0x0aa725, 0x03826f, 0x0e6e70,
13914 0xd22ffc, 0x26c926, 0xc42aed, 0x95b3df, 0xaf63de, 0x77b2a8, 0xedaee6, 0x82353b,
13915 0xf10364, 0x423001, 0xf89791, 0x54be30, 0xef5218, 0x65a910, 0x71202a, 0xbbd1b8,
13916 0xd2d0c8, 0x41ab53, 0x8eeb99, 0x9b48a8, 0xc95a63, 0x418acb, 0x63e373, 0xb2b8a3,
13917 0xefb2fc, 0x172f60, 0xf0ab72, 0x6439ec, 0x631e28, 0x82bde9, 0xc67915, 0x72532b,
13918 0x26619c, 0xc0c207, 0xe0eb1e, 0x6ed178, 0x176fba, 0xc898a6, 0xf90dae, 0x1c471b,
13919 0x047d84, 0xc72493, 0xc9bebc, 0x100d4c, 0x3e42b6, 0x657e2a, 0xd6faec, 0x475817],
13920
13921 /*
13922 _key:
13923 [0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd, 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
13924 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019, 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
13925 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe, 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
13926 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1, 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
13927 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3, 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
13928 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483, 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
13929 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210, 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
13930 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725, 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
13931 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926, 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
13932 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8, 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
13933 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001, 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
13934 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910, 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
13935 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53, 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
13936 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb, 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
13937 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60, 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
13938 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9, 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
13939 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207, 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
13940 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6, 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
13941 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493, 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
13942 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a, 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817],
13943 */
13944
13945 /**
13946 * Function to precompute _init and _key.
13947 * @private
13948 */
13949 _precompute: function () {
13950 // XXX: This code is for precomputing the SHA256 constants, change for
13951 // SHA512 and re-enable.
13952 var i = 0, prime = 2, factor;
13953
13954 function frac(x) { return (x-Math.floor(x)) * 0x100000000 | 0; }
13955 function frac2(x) { return (x-Math.floor(x)) * 0x10000000000 & 0xff; }
13956
13957 outer: for (; i<80; prime++) {
13958 for (factor=2; factor*factor <= prime; factor++) {
13959 if (prime % factor === 0) {
13960 // not a prime
13961 continue outer;
13962 }
13963 }
13964
13965 if (i<8) {
13966 this._init[i*2] = frac(Math.pow(prime, 1/2));
13967 this._init[i*2+1] = (frac2(Math.pow(prime, 1/2)) << 24) | this._initr[i];
13968 }
13969 this._key[i*2] = frac(Math.pow(prime, 1/3));
13970 this._key[i*2+1] = (frac2(Math.pow(prime, 1/3)) << 24) | this._keyr[i];
13971 i++;
13972 }
13973 },
13974
13975 /**
13976 * Perform one cycle of SHA-512.
13977 * @param {bitArray} words one block of words.
13978 * @private
13979 */
13980 _block:function (words) {
13981 var i, wrh, wrl,
13982 w = words.slice(0),
13983 h = this._h,
13984 k = this._key,
13985 h0h = h[ 0], h0l = h[ 1], h1h = h[ 2], h1l = h[ 3],
13986 h2h = h[ 4], h2l = h[ 5], h3h = h[ 6], h3l = h[ 7],
13987 h4h = h[ 8], h4l = h[ 9], h5h = h[10], h5l = h[11],
13988 h6h = h[12], h6l = h[13], h7h = h[14], h7l = h[15];
13989
13990 // Working variables
13991 var ah = h0h, al = h0l, bh = h1h, bl = h1l,
13992 ch = h2h, cl = h2l, dh = h3h, dl = h3l,
13993 eh = h4h, el = h4l, fh = h5h, fl = h5l,
13994 gh = h6h, gl = h6l, hh = h7h, hl = h7l;
13995
13996 for (i=0; i<80; i++) {
13997 // load up the input word for this round
13998 if (i<16) {
13999 wrh = w[i * 2];
14000 wrl = w[i * 2 + 1];
14001 } else {
14002 // Gamma0
14003 var gamma0xh = w[(i-15) * 2];
14004 var gamma0xl = w[(i-15) * 2 + 1];
14005 var gamma0h =
14006 ((gamma0xl << 31) | (gamma0xh >>> 1)) ^
14007 ((gamma0xl << 24) | (gamma0xh >>> 8)) ^
14008 (gamma0xh >>> 7);
14009 var gamma0l =
14010 ((gamma0xh << 31) | (gamma0xl >>> 1)) ^
14011 ((gamma0xh << 24) | (gamma0xl >>> 8)) ^
14012 ((gamma0xh << 25) | (gamma0xl >>> 7));
14013
14014 // Gamma1
14015 var gamma1xh = w[(i-2) * 2];
14016 var gamma1xl = w[(i-2) * 2 + 1];
14017 var gamma1h =
14018 ((gamma1xl << 13) | (gamma1xh >>> 19)) ^
14019 ((gamma1xh << 3) | (gamma1xl >>> 29)) ^
14020 (gamma1xh >>> 6);
14021 var gamma1l =
14022 ((gamma1xh << 13) | (gamma1xl >>> 19)) ^
14023 ((gamma1xl << 3) | (gamma1xh >>> 29)) ^
14024 ((gamma1xh << 26) | (gamma1xl >>> 6));
14025
14026 // Shortcuts
14027 var wr7h = w[(i-7) * 2];
14028 var wr7l = w[(i-7) * 2 + 1];
14029
14030 var wr16h = w[(i-16) * 2];
14031 var wr16l = w[(i-16) * 2 + 1];
14032
14033 // W(round) = gamma0 + W(round - 7) + gamma1 + W(round - 16)
14034 wrl = gamma0l + wr7l;
14035 wrh = gamma0h + wr7h + ((wrl >>> 0) < (gamma0l >>> 0) ? 1 : 0);
14036 wrl += gamma1l;
14037 wrh += gamma1h + ((wrl >>> 0) < (gamma1l >>> 0) ? 1 : 0);
14038 wrl += wr16l;
14039 wrh += wr16h + ((wrl >>> 0) < (wr16l >>> 0) ? 1 : 0);
14040 }
14041
14042 w[i*2] = wrh |= 0;
14043 w[i*2 + 1] = wrl |= 0;
14044
14045 // Ch
14046 var chh = (eh & fh) ^ (~eh & gh);
14047 var chl = (el & fl) ^ (~el & gl);
14048
14049 // Maj
14050 var majh = (ah & bh) ^ (ah & ch) ^ (bh & ch);
14051 var majl = (al & bl) ^ (al & cl) ^ (bl & cl);
14052
14053 // Sigma0
14054 var sigma0h = ((al << 4) | (ah >>> 28)) ^ ((ah << 30) | (al >>> 2)) ^ ((ah << 25) | (al >>> 7));
14055 var sigma0l = ((ah << 4) | (al >>> 28)) ^ ((al << 30) | (ah >>> 2)) ^ ((al << 25) | (ah >>> 7));
14056
14057 // Sigma1
14058 var sigma1h = ((el << 18) | (eh >>> 14)) ^ ((el << 14) | (eh >>> 18)) ^ ((eh << 23) | (el >>> 9));
14059 var sigma1l = ((eh << 18) | (el >>> 14)) ^ ((eh << 14) | (el >>> 18)) ^ ((el << 23) | (eh >>> 9));
14060
14061 // K(round)
14062 var krh = k[i*2];
14063 var krl = k[i*2+1];
14064
14065 // t1 = h + sigma1 + ch + K(round) + W(round)
14066 var t1l = hl + sigma1l;
14067 var t1h = hh + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0);
14068 t1l += chl;
14069 t1h += chh + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0);
14070 t1l += krl;
14071 t1h += krh + ((t1l >>> 0) < (krl >>> 0) ? 1 : 0);
14072 t1l = t1l + wrl|0; // FF32..FF34 perf issue https://bugzilla.mozilla.org/show_bug.cgi?id=1054972
14073 t1h += wrh + ((t1l >>> 0) < (wrl >>> 0) ? 1 : 0);
14074
14075 // t2 = sigma0 + maj
14076 var t2l = sigma0l + majl;
14077 var t2h = sigma0h + majh + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0);
14078
14079 // Update working variables
14080 hh = gh;
14081 hl = gl;
14082 gh = fh;
14083 gl = fl;
14084 fh = eh;
14085 fl = el;
14086 el = (dl + t1l) | 0;
14087 eh = (dh + t1h + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;
14088 dh = ch;
14089 dl = cl;
14090 ch = bh;
14091 cl = bl;
14092 bh = ah;
14093 bl = al;
14094 al = (t1l + t2l) | 0;
14095 ah = (t1h + t2h + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0;
14096 }
14097
14098 // Intermediate hash
14099 h0l = h[1] = (h0l + al) | 0;
14100 h[0] = (h0h + ah + ((h0l >>> 0) < (al >>> 0) ? 1 : 0)) | 0;
14101 h1l = h[3] = (h1l + bl) | 0;
14102 h[2] = (h1h + bh + ((h1l >>> 0) < (bl >>> 0) ? 1 : 0)) | 0;
14103 h2l = h[5] = (h2l + cl) | 0;
14104 h[4] = (h2h + ch + ((h2l >>> 0) < (cl >>> 0) ? 1 : 0)) | 0;
14105 h3l = h[7] = (h3l + dl) | 0;
14106 h[6] = (h3h + dh + ((h3l >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;
14107 h4l = h[9] = (h4l + el) | 0;
14108 h[8] = (h4h + eh + ((h4l >>> 0) < (el >>> 0) ? 1 : 0)) | 0;
14109 h5l = h[11] = (h5l + fl) | 0;
14110 h[10] = (h5h + fh + ((h5l >>> 0) < (fl >>> 0) ? 1 : 0)) | 0;
14111 h6l = h[13] = (h6l + gl) | 0;
14112 h[12] = (h6h + gh + ((h6l >>> 0) < (gl >>> 0) ? 1 : 0)) | 0;
14113 h7l = h[15] = (h7l + hl) | 0;
14114 h[14] = (h7h + hh + ((h7l >>> 0) < (hl >>> 0) ? 1 : 0)) | 0;
14115 }
14116 };
14117
14118
14119 //// hmac.js
14120
14121 /** @fileOverview HMAC implementation.
14122 *
14123 * @author Emily Stark
14124 * @author Mike Hamburg
14125 * @author Dan Boneh
14126 */
14127
14128 /** HMAC with the specified hash function.
14129 * @constructor
14130 * @param {bitArray} key the key for HMAC.
14131 * @param {Object} [hash=sjcl.hash.sha256] The hash function to use.
14132 */
14133 sjcl.misc.hmac = function (key, Hash) {
14134 this._hash = Hash = Hash || sjcl.hash.sha256;
14135 var exKey = [[],[]], i,
14136 bs = Hash.prototype.blockSize / 32;
14137 this._baseHash = [new Hash(), new Hash()];
14138
14139 if (key.length > bs) {
14140 key = Hash.hash(key);
14141 }
14142
14143 for (i=0; i<bs; i++) {
14144 exKey[0][i] = key[i]^0x36363636;
14145 exKey[1][i] = key[i]^0x5C5C5C5C;
14146 }
14147
14148 this._baseHash[0].update(exKey[0]);
14149 this._baseHash[1].update(exKey[1]);
14150 this._resultHash = new Hash(this._baseHash[0]);
14151 };
14152
14153 /** HMAC with the specified hash function. Also called encrypt since it's a prf.
14154 * @param {bitArray|String} data The data to mac.
14155 */
14156 sjcl.misc.hmac.prototype.encrypt = sjcl.misc.hmac.prototype.mac = function (data) {
14157 if (!this._updated) {
14158 this.update(data);
14159 return this.digest(data);
14160 } else {
14161 throw new sjcl.exception.invalid("encrypt on already updated hmac called!");
14162 }
14163 };
14164
14165 sjcl.misc.hmac.prototype.reset = function () {
14166 this._resultHash = new this._hash(this._baseHash[0]);
14167 this._updated = false;
14168 };
14169
14170 sjcl.misc.hmac.prototype.update = function (data) {
14171 this._updated = true;
14172 this._resultHash.update(data);
14173 };
14174
14175 sjcl.misc.hmac.prototype.digest = function () {
14176 var w = this._resultHash.finalize(), result = new (this._hash)(this._baseHash[1]).update(w).finalize();
14177
14178 this.reset();
14179
14180 return result;
14181 };
14182
14183
14184 //// pbkdf2.js
14185
14186
14187 /** @fileOverview Password-based key-derivation function, version 2.0.
14188 *
14189 * @author Emily Stark
14190 * @author Mike Hamburg
14191 * @author Dan Boneh
14192 */
14193
14194 /** Password-Based Key-Derivation Function, version 2.0.
14195 *
14196 * Generate keys from passwords using PBKDF2-HMAC-SHA256.
14197 *
14198 * This is the method specified by RSA's PKCS #5 standard.
14199 *
14200 * @param {bitArray|String} password The password.
14201 * @param {bitArray|String} salt The salt. Should have lots of entropy.
14202 * @param {Number} [count=1000] The number of iterations. Higher numbers make the function slower but more secure.
14203 * @param {Number} [length] The length of the derived key. Defaults to the
14204 output size of the hash function.
14205 * @param {Object} [Prff=sjcl.misc.hmac] The pseudorandom function family.
14206 * @return {bitArray} the derived key.
14207 */
14208 sjcl.misc.pbkdf2 = function (password, salt, count, length, Prff) {
14209 count = count || 1000;
14210
14211 if (length < 0 || count < 0) {
14212 throw sjcl.exception.invalid("invalid params to pbkdf2");
14213 }
14214
14215 if (typeof password === "string") {
14216 password = sjcl.codec.utf8String.toBits(password);
14217 }
14218
14219 if (typeof salt === "string") {
14220 salt = sjcl.codec.utf8String.toBits(salt);
14221 }
14222
14223 Prff = Prff || sjcl.misc.hmac;
14224
14225 var prf = new Prff(password),
14226 u, ui, i, j, k, out = [], b = sjcl.bitArray;
14227
14228 for (k = 1; 32 * out.length < (length || 1); k++) {
14229 u = ui = prf.encrypt(b.concat(salt,[k]));
14230
14231 for (i=1; i<count; i++) {
14232 ui = prf.encrypt(ui);
14233 for (j=0; j<ui.length; j++) {
14234 u[j] ^= ui[j];
14235 }
14236 }
14237
14238 out = out.concat(u);
14239 }
14240
14241 if (length) { out = b.clamp(out, length); }
14242
14243 return out;
14244 };
14245
14246
14247 //// sha256.js
14248
14249 /** @fileOverview Javascript SHA-256 implementation.
14250 *
14251 * An older version of this implementation is available in the public
14252 * domain, but this one is (c) Emily Stark, Mike Hamburg, Dan Boneh,
14253 * Stanford University 2008-2010 and BSD-licensed for liability
14254 * reasons.
14255 *
14256 * Special thanks to Aldo Cortesi for pointing out several bugs in
14257 * this code.
14258 *
14259 * @author Emily Stark
14260 * @author Mike Hamburg
14261 * @author Dan Boneh
14262 */
14263
14264 /**
14265 * Context for a SHA-256 operation in progress.
14266 * @constructor
14267 * @class Secure Hash Algorithm, 256 bits.
14268 */
14269 sjcl.hash.sha256 = function (hash) {
14270 if (!this._key[0]) { this._precompute(); }
14271 if (hash) {
14272 this._h = hash._h.slice(0);
14273 this._buffer = hash._buffer.slice(0);
14274 this._length = hash._length;
14275 } else {
14276 this.reset();
14277 }
14278 };
14279
14280 /**
14281 * Hash a string or an array of words.
14282 * @static
14283 * @param {bitArray|String} data the data to hash.
14284 * @return {bitArray} The hash value, an array of 16 big-endian words.
14285 */
14286 sjcl.hash.sha256.hash = function (data) {
14287 return (new sjcl.hash.sha256()).update(data).finalize();
14288 };
14289
14290 sjcl.hash.sha256.prototype = {
14291 /**
14292 * The hash's block size, in bits.
14293 * @constant
14294 */
14295 blockSize: 512,
14296
14297 /**
14298 * Reset the hash state.
14299 * @return this
14300 */
14301 reset:function () {
14302 this._h = this._init.slice(0);
14303 this._buffer = [];
14304 this._length = 0;
14305 return this;
14306 },
14307
14308 /**
14309 * Input several words to the hash.
14310 * @param {bitArray|String} data the data to hash.
14311 * @return this
14312 */
14313 update: function (data) {
14314 if (typeof data === "string") {
14315 data = sjcl.codec.utf8String.toBits(data);
14316 }
14317 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
14318 ol = this._length,
14319 nl = this._length = ol + sjcl.bitArray.bitLength(data);
14320 for (i = 512+ol & -512; i <= nl; i+= 512) {
14321 this._block(b.splice(0,16));
14322 }
14323 return this;
14324 },
14325
14326 /**
14327 * Complete hashing and output the hash value.
14328 * @return {bitArray} The hash value, an array of 8 big-endian words.
14329 */
14330 finalize:function () {
14331 var i, b = this._buffer, h = this._h;
14332
14333 // Round out and push the buffer
14334 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(1,1)]);
14335
14336 // Round out the buffer to a multiple of 16 words, less the 2 length words.
14337 for (i = b.length + 2; i & 15; i++) {
14338 b.push(0);
14339 }
14340
14341 // append the length
14342 b.push(Math.floor(this._length / 0x100000000));
14343 b.push(this._length | 0);
14344
14345 while (b.length) {
14346 this._block(b.splice(0,16));
14347 }
14348
14349 this.reset();
14350 return h;
14351 },
14352
14353 /**
14354 * The SHA-256 initialization vector, to be precomputed.
14355 * @private
14356 */
14357 _init:[],
14358 /*
14359 _init:[0x6a09e667,0xbb67ae85,0x3c6ef372,0xa54ff53a,0x510e527f,0x9b05688c,0x1f83d9ab,0x5be0cd19],
14360 */
14361
14362 /**
14363 * The SHA-256 hash key, to be precomputed.
14364 * @private
14365 */
14366 _key:[],
14367 /*
14368 _key:
14369 [0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
14370 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
14371 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
14372 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
14373 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
14374 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
14375 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
14376 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2],
14377 */
14378
14379
14380 /**
14381 * Function to precompute _init and _key.
14382 * @private
14383 */
14384 _precompute: function () {
14385 var i = 0, prime = 2, factor;
14386
14387 function frac(x) { return (x-Math.floor(x)) * 0x100000000 | 0; }
14388
14389 outer: for (; i<64; prime++) {
14390 for (factor=2; factor*factor <= prime; factor++) {
14391 if (prime % factor === 0) {
14392 // not a prime
14393 continue outer;
14394 }
14395 }
14396
14397 if (i<8) {
14398 this._init[i] = frac(Math.pow(prime, 1/2));
14399 }
14400 this._key[i] = frac(Math.pow(prime, 1/3));
14401 i++;
14402 }
14403 },
14404
14405 /**
14406 * Perform one cycle of SHA-256.
14407 * @param {bitArray} words one block of words.
14408 * @private
14409 */
14410 _block:function (words) {
14411 var i, tmp, a, b,
14412 w = words.slice(0),
14413 h = this._h,
14414 k = this._key,
14415 h0 = h[0], h1 = h[1], h2 = h[2], h3 = h[3],
14416 h4 = h[4], h5 = h[5], h6 = h[6], h7 = h[7];
14417
14418 /* Rationale for placement of |0 :
14419 * If a value can overflow is original 32 bits by a factor of more than a few
14420 * million (2^23 ish), there is a possibility that it might overflow the
14421 * 53-bit mantissa and lose precision.
14422 *
14423 * To avoid this, we clamp back to 32 bits by |'ing with 0 on any value that
14424 * propagates around the loop, and on the hash state h[]. I don't believe
14425 * that the clamps on h4 and on h0 are strictly necessary, but it's close
14426 * (for h4 anyway), and better safe than sorry.
14427 *
14428 * The clamps on h[] are necessary for the output to be correct even in the
14429 * common case and for short inputs.
14430 */
14431 for (i=0; i<64; i++) {
14432 // load up the input word for this round
14433 if (i<16) {
14434 tmp = w[i];
14435 } else {
14436 a = w[(i+1 ) & 15];
14437 b = w[(i+14) & 15];
14438 tmp = w[i&15] = ((a>>>7 ^ a>>>18 ^ a>>>3 ^ a<<25 ^ a<<14) +
14439 (b>>>17 ^ b>>>19 ^ b>>>10 ^ b<<15 ^ b<<13) +
14440 w[i&15] + w[(i+9) & 15]) | 0;
14441 }
14442
14443 tmp = (tmp + h7 + (h4>>>6 ^ h4>>>11 ^ h4>>>25 ^ h4<<26 ^ h4<<21 ^ h4<<7) + (h6 ^ h4&(h5^h6)) + k[i]); // | 0;
14444
14445 // shift register
14446 h7 = h6; h6 = h5; h5 = h4;
14447 h4 = h3 + tmp | 0;
14448 h3 = h2; h2 = h1; h1 = h0;
14449
14450 h0 = (tmp + ((h1&h2) ^ (h3&(h1^h2))) + (h1>>>2 ^ h1>>>13 ^ h1>>>22 ^ h1<<30 ^ h1<<19 ^ h1<<10)) | 0;
14451 }
14452
14453 h[0] = h[0]+h0 | 0;
14454 h[1] = h[1]+h1 | 0;
14455 h[2] = h[2]+h2 | 0;
14456 h[3] = h[3]+h3 | 0;
14457 h[4] = h[4]+h4 | 0;
14458 h[5] = h[5]+h5 | 0;
14459 h[6] = h[6]+h6 | 0;
14460 h[7] = h[7]+h7 | 0;
14461 }
14462 };
14463 </script>
14464 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
14465 WORDLISTS["english"] = [
14466 "abandon","ability","able","about","above","absent","absorb","abstract","absurd","abuse",
14467 "access","accident","account","accuse","achieve","acid","acoustic","acquire","across","act",
14468 "action","actor","actress","actual","adapt","add","addict","address","adjust","admit",
14469 "adult","advance","advice","aerobic","affair","afford","afraid","again","age","agent",
14470 "agree","ahead","aim","air","airport","aisle","alarm","album","alcohol","alert",
14471 "alien","all","alley","allow","almost","alone","alpha","already","also","alter",
14472 "always","amateur","amazing","among","amount","amused","analyst","anchor","ancient","anger",
14473 "angle","angry","animal","ankle","announce","annual","another","answer","antenna","antique",
14474 "anxiety","any","apart","apology","appear","apple","approve","april","arch","arctic",
14475 "area","arena","argue","arm","armed","armor","army","around","arrange","arrest",
14476 "arrive","arrow","art","artefact","artist","artwork","ask","aspect","assault","asset",
14477 "assist","assume","asthma","athlete","atom","attack","attend","attitude","attract","auction",
14478 "audit","august","aunt","author","auto","autumn","average","avocado","avoid","awake",
14479 "aware","away","awesome","awful","awkward","axis","baby","bachelor","bacon","badge",
14480 "bag","balance","balcony","ball","bamboo","banana","banner","bar","barely","bargain",
14481 "barrel","base","basic","basket","battle","beach","bean","beauty","because","become",
14482 "beef","before","begin","behave","behind","believe","below","belt","bench","benefit",
14483 "best","betray","better","between","beyond","bicycle","bid","bike","bind","biology",
14484 "bird","birth","bitter","black","blade","blame","blanket","blast","bleak","bless",
14485 "blind","blood","blossom","blouse","blue","blur","blush","board","boat","body",
14486 "boil","bomb","bone","bonus","book","boost","border","boring","borrow","boss",
14487 "bottom","bounce","box","boy","bracket","brain","brand","brass","brave","bread",
14488 "breeze","brick","bridge","brief","bright","bring","brisk","broccoli","broken","bronze",
14489 "broom","brother","brown","brush","bubble","buddy","budget","buffalo","build","bulb",
14490 "bulk","bullet","bundle","bunker","burden","burger","burst","bus","business","busy",
14491 "butter","buyer","buzz","cabbage","cabin","cable","cactus","cage","cake","call",
14492 "calm","camera","camp","can","canal","cancel","candy","cannon","canoe","canvas",
14493 "canyon","capable","capital","captain","car","carbon","card","cargo","carpet","carry",
14494 "cart","case","cash","casino","castle","casual","cat","catalog","catch","category",
14495 "cattle","caught","cause","caution","cave","ceiling","celery","cement","census","century",
14496 "cereal","certain","chair","chalk","champion","change","chaos","chapter","charge","chase",
14497 "chat","cheap","check","cheese","chef","cherry","chest","chicken","chief","child",
14498 "chimney","choice","choose","chronic","chuckle","chunk","churn","cigar","cinnamon","circle",
14499 "citizen","city","civil","claim","clap","clarify","claw","clay","clean","clerk",
14500 "clever","click","client","cliff","climb","clinic","clip","clock","clog","close",
14501 "cloth","cloud","clown","club","clump","cluster","clutch","coach","coast","coconut",
14502 "code","coffee","coil","coin","collect","color","column","combine","come","comfort",
14503 "comic","common","company","concert","conduct","confirm","congress","connect","consider","control",
14504 "convince","cook","cool","copper","copy","coral","core","corn","correct","cost",
14505 "cotton","couch","country","couple","course","cousin","cover","coyote","crack","cradle",
14506 "craft","cram","crane","crash","crater","crawl","crazy","cream","credit","creek",
14507 "crew","cricket","crime","crisp","critic","crop","cross","crouch","crowd","crucial",
14508 "cruel","cruise","crumble","crunch","crush","cry","crystal","cube","culture","cup",
14509 "cupboard","curious","current","curtain","curve","cushion","custom","cute","cycle","dad",
14510 "damage","damp","dance","danger","daring","dash","daughter","dawn","day","deal",
14511 "debate","debris","decade","december","decide","decline","decorate","decrease","deer","defense",
14512 "define","defy","degree","delay","deliver","demand","demise","denial","dentist","deny",
14513 "depart","depend","deposit","depth","deputy","derive","describe","desert","design","desk",
14514 "despair","destroy","detail","detect","develop","device","devote","diagram","dial","diamond",
14515 "diary","dice","diesel","diet","differ","digital","dignity","dilemma","dinner","dinosaur",
14516 "direct","dirt","disagree","discover","disease","dish","dismiss","disorder","display","distance",
14517 "divert","divide","divorce","dizzy","doctor","document","dog","doll","dolphin","domain",
14518 "donate","donkey","donor","door","dose","double","dove","draft","dragon","drama",
14519 "drastic","draw","dream","dress","drift","drill","drink","drip","drive","drop",
14520 "drum","dry","duck","dumb","dune","during","dust","dutch","duty","dwarf",
14521 "dynamic","eager","eagle","early","earn","earth","easily","east","easy","echo",
14522 "ecology","economy","edge","edit","educate","effort","egg","eight","either","elbow",
14523 "elder","electric","elegant","element","elephant","elevator","elite","else","embark","embody",
14524 "embrace","emerge","emotion","employ","empower","empty","enable","enact","end","endless",
14525 "endorse","enemy","energy","enforce","engage","engine","enhance","enjoy","enlist","enough",
14526 "enrich","enroll","ensure","enter","entire","entry","envelope","episode","equal","equip",
14527 "era","erase","erode","erosion","error","erupt","escape","essay","essence","estate",
14528 "eternal","ethics","evidence","evil","evoke","evolve","exact","example","excess","exchange",
14529 "excite","exclude","excuse","execute","exercise","exhaust","exhibit","exile","exist","exit",
14530 "exotic","expand","expect","expire","explain","expose","express","extend","extra","eye",
14531 "eyebrow","fabric","face","faculty","fade","faint","faith","fall","false","fame",
14532 "family","famous","fan","fancy","fantasy","farm","fashion","fat","fatal","father",
14533 "fatigue","fault","favorite","feature","february","federal","fee","feed","feel","female",
14534 "fence","festival","fetch","fever","few","fiber","fiction","field","figure","file",
14535 "film","filter","final","find","fine","finger","finish","fire","firm","first",
14536 "fiscal","fish","fit","fitness","fix","flag","flame","flash","flat","flavor",
14537 "flee","flight","flip","float","flock","floor","flower","fluid","flush","fly",
14538 "foam","focus","fog","foil","fold","follow","food","foot","force","forest",
14539 "forget","fork","fortune","forum","forward","fossil","foster","found","fox","fragile",
14540 "frame","frequent","fresh","friend","fringe","frog","front","frost","frown","frozen",
14541 "fruit","fuel","fun","funny","furnace","fury","future","gadget","gain","galaxy",
14542 "gallery","game","gap","garage","garbage","garden","garlic","garment","gas","gasp",
14543 "gate","gather","gauge","gaze","general","genius","genre","gentle","genuine","gesture",
14544 "ghost","giant","gift","giggle","ginger","giraffe","girl","give","glad","glance",
14545 "glare","glass","glide","glimpse","globe","gloom","glory","glove","glow","glue",
14546 "goat","goddess","gold","good","goose","gorilla","gospel","gossip","govern","gown",
14547 "grab","grace","grain","grant","grape","grass","gravity","great","green","grid",
14548 "grief","grit","grocery","group","grow","grunt","guard","guess","guide","guilt",
14549 "guitar","gun","gym","habit","hair","half","hammer","hamster","hand","happy",
14550 "harbor","hard","harsh","harvest","hat","have","hawk","hazard","head","health",
14551 "heart","heavy","hedgehog","height","hello","helmet","help","hen","hero","hidden",
14552 "high","hill","hint","hip","hire","history","hobby","hockey","hold","hole",
14553 "holiday","hollow","home","honey","hood","hope","horn","horror","horse","hospital",
14554 "host","hotel","hour","hover","hub","huge","human","humble","humor","hundred",
14555 "hungry","hunt","hurdle","hurry","hurt","husband","hybrid","ice","icon","idea",
14556 "identify","idle","ignore","ill","illegal","illness","image","imitate","immense","immune",
14557 "impact","impose","improve","impulse","inch","include","income","increase","index","indicate",
14558 "indoor","industry","infant","inflict","inform","inhale","inherit","initial","inject","injury",
14559 "inmate","inner","innocent","input","inquiry","insane","insect","inside","inspire","install",
14560 "intact","interest","into","invest","invite","involve","iron","island","isolate","issue",
14561 "item","ivory","jacket","jaguar","jar","jazz","jealous","jeans","jelly","jewel",
14562 "job","join","joke","journey","joy","judge","juice","jump","jungle","junior",
14563 "junk","just","kangaroo","keen","keep","ketchup","key","kick","kid","kidney",
14564 "kind","kingdom","kiss","kit","kitchen","kite","kitten","kiwi","knee","knife",
14565 "knock","know","lab","label","labor","ladder","lady","lake","lamp","language",
14566 "laptop","large","later","latin","laugh","laundry","lava","law","lawn","lawsuit",
14567 "layer","lazy","leader","leaf","learn","leave","lecture","left","leg","legal",
14568 "legend","leisure","lemon","lend","length","lens","leopard","lesson","letter","level",
14569 "liar","liberty","library","license","life","lift","light","like","limb","limit",
14570 "link","lion","liquid","list","little","live","lizard","load","loan","lobster",
14571 "local","lock","logic","lonely","long","loop","lottery","loud","lounge","love",
14572 "loyal","lucky","luggage","lumber","lunar","lunch","luxury","lyrics","machine","mad",
14573 "magic","magnet","maid","mail","main","major","make","mammal","man","manage",
14574 "mandate","mango","mansion","manual","maple","marble","march","margin","marine","market",
14575 "marriage","mask","mass","master","match","material","math","matrix","matter","maximum",
14576 "maze","meadow","mean","measure","meat","mechanic","medal","media","melody","melt",
14577 "member","memory","mention","menu","mercy","merge","merit","merry","mesh","message",
14578 "metal","method","middle","midnight","milk","million","mimic","mind","minimum","minor",
14579 "minute","miracle","mirror","misery","miss","mistake","mix","mixed","mixture","mobile",
14580 "model","modify","mom","moment","monitor","monkey","monster","month","moon","moral",
14581 "more","morning","mosquito","mother","motion","motor","mountain","mouse","move","movie",
14582 "much","muffin","mule","multiply","muscle","museum","mushroom","music","must","mutual",
14583 "myself","mystery","myth","naive","name","napkin","narrow","nasty","nation","nature",
14584 "near","neck","need","negative","neglect","neither","nephew","nerve","nest","net",
14585 "network","neutral","never","news","next","nice","night","noble","noise","nominee",
14586 "noodle","normal","north","nose","notable","note","nothing","notice","novel","now",
14587 "nuclear","number","nurse","nut","oak","obey","object","oblige","obscure","observe",
14588 "obtain","obvious","occur","ocean","october","odor","off","offer","office","often",
14589 "oil","okay","old","olive","olympic","omit","once","one","onion","online",
14590 "only","open","opera","opinion","oppose","option","orange","orbit","orchard","order",
14591 "ordinary","organ","orient","original","orphan","ostrich","other","outdoor","outer","output",
14592 "outside","oval","oven","over","own","owner","oxygen","oyster","ozone","pact",
14593 "paddle","page","pair","palace","palm","panda","panel","panic","panther","paper",
14594 "parade","parent","park","parrot","party","pass","patch","path","patient","patrol",
14595 "pattern","pause","pave","payment","peace","peanut","pear","peasant","pelican","pen",
14596 "penalty","pencil","people","pepper","perfect","permit","person","pet","phone","photo",
14597 "phrase","physical","piano","picnic","picture","piece","pig","pigeon","pill","pilot",
14598 "pink","pioneer","pipe","pistol","pitch","pizza","place","planet","plastic","plate",
14599 "play","please","pledge","pluck","plug","plunge","poem","poet","point","polar",
14600 "pole","police","pond","pony","pool","popular","portion","position","possible","post",
14601 "potato","pottery","poverty","powder","power","practice","praise","predict","prefer","prepare",
14602 "present","pretty","prevent","price","pride","primary","print","priority","prison","private",
14603 "prize","problem","process","produce","profit","program","project","promote","proof","property",
14604 "prosper","protect","proud","provide","public","pudding","pull","pulp","pulse","pumpkin",
14605 "punch","pupil","puppy","purchase","purity","purpose","purse","push","put","puzzle",
14606 "pyramid","quality","quantum","quarter","question","quick","quit","quiz","quote","rabbit",
14607 "raccoon","race","rack","radar","radio","rail","rain","raise","rally","ramp",
14608 "ranch","random","range","rapid","rare","rate","rather","raven","raw","razor",
14609 "ready","real","reason","rebel","rebuild","recall","receive","recipe","record","recycle",
14610 "reduce","reflect","reform","refuse","region","regret","regular","reject","relax","release",
14611 "relief","rely","remain","remember","remind","remove","render","renew","rent","reopen",
14612 "repair","repeat","replace","report","require","rescue","resemble","resist","resource","response",
14613 "result","retire","retreat","return","reunion","reveal","review","reward","rhythm","rib",
14614 "ribbon","rice","rich","ride","ridge","rifle","right","rigid","ring","riot",
14615 "ripple","risk","ritual","rival","river","road","roast","robot","robust","rocket",
14616 "romance","roof","rookie","room","rose","rotate","rough","round","route","royal",
14617 "rubber","rude","rug","rule","run","runway","rural","sad","saddle","sadness",
14618 "safe","sail","salad","salmon","salon","salt","salute","same","sample","sand",
14619 "satisfy","satoshi","sauce","sausage","save","say","scale","scan","scare","scatter",
14620 "scene","scheme","school","science","scissors","scorpion","scout","scrap","screen","script",
14621 "scrub","sea","search","season","seat","second","secret","section","security","seed",
14622 "seek","segment","select","sell","seminar","senior","sense","sentence","series","service",
14623 "session","settle","setup","seven","shadow","shaft","shallow","share","shed","shell",
14624 "sheriff","shield","shift","shine","ship","shiver","shock","shoe","shoot","shop",
14625 "short","shoulder","shove","shrimp","shrug","shuffle","shy","sibling","sick","side",
14626 "siege","sight","sign","silent","silk","silly","silver","similar","simple","since",
14627 "sing","siren","sister","situate","six","size","skate","sketch","ski","skill",
14628 "skin","skirt","skull","slab","slam","sleep","slender","slice","slide","slight",
14629 "slim","slogan","slot","slow","slush","small","smart","smile","smoke","smooth",
14630 "snack","snake","snap","sniff","snow","soap","soccer","social","sock","soda",
14631 "soft","solar","soldier","solid","solution","solve","someone","song","soon","sorry",
14632 "sort","soul","sound","soup","source","south","space","spare","spatial","spawn",
14633 "speak","special","speed","spell","spend","sphere","spice","spider","spike","spin",
14634 "spirit","split","spoil","sponsor","spoon","sport","spot","spray","spread","spring",
14635 "spy","square","squeeze","squirrel","stable","stadium","staff","stage","stairs","stamp",
14636 "stand","start","state","stay","steak","steel","stem","step","stereo","stick",
14637 "still","sting","stock","stomach","stone","stool","story","stove","strategy","street",
14638 "strike","strong","struggle","student","stuff","stumble","style","subject","submit","subway",
14639 "success","such","sudden","suffer","sugar","suggest","suit","summer","sun","sunny",
14640 "sunset","super","supply","supreme","sure","surface","surge","surprise","surround","survey",
14641 "suspect","sustain","swallow","swamp","swap","swarm","swear","sweet","swift","swim",
14642 "swing","switch","sword","symbol","symptom","syrup","system","table","tackle","tag",
14643 "tail","talent","talk","tank","tape","target","task","taste","tattoo","taxi",
14644 "teach","team","tell","ten","tenant","tennis","tent","term","test","text",
14645 "thank","that","theme","then","theory","there","they","thing","this","thought",
14646 "three","thrive","throw","thumb","thunder","ticket","tide","tiger","tilt","timber",
14647 "time","tiny","tip","tired","tissue","title","toast","tobacco","today","toddler",
14648 "toe","together","toilet","token","tomato","tomorrow","tone","tongue","tonight","tool",
14649 "tooth","top","topic","topple","torch","tornado","tortoise","toss","total","tourist",
14650 "toward","tower","town","toy","track","trade","traffic","tragic","train","transfer",
14651 "trap","trash","travel","tray","treat","tree","trend","trial","tribe","trick",
14652 "trigger","trim","trip","trophy","trouble","truck","true","truly","trumpet","trust",
14653 "truth","try","tube","tuition","tumble","tuna","tunnel","turkey","turn","turtle",
14654 "twelve","twenty","twice","twin","twist","two","type","typical","ugly","umbrella",
14655 "unable","unaware","uncle","uncover","under","undo","unfair","unfold","unhappy","uniform",
14656 "unique","unit","universe","unknown","unlock","until","unusual","unveil","update","upgrade",
14657 "uphold","upon","upper","upset","urban","urge","usage","use","used","useful",
14658 "useless","usual","utility","vacant","vacuum","vague","valid","valley","valve","van",
14659 "vanish","vapor","various","vast","vault","vehicle","velvet","vendor","venture","venue",
14660 "verb","verify","version","very","vessel","veteran","viable","vibrant","vicious","victory",
14661 "video","view","village","vintage","violin","virtual","virus","visa","visit","visual",
14662 "vital","vivid","vocal","voice","void","volcano","volume","vote","voyage","wage",
14663 "wagon","wait","walk","wall","walnut","want","warfare","warm","warrior","wash",
14664 "wasp","waste","water","wave","way","wealth","weapon","wear","weasel","weather",
14665 "web","wedding","weekend","weird","welcome","west","wet","whale","what","wheat",
14666 "wheel","when","where","whip","whisper","wide","width","wife","wild","will",
14667 "win","window","wine","wing","wink","winner","winter","wire","wisdom","wise",
14668 "wish","witness","wolf","woman","wonder","wood","wool","word","work","world",
14669 "worry","worth","wrap","wreck","wrestle","wrist","write","wrong","yard","year",
14670 "yellow","you","young","youth","zebra","zero","zone","zoo"]
14671 </script>
14672 <script>/*
14673 * Copyright (c) 2013 Pavol Rusnak
14674 *
14675 * Permission is hereby granted, free of charge, to any person obtaining a copy of
14676 * this software and associated documentation files (the "Software"), to deal in
14677 * the Software without restriction, including without limitation the rights to
14678 * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
14679 * of the Software, and to permit persons to whom the Software is furnished to do
14680 * so, subject to the following conditions:
14681 *
14682 * The above copyright notice and this permission notice shall be included in all
14683 * copies or substantial portions of the Software.
14684 *
14685 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14686 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
14687 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
14688 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
14689 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
14690 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
14691 */
14692
14693 /*
14694 * Javascript port from python by Ian Coleman
14695 *
14696 * Requires code from sjcl
14697 * https://github.com/bitwiseshiftleft/sjcl
14698 */
14699
14700 var Mnemonic = function(language) {
14701
14702 var PBKDF2_ROUNDS = 2048;
14703 var RADIX = 2048;
14704
14705 var self = this;
14706 var wordlist = [];
14707
14708 var hmacSHA512 = function(key) {
14709 var hasher = new sjcl.misc.hmac(key, sjcl.hash.sha512);
14710 this.encrypt = function() {
14711 return hasher.encrypt.apply(hasher, arguments);
14712 };
14713 };
14714
14715 function init() {
14716 wordlist = WORDLISTS[language];
14717 if (wordlist.length != RADIX) {
14718 err = 'Wordlist should contain ' + RADIX + ' words, but it contains ' + wordlist.length + ' words.';
14719 throw err;
14720 }
14721 }
14722
14723 self.generate = function(strength) {
14724 strength = strength || 128;
14725 var r = strength % 32;
14726 if (r > 0) {
14727 throw 'Strength should be divisible by 32, but it is not (' + r + ').';
14728 }
14729 var hasStrongCrypto = 'crypto' in window && window['crypto'] !== null;
14730 if (!hasStrongCrypto) {
14731 throw 'Mnemonic should be generated with strong randomness, but crypto.getRandomValues is unavailable';
14732 }
14733 var buffer = new Uint8Array(strength / 8);
14734 var data = crypto.getRandomValues(buffer);
14735 return self.toMnemonic(data);
14736 }
14737
14738 self.toMnemonic = function(byteArray) {
14739 if (byteArray.length % 4 > 0) {
14740 throw 'Data length in bits should be divisible by 32, but it is not (' + byteArray.length + ' bytes = ' + byteArray.length*8 + ' bits).'
14741 }
14742
14743 //h = hashlib.sha256(data).hexdigest()
14744 var data = byteArrayToWordArray(byteArray);
14745 var hash = sjcl.hash.sha256.hash(data);
14746 var h = sjcl.codec.hex.fromBits(hash);
14747
14748 // b is a binary string, eg '00111010101100...'
14749 //b = bin(int(binascii.hexlify(data), 16))[2:].zfill(len(data) * 8) + \
14750 // bin(int(h, 16))[2:].zfill(256)[:len(data) * 8 / 32]
14751 //
14752 // a = bin(int(binascii.hexlify(data), 16))[2:].zfill(len(data) * 8)
14753 // c = bin(int(h, 16))[2:].zfill(256)
14754 // d = c[:len(data) * 8 / 32]
14755 var a = byteArrayToBinaryString(byteArray);
14756 var c = zfill(hexStringToBinaryString(h), 256);
14757 var d = c.substring(0, byteArray.length * 8 / 32);
14758 // b = line1 + line2
14759 var b = a + d;
14760
14761 var result = [];
14762 var blen = b.length / 11;
14763 for (var i=0; i<blen; i++) {
14764 var idx = parseInt(b.substring(i * 11, (i + 1) * 11), 2);
14765 result.push(wordlist[idx]);
14766 }
14767 return result.join(' ');
14768 }
14769
14770 self.check = function(mnemonic) {
14771 var mnemonic = mnemonic.split(' ')
14772 if (mnemonic.length % 3 > 0) {
14773 return false
14774 }
14775 // idx = map(lambda x: bin(self.wordlist.index(x))[2:].zfill(11), mnemonic)
14776 var idx = [];
14777 for (var i=0; i<mnemonic.length; i++) {
14778 var word = mnemonic[i];
14779 var wordIndex = wordlist.indexOf(word);
14780 if (wordIndex == -1) {
14781 return false;
14782 }
14783 var binaryIndex = zfill(wordIndex.toString(2), 11);
14784 idx.push(binaryIndex);
14785 }
14786 var b = idx.join('');
14787 var l = b.length;
14788 //d = b[:l / 33 * 32]
14789 //h = b[-l / 33:]
14790 var d = b.substring(0, l / 33 * 32);
14791 var h = b.substring(l - l / 33, l);
14792 //nd = binascii.unhexlify(hex(int(d, 2))[2:].rstrip('L').zfill(l / 33 * 8))
14793 var nd = binaryStringToWordArray(d);
14794 //nh = bin(int(hashlib.sha256(nd).hexdigest(), 16))[2:].zfill(256)[:l / 33]
14795 var ndHash = sjcl.hash.sha256.hash(nd);
14796 var ndHex = sjcl.codec.hex.fromBits(ndHash);
14797 var ndBstr = zfill(hexStringToBinaryString(ndHex), 256);
14798 var nh = ndBstr.substring(0,l/33);
14799 return h == nh;
14800 }
14801
14802 self.toSeed = function(mnemonic, passphrase) {
14803 passphrase = passphrase || '';
14804 mnemonic = self.normalizeString(mnemonic).split(' ').filter(function(x) { return x.length; }).join(' ');
14805 passphrase = self.normalizeString(passphrase)
14806 passphrase = "mnemonic" + passphrase;
14807 var mnemonicBits = sjcl.codec.utf8String.toBits(mnemonic);
14808 var passphraseBits = sjcl.codec.utf8String.toBits(passphrase);
14809 var result = sjcl.misc.pbkdf2(mnemonicBits, passphraseBits, PBKDF2_ROUNDS, 512, hmacSHA512);
14810 var hashHex = sjcl.codec.hex.fromBits(result);
14811 return hashHex;
14812 }
14813
14814 self.normalizeString = function(str) {
14815 if (typeof str.normalize == "function") {
14816 return str.normalize("NFKD");
14817 }
14818 else {
14819 // TODO decide how to handle this in the future.
14820 // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize
14821 return str;
14822 }
14823 }
14824
14825 function byteArrayToWordArray(data) {
14826 var a = [];
14827 for (var i=0; i<data.length/4; i++) {
14828 v = 0;
14829 v += data[i*4 + 0] << 8 * 3;
14830 v += data[i*4 + 1] << 8 * 2;
14831 v += data[i*4 + 2] << 8 * 1;
14832 v += data[i*4 + 3] << 8 * 0;
14833 a.push(v);
14834 }
14835 return a;
14836 }
14837
14838 function byteArrayToBinaryString(data) {
14839 var bin = "";
14840 for (var i=0; i<data.length; i++) {
14841 bin += zfill(data[i].toString(2), 8);
14842 }
14843 return bin;
14844 }
14845
14846 function hexStringToBinaryString(hexString) {
14847 binaryString = "";
14848 for (var i=0; i<hexString.length; i++) {
14849 binaryString += zfill(parseInt(hexString[i], 16).toString(2),4);
14850 }
14851 return binaryString;
14852 }
14853
14854 function binaryStringToWordArray(binary) {
14855 var aLen = binary.length / 32;
14856 var a = [];
14857 for (var i=0; i<aLen; i++) {
14858 var valueStr = binary.substring(0,32);
14859 var value = parseInt(valueStr, 2);
14860 a.push(value);
14861 binary = binary.slice(32);
14862 }
14863 return a;
14864 }
14865
14866 // Pad a numeric string on the left with zero digits until the given width
14867 // is reached.
14868 // Note this differs to the python implementation because it does not
14869 // handle numbers starting with a sign.
14870 function zfill(source, length) {
14871 source = source.toString();
14872 while (source.length < length) {
14873 source = '0' + source;
14874 }
14875 return source;
14876 }
14877
14878 init();
14879
14880 }
14881 </script>
14882 <script>(function() {
14883
14884 var mnemonic = new Mnemonic("english");
14885 var seed = null
14886 var bip32RootKey = null;
14887 var bip32ExtendedKey = null;
14888 var network = bitcoin.networks.bitcoin;
14889 var addressRowTemplate = $("#address-row-template");
14890
14891 var showIndex = true;
14892 var showAddress = true;
14893 var showPrivKey = true;
14894
14895 var phraseChangeTimeoutEvent = null;
14896 var rootKeyChangedTimeoutEvent = null;
14897
14898 var DOM = {};
14899 DOM.network = $(".network");
14900 DOM.phraseNetwork = $("#network-phrase");
14901 DOM.phrase = $(".phrase");
14902 DOM.passphrase = $(".passphrase");
14903 DOM.generate = $(".generate");
14904 DOM.seed = $(".seed");
14905 DOM.rootKey = $(".root-key");
14906 DOM.extendedPrivKey = $(".extended-priv-key");
14907 DOM.extendedPubKey = $(".extended-pub-key");
14908 DOM.bip32tab = $("#bip32-tab");
14909 DOM.bip44tab = $("#bip44-tab");
14910 DOM.bip32panel = $("#bip32");
14911 DOM.bip44panel = $("#bip44");
14912 DOM.bip32path = $("#bip32-path");
14913 DOM.bip44path = $("#bip44-path");
14914 DOM.bip44purpose = $("#bip44 .purpose");
14915 DOM.bip44coin = $("#bip44 .coin");
14916 DOM.bip44account = $("#bip44 .account");
14917 DOM.bip44change = $("#bip44 .change");
14918 DOM.strength = $(".strength");
14919 DOM.hardenedAddresses = $(".hardened-addresses");
14920 DOM.addresses = $(".addresses");
14921 DOM.rowsToAdd = $(".rows-to-add");
14922 DOM.more = $(".more");
14923 DOM.feedback = $(".feedback");
14924 DOM.tab = $(".derivation-type a");
14925 DOM.indexToggle = $(".index-toggle");
14926 DOM.addressToggle = $(".address-toggle");
14927 DOM.privateKeyToggle = $(".private-key-toggle");
14928
14929 function init() {
14930 // Events
14931 DOM.network.on("change", networkChanged);
14932 DOM.phrase.on("input", delayedPhraseChanged);
14933 DOM.passphrase.on("input", delayedPhraseChanged);
14934 DOM.generate.on("click", generateClicked);
14935 DOM.more.on("click", showMore);
14936 DOM.rootKey.on("input", delayedRootKeyChanged);
14937 DOM.bip32path.on("input", calcForDerivationPath);
14938 DOM.bip44purpose.on("input", calcForDerivationPath);
14939 DOM.bip44coin.on("input", calcForDerivationPath);
14940 DOM.bip44account.on("input", calcForDerivationPath);
14941 DOM.bip44change.on("input", calcForDerivationPath);
14942 DOM.tab.on("shown.bs.tab", calcForDerivationPath);
14943 DOM.hardenedAddresses.on("change", calcForDerivationPath);
14944 DOM.indexToggle.on("click", toggleIndexes);
14945 DOM.addressToggle.on("click", toggleAddresses);
14946 DOM.privateKeyToggle.on("click", togglePrivateKeys);
14947 disableForms();
14948 hidePending();
14949 hideValidationError();
14950 populateNetworkSelect();
14951 }
14952
14953 // Event handlers
14954
14955 function networkChanged(e) {
14956 var networkIndex = e.target.value;
14957 networks[networkIndex].onSelect();
14958 if (seed != null) {
14959 phraseChanged();
14960 }
14961 else {
14962 rootKeyChanged();
14963 }
14964 }
14965
14966 function delayedPhraseChanged() {
14967 hideValidationError();
14968 showPending();
14969 if (phraseChangeTimeoutEvent != null) {
14970 clearTimeout(phraseChangeTimeoutEvent);
14971 }
14972 phraseChangeTimeoutEvent = setTimeout(phraseChanged, 400);
14973 }
14974
14975 function phraseChanged() {
14976 showPending();
14977 hideValidationError();
14978 // Get the mnemonic phrase
14979 var phrase = DOM.phrase.val();
14980 var errorText = findPhraseErrors(phrase);
14981 if (errorText) {
14982 showValidationError(errorText);
14983 return;
14984 }
14985 // Calculate and display
14986 var passphrase = DOM.passphrase.val();
14987 calcBip32RootKeyFromSeed(phrase, passphrase);
14988 calcForDerivationPath();
14989 hidePending();
14990 }
14991
14992 function delayedRootKeyChanged() {
14993 // Warn if there is an existing mnemonic or passphrase.
14994 if (DOM.phrase.val().length > 0 || DOM.passphrase.val().length > 0) {
14995 if (!confirm("This will clear existing mnemonic and passphrase")) {
14996 DOM.rootKey.val(bip32RootKey);
14997 return
14998 }
14999 }
15000 hideValidationError();
15001 showPending();
15002 // Clear existing mnemonic and passphrase
15003 DOM.phrase.val("");
15004 DOM.passphrase.val("");
15005 seed = null;
15006 if (rootKeyChangedTimeoutEvent != null) {
15007 clearTimeout(rootKeyChangedTimeoutEvent);
15008 }
15009 rootKeyChangedTimeoutEvent = setTimeout(rootKeyChanged, 400);
15010 }
15011
15012 function rootKeyChanged() {
15013 showPending();
15014 hideValidationError();
15015 // Validate the root key TODO
15016 var rootKeyBase58 = DOM.rootKey.val();
15017 var errorText = validateRootKey(rootKeyBase58);
15018 if (errorText) {
15019 showValidationError(errorText);
15020 return;
15021 }
15022 // Calculate and display
15023 calcBip32RootKeyFromBase58(rootKeyBase58);
15024 calcForDerivationPath();
15025 hidePending();
15026 }
15027
15028 function calcForDerivationPath() {
15029 showPending();
15030 hideValidationError();
15031 // Get the derivation path
15032 var derivationPath = getDerivationPath();
15033 var errorText = findDerivationPathErrors(derivationPath);
15034 if (errorText) {
15035 showValidationError(errorText);
15036 return;
15037 }
15038 calcBip32ExtendedKey(derivationPath);
15039 displayBip32Info();
15040 hidePending();
15041 }
15042
15043 function generateClicked() {
15044 clearDisplay();
15045 showPending();
15046 setTimeout(function() {
15047 var phrase = generateRandomPhrase();
15048 if (!phrase) {
15049 return;
15050 }
15051 phraseChanged();
15052 }, 50);
15053 }
15054
15055 function toggleIndexes() {
15056 showIndex = !showIndex;
15057 $("td.index span").toggleClass("invisible");
15058 }
15059
15060 function toggleAddresses() {
15061 showAddress = !showAddress;
15062 $("td.address span").toggleClass("invisible");
15063 }
15064
15065 function togglePrivateKeys() {
15066 showPrivKey = !showPrivKey;
15067 $("td.privkey span").toggleClass("invisible");
15068 }
15069
15070 // Private methods
15071
15072 function generateRandomPhrase() {
15073 if (!hasStrongRandom()) {
15074 var errorText = "This browser does not support strong randomness";
15075 showValidationError(errorText);
15076 return;
15077 }
15078 var numWords = parseInt(DOM.strength.val());
15079 var strength = numWords / 3 * 32;
15080 var words = mnemonic.generate(strength);
15081 DOM.phrase.val(words);
15082 return words;
15083 }
15084
15085 function calcBip32RootKeyFromSeed(phrase, passphrase) {
15086 seed = mnemonic.toSeed(phrase, passphrase);
15087 bip32RootKey = bitcoin.HDNode.fromSeedHex(seed, network);
15088 }
15089
15090 function calcBip32RootKeyFromBase58(rootKeyBase58) {
15091 bip32RootKey = bitcoin.HDNode.fromBase58(rootKeyBase58, network);
15092 }
15093
15094 function calcBip32ExtendedKey(path) {
15095 bip32ExtendedKey = bip32RootKey;
15096 // Derive the key from the path
15097 var pathBits = path.split("/");
15098 for (var i=0; i<pathBits.length; i++) {
15099 var bit = pathBits[i];
15100 var index = parseInt(bit);
15101 if (isNaN(index)) {
15102 continue;
15103 }
15104 var hardened = bit[bit.length-1] == "'";
15105 if (hardened) {
15106 bip32ExtendedKey = bip32ExtendedKey.deriveHardened(index);
15107 }
15108 else {
15109 bip32ExtendedKey = bip32ExtendedKey.derive(index);
15110 }
15111 }
15112 }
15113
15114 function showValidationError(errorText) {
15115 DOM.feedback
15116 .text(errorText)
15117 .show();
15118 }
15119
15120 function hideValidationError() {
15121 DOM.feedback
15122 .text("")
15123 .hide();
15124 }
15125
15126 function findPhraseErrors(phrase) {
15127 // TODO make this right
15128 // Preprocess the words
15129 phrase = mnemonic.normalizeString(phrase);
15130 var parts = phrase.split(" ");
15131 var proper = [];
15132 for (var i=0; i<parts.length; i++) {
15133 var part = parts[i];
15134 if (part.length > 0) {
15135 // TODO check that lowercasing is always valid to do
15136 proper.push(part.toLowerCase());
15137 }
15138 }
15139 var properPhrase = proper.join(' ');
15140 // Check each word
15141 for (var i=0; i<proper.length; i++) {
15142 var word = proper[i];
15143 if (WORDLISTS["english"].indexOf(word) == -1) {
15144 console.log("Finding closest match to " + word);
15145 var nearestWord = findNearestWord(word);
15146 return word + " not in wordlist, did you mean " + nearestWord + "?";
15147 }
15148 }
15149 // Check the words are valid
15150 var isValid = mnemonic.check(properPhrase);
15151 if (!isValid) {
15152 return "Invalid mnemonic";
15153 }
15154 return false;
15155 }
15156
15157 function validateRootKey(rootKeyBase58) {
15158 try {
15159 bitcoin.HDNode.fromBase58(rootKeyBase58);
15160 }
15161 catch (e) {
15162 return "Invalid root key";
15163 }
15164 return "";
15165 }
15166
15167 function getDerivationPath() {
15168 if (DOM.bip44tab.hasClass("active")) {
15169 var purpose = parseIntNoNaN(DOM.bip44purpose.val(), 44);
15170 var coin = parseIntNoNaN(DOM.bip44coin.val(), 0);
15171 var account = parseIntNoNaN(DOM.bip44account.val(), 0);
15172 var change = parseIntNoNaN(DOM.bip44change.val(), 0);
15173 var path = "m/";
15174 path += purpose + "'/";
15175 path += coin + "'/";
15176 path += account + "'/";
15177 path += change;
15178 DOM.bip44path.val(path);
15179 var derivationPath = DOM.bip44path.val();
15180 console.log("Using derivation path from BIP44 tab: " + derivationPath);
15181 return derivationPath;
15182 }
15183 else if (DOM.bip32tab.hasClass("active")) {
15184 var derivationPath = DOM.bip32path.val();
15185 console.log("Using derivation path from BIP32 tab: " + derivationPath);
15186 return derivationPath;
15187 }
15188 else {
15189 console.log("Unknown derivation path");
15190 }
15191 }
15192
15193 function findDerivationPathErrors(path) {
15194 // TODO is not perfect but is better than nothing
15195 // Inspired by
15196 // https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#test-vectors
15197 // and
15198 // https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#extended-keys
15199 var maxDepth = 255; // TODO verify this!!
15200 var maxIndexValue = Math.pow(2, 31); // TODO verify this!!
15201 if (path[0] != "m") {
15202 return "First character must be 'm'";
15203 }
15204 if (path.length > 1) {
15205 if (path[1] != "/") {
15206 return "Separator must be '/'";
15207 }
15208 var indexes = path.split("/");
15209 if (indexes.length > maxDepth) {
15210 return "Derivation depth is " + indexes.length + ", must be less than " + maxDepth;
15211 }
15212 for (var depth = 1; depth<indexes.length; depth++) {
15213 var index = indexes[depth];
15214 var invalidChars = index.replace(/^[0-9]+'?$/g, "")
15215 if (invalidChars.length > 0) {
15216 return "Invalid characters " + invalidChars + " found at depth " + depth;
15217 }
15218 var indexValue = parseInt(index.replace("'", ""));
15219 if (isNaN(depth)) {
15220 return "Invalid number at depth " + depth;
15221 }
15222 if (indexValue > maxIndexValue) {
15223 return "Value of " + indexValue + " at depth " + depth + " must be less than " + maxIndexValue;
15224 }
15225 }
15226 }
15227 return false;
15228 }
15229
15230 function displayBip32Info() {
15231 // Display the key
15232 DOM.seed.val(seed);
15233 var rootKey = bip32RootKey.toBase58();
15234 DOM.rootKey.val(rootKey);
15235 var extendedPrivKey = bip32ExtendedKey.toBase58();
15236 DOM.extendedPrivKey.val(extendedPrivKey);
15237 var extendedPubKey = bip32ExtendedKey.toBase58(false);
15238 DOM.extendedPubKey.val(extendedPubKey);
15239 // Display the addresses and privkeys
15240 clearAddressesList();
15241 displayAddresses(0, 20);
15242 }
15243
15244 function displayAddresses(start, total) {
15245 for (var i=0; i<total; i++) {
15246 var index = i + start;
15247 new TableRow(index);
15248 }
15249 }
15250
15251 function TableRow(index) {
15252
15253 var useHardenedAddresses = DOM.hardenedAddresses.prop("checked");
15254
15255 function init() {
15256 calculateValues();
15257 }
15258
15259 function calculateValues() {
15260 setTimeout(function() {
15261 var key = "";
15262 if (useHardenedAddresses) {
15263 key = bip32ExtendedKey.deriveHardened(index);
15264 }
15265 else {
15266 key = bip32ExtendedKey.derive(index);
15267 }
15268 var address = key.getAddress().toString();
15269 var privkey = key.privKey.toWIF(network);
15270 var indexText = getDerivationPath() + "/" + index;
15271 if (useHardenedAddresses) {
15272 indexText = indexText + "'";
15273 }
15274 addAddressToList(indexText, address, privkey);
15275 }, 50)
15276 }
15277
15278 init();
15279
15280 }
15281
15282 function showMore() {
15283 var start = DOM.addresses.children().length;
15284 var rowsToAdd = parseInt(DOM.rowsToAdd.val());
15285 if (isNaN(rowsToAdd)) {
15286 rowsToAdd = 20;
15287 DOM.rowsToAdd.val("20");
15288 }
15289 if (rowsToAdd > 200) {
15290 var msg = "Generating " + rowsToAdd + " rows could take a while. ";
15291 msg += "Do you want to continue?";
15292 if (!confirm(msg)) {
15293 return;
15294 }
15295 }
15296 displayAddresses(start, rowsToAdd);
15297 }
15298
15299 function clearDisplay() {
15300 clearAddressesList();
15301 clearKey();
15302 hideValidationError();
15303 }
15304
15305 function clearAddressesList() {
15306 DOM.addresses.empty();
15307 }
15308
15309 function clearKey() {
15310 DOM.rootKey.val("");
15311 DOM.extendedPrivKey.val("");
15312 DOM.extendedPubKey.val("");
15313 }
15314
15315 function addAddressToList(indexText, address, privkey) {
15316 var row = $(addressRowTemplate.html());
15317 // Elements
15318 var indexCell = row.find(".index span");
15319 var addressCell = row.find(".address span");
15320 var privkeyCell = row.find(".privkey span");
15321 // Content
15322 indexCell.text(indexText);
15323 addressCell.text(address);
15324 privkeyCell.text(privkey);
15325 // Visibility
15326 if (!showIndex) {
15327 indexCell.addClass("invisible");
15328 }
15329 if (!showAddress) {
15330 addressCell.addClass("invisible");
15331 }
15332 if (!showPrivKey) {
15333 privkeyCell.addClass("invisible");
15334 }
15335 DOM.addresses.append(row);
15336 }
15337
15338 function hasStrongRandom() {
15339 return 'crypto' in window && window['crypto'] !== null;
15340 }
15341
15342 function disableForms() {
15343 $("form").on("submit", function(e) {
15344 e.preventDefault();
15345 });
15346 }
15347
15348 function parseIntNoNaN(val, defaultVal) {
15349 var v = parseInt(val);
15350 if (isNaN(v)) {
15351 return defaultVal;
15352 }
15353 return v;
15354 }
15355
15356 function showPending() {
15357 DOM.feedback
15358 .text("Calculating...")
15359 .show();
15360 }
15361
15362 function findNearestWord(word) {
15363 var words = WORDLISTS["english"];
15364 var minDistance = 99;
15365 var closestWord = words[0];
15366 for (var i=0; i<words.length; i++) {
15367 var comparedTo = words[i];
15368 var distance = Levenshtein.get(word, comparedTo);
15369 if (distance < minDistance) {
15370 closestWord = comparedTo;
15371 minDistance = distance;
15372 }
15373 }
15374 return closestWord;
15375 }
15376
15377 function hidePending() {
15378 DOM.feedback
15379 .text("")
15380 .hide();
15381 }
15382
15383 function populateNetworkSelect() {
15384 for (var i=0; i<networks.length; i++) {
15385 var network = networks[i];
15386 var option = $("<option>");
15387 option.attr("value", i);
15388 option.text(network.name);
15389 DOM.phraseNetwork.append(option);
15390 }
15391 }
15392
15393 var networks = [
15394 {
15395 name: "Bitcoin",
15396 onSelect: function() {
15397 network = bitcoin.networks.bitcoin;
15398 DOM.bip44coin.val(0);
15399 },
15400 },
15401 {
15402 name: "Bitcoin Testnet",
15403 onSelect: function() {
15404 network = bitcoin.networks.testnet;
15405 DOM.bip44coin.val(1);
15406 },
15407 },
15408 {
15409 name: "Litecoin",
15410 onSelect: function() {
15411 network = bitcoin.networks.litecoin;
15412 DOM.bip44coin.val(2);
15413 },
15414 },
15415 {
15416 name: "Dogecoin",
15417 onSelect: function() {
15418 network = bitcoin.networks.dogecoin;
15419 DOM.bip44coin.val(3);
15420 },
15421 },
15422 {
15423 name: "ShadowCash",
15424 onSelect: function() {
15425 network = bitcoin.networks.shadow;
15426 DOM.bip44coin.val(35);
15427 },
15428 },
15429 {
15430 name: "ShadowCash Testnet",
15431 onSelect: function() {
15432 network = bitcoin.networks.shadowtn;
15433 DOM.bip44coin.val(1);
15434 },
15435 },
15436 {
15437 name: "Viacoin",
15438 onSelect: function() {
15439 network = bitcoin.networks.viacoin;
15440 DOM.bip44coin.val(14);
15441 },
15442 },
15443 {
15444 name: "Viacoin Testnet",
15445 onSelect: function() {
15446 network = bitcoin.networks.viacointestnet;
15447 DOM.bip44coin.val(1);
15448 },
15449 },
15450 {
15451 name: "Jumbucks",
15452 onSelect: function() {
15453 network = bitcoin.networks.jumbucks;
15454 DOM.bip44coin.val(26);
15455 },
15456 },
15457 {
15458 name: "CLAM",
15459 onSelect: function() {
15460 network = bitcoin.networks.clam;
15461 DOM.bip44coin.val(23);
15462 },
15463 },
15464 {
15465 name: "DASH",
15466 onSelect: function() {
15467 network = bitcoin.networks.dash;
15468 DOM.bip44coin.val(5);
15469 },
15470 },
15471 {
15472 name: "Namecoin",
15473 onSelect: function() {
15474 network = bitcoin.networks.namecoin;
15475 DOM.bip44coin.val(7);
15476 },
15477 },
15478 {
15479 name: "Peercoin",
15480 onSelect: function() {
15481 network = bitcoin.networks.peercoin;
15482 DOM.bip44coin.val(6);
15483 },
15484 },
15485 ]
15486
15487 init();
15488
15489 })();
15490 </script>
15491 </body>
15492 </html>