4 <meta charset=
"utf-8" />
5 <title>BIP39 - Mnemonic Code
</title>
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=
"DC POS" name=
"author" />
20 .form-control[readonly] {
33 background-color: orange;
37 border:
2px solid #
555;
39 border-bottom-left-radius:
20px
20px;
40 border-bottom-right-radius:
20px
20px;
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);
50 <div class=
"container">
52 <h1 class=
"text-center">Mnemonic Code Converter
</h1>
55 <div class=
"col-md-12">
57 <form class=
"form-horizontal" role=
"form">
58 <div class=
"col-sm-2"></div>
59 <div class=
"col-sm-10">
60 <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>
61 <p>For more info see the
<a href=
"https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki" target=
"_blank">BIP39 spec
</a></p>
63 <div class=
"form-group">
64 <label for=
"phrase" class=
"col-sm-2 control-label">BIP39 Mnemonic
</label>
65 <div class=
"col-sm-10">
66 <textarea id=
"phrase" class=
"phrase form-control"></textarea>
69 <div class=
"form-group">
70 <label for=
"strength" class=
"col-sm-2 control-label">Number of words
</label>
71 <div class=
"col-sm-10">
72 <div class=
"input-group">
73 <select id=
"strength" class=
"strength form-control">
74 <option value=
"3">3</option>
75 <option value=
"6">6</option>
76 <option value=
"9">9</option>
77 <option value=
"12">12</option>
78 <option value=
"15" selected
>15</option>
79 <option value=
"18">18</option>
80 <option value=
"21">21</option>
81 <option value=
"24">24</option>
83 <span class=
"input-group-btn">
84 <button class=
"btn generate">Generate Random Mnemonic
</button>
89 <div class=
"form-group">
90 <label for=
"passphrase" class=
"col-sm-2 control-label">BIP39 Passphrase (optional)
</label>
91 <div class=
"col-sm-10">
92 <textarea id=
"passphrase" class=
"passphrase form-control"></textarea>
95 <div class=
"form-group">
96 <label for=
"seed" class=
"col-sm-2 control-label">BIP39 Seed
</label>
97 <div class=
"col-sm-10">
98 <textarea id=
"seed" class=
"seed form-control" readonly=
"readonly"></textarea>
101 <div class=
"form-group">
102 <label for=
"network-phrase" class=
"col-sm-2 control-label">Coin
</label>
103 <div class=
"col-sm-10">
104 <select id=
"network-phrase" class=
"network form-control">
105 <!-- populated by javascript -->
109 <div class=
"form-group">
110 <label for=
"root-key" class=
"col-sm-2 control-label">BIP32 Root Key
</label>
111 <div class=
"col-sm-10">
112 <textarea id=
"root-key" class=
"root-key form-control"></textarea>
122 <div class=
"col-md-12">
123 <h2>Derivation Path
</h2>
124 <ul class=
"derivation-type nav nav-tabs" role=
"tablist">
125 <li id=
"bip44-tab" class=
"active">
126 <a href=
"#bip44" role=
"tab" data-toggle=
"tab">BIP44
</a>
129 <a href=
"#bip32" role=
"tab" data-toggle=
"tab">BIP32
</a>
132 <div class=
"derivation-type tab-content">
133 <div id=
"bip44" class=
"tab-pane active">
134 <form class=
"form-horizontal" role=
"form">
136 <div class=
"col-sm-2"></div>
137 <div class=
"col-sm-10">
138 <p>For more info see the
<a href=
"https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target=
"_blank">BIP44 spec
</a></p>
140 <div class=
"form-group">
141 <label for=
"purpose" class=
"col-sm-2 control-label">
142 <a href=
"https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#purpose" target=
"_blank">Purpose
</a>
144 <div class=
"col-sm-10">
145 <input id=
"purpose" type=
"text" class=
"purpose form-control" value=
"44">
148 <div class=
"form-group">
149 <label for=
"coin" class=
"col-sm-2 control-label">
150 <a href=
"https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#registered-coin-types" target=
"_blank">Coin
</a>
152 <div class=
"col-sm-10">
153 <input id=
"coin" type=
"text" class=
"coin form-control" value=
"0">
156 <div class=
"form-group">
157 <label for=
"account" class=
"col-sm-2 control-label">
158 <a href=
"https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#account" target=
"_blank">Account
</a>
160 <div class=
"col-sm-10">
161 <input id=
"account" type=
"text" class=
"account form-control" value=
"0">
164 <div class=
"form-group">
165 <label for=
"change" class=
"col-sm-2 control-label">
166 <a href=
"https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#change" target=
"_blank">External / Internal
</a>
168 <div class=
"col-sm-10">
169 <input id=
"change" type=
"text" class=
"change form-control" value=
"0">
172 <div class=
"form-group">
173 <label for=
"bip44-path" class=
"col-sm-2 control-label">BIP32 Derivation Path
</label>
174 <div class=
"col-sm-10">
175 <input id=
"bip44-path" type=
"text" class=
"path form-control" value=
"m/44'/0'/0'/0" readonly=
"readonly">
180 <div id=
"bip32" class=
"tab-pane">
181 <form class=
"form-horizontal" role=
"form">
183 <div class=
"col-sm-2"></div>
184 <div class=
"col-sm-10">
185 <p>For more info see the
<a href=
"https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target=
"_blank">BIP32 spec
</a></p>
187 <div class=
"form-group">
188 <label for=
"bip32-path" class=
"col-sm-2 control-label">BIP32 Derivation Path
</label>
189 <div class=
"col-sm-10">
190 <input id=
"bip32-path" type=
"text" class=
"path form-control" value=
"m/0">
193 <div class=
"form-group">
194 <div class=
"col-sm-2"></div>
195 <label class=
"col-sm-10">
196 <input class=
"hardened-addresses" type=
"checkbox">
197 Use hardened addresses
200 <div class=
"form-group">
201 <label class=
"col-sm-2 control-label">Hive Wallet
</label>
202 <div class=
"col-sm-10">
203 <p class=
"form-control no-border">
204 Use path
<code>m/
0'/
0</code>.
205 For more info see the
<a href=
"https://www.hivewallet.com/" target=
"_blank">Hive Wallet homepage
</a>
209 <div class=
"form-group">
210 <label for=
"mycelium-path" class=
"col-sm-2 control-label">Mycelium Wallet
</label>
211 <div class=
"col-sm-10">
212 <p class=
"form-control no-border">
213 Use path
<code>m/
44'/
0'/
0'/
0</code>.
214 For more info see the
<a href=
"http://www.mycelium.com/" target=
"_blank">Mycelium Wallet homepage
</a>
218 <div class=
"form-group">
219 <label for=
"core-path" class=
"col-sm-2 control-label">Bitcoin Core
</label>
220 <div class=
"col-sm-10">
221 <p class=
"form-control no-border">
222 Use path
<code>m/
0'/
0'
</code> with hardened addresses.
223 For more info see the
<a href=
"https://github.com/bitcoin/bitcoin/pull/8035" target=
"_blank">Bitcoin Core BIP32 implementation
</a>
227 <div class=
"form-group">
228 <label class=
"col-sm-2 control-label">Block Explorers
</label>
229 <div class=
"col-sm-10">
230 <p class=
"form-control no-border">
231 Use path
<code>m/
44'/
0'/
0'
</code>.
232 Only enter the
<code>xpub
</code> extended key into block explorer search fields, never the
<code>xpriv
</code> key.
239 <form class=
"form-horizontal" role=
"form">
240 <div class=
"form-group">
241 <label for=
"extended-priv-key" class=
"col-sm-2 control-label">BIP32 Extended Key
</label>
242 <div class=
"col-sm-10">
243 <textarea id=
"extended-priv-key" class=
"extended-priv-key form-control" readonly=
"readonly"></textarea>
246 <div class=
"form-group">
247 <label for=
"extended-pub-key" class=
"col-sm-2 control-label">BIP32 Extended Key (addresses only)
</label>
248 <div class=
"col-sm-10">
249 <textarea id=
"extended-pub-key" class=
"extended-pub-key form-control" readonly=
"readonly"></textarea>
259 <div class=
"col-md-12">
260 <h2>Derived Addresses
</h2>
261 <p>Note these addreses are derived from the
<strong>BIP32 Extended Key
</strong></p>
262 <table class=
"table table-striped">
265 <div class=
"input-group">
267 <button class=
"index-toggle">Toggle
</button>
271 <div class=
"input-group">
273 <button class=
"address-toggle">Toggle
</button>
277 <div class=
"input-group">
278 Private Key
279 <button class=
"private-key-toggle">Toggle
</button>
283 <tbody class=
"addresses">
284 <tr><td> </td><td> </td><td> </td></tr>
285 <tr><td> </td><td> </td><td> </td></tr>
286 <tr><td> </td><td> </td><td> </td></tr>
287 <tr><td> </td><td> </td><td> </td></tr>
288 <tr><td> </td><td> </td><td> </td></tr>
293 <span>Show next
</button>
294 <input type=
"number" class=
"rows-to-add" value=
"20">
295 <button class=
"more">Show
</button>
300 <div class=
"col-md-12">
302 <h3>BIP39
<span class=
"small">Mnemonic code for generating deterministic keys
</span></h3>
305 <a href=
"https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki">official BIP39 spec
</a>
307 <h3>BIP32
<span class=
"small">Hierarchical Deterministic Wallets
</span></h3>
310 <a href=
"https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target=
"_blank">official BIP32 spec
</a>
312 <a href=
"http://bip32.org/" target=
"_blank">bip32.org
</a>
314 <h3>BIP44
<span class=
"small">Multi-Account Hierarchy for Deterministic Wallets
</span></h3>
317 <a href=
"https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target=
"_blank">official BIP44 spec
</a>
319 <h3>Private Keys
</h3>
322 <a href=
"https://web.archive.org/web/20150707020924/https://brainwallet.org/" target=
"_blank">brainwallet.org
</a>,
323 but be careful - it can be easy to make mistakes if you
324 don't know what you're doing
332 <div class=
"col-md-12">
334 <h2>Offline Usage
</h2>
337 You can use this tool without having to be online.
340 In your browser, select file save-as, and save this page
344 Double-click that file to open it in a browser
345 on any offline computer.
348 Alternatively, download it from
349 <a href=
"https://github.com/dcpos/bip39">
350 https://github.com/dcpos/bip39
359 <div class=
"col-md-12">
361 <h2>This project is
100% open-source code
</h2>
364 <span>Get the source code at -
</span>
365 <a href=
"https://github.com/dcpos/bip39" target=
"_blank">
366 https://github.com/dcpos/bip39
373 <span>BitcoinJS -
</span>
374 <a href=
"https://github.com/bitcoinjs/bitcoinjs-lib" target=
"_blank">
375 https://github.com/bitcoinjs/bitcoinjs-lib
380 <span>jsBIP39 -
</span>
381 <a href=
"https://github.com/iancoleman/jsbip39" target=
"_blank">
382 https://github.com/iancoleman/jsbip39
388 <a href=
"https://github.com/bitwiseshiftleft/sjcl" target=
"_blank">
389 https://github.com/bitwiseshiftleft/sjcl
394 <span>jQuery -
</span>
395 <a href=
"https://jquery.com/" target=
"_blank">
401 <span>Twitter Bootstrap -
</span>
402 <a href=
"http://getbootstrap.com/" target=
"_blank">
403 http://getbootstrap.com/
412 <div class=
"feedback-container">
413 <div class=
"feedback">Loading...
</div>
416 <script type=
"text/template" id=
"address-row-template">
418 <td class=
"index"><span></span></td>
419 <td class=
"address"><span></span></td>
420 <td class=
"privkey"><span></span></td>
423 <script>/*! jQuery v2.1
.1 | (c)
2005,
2014 jQuery Foundation, Inc. | jquery.org/license */
424 !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)
425 },_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))
426 },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});
429 * Bootstrap v3.2.0 (http://getbootstrap.com)
430 * Copyright 2011-2014 Twitter, Inc.
431 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
433 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>
434 <script>(function() {
438 * Extend an Object with another Object's properties.
440 * The source objects are specified as additional arguments.
442 * @param dst Object the object to extend.
444 * @return Object the final object.
446 var _extend = function(dst) {
447 var sources = Array.prototype.slice.call(arguments,
1);
448 for (var i=
0; i
<sources.length; ++i) {
449 var src = sources[i];
451 if (src.hasOwnProperty(p)) dst[p] = src[p];
459 * Defer execution of given function.
460 * @param {Function} func
462 var _defer = function(func) {
463 if (typeof setImmediate === 'function') {
464 return setImmediate(func);
466 return setTimeout(func,
0);
471 * Based on the algorithm at http://en.wikipedia.org/wiki/Levenshtein_distance.
475 * Calculate levenshtein distance of the two strings.
477 * @param str1 String the first string.
478 * @param str2 String the second string.
479 * @return Integer the levenshtein distance (
0 and above).
481 get: function(str1, str2) {
483 if (str1 === str2) return
0;
484 if (str1.length ===
0) return str2.length;
485 if (str2.length ===
0) return str1.length;
488 var prevRow = new Array(str2.length +
1),
489 curCol, nextCol, i, j, tmp;
491 // initialise previous row
492 for (i=
0; i
<prevRow.length; ++i) {
496 // calculate current row distance from previous row
497 for (i=
0; i
<str1.length; ++i) {
500 for (j=
0; j
<str2.length; ++j) {
504 nextCol = prevRow[j] + ( (str1.charAt(i) === str2.charAt(j)) ?
0 :
1 );
511 tmp = prevRow[j +
1] +
1;
516 // copy current col value into previous (in preparation for next iteration)
520 // copy last col value into previous (in preparation for next iteration)
521 prevRow[j] = nextCol;
528 * Asynchronously calculate levenshtein distance of the two strings.
530 * @param str1 String the first string.
531 * @param str2 String the second string.
532 * @param cb Function callback function with signature: function(Error err, int distance)
533 * @param [options] Object additional options.
534 * @param [options.progress] Function progress callback with signature: function(percentComplete)
536 getAsync: function(str1, str2, cb, options) {
537 options = _extend({}, {
542 if (str1 === str2) return cb(null,
0);
543 if (str1.length ===
0) return cb(null, str2.length);
544 if (str2.length ===
0) return cb(null, str1.length);
547 var prevRow = new Array(str2.length +
1),
550 startTime, currentTime;
552 // initialise previous row
553 for (i=
0; i
<prevRow.length; ++i) {
561 var __calculate = function() {
563 startTime = new Date().valueOf();
564 currentTime = startTime;
566 // keep going until one second has elapsed
567 while (currentTime - startTime <
1000) {
568 // reached end of current row?
569 if (str2.length <= (++j)) {
570 // copy current into previous (in preparation for next iteration)
571 prevRow[j] = nextCol;
573 // if already done all chars
574 if (str1.length <= (++i)) {
575 return cb(null, nextCol);
577 // else if we have more left to do
588 nextCol = prevRow[j] + ( (str1.charAt(i) === str2.charAt(j)) ?
0 :
1 );
595 tmp = prevRow[j +
1] +
1;
600 // copy current into previous (in preparation for next iteration)
604 currentTime = new Date().valueOf();
607 // send a progress update?
608 if (null !== options.progress) {
610 options.progress.call(null, (i *
100.0/ str1.length));
612 return cb('Progress callback: ' + err.toString());
626 if (typeof define !== "undefined" && define !== null && define.amd) {
632 else if (typeof module !== "undefined" && module !== null && typeof exports !== "undefined" && module.exports === exports) {
633 module.exports = Levenshtein;
636 else if (typeof self !== "undefined" && typeof self.postMessage === 'function' && typeof self.importScripts === 'function') {
637 self.Levenshtein = Levenshtein;
639 // browser main thread
640 else if (typeof window !== "undefined" && window !== null) {
641 window.Levenshtein = Levenshtein;
646 <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){
647 // (public) Constructor
648 function BigInteger(a, b, c) {
649 if (!(this instanceof BigInteger))
650 return new BigInteger(a, b, c)
653 if (
"number" == typeof a) this.fromNumber(a, b, c)
654 else if (b == null &&
"string" != typeof a) this.fromString(a,
256)
655 else this.fromString(a, b)
659 var proto = BigInteger.prototype
661 // duck-typed isBigInteger
662 proto.__bigi = require('../package.json').version
663 BigInteger.isBigInteger = function (obj, check_ver) {
664 return obj && obj.__bigi && (!check_ver || obj.__bigi === proto.__bigi)
670 // am: Compute w_j += (x*this_i), propagate carries,
671 // c is initial carry, returns final carry.
672 // c <
3*dvalue, x <
2*dvalue, this_i < dvalue
673 // We need to select the fastest one that works in this environment.
675 // am1: use a single mult and divide to get the high bits,
676 // max digit bits should be
26 because
677 // max internal value =
2*dvalue^
2-
2*dvalue (<
2^
53)
678 function am1(i, x, w, j, c, n) {
680 var v = x * this[i++] + w[j] + c
681 c = Math.floor(v /
0x4000000)
682 w[j++] = v &
0x3ffffff
686 // am2 avoids a big mult-and-extract completely.
687 // Max digit bits should be <=
30 because we do bitwise ops
688 // on values up to
2*hdvalue^
2-hdvalue-
1 (<
2^
31)
689 function am2(i, x, w, j, c, n) {
693 var l = this[i] &
0x7fff
694 var h = this[i++]
>> 15
695 var m = xh * l + h * xl
696 l = xl * l + ((m &
0x7fff) <<
15) + w[j] + (c &
0x3fffffff)
697 c = (l
>>> 30) + (m
>>> 15) + xh * h + (c
>>> 30)
698 w[j++] = l &
0x3fffffff
702 // Alternately, set max digit bits to
28 since some
703 // browsers slow down when dealing with
32-bit numbers.
704 function am3(i, x, w, j, c, n) {
708 var l = this[i] &
0x3fff
709 var h = this[i++]
>> 14
710 var m = xh * l + h * xl
711 l = xl * l + ((m &
0x3fff) <<
14) + w[j] + c
712 c = (l
>> 28) + (m
>> 14) + xh * h
713 w[j++] = l &
0xfffffff
719 BigInteger.prototype.am = am1
722 BigInteger.prototype.DB = dbits
723 BigInteger.prototype.DM = ((
1 << dbits) -
1)
724 var DV = BigInteger.prototype.DV = (
1 << dbits)
727 BigInteger.prototype.FV = Math.pow(
2, BI_FP)
728 BigInteger.prototype.F1 = BI_FP - dbits
729 BigInteger.prototype.F2 =
2 * dbits - BI_FP
732 var BI_RM =
"0123456789abcdefghijklmnopqrstuvwxyz"
733 var BI_RC = new Array()
735 rr =
"0".charCodeAt(
0)
736 for (vv =
0; vv <=
9; ++vv) BI_RC[rr++] = vv
737 rr =
"a".charCodeAt(
0)
738 for (vv =
10; vv <
36; ++vv) BI_RC[rr++] = vv
739 rr =
"A".charCodeAt(
0)
740 for (vv =
10; vv <
36; ++vv) BI_RC[rr++] = vv
742 function int2char(n) {
743 return BI_RM.charAt(n)
746 function intAt(s, i) {
747 var c = BI_RC[s.charCodeAt(i)]
748 return (c == null) ? -
1 : c
751 // (protected) copy this to r
752 function bnpCopyTo(r) {
753 for (var i = this.t -
1; i
>=
0; --i) r[i] = this[i]
758 // (protected) set from integer value x, -DV <= x < DV
759 function bnpFromInt(x) {
761 this.s = (x <
0) ? -
1 :
0
762 if (x
> 0) this[
0] = x
763 else if (x < -
1) this[
0] = x + DV
767 // return bigint initialized to value
769 var r = new BigInteger()
774 // (protected) set from string and radix
775 function bnpFromString(s, b) {
780 else if (b ==
8) k =
3
781 else if (b ==
256) k =
8; // byte array
782 else if (b ==
2) k =
1
783 else if (b ==
32) k =
5
784 else if (b ==
4) k =
2
795 var x = (k ==
8) ? s[i] &
0xff : intAt(s, i)
797 if (s.charAt(i) == "-") mi = true
803 else if (sh + k
> self.DB) {
804 self[self.t -
1] |= (x & ((
1 << (self.DB - sh)) -
1)) << sh
805 self[self.t++] = (x
>> (self.DB - sh))
807 self[self.t -
1] |= x << sh
809 if (sh
>= self.DB) sh -= self.DB
811 if (k ==
8 && (s[
0] &
0x80) !=
0) {
813 if (sh
> 0) self[self.t -
1] |= ((
1 << (self.DB - sh)) -
1) << sh
816 if (mi) BigInteger.ZERO.subTo(self, self)
819 // (protected) clamp off excess high words
820 function bnpClamp() {
821 var c = this.s & this.DM
822 while (this.t
> 0 && this[this.t -
1] == c)--this.t
825 // (public) return string representation in given radix
826 function bnToString(b) {
828 if (self.s <
0) return
"-" + self.negate()
832 else if (b ==
8) k =
3
833 else if (b ==
2) k =
1
834 else if (b ==
32) k =
5
835 else if (b ==
4) k =
2
836 else return self.toRadix(b)
837 var km = (
1 << k) -
1,
841 var p = self.DB - (i * self.DB) % k
843 if (p < self.DB && (d = self[i]
>> p)
> 0) {
849 d = (self[i] & ((
1 << p) -
1)) << (k - p)
850 d |= self[--i]
>> (p += self.DB - k)
852 d = (self[i]
>> (p -= k)) & km
859 if (m) r += int2char(d)
866 function bnNegate() {
867 var r = new BigInteger()
868 BigInteger.ZERO.subTo(this, r)
874 return (this.s <
0) ? this.negate() : this
877 // (public) return + if this
> a, - if this < a,
0 if equal
878 function bnCompareTo(a) {
883 if (r !=
0) return (this.s <
0) ? -r : r
885 if ((r = this[i] - a[i]) !=
0) return r
889 // returns bit length of the integer x
893 if ((t = x
>>> 16) !=
0) {
897 if ((t = x
>> 8) !=
0) {
901 if ((t = x
>> 4) !=
0) {
905 if ((t = x
>> 2) !=
0) {
909 if ((t = x
>> 1) !=
0) {
916 // (public) return the number of bits in
"this"
917 function bnBitLength() {
918 if (this.t <=
0) return
0
919 return this.DB * (this.t -
1) + nbits(this[this.t -
1] ^ (this.s & this.DM))
922 // (public) return the number of bytes in
"this"
923 function bnByteLength() {
924 return this.bitLength()
>> 3
927 // (protected) r = this << n*DB
928 function bnpDLShiftTo(n, r) {
930 for (i = this.t -
1; i
>=
0; --i) r[i + n] = this[i]
931 for (i = n -
1; i
>=
0; --i) r[i] =
0
936 // (protected) r = this
>> n*DB
937 function bnpDRShiftTo(n, r) {
938 for (var i = n; i < this.t; ++i) r[i - n] = this[i]
939 r.t = Math.max(this.t - n,
0)
943 // (protected) r = this << n
944 function bnpLShiftTo(n, r) {
947 var cbs = self.DB - bs
948 var bm = (
1 << cbs) -
1
949 var ds = Math.floor(n / self.DB),
950 c = (self.s << bs) & self.DM,
952 for (i = self.t -
1; i
>=
0; --i) {
953 r[i + ds +
1] = (self[i]
>> cbs) | c
954 c = (self[i] & bm) << bs
956 for (i = ds -
1; i
>=
0; --i) r[i] =
0
958 r.t = self.t + ds +
1
963 // (protected) r = this
>> n
964 function bnpRShiftTo(n, r) {
967 var ds = Math.floor(n / self.DB)
973 var cbs = self.DB - bs
974 var bm = (
1 << bs) -
1
975 r[
0] = self[ds]
>> bs
976 for (var i = ds +
1; i < self.t; ++i) {
977 r[i - ds -
1] |= (self[i] & bm) << cbs
978 r[i - ds] = self[i]
>> bs
980 if (bs
> 0) r[self.t - ds -
1] |= (self.s & bm) << cbs
985 // (protected) r = this - a
986 function bnpSubTo(a, r) {
990 m = Math.min(a.t, self.t)
1000 r[i++] = c & self.DM
1008 r[i++] = c & self.DM
1013 r.s = (c <
0) ? -
1 :
0
1014 if (c < -
1) r[i++] = self.DV + c
1015 else if (c
> 0) r[i++] = c
1020 // (protected) r = this * a, r != this,a (HAC
14.12)
1021 //
"this" should be the larger one if appropriate.
1022 function bnpMultiplyTo(a, r) {
1027 while (--i
>=
0) r[i] =
0
1028 for (i =
0; i < y.t; ++i) r[i + x.t] = x.am(
0, y[i], r, i,
0, x.t)
1031 if (this.s != a.s) BigInteger.ZERO.subTo(r, r)
1034 // (protected) r = this^
2, r != this (HAC
14.16)
1035 function bnpSquareTo(r) {
1037 var i = r.t =
2 * x.t
1038 while (--i
>=
0) r[i] =
0
1039 for (i =
0; i < x.t -
1; ++i) {
1040 var c = x.am(i, x[i], r,
2 * i,
0,
1)
1041 if ((r[i + x.t] += x.am(i +
1,
2 * x[i], r,
2 * i +
1, c, x.t - i -
1))
>= x.DV) {
1046 if (r.t
> 0) r[r.t -
1] += x.am(i, x[i], r,
2 * i,
0,
1)
1051 // (protected) divide this by m, quotient and remainder to q, r (HAC
14.20)
1052 // r != q, this != m. q or r may be null.
1053 function bnpDivRemTo(m, q, r) {
1056 if (pm.t <=
0) return
1059 if (q != null) q.fromInt(
0)
1060 if (r != null) self.copyTo(r)
1063 if (r == null) r = new BigInteger()
1064 var y = new BigInteger(),
1067 var nsh = self.DB - nbits(pm[pm.t -
1]); // normalize modulus
1078 var yt = y0 * (
1 << self.F1) + ((ys
> 1) ? y[ys -
2]
>> self.F2 :
0)
1079 var d1 = self.FV / yt,
1080 d2 = (
1 << self.F1) / yt,
1084 t = (q == null) ? new BigInteger() : q
1086 if (r.compareTo(t)
>=
0) {
1090 BigInteger.ONE.dlShiftTo(ys, t)
1091 t.subTo(y, y); // "negative" y so we can replace sub with am later
1092 while (y.t < ys) y[y.t++] =
0
1094 // Estimate quotient digit
1095 var qd = (r[--i] == y0) ? self.DM : Math.floor(r[i] * d1 + (r[i -
1] + e) * d2)
1096 if ((r[i] += y.am(
0, qd, r, j,
0, ys)) < qd) { // Try it out
1099 while (r[i] < --qd) r.subTo(t, r)
1104 if (ts != ms) BigInteger.ZERO.subTo(q, q)
1108 if (nsh
> 0) r.rShiftTo(nsh, r); // Denormalize remainder
1109 if (ts <
0) BigInteger.ZERO.subTo(r, r)
1112 // (public) this mod a
1114 var r = new BigInteger()
1116 .divRemTo(a, null, r)
1117 if (this.s <
0 && r.compareTo(BigInteger.ZERO)
> 0) a.subTo(r, r)
1121 // Modular reduction using
"classic" algorithm
1122 function Classic(m) {
1126 function cConvert(x) {
1127 if (x.s <
0 || x.compareTo(this.m)
>=
0) return x.mod(this.m)
1131 function cRevert(x) {
1135 function cReduce(x) {
1136 x.divRemTo(this.m, null, x)
1139 function cMulTo(x, y, r) {
1144 function cSqrTo(x, r) {
1149 Classic.prototype.convert = cConvert
1150 Classic.prototype.revert = cRevert
1151 Classic.prototype.reduce = cReduce
1152 Classic.prototype.mulTo = cMulTo
1153 Classic.prototype.sqrTo = cSqrTo
1155 // (protected) return "-
1/this %
2^DB"; useful for Mont. reduction
1159 // xy(
2-xy) = (
1+km)(
1-km)
1160 // x[y(
2-xy)] =
1-k^
2m^
2
1161 // x[y(
2-xy)] ==
1 (mod m^
2)
1162 // if y is
1/x mod m, then y(
2-xy) is
1/x mod m^
2
1163 // should reduce x and y(
2-xy) by m^
2 at each step to keep size bounded.
1164 // JS multiply "overflows" differently from C/C++, so care is needed here.
1165 function bnpInvDigit() {
1166 if (this.t <
1) return
0
1168 if ((x &
1) ==
0) return
0
1169 var y = x &
3; // y ==
1/x mod
2^
2
1170 y = (y * (
2 - (x &
0xf) * y)) &
0xf; // y ==
1/x mod
2^
4
1171 y = (y * (
2 - (x &
0xff) * y)) &
0xff; // y ==
1/x mod
2^
8
1172 y = (y * (
2 - (((x &
0xffff) * y) &
0xffff))) &
0xffff; // y ==
1/x mod
2^
16
1173 // last step - calculate inverse mod DV directly
1174 // assumes
16 < DB <=
32 and assumes ability to handle
48-bit ints
1175 y = (y * (
2 - x * y % this.DV)) % this.DV; // y ==
1/x mod
2^dbits
1176 // we really want the negative inverse, and -DV < y < DV
1177 return (y
> 0) ? this.DV - y : -y
1180 // Montgomery reduction
1181 function Montgomery(m) {
1183 this.mp = m.invDigit()
1184 this.mpl = this.mp &
0x7fff
1185 this.mph = this.mp
>> 15
1186 this.um = (
1 << (m.DB -
15)) -
1
1191 function montConvert(x) {
1192 var r = new BigInteger()
1194 .dlShiftTo(this.m.t, r)
1195 r.divRemTo(this.m, null, r)
1196 if (x.s <
0 && r.compareTo(BigInteger.ZERO)
> 0) this.m.subTo(r, r)
1201 function montRevert(x) {
1202 var r = new BigInteger()
1208 // x = x/R mod m (HAC
14.32)
1209 function montReduce(x) {
1210 while (x.t <= this.mt2) // pad x so am has enough room later
1212 for (var i =
0; i < this.m.t; ++i) {
1213 // faster way of calculating u0 = x[i]*mp mod DV
1214 var j = x[i] &
0x7fff
1215 var u0 = (j * this.mpl + (((j * this.mph + (x[i]
>> 15) * this.mpl) & this.um) <<
15)) & x.DM
1216 // use am to combine the multiply-shift-add into one call
1218 x[j] += this.m.am(
0, u0, x, i,
0, this.m.t)
1220 while (x[j]
>= x.DV) {
1226 x.drShiftTo(this.m.t, x)
1227 if (x.compareTo(this.m)
>=
0) x.subTo(this.m, x)
1230 // r = "x^
2/R mod m"; x != r
1231 function montSqrTo(x, r) {
1236 // r = "xy/R mod m"; x,y != r
1237 function montMulTo(x, y, r) {
1242 Montgomery.prototype.convert = montConvert
1243 Montgomery.prototype.revert = montRevert
1244 Montgomery.prototype.reduce = montReduce
1245 Montgomery.prototype.mulTo = montMulTo
1246 Montgomery.prototype.sqrTo = montSqrTo
1248 // (protected) true iff this is even
1249 function bnpIsEven() {
1250 return ((this.t
> 0) ? (this[
0] &
1) : this.s) ==
0
1253 // (protected) this^e, e <
2^
32, doing sqr and mul with
"r" (HAC
14.79)
1254 function bnpExp(e, z) {
1255 if (e
> 0xffffffff || e <
1) return BigInteger.ONE
1256 var r = new BigInteger(),
1257 r2 = new BigInteger(),
1258 g = z.convert(this),
1263 if ((e & (
1 << i))
> 0) z.mulTo(r2, g, r)
1273 // (public) this^e % m,
0 <= e <
2^
32
1274 function bnModPowInt(e, m) {
1276 if (e <
256 || m.isEven()) z = new Classic(m)
1277 else z = new Montgomery(m)
1278 return this.exp(e, z)
1282 proto.copyTo = bnpCopyTo
1283 proto.fromInt = bnpFromInt
1284 proto.fromString = bnpFromString
1285 proto.clamp = bnpClamp
1286 proto.dlShiftTo = bnpDLShiftTo
1287 proto.drShiftTo = bnpDRShiftTo
1288 proto.lShiftTo = bnpLShiftTo
1289 proto.rShiftTo = bnpRShiftTo
1290 proto.subTo = bnpSubTo
1291 proto.multiplyTo = bnpMultiplyTo
1292 proto.squareTo = bnpSquareTo
1293 proto.divRemTo = bnpDivRemTo
1294 proto.invDigit = bnpInvDigit
1295 proto.isEven = bnpIsEven
1299 proto.toString = bnToString
1300 proto.negate = bnNegate
1302 proto.compareTo = bnCompareTo
1303 proto.bitLength = bnBitLength
1304 proto.byteLength = bnByteLength
1306 proto.modPowInt = bnModPowInt
1309 function bnClone() {
1310 var r = new BigInteger()
1315 // (public) return value as integer
1316 function bnIntValue() {
1318 if (this.t ==
1) return this[
0] - this.DV
1319 else if (this.t ==
0) return -
1
1320 } else if (this.t ==
1) return this[
0]
1321 else if (this.t ==
0) return
0
1322 // assumes
16 < DB <
32
1323 return ((this[
1] & ((
1 << (
32 - this.DB)) -
1)) << this.DB) | this[
0]
1326 // (public) return value as byte
1327 function bnByteValue() {
1328 return (this.t ==
0) ? this.s : (this[
0] <<
24)
>> 24
1331 // (public) return value as short (assumes DB
>=
16)
1332 function bnShortValue() {
1333 return (this.t ==
0) ? this.s : (this[
0] <<
16)
>> 16
1336 // (protected) return x s.t. r^x < DV
1337 function bnpChunkSize(r) {
1338 return Math.floor(Math.LN2 * this.DB / Math.log(r))
1341 // (public)
0 if this ==
0,
1 if this
> 0
1342 function bnSigNum() {
1343 if (this.s <
0) return -
1
1344 else if (this.t <=
0 || (this.t ==
1 && this[
0] <=
0)) return
0
1348 // (protected) convert to radix string
1349 function bnpToRadix(b) {
1350 if (b == null) b =
10
1351 if (this.signum() ==
0 || b <
2 || b
> 36) return
"0"
1352 var cs = this.chunkSize(b)
1353 var a = Math.pow(b, cs)
1355 y = new BigInteger(),
1356 z = new BigInteger(),
1358 this.divRemTo(d, y, z)
1359 while (y.signum()
> 0) {
1360 r = (a + z.intValue())
1369 // (protected) convert from radix string
1370 function bnpFromRadix(s, b) {
1373 if (b == null) b =
10
1374 var cs = self.chunkSize(b)
1375 var d = Math.pow(b, cs),
1379 for (var i =
0; i < s.length; ++i) {
1382 if (s.charAt(i) ==
"-" && self.signum() ==
0) mi = true
1388 self.dAddOffset(w,
0)
1394 self.dMultiply(Math.pow(b, j))
1395 self.dAddOffset(w,
0)
1397 if (mi) BigInteger.ZERO.subTo(self, self)
1400 // (protected) alternate constructor
1401 function bnpFromNumber(a, b, c) {
1403 if (
"number" == typeof b) {
1404 // new BigInteger(int,int,RNG)
1405 if (a <
2) self.fromInt(
1)
1407 self.fromNumber(a, c)
1408 if (!self.testBit(a -
1)) // force MSB set
1409 self.bitwiseTo(BigInteger.ONE.shiftLeft(a -
1), op_or, self)
1410 if (self.isEven()) self.dAddOffset(
1,
0); // force odd
1411 while (!self.isProbablePrime(b)) {
1412 self.dAddOffset(
2,
0)
1413 if (self.bitLength()
> a) self.subTo(BigInteger.ONE.shiftLeft(a -
1), self)
1417 // new BigInteger(int,RNG)
1418 var x = new Array(),
1420 x.length = (a
>> 3) +
1
1422 if (t
> 0) x[
0] &= ((
1 << t) -
1)
1424 self.fromString(x,
256)
1428 // (public) convert to bigendian byte array
1429 function bnToByteArray() {
1434 var p = self.DB - (i * self.DB) %
8,
1437 if (p < self.DB && (d = self[i]
>> p) != (self.s & self.DM)
>> p)
1438 r[k++] = d | (self.s << (self.DB - p))
1441 d = (self[i] & ((
1 << p) -
1)) << (
8 - p)
1442 d |= self[--i]
>> (p += self.DB -
8)
1444 d = (self[i]
>> (p -=
8)) &
0xff
1450 if ((d &
0x80) !=
0) d |= -
256
1451 if (k ===
0 && (self.s &
0x80) != (d &
0x80))++k
1452 if (k
> 0 || d != self.s) r[k++] = d
1458 function bnEquals(a) {
1459 return (this.compareTo(a) ==
0)
1463 return (this.compareTo(a) <
0) ? this : a
1467 return (this.compareTo(a)
> 0) ? this : a
1470 // (protected) r = this op a (bitwise)
1471 function bnpBitwiseTo(a, op, r) {
1473 var i, f, m = Math.min(a.t, self.t)
1474 for (i =
0; i < m; ++i) r[i] = op(self[i], a[i])
1477 for (i = m; i < self.t; ++i) r[i] = op(self[i], f)
1480 f = self.s & self.DM
1481 for (i = m; i < a.t; ++i) r[i] = op(f, a[i])
1484 r.s = op(self.s, a.s)
1488 // (public) this & a
1489 function op_and(x, y) {
1494 var r = new BigInteger()
1495 this.bitwiseTo(a, op_and, r)
1499 // (public) this | a
1500 function op_or(x, y) {
1505 var r = new BigInteger()
1506 this.bitwiseTo(a, op_or, r)
1510 // (public) this ^ a
1511 function op_xor(x, y) {
1516 var r = new BigInteger()
1517 this.bitwiseTo(a, op_xor, r)
1521 // (public) this & ~a
1522 function op_andnot(x, y) {
1526 function bnAndNot(a) {
1527 var r = new BigInteger()
1528 this.bitwiseTo(a, op_andnot, r)
1534 var r = new BigInteger()
1535 for (var i =
0; i < this.t; ++i) r[i] = this.DM & ~this[i]
1541 // (public) this << n
1542 function bnShiftLeft(n) {
1543 var r = new BigInteger()
1544 if (n <
0) this.rShiftTo(-n, r)
1545 else this.lShiftTo(n, r)
1549 // (public) this
>> n
1550 function bnShiftRight(n) {
1551 var r = new BigInteger()
1552 if (n <
0) this.lShiftTo(-n, r)
1553 else this.rShiftTo(n, r)
1557 // return index of lowest
1-bit in x, x <
2^
31
1559 if (x ==
0) return -
1
1561 if ((x &
0xffff) ==
0) {
1565 if ((x &
0xff) ==
0) {
1569 if ((x &
0xf) ==
0) {
1577 if ((x &
1) ==
0)++r
1581 // (public) returns index of lowest
1-bit (or -
1 if none)
1582 function bnGetLowestSetBit() {
1583 for (var i =
0; i < this.t; ++i)
1584 if (this[i] !=
0) return i * this.DB + lbit(this[i])
1585 if (this.s <
0) return this.t * this.DB
1589 // return number of
1 bits in x
1599 // (public) return number of set bits
1600 function bnBitCount() {
1602 x = this.s & this.DM
1603 for (var i =
0; i < this.t; ++i) r += cbit(this[i] ^ x)
1607 // (public) true iff nth bit is set
1608 function bnTestBit(n) {
1609 var j = Math.floor(n / this.DB)
1610 if (j
>= this.t) return (this.s !=
0)
1611 return ((this[j] & (
1 << (n % this.DB))) !=
0)
1614 // (protected) this op (
1<
<n)
1615 function bnpChangeBit(n, op) {
1616 var r = BigInteger.ONE.shiftLeft(n)
1617 this.bitwiseTo(r, op, r)
1621 // (public) this | (
1<
<n)
1622 function bnSetBit(n) {
1623 return this.changeBit(n, op_or)
1626 // (public) this & ~(
1<
<n)
1627 function bnClearBit(n) {
1628 return this.changeBit(n, op_andnot)
1631 // (public) this ^ (
1<
<n)
1632 function bnFlipBit(n) {
1633 return this.changeBit(n, op_xor)
1636 // (protected) r = this + a
1637 function bnpAddTo(a, r) {
1642 m = Math.min(a.t, self.t)
1645 r[i++] = c & self.DM
1650 while (i < self.t) {
1652 r[i++] = c & self.DM
1660 r[i++] = c & self.DM
1665 r.s = (c <
0) ? -
1 :
0
1666 if (c
> 0) r[i++] = c
1667 else if (c < -
1) r[i++] = self.DV + c
1672 // (public) this + a
1674 var r = new BigInteger()
1679 // (public) this - a
1680 function bnSubtract(a) {
1681 var r = new BigInteger()
1686 // (public) this * a
1687 function bnMultiply(a) {
1688 var r = new BigInteger()
1689 this.multiplyTo(a, r)
1694 function bnSquare() {
1695 var r = new BigInteger()
1700 // (public) this / a
1701 function bnDivide(a) {
1702 var r = new BigInteger()
1703 this.divRemTo(a, r, null)
1707 // (public) this % a
1708 function bnRemainder(a) {
1709 var r = new BigInteger()
1710 this.divRemTo(a, null, r)
1714 // (public) [this/a,this%a]
1715 function bnDivideAndRemainder(a) {
1716 var q = new BigInteger(),
1717 r = new BigInteger()
1718 this.divRemTo(a, q, r)
1719 return new Array(q, r)
1722 // (protected) this *= n, this
>=
0,
1 < n < DV
1723 function bnpDMultiply(n) {
1724 this[this.t] = this.am(
0, n -
1, this,
0,
0, this.t)
1729 // (protected) this += n << w words, this
>=
0
1730 function bnpDAddOffset(n, w) {
1732 while (this.t <= w) this[this.t++] =
0
1734 while (this[w]
>= this.DV) {
1736 if (++w
>= this.t) this[this.t++] =
0
1742 function NullExp() {}
1748 function nMulTo(x, y, r) {
1752 function nSqrTo(x, r) {
1756 NullExp.prototype.convert = nNop
1757 NullExp.prototype.revert = nNop
1758 NullExp.prototype.mulTo = nMulTo
1759 NullExp.prototype.sqrTo = nSqrTo
1763 return this.exp(e, new NullExp())
1766 // (protected) r = lower n words of "this * a", a.t <= n
1767 // "this" should be the larger one if appropriate.
1768 function bnpMultiplyLowerTo(a, n, r) {
1769 var i = Math.min(this.t + a.t, n)
1770 r.s =
0; // assumes a,this
>=
0
1772 while (i
> 0) r[--i] =
0
1774 for (j = r.t - this.t; i < j; ++i) r[i + this.t] = this.am(
0, a[i], r, i,
0, this.t)
1775 for (j = Math.min(a.t, n); i < j; ++i) this.am(
0, a[i], r, i,
0, n - i)
1779 // (protected) r =
"this * a" without lower n words, n
> 0
1780 //
"this" should be the larger one if appropriate.
1781 function bnpMultiplyUpperTo(a, n, r) {
1783 var i = r.t = this.t + a.t - n
1784 r.s =
0; // assumes a,this
>=
0
1785 while (--i
>=
0) r[i] =
0
1786 for (i = Math.max(n - this.t,
0); i < a.t; ++i)
1787 r[this.t + i - n] = this.am(n - i, a[i], r,
0,
0, this.t + i - n)
1792 // Barrett modular reduction
1793 function Barrett(m) {
1795 this.r2 = new BigInteger()
1796 this.q3 = new BigInteger()
1797 BigInteger.ONE.dlShiftTo(
2 * m.t, this.r2)
1798 this.mu = this.r2.divide(m)
1802 function barrettConvert(x) {
1803 if (x.s <
0 || x.t
> 2 * this.m.t) return x.mod(this.m)
1804 else if (x.compareTo(this.m) <
0) return x
1806 var r = new BigInteger()
1813 function barrettRevert(x) {
1817 // x = x mod m (HAC
14.42)
1818 function barrettReduce(x) {
1820 x.drShiftTo(self.m.t -
1, self.r2)
1821 if (x.t
> self.m.t +
1) {
1825 self.mu.multiplyUpperTo(self.r2, self.m.t +
1, self.q3)
1826 self.m.multiplyLowerTo(self.q3, self.m.t +
1, self.r2)
1827 while (x.compareTo(self.r2) <
0) x.dAddOffset(
1, self.m.t +
1)
1829 while (x.compareTo(self.m)
>=
0) x.subTo(self.m, x)
1832 // r = x^
2 mod m; x != r
1833 function barrettSqrTo(x, r) {
1838 // r = x*y mod m; x,y != r
1839 function barrettMulTo(x, y, r) {
1844 Barrett.prototype.convert = barrettConvert
1845 Barrett.prototype.revert = barrettRevert
1846 Barrett.prototype.reduce = barrettReduce
1847 Barrett.prototype.mulTo = barrettMulTo
1848 Barrett.prototype.sqrTo = barrettSqrTo
1850 // (public) this^e % m (HAC
14.85)
1851 function bnModPow(e, m) {
1852 var i = e.bitLength(),
1855 if (i <=
0) return r
1856 else if (i <
18) k =
1
1857 else if (i <
48) k =
3
1858 else if (i <
144) k =
4
1859 else if (i <
768) k =
5
1863 else if (m.isEven())
1866 z = new Montgomery(m)
1869 var g = new Array(),
1873 g[
1] = z.convert(this)
1875 var g2 = new BigInteger()
1878 g[n] = new BigInteger()
1879 z.mulTo(g2, g[n -
2], g[n])
1886 r2 = new BigInteger(),
1890 if (i
>= k1) w = (e[j]
>> (i - k1)) & km
1892 w = (e[j] & ((
1 << (i +
1)) -
1)) << (k1 - i)
1893 if (j
> 0) w |= e[j -
1]
>> (this.DB + i - k1)
1897 while ((w &
1) ==
0) {
1905 if (is1) { // ret ==
1, don't bother squaring or multiplying it
1914 if (n
> 0) z.sqrTo(r, r2)
1920 z.mulTo(r2, g[w], r)
1923 while (j
>=
0 && (e[j] & (
1 << i)) ==
0) {
1937 // (public) gcd(this,a) (HAC
14.54)
1939 var x = (this.s <
0) ? this.negate() : this.clone()
1940 var y = (a.s <
0) ? a.negate() : a.clone()
1941 if (x.compareTo(y) <
0) {
1946 var i = x.getLowestSetBit(),
1947 g = y.getLowestSetBit()
1954 while (x.signum()
> 0) {
1955 if ((i = x.getLowestSetBit())
> 0) x.rShiftTo(i, x)
1956 if ((i = y.getLowestSetBit())
> 0) y.rShiftTo(i, y)
1957 if (x.compareTo(y)
>=
0) {
1965 if (g
> 0) y.lShiftTo(g, y)
1969 // (protected) this % n, n <
2^
26
1970 function bnpModInt(n) {
1971 if (n <=
0) return
0
1972 var d = this.DV % n,
1973 r = (this.s <
0) ? n -
1 :
0
1975 if (d ==
0) r = this[
0] % n
1977 for (var i = this.t -
1; i
>=
0; --i) r = (d * r + this[i]) % n
1981 // (public)
1/this % m (HAC
14.61)
1982 function bnModInverse(m) {
1984 if ((this.isEven() && ac) || m.signum() ==
0) return BigInteger.ZERO
1991 while (u.signum() !=
0) {
1992 while (u.isEven()) {
1995 if (!a.isEven() || !b.isEven()) {
2000 } else if (!b.isEven()) b.subTo(m, b)
2003 while (v.isEven()) {
2006 if (!c.isEven() || !d.isEven()) {
2011 } else if (!d.isEven()) d.subTo(m, d)
2014 if (u.compareTo(v)
>=
0) {
2016 if (ac) a.subTo(c, a)
2020 if (ac) c.subTo(a, c)
2024 if (v.compareTo(BigInteger.ONE) !=
0) return BigInteger.ZERO
2025 if (d.compareTo(m)
>=
0) return d.subtract(m)
2026 if (d.signum() <
0) d.addTo(m, d)
2028 if (d.signum() <
0) return d.add(m)
2033 2,
3,
5,
7,
11,
13,
17,
19,
23,
29,
31,
37,
41,
43,
47,
53,
59,
61,
67,
71,
2034 73,
79,
83,
89,
97,
101,
103,
107,
109,
113,
127,
131,
137,
139,
149,
151,
2035 157,
163,
167,
173,
179,
181,
191,
193,
197,
199,
211,
223,
227,
229,
233,
2036 239,
241,
251,
257,
263,
269,
271,
277,
281,
283,
293,
307,
311,
313,
317,
2037 331,
337,
347,
349,
353,
359,
367,
373,
379,
383,
389,
397,
401,
409,
419,
2038 421,
431,
433,
439,
443,
449,
457,
461,
463,
467,
479,
487,
491,
499,
503,
2039 509,
521,
523,
541,
547,
557,
563,
569,
571,
577,
587,
593,
599,
601,
607,
2040 613,
617,
619,
631,
641,
643,
647,
653,
659,
661,
673,
677,
683,
691,
701,
2041 709,
719,
727,
733,
739,
743,
751,
757,
761,
769,
773,
787,
797,
809,
811,
2042 821,
823,
827,
829,
839,
853,
857,
859,
863,
877,
881,
883,
887,
907,
911,
2043 919,
929,
937,
941,
947,
953,
967,
971,
977,
983,
991,
997
2046 var lplim = (
1 <<
26) / lowprimes[lowprimes.length -
1]
2048 // (public) test primality with certainty
>=
1-
.5^t
2049 function bnIsProbablePrime(t) {
2050 var i, x = this.abs()
2051 if (x.t ==
1 && x[
0] <= lowprimes[lowprimes.length -
1]) {
2052 for (i =
0; i < lowprimes.length; ++i)
2053 if (x[
0] == lowprimes[i]) return true
2056 if (x.isEven()) return false
2058 while (i < lowprimes.length) {
2059 var m = lowprimes[i],
2061 while (j < lowprimes.length && m < lplim) m *= lowprimes[j++]
2063 while (i < j) if (m % lowprimes[i++] ==
0) return false
2065 return x.millerRabin(t)
2068 // (protected) true if probably prime (HAC
4.24, Miller-Rabin)
2069 function bnpMillerRabin(t) {
2070 var n1 = this.subtract(BigInteger.ONE)
2071 var k = n1.getLowestSetBit()
2072 if (k <=
0) return false
2073 var r = n1.shiftRight(k)
2075 if (t
> lowprimes.length) t = lowprimes.length
2076 var a = new BigInteger(null)
2078 for (var i =
0; i < t; ++i) {
2080 j = lowprimes[Math.floor(Math.random() * lowprimes.length)]
2081 if (bases.indexOf(j) == -
1) break
2085 var y = a.modPow(r, this)
2086 if (y.compareTo(BigInteger.ONE) !=
0 && y.compareTo(n1) !=
0) {
2088 while (j++ < k && y.compareTo(n1) !=
0) {
2089 y = y.modPowInt(
2, this)
2090 if (y.compareTo(BigInteger.ONE) ==
0) return false
2092 if (y.compareTo(n1) !=
0) return false
2099 proto.chunkSize = bnpChunkSize
2100 proto.toRadix = bnpToRadix
2101 proto.fromRadix = bnpFromRadix
2102 proto.fromNumber = bnpFromNumber
2103 proto.bitwiseTo = bnpBitwiseTo
2104 proto.changeBit = bnpChangeBit
2105 proto.addTo = bnpAddTo
2106 proto.dMultiply = bnpDMultiply
2107 proto.dAddOffset = bnpDAddOffset
2108 proto.multiplyLowerTo = bnpMultiplyLowerTo
2109 proto.multiplyUpperTo = bnpMultiplyUpperTo
2110 proto.modInt = bnpModInt
2111 proto.millerRabin = bnpMillerRabin
2114 proto.clone = bnClone
2115 proto.intValue = bnIntValue
2116 proto.byteValue = bnByteValue
2117 proto.shortValue = bnShortValue
2118 proto.signum = bnSigNum
2119 proto.toByteArray = bnToByteArray
2120 proto.equals = bnEquals
2126 proto.andNot = bnAndNot
2128 proto.shiftLeft = bnShiftLeft
2129 proto.shiftRight = bnShiftRight
2130 proto.getLowestSetBit = bnGetLowestSetBit
2131 proto.bitCount = bnBitCount
2132 proto.testBit = bnTestBit
2133 proto.setBit = bnSetBit
2134 proto.clearBit = bnClearBit
2135 proto.flipBit = bnFlipBit
2137 proto.subtract = bnSubtract
2138 proto.multiply = bnMultiply
2139 proto.divide = bnDivide
2140 proto.remainder = bnRemainder
2141 proto.divideAndRemainder = bnDivideAndRemainder
2142 proto.modPow = bnModPow
2143 proto.modInverse = bnModInverse
2146 proto.isProbablePrime = bnIsProbablePrime
2148 // JSBN-specific extension
2149 proto.square = bnSquare
2152 BigInteger.ZERO = nbv(
0)
2153 BigInteger.ONE = nbv(
1)
2154 BigInteger.valueOf = nbv
2156 module.exports = BigInteger
2158 },{"../package.json":
4}],
2:[function(require,module,exports){
2160 // FIXME: Kind of a weird way to throw exceptions, consider removing
2161 var assert = require('assert')
2162 var BigInteger = require('./bigi')
2165 * Turns a byte array into a big integer.
2167 * This function will interpret a byte array as a big integer in big
2170 BigInteger.fromByteArrayUnsigned = function(byteArray) {
2171 // BigInteger expects a DER integer conformant byte array
2172 if (byteArray[
0] &
0x80) {
2173 return new BigInteger([
0].concat(byteArray))
2176 return new BigInteger(byteArray)
2180 * Returns a byte array representation of the big integer.
2182 * This returns the absolute of the contained value in big endian
2183 * form. A value of zero results in an empty array.
2185 BigInteger.prototype.toByteArrayUnsigned = function() {
2186 var byteArray = this.toByteArray()
2187 return byteArray[
0] ===
0 ? byteArray.slice(
1) : byteArray
2190 BigInteger.fromDERInteger = function(byteArray) {
2191 return new BigInteger(byteArray)
2195 * Converts BigInteger to a DER integer representation.
2197 * The format for this value uses the most significant bit as a sign
2198 * bit. If the most significant bit is already set and the integer is
2199 * positive, a
0x00 is prepended.
2215 * -
62300 =
> 0xff0ca4
2217 BigInteger.prototype.toDERInteger = BigInteger.prototype.toByteArray
2219 BigInteger.fromBuffer = function(buffer) {
2220 // BigInteger expects a DER integer conformant byte array
2221 if (buffer[
0] &
0x80) {
2222 var byteArray = Array.prototype.slice.call(buffer)
2224 return new BigInteger([
0].concat(byteArray))
2227 return new BigInteger(buffer)
2230 BigInteger.fromHex = function(hex) {
2231 if (hex === '') return BigInteger.ZERO
2233 assert.equal(hex, hex.match(/^[A-Fa-f0-
9]+/), 'Invalid hex string')
2234 assert.equal(hex.length %
2,
0, 'Incomplete hex')
2235 return new BigInteger(hex,
16)
2238 BigInteger.prototype.toBuffer = function(size) {
2239 var byteArray = this.toByteArrayUnsigned()
2242 var padding = size - byteArray.length
2243 while (zeros.length < padding) zeros.push(
0)
2245 return new Buffer(zeros.concat(byteArray))
2248 BigInteger.prototype.toHex = function(size) {
2249 return this.toBuffer(size).toString('hex')
2252 }).call(this,require(
"buffer").Buffer)
2253 },{
"./bigi":
1,
"assert":
5,
"buffer":
7}],
3:[function(require,module,exports){
2254 var BigInteger = require('./bigi')
2257 require('./convert')
2259 module.exports = BigInteger
2260 },{
"./bigi":
1,
"./convert":
2}],
4:[function(require,module,exports){
2264 "description":
"Big integers.",
2282 "devDependencies": {
2285 "coveralls":
"^2.10.0",
2286 "istanbul":
"^0.2.11"
2289 "url":
"https://github.com/cryptocoinjs/bigi",
2292 "main":
"./lib/index.js",
2294 "test":
"_mocha -- test/*.js",
2295 "jshint":
"jshint --config jshint.json lib/*.js ; true",
2297 "coverage":
"istanbul cover ./node_modules/.bin/_mocha -- --reporter list test/*.js",
2298 "coveralls":
"npm run-script coverage && node ./node_modules/.bin/coveralls < coverage/lcov.info"
2302 "files":
"test/*.js",
2308 "safari/6.0..latest",
2309 "iphone/6.0..latest",
2310 "android-browser/4.2..latest"
2314 "url":
"https://github.com/cryptocoinjs/bigi/issues"
2316 "homepage":
"https://github.com/cryptocoinjs/bigi",
2317 "_id":
"bigi@1.4.0",
2319 "shasum":
"90ac1aeac0a531216463bdb58f42c1e05c8407ac",
2320 "tarball":
"http://registry.npmjs.org/bigi/-/bigi-1.4.0.tgz"
2322 "_from":
"bigi@^1.4.0",
2323 "_npmVersion":
"1.4.3",
2326 "email":
"jprichardson@gmail.com"
2331 "email":
"jprichardson@gmail.com"
2334 "name":
"midnightlightning",
2335 "email":
"boydb@midnightdesign.ws"
2338 "name":
"sidazhang",
2339 "email":
"sidazhang89@gmail.com"
2343 "email":
"npm@shesek.info"
2347 "_shasum":
"90ac1aeac0a531216463bdb58f42c1e05c8407ac",
2348 "_resolved":
"https://registry.npmjs.org/bigi/-/bigi-1.4.0.tgz"
2351 },{}],
5:[function(require,module,exports){
2352 // http://wiki.commonjs.org/wiki/Unit_Testing/
1.0
2354 // THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!
2356 // Originally from narwhal.js (http://narwhaljs.org)
2357 // Copyright (c)
2009 Thomas Robinson
<280north.com
>
2359 // Permission is hereby granted, free of charge, to any person obtaining a copy
2360 // of this software and associated documentation files (the 'Software'), to
2361 // deal in the Software without restriction, including without limitation the
2362 // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
2363 // sell copies of the Software, and to permit persons to whom the Software is
2364 // furnished to do so, subject to the following conditions:
2366 // The above copyright notice and this permission notice shall be included in
2367 // all copies or substantial portions of the Software.
2369 // THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
2370 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
2371 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
2372 // AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
2373 // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
2374 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
2376 // when used in node, this will actually load the util module we depend on
2377 // versus loading the builtin util module as happens otherwise
2378 // this is a bug in node module loading as far as I am concerned
2379 var util = require('util/');
2381 var pSlice = Array.prototype.slice;
2382 var hasOwn = Object.prototype.hasOwnProperty;
2384 //
1. The assert module provides functions that throw
2385 // AssertionError's when particular conditions are not met. The
2386 // assert module must conform to the following interface.
2388 var assert = module.exports = ok;
2390 //
2. The AssertionError is defined in assert.
2391 // new assert.AssertionError({ message: message,
2393 // expected: expected })
2395 assert.AssertionError = function AssertionError(options) {
2396 this.name = 'AssertionError';
2397 this.actual = options.actual;
2398 this.expected = options.expected;
2399 this.operator = options.operator;
2400 if (options.message) {
2401 this.message = options.message;
2402 this.generatedMessage = false;
2404 this.message = getMessage(this);
2405 this.generatedMessage = true;
2407 var stackStartFunction = options.stackStartFunction || fail;
2409 if (Error.captureStackTrace) {
2410 Error.captureStackTrace(this, stackStartFunction);
2413 // non v8 browsers so we can have a stacktrace
2414 var err = new Error();
2416 var out = err.stack;
2418 // try to strip useless frames
2419 var fn_name = stackStartFunction.name;
2420 var idx = out.indexOf('\n' + fn_name);
2422 // once we have located the function frame
2423 // we need to strip out everything before it (and its line)
2424 var next_line = out.indexOf('\n', idx +
1);
2425 out = out.substring(next_line +
1);
2433 // assert.AssertionError instanceof Error
2434 util.inherits(assert.AssertionError, Error);
2436 function replacer(key, value) {
2437 if (util.isUndefined(value)) {
2440 if (util.isNumber(value) && !isFinite(value)) {
2441 return value.toString();
2443 if (util.isFunction(value) || util.isRegExp(value)) {
2444 return value.toString();
2449 function truncate(s, n) {
2450 if (util.isString(s)) {
2451 return s.length < n ? s : s.slice(
0, n);
2457 function getMessage(self) {
2458 return truncate(JSON.stringify(self.actual, replacer),
128) + ' ' +
2459 self.operator + ' ' +
2460 truncate(JSON.stringify(self.expected, replacer),
128);
2463 // At present only the three keys mentioned above are used and
2464 // understood by the spec. Implementations or sub modules can pass
2465 // other keys to the AssertionError's constructor - they will be
2468 //
3. All of the following functions must throw an AssertionError
2469 // when a corresponding condition is not met, with a message that
2470 // may be undefined if not provided. All assertion methods provide
2471 // both the actual and expected values to the assertion error for
2472 // display purposes.
2474 function fail(actual, expected, message, operator, stackStartFunction) {
2475 throw new assert.AssertionError({
2480 stackStartFunction: stackStartFunction
2484 // EXTENSION! allows for well behaved errors defined elsewhere.
2487 //
4. Pure assertion tests whether a value is truthy, as determined
2489 // assert.ok(guard, message_opt);
2490 // This statement is equivalent to assert.equal(true, !!guard,
2491 // message_opt);. To test strictly for the value true, use
2492 // assert.strictEqual(true, guard, message_opt);.
2494 function ok(value, message) {
2495 if (!value) fail(value, true, message, '==', assert.ok);
2499 //
5. The equality assertion tests shallow, coercive equality with
2501 // assert.equal(actual, expected, message_opt);
2503 assert.equal = function equal(actual, expected, message) {
2504 if (actual != expected) fail(actual, expected, message, '==', assert.equal);
2507 //
6. The non-equality assertion tests for whether two objects are not equal
2508 // with != assert.notEqual(actual, expected, message_opt);
2510 assert.notEqual = function notEqual(actual, expected, message) {
2511 if (actual == expected) {
2512 fail(actual, expected, message, '!=', assert.notEqual);
2516 //
7. The equivalence assertion tests a deep equality relation.
2517 // assert.deepEqual(actual, expected, message_opt);
2519 assert.deepEqual = function deepEqual(actual, expected, message) {
2520 if (!_deepEqual(actual, expected)) {
2521 fail(actual, expected, message, 'deepEqual', assert.deepEqual);
2525 function _deepEqual(actual, expected) {
2526 //
7.1. All identical values are equivalent, as determined by ===.
2527 if (actual === expected) {
2530 } else if (util.isBuffer(actual) && util.isBuffer(expected)) {
2531 if (actual.length != expected.length) return false;
2533 for (var i =
0; i < actual.length; i++) {
2534 if (actual[i] !== expected[i]) return false;
2539 //
7.2. If the expected value is a Date object, the actual value is
2540 // equivalent if it is also a Date object that refers to the same time.
2541 } else if (util.isDate(actual) && util.isDate(expected)) {
2542 return actual.getTime() === expected.getTime();
2544 //
7.3 If the expected value is a RegExp object, the actual value is
2545 // equivalent if it is also a RegExp object with the same source and
2546 // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).
2547 } else if (util.isRegExp(actual) && util.isRegExp(expected)) {
2548 return actual.source === expected.source &&
2549 actual.global === expected.global &&
2550 actual.multiline === expected.multiline &&
2551 actual.lastIndex === expected.lastIndex &&
2552 actual.ignoreCase === expected.ignoreCase;
2554 //
7.4. Other pairs that do not both pass typeof value == 'object',
2555 // equivalence is determined by ==.
2556 } else if (!util.isObject(actual) && !util.isObject(expected)) {
2557 return actual == expected;
2559 //
7.5 For all other Object pairs, including Array objects, equivalence is
2560 // determined by having the same number of owned properties (as verified
2561 // with Object.prototype.hasOwnProperty.call), the same set of keys
2562 // (although not necessarily the same order), equivalent values for every
2563 // corresponding key, and an identical 'prototype' property. Note: this
2564 // accounts for both named and indexed properties on Arrays.
2566 return objEquiv(actual, expected);
2570 function isArguments(object) {
2571 return Object.prototype.toString.call(object) == '[object Arguments]';
2574 function objEquiv(a, b) {
2575 if (util.isNullOrUndefined(a) || util.isNullOrUndefined(b))
2577 // an identical 'prototype' property.
2578 if (a.prototype !== b.prototype) return false;
2579 // if one is a primitive, the other must be same
2580 if (util.isPrimitive(a) || util.isPrimitive(b)) {
2583 var aIsArgs = isArguments(a),
2584 bIsArgs = isArguments(b);
2585 if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))
2590 return _deepEqual(a, b);
2592 var ka = objectKeys(a),
2595 // having the same number of owned properties (keys incorporates
2597 if (ka.length != kb.length)
2599 //the same set of keys (although not necessarily the same order),
2603 for (i = ka.length -
1; i
>=
0; i--) {
2607 //equivalent values for every corresponding key, and
2608 //~~~possibly expensive deep test
2609 for (i = ka.length -
1; i
>=
0; i--) {
2611 if (!_deepEqual(a[key], b[key])) return false;
2616 //
8. The non-equivalence assertion tests for any deep inequality.
2617 // assert.notDeepEqual(actual, expected, message_opt);
2619 assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
2620 if (_deepEqual(actual, expected)) {
2621 fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
2625 //
9. The strict equality assertion tests strict equality, as determined by ===.
2626 // assert.strictEqual(actual, expected, message_opt);
2628 assert.strictEqual = function strictEqual(actual, expected, message) {
2629 if (actual !== expected) {
2630 fail(actual, expected, message, '===', assert.strictEqual);
2634 //
10. The strict non-equality assertion tests for strict inequality, as
2635 // determined by !==. assert.notStrictEqual(actual, expected, message_opt);
2637 assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
2638 if (actual === expected) {
2639 fail(actual, expected, message, '!==', assert.notStrictEqual);
2643 function expectedException(actual, expected) {
2644 if (!actual || !expected) {
2648 if (Object.prototype.toString.call(expected) == '[object RegExp]') {
2649 return expected.test(actual);
2650 } else if (actual instanceof expected) {
2652 } else if (expected.call({}, actual) === true) {
2659 function _throws(shouldThrow, block, expected, message) {
2662 if (util.isString(expected)) {
2673 message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
2674 (message ? ' ' + message : '.');
2676 if (shouldThrow && !actual) {
2677 fail(actual, expected, 'Missing expected exception' + message);
2680 if (!shouldThrow && expectedException(actual, expected)) {
2681 fail(actual, expected, 'Got unwanted exception' + message);
2684 if ((shouldThrow && actual && expected &&
2685 !expectedException(actual, expected)) || (!shouldThrow && actual)) {
2690 //
11. Expected to throw an error:
2691 // assert.throws(block, Error_opt, message_opt);
2693 assert.throws = function(block, /*optional*/error, /*optional*/message) {
2694 _throws.apply(this, [true].concat(pSlice.call(arguments)));
2697 // EXTENSION! This is annoying to write outside this module.
2698 assert.doesNotThrow = function(block, /*optional*/message) {
2699 _throws.apply(this, [false].concat(pSlice.call(arguments)));
2702 assert.ifError = function(err) { if (err) {throw err;}};
2704 var objectKeys = Object.keys || function (obj) {
2706 for (var key in obj) {
2707 if (hasOwn.call(obj, key)) keys.push(key);
2712 },{"util/":
29}],
6:[function(require,module,exports){
2714 },{}],
7:[function(require,module,exports){
2716 * The buffer module from node.js, for the browser.
2718 * @author Feross Aboukhadijeh
<feross@feross.org
> <http://feross.org
>
2722 var base64 = require('base64-js')
2723 var ieee754 = require('ieee754')
2724 var isArray = require('is-array')
2726 exports.Buffer = Buffer
2727 exports.SlowBuffer = SlowBuffer
2728 exports.INSPECT_MAX_BYTES =
50
2729 Buffer.poolSize =
8192 // not used by this implementation
2734 * If `Buffer.TYPED_ARRAY_SUPPORT`:
2735 * === true Use Uint8Array implementation (fastest)
2736 * === false Use Object implementation (most compatible, even IE6)
2738 * Browsers that support typed arrays are IE
10+, Firefox
4+, Chrome
7+, Safari
5.1+,
2739 * Opera
11.6+, iOS
4.2+.
2741 * Due to various browser bugs, sometimes the Object implementation will be used even
2742 * when the browser supports typed arrays.
2746 * - Firefox
4-
29 lacks support for adding new properties to `Uint8Array` instances,
2747 * See: https://bugzilla.mozilla.org/show_bug.cgi?id=
695438.
2749 * - Safari
5-
7 lacks support for changing the `Object.prototype.constructor` property
2752 * - Chrome
9-
10 is missing the `TypedArray.prototype.subarray` function.
2754 * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of
2755 * incorrect length in some situations.
2757 * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they
2758 * get the Object implementation, which is slower but behaves correctly.
2760 Buffer.TYPED_ARRAY_SUPPORT = (function () {
2763 var arr = new Uint8Array(
1)
2764 arr.foo = function () { return
42 }
2765 arr.constructor = Bar
2766 return arr.foo() ===
42 && // typed array instances can be augmented
2767 arr.constructor === Bar && // constructor can be set
2768 typeof arr.subarray === 'function' && // chrome
9-
10 lack `subarray`
2769 arr.subarray(
1,
1).byteLength ===
0 // ie10 has broken `subarray`
2775 function kMaxLength () {
2776 return Buffer.TYPED_ARRAY_SUPPORT
2785 * The Buffer constructor returns instances of `Uint8Array` that are augmented
2786 * with function properties for all the node `Buffer` API functions. We use
2787 * `Uint8Array` so that square bracket notation works as expected -- it returns
2790 * By augmenting the instances, we can avoid modifying the `Uint8Array`
2793 function Buffer (arg) {
2794 if (!(this instanceof Buffer)) {
2795 // Avoid going through an ArgumentsAdaptorTrampoline in the common case.
2796 if (arguments.length
> 1) return new Buffer(arg, arguments[
1])
2797 return new Buffer(arg)
2801 this.parent = undefined
2804 if (typeof arg === 'number') {
2805 return fromNumber(this, arg)
2808 // Slightly less common case.
2809 if (typeof arg === 'string') {
2810 return fromString(this, arg, arguments.length
> 1 ? arguments[
1] : 'utf8')
2814 return fromObject(this, arg)
2817 function fromNumber (that, length) {
2818 that = allocate(that, length <
0 ?
0 : checked(length) |
0)
2819 if (!Buffer.TYPED_ARRAY_SUPPORT) {
2820 for (var i =
0; i < length; i++) {
2827 function fromString (that, string, encoding) {
2828 if (typeof encoding !== 'string' || encoding === '') encoding = 'utf8'
2830 // Assumption: byteLength() return value is always < kMaxLength.
2831 var length = byteLength(string, encoding) |
0
2832 that = allocate(that, length)
2834 that.write(string, encoding)
2838 function fromObject (that, object) {
2839 if (Buffer.isBuffer(object)) return fromBuffer(that, object)
2841 if (isArray(object)) return fromArray(that, object)
2843 if (object == null) {
2844 throw new TypeError('must start with number, buffer, array or string')
2847 if (typeof ArrayBuffer !== 'undefined') {
2848 if (object.buffer instanceof ArrayBuffer) {
2849 return fromTypedArray(that, object)
2851 if (object instanceof ArrayBuffer) {
2852 return fromArrayBuffer(that, object)
2856 if (object.length) return fromArrayLike(that, object)
2858 return fromJsonObject(that, object)
2861 function fromBuffer (that, buffer) {
2862 var length = checked(buffer.length) |
0
2863 that = allocate(that, length)
2864 buffer.copy(that,
0,
0, length)
2868 function fromArray (that, array) {
2869 var length = checked(array.length) |
0
2870 that = allocate(that, length)
2871 for (var i =
0; i < length; i +=
1) {
2872 that[i] = array[i] &
255
2877 // Duplicate of fromArray() to keep fromArray() monomorphic.
2878 function fromTypedArray (that, array) {
2879 var length = checked(array.length) |
0
2880 that = allocate(that, length)
2881 // Truncating the elements is probably not what people expect from typed
2882 // arrays with BYTES_PER_ELEMENT
> 1 but it's compatible with the behavior
2883 // of the old Buffer constructor.
2884 for (var i =
0; i < length; i +=
1) {
2885 that[i] = array[i] &
255
2890 function fromArrayBuffer (that, array) {
2891 if (Buffer.TYPED_ARRAY_SUPPORT) {
2892 // Return an augmented `Uint8Array` instance, for best performance
2894 that = Buffer._augment(new Uint8Array(array))
2896 // Fallback: Return an object instance of the Buffer class
2897 that = fromTypedArray(that, new Uint8Array(array))
2902 function fromArrayLike (that, array) {
2903 var length = checked(array.length) |
0
2904 that = allocate(that, length)
2905 for (var i =
0; i < length; i +=
1) {
2906 that[i] = array[i] &
255
2911 // Deserialize { type: 'Buffer', data: [
1,
2,
3,...] } into a Buffer object.
2912 // Returns a zero-length buffer for inputs that don't conform to the spec.
2913 function fromJsonObject (that, object) {
2917 if (object.type === 'Buffer' && isArray(object.data)) {
2919 length = checked(array.length) |
0
2921 that = allocate(that, length)
2923 for (var i =
0; i < length; i +=
1) {
2924 that[i] = array[i] &
255
2929 function allocate (that, length) {
2930 if (Buffer.TYPED_ARRAY_SUPPORT) {
2931 // Return an augmented `Uint8Array` instance, for best performance
2932 that = Buffer._augment(new Uint8Array(length))
2934 // Fallback: Return an object instance of the Buffer class
2935 that.length = length
2936 that._isBuffer = true
2939 var fromPool = length !==
0 && length <= Buffer.poolSize
>>> 1
2940 if (fromPool) that.parent = rootParent
2945 function checked (length) {
2946 // Note: cannot use `length < kMaxLength` here because that fails when
2947 // length is NaN (which is otherwise coerced to zero.)
2948 if (length
>= kMaxLength()) {
2949 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
2950 'size:
0x' + kMaxLength().toString(
16) + ' bytes')
2955 function SlowBuffer (subject, encoding) {
2956 if (!(this instanceof SlowBuffer)) return new SlowBuffer(subject, encoding)
2958 var buf = new Buffer(subject, encoding)
2963 Buffer.isBuffer = function isBuffer (b) {
2964 return !!(b != null && b._isBuffer)
2967 Buffer.compare = function compare (a, b) {
2968 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
2969 throw new TypeError('Arguments must be Buffers')
2972 if (a === b) return
0
2978 var len = Math.min(x, y)
2980 if (a[i] !== b[i]) break
2990 if (x < y) return -
1
2995 Buffer.isEncoding = function isEncoding (encoding) {
2996 switch (String(encoding).toLowerCase()) {
3014 Buffer.concat = function concat (list, length) {
3015 if (!isArray(list)) throw new TypeError('list argument must be an Array of Buffers.')
3017 if (list.length ===
0) {
3018 return new Buffer(
0)
3022 if (length === undefined) {
3024 for (i =
0; i < list.length; i++) {
3025 length += list[i].length
3029 var buf = new Buffer(length)
3031 for (i =
0; i < list.length; i++) {
3039 function byteLength (string, encoding) {
3040 if (typeof string !== 'string') string = '' + string
3042 var len = string.length
3043 if (len ===
0) return
0
3045 // Use a for loop to avoid recursion
3046 var loweredCase = false
3057 return utf8ToBytes(string).length
3066 return base64ToBytes(string).length
3068 if (loweredCase) return utf8ToBytes(string).length // assume utf8
3069 encoding = ('' + encoding).toLowerCase()
3074 Buffer.byteLength = byteLength
3076 // pre-set for values that may exist in the future
3077 Buffer.prototype.length = undefined
3078 Buffer.prototype.parent = undefined
3080 function slowToString (encoding, start, end) {
3081 var loweredCase = false
3084 end = end === undefined || end === Infinity ? this.length : end |
0
3086 if (!encoding) encoding = 'utf8'
3087 if (start <
0) start =
0
3088 if (end
> this.length) end = this.length
3089 if (end <= start) return ''
3094 return hexSlice(this, start, end)
3098 return utf8Slice(this, start, end)
3101 return asciiSlice(this, start, end)
3104 return binarySlice(this, start, end)
3107 return base64Slice(this, start, end)
3113 return utf16leSlice(this, start, end)
3116 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
3117 encoding = (encoding + '').toLowerCase()
3123 Buffer.prototype.toString = function toString () {
3124 var length = this.length |
0
3125 if (length ===
0) return ''
3126 if (arguments.length ===
0) return utf8Slice(this,
0, length)
3127 return slowToString.apply(this, arguments)
3130 Buffer.prototype.equals = function equals (b) {
3131 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
3132 if (this === b) return true
3133 return Buffer.compare(this, b) ===
0
3136 Buffer.prototype.inspect = function inspect () {
3138 var max = exports.INSPECT_MAX_BYTES
3139 if (this.length
> 0) {
3140 str = this.toString('hex',
0, max).match(/.{
2}/g).join(' ')
3141 if (this.length
> max) str += ' ... '
3143 return '
<Buffer ' + str + '
>'
3146 Buffer.prototype.compare = function compare (b) {
3147 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
3148 if (this === b) return
0
3149 return Buffer.compare(this, b)
3152 Buffer.prototype.indexOf = function indexOf (val, byteOffset) {
3153 if (byteOffset
> 0x7fffffff) byteOffset =
0x7fffffff
3154 else if (byteOffset < -
0x80000000) byteOffset = -
0x80000000
3157 if (this.length ===
0) return -
1
3158 if (byteOffset
>= this.length) return -
1
3160 // Negative offsets start from the end of the buffer
3161 if (byteOffset <
0) byteOffset = Math.max(this.length + byteOffset,
0)
3163 if (typeof val === 'string') {
3164 if (val.length ===
0) return -
1 // special case: looking for empty string always fails
3165 return String.prototype.indexOf.call(this, val, byteOffset)
3167 if (Buffer.isBuffer(val)) {
3168 return arrayIndexOf(this, val, byteOffset)
3170 if (typeof val === 'number') {
3171 if (Buffer.TYPED_ARRAY_SUPPORT && Uint8Array.prototype.indexOf === 'function') {
3172 return Uint8Array.prototype.indexOf.call(this, val, byteOffset)
3174 return arrayIndexOf(this, [ val ], byteOffset)
3177 function arrayIndexOf (arr, val, byteOffset) {
3179 for (var i =
0; byteOffset + i < arr.length; i++) {
3180 if (arr[byteOffset + i] === val[foundIndex === -
1 ?
0 : i - foundIndex]) {
3181 if (foundIndex === -
1) foundIndex = i
3182 if (i - foundIndex +
1 === val.length) return byteOffset + foundIndex
3190 throw new TypeError('val must be string, number or Buffer')
3193 // `get` is deprecated
3194 Buffer.prototype.get = function get (offset) {
3195 console.log('.get() is deprecated. Access using array indexes instead.')
3196 return this.readUInt8(offset)
3199 // `set` is deprecated
3200 Buffer.prototype.set = function set (v, offset) {
3201 console.log('.set() is deprecated. Access using array indexes instead.')
3202 return this.writeUInt8(v, offset)
3205 function hexWrite (buf, string, offset, length) {
3206 offset = Number(offset) ||
0
3207 var remaining = buf.length - offset
3211 length = Number(length)
3212 if (length
> remaining) {
3217 // must be an even number of digits
3218 var strLen = string.length
3219 if (strLen %
2 !==
0) throw new Error('Invalid hex string')
3221 if (length
> strLen /
2) {
3224 for (var i =
0; i < length; i++) {
3225 var parsed = parseInt(string.substr(i *
2,
2),
16)
3226 if (isNaN(parsed)) throw new Error('Invalid hex string')
3227 buf[offset + i] = parsed
3232 function utf8Write (buf, string, offset, length) {
3233 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
3236 function asciiWrite (buf, string, offset, length) {
3237 return blitBuffer(asciiToBytes(string), buf, offset, length)
3240 function binaryWrite (buf, string, offset, length) {
3241 return asciiWrite(buf, string, offset, length)
3244 function base64Write (buf, string, offset, length) {
3245 return blitBuffer(base64ToBytes(string), buf, offset, length)
3248 function ucs2Write (buf, string, offset, length) {
3249 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
3252 Buffer.prototype.write = function write (string, offset, length, encoding) {
3253 // Buffer#write(string)
3254 if (offset === undefined) {
3256 length = this.length
3258 // Buffer#write(string, encoding)
3259 } else if (length === undefined && typeof offset === 'string') {
3261 length = this.length
3263 // Buffer#write(string, offset[, length][, encoding])
3264 } else if (isFinite(offset)) {
3266 if (isFinite(length)) {
3268 if (encoding === undefined) encoding = 'utf8'
3273 // legacy write(string, encoding, offset, length) - remove in v0.13
3281 var remaining = this.length - offset
3282 if (length === undefined || length
> remaining) length = remaining
3284 if ((string.length
> 0 && (length <
0 || offset <
0)) || offset
> this.length) {
3285 throw new RangeError('attempt to write outside buffer bounds')
3288 if (!encoding) encoding = 'utf8'
3290 var loweredCase = false
3294 return hexWrite(this, string, offset, length)
3298 return utf8Write(this, string, offset, length)
3301 return asciiWrite(this, string, offset, length)
3304 return binaryWrite(this, string, offset, length)
3307 // Warning: maxLength not taken into account in base64Write
3308 return base64Write(this, string, offset, length)
3314 return ucs2Write(this, string, offset, length)
3317 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
3318 encoding = ('' + encoding).toLowerCase()
3324 Buffer.prototype.toJSON = function toJSON () {
3327 data: Array.prototype.slice.call(this._arr || this,
0)
3331 function base64Slice (buf, start, end) {
3332 if (start ===
0 && end === buf.length) {
3333 return base64.fromByteArray(buf)
3335 return base64.fromByteArray(buf.slice(start, end))
3339 function utf8Slice (buf, start, end) {
3340 end = Math.min(buf.length, end)
3345 var bytesPerSequence
3351 for (; i < end; i += bytesPerSequence) {
3355 if (firstByte
> 0xEF) {
3356 bytesPerSequence =
4
3357 } else if (firstByte
> 0xDF) {
3358 bytesPerSequence =
3
3359 } else if (firstByte
> 0xBF) {
3360 bytesPerSequence =
2
3362 bytesPerSequence =
1
3365 if (i + bytesPerSequence <= end) {
3366 switch (bytesPerSequence) {
3368 if (firstByte <
0x80) {
3369 codePoint = firstByte
3373 secondByte = buf[i +
1]
3374 if ((secondByte &
0xC0) ===
0x80) {
3375 tempCodePoint = (firstByte &
0x1F) <<
0x6 | (secondByte &
0x3F)
3376 if (tempCodePoint
> 0x7F) {
3377 codePoint = tempCodePoint
3382 secondByte = buf[i +
1]
3383 thirdByte = buf[i +
2]
3384 if ((secondByte &
0xC0) ===
0x80 && (thirdByte &
0xC0) ===
0x80) {
3385 tempCodePoint = (firstByte &
0xF) <<
0xC | (secondByte &
0x3F) <<
0x6 | (thirdByte &
0x3F)
3386 if (tempCodePoint
> 0x7FF && (tempCodePoint <
0xD800 || tempCodePoint
> 0xDFFF)) {
3387 codePoint = tempCodePoint
3392 secondByte = buf[i +
1]
3393 thirdByte = buf[i +
2]
3394 fourthByte = buf[i +
3]
3395 if ((secondByte &
0xC0) ===
0x80 && (thirdByte &
0xC0) ===
0x80 && (fourthByte &
0xC0) ===
0x80) {
3396 tempCodePoint = (firstByte &
0xF) <<
0x12 | (secondByte &
0x3F) <<
0xC | (thirdByte &
0x3F) <<
0x6 | (fourthByte &
0x3F)
3397 if (tempCodePoint
> 0xFFFF && tempCodePoint <
0x110000) {
3398 codePoint = tempCodePoint
3404 if (codePoint ===
0xFFFD) {
3405 // we generated an invalid codePoint so make sure to only advance by
1 byte
3406 bytesPerSequence =
1
3407 } else if (codePoint
> 0xFFFF) {
3408 // encode to utf16 (surrogate pair dance)
3409 codePoint -=
0x10000
3410 res.push(codePoint
>>> 10 &
0x3FF |
0xD800)
3411 codePoint =
0xDC00 | codePoint &
0x3FF
3417 return String.fromCharCode.apply(String, res)
3420 function asciiSlice (buf, start, end) {
3422 end = Math.min(buf.length, end)
3424 for (var i = start; i < end; i++) {
3425 ret += String.fromCharCode(buf[i] &
0x7F)
3430 function binarySlice (buf, start, end) {
3432 end = Math.min(buf.length, end)
3434 for (var i = start; i < end; i++) {
3435 ret += String.fromCharCode(buf[i])
3440 function hexSlice (buf, start, end) {
3441 var len = buf.length
3443 if (!start || start <
0) start =
0
3444 if (!end || end <
0 || end
> len) end = len
3447 for (var i = start; i < end; i++) {
3448 out += toHex(buf[i])
3453 function utf16leSlice (buf, start, end) {
3454 var bytes = buf.slice(start, end)
3456 for (var i =
0; i < bytes.length; i +=
2) {
3457 res += String.fromCharCode(bytes[i] + bytes[i +
1] *
256)
3462 Buffer.prototype.slice = function slice (start, end) {
3463 var len = this.length
3465 end = end === undefined ? len : ~~end
3469 if (start <
0) start =
0
3470 } else if (start
> len) {
3476 if (end <
0) end =
0
3477 } else if (end
> len) {
3481 if (end < start) end = start
3484 if (Buffer.TYPED_ARRAY_SUPPORT) {
3485 newBuf = Buffer._augment(this.subarray(start, end))
3487 var sliceLen = end - start
3488 newBuf = new Buffer(sliceLen, undefined)
3489 for (var i =
0; i < sliceLen; i++) {
3490 newBuf[i] = this[i + start]
3494 if (newBuf.length) newBuf.parent = this.parent || this
3500 * Need to make sure that buffer isn't trying to write out of bounds.
3502 function checkOffset (offset, ext, length) {
3503 if ((offset %
1) !==
0 || offset <
0) throw new RangeError('offset is not uint')
3504 if (offset + ext
> length) throw new RangeError('Trying to access beyond buffer length')
3507 Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
3509 byteLength = byteLength |
0
3510 if (!noAssert) checkOffset(offset, byteLength, this.length)
3512 var val = this[offset]
3515 while (++i < byteLength && (mul *=
0x100)) {
3516 val += this[offset + i] * mul
3522 Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
3524 byteLength = byteLength |
0
3526 checkOffset(offset, byteLength, this.length)
3529 var val = this[offset + --byteLength]
3531 while (byteLength
> 0 && (mul *=
0x100)) {
3532 val += this[offset + --byteLength] * mul
3538 Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
3539 if (!noAssert) checkOffset(offset,
1, this.length)
3543 Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
3544 if (!noAssert) checkOffset(offset,
2, this.length)
3545 return this[offset] | (this[offset +
1] <<
8)
3548 Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
3549 if (!noAssert) checkOffset(offset,
2, this.length)
3550 return (this[offset] <<
8) | this[offset +
1]
3553 Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
3554 if (!noAssert) checkOffset(offset,
4, this.length)
3556 return ((this[offset]) |
3557 (this[offset +
1] <<
8) |
3558 (this[offset +
2] <<
16)) +
3559 (this[offset +
3] *
0x1000000)
3562 Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
3563 if (!noAssert) checkOffset(offset,
4, this.length)
3565 return (this[offset] *
0x1000000) +
3566 ((this[offset +
1] <<
16) |
3567 (this[offset +
2] <<
8) |
3571 Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
3573 byteLength = byteLength |
0
3574 if (!noAssert) checkOffset(offset, byteLength, this.length)
3576 var val = this[offset]
3579 while (++i < byteLength && (mul *=
0x100)) {
3580 val += this[offset + i] * mul
3584 if (val
>= mul) val -= Math.pow(
2,
8 * byteLength)
3589 Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
3591 byteLength = byteLength |
0
3592 if (!noAssert) checkOffset(offset, byteLength, this.length)
3596 var val = this[offset + --i]
3597 while (i
> 0 && (mul *=
0x100)) {
3598 val += this[offset + --i] * mul
3602 if (val
>= mul) val -= Math.pow(
2,
8 * byteLength)
3607 Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
3608 if (!noAssert) checkOffset(offset,
1, this.length)
3609 if (!(this[offset] &
0x80)) return (this[offset])
3610 return ((
0xff - this[offset] +
1) * -
1)
3613 Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
3614 if (!noAssert) checkOffset(offset,
2, this.length)
3615 var val = this[offset] | (this[offset +
1] <<
8)
3616 return (val &
0x8000) ? val |
0xFFFF0000 : val
3619 Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
3620 if (!noAssert) checkOffset(offset,
2, this.length)
3621 var val = this[offset +
1] | (this[offset] <<
8)
3622 return (val &
0x8000) ? val |
0xFFFF0000 : val
3625 Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
3626 if (!noAssert) checkOffset(offset,
4, this.length)
3628 return (this[offset]) |
3629 (this[offset +
1] <<
8) |
3630 (this[offset +
2] <<
16) |
3631 (this[offset +
3] <<
24)
3634 Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
3635 if (!noAssert) checkOffset(offset,
4, this.length)
3637 return (this[offset] <<
24) |
3638 (this[offset +
1] <<
16) |
3639 (this[offset +
2] <<
8) |
3643 Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
3644 if (!noAssert) checkOffset(offset,
4, this.length)
3645 return ieee754.read(this, offset, true,
23,
4)
3648 Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
3649 if (!noAssert) checkOffset(offset,
4, this.length)
3650 return ieee754.read(this, offset, false,
23,
4)
3653 Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
3654 if (!noAssert) checkOffset(offset,
8, this.length)
3655 return ieee754.read(this, offset, true,
52,
8)
3658 Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
3659 if (!noAssert) checkOffset(offset,
8, this.length)
3660 return ieee754.read(this, offset, false,
52,
8)
3663 function checkInt (buf, value, offset, ext, max, min) {
3664 if (!Buffer.isBuffer(buf)) throw new TypeError('buffer must be a Buffer instance')
3665 if (value
> max || value < min) throw new RangeError('value is out of bounds')
3666 if (offset + ext
> buf.length) throw new RangeError('index out of range')
3669 Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
3672 byteLength = byteLength |
0
3673 if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(
2,
8 * byteLength),
0)
3677 this[offset] = value &
0xFF
3678 while (++i < byteLength && (mul *=
0x100)) {
3679 this[offset + i] = (value / mul) &
0xFF
3682 return offset + byteLength
3685 Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
3688 byteLength = byteLength |
0
3689 if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(
2,
8 * byteLength),
0)
3691 var i = byteLength -
1
3693 this[offset + i] = value &
0xFF
3694 while (--i
>=
0 && (mul *=
0x100)) {
3695 this[offset + i] = (value / mul) &
0xFF
3698 return offset + byteLength
3701 Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
3704 if (!noAssert) checkInt(this, value, offset,
1,
0xff,
0)
3705 if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
3706 this[offset] = value
3710 function objectWriteUInt16 (buf, value, offset, littleEndian) {
3711 if (value <
0) value =
0xffff + value +
1
3712 for (var i =
0, j = Math.min(buf.length - offset,
2); i < j; i++) {
3713 buf[offset + i] = (value & (
0xff << (
8 * (littleEndian ? i :
1 - i))))
>>>
3714 (littleEndian ? i :
1 - i) *
8
3718 Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
3721 if (!noAssert) checkInt(this, value, offset,
2,
0xffff,
0)
3722 if (Buffer.TYPED_ARRAY_SUPPORT) {
3723 this[offset] = value
3724 this[offset +
1] = (value
>>> 8)
3726 objectWriteUInt16(this, value, offset, true)
3731 Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
3734 if (!noAssert) checkInt(this, value, offset,
2,
0xffff,
0)
3735 if (Buffer.TYPED_ARRAY_SUPPORT) {
3736 this[offset] = (value
>>> 8)
3737 this[offset +
1] = value
3739 objectWriteUInt16(this, value, offset, false)
3744 function objectWriteUInt32 (buf, value, offset, littleEndian) {
3745 if (value <
0) value =
0xffffffff + value +
1
3746 for (var i =
0, j = Math.min(buf.length - offset,
4); i < j; i++) {
3747 buf[offset + i] = (value
>>> (littleEndian ? i :
3 - i) *
8) &
0xff
3751 Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
3754 if (!noAssert) checkInt(this, value, offset,
4,
0xffffffff,
0)
3755 if (Buffer.TYPED_ARRAY_SUPPORT) {
3756 this[offset +
3] = (value
>>> 24)
3757 this[offset +
2] = (value
>>> 16)
3758 this[offset +
1] = (value
>>> 8)
3759 this[offset] = value
3761 objectWriteUInt32(this, value, offset, true)
3766 Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
3769 if (!noAssert) checkInt(this, value, offset,
4,
0xffffffff,
0)
3770 if (Buffer.TYPED_ARRAY_SUPPORT) {
3771 this[offset] = (value
>>> 24)
3772 this[offset +
1] = (value
>>> 16)
3773 this[offset +
2] = (value
>>> 8)
3774 this[offset +
3] = value
3776 objectWriteUInt32(this, value, offset, false)
3781 Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
3785 var limit = Math.pow(
2,
8 * byteLength -
1)
3787 checkInt(this, value, offset, byteLength, limit -
1, -limit)
3792 var sub = value <
0 ?
1 :
0
3793 this[offset] = value &
0xFF
3794 while (++i < byteLength && (mul *=
0x100)) {
3795 this[offset + i] = ((value / mul)
>> 0) - sub &
0xFF
3798 return offset + byteLength
3801 Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
3805 var limit = Math.pow(
2,
8 * byteLength -
1)
3807 checkInt(this, value, offset, byteLength, limit -
1, -limit)
3810 var i = byteLength -
1
3812 var sub = value <
0 ?
1 :
0
3813 this[offset + i] = value &
0xFF
3814 while (--i
>=
0 && (mul *=
0x100)) {
3815 this[offset + i] = ((value / mul)
>> 0) - sub &
0xFF
3818 return offset + byteLength
3821 Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
3824 if (!noAssert) checkInt(this, value, offset,
1,
0x7f, -
0x80)
3825 if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
3826 if (value <
0) value =
0xff + value +
1
3827 this[offset] = value
3831 Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
3834 if (!noAssert) checkInt(this, value, offset,
2,
0x7fff, -
0x8000)
3835 if (Buffer.TYPED_ARRAY_SUPPORT) {
3836 this[offset] = value
3837 this[offset +
1] = (value
>>> 8)
3839 objectWriteUInt16(this, value, offset, true)
3844 Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
3847 if (!noAssert) checkInt(this, value, offset,
2,
0x7fff, -
0x8000)
3848 if (Buffer.TYPED_ARRAY_SUPPORT) {
3849 this[offset] = (value
>>> 8)
3850 this[offset +
1] = value
3852 objectWriteUInt16(this, value, offset, false)
3857 Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
3860 if (!noAssert) checkInt(this, value, offset,
4,
0x7fffffff, -
0x80000000)
3861 if (Buffer.TYPED_ARRAY_SUPPORT) {
3862 this[offset] = value
3863 this[offset +
1] = (value
>>> 8)
3864 this[offset +
2] = (value
>>> 16)
3865 this[offset +
3] = (value
>>> 24)
3867 objectWriteUInt32(this, value, offset, true)
3872 Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
3875 if (!noAssert) checkInt(this, value, offset,
4,
0x7fffffff, -
0x80000000)
3876 if (value <
0) value =
0xffffffff + value +
1
3877 if (Buffer.TYPED_ARRAY_SUPPORT) {
3878 this[offset] = (value
>>> 24)
3879 this[offset +
1] = (value
>>> 16)
3880 this[offset +
2] = (value
>>> 8)
3881 this[offset +
3] = value
3883 objectWriteUInt32(this, value, offset, false)
3888 function checkIEEE754 (buf, value, offset, ext, max, min) {
3889 if (value
> max || value < min) throw new RangeError('value is out of bounds')
3890 if (offset + ext
> buf.length) throw new RangeError('index out of range')
3891 if (offset <
0) throw new RangeError('index out of range')
3894 function writeFloat (buf, value, offset, littleEndian, noAssert) {
3896 checkIEEE754(buf, value, offset,
4,
3.4028234663852886e+38, -
3.4028234663852886e+38)
3898 ieee754.write(buf, value, offset, littleEndian,
23,
4)
3902 Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
3903 return writeFloat(this, value, offset, true, noAssert)
3906 Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
3907 return writeFloat(this, value, offset, false, noAssert)
3910 function writeDouble (buf, value, offset, littleEndian, noAssert) {
3912 checkIEEE754(buf, value, offset,
8,
1.7976931348623157E+308, -
1.7976931348623157E+308)
3914 ieee754.write(buf, value, offset, littleEndian,
52,
8)
3918 Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
3919 return writeDouble(this, value, offset, true, noAssert)
3922 Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
3923 return writeDouble(this, value, offset, false, noAssert)
3926 // copy(targetBuffer, targetStart=
0, sourceStart=
0, sourceEnd=buffer.length)
3927 Buffer.prototype.copy = function copy (target, targetStart, start, end) {
3928 if (!start) start =
0
3929 if (!end && end !==
0) end = this.length
3930 if (targetStart
>= target.length) targetStart = target.length
3931 if (!targetStart) targetStart =
0
3932 if (end
> 0 && end < start) end = start
3934 // Copy
0 bytes; we're done
3935 if (end === start) return
0
3936 if (target.length ===
0 || this.length ===
0) return
0
3938 // Fatal error conditions
3939 if (targetStart <
0) {
3940 throw new RangeError('targetStart out of bounds')
3942 if (start <
0 || start
>= this.length) throw new RangeError('sourceStart out of bounds')
3943 if (end <
0) throw new RangeError('sourceEnd out of bounds')
3946 if (end
> this.length) end = this.length
3947 if (target.length - targetStart < end - start) {
3948 end = target.length - targetStart + start
3951 var len = end - start
3954 if (this === target && start < targetStart && targetStart < end) {
3955 // descending copy from end
3956 for (i = len -
1; i
>=
0; i--) {
3957 target[i + targetStart] = this[i + start]
3959 } else if (len <
1000 || !Buffer.TYPED_ARRAY_SUPPORT) {
3960 // ascending copy from start
3961 for (i =
0; i < len; i++) {
3962 target[i + targetStart] = this[i + start]
3965 target._set(this.subarray(start, start + len), targetStart)
3971 // fill(value, start=
0, end=buffer.length)
3972 Buffer.prototype.fill = function fill (value, start, end) {
3973 if (!value) value =
0
3974 if (!start) start =
0
3975 if (!end) end = this.length
3977 if (end < start) throw new RangeError('end < start')
3979 // Fill
0 bytes; we're done
3980 if (end === start) return
3981 if (this.length ===
0) return
3983 if (start <
0 || start
>= this.length) throw new RangeError('start out of bounds')
3984 if (end <
0 || end
> this.length) throw new RangeError('end out of bounds')
3987 if (typeof value === 'number') {
3988 for (i = start; i < end; i++) {
3992 var bytes = utf8ToBytes(value.toString())
3993 var len = bytes.length
3994 for (i = start; i < end; i++) {
3995 this[i] = bytes[i % len]
4003 * Creates a new `ArrayBuffer` with the *copied* memory of the buffer instance.
4004 * Added in Node
0.12. Only available in browsers that support ArrayBuffer.
4006 Buffer.prototype.toArrayBuffer = function toArrayBuffer () {
4007 if (typeof Uint8Array !== 'undefined') {
4008 if (Buffer.TYPED_ARRAY_SUPPORT) {
4009 return (new Buffer(this)).buffer
4011 var buf = new Uint8Array(this.length)
4012 for (var i =
0, len = buf.length; i < len; i +=
1) {
4018 throw new TypeError('Buffer.toArrayBuffer not supported in this browser')
4025 var BP = Buffer.prototype
4028 * Augment a Uint8Array *instance* (not the Uint8Array class!) with Buffer methods
4030 Buffer._augment = function _augment (arr) {
4031 arr.constructor = Buffer
4032 arr._isBuffer = true
4034 // save reference to original Uint8Array set method before overwriting
4041 arr.write = BP.write
4042 arr.toString = BP.toString
4043 arr.toLocaleString = BP.toString
4044 arr.toJSON = BP.toJSON
4045 arr.equals = BP.equals
4046 arr.compare = BP.compare
4047 arr.indexOf = BP.indexOf
4049 arr.slice = BP.slice
4050 arr.readUIntLE = BP.readUIntLE
4051 arr.readUIntBE = BP.readUIntBE
4052 arr.readUInt8 = BP.readUInt8
4053 arr.readUInt16LE = BP.readUInt16LE
4054 arr.readUInt16BE = BP.readUInt16BE
4055 arr.readUInt32LE = BP.readUInt32LE
4056 arr.readUInt32BE = BP.readUInt32BE
4057 arr.readIntLE = BP.readIntLE
4058 arr.readIntBE = BP.readIntBE
4059 arr.readInt8 = BP.readInt8
4060 arr.readInt16LE = BP.readInt16LE
4061 arr.readInt16BE = BP.readInt16BE
4062 arr.readInt32LE = BP.readInt32LE
4063 arr.readInt32BE = BP.readInt32BE
4064 arr.readFloatLE = BP.readFloatLE
4065 arr.readFloatBE = BP.readFloatBE
4066 arr.readDoubleLE = BP.readDoubleLE
4067 arr.readDoubleBE = BP.readDoubleBE
4068 arr.writeUInt8 = BP.writeUInt8
4069 arr.writeUIntLE = BP.writeUIntLE
4070 arr.writeUIntBE = BP.writeUIntBE
4071 arr.writeUInt16LE = BP.writeUInt16LE
4072 arr.writeUInt16BE = BP.writeUInt16BE
4073 arr.writeUInt32LE = BP.writeUInt32LE
4074 arr.writeUInt32BE = BP.writeUInt32BE
4075 arr.writeIntLE = BP.writeIntLE
4076 arr.writeIntBE = BP.writeIntBE
4077 arr.writeInt8 = BP.writeInt8
4078 arr.writeInt16LE = BP.writeInt16LE
4079 arr.writeInt16BE = BP.writeInt16BE
4080 arr.writeInt32LE = BP.writeInt32LE
4081 arr.writeInt32BE = BP.writeInt32BE
4082 arr.writeFloatLE = BP.writeFloatLE
4083 arr.writeFloatBE = BP.writeFloatBE
4084 arr.writeDoubleLE = BP.writeDoubleLE
4085 arr.writeDoubleBE = BP.writeDoubleBE
4087 arr.inspect = BP.inspect
4088 arr.toArrayBuffer = BP.toArrayBuffer
4093 var INVALID_BASE64_RE = /[^+\/
0-
9A-Za-z-_]/g
4095 function base64clean (str) {
4096 // Node strips out invalid characters like \n and \t from the string, base64-js does not
4097 str = stringtrim(str).replace(INVALID_BASE64_RE, '')
4098 // Node converts strings with length <
2 to ''
4099 if (str.length <
2) return ''
4100 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
4101 while (str.length %
4 !==
0) {
4107 function stringtrim (str) {
4108 if (str.trim) return str.trim()
4109 return str.replace(/^\s+|\s+$/g, '')
4112 function toHex (n) {
4113 if (n <
16) return '
0' + n.toString(
16)
4114 return n.toString(
16)
4117 function utf8ToBytes (string, units) {
4118 units = units || Infinity
4120 var length = string.length
4121 var leadSurrogate = null
4124 for (var i =
0; i < length; i++) {
4125 codePoint = string.charCodeAt(i)
4127 // is surrogate component
4128 if (codePoint
> 0xD7FF && codePoint <
0xE000) {
4129 // last char was a lead
4130 if (!leadSurrogate) {
4132 if (codePoint
> 0xDBFF) {
4134 if ((units -=
3)
> -
1) bytes.push(
0xEF,
0xBF,
0xBD)
4137 } else if (i +
1 === length) {
4139 if ((units -=
3)
> -
1) bytes.push(
0xEF,
0xBF,
0xBD)
4144 leadSurrogate = codePoint
4150 if (codePoint <
0xDC00) {
4151 if ((units -=
3)
> -
1) bytes.push(
0xEF,
0xBF,
0xBD)
4152 leadSurrogate = codePoint
4156 // valid surrogate pair
4157 codePoint = leadSurrogate -
0xD800 <<
10 | codePoint -
0xDC00 |
0x10000
4159 } else if (leadSurrogate) {
4160 // valid bmp char, but last char was a lead
4161 if ((units -=
3)
> -
1) bytes.push(
0xEF,
0xBF,
0xBD)
4164 leadSurrogate = null
4167 if (codePoint <
0x80) {
4168 if ((units -=
1) <
0) break
4169 bytes.push(codePoint)
4170 } else if (codePoint <
0x800) {
4171 if ((units -=
2) <
0) break
4173 codePoint
>> 0x6 |
0xC0,
4174 codePoint &
0x3F |
0x80
4176 } else if (codePoint <
0x10000) {
4177 if ((units -=
3) <
0) break
4179 codePoint
>> 0xC |
0xE0,
4180 codePoint
>> 0x6 &
0x3F |
0x80,
4181 codePoint &
0x3F |
0x80
4183 } else if (codePoint <
0x110000) {
4184 if ((units -=
4) <
0) break
4186 codePoint
>> 0x12 |
0xF0,
4187 codePoint
>> 0xC &
0x3F |
0x80,
4188 codePoint
>> 0x6 &
0x3F |
0x80,
4189 codePoint &
0x3F |
0x80
4192 throw new Error('Invalid code point')
4199 function asciiToBytes (str) {
4201 for (var i =
0; i < str.length; i++) {
4202 // Node's code seems to be doing this and not &
0x7F..
4203 byteArray.push(str.charCodeAt(i) &
0xFF)
4208 function utf16leToBytes (str, units) {
4211 for (var i =
0; i < str.length; i++) {
4212 if ((units -=
2) <
0) break
4214 c = str.charCodeAt(i)
4224 function base64ToBytes (str) {
4225 return base64.toByteArray(base64clean(str))
4228 function blitBuffer (src, dst, offset, length) {
4229 for (var i =
0; i < length; i++) {
4230 if ((i + offset
>= dst.length) || (i
>= src.length)) break
4231 dst[i + offset] = src[i]
4236 },{"base64-js":
8,"ieee754":
9,"is-array":
10}],
8:[function(require,module,exports){
4237 var lookup = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
4239 ;(function (exports) {
4242 var Arr = (typeof Uint8Array !== 'undefined')
4246 var PLUS = '+'.charCodeAt(
0)
4247 var SLASH = '/'.charCodeAt(
0)
4248 var NUMBER = '
0'.charCodeAt(
0)
4249 var LOWER = 'a'.charCodeAt(
0)
4250 var UPPER = 'A'.charCodeAt(
0)
4251 var PLUS_URL_SAFE = '-'.charCodeAt(
0)
4252 var SLASH_URL_SAFE = '_'.charCodeAt(
0)
4254 function decode (elt) {
4255 var code = elt.charCodeAt(
0)
4256 if (code === PLUS ||
4257 code === PLUS_URL_SAFE)
4259 if (code === SLASH ||
4260 code === SLASH_URL_SAFE)
4263 return -
1 //no match
4264 if (code < NUMBER +
10)
4265 return code - NUMBER +
26 +
26
4266 if (code < UPPER +
26)
4268 if (code < LOWER +
26)
4269 return code - LOWER +
26
4272 function b64ToByteArray (b64) {
4273 var i, j, l, tmp, placeHolders, arr
4275 if (b64.length %
4 > 0) {
4276 throw new Error('Invalid string. Length must be a multiple of
4')
4279 // the number of equal signs (place holders)
4280 // if there are two placeholders, than the two characters before it
4281 // represent one byte
4282 // if there is only one, then the three characters before it represent
2 bytes
4283 // this is just a cheap hack to not do indexOf twice
4284 var len = b64.length
4285 placeHolders = '=' === b64.charAt(len -
2) ?
2 : '=' === b64.charAt(len -
1) ?
1 :
0
4287 // base64 is
4/
3 + up to two characters of the original data
4288 arr = new Arr(b64.length *
3 /
4 - placeHolders)
4290 // if there are placeholders, only get up to the last complete
4 chars
4291 l = placeHolders
> 0 ? b64.length -
4 : b64.length
4299 for (i =
0, j =
0; i < l; i +=
4, j +=
3) {
4300 tmp = (decode(b64.charAt(i)) <<
18) | (decode(b64.charAt(i +
1)) <<
12) | (decode(b64.charAt(i +
2)) <<
6) | decode(b64.charAt(i +
3))
4301 push((tmp &
0xFF0000)
>> 16)
4302 push((tmp &
0xFF00)
>> 8)
4306 if (placeHolders ===
2) {
4307 tmp = (decode(b64.charAt(i)) <<
2) | (decode(b64.charAt(i +
1))
>> 4)
4309 } else if (placeHolders ===
1) {
4310 tmp = (decode(b64.charAt(i)) <<
10) | (decode(b64.charAt(i +
1)) <<
4) | (decode(b64.charAt(i +
2))
>> 2)
4311 push((tmp
>> 8) &
0xFF)
4318 function uint8ToBase64 (uint8) {
4320 extraBytes = uint8.length %
3, // if we have
1 byte left, pad
2 bytes
4324 function encode (num) {
4325 return lookup.charAt(num)
4328 function tripletToBase64 (num) {
4329 return encode(num
>> 18 &
0x3F) + encode(num
>> 12 &
0x3F) + encode(num
>> 6 &
0x3F) + encode(num &
0x3F)
4332 // go through the array every three bytes, we'll deal with trailing stuff later
4333 for (i =
0, length = uint8.length - extraBytes; i < length; i +=
3) {
4334 temp = (uint8[i] <<
16) + (uint8[i +
1] <<
8) + (uint8[i +
2])
4335 output += tripletToBase64(temp)
4338 // pad the end with zeros, but make sure to not forget the extra bytes
4339 switch (extraBytes) {
4341 temp = uint8[uint8.length -
1]
4342 output += encode(temp
>> 2)
4343 output += encode((temp <<
4) &
0x3F)
4347 temp = (uint8[uint8.length -
2] <<
8) + (uint8[uint8.length -
1])
4348 output += encode(temp
>> 10)
4349 output += encode((temp
>> 4) &
0x3F)
4350 output += encode((temp <<
2) &
0x3F)
4358 exports.toByteArray = b64ToByteArray
4359 exports.fromByteArray = uint8ToBase64
4360 }(typeof exports === 'undefined' ? (this.base64js = {}) : exports))
4362 },{}],
9:[function(require,module,exports){
4363 exports.read = function (buffer, offset, isLE, mLen, nBytes) {
4365 var eLen = nBytes *
8 - mLen -
1
4366 var eMax = (
1 << eLen) -
1
4367 var eBias = eMax
>> 1
4369 var i = isLE ? (nBytes -
1) :
0
4370 var d = isLE ? -
1 :
1
4371 var s = buffer[offset + i]
4375 e = s & ((
1 << (-nBits)) -
1)
4378 for (; nBits
> 0; e = e *
256 + buffer[offset + i], i += d, nBits -=
8) {}
4380 m = e & ((
1 << (-nBits)) -
1)
4383 for (; nBits
> 0; m = m *
256 + buffer[offset + i], i += d, nBits -=
8) {}
4387 } else if (e === eMax) {
4388 return m ? NaN : ((s ? -
1 :
1) * Infinity)
4390 m = m + Math.pow(
2, mLen)
4393 return (s ? -
1 :
1) * m * Math.pow(
2, e - mLen)
4396 exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
4398 var eLen = nBytes *
8 - mLen -
1
4399 var eMax = (
1 << eLen) -
1
4400 var eBias = eMax
>> 1
4401 var rt = (mLen ===
23 ? Math.pow(
2, -
24) - Math.pow(
2, -
77) :
0)
4402 var i = isLE ?
0 : (nBytes -
1)
4403 var d = isLE ?
1 : -
1
4404 var s = value <
0 || (value ===
0 &&
1 / value <
0) ?
1 :
0
4406 value = Math.abs(value)
4408 if (isNaN(value) || value === Infinity) {
4409 m = isNaN(value) ?
1 :
0
4412 e = Math.floor(Math.log(value) / Math.LN2)
4413 if (value * (c = Math.pow(
2, -e)) <
1) {
4417 if (e + eBias
>=
1) {
4420 value += rt * Math.pow(
2,
1 - eBias)
4422 if (value * c
>=
2) {
4427 if (e + eBias
>= eMax) {
4430 } else if (e + eBias
>=
1) {
4431 m = (value * c -
1) * Math.pow(
2, mLen)
4434 m = value * Math.pow(
2, eBias -
1) * Math.pow(
2, mLen)
4439 for (; mLen
>=
8; buffer[offset + i] = m &
0xff, i += d, m /=
256, mLen -=
8) {}
4443 for (; eLen
> 0; buffer[offset + i] = e &
0xff, i += d, e /=
256, eLen -=
8) {}
4445 buffer[offset + i - d] |= s *
128
4448 },{}],
10:[function(require,module,exports){
4454 var isArray = Array.isArray;
4460 var str = Object.prototype.toString;
4463 * Whether or not the given `val`
4470 * isArray(arguments);
4475 * @param {mixed} val
4479 module.exports = isArray || function (val) {
4480 return !! val && '[object Array]' == str.call(val);
4483 },{}],
11:[function(require,module,exports){
4484 // Copyright Joyent, Inc. and other Node contributors.
4486 // Permission is hereby granted, free of charge, to any person obtaining a
4487 // copy of this software and associated documentation files (the
4488 // "Software"), to deal in the Software without restriction, including
4489 // without limitation the rights to use, copy, modify, merge, publish,
4490 // distribute, sublicense, and/or sell copies of the Software, and to permit
4491 // persons to whom the Software is furnished to do so, subject to the
4492 // following conditions:
4494 // The above copyright notice and this permission notice shall be included
4495 // in all copies or substantial portions of the Software.
4497 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
4498 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
4499 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
4500 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
4501 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
4502 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
4503 // USE OR OTHER DEALINGS IN THE SOFTWARE.
4505 function EventEmitter() {
4506 this._events = this._events || {};
4507 this._maxListeners = this._maxListeners || undefined;
4509 module.exports = EventEmitter;
4511 // Backwards-compat with node
0.10.x
4512 EventEmitter.EventEmitter = EventEmitter;
4514 EventEmitter.prototype._events = undefined;
4515 EventEmitter.prototype._maxListeners = undefined;
4517 // By default EventEmitters will print a warning if more than
10 listeners are
4518 // added to it. This is a useful default which helps finding memory leaks.
4519 EventEmitter.defaultMaxListeners =
10;
4521 // Obviously not all Emitters should be limited to
10. This function allows
4522 // that to be increased. Set to zero for unlimited.
4523 EventEmitter.prototype.setMaxListeners = function(n) {
4524 if (!isNumber(n) || n <
0 || isNaN(n))
4525 throw TypeError('n must be a positive number');
4526 this._maxListeners = n;
4530 EventEmitter.prototype.emit = function(type) {
4531 var er, handler, len, args, i, listeners;
4536 // If there is no 'error' event listener then throw.
4537 if (type === 'error') {
4538 if (!this._events.error ||
4539 (isObject(this._events.error) && !this._events.error.length)) {
4541 if (er instanceof Error) {
4542 throw er; // Unhandled 'error' event
4544 throw TypeError('Uncaught, unspecified "error" event.');
4548 handler = this._events[type];
4550 if (isUndefined(handler))
4553 if (isFunction(handler)) {
4554 switch (arguments.length) {
4560 handler.call(this, arguments[
1]);
4563 handler.call(this, arguments[
1], arguments[
2]);
4567 len = arguments.length;
4568 args = new Array(len -
1);
4569 for (i =
1; i < len; i++)
4570 args[i -
1] = arguments[i];
4571 handler.apply(this, args);
4573 } else if (isObject(handler)) {
4574 len = arguments.length;
4575 args = new Array(len -
1);
4576 for (i =
1; i < len; i++)
4577 args[i -
1] = arguments[i];
4579 listeners = handler.slice();
4580 len = listeners.length;
4581 for (i =
0; i < len; i++)
4582 listeners[i].apply(this, args);
4588 EventEmitter.prototype.addListener = function(type, listener) {
4591 if (!isFunction(listener))
4592 throw TypeError('listener must be a function');
4597 // To avoid recursion in the case that type === "newListener"! Before
4598 // adding it to the listeners, first emit "newListener".
4599 if (this._events.newListener)
4600 this.emit('newListener', type,
4601 isFunction(listener.listener) ?
4602 listener.listener : listener);
4604 if (!this._events[type])
4605 // Optimize the case of one listener. Don't need the extra array object.
4606 this._events[type] = listener;
4607 else if (isObject(this._events[type]))
4608 // If we've already got an array, just append.
4609 this._events[type].push(listener);
4611 // Adding the second element, need to change to array.
4612 this._events[type] = [this._events[type], listener];
4614 // Check for listener leak
4615 if (isObject(this._events[type]) && !this._events[type].warned) {
4617 if (!isUndefined(this._maxListeners)) {
4618 m = this._maxListeners;
4620 m = EventEmitter.defaultMaxListeners;
4623 if (m && m
> 0 && this._events[type].length
> m) {
4624 this._events[type].warned = true;
4625 console.error('(node) warning: possible EventEmitter memory ' +
4626 'leak detected. %d listeners added. ' +
4627 'Use emitter.setMaxListeners() to increase limit.',
4628 this._events[type].length);
4629 if (typeof console.trace === 'function') {
4630 // not supported in IE
10
4639 EventEmitter.prototype.on = EventEmitter.prototype.addListener;
4641 EventEmitter.prototype.once = function(type, listener) {
4642 if (!isFunction(listener))
4643 throw TypeError('listener must be a function');
4648 this.removeListener(type, g);
4652 listener.apply(this, arguments);
4656 g.listener = listener;
4662 // emits a 'removeListener' event iff the listener was removed
4663 EventEmitter.prototype.removeListener = function(type, listener) {
4664 var list, position, length, i;
4666 if (!isFunction(listener))
4667 throw TypeError('listener must be a function');
4669 if (!this._events || !this._events[type])
4672 list = this._events[type];
4673 length = list.length;
4676 if (list === listener ||
4677 (isFunction(list.listener) && list.listener === listener)) {
4678 delete this._events[type];
4679 if (this._events.removeListener)
4680 this.emit('removeListener', type, listener);
4682 } else if (isObject(list)) {
4683 for (i = length; i--
> 0;) {
4684 if (list[i] === listener ||
4685 (list[i].listener && list[i].listener === listener)) {
4694 if (list.length ===
1) {
4696 delete this._events[type];
4698 list.splice(position,
1);
4701 if (this._events.removeListener)
4702 this.emit('removeListener', type, listener);
4708 EventEmitter.prototype.removeAllListeners = function(type) {
4714 // not listening for removeListener, no need to emit
4715 if (!this._events.removeListener) {
4716 if (arguments.length ===
0)
4718 else if (this._events[type])
4719 delete this._events[type];
4723 // emit removeListener for all listeners on all events
4724 if (arguments.length ===
0) {
4725 for (key in this._events) {
4726 if (key === 'removeListener') continue;
4727 this.removeAllListeners(key);
4729 this.removeAllListeners('removeListener');
4734 listeners = this._events[type];
4736 if (isFunction(listeners)) {
4737 this.removeListener(type, listeners);
4740 while (listeners.length)
4741 this.removeListener(type, listeners[listeners.length -
1]);
4743 delete this._events[type];
4748 EventEmitter.prototype.listeners = function(type) {
4750 if (!this._events || !this._events[type])
4752 else if (isFunction(this._events[type]))
4753 ret = [this._events[type]];
4755 ret = this._events[type].slice();
4759 EventEmitter.listenerCount = function(emitter, type) {
4761 if (!emitter._events || !emitter._events[type])
4763 else if (isFunction(emitter._events[type]))
4766 ret = emitter._events[type].length;
4770 function isFunction(arg) {
4771 return typeof arg === 'function';
4774 function isNumber(arg) {
4775 return typeof arg === 'number';
4778 function isObject(arg) {
4779 return typeof arg === 'object' && arg !== null;
4782 function isUndefined(arg) {
4783 return arg === void
0;
4786 },{}],
12:[function(require,module,exports){
4787 if (typeof Object.create === 'function') {
4788 // implementation from standard node.js 'util' module
4789 module.exports = function inherits(ctor, superCtor) {
4790 ctor.super_ = superCtor
4791 ctor.prototype = Object.create(superCtor.prototype, {
4801 // old school shim for old browsers
4802 module.exports = function inherits(ctor, superCtor) {
4803 ctor.super_ = superCtor
4804 var TempCtor = function () {}
4805 TempCtor.prototype = superCtor.prototype
4806 ctor.prototype = new TempCtor()
4807 ctor.prototype.constructor = ctor
4811 },{}],
13:[function(require,module,exports){
4812 module.exports = Array.isArray || function (arr) {
4813 return Object.prototype.toString.call(arr) == '[object Array]';
4816 },{}],
14:[function(require,module,exports){
4817 // shim for using process in browser
4819 var process = module.exports = {};
4821 var draining = false;
4823 var queueIndex = -
1;
4825 function cleanUpNextTick() {
4827 if (currentQueue.length) {
4828 queue = currentQueue.concat(queue);
4837 function drainQueue() {
4841 var timeout = setTimeout(cleanUpNextTick);
4844 var len = queue.length;
4846 currentQueue = queue;
4848 while (++queueIndex < len) {
4849 currentQueue[queueIndex].run();
4854 currentQueue = null;
4856 clearTimeout(timeout);
4859 process.nextTick = function (fun) {
4860 var args = new Array(arguments.length -
1);
4861 if (arguments.length
> 1) {
4862 for (var i =
1; i < arguments.length; i++) {
4863 args[i -
1] = arguments[i];
4866 queue.push(new Item(fun, args));
4867 if (queue.length ===
1 && !draining) {
4868 setTimeout(drainQueue,
0);
4872 // v8 likes predictible objects
4873 function Item(fun, array) {
4877 Item.prototype.run = function () {
4878 this.fun.apply(null, this.array);
4880 process.title = 'browser';
4881 process.browser = true;
4884 process.version = ''; // empty string to avoid regexp issues
4885 process.versions = {};
4890 process.addListener = noop;
4891 process.once = noop;
4893 process.removeListener = noop;
4894 process.removeAllListeners = noop;
4895 process.emit = noop;
4897 process.binding = function (name) {
4898 throw new Error('process.binding is not supported');
4902 process.cwd = function () { return '/' };
4903 process.chdir = function (dir) {
4904 throw new Error('process.chdir is not supported');
4906 process.umask = function() { return
0; };
4908 },{}],
15:[function(require,module,exports){
4909 module.exports = require(
"./lib/_stream_duplex.js")
4911 },{
"./lib/_stream_duplex.js":
16}],
16:[function(require,module,exports){
4912 (function (process){
4913 // Copyright Joyent, Inc. and other Node contributors.
4915 // Permission is hereby granted, free of charge, to any person obtaining a
4916 // copy of this software and associated documentation files (the
4917 //
"Software"), to deal in the Software without restriction, including
4918 // without limitation the rights to use, copy, modify, merge, publish,
4919 // distribute, sublicense, and/or sell copies of the Software, and to permit
4920 // persons to whom the Software is furnished to do so, subject to the
4921 // following conditions:
4923 // The above copyright notice and this permission notice shall be included
4924 // in all copies or substantial portions of the Software.
4926 // THE SOFTWARE IS PROVIDED
"AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
4927 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
4928 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
4929 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
4930 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
4931 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
4932 // USE OR OTHER DEALINGS IN THE SOFTWARE.
4934 // a duplex stream is just a stream that is both readable and writable.
4935 // Since JS doesn't have multiple prototypal inheritance, this class
4936 // prototypally inherits from Readable, and then parasitically from
4939 module.exports = Duplex;
4942 var objectKeys = Object.keys || function (obj) {
4944 for (var key in obj) keys.push(key);
4951 var util = require('core-util-is');
4952 util.inherits = require('inherits');
4955 var Readable = require('./_stream_readable');
4956 var Writable = require('./_stream_writable');
4958 util.inherits(Duplex, Readable);
4960 forEach(objectKeys(Writable.prototype), function(method) {
4961 if (!Duplex.prototype[method])
4962 Duplex.prototype[method] = Writable.prototype[method];
4965 function Duplex(options) {
4966 if (!(this instanceof Duplex))
4967 return new Duplex(options);
4969 Readable.call(this, options);
4970 Writable.call(this, options);
4972 if (options && options.readable === false)
4973 this.readable = false;
4975 if (options && options.writable === false)
4976 this.writable = false;
4978 this.allowHalfOpen = true;
4979 if (options && options.allowHalfOpen === false)
4980 this.allowHalfOpen = false;
4982 this.once('end', onend);
4985 // the no-half-open enforcer
4987 // if we allow half-open state, or if the writable side ended,
4989 if (this.allowHalfOpen || this._writableState.ended)
4992 // no more data can be written.
4993 // But allow more writes to happen in this tick.
4994 process.nextTick(this.end.bind(this));
4997 function forEach (xs, f) {
4998 for (var i =
0, l = xs.length; i < l; i++) {
5003 }).call(this,require('_process'))
5004 },{"./_stream_readable":
18,"./_stream_writable":
20,"_process":
14,"core-util-is":
21,"inherits":
12}],
17:[function(require,module,exports){
5005 // Copyright Joyent, Inc. and other Node contributors.
5007 // Permission is hereby granted, free of charge, to any person obtaining a
5008 // copy of this software and associated documentation files (the
5009 // "Software"), to deal in the Software without restriction, including
5010 // without limitation the rights to use, copy, modify, merge, publish,
5011 // distribute, sublicense, and/or sell copies of the Software, and to permit
5012 // persons to whom the Software is furnished to do so, subject to the
5013 // following conditions:
5015 // The above copyright notice and this permission notice shall be included
5016 // in all copies or substantial portions of the Software.
5018 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
5019 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
5020 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
5021 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
5022 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
5023 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
5024 // USE OR OTHER DEALINGS IN THE SOFTWARE.
5026 // a passthrough stream.
5027 // basically just the most minimal sort of Transform stream.
5028 // Every written chunk gets output as-is.
5030 module.exports = PassThrough;
5032 var Transform = require('./_stream_transform');
5035 var util = require('core-util-is');
5036 util.inherits = require('inherits');
5039 util.inherits(PassThrough, Transform);
5041 function PassThrough(options) {
5042 if (!(this instanceof PassThrough))
5043 return new PassThrough(options);
5045 Transform.call(this, options);
5048 PassThrough.prototype._transform = function(chunk, encoding, cb) {
5052 },{"./_stream_transform":
19,"core-util-is":
21,"inherits":
12}],
18:[function(require,module,exports){
5053 (function (process){
5054 // Copyright Joyent, Inc. and other Node contributors.
5056 // Permission is hereby granted, free of charge, to any person obtaining a
5057 // copy of this software and associated documentation files (the
5058 // "Software"), to deal in the Software without restriction, including
5059 // without limitation the rights to use, copy, modify, merge, publish,
5060 // distribute, sublicense, and/or sell copies of the Software, and to permit
5061 // persons to whom the Software is furnished to do so, subject to the
5062 // following conditions:
5064 // The above copyright notice and this permission notice shall be included
5065 // in all copies or substantial portions of the Software.
5067 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
5068 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
5069 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
5070 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
5071 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
5072 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
5073 // USE OR OTHER DEALINGS IN THE SOFTWARE.
5075 module.exports = Readable;
5078 var isArray = require('isarray');
5083 var Buffer = require('buffer').Buffer;
5086 Readable.ReadableState = ReadableState;
5088 var EE = require('events').EventEmitter;
5091 if (!EE.listenerCount) EE.listenerCount = function(emitter, type) {
5092 return emitter.listeners(type).length;
5096 var Stream = require('stream');
5099 var util = require('core-util-is');
5100 util.inherits = require('inherits');
5107 var debug = require('util');
5108 if (debug && debug.debuglog) {
5109 debug = debug.debuglog('stream');
5111 debug = function () {};
5116 util.inherits(Readable, Stream);
5118 function ReadableState(options, stream) {
5119 var Duplex = require('./_stream_duplex');
5121 options = options || {};
5123 // the point at which it stops calling _read() to fill the buffer
5124 // Note:
0 is a valid value, means "don't call _read preemptively ever"
5125 var hwm = options.highWaterMark;
5126 var defaultHwm = options.objectMode ?
16 :
16 *
1024;
5127 this.highWaterMark = (hwm || hwm ===
0) ? hwm : defaultHwm;
5130 this.highWaterMark = ~~this.highWaterMark;
5135 this.pipesCount =
0;
5136 this.flowing = null;
5138 this.endEmitted = false;
5139 this.reading = false;
5141 // a flag to be able to tell if the onwrite cb is called immediately,
5142 // or on a later tick. We set this to true at first, because any
5143 // actions that shouldn't happen until "later" should generally also
5144 // not happen before the first write call.
5147 // whenever we return null, then we set a flag to say
5148 // that we're awaiting a 'readable' event emission.
5149 this.needReadable = false;
5150 this.emittedReadable = false;
5151 this.readableListening = false;
5154 // object stream flag. Used to make read(n) ignore n and to
5155 // make all the buffer merging and length checks go away
5156 this.objectMode = !!options.objectMode;
5158 if (stream instanceof Duplex)
5159 this.objectMode = this.objectMode || !!options.readableObjectMode;
5161 // Crypto is kind of old and crusty. Historically, its default string
5162 // encoding is 'binary' so we have to make this configurable.
5163 // Everything else in the universe uses 'utf8', though.
5164 this.defaultEncoding = options.defaultEncoding || 'utf8';
5166 // when piping, we only care about 'readable' events that happen
5167 // after read()ing all the bytes and not getting any pushback.
5168 this.ranOut = false;
5170 // the number of writers that are awaiting a drain event in .pipe()s
5171 this.awaitDrain =
0;
5173 // if true, a maybeReadMore has been scheduled
5174 this.readingMore = false;
5176 this.decoder = null;
5177 this.encoding = null;
5178 if (options.encoding) {
5180 StringDecoder = require('string_decoder/').StringDecoder;
5181 this.decoder = new StringDecoder(options.encoding);
5182 this.encoding = options.encoding;
5186 function Readable(options) {
5187 var Duplex = require('./_stream_duplex');
5189 if (!(this instanceof Readable))
5190 return new Readable(options);
5192 this._readableState = new ReadableState(options, this);
5195 this.readable = true;
5200 // Manually shove something into the read() buffer.
5201 // This returns true if the highWaterMark has not been hit yet,
5202 // similar to how Writable.write() returns true if you should
5203 // write() some more.
5204 Readable.prototype.push = function(chunk, encoding) {
5205 var state = this._readableState;
5207 if (util.isString(chunk) && !state.objectMode) {
5208 encoding = encoding || state.defaultEncoding;
5209 if (encoding !== state.encoding) {
5210 chunk = new Buffer(chunk, encoding);
5215 return readableAddChunk(this, state, chunk, encoding, false);
5218 // Unshift should *always* be something directly out of read()
5219 Readable.prototype.unshift = function(chunk) {
5220 var state = this._readableState;
5221 return readableAddChunk(this, state, chunk, '', true);
5224 function readableAddChunk(stream, state, chunk, encoding, addToFront) {
5225 var er = chunkInvalid(state, chunk);
5227 stream.emit('error', er);
5228 } else if (util.isNullOrUndefined(chunk)) {
5229 state.reading = false;
5231 onEofChunk(stream, state);
5232 } else if (state.objectMode || chunk && chunk.length
> 0) {
5233 if (state.ended && !addToFront) {
5234 var e = new Error('stream.push() after EOF');
5235 stream.emit('error', e);
5236 } else if (state.endEmitted && addToFront) {
5237 var e = new Error('stream.unshift() after end event');
5238 stream.emit('error', e);
5240 if (state.decoder && !addToFront && !encoding)
5241 chunk = state.decoder.write(chunk);
5244 state.reading = false;
5246 // if we want the data now, just emit it.
5247 if (state.flowing && state.length ===
0 && !state.sync) {
5248 stream.emit('data', chunk);
5251 // update the buffer info.
5252 state.length += state.objectMode ?
1 : chunk.length;
5254 state.buffer.unshift(chunk);
5256 state.buffer.push(chunk);
5258 if (state.needReadable)
5259 emitReadable(stream);
5262 maybeReadMore(stream, state);
5264 } else if (!addToFront) {
5265 state.reading = false;
5268 return needMoreData(state);
5273 // if it's past the high water mark, we can push in some more.
5274 // Also, if we have no data yet, we can stand some
5275 // more bytes. This is to work around cases where hwm=
0,
5276 // such as the repl. Also, if the push() triggered a
5277 // readable event, and the user called read(largeNumber) such that
5278 // needReadable was set, then we ought to push more, so that another
5279 // 'readable' event will be triggered.
5280 function needMoreData(state) {
5281 return !state.ended &&
5282 (state.needReadable ||
5283 state.length < state.highWaterMark ||
5284 state.length ===
0);
5287 // backwards compatibility.
5288 Readable.prototype.setEncoding = function(enc) {
5290 StringDecoder = require('string_decoder/').StringDecoder;
5291 this._readableState.decoder = new StringDecoder(enc);
5292 this._readableState.encoding = enc;
5296 // Don't raise the hwm
> 128MB
5297 var MAX_HWM =
0x800000;
5298 function roundUpToNextPowerOf2(n) {
5302 // Get the next highest power of
2
5304 for (var p =
1; p <
32; p <<=
1) n |= n
>> p;
5310 function howMuchToRead(n, state) {
5311 if (state.length ===
0 && state.ended)
5314 if (state.objectMode)
5315 return n ===
0 ?
0 :
1;
5317 if (isNaN(n) || util.isNull(n)) {
5318 // only flow one buffer at a time
5319 if (state.flowing && state.buffer.length)
5320 return state.buffer[
0].length;
5322 return state.length;
5328 // If we're asking for more than the target buffer level,
5329 // then raise the water mark. Bump up to the next highest
5330 // power of
2, to prevent increasing it excessively in tiny
5332 if (n
> state.highWaterMark)
5333 state.highWaterMark = roundUpToNextPowerOf2(n);
5335 // don't have that much. return null, unless we've ended.
5336 if (n
> state.length) {
5338 state.needReadable = true;
5341 return state.length;
5347 // you can override either this method, or the async _read(n) below.
5348 Readable.prototype.read = function(n) {
5350 var state = this._readableState;
5353 if (!util.isNumber(n) || n
> 0)
5354 state.emittedReadable = false;
5356 // if we're doing read(
0) to trigger a readable event, but we
5357 // already have a bunch of data in the buffer, then just trigger
5358 // the 'readable' event and move on.
5360 state.needReadable &&
5361 (state.length
>= state.highWaterMark || state.ended)) {
5362 debug('read: emitReadable', state.length, state.ended);
5363 if (state.length ===
0 && state.ended)
5370 n = howMuchToRead(n, state);
5372 // if we've ended, and we're now clear, then finish it up.
5373 if (n ===
0 && state.ended) {
5374 if (state.length ===
0)
5379 // All the actual chunk generation logic needs to be
5380 // *below* the call to _read. The reason is that in certain
5381 // synthetic stream cases, such as passthrough streams, _read
5382 // may be a completely synchronous operation which may change
5383 // the state of the read buffer, providing enough data when
5384 // before there was *not* enough.
5386 // So, the steps are:
5387 //
1. Figure out what the state of things will be after we do
5388 // a read from the buffer.
5390 //
2. If that resulting state will trigger a _read, then call _read.
5391 // Note that this may be asynchronous, or synchronous. Yes, it is
5392 // deeply ugly to write APIs this way, but that still doesn't mean
5393 // that the Readable class should behave improperly, as streams are
5394 // designed to be sync/async agnostic.
5395 // Take note if the _read call is sync or async (ie, if the read call
5396 // has returned yet), so that we know whether or not it's safe to emit
5399 //
3. Actually pull the requested chunks out of the buffer and return.
5401 // if we need a readable event, then we need to do some reading.
5402 var doRead = state.needReadable;
5403 debug('need readable', doRead);
5405 // if we currently have less than the highWaterMark, then also read some
5406 if (state.length ===
0 || state.length - n < state.highWaterMark) {
5408 debug('length less than watermark', doRead);
5411 // however, if we've ended, then there's no point, and if we're already
5412 // reading, then it's unnecessary.
5413 if (state.ended || state.reading) {
5415 debug('reading or ended', doRead);
5420 state.reading = true;
5422 // if the length is currently zero, then we *need* a readable event.
5423 if (state.length ===
0)
5424 state.needReadable = true;
5425 // call internal read method
5426 this._read(state.highWaterMark);
5430 // If _read pushed data synchronously, then `reading` will be false,
5431 // and we need to re-evaluate how much data we can return to the user.
5432 if (doRead && !state.reading)
5433 n = howMuchToRead(nOrig, state);
5437 ret = fromList(n, state);
5441 if (util.isNull(ret)) {
5442 state.needReadable = true;
5448 // If we have nothing in the buffer, then we want to know
5449 // as soon as we *do* get something into the buffer.
5450 if (state.length ===
0 && !state.ended)
5451 state.needReadable = true;
5453 // If we tried to read() past the EOF, then emit end on the next tick.
5454 if (nOrig !== n && state.ended && state.length ===
0)
5457 if (!util.isNull(ret))
5458 this.emit('data', ret);
5463 function chunkInvalid(state, chunk) {
5465 if (!util.isBuffer(chunk) &&
5466 !util.isString(chunk) &&
5467 !util.isNullOrUndefined(chunk) &&
5468 !state.objectMode) {
5469 er = new TypeError('Invalid non-string/buffer chunk');
5475 function onEofChunk(stream, state) {
5476 if (state.decoder && !state.ended) {
5477 var chunk = state.decoder.end();
5478 if (chunk && chunk.length) {
5479 state.buffer.push(chunk);
5480 state.length += state.objectMode ?
1 : chunk.length;
5485 // emit 'readable' now to make sure it gets picked up.
5486 emitReadable(stream);
5489 // Don't emit readable right away in sync mode, because this can trigger
5490 // another read() call =
> stack overflow. This way, it might trigger
5491 // a nextTick recursion warning, but that's not so bad.
5492 function emitReadable(stream) {
5493 var state = stream._readableState;
5494 state.needReadable = false;
5495 if (!state.emittedReadable) {
5496 debug('emitReadable', state.flowing);
5497 state.emittedReadable = true;
5499 process.nextTick(function() {
5500 emitReadable_(stream);
5503 emitReadable_(stream);
5507 function emitReadable_(stream) {
5508 debug('emit readable');
5509 stream.emit('readable');
5514 // at this point, the user has presumably seen the 'readable' event,
5515 // and called read() to consume some data. that may have triggered
5516 // in turn another _read(n) call, in which case reading = true if
5517 // it's in progress.
5518 // However, if we're not ended, or reading, and the length < hwm,
5519 // then go ahead and try to read some more preemptively.
5520 function maybeReadMore(stream, state) {
5521 if (!state.readingMore) {
5522 state.readingMore = true;
5523 process.nextTick(function() {
5524 maybeReadMore_(stream, state);
5529 function maybeReadMore_(stream, state) {
5530 var len = state.length;
5531 while (!state.reading && !state.flowing && !state.ended &&
5532 state.length < state.highWaterMark) {
5533 debug('maybeReadMore read
0');
5535 if (len === state.length)
5536 // didn't get any data, stop spinning.
5541 state.readingMore = false;
5544 // abstract method. to be overridden in specific implementation classes.
5545 // call cb(er, data) where data is <= n in length.
5546 // for virtual (non-string, non-buffer) streams, "length" is somewhat
5547 // arbitrary, and perhaps not very meaningful.
5548 Readable.prototype._read = function(n) {
5549 this.emit('error', new Error('not implemented'));
5552 Readable.prototype.pipe = function(dest, pipeOpts) {
5554 var state = this._readableState;
5556 switch (state.pipesCount) {
5561 state.pipes = [state.pipes, dest];
5564 state.pipes.push(dest);
5567 state.pipesCount +=
1;
5568 debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
5570 var doEnd = (!pipeOpts || pipeOpts.end !== false) &&
5571 dest !== process.stdout &&
5572 dest !== process.stderr;
5574 var endFn = doEnd ? onend : cleanup;
5575 if (state.endEmitted)
5576 process.nextTick(endFn);
5578 src.once('end', endFn);
5580 dest.on('unpipe', onunpipe);
5581 function onunpipe(readable) {
5583 if (readable === src) {
5593 // when the dest drains, it reduces the awaitDrain counter
5594 // on the source. This would be more elegant with a .once()
5595 // handler in flow(), but adding and removing repeatedly is
5597 var ondrain = pipeOnDrain(src);
5598 dest.on('drain', ondrain);
5600 function cleanup() {
5602 // cleanup event handlers once the pipe is broken
5603 dest.removeListener('close', onclose);
5604 dest.removeListener('finish', onfinish);
5605 dest.removeListener('drain', ondrain);
5606 dest.removeListener('error', onerror);
5607 dest.removeListener('unpipe', onunpipe);
5608 src.removeListener('end', onend);
5609 src.removeListener('end', cleanup);
5610 src.removeListener('data', ondata);
5612 // if the reader is waiting for a drain event from this
5613 // specific writer, then it would cause it to never start
5615 // So, if this is awaiting a drain, then we just call it now.
5616 // If we don't know, then assume that we are waiting for one.
5617 if (state.awaitDrain &&
5618 (!dest._writableState || dest._writableState.needDrain))
5622 src.on('data', ondata);
5623 function ondata(chunk) {
5625 var ret = dest.write(chunk);
5626 if (false === ret) {
5627 debug('false write response, pause',
5628 src._readableState.awaitDrain);
5629 src._readableState.awaitDrain++;
5634 // if the dest has an error, then stop piping into it.
5635 // however, don't suppress the throwing behavior for this.
5636 function onerror(er) {
5637 debug('onerror', er);
5639 dest.removeListener('error', onerror);
5640 if (EE.listenerCount(dest, 'error') ===
0)
5641 dest.emit('error', er);
5643 // This is a brutally ugly hack to make sure that our error handler
5644 // is attached before any userland ones. NEVER DO THIS.
5645 if (!dest._events || !dest._events.error)
5646 dest.on('error', onerror);
5647 else if (isArray(dest._events.error))
5648 dest._events.error.unshift(onerror);
5650 dest._events.error = [onerror, dest._events.error];
5654 // Both close and finish should trigger unpipe, but only once.
5655 function onclose() {
5656 dest.removeListener('finish', onfinish);
5659 dest.once('close', onclose);
5660 function onfinish() {
5662 dest.removeListener('close', onclose);
5665 dest.once('finish', onfinish);
5672 // tell the dest that it's being piped to
5673 dest.emit('pipe', src);
5675 // start the flow if it hasn't been started already.
5676 if (!state.flowing) {
5677 debug('pipe resume');
5684 function pipeOnDrain(src) {
5686 var state = src._readableState;
5687 debug('pipeOnDrain', state.awaitDrain);
5688 if (state.awaitDrain)
5690 if (state.awaitDrain ===
0 && EE.listenerCount(src, 'data')) {
5691 state.flowing = true;
5698 Readable.prototype.unpipe = function(dest) {
5699 var state = this._readableState;
5701 // if we're not piping anywhere, then do nothing.
5702 if (state.pipesCount ===
0)
5705 // just one destination. most common case.
5706 if (state.pipesCount ===
1) {
5707 // passed in one, but it's not the right one.
5708 if (dest && dest !== state.pipes)
5716 state.pipesCount =
0;
5717 state.flowing = false;
5719 dest.emit('unpipe', this);
5723 // slow case. multiple pipe destinations.
5727 var dests = state.pipes;
5728 var len = state.pipesCount;
5730 state.pipesCount =
0;
5731 state.flowing = false;
5733 for (var i =
0; i < len; i++)
5734 dests[i].emit('unpipe', this);
5738 // try to find the right one.
5739 var i = indexOf(state.pipes, dest);
5743 state.pipes.splice(i,
1);
5744 state.pipesCount -=
1;
5745 if (state.pipesCount ===
1)
5746 state.pipes = state.pipes[
0];
5748 dest.emit('unpipe', this);
5753 // set up data events if they are asked for
5754 // Ensure readable listeners eventually get something
5755 Readable.prototype.on = function(ev, fn) {
5756 var res = Stream.prototype.on.call(this, ev, fn);
5758 // If listening to data, and it has not explicitly been paused,
5759 // then call resume to start the flow of data on the next tick.
5760 if (ev === 'data' && false !== this._readableState.flowing) {
5764 if (ev === 'readable' && this.readable) {
5765 var state = this._readableState;
5766 if (!state.readableListening) {
5767 state.readableListening = true;
5768 state.emittedReadable = false;
5769 state.needReadable = true;
5770 if (!state.reading) {
5772 process.nextTick(function() {
5773 debug('readable nexttick read
0');
5776 } else if (state.length) {
5777 emitReadable(this, state);
5784 Readable.prototype.addListener = Readable.prototype.on;
5786 // pause() and resume() are remnants of the legacy readable stream API
5787 // If the user uses them, then switch into old mode.
5788 Readable.prototype.resume = function() {
5789 var state = this._readableState;
5790 if (!state.flowing) {
5792 state.flowing = true;
5793 if (!state.reading) {
5794 debug('resume read
0');
5797 resume(this, state);
5802 function resume(stream, state) {
5803 if (!state.resumeScheduled) {
5804 state.resumeScheduled = true;
5805 process.nextTick(function() {
5806 resume_(stream, state);
5811 function resume_(stream, state) {
5812 state.resumeScheduled = false;
5813 stream.emit('resume');
5815 if (state.flowing && !state.reading)
5819 Readable.prototype.pause = function() {
5820 debug('call pause flowing=%j', this._readableState.flowing);
5821 if (false !== this._readableState.flowing) {
5823 this._readableState.flowing = false;
5829 function flow(stream) {
5830 var state = stream._readableState;
5831 debug('flow', state.flowing);
5832 if (state.flowing) {
5834 var chunk = stream.read();
5835 } while (null !== chunk && state.flowing);
5839 // wrap an old-style stream as the async data source.
5840 // This is *not* part of the readable stream interface.
5841 // It is an ugly unfortunate mess of history.
5842 Readable.prototype.wrap = function(stream) {
5843 var state = this._readableState;
5847 stream.on('end', function() {
5848 debug('wrapped end');
5849 if (state.decoder && !state.ended) {
5850 var chunk = state.decoder.end();
5851 if (chunk && chunk.length)
5858 stream.on('data', function(chunk) {
5859 debug('wrapped data');
5861 chunk = state.decoder.write(chunk);
5862 if (!chunk || !state.objectMode && !chunk.length)
5865 var ret = self.push(chunk);
5872 // proxy all the other methods.
5873 // important when wrapping filters and duplexes.
5874 for (var i in stream) {
5875 if (util.isFunction(stream[i]) && util.isUndefined(this[i])) {
5876 this[i] = function(method) { return function() {
5877 return stream[method].apply(stream, arguments);
5882 // proxy certain important events.
5883 var events = ['error', 'close', 'destroy', 'pause', 'resume'];
5884 forEach(events, function(ev) {
5885 stream.on(ev, self.emit.bind(self, ev));
5888 // when we try to consume some more bytes, simply unpause the
5889 // underlying stream.
5890 self._read = function(n) {
5891 debug('wrapped _read', n);
5903 // exposed for testing purposes only.
5904 Readable._fromList = fromList;
5906 // Pluck off n bytes from an array of buffers.
5907 // Length is the combined lengths of all the buffers in the list.
5908 function fromList(n, state) {
5909 var list = state.buffer;
5910 var length = state.length;
5911 var stringMode = !!state.decoder;
5912 var objectMode = !!state.objectMode;
5915 // nothing in the list, definitely empty.
5916 if (list.length ===
0)
5921 else if (objectMode)
5923 else if (!n || n
>= length) {
5924 // read it all, truncate the array.
5926 ret = list.join('');
5928 ret = Buffer.concat(list, length);
5931 // read just some of it.
5932 if (n < list[
0].length) {
5933 // just take a part of the first list item.
5934 // slice is the same for buffers and strings.
5936 ret = buf.slice(
0, n);
5937 list[
0] = buf.slice(n);
5938 } else if (n === list[
0].length) {
5939 // first list is a perfect match
5943 // we have enough to cover it, but it spans past the first buffer.
5947 ret = new Buffer(n);
5950 for (var i =
0, l = list.length; i < l && c < n; i++) {
5952 var cpy = Math.min(n - c, buf.length);
5955 ret += buf.slice(
0, cpy);
5957 buf.copy(ret, c,
0, cpy);
5959 if (cpy < buf.length)
5960 list[
0] = buf.slice(cpy);
5972 function endReadable(stream) {
5973 var state = stream._readableState;
5975 // If we get here before consuming all the bytes, then that is a
5976 // bug in node. Should never happen.
5977 if (state.length
> 0)
5978 throw new Error('endReadable called on non-empty stream');
5980 if (!state.endEmitted) {
5982 process.nextTick(function() {
5983 // Check that we didn't get one last unshift.
5984 if (!state.endEmitted && state.length ===
0) {
5985 state.endEmitted = true;
5986 stream.readable = false;
5993 function forEach (xs, f) {
5994 for (var i =
0, l = xs.length; i < l; i++) {
5999 function indexOf (xs, x) {
6000 for (var i =
0, l = xs.length; i < l; i++) {
6001 if (xs[i] === x) return i;
6006 }).call(this,require('_process'))
6007 },{
"./_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){
6008 // Copyright Joyent, Inc. and other Node contributors.
6010 // Permission is hereby granted, free of charge, to any person obtaining a
6011 // copy of this software and associated documentation files (the
6012 //
"Software"), to deal in the Software without restriction, including
6013 // without limitation the rights to use, copy, modify, merge, publish,
6014 // distribute, sublicense, and/or sell copies of the Software, and to permit
6015 // persons to whom the Software is furnished to do so, subject to the
6016 // following conditions:
6018 // The above copyright notice and this permission notice shall be included
6019 // in all copies or substantial portions of the Software.
6021 // THE SOFTWARE IS PROVIDED
"AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6022 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6023 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6024 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6025 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6026 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6027 // USE OR OTHER DEALINGS IN THE SOFTWARE.
6030 // a transform stream is a readable/writable stream where you do
6031 // something with the data. Sometimes it's called a
"filter",
6032 // but that's not a great name for it, since that implies a thing where
6033 // some bits pass through, and others are simply ignored. (That would
6034 // be a valid example of a transform, of course.)
6036 // While the output is causally related to the input, it's not a
6037 // necessarily symmetric or synchronous transformation. For example,
6038 // a zlib stream might take multiple plain-text writes(), and then
6039 // emit a single compressed chunk some time in the future.
6041 // Here's how this works:
6043 // The Transform stream has all the aspects of the readable and writable
6044 // stream classes. When you write(chunk), that calls _write(chunk,cb)
6045 // internally, and returns false if there's a lot of pending writes
6046 // buffered up. When you call read(), that calls _read(n) until
6047 // there's enough pending readable data buffered up.
6049 // In a transform stream, the written data is placed in a buffer. When
6050 // _read(n) is called, it transforms the queued up data, calling the
6051 // buffered _write cb's as it consumes chunks. If consuming a single
6052 // written chunk would result in multiple output chunks, then the first
6053 // outputted bit calls the readcb, and subsequent chunks just go into
6054 // the read buffer, and will cause it to emit 'readable' if necessary.
6056 // This way, back-pressure is actually determined by the reading side,
6057 // since _read has to be called to start processing a new chunk. However,
6058 // a pathological inflate type of transform can cause excessive buffering
6059 // here. For example, imagine a stream where every byte of input is
6060 // interpreted as an integer from
0-
255, and then results in that many
6061 // bytes of output. Writing the
4 bytes {ff,ff,ff,ff} would result in
6062 //
1kb of data being output. In this case, you could write a very small
6063 // amount of input, and end up with a very large amount of output. In
6064 // such a pathological inflating mechanism, there'd be no way to tell
6065 // the system to stop doing the transform. A single
4MB write could
6066 // cause the system to run out of memory.
6068 // However, even in such a pathological case, only a single written chunk
6069 // would be consumed, and then the rest would wait (un-transformed) until
6070 // the results of the previous transformed chunk were consumed.
6072 module.exports = Transform;
6074 var Duplex = require('./_stream_duplex');
6077 var util = require('core-util-is');
6078 util.inherits = require('inherits');
6081 util.inherits(Transform, Duplex);
6084 function TransformState(options, stream) {
6085 this.afterTransform = function(er, data) {
6086 return afterTransform(stream, er, data);
6089 this.needTransform = false;
6090 this.transforming = false;
6091 this.writecb = null;
6092 this.writechunk = null;
6095 function afterTransform(stream, er, data) {
6096 var ts = stream._transformState;
6097 ts.transforming = false;
6099 var cb = ts.writecb;
6102 return stream.emit('error', new Error('no writecb in Transform class'));
6104 ts.writechunk = null;
6107 if (!util.isNullOrUndefined(data))
6113 var rs = stream._readableState;
6115 if (rs.needReadable || rs.length < rs.highWaterMark) {
6116 stream._read(rs.highWaterMark);
6121 function Transform(options) {
6122 if (!(this instanceof Transform))
6123 return new Transform(options);
6125 Duplex.call(this, options);
6127 this._transformState = new TransformState(options, this);
6129 // when the writable side finishes, then flush out anything remaining.
6132 // start out asking for a readable event once data is transformed.
6133 this._readableState.needReadable = true;
6135 // we have implemented the _read method, and done the other things
6136 // that Readable wants before the first _read call, so unset the
6138 this._readableState.sync = false;
6140 this.once('prefinish', function() {
6141 if (util.isFunction(this._flush))
6142 this._flush(function(er) {
6150 Transform.prototype.push = function(chunk, encoding) {
6151 this._transformState.needTransform = false;
6152 return Duplex.prototype.push.call(this, chunk, encoding);
6155 // This is the part where you do stuff!
6156 // override this function in implementation classes.
6157 // 'chunk' is an input chunk.
6159 // Call `push(newChunk)` to pass along transformed output
6160 // to the readable side. You may call 'push' zero or more times.
6162 // Call `cb(err)` when you are done with this chunk. If you pass
6163 // an error, then that'll put the hurt on the whole operation. If you
6164 // never call cb(), then you'll never get another chunk.
6165 Transform.prototype._transform = function(chunk, encoding, cb) {
6166 throw new Error('not implemented');
6169 Transform.prototype._write = function(chunk, encoding, cb) {
6170 var ts = this._transformState;
6172 ts.writechunk = chunk;
6173 ts.writeencoding = encoding;
6174 if (!ts.transforming) {
6175 var rs = this._readableState;
6176 if (ts.needTransform ||
6178 rs.length < rs.highWaterMark)
6179 this._read(rs.highWaterMark);
6183 // Doesn't matter what the args are here.
6184 // _transform does all the work.
6185 // That we got here means that the readable side wants more data.
6186 Transform.prototype._read = function(n) {
6187 var ts = this._transformState;
6189 if (!util.isNull(ts.writechunk) && ts.writecb && !ts.transforming) {
6190 ts.transforming = true;
6191 this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
6193 // mark that we need a transform, so that any data that comes in
6194 // will get processed, now that we've asked for it.
6195 ts.needTransform = true;
6200 function done(stream, er) {
6202 return stream.emit('error', er);
6204 // if there's nothing in the write buffer, then that means
6205 // that nothing more will ever be provided
6206 var ws = stream._writableState;
6207 var ts = stream._transformState;
6210 throw new Error('calling transform done when ws.length !=
0');
6212 if (ts.transforming)
6213 throw new Error('calling transform done when still transforming');
6215 return stream.push(null);
6218 },{"./_stream_duplex":
16,"core-util-is":
21,"inherits":
12}],
20:[function(require,module,exports){
6219 (function (process){
6220 // Copyright Joyent, Inc. and other Node contributors.
6222 // Permission is hereby granted, free of charge, to any person obtaining a
6223 // copy of this software and associated documentation files (the
6224 // "Software"), to deal in the Software without restriction, including
6225 // without limitation the rights to use, copy, modify, merge, publish,
6226 // distribute, sublicense, and/or sell copies of the Software, and to permit
6227 // persons to whom the Software is furnished to do so, subject to the
6228 // following conditions:
6230 // The above copyright notice and this permission notice shall be included
6231 // in all copies or substantial portions of the Software.
6233 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6234 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6235 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6236 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6237 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6238 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6239 // USE OR OTHER DEALINGS IN THE SOFTWARE.
6241 // A bit simpler than readable streams.
6242 // Implement an async ._write(chunk, cb), and it'll handle all
6243 // the drain event emission and buffering.
6245 module.exports = Writable;
6248 var Buffer = require('buffer').Buffer;
6251 Writable.WritableState = WritableState;
6255 var util = require('core-util-is');
6256 util.inherits = require('inherits');
6259 var Stream = require('stream');
6261 util.inherits(Writable, Stream);
6263 function WriteReq(chunk, encoding, cb) {
6265 this.encoding = encoding;
6269 function WritableState(options, stream) {
6270 var Duplex = require('./_stream_duplex');
6272 options = options || {};
6274 // the point at which write() starts returning false
6275 // Note:
0 is a valid value, means that we always return false if
6276 // the entire buffer is not flushed immediately on write()
6277 var hwm = options.highWaterMark;
6278 var defaultHwm = options.objectMode ?
16 :
16 *
1024;
6279 this.highWaterMark = (hwm || hwm ===
0) ? hwm : defaultHwm;
6281 // object stream flag to indicate whether or not this stream
6282 // contains buffers or objects.
6283 this.objectMode = !!options.objectMode;
6285 if (stream instanceof Duplex)
6286 this.objectMode = this.objectMode || !!options.writableObjectMode;
6289 this.highWaterMark = ~~this.highWaterMark;
6291 this.needDrain = false;
6292 // at the start of calling end()
6293 this.ending = false;
6294 // when end() has been called, and returned
6296 // when 'finish' is emitted
6297 this.finished = false;
6299 // should we decode strings into buffers before passing to _write?
6300 // this is here so that some node-core streams can optimize string
6301 // handling at a lower level.
6302 var noDecode = options.decodeStrings === false;
6303 this.decodeStrings = !noDecode;
6305 // Crypto is kind of old and crusty. Historically, its default string
6306 // encoding is 'binary' so we have to make this configurable.
6307 // Everything else in the universe uses 'utf8', though.
6308 this.defaultEncoding = options.defaultEncoding || 'utf8';
6310 // not an actual buffer we keep track of, but a measurement
6311 // of how much we're waiting to get pushed to some underlying
6315 // a flag to see when we're in the middle of a write.
6316 this.writing = false;
6318 // when true all writes will be buffered until .uncork() call
6321 // a flag to be able to tell if the onwrite cb is called immediately,
6322 // or on a later tick. We set this to true at first, because any
6323 // actions that shouldn't happen until "later" should generally also
6324 // not happen before the first write call.
6327 // a flag to know if we're processing previously buffered items, which
6328 // may call the _write() callback in the same tick, so that we don't
6329 // end up in an overlapped onwrite situation.
6330 this.bufferProcessing = false;
6332 // the callback that's passed to _write(chunk,cb)
6333 this.onwrite = function(er) {
6334 onwrite(stream, er);
6337 // the callback that the user supplies to write(chunk,encoding,cb)
6338 this.writecb = null;
6340 // the amount that is being written when _write is called.
6345 // number of pending user-supplied write callbacks
6346 // this must be
0 before 'finish' can be emitted
6349 // emit prefinish if the only thing we're waiting for is _write cbs
6350 // This is relevant for synchronous Transform streams
6351 this.prefinished = false;
6353 // True if the error was already emitted and should not be thrown again
6354 this.errorEmitted = false;
6357 function Writable(options) {
6358 var Duplex = require('./_stream_duplex');
6360 // Writable ctor is applied to Duplexes, though they're not
6361 // instanceof Writable, they're instanceof Readable.
6362 if (!(this instanceof Writable) && !(this instanceof Duplex))
6363 return new Writable(options);
6365 this._writableState = new WritableState(options, this);
6368 this.writable = true;
6373 // Otherwise people can pipe Writable streams, which is just wrong.
6374 Writable.prototype.pipe = function() {
6375 this.emit('error', new Error('Cannot pipe. Not readable.'));
6379 function writeAfterEnd(stream, state, cb) {
6380 var er = new Error('write after end');
6381 // TODO: defer error events consistently everywhere, not just the cb
6382 stream.emit('error', er);
6383 process.nextTick(function() {
6388 // If we get something that is not a buffer, string, null, or undefined,
6389 // and we're not in objectMode, then that's an error.
6390 // Otherwise stream chunks are all considered to be of length=
1, and the
6391 // watermarks determine how many objects to keep in the buffer, rather than
6392 // how many bytes or characters.
6393 function validChunk(stream, state, chunk, cb) {
6395 if (!util.isBuffer(chunk) &&
6396 !util.isString(chunk) &&
6397 !util.isNullOrUndefined(chunk) &&
6398 !state.objectMode) {
6399 var er = new TypeError('Invalid non-string/buffer chunk');
6400 stream.emit('error', er);
6401 process.nextTick(function() {
6409 Writable.prototype.write = function(chunk, encoding, cb) {
6410 var state = this._writableState;
6413 if (util.isFunction(encoding)) {
6418 if (util.isBuffer(chunk))
6419 encoding = 'buffer';
6421 encoding = state.defaultEncoding;
6423 if (!util.isFunction(cb))
6427 writeAfterEnd(this, state, cb);
6428 else if (validChunk(this, state, chunk, cb)) {
6430 ret = writeOrBuffer(this, state, chunk, encoding, cb);
6436 Writable.prototype.cork = function() {
6437 var state = this._writableState;
6442 Writable.prototype.uncork = function() {
6443 var state = this._writableState;
6448 if (!state.writing &&
6451 !state.bufferProcessing &&
6452 state.buffer.length)
6453 clearBuffer(this, state);
6457 function decodeChunk(state, chunk, encoding) {
6458 if (!state.objectMode &&
6459 state.decodeStrings !== false &&
6460 util.isString(chunk)) {
6461 chunk = new Buffer(chunk, encoding);
6466 // if we're already writing something, then just put this
6467 // in the queue, and wait our turn. Otherwise, call _write
6468 // If we return false, then we need a drain event, so set that flag.
6469 function writeOrBuffer(stream, state, chunk, encoding, cb) {
6470 chunk = decodeChunk(state, chunk, encoding);
6471 if (util.isBuffer(chunk))
6472 encoding = 'buffer';
6473 var len = state.objectMode ?
1 : chunk.length;
6475 state.length += len;
6477 var ret = state.length < state.highWaterMark;
6478 // we must ensure that previous needDrain will not be reset to false.
6480 state.needDrain = true;
6482 if (state.writing || state.corked)
6483 state.buffer.push(new WriteReq(chunk, encoding, cb));
6485 doWrite(stream, state, false, len, chunk, encoding, cb);
6490 function doWrite(stream, state, writev, len, chunk, encoding, cb) {
6491 state.writelen = len;
6493 state.writing = true;
6496 stream._writev(chunk, state.onwrite);
6498 stream._write(chunk, encoding, state.onwrite);
6502 function onwriteError(stream, state, sync, er, cb) {
6504 process.nextTick(function() {
6513 stream._writableState.errorEmitted = true;
6514 stream.emit('error', er);
6517 function onwriteStateUpdate(state) {
6518 state.writing = false;
6519 state.writecb = null;
6520 state.length -= state.writelen;
6524 function onwrite(stream, er) {
6525 var state = stream._writableState;
6526 var sync = state.sync;
6527 var cb = state.writecb;
6529 onwriteStateUpdate(state);
6532 onwriteError(stream, state, sync, er, cb);
6534 // Check if we're actually ready to finish, but don't emit yet
6535 var finished = needFinish(stream, state);
6539 !state.bufferProcessing &&
6540 state.buffer.length) {
6541 clearBuffer(stream, state);
6545 process.nextTick(function() {
6546 afterWrite(stream, state, finished, cb);
6549 afterWrite(stream, state, finished, cb);
6554 function afterWrite(stream, state, finished, cb) {
6556 onwriteDrain(stream, state);
6559 finishMaybe(stream, state);
6562 // Must force callback to be called on nextTick, so that we don't
6563 // emit 'drain' before the write() consumer gets the 'false' return
6564 // value, and has a chance to attach a 'drain' listener.
6565 function onwriteDrain(stream, state) {
6566 if (state.length ===
0 && state.needDrain) {
6567 state.needDrain = false;
6568 stream.emit('drain');
6573 // if there's something in the buffer waiting, then process it
6574 function clearBuffer(stream, state) {
6575 state.bufferProcessing = true;
6577 if (stream._writev && state.buffer.length
> 1) {
6578 // Fast case, write everything using _writev()
6580 for (var c =
0; c < state.buffer.length; c++)
6581 cbs.push(state.buffer[c].callback);
6583 // count the one we are adding, as well.
6584 // TODO(isaacs) clean this up
6586 doWrite(stream, state, true, state.length, state.buffer, '', function(err) {
6587 for (var i =
0; i < cbs.length; i++) {
6596 // Slow case, write chunks one-by-one
6597 for (var c =
0; c < state.buffer.length; c++) {
6598 var entry = state.buffer[c];
6599 var chunk = entry.chunk;
6600 var encoding = entry.encoding;
6601 var cb = entry.callback;
6602 var len = state.objectMode ?
1 : chunk.length;
6604 doWrite(stream, state, false, len, chunk, encoding, cb);
6606 // if we didn't call the onwrite immediately, then
6607 // it means that we need to wait until it does.
6608 // also, that means that the chunk and cb are currently
6609 // being processed, so move the buffer counter past them.
6610 if (state.writing) {
6616 if (c < state.buffer.length)
6617 state.buffer = state.buffer.slice(c);
6619 state.buffer.length =
0;
6622 state.bufferProcessing = false;
6625 Writable.prototype._write = function(chunk, encoding, cb) {
6626 cb(new Error('not implemented'));
6630 Writable.prototype._writev = null;
6632 Writable.prototype.end = function(chunk, encoding, cb) {
6633 var state = this._writableState;
6635 if (util.isFunction(chunk)) {
6639 } else if (util.isFunction(encoding)) {
6644 if (!util.isNullOrUndefined(chunk))
6645 this.write(chunk, encoding);
6647 // .end() fully uncorks
6653 // ignore unnecessary end() calls.
6654 if (!state.ending && !state.finished)
6655 endWritable(this, state, cb);
6659 function needFinish(stream, state) {
6660 return (state.ending &&
6661 state.length ===
0 &&
6666 function prefinish(stream, state) {
6667 if (!state.prefinished) {
6668 state.prefinished = true;
6669 stream.emit('prefinish');
6673 function finishMaybe(stream, state) {
6674 var need = needFinish(stream, state);
6676 if (state.pendingcb ===
0) {
6677 prefinish(stream, state);
6678 state.finished = true;
6679 stream.emit('finish');
6681 prefinish(stream, state);
6686 function endWritable(stream, state, cb) {
6687 state.ending = true;
6688 finishMaybe(stream, state);
6691 process.nextTick(cb);
6693 stream.once('finish', cb);
6698 }).call(this,require('_process'))
6699 },{
"./_stream_duplex":
16,
"_process":
14,
"buffer":
7,
"core-util-is":
21,
"inherits":
12,
"stream":
26}],
21:[function(require,module,exports){
6701 // Copyright Joyent, Inc. and other Node contributors.
6703 // Permission is hereby granted, free of charge, to any person obtaining a
6704 // copy of this software and associated documentation files (the
6705 //
"Software"), to deal in the Software without restriction, including
6706 // without limitation the rights to use, copy, modify, merge, publish,
6707 // distribute, sublicense, and/or sell copies of the Software, and to permit
6708 // persons to whom the Software is furnished to do so, subject to the
6709 // following conditions:
6711 // The above copyright notice and this permission notice shall be included
6712 // in all copies or substantial portions of the Software.
6714 // THE SOFTWARE IS PROVIDED
"AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6715 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6716 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6717 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6718 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6719 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6720 // USE OR OTHER DEALINGS IN THE SOFTWARE.
6722 // NOTE: These type checking functions intentionally don't use `instanceof`
6723 // because it is fragile and can be easily faked with `Object.create()`.
6724 function isArray(ar) {
6725 return Array.isArray(ar);
6727 exports.isArray = isArray;
6729 function isBoolean(arg) {
6730 return typeof arg === 'boolean';
6732 exports.isBoolean = isBoolean;
6734 function isNull(arg) {
6735 return arg === null;
6737 exports.isNull = isNull;
6739 function isNullOrUndefined(arg) {
6742 exports.isNullOrUndefined = isNullOrUndefined;
6744 function isNumber(arg) {
6745 return typeof arg === 'number';
6747 exports.isNumber = isNumber;
6749 function isString(arg) {
6750 return typeof arg === 'string';
6752 exports.isString = isString;
6754 function isSymbol(arg) {
6755 return typeof arg === 'symbol';
6757 exports.isSymbol = isSymbol;
6759 function isUndefined(arg) {
6760 return arg === void
0;
6762 exports.isUndefined = isUndefined;
6764 function isRegExp(re) {
6765 return isObject(re) && objectToString(re) === '[object RegExp]';
6767 exports.isRegExp = isRegExp;
6769 function isObject(arg) {
6770 return typeof arg === 'object' && arg !== null;
6772 exports.isObject = isObject;
6774 function isDate(d) {
6775 return isObject(d) && objectToString(d) === '[object Date]';
6777 exports.isDate = isDate;
6779 function isError(e) {
6780 return isObject(e) &&
6781 (objectToString(e) === '[object Error]' || e instanceof Error);
6783 exports.isError = isError;
6785 function isFunction(arg) {
6786 return typeof arg === 'function';
6788 exports.isFunction = isFunction;
6790 function isPrimitive(arg) {
6791 return arg === null ||
6792 typeof arg === 'boolean' ||
6793 typeof arg === 'number' ||
6794 typeof arg === 'string' ||
6795 typeof arg === 'symbol' || // ES6 symbol
6796 typeof arg === 'undefined';
6798 exports.isPrimitive = isPrimitive;
6800 function isBuffer(arg) {
6801 return Buffer.isBuffer(arg);
6803 exports.isBuffer = isBuffer;
6805 function objectToString(o) {
6806 return Object.prototype.toString.call(o);
6808 }).call(this,require(
"buffer").Buffer)
6809 },{
"buffer":
7}],
22:[function(require,module,exports){
6810 module.exports = require(
"./lib/_stream_passthrough.js")
6812 },{
"./lib/_stream_passthrough.js":
17}],
23:[function(require,module,exports){
6813 exports = module.exports = require('./lib/_stream_readable.js');
6814 exports.Stream = require('stream');
6815 exports.Readable = exports;
6816 exports.Writable = require('./lib/_stream_writable.js');
6817 exports.Duplex = require('./lib/_stream_duplex.js');
6818 exports.Transform = require('./lib/_stream_transform.js');
6819 exports.PassThrough = require('./lib/_stream_passthrough.js');
6821 },{
"./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){
6822 module.exports = require(
"./lib/_stream_transform.js")
6824 },{
"./lib/_stream_transform.js":
19}],
25:[function(require,module,exports){
6825 module.exports = require(
"./lib/_stream_writable.js")
6827 },{
"./lib/_stream_writable.js":
20}],
26:[function(require,module,exports){
6828 // Copyright Joyent, Inc. and other Node contributors.
6830 // Permission is hereby granted, free of charge, to any person obtaining a
6831 // copy of this software and associated documentation files (the
6832 //
"Software"), to deal in the Software without restriction, including
6833 // without limitation the rights to use, copy, modify, merge, publish,
6834 // distribute, sublicense, and/or sell copies of the Software, and to permit
6835 // persons to whom the Software is furnished to do so, subject to the
6836 // following conditions:
6838 // The above copyright notice and this permission notice shall be included
6839 // in all copies or substantial portions of the Software.
6841 // THE SOFTWARE IS PROVIDED
"AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6842 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6843 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6844 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6845 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6846 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6847 // USE OR OTHER DEALINGS IN THE SOFTWARE.
6849 module.exports = Stream;
6851 var EE = require('events').EventEmitter;
6852 var inherits = require('inherits');
6854 inherits(Stream, EE);
6855 Stream.Readable = require('readable-stream/readable.js');
6856 Stream.Writable = require('readable-stream/writable.js');
6857 Stream.Duplex = require('readable-stream/duplex.js');
6858 Stream.Transform = require('readable-stream/transform.js');
6859 Stream.PassThrough = require('readable-stream/passthrough.js');
6861 // Backwards-compat with node
0.4.x
6862 Stream.Stream = Stream;
6866 // old-style streams. Note that the pipe method (the only relevant
6867 // part of this class) is overridden in the Readable class.
6873 Stream.prototype.pipe = function(dest, options) {
6876 function ondata(chunk) {
6877 if (dest.writable) {
6878 if (false === dest.write(chunk) && source.pause) {
6884 source.on('data', ondata);
6886 function ondrain() {
6887 if (source.readable && source.resume) {
6892 dest.on('drain', ondrain);
6894 // If the 'end' option is not supplied, dest.end() will be called when
6895 // source gets the 'end' or 'close' events. Only dest.end() once.
6896 if (!dest._isStdio && (!options || options.end !== false)) {
6897 source.on('end', onend);
6898 source.on('close', onclose);
6901 var didOnEnd = false;
6903 if (didOnEnd) return;
6910 function onclose() {
6911 if (didOnEnd) return;
6914 if (typeof dest.destroy === 'function') dest.destroy();
6917 // don't leave dangling pipes when there are errors.
6918 function onerror(er) {
6920 if (EE.listenerCount(this, 'error') ===
0) {
6921 throw er; // Unhandled stream error in pipe.
6925 source.on('error', onerror);
6926 dest.on('error', onerror);
6928 // remove all the event listeners that were added.
6929 function cleanup() {
6930 source.removeListener('data', ondata);
6931 dest.removeListener('drain', ondrain);
6933 source.removeListener('end', onend);
6934 source.removeListener('close', onclose);
6936 source.removeListener('error', onerror);
6937 dest.removeListener('error', onerror);
6939 source.removeListener('end', cleanup);
6940 source.removeListener('close', cleanup);
6942 dest.removeListener('close', cleanup);
6945 source.on('end', cleanup);
6946 source.on('close', cleanup);
6948 dest.on('close', cleanup);
6950 dest.emit('pipe', source);
6952 // Allow for unix-like usage: A.pipe(B).pipe(C)
6956 },{
"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){
6957 // Copyright Joyent, Inc. and other Node contributors.
6959 // Permission is hereby granted, free of charge, to any person obtaining a
6960 // copy of this software and associated documentation files (the
6961 //
"Software"), to deal in the Software without restriction, including
6962 // without limitation the rights to use, copy, modify, merge, publish,
6963 // distribute, sublicense, and/or sell copies of the Software, and to permit
6964 // persons to whom the Software is furnished to do so, subject to the
6965 // following conditions:
6967 // The above copyright notice and this permission notice shall be included
6968 // in all copies or substantial portions of the Software.
6970 // THE SOFTWARE IS PROVIDED
"AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6971 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6972 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6973 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6974 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6975 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6976 // USE OR OTHER DEALINGS IN THE SOFTWARE.
6978 var Buffer = require('buffer').Buffer;
6980 var isBufferEncoding = Buffer.isEncoding
6981 || function(encoding) {
6982 switch (encoding && encoding.toLowerCase()) {
6983 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;
6984 default: return false;
6989 function assertEncoding(encoding) {
6990 if (encoding && !isBufferEncoding(encoding)) {
6991 throw new Error('Unknown encoding: ' + encoding);
6995 // StringDecoder provides an interface for efficiently splitting a series of
6996 // buffers into a series of JS strings without breaking apart multi-byte
6997 // characters. CESU-
8 is handled as part of the UTF-
8 encoding.
6999 // @TODO Handling all encodings inside a single object makes it very difficult
7000 // to reason about this code, so it should be split up in the future.
7001 // @TODO There should be a utf8-strict encoding that rejects invalid UTF-
8 code
7002 // points as used by CESU-
8.
7003 var StringDecoder = exports.StringDecoder = function(encoding) {
7004 this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, '');
7005 assertEncoding(encoding);
7006 switch (this.encoding) {
7008 // CESU-
8 represents each of Surrogate Pair by
3-bytes
7009 this.surrogateSize =
3;
7013 // UTF-
16 represents each of Surrogate Pair by
2-bytes
7014 this.surrogateSize =
2;
7015 this.detectIncompleteChar = utf16DetectIncompleteChar;
7018 // Base-
64 stores
3 bytes in
4 chars, and pads the remainder.
7019 this.surrogateSize =
3;
7020 this.detectIncompleteChar = base64DetectIncompleteChar;
7023 this.write = passThroughWrite;
7027 // Enough space to store all bytes of a single character. UTF-
8 needs
4
7028 // bytes, but CESU-
8 may require up to
6 (
3 bytes per surrogate).
7029 this.charBuffer = new Buffer(
6);
7030 // Number of bytes received for the current incomplete multi-byte character.
7031 this.charReceived =
0;
7032 // Number of bytes expected for the current incomplete multi-byte character.
7033 this.charLength =
0;
7037 // write decodes the given buffer and returns it as JS string that is
7038 // guaranteed to not contain any partial multi-byte characters. Any partial
7039 // character found at the end of the buffer is buffered up, and will be
7040 // returned when calling write again with the remaining bytes.
7042 // Note: Converting a Buffer containing an orphan surrogate to a String
7043 // currently works, but converting a String to a Buffer (via `new Buffer`, or
7044 // Buffer#write) will replace incomplete surrogates with the unicode
7045 // replacement character. See https://codereview.chromium.org/
121173009/ .
7046 StringDecoder.prototype.write = function(buffer) {
7048 // if our last write ended with an incomplete multibyte character
7049 while (this.charLength) {
7050 // determine how many remaining bytes this buffer has to offer for this char
7051 var available = (buffer.length
>= this.charLength - this.charReceived) ?
7052 this.charLength - this.charReceived :
7055 // add the new bytes to the char buffer
7056 buffer.copy(this.charBuffer, this.charReceived,
0, available);
7057 this.charReceived += available;
7059 if (this.charReceived < this.charLength) {
7060 // still not enough chars in this buffer? wait for more ...
7064 // remove bytes belonging to the current character from the buffer
7065 buffer = buffer.slice(available, buffer.length);
7067 // get the character that was split
7068 charStr = this.charBuffer.slice(
0, this.charLength).toString(this.encoding);
7070 // CESU-
8: lead surrogate (D800-DBFF) is also the incomplete character
7071 var charCode = charStr.charCodeAt(charStr.length -
1);
7072 if (charCode
>=
0xD800 && charCode <=
0xDBFF) {
7073 this.charLength += this.surrogateSize;
7077 this.charReceived = this.charLength =
0;
7079 // if there are no more bytes in this buffer, just emit our char
7080 if (buffer.length ===
0) {
7086 // determine and set charLength / charReceived
7087 this.detectIncompleteChar(buffer);
7089 var end = buffer.length;
7090 if (this.charLength) {
7091 // buffer the incomplete character bytes we got
7092 buffer.copy(this.charBuffer,
0, buffer.length - this.charReceived, end);
7093 end -= this.charReceived;
7096 charStr += buffer.toString(this.encoding,
0, end);
7098 var end = charStr.length -
1;
7099 var charCode = charStr.charCodeAt(end);
7100 // CESU-
8: lead surrogate (D800-DBFF) is also the incomplete character
7101 if (charCode
>=
0xD800 && charCode <=
0xDBFF) {
7102 var size = this.surrogateSize;
7103 this.charLength += size;
7104 this.charReceived += size;
7105 this.charBuffer.copy(this.charBuffer, size,
0, size);
7106 buffer.copy(this.charBuffer,
0,
0, size);
7107 return charStr.substring(
0, end);
7110 // or just emit the charStr
7114 // detectIncompleteChar determines if there is an incomplete UTF-
8 character at
7115 // the end of the given buffer. If so, it sets this.charLength to the byte
7116 // length that character, and sets this.charReceived to the number of bytes
7117 // that are available for this character.
7118 StringDecoder.prototype.detectIncompleteChar = function(buffer) {
7119 // determine how many bytes we have to check at the end of this buffer
7120 var i = (buffer.length
>=
3) ?
3 : buffer.length;
7122 // Figure out if one of the last i bytes of our buffer announces an
7124 for (; i
> 0; i--) {
7125 var c = buffer[buffer.length - i];
7127 // See http://en.wikipedia.org/wiki/UTF-
8#Description
7130 if (i ==
1 && c
>> 5 ==
0x06) {
7131 this.charLength =
2;
7136 if (i <=
2 && c
>> 4 ==
0x0E) {
7137 this.charLength =
3;
7142 if (i <=
3 && c
>> 3 ==
0x1E) {
7143 this.charLength =
4;
7147 this.charReceived = i;
7150 StringDecoder.prototype.end = function(buffer) {
7152 if (buffer && buffer.length)
7153 res = this.write(buffer);
7155 if (this.charReceived) {
7156 var cr = this.charReceived;
7157 var buf = this.charBuffer;
7158 var enc = this.encoding;
7159 res += buf.slice(
0, cr).toString(enc);
7165 function passThroughWrite(buffer) {
7166 return buffer.toString(this.encoding);
7169 function utf16DetectIncompleteChar(buffer) {
7170 this.charReceived = buffer.length %
2;
7171 this.charLength = this.charReceived ?
2 :
0;
7174 function base64DetectIncompleteChar(buffer) {
7175 this.charReceived = buffer.length %
3;
7176 this.charLength = this.charReceived ?
3 :
0;
7179 },{
"buffer":
7}],
28:[function(require,module,exports){
7180 module.exports = function isBuffer(arg) {
7181 return arg && typeof arg === 'object'
7182 && typeof arg.copy === 'function'
7183 && typeof arg.fill === 'function'
7184 && typeof arg.readUInt8 === 'function';
7186 },{}],
29:[function(require,module,exports){
7187 (function (process,global){
7188 // Copyright Joyent, Inc. and other Node contributors.
7190 // Permission is hereby granted, free of charge, to any person obtaining a
7191 // copy of this software and associated documentation files (the
7192 //
"Software"), to deal in the Software without restriction, including
7193 // without limitation the rights to use, copy, modify, merge, publish,
7194 // distribute, sublicense, and/or sell copies of the Software, and to permit
7195 // persons to whom the Software is furnished to do so, subject to the
7196 // following conditions:
7198 // The above copyright notice and this permission notice shall be included
7199 // in all copies or substantial portions of the Software.
7201 // THE SOFTWARE IS PROVIDED
"AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
7202 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
7203 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
7204 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
7205 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
7206 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
7207 // USE OR OTHER DEALINGS IN THE SOFTWARE.
7209 var formatRegExp = /%[sdj%]/g;
7210 exports.format = function(f) {
7213 for (var i =
0; i < arguments.length; i++) {
7214 objects.push(inspect(arguments[i]));
7216 return objects.join(' ');
7220 var args = arguments;
7221 var len = args.length;
7222 var str = String(f).replace(formatRegExp, function(x) {
7223 if (x === '%%') return '%';
7224 if (i
>= len) return x;
7226 case '%s': return String(args[i++]);
7227 case '%d': return Number(args[i++]);
7230 return JSON.stringify(args[i++]);
7232 return '[Circular]';
7238 for (var x = args[i]; i < len; x = args[++i]) {
7239 if (isNull(x) || !isObject(x)) {
7242 str += ' ' + inspect(x);
7249 // Mark that a method should not be used.
7250 // Returns a modified function which warns once by default.
7251 // If --no-deprecation is set, then it is a no-op.
7252 exports.deprecate = function(fn, msg) {
7253 // Allow for deprecating things in the process of starting up.
7254 if (isUndefined(global.process)) {
7256 return exports.deprecate(fn, msg).apply(this, arguments);
7260 if (process.noDeprecation === true) {
7265 function deprecated() {
7267 if (process.throwDeprecation) {
7268 throw new Error(msg);
7269 } else if (process.traceDeprecation) {
7276 return fn.apply(this, arguments);
7285 exports.debuglog = function(set) {
7286 if (isUndefined(debugEnviron))
7287 debugEnviron = process.env.NODE_DEBUG || '';
7288 set = set.toUpperCase();
7290 if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
7291 var pid = process.pid;
7292 debugs[set] = function() {
7293 var msg = exports.format.apply(exports, arguments);
7294 console.error('%s %d: %s', set, pid, msg);
7297 debugs[set] = function() {};
7305 * Echos the value of a value. Trys to print the value out
7306 * in the best way possible given the different types.
7308 * @param {Object} obj The object to print out.
7309 * @param {Object} opts Optional options object that alters the output.
7311 /* legacy: obj, showHidden, depth, colors*/
7312 function inspect(obj, opts) {
7316 stylize: stylizeNoColor
7319 if (arguments.length
>=
3) ctx.depth = arguments[
2];
7320 if (arguments.length
>=
4) ctx.colors = arguments[
3];
7321 if (isBoolean(opts)) {
7323 ctx.showHidden = opts;
7325 // got an "options" object
7326 exports._extend(ctx, opts);
7328 // set default options
7329 if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
7330 if (isUndefined(ctx.depth)) ctx.depth =
2;
7331 if (isUndefined(ctx.colors)) ctx.colors = false;
7332 if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
7333 if (ctx.colors) ctx.stylize = stylizeWithColor;
7334 return formatValue(ctx, obj, ctx.depth);
7336 exports.inspect = inspect;
7339 // http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
7343 'underline' : [
4,
24],
7344 'inverse' : [
7,
27],
7351 'magenta' : [
35,
39],
7356 // Don't use 'blue' not visible on cmd.exe
7360 'boolean': 'yellow',
7361 'undefined': 'grey',
7365 // "name": intentionally not styling
7370 function stylizeWithColor(str, styleType) {
7371 var style = inspect.styles[styleType];
7374 return '\u001b[' + inspect.colors[style][
0] + 'm' + str +
7375 '\u001b[' + inspect.colors[style][
1] + 'm';
7382 function stylizeNoColor(str, styleType) {
7387 function arrayToHash(array) {
7390 array.forEach(function(val, idx) {
7398 function formatValue(ctx, value, recurseTimes) {
7399 // Provide a hook for user-specified inspect functions.
7400 // Check that value is an object with an inspect function on it
7401 if (ctx.customInspect &&
7403 isFunction(value.inspect) &&
7404 // Filter out the util module, it's inspect function is special
7405 value.inspect !== exports.inspect &&
7406 // Also filter out any prototype objects using the circular check.
7407 !(value.constructor && value.constructor.prototype === value)) {
7408 var ret = value.inspect(recurseTimes, ctx);
7409 if (!isString(ret)) {
7410 ret = formatValue(ctx, ret, recurseTimes);
7415 // Primitive types cannot have properties
7416 var primitive = formatPrimitive(ctx, value);
7421 // Look up the keys of the object.
7422 var keys = Object.keys(value);
7423 var visibleKeys = arrayToHash(keys);
7425 if (ctx.showHidden) {
7426 keys = Object.getOwnPropertyNames(value);
7429 // IE doesn't make error fields non-enumerable
7430 // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs
.94).aspx
7432 && (keys.indexOf('message')
>=
0 || keys.indexOf('description')
>=
0)) {
7433 return formatError(value);
7436 // Some type of object without properties can be shortcutted.
7437 if (keys.length ===
0) {
7438 if (isFunction(value)) {
7439 var name = value.name ? ': ' + value.name : '';
7440 return ctx.stylize('[Function' + name + ']', 'special');
7442 if (isRegExp(value)) {
7443 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
7445 if (isDate(value)) {
7446 return ctx.stylize(Date.prototype.toString.call(value), 'date');
7448 if (isError(value)) {
7449 return formatError(value);
7453 var base = '', array = false, braces = ['{', '}'];
7455 // Make Array say that they are Array
7456 if (isArray(value)) {
7458 braces = ['[', ']'];
7461 // Make functions say that they are functions
7462 if (isFunction(value)) {
7463 var n = value.name ? ': ' + value.name : '';
7464 base = ' [Function' + n + ']';
7467 // Make RegExps say that they are RegExps
7468 if (isRegExp(value)) {
7469 base = ' ' + RegExp.prototype.toString.call(value);
7472 // Make dates with properties first say the date
7473 if (isDate(value)) {
7474 base = ' ' + Date.prototype.toUTCString.call(value);
7477 // Make error with message first say the error
7478 if (isError(value)) {
7479 base = ' ' + formatError(value);
7482 if (keys.length ===
0 && (!array || value.length ==
0)) {
7483 return braces[
0] + base + braces[
1];
7486 if (recurseTimes <
0) {
7487 if (isRegExp(value)) {
7488 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
7490 return ctx.stylize('[Object]', 'special');
7494 ctx.seen.push(value);
7498 output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
7500 output = keys.map(function(key) {
7501 return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
7507 return reduceToSingleString(output, base, braces);
7511 function formatPrimitive(ctx, value) {
7512 if (isUndefined(value))
7513 return ctx.stylize('undefined', 'undefined');
7514 if (isString(value)) {
7515 var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
7516 .replace(/'/g, "\\'")
7517 .replace(/\\"/g, '"') + '\'';
7518 return ctx.stylize(simple, 'string');
7520 if (isNumber(value))
7521 return ctx.stylize('' + value, 'number');
7522 if (isBoolean(value))
7523 return ctx.stylize('' + value, 'boolean');
7524 // For some reason typeof null is "object", so special case here.
7526 return ctx.stylize('null', 'null');
7530 function formatError(value) {
7531 return '[' + Error.prototype.toString.call(value) + ']';
7535 function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
7537 for (var i =
0, l = value.length; i < l; ++i) {
7538 if (hasOwnProperty(value, String(i))) {
7539 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
7545 keys.forEach(function(key) {
7546 if (!key.match(/^\d+$/)) {
7547 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
7555 function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
7556 var name, str, desc;
7557 desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
7560 str = ctx.stylize('[Getter/Setter]', 'special');
7562 str = ctx.stylize('[Getter]', 'special');
7566 str = ctx.stylize('[Setter]', 'special');
7569 if (!hasOwnProperty(visibleKeys, key)) {
7570 name = '[' + key + ']';
7573 if (ctx.seen.indexOf(desc.value) <
0) {
7574 if (isNull(recurseTimes)) {
7575 str = formatValue(ctx, desc.value, null);
7577 str = formatValue(ctx, desc.value, recurseTimes -
1);
7579 if (str.indexOf('\n')
> -
1) {
7581 str = str.split('\n').map(function(line) {
7583 }).join('\n').substr(
2);
7585 str = '\n' + str.split('\n').map(function(line) {
7591 str = ctx.stylize('[Circular]', 'special');
7594 if (isUndefined(name)) {
7595 if (array && key.match(/^\d+$/)) {
7598 name = JSON.stringify('' + key);
7599 if (name.match(/^"([a-zA-Z_][a-zA-Z_0-
9]*)"$/)) {
7600 name = name.substr(
1, name.length -
2);
7601 name = ctx.stylize(name, 'name');
7603 name = name.replace(/'/g, "\\'")
7604 .replace(/\\"/g, '"')
7605 .replace(/(^"|"$)/g, "'");
7606 name = ctx.stylize(name, 'string');
7610 return name + ': ' + str;
7614 function reduceToSingleString(output, base, braces) {
7615 var numLinesEst =
0;
7616 var length = output.reduce(function(prev, cur) {
7618 if (cur.indexOf('\n')
>=
0) numLinesEst++;
7619 return prev + cur.replace(/\u001b\[\d\d?m/g, '').length +
1;
7624 (base === '' ? '' : base + '\n ') +
7626 output.join(',\n ') +
7631 return braces[
0] + base + ' ' + output.join(', ') + ' ' + braces[
1];
7635 // NOTE: These type checking functions intentionally don't use `instanceof`
7636 // because it is fragile and can be easily faked with `Object.create()`.
7637 function isArray(ar) {
7638 return Array.isArray(ar);
7640 exports.isArray = isArray;
7642 function isBoolean(arg) {
7643 return typeof arg === 'boolean';
7645 exports.isBoolean = isBoolean;
7647 function isNull(arg) {
7648 return arg === null;
7650 exports.isNull = isNull;
7652 function isNullOrUndefined(arg) {
7655 exports.isNullOrUndefined = isNullOrUndefined;
7657 function isNumber(arg) {
7658 return typeof arg === 'number';
7660 exports.isNumber = isNumber;
7662 function isString(arg) {
7663 return typeof arg === 'string';
7665 exports.isString = isString;
7667 function isSymbol(arg) {
7668 return typeof arg === 'symbol';
7670 exports.isSymbol = isSymbol;
7672 function isUndefined(arg) {
7673 return arg === void
0;
7675 exports.isUndefined = isUndefined;
7677 function isRegExp(re) {
7678 return isObject(re) && objectToString(re) === '[object RegExp]';
7680 exports.isRegExp = isRegExp;
7682 function isObject(arg) {
7683 return typeof arg === 'object' && arg !== null;
7685 exports.isObject = isObject;
7687 function isDate(d) {
7688 return isObject(d) && objectToString(d) === '[object Date]';
7690 exports.isDate = isDate;
7692 function isError(e) {
7693 return isObject(e) &&
7694 (objectToString(e) === '[object Error]' || e instanceof Error);
7696 exports.isError = isError;
7698 function isFunction(arg) {
7699 return typeof arg === 'function';
7701 exports.isFunction = isFunction;
7703 function isPrimitive(arg) {
7704 return arg === null ||
7705 typeof arg === 'boolean' ||
7706 typeof arg === 'number' ||
7707 typeof arg === 'string' ||
7708 typeof arg === 'symbol' || // ES6 symbol
7709 typeof arg === 'undefined';
7711 exports.isPrimitive = isPrimitive;
7713 exports.isBuffer = require('./support/isBuffer');
7715 function objectToString(o) {
7716 return Object.prototype.toString.call(o);
7721 return n <
10 ? '
0' + n.toString(
10) : n.toString(
10);
7725 var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
7726 'Oct', 'Nov', 'Dec'];
7729 function timestamp() {
7731 var time = [pad(d.getHours()),
7732 pad(d.getMinutes()),
7733 pad(d.getSeconds())].join(':');
7734 return [d.getDate(), months[d.getMonth()], time].join(' ');
7738 // log is just a thin wrapper to console.log that prepends a timestamp
7739 exports.log = function() {
7740 console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
7745 * Inherit the prototype methods from one constructor into another.
7747 * The Function.prototype.inherits from lang.js rewritten as a standalone
7748 * function (not on Function.prototype). NOTE: If this file is to be loaded
7749 * during bootstrapping this function needs to be rewritten using some native
7750 * functions as prototype setup using normal JavaScript does not work as
7751 * expected during bootstrapping (see mirror.js in r114903).
7753 * @param {function} ctor Constructor function which needs to inherit the
7755 * @param {function} superCtor Constructor function to inherit prototype from.
7757 exports.inherits = require('inherits');
7759 exports._extend = function(origin, add) {
7760 // Don't do anything if add isn't an object
7761 if (!add || !isObject(add)) return origin;
7763 var keys = Object.keys(add);
7764 var i = keys.length;
7766 origin[keys[i]] = add[keys[i]];
7771 function hasOwnProperty(obj, prop) {
7772 return Object.prototype.hasOwnProperty.call(obj, prop);
7775 }).call(this,require('_process'),typeof global !==
"undefined" ? global : typeof self !==
"undefined" ? self : typeof window !==
"undefined" ? window : {})
7776 },{
"./support/isBuffer":
28,
"_process":
14,
"inherits":
12}],
30:[function(require,module,exports){
7777 // Base58 encoding/decoding
7778 // Originally written by Mike Hearn for BitcoinJ
7779 // Copyright (c)
2011 Google Inc
7780 // Ported to JavaScript by Stefan Thomas
7781 // Merged Buffer refactorings from base58-native by Stephen Pair
7782 // Copyright (c)
2013 BitPay Inc
7784 var ALPHABET = '
123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
7785 var ALPHABET_MAP = {}
7786 for(var i =
0; i < ALPHABET.length; i++) {
7787 ALPHABET_MAP[ALPHABET.charAt(i)] = i
7791 function encode(buffer) {
7792 if (buffer.length ===
0) return ''
7794 var i, j, digits = [
0]
7795 for (i =
0; i < buffer.length; i++) {
7796 for (j =
0; j < digits.length; j++) digits[j] <<=
8
7798 digits[
0] += buffer[i]
7801 for (j =
0; j < digits.length; ++j) {
7804 carry = (digits[j] / BASE) |
0
7809 digits.push(carry % BASE)
7811 carry = (carry / BASE) |
0
7815 // deal with leading zeros
7816 for (i =
0; buffer[i] ===
0 && i < buffer.length -
1; i++) digits.push(
0)
7818 // convert digits to a string
7819 var stringOutput =
""
7820 for (var i = digits.length -
1; i
>=
0; i--) {
7821 stringOutput = stringOutput + ALPHABET[digits[i]]
7826 function decode(string) {
7827 if (string.length ===
0) return []
7829 var i, j, bytes = [
0]
7830 for (i =
0; i < string.length; i++) {
7832 if (!(c in ALPHABET_MAP)) throw new Error('Non-base58 character')
7834 for (j =
0; j < bytes.length; j++) bytes[j] *= BASE
7835 bytes[
0] += ALPHABET_MAP[c]
7838 for (j =
0; j < bytes.length; ++j) {
7841 carry = bytes[j]
>> 8
7846 bytes.push(carry &
0xff)
7852 // deal with leading zeros
7853 for (i =
0; string[i] === '
1' && i < string.length -
1; i++) bytes.push(
0)
7855 return bytes.reverse()
7863 },{}],
31:[function(require,module,exports){
7867 var base58 = require('bs58')
7868 var createHash = require('create-hash')
7870 // SHA256(SHA256(buffer))
7871 function sha256x2 (buffer) {
7872 buffer = createHash('sha256').update(buffer).digest()
7873 return createHash('sha256').update(buffer).digest()
7876 // Encode a buffer as a base58-check encoded string
7877 function encode (payload) {
7878 var checksum = sha256x2(payload).slice(
0,
4)
7880 return base58.encode(Buffer.concat([
7886 // Decode a base58-check encoded string to a buffer
7887 function decode (string) {
7888 var buffer = new Buffer(base58.decode(string))
7890 var payload = buffer.slice(
0, -
4)
7891 var checksum = buffer.slice(-
4)
7892 var newChecksum = sha256x2(payload).slice(
0,
4)
7894 for (var i =
0; i < newChecksum.length; ++i) {
7895 if (newChecksum[i] === checksum[i]) continue
7897 throw new Error('Invalid checksum')
7908 }).call(this,require("buffer").Buffer)
7909 },{"bs58":
30,"buffer":
7,"create-hash":
32}],
32:[function(require,module,exports){
7912 var inherits = require('inherits')
7913 var md5 = require('./md5')
7914 var rmd160 = require('ripemd160')
7915 var sha = require('sha.js')
7917 var Transform = require('stream').Transform
7919 function HashNoConstructor(hash) {
7920 Transform.call(this)
7926 inherits(HashNoConstructor, Transform)
7928 HashNoConstructor.prototype._transform = function (data, _, next) {
7929 this.buffers.push(data)
7934 HashNoConstructor.prototype._flush = function (next) {
7935 this.push(this.digest())
7939 HashNoConstructor.prototype.update = function (data, enc) {
7940 if (typeof data === 'string') {
7941 data = new Buffer(data, enc)
7944 this.buffers.push(data)
7948 HashNoConstructor.prototype.digest = function (enc) {
7949 var buf = Buffer.concat(this.buffers)
7950 var r = this._hash(buf)
7953 return enc ? r.toString(enc) : r
7956 function Hash(hash) {
7957 Transform.call(this)
7962 inherits(Hash, Transform)
7964 Hash.prototype._transform = function (data, enc, next) {
7965 if (enc) data = new Buffer(data, enc)
7967 this._hash.update(data)
7972 Hash.prototype._flush = function (next) {
7973 this.push(this._hash.digest())
7979 Hash.prototype.update = function (data, enc) {
7980 if (typeof data === 'string') {
7981 data = new Buffer(data, enc)
7984 this._hash.update(data)
7988 Hash.prototype.digest = function (enc) {
7989 var outData = this._hash.digest()
7991 return enc ? outData.toString(enc) : outData
7994 module.exports = function createHash (alg) {
7995 if ('md5' === alg) return new HashNoConstructor(md5)
7996 if ('rmd160' === alg) return new HashNoConstructor(rmd160)
7998 return new Hash(sha(alg))
8001 }).call(this,require("buffer").Buffer)
8002 },{"./md5":
34,"buffer":
7,"inherits":
35,"ripemd160":
36,"sha.js":
38,"stream":
26}],
33:[function(require,module,exports){
8006 var zeroBuffer = new Buffer(intSize); zeroBuffer.fill(
0);
8009 function toArray(buf, bigEndian) {
8010 if ((buf.length % intSize) !==
0) {
8011 var len = buf.length + (intSize - (buf.length % intSize));
8012 buf = Buffer.concat([buf, zeroBuffer], len);
8016 var fn = bigEndian ? buf.readInt32BE : buf.readInt32LE;
8017 for (var i =
0; i < buf.length; i += intSize) {
8018 arr.push(fn.call(buf, i));
8023 function toBuffer(arr, size, bigEndian) {
8024 var buf = new Buffer(size);
8025 var fn = bigEndian ? buf.writeInt32BE : buf.writeInt32LE;
8026 for (var i =
0; i < arr.length; i++) {
8027 fn.call(buf, arr[i], i *
4, true);
8032 function hash(buf, fn, hashSize, bigEndian) {
8033 if (!Buffer.isBuffer(buf)) buf = new Buffer(buf);
8034 var arr = fn(toArray(buf, bigEndian), buf.length * chrsz);
8035 return toBuffer(arr, hashSize, bigEndian);
8037 exports.hash = hash;
8038 }).call(this,require("buffer").Buffer)
8039 },{"buffer":
7}],
34:[function(require,module,exports){
8042 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
8043 * Digest Algorithm, as defined in RFC
1321.
8044 * Version
2.1 Copyright (C) Paul Johnston
1999 -
2002.
8045 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8046 * Distributed under the BSD License
8047 * See http://pajhome.org.uk/crypt/md5 for more info.
8050 var helpers = require('./helpers');
8053 * Calculate the MD5 of an array of little-endian words, and a bit length
8055 function core_md5(x, len)
8057 /* append padding */
8058 x[len
>> 5] |=
0x80 << ((len) %
32);
8059 x[(((len +
64)
>>> 9) <<
4) +
14] = len;
8063 var c = -
1732584194;
8066 for(var i =
0; i < x.length; i +=
16)
8073 a = md5_ff(a, b, c, d, x[i+
0],
7 , -
680876936);
8074 d = md5_ff(d, a, b, c, x[i+
1],
12, -
389564586);
8075 c = md5_ff(c, d, a, b, x[i+
2],
17,
606105819);
8076 b = md5_ff(b, c, d, a, x[i+
3],
22, -
1044525330);
8077 a = md5_ff(a, b, c, d, x[i+
4],
7 , -
176418897);
8078 d = md5_ff(d, a, b, c, x[i+
5],
12,
1200080426);
8079 c = md5_ff(c, d, a, b, x[i+
6],
17, -
1473231341);
8080 b = md5_ff(b, c, d, a, x[i+
7],
22, -
45705983);
8081 a = md5_ff(a, b, c, d, x[i+
8],
7 ,
1770035416);
8082 d = md5_ff(d, a, b, c, x[i+
9],
12, -
1958414417);
8083 c = md5_ff(c, d, a, b, x[i+
10],
17, -
42063);
8084 b = md5_ff(b, c, d, a, x[i+
11],
22, -
1990404162);
8085 a = md5_ff(a, b, c, d, x[i+
12],
7 ,
1804603682);
8086 d = md5_ff(d, a, b, c, x[i+
13],
12, -
40341101);
8087 c = md5_ff(c, d, a, b, x[i+
14],
17, -
1502002290);
8088 b = md5_ff(b, c, d, a, x[i+
15],
22,
1236535329);
8090 a = md5_gg(a, b, c, d, x[i+
1],
5 , -
165796510);
8091 d = md5_gg(d, a, b, c, x[i+
6],
9 , -
1069501632);
8092 c = md5_gg(c, d, a, b, x[i+
11],
14,
643717713);
8093 b = md5_gg(b, c, d, a, x[i+
0],
20, -
373897302);
8094 a = md5_gg(a, b, c, d, x[i+
5],
5 , -
701558691);
8095 d = md5_gg(d, a, b, c, x[i+
10],
9 ,
38016083);
8096 c = md5_gg(c, d, a, b, x[i+
15],
14, -
660478335);
8097 b = md5_gg(b, c, d, a, x[i+
4],
20, -
405537848);
8098 a = md5_gg(a, b, c, d, x[i+
9],
5 ,
568446438);
8099 d = md5_gg(d, a, b, c, x[i+
14],
9 , -
1019803690);
8100 c = md5_gg(c, d, a, b, x[i+
3],
14, -
187363961);
8101 b = md5_gg(b, c, d, a, x[i+
8],
20,
1163531501);
8102 a = md5_gg(a, b, c, d, x[i+
13],
5 , -
1444681467);
8103 d = md5_gg(d, a, b, c, x[i+
2],
9 , -
51403784);
8104 c = md5_gg(c, d, a, b, x[i+
7],
14,
1735328473);
8105 b = md5_gg(b, c, d, a, x[i+
12],
20, -
1926607734);
8107 a = md5_hh(a, b, c, d, x[i+
5],
4 , -
378558);
8108 d = md5_hh(d, a, b, c, x[i+
8],
11, -
2022574463);
8109 c = md5_hh(c, d, a, b, x[i+
11],
16,
1839030562);
8110 b = md5_hh(b, c, d, a, x[i+
14],
23, -
35309556);
8111 a = md5_hh(a, b, c, d, x[i+
1],
4 , -
1530992060);
8112 d = md5_hh(d, a, b, c, x[i+
4],
11,
1272893353);
8113 c = md5_hh(c, d, a, b, x[i+
7],
16, -
155497632);
8114 b = md5_hh(b, c, d, a, x[i+
10],
23, -
1094730640);
8115 a = md5_hh(a, b, c, d, x[i+
13],
4 ,
681279174);
8116 d = md5_hh(d, a, b, c, x[i+
0],
11, -
358537222);
8117 c = md5_hh(c, d, a, b, x[i+
3],
16, -
722521979);
8118 b = md5_hh(b, c, d, a, x[i+
6],
23,
76029189);
8119 a = md5_hh(a, b, c, d, x[i+
9],
4 , -
640364487);
8120 d = md5_hh(d, a, b, c, x[i+
12],
11, -
421815835);
8121 c = md5_hh(c, d, a, b, x[i+
15],
16,
530742520);
8122 b = md5_hh(b, c, d, a, x[i+
2],
23, -
995338651);
8124 a = md5_ii(a, b, c, d, x[i+
0],
6 , -
198630844);
8125 d = md5_ii(d, a, b, c, x[i+
7],
10,
1126891415);
8126 c = md5_ii(c, d, a, b, x[i+
14],
15, -
1416354905);
8127 b = md5_ii(b, c, d, a, x[i+
5],
21, -
57434055);
8128 a = md5_ii(a, b, c, d, x[i+
12],
6 ,
1700485571);
8129 d = md5_ii(d, a, b, c, x[i+
3],
10, -
1894986606);
8130 c = md5_ii(c, d, a, b, x[i+
10],
15, -
1051523);
8131 b = md5_ii(b, c, d, a, x[i+
1],
21, -
2054922799);
8132 a = md5_ii(a, b, c, d, x[i+
8],
6 ,
1873313359);
8133 d = md5_ii(d, a, b, c, x[i+
15],
10, -
30611744);
8134 c = md5_ii(c, d, a, b, x[i+
6],
15, -
1560198380);
8135 b = md5_ii(b, c, d, a, x[i+
13],
21,
1309151649);
8136 a = md5_ii(a, b, c, d, x[i+
4],
6 , -
145523070);
8137 d = md5_ii(d, a, b, c, x[i+
11],
10, -
1120210379);
8138 c = md5_ii(c, d, a, b, x[i+
2],
15,
718787259);
8139 b = md5_ii(b, c, d, a, x[i+
9],
21, -
343485551);
8141 a = safe_add(a, olda);
8142 b = safe_add(b, oldb);
8143 c = safe_add(c, oldc);
8144 d = safe_add(d, oldd);
8146 return Array(a, b, c, d);
8151 * These functions implement the four basic operations the algorithm uses.
8153 function md5_cmn(q, a, b, x, s, t)
8155 return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b);
8157 function md5_ff(a, b, c, d, x, s, t)
8159 return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
8161 function md5_gg(a, b, c, d, x, s, t)
8163 return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
8165 function md5_hh(a, b, c, d, x, s, t)
8167 return md5_cmn(b ^ c ^ d, a, b, x, s, t);
8169 function md5_ii(a, b, c, d, x, s, t)
8171 return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
8175 * Add integers, wrapping at
2^
32. This uses
16-bit operations internally
8176 * to work around bugs in some JS interpreters.
8178 function safe_add(x, y)
8180 var lsw = (x &
0xFFFF) + (y &
0xFFFF);
8181 var msw = (x
>> 16) + (y
>> 16) + (lsw
>> 16);
8182 return (msw <<
16) | (lsw &
0xFFFF);
8186 * Bitwise rotate a
32-bit number to the left.
8188 function bit_rol(num, cnt)
8190 return (num << cnt) | (num
>>> (
32 - cnt));
8193 module.exports = function md5(buf) {
8194 return helpers.hash(buf, core_md5,
16);
8196 },{"./helpers":
33}],
35:[function(require,module,exports){
8197 arguments[
4][
12][
0].apply(exports,arguments)
8198 },{"dup":
12}],
36:[function(require,module,exports){
8202 code.google.com/p/crypto-js
8203 (c)
2009-
2013 by Jeff Mott. All rights reserved.
8204 code.google.com/p/crypto-js/wiki/License
8207 (c)
2012 by Cédric Mesnil. All rights reserved.
8209 Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
8211 - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
8212 - 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.
8214 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.
8219 0,
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11,
12,
13,
14,
15,
8220 7,
4,
13,
1,
10,
6,
15,
3,
12,
0,
9,
5,
2,
14,
11,
8,
8221 3,
10,
14,
4,
9,
15,
8,
1,
2,
7,
0,
6,
13,
11,
5,
12,
8222 1,
9,
11,
10,
0,
8,
12,
4,
13,
3,
7,
15,
14,
5,
6,
2,
8223 4,
0,
5,
9,
7,
12,
2,
10,
14,
1,
3,
8,
11,
6,
15,
13
8227 5,
14,
7,
0,
9,
2,
11,
4,
13,
6,
15,
8,
1,
10,
3,
12,
8228 6,
11,
3,
7,
0,
13,
5,
10,
14,
15,
8,
12,
4,
9,
1,
2,
8229 15,
5,
1,
3,
7,
14,
6,
9,
11,
8,
12,
2,
10,
0,
4,
13,
8230 8,
6,
4,
1,
3,
11,
15,
0,
5,
12,
2,
13,
9,
7,
10,
14,
8231 12,
15,
10,
4,
1,
5,
8,
7,
6,
2,
13,
14,
0,
3,
9,
11
8235 11,
14,
15,
12,
5,
8,
7,
9,
11,
13,
14,
15,
6,
7,
9,
8,
8236 7,
6,
8,
13,
11,
9,
7,
15,
7,
12,
15,
9,
11,
7,
13,
12,
8237 11,
13,
6,
7,
14,
9,
13,
15,
14,
8,
13,
6,
5,
12,
7,
5,
8238 11,
12,
14,
15,
14,
15,
9,
8,
9,
14,
5,
6,
8,
6,
5,
12,
8239 9,
15,
5,
11,
6,
8,
13,
12,
5,
12,
13,
14,
11,
8,
5,
6
8243 8,
9,
9,
11,
13,
15,
15,
5,
7,
7,
8,
11,
14,
14,
12,
6,
8244 9,
13,
15,
7,
12,
8,
9,
11,
7,
7,
12,
7,
6,
15,
13,
11,
8245 9,
7,
15,
11,
8,
6,
6,
14,
12,
13,
5,
14,
13,
13,
7,
5,
8246 15,
5,
8,
11,
14,
14,
6,
14,
6,
9,
12,
9,
12,
5,
15,
8,
8247 8,
5,
12,
9,
12,
5,
14,
6,
8,
13,
6,
5,
15,
13,
11,
11
8250 var hl = [
0x00000000,
0x5A827999,
0x6ED9EBA1,
0x8F1BBCDC,
0xA953FD4E]
8251 var hr = [
0x50A28BE6,
0x5C4DD124,
0x6D703EF3,
0x7A6D76E9,
0x00000000]
8253 function bytesToWords (bytes) {
8255 for (var i =
0, b =
0; i < bytes.length; i++, b +=
8) {
8256 words[b
>>> 5] |= bytes[i] << (
24 - b %
32)
8261 function wordsToBytes (words) {
8263 for (var b =
0; b < words.length *
32; b +=
8) {
8264 bytes.push((words[b
>>> 5]
>>> (
24 - b %
32)) &
0xFF)
8269 function processBlock (H, M, offset) {
8271 for (var i =
0; i <
16; i++) {
8272 var offset_i = offset + i
8273 var M_offset_i = M[offset_i]
8277 (((M_offset_i <<
8) | (M_offset_i
>>> 24)) &
0x00ff00ff) |
8278 (((M_offset_i <<
24) | (M_offset_i
>>> 8)) &
0xff00ff00)
8282 // Working variables
8283 var al, bl, cl, dl, el
8284 var ar, br, cr, dr, er
8294 for (i =
0; i <
80; i +=
1) {
8295 t = (al + M[offset + zl[i]]) |
0
8297 t += f1(bl, cl, dl) + hl[
0]
8298 } else if (i <
32) {
8299 t += f2(bl, cl, dl) + hl[
1]
8300 } else if (i <
48) {
8301 t += f3(bl, cl, dl) + hl[
2]
8302 } else if (i <
64) {
8303 t += f4(bl, cl, dl) + hl[
3]
8304 } else {// if (i
<80) {
8305 t += f5(bl, cl, dl) + hl[
4]
8316 t = (ar + M[offset + zr[i]]) |
0
8318 t += f5(br, cr, dr) + hr[
0]
8319 } else if (i <
32) {
8320 t += f4(br, cr, dr) + hr[
1]
8321 } else if (i <
48) {
8322 t += f3(br, cr, dr) + hr[
2]
8323 } else if (i <
64) {
8324 t += f2(br, cr, dr) + hr[
3]
8325 } else {// if (i
<80) {
8326 t += f1(br, cr, dr) + hr[
4]
8339 // intermediate hash value
8340 t = (H[
1] + cl + dr) |
0
8341 H[
1] = (H[
2] + dl + er) |
0
8342 H[
2] = (H[
3] + el + ar) |
0
8343 H[
3] = (H[
4] + al + br) |
0
8344 H[
4] = (H[
0] + bl + cr) |
0
8348 function f1 (x, y, z) {
8349 return ((x) ^ (y) ^ (z))
8352 function f2 (x, y, z) {
8353 return (((x) & (y)) | ((~x) & (z)))
8356 function f3 (x, y, z) {
8357 return (((x) | (~(y))) ^ (z))
8360 function f4 (x, y, z) {
8361 return (((x) & (z)) | ((y) & (~(z))))
8364 function f5 (x, y, z) {
8365 return ((x) ^ ((y) | (~(z))))
8368 function rotl (x, n) {
8369 return (x << n) | (x
>>> (
32 - n))
8372 function ripemd160 (message) {
8373 var H = [
0x67452301,
0xEFCDAB89,
0x98BADCFE,
0x10325476,
0xC3D2E1F0]
8375 if (typeof message === 'string') {
8376 message = new Buffer(message, 'utf8')
8379 var m = bytesToWords(message)
8381 var nBitsLeft = message.length *
8
8382 var nBitsTotal = message.length *
8
8385 m[nBitsLeft
>>> 5] |=
0x80 << (
24 - nBitsLeft %
32)
8386 m[(((nBitsLeft +
64)
>>> 9) <<
4) +
14] = (
8387 (((nBitsTotal <<
8) | (nBitsTotal
>>> 24)) &
0x00ff00ff) |
8388 (((nBitsTotal <<
24) | (nBitsTotal
>>> 8)) &
0xff00ff00)
8391 for (var i =
0; i < m.length; i +=
16) {
8392 processBlock(H, m, i)
8396 for (i =
0; i <
5; i++) {
8401 H[i] = (((H_i <<
8) | (H_i
>>> 24)) &
0x00ff00ff) |
8402 (((H_i <<
24) | (H_i
>>> 8)) &
0xff00ff00)
8405 var digestbytes = wordsToBytes(H)
8406 return new Buffer(digestbytes)
8409 module.exports = ripemd160
8411 }).call(this,require(
"buffer").Buffer)
8412 },{
"buffer":
7}],
37:[function(require,module,exports){
8414 // prototype class for hash functions
8415 function Hash (blockSize, finalSize) {
8416 this._block = new Buffer(blockSize)
8417 this._finalSize = finalSize
8418 this._blockSize = blockSize
8423 Hash.prototype.update = function (data, enc) {
8424 if (typeof data === 'string') {
8426 data = new Buffer(data, enc)
8429 var l = this._len += data.length
8430 var s = this._s ||
0
8432 var buffer = this._block
8435 var t = Math.min(data.length, f + this._blockSize - (s % this._blockSize))
8438 for (var i =
0; i < ch; i++) {
8439 buffer[(s % this._blockSize) + i] = data[i + f]
8445 if ((s % this._blockSize) ===
0) {
8446 this._update(buffer)
8454 Hash.prototype.digest = function (enc) {
8455 // Suppose the length of the message M, in bits, is l
8456 var l = this._len *
8
8458 // Append the bit
1 to the end of the message
8459 this._block[this._len % this._blockSize] =
0x80
8461 // and then k zero bits, where k is the smallest non-negative solution to the equation (l +
1 + k) === finalSize mod blockSize
8462 this._block.fill(
0, this._len % this._blockSize +
1)
8464 if (l % (this._blockSize *
8)
>= this._finalSize *
8) {
8465 this._update(this._block)
8469 // to this append the block which is equal to the number l written in binary
8470 // TODO: handle case where l is
> Math.pow(
2,
29)
8471 this._block.writeInt32BE(l, this._blockSize -
4)
8473 var hash = this._update(this._block) || this._hash()
8475 return enc ? hash.toString(enc) : hash
8478 Hash.prototype._update = function () {
8479 throw new Error('_update must be implemented by subclass')
8482 module.exports = Hash
8484 }).call(this,require("buffer").Buffer)
8485 },{"buffer":
7}],
38:[function(require,module,exports){
8486 var exports = module.exports = function SHA (algorithm) {
8487 algorithm = algorithm.toLowerCase()
8489 var Algorithm = exports[algorithm]
8490 if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')
8492 return new Algorithm()
8495 exports.sha = require('./sha')
8496 exports.sha1 = require('./sha1')
8497 exports.sha224 = require('./sha224')
8498 exports.sha256 = require('./sha256')
8499 exports.sha384 = require('./sha384')
8500 exports.sha512 = require('./sha512')
8502 },{"./sha":
39,"./sha1":
40,"./sha224":
41,"./sha256":
42,"./sha384":
43,"./sha512":
44}],
39:[function(require,module,exports){
8505 * A JavaScript implementation of the Secure Hash Algorithm, SHA-
0, as defined
8507 * This source code is derived from sha1.js of the same repository.
8508 * The difference between SHA-
0 and SHA-
1 is just a bitwise rotate left
8509 * operation was added.
8512 var inherits = require('inherits')
8513 var Hash = require('./hash')
8515 var W = new Array(
80)
8521 Hash.call(this,
64,
56)
8526 Sha.prototype.init = function () {
8527 this._a =
0x67452301 |
0
8528 this._b =
0xefcdab89 |
0
8529 this._c =
0x98badcfe |
0
8530 this._d =
0x10325476 |
0
8531 this._e =
0xc3d2e1f0 |
0
8537 * Bitwise rotate a
32-bit number to the left.
8539 function rol (num, cnt) {
8540 return (num << cnt) | (num
>>> (
32 - cnt))
8543 Sha.prototype._update = function (M) {
8555 * SHA-
1 has a bitwise rotate left operation. But, SHA is not
8556 * function calcW() { return rol(W[j -
3] ^ W[j -
8] ^ W[j -
14] ^ W[j -
16],
1) }
8558 function calcW () { return W[j -
3] ^ W[j -
8] ^ W[j -
14] ^ W[j -
16] }
8559 function loop (w, f) {
8562 var t = rol(a,
5) + f + e + w + k
8573 while (j <
16) loop(M.readInt32BE(j *
4), (b & c) | ((~b) & d))
8574 while (j <
20) loop(calcW(), (b & c) | ((~b) & d))
8576 while (j <
40) loop(calcW(), b ^ c ^ d)
8578 while (j <
60) loop(calcW(), (b & c) | (b & d) | (c & d))
8580 while (j <
80) loop(calcW(), b ^ c ^ d)
8582 this._a = (a + this._a) |
0
8583 this._b = (b + this._b) |
0
8584 this._c = (c + this._c) |
0
8585 this._d = (d + this._d) |
0
8586 this._e = (e + this._e) |
0
8589 Sha.prototype._hash = function () {
8590 var H = new Buffer(
20)
8592 H.writeInt32BE(this._a |
0,
0)
8593 H.writeInt32BE(this._b |
0,
4)
8594 H.writeInt32BE(this._c |
0,
8)
8595 H.writeInt32BE(this._d |
0,
12)
8596 H.writeInt32BE(this._e |
0,
16)
8601 module.exports = Sha
8604 }).call(this,require("buffer").Buffer)
8605 },{"./hash":
37,"buffer":
7,"inherits":
35}],
40:[function(require,module,exports){
8608 * A JavaScript implementation of the Secure Hash Algorithm, SHA-
1, as defined
8610 * Version
2.1a Copyright Paul Johnston
2000 -
2002.
8611 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8612 * Distributed under the BSD License
8613 * See http://pajhome.org.uk/crypt/md5 for details.
8616 var inherits = require('inherits')
8617 var Hash = require('./hash')
8619 var W = new Array(
80)
8625 Hash.call(this,
64,
56)
8628 inherits(Sha1, Hash)
8630 Sha1.prototype.init = function () {
8631 this._a =
0x67452301 |
0
8632 this._b =
0xefcdab89 |
0
8633 this._c =
0x98badcfe |
0
8634 this._d =
0x10325476 |
0
8635 this._e =
0xc3d2e1f0 |
0
8641 * Bitwise rotate a
32-bit number to the left.
8643 function rol (num, cnt) {
8644 return (num << cnt) | (num
>>> (
32 - cnt))
8647 Sha1.prototype._update = function (M) {
8658 function calcW () { return rol(W[j -
3] ^ W[j -
8] ^ W[j -
14] ^ W[j -
16],
1) }
8659 function loop (w, f) {
8662 var t = rol(a,
5) + f + e + w + k
8673 while (j <
16) loop(M.readInt32BE(j *
4), (b & c) | ((~b) & d))
8674 while (j <
20) loop(calcW(), (b & c) | ((~b) & d))
8676 while (j <
40) loop(calcW(), b ^ c ^ d)
8678 while (j <
60) loop(calcW(), (b & c) | (b & d) | (c & d))
8680 while (j <
80) loop(calcW(), b ^ c ^ d)
8682 this._a = (a + this._a) |
0
8683 this._b = (b + this._b) |
0
8684 this._c = (c + this._c) |
0
8685 this._d = (d + this._d) |
0
8686 this._e = (e + this._e) |
0
8689 Sha1.prototype._hash = function () {
8690 var H = new Buffer(
20)
8692 H.writeInt32BE(this._a |
0,
0)
8693 H.writeInt32BE(this._b |
0,
4)
8694 H.writeInt32BE(this._c |
0,
8)
8695 H.writeInt32BE(this._d |
0,
12)
8696 H.writeInt32BE(this._e |
0,
16)
8701 module.exports = Sha1
8703 }).call(this,require("buffer").Buffer)
8704 },{"./hash":
37,"buffer":
7,"inherits":
35}],
41:[function(require,module,exports){
8707 * A JavaScript implementation of the Secure Hash Algorithm, SHA-
256, as defined
8709 * Version
2.2-beta Copyright Angel Marin, Paul Johnston
2000 -
2009.
8710 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8714 var inherits = require('inherits')
8715 var Sha256 = require('./sha256')
8716 var Hash = require('./hash')
8718 var W = new Array(
64)
8720 function Sha224 () {
8723 this._w = W // new Array(
64)
8725 Hash.call(this,
64,
56)
8728 inherits(Sha224, Sha256)
8730 Sha224.prototype.init = function () {
8731 this._a =
0xc1059ed8 |
0
8732 this._b =
0x367cd507 |
0
8733 this._c =
0x3070dd17 |
0
8734 this._d =
0xf70e5939 |
0
8735 this._e =
0xffc00b31 |
0
8736 this._f =
0x68581511 |
0
8737 this._g =
0x64f98fa7 |
0
8738 this._h =
0xbefa4fa4 |
0
8743 Sha224.prototype._hash = function () {
8744 var H = new Buffer(
28)
8746 H.writeInt32BE(this._a,
0)
8747 H.writeInt32BE(this._b,
4)
8748 H.writeInt32BE(this._c,
8)
8749 H.writeInt32BE(this._d,
12)
8750 H.writeInt32BE(this._e,
16)
8751 H.writeInt32BE(this._f,
20)
8752 H.writeInt32BE(this._g,
24)
8757 module.exports = Sha224
8759 }).call(this,require("buffer").Buffer)
8760 },{"./hash":
37,"./sha256":
42,"buffer":
7,"inherits":
35}],
42:[function(require,module,exports){
8763 * A JavaScript implementation of the Secure Hash Algorithm, SHA-
256, as defined
8765 * Version
2.2-beta Copyright Angel Marin, Paul Johnston
2000 -
2009.
8766 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8770 var inherits = require('inherits')
8771 var Hash = require('./hash')
8774 0x428A2F98,
0x71374491,
0xB5C0FBCF,
0xE9B5DBA5,
8775 0x3956C25B,
0x59F111F1,
0x923F82A4,
0xAB1C5ED5,
8776 0xD807AA98,
0x12835B01,
0x243185BE,
0x550C7DC3,
8777 0x72BE5D74,
0x80DEB1FE,
0x9BDC06A7,
0xC19BF174,
8778 0xE49B69C1,
0xEFBE4786,
0x0FC19DC6,
0x240CA1CC,
8779 0x2DE92C6F,
0x4A7484AA,
0x5CB0A9DC,
0x76F988DA,
8780 0x983E5152,
0xA831C66D,
0xB00327C8,
0xBF597FC7,
8781 0xC6E00BF3,
0xD5A79147,
0x06CA6351,
0x14292967,
8782 0x27B70A85,
0x2E1B2138,
0x4D2C6DFC,
0x53380D13,
8783 0x650A7354,
0x766A0ABB,
0x81C2C92E,
0x92722C85,
8784 0xA2BFE8A1,
0xA81A664B,
0xC24B8B70,
0xC76C51A3,
8785 0xD192E819,
0xD6990624,
0xF40E3585,
0x106AA070,
8786 0x19A4C116,
0x1E376C08,
0x2748774C,
0x34B0BCB5,
8787 0x391C0CB3,
0x4ED8AA4A,
0x5B9CCA4F,
0x682E6FF3,
8788 0x748F82EE,
0x78A5636F,
0x84C87814,
0x8CC70208,
8789 0x90BEFFFA,
0xA4506CEB,
0xBEF9A3F7,
0xC67178F2
8792 var W = new Array(
64)
8794 function Sha256 () {
8797 this._w = W // new Array(
64)
8799 Hash.call(this,
64,
56)
8802 inherits(Sha256, Hash)
8804 Sha256.prototype.init = function () {
8805 this._a =
0x6a09e667 |
0
8806 this._b =
0xbb67ae85 |
0
8807 this._c =
0x3c6ef372 |
0
8808 this._d =
0xa54ff53a |
0
8809 this._e =
0x510e527f |
0
8810 this._f =
0x9b05688c |
0
8811 this._g =
0x1f83d9ab |
0
8812 this._h =
0x5be0cd19 |
0
8818 return (X
>>> n) | (X << (
32 - n))
8825 function Ch (x, y, z) {
8826 return ((x & y) ^ ((~x) & z))
8829 function Maj (x, y, z) {
8830 return ((x & y) ^ (x & z) ^ (y & z))
8833 function Sigma0256 (x) {
8834 return (S(x,
2) ^ S(x,
13) ^ S(x,
22))
8837 function Sigma1256 (x) {
8838 return (S(x,
6) ^ S(x,
11) ^ S(x,
25))
8841 function Gamma0256 (x) {
8842 return (S(x,
7) ^ S(x,
18) ^ R(x,
3))
8845 function Gamma1256 (x) {
8846 return (S(x,
17) ^ S(x,
19) ^ R(x,
10))
8849 Sha256.prototype._update = function (M) {
8863 function calcW () { return Gamma1256(W[j -
2]) + W[j -
7] + Gamma0256(W[j -
15]) + W[j -
16] }
8867 var T1 = h + Sigma1256(e) + Ch(e, f, g) + K[j] + w
8868 var T2 = Sigma0256(a) + Maj(a, b, c)
8882 while (j <
16) loop(M.readInt32BE(j *
4))
8883 while (j <
64) loop(calcW())
8885 this._a = (a + this._a) |
0
8886 this._b = (b + this._b) |
0
8887 this._c = (c + this._c) |
0
8888 this._d = (d + this._d) |
0
8889 this._e = (e + this._e) |
0
8890 this._f = (f + this._f) |
0
8891 this._g = (g + this._g) |
0
8892 this._h = (h + this._h) |
0
8895 Sha256.prototype._hash = function () {
8896 var H = new Buffer(
32)
8898 H.writeInt32BE(this._a,
0)
8899 H.writeInt32BE(this._b,
4)
8900 H.writeInt32BE(this._c,
8)
8901 H.writeInt32BE(this._d,
12)
8902 H.writeInt32BE(this._e,
16)
8903 H.writeInt32BE(this._f,
20)
8904 H.writeInt32BE(this._g,
24)
8905 H.writeInt32BE(this._h,
28)
8910 module.exports = Sha256
8912 }).call(this,require("buffer").Buffer)
8913 },{"./hash":
37,"buffer":
7,"inherits":
35}],
43:[function(require,module,exports){
8915 var inherits = require('inherits')
8916 var SHA512 = require('./sha512')
8917 var Hash = require('./hash')
8919 var W = new Array(
160)
8921 function Sha384 () {
8925 Hash.call(this,
128,
112)
8928 inherits(Sha384, SHA512)
8930 Sha384.prototype.init = function () {
8931 this._a =
0xcbbb9d5d |
0
8932 this._b =
0x629a292a |
0
8933 this._c =
0x9159015a |
0
8934 this._d =
0x152fecd8 |
0
8935 this._e =
0x67332667 |
0
8936 this._f =
0x8eb44a87 |
0
8937 this._g =
0xdb0c2e0d |
0
8938 this._h =
0x47b5481d |
0
8940 this._al =
0xc1059ed8 |
0
8941 this._bl =
0x367cd507 |
0
8942 this._cl =
0x3070dd17 |
0
8943 this._dl =
0xf70e5939 |
0
8944 this._el =
0xffc00b31 |
0
8945 this._fl =
0x68581511 |
0
8946 this._gl =
0x64f98fa7 |
0
8947 this._hl =
0xbefa4fa4 |
0
8952 Sha384.prototype._hash = function () {
8953 var H = new Buffer(
48)
8955 function writeInt64BE (h, l, offset) {
8956 H.writeInt32BE(h, offset)
8957 H.writeInt32BE(l, offset +
4)
8960 writeInt64BE(this._a, this._al,
0)
8961 writeInt64BE(this._b, this._bl,
8)
8962 writeInt64BE(this._c, this._cl,
16)
8963 writeInt64BE(this._d, this._dl,
24)
8964 writeInt64BE(this._e, this._el,
32)
8965 writeInt64BE(this._f, this._fl,
40)
8970 module.exports = Sha384
8972 }).call(this,require("buffer").Buffer)
8973 },{"./hash":
37,"./sha512":
44,"buffer":
7,"inherits":
35}],
44:[function(require,module,exports){
8975 var inherits = require('inherits')
8976 var Hash = require('./hash')
8979 0x428a2f98,
0xd728ae22,
0x71374491,
0x23ef65cd,
8980 0xb5c0fbcf,
0xec4d3b2f,
0xe9b5dba5,
0x8189dbbc,
8981 0x3956c25b,
0xf348b538,
0x59f111f1,
0xb605d019,
8982 0x923f82a4,
0xaf194f9b,
0xab1c5ed5,
0xda6d8118,
8983 0xd807aa98,
0xa3030242,
0x12835b01,
0x45706fbe,
8984 0x243185be,
0x4ee4b28c,
0x550c7dc3,
0xd5ffb4e2,
8985 0x72be5d74,
0xf27b896f,
0x80deb1fe,
0x3b1696b1,
8986 0x9bdc06a7,
0x25c71235,
0xc19bf174,
0xcf692694,
8987 0xe49b69c1,
0x9ef14ad2,
0xefbe4786,
0x384f25e3,
8988 0x0fc19dc6,
0x8b8cd5b5,
0x240ca1cc,
0x77ac9c65,
8989 0x2de92c6f,
0x592b0275,
0x4a7484aa,
0x6ea6e483,
8990 0x5cb0a9dc,
0xbd41fbd4,
0x76f988da,
0x831153b5,
8991 0x983e5152,
0xee66dfab,
0xa831c66d,
0x2db43210,
8992 0xb00327c8,
0x98fb213f,
0xbf597fc7,
0xbeef0ee4,
8993 0xc6e00bf3,
0x3da88fc2,
0xd5a79147,
0x930aa725,
8994 0x06ca6351,
0xe003826f,
0x14292967,
0x0a0e6e70,
8995 0x27b70a85,
0x46d22ffc,
0x2e1b2138,
0x5c26c926,
8996 0x4d2c6dfc,
0x5ac42aed,
0x53380d13,
0x9d95b3df,
8997 0x650a7354,
0x8baf63de,
0x766a0abb,
0x3c77b2a8,
8998 0x81c2c92e,
0x47edaee6,
0x92722c85,
0x1482353b,
8999 0xa2bfe8a1,
0x4cf10364,
0xa81a664b,
0xbc423001,
9000 0xc24b8b70,
0xd0f89791,
0xc76c51a3,
0x0654be30,
9001 0xd192e819,
0xd6ef5218,
0xd6990624,
0x5565a910,
9002 0xf40e3585,
0x5771202a,
0x106aa070,
0x32bbd1b8,
9003 0x19a4c116,
0xb8d2d0c8,
0x1e376c08,
0x5141ab53,
9004 0x2748774c,
0xdf8eeb99,
0x34b0bcb5,
0xe19b48a8,
9005 0x391c0cb3,
0xc5c95a63,
0x4ed8aa4a,
0xe3418acb,
9006 0x5b9cca4f,
0x7763e373,
0x682e6ff3,
0xd6b2b8a3,
9007 0x748f82ee,
0x5defb2fc,
0x78a5636f,
0x43172f60,
9008 0x84c87814,
0xa1f0ab72,
0x8cc70208,
0x1a6439ec,
9009 0x90befffa,
0x23631e28,
0xa4506ceb,
0xde82bde9,
9010 0xbef9a3f7,
0xb2c67915,
0xc67178f2,
0xe372532b,
9011 0xca273ece,
0xea26619c,
0xd186b8c7,
0x21c0c207,
9012 0xeada7dd6,
0xcde0eb1e,
0xf57d4f7f,
0xee6ed178,
9013 0x06f067aa,
0x72176fba,
0x0a637dc5,
0xa2c898a6,
9014 0x113f9804,
0xbef90dae,
0x1b710b35,
0x131c471b,
9015 0x28db77f5,
0x23047d84,
0x32caab7b,
0x40c72493,
9016 0x3c9ebe0a,
0x15c9bebc,
0x431d67c4,
0x9c100d4c,
9017 0x4cc5d4be,
0xcb3e42b6,
0x597f299c,
0xfc657e2a,
9018 0x5fcb6fab,
0x3ad6faec,
0x6c44198c,
0x4a475817
9021 var W = new Array(
160)
9023 function Sha512 () {
9027 Hash.call(this,
128,
112)
9030 inherits(Sha512, Hash)
9032 Sha512.prototype.init = function () {
9033 this._a =
0x6a09e667 |
0
9034 this._b =
0xbb67ae85 |
0
9035 this._c =
0x3c6ef372 |
0
9036 this._d =
0xa54ff53a |
0
9037 this._e =
0x510e527f |
0
9038 this._f =
0x9b05688c |
0
9039 this._g =
0x1f83d9ab |
0
9040 this._h =
0x5be0cd19 |
0
9042 this._al =
0xf3bcc908 |
0
9043 this._bl =
0x84caa73b |
0
9044 this._cl =
0xfe94f82b |
0
9045 this._dl =
0x5f1d36f1 |
0
9046 this._el =
0xade682d1 |
0
9047 this._fl =
0x2b3e6c1f |
0
9048 this._gl =
0xfb41bd6b |
0
9049 this._hl =
0x137e2179 |
0
9054 function S (X, Xl, n) {
9055 return (X
>>> n) | (Xl << (
32 - n))
9058 function Ch (x, y, z) {
9059 return ((x & y) ^ ((~x) & z))
9062 function Maj (x, y, z) {
9063 return ((x & y) ^ (x & z) ^ (y & z))
9066 Sha512.prototype._update = function (M) {
9078 var al = this._al |
0
9079 var bl = this._bl |
0
9080 var cl = this._cl |
0
9081 var dl = this._dl |
0
9082 var el = this._el |
0
9083 var fl = this._fl |
0
9084 var gl = this._gl |
0
9085 var hl = this._hl |
0
9090 var x = W[j -
15 *
2]
9091 var xl = W[j -
15 *
2 +
1]
9092 var gamma0 = S(x, xl,
1) ^ S(x, xl,
8) ^ (x
>>> 7)
9093 var gamma0l = S(xl, x,
1) ^ S(xl, x,
8) ^ S(xl, x,
7)
9096 xl = W[j -
2 *
2 +
1]
9097 var gamma1 = S(x, xl,
19) ^ S(xl, x,
29) ^ (x
>>> 6)
9098 var gamma1l = S(xl, x,
19) ^ S(x, xl,
29) ^ S(xl, x,
6)
9100 // W[i] = gamma0 + W[i -
7] + gamma1 + W[i -
16]
9101 var Wi7 = W[j -
7 *
2]
9102 var Wi7l = W[j -
7 *
2 +
1]
9104 var Wi16 = W[j -
16 *
2]
9105 var Wi16l = W[j -
16 *
2 +
1]
9107 Wil = gamma0l + Wi7l
9108 Wi = gamma0 + Wi7 + ((Wil
>>> 0) < (gamma0l
>>> 0) ?
1 :
0)
9110 Wi = Wi + gamma1 + ((Wil
>>> 0) < (gamma1l
>>> 0) ?
1 :
0)
9112 Wi = Wi + Wi16 + ((Wil
>>> 0) < (Wi16l
>>> 0) ?
1 :
0)
9119 var maj = Maj(a, b, c)
9120 var majl = Maj(al, bl, cl)
9122 var sigma0h = S(a, al,
28) ^ S(al, a,
2) ^ S(al, a,
7)
9123 var sigma0l = S(al, a,
28) ^ S(a, al,
2) ^ S(a, al,
7)
9124 var sigma1h = S(e, el,
14) ^ S(e, el,
18) ^ S(el, e,
9)
9125 var sigma1l = S(el, e,
14) ^ S(el, e,
18) ^ S(e, el,
9)
9127 // t1 = h + sigma1 + ch + K[i] + W[i]
9131 var ch = Ch(e, f, g)
9132 var chl = Ch(el, fl, gl)
9134 var t1l = hl + sigma1l
9135 var t1 = h + sigma1h + ((t1l
>>> 0) < (hl
>>> 0) ?
1 :
0)
9137 t1 = t1 + ch + ((t1l
>>> 0) < (chl
>>> 0) ?
1 :
0)
9139 t1 = t1 + Ki + ((t1l
>>> 0) < (Kil
>>> 0) ?
1 :
0)
9141 t1 = t1 + Wi + ((t1l
>>> 0) < (Wil
>>> 0) ?
1 :
0)
9143 // t2 = sigma0 + maj
9144 var t2l = sigma0l + majl
9145 var t2 = sigma0h + maj + ((t2l
>>> 0) < (sigma0l
>>> 0) ?
1 :
0)
9154 e = (d + t1 + ((el
>>> 0) < (dl
>>> 0) ?
1 :
0)) |
0
9161 al = (t1l + t2l) |
0
9162 a = (t1 + t2 + ((al
>>> 0) < (t1l
>>> 0) ?
1 :
0)) |
0
9169 Wi = M.readInt32BE(j *
4)
9170 Wil = M.readInt32BE(j *
4 +
4)
9180 this._al = (this._al + al) |
0
9181 this._bl = (this._bl + bl) |
0
9182 this._cl = (this._cl + cl) |
0
9183 this._dl = (this._dl + dl) |
0
9184 this._el = (this._el + el) |
0
9185 this._fl = (this._fl + fl) |
0
9186 this._gl = (this._gl + gl) |
0
9187 this._hl = (this._hl + hl) |
0
9189 this._a = (this._a + a + ((this._al
>>> 0) < (al
>>> 0) ?
1 :
0)) |
0
9190 this._b = (this._b + b + ((this._bl
>>> 0) < (bl
>>> 0) ?
1 :
0)) |
0
9191 this._c = (this._c + c + ((this._cl
>>> 0) < (cl
>>> 0) ?
1 :
0)) |
0
9192 this._d = (this._d + d + ((this._dl
>>> 0) < (dl
>>> 0) ?
1 :
0)) |
0
9193 this._e = (this._e + e + ((this._el
>>> 0) < (el
>>> 0) ?
1 :
0)) |
0
9194 this._f = (this._f + f + ((this._fl
>>> 0) < (fl
>>> 0) ?
1 :
0)) |
0
9195 this._g = (this._g + g + ((this._gl
>>> 0) < (gl
>>> 0) ?
1 :
0)) |
0
9196 this._h = (this._h + h + ((this._hl
>>> 0) < (hl
>>> 0) ?
1 :
0)) |
0
9199 Sha512.prototype._hash = function () {
9200 var H = new Buffer(
64)
9202 function writeInt64BE (h, l, offset) {
9203 H.writeInt32BE(h, offset)
9204 H.writeInt32BE(l, offset +
4)
9207 writeInt64BE(this._a, this._al,
0)
9208 writeInt64BE(this._b, this._bl,
8)
9209 writeInt64BE(this._c, this._cl,
16)
9210 writeInt64BE(this._d, this._dl,
24)
9211 writeInt64BE(this._e, this._el,
32)
9212 writeInt64BE(this._f, this._fl,
40)
9213 writeInt64BE(this._g, this._gl,
48)
9214 writeInt64BE(this._h, this._hl,
56)
9219 module.exports = Sha512
9221 }).call(this,require(
"buffer").Buffer)
9222 },{
"./hash":
37,
"buffer":
7,
"inherits":
35}],
45:[function(require,module,exports){
9225 var createHash = require('create-hash/browser');
9226 var inherits = require('inherits')
9228 var Transform = require('stream').Transform
9230 var ZEROS = new Buffer(
128)
9233 function Hmac(alg, key) {
9234 Transform.call(this)
9236 if (typeof key === 'string') {
9237 key = new Buffer(key)
9240 var blocksize = (alg === 'sha512' || alg === 'sha384') ?
128 :
64
9245 if (key.length
> blocksize) {
9246 key = createHash(alg).update(key).digest()
9248 } else if (key.length < blocksize) {
9249 key = Buffer.concat([key, ZEROS], blocksize)
9252 var ipad = this._ipad = new Buffer(blocksize)
9253 var opad = this._opad = new Buffer(blocksize)
9255 for (var i =
0; i < blocksize; i++) {
9256 ipad[i] = key[i] ^
0x36
9257 opad[i] = key[i] ^
0x5C
9260 this._hash = createHash(alg).update(ipad)
9263 inherits(Hmac, Transform)
9265 Hmac.prototype.update = function (data, enc) {
9266 this._hash.update(data, enc)
9271 Hmac.prototype._transform = function (data, _, next) {
9272 this._hash.update(data)
9277 Hmac.prototype._flush = function (next) {
9278 this.push(this.digest())
9283 Hmac.prototype.digest = function (enc) {
9284 var h = this._hash.digest()
9286 return createHash(this._alg).update(this._opad).update(h).digest(enc)
9289 module.exports = function createHmac(alg, key) {
9290 return new Hmac(alg, key)
9293 }).call(this,require("buffer").Buffer)
9294 },{"buffer":
7,"create-hash/browser":
32,"inherits":
46,"stream":
26}],
46:[function(require,module,exports){
9295 arguments[
4][
12][
0].apply(exports,arguments)
9296 },{"dup":
12}],
47:[function(require,module,exports){
9297 var assert = require('assert')
9298 var BigInteger = require('bigi')
9300 var Point = require('./point')
9302 function Curve(p, a, b, Gx, Gy, n, h) {
9306 this.G = Point.fromAffine(this, Gx, Gy)
9310 this.infinity = new Point(this, null, null, BigInteger.ZERO)
9313 this.pOverFour = p.add(BigInteger.ONE).shiftRight(
2)
9316 Curve.prototype.pointFromX = function(isOdd, x) {
9317 var alpha = x.pow(
3).add(this.a.multiply(x)).add(this.b).mod(this.p)
9318 var beta = alpha.modPow(this.pOverFour, this.p) // XXX: not compatible with all curves
9321 if (beta.isEven() ^ !isOdd) {
9322 y = this.p.subtract(y) // -y % p
9325 return Point.fromAffine(this, x, y)
9328 Curve.prototype.isInfinity = function(Q) {
9329 if (Q === this.infinity) return true
9331 return Q.z.signum() ===
0 && Q.y.signum() !==
0
9334 Curve.prototype.isOnCurve = function(Q) {
9335 if (this.isInfinity(Q)) return true
9343 // Check that xQ and yQ are integers in the interval [
0, p -
1]
9344 if (x.signum() <
0 || x.compareTo(p)
>=
0) return false
9345 if (y.signum() <
0 || y.compareTo(p)
>=
0) return false
9347 // and check that y^
2 = x^
3 + ax + b (mod p)
9348 var lhs = y.square().mod(p)
9349 var rhs = x.pow(
3).add(a.multiply(x)).add(b).mod(p)
9350 return lhs.equals(rhs)
9354 * Validate an elliptic curve point.
9356 * See SEC
1, section
3.2.2.1: Elliptic Curve Public Key Validation Primitive
9358 Curve.prototype.validate = function(Q) {
9360 assert(!this.isInfinity(Q), 'Point is at infinity')
9361 assert(this.isOnCurve(Q), 'Point is not on the curve')
9363 // Check nQ = O (where Q is a scalar multiple of G)
9364 var nQ = Q.multiply(this.n)
9365 assert(this.isInfinity(nQ), 'Point is not a scalar multiple of G')
9370 module.exports = Curve
9372 },{"./point":
51,"assert":
5,"bigi":
3}],
48:[function(require,module,exports){
9375 "p": "fffffffdffffffffffffffffffffffff",
9376 "a": "fffffffdfffffffffffffffffffffffc",
9377 "b": "e87579c11079f43dd824993c2cee5ed3",
9378 "n": "fffffffe0000000075a30d1b9038a115",
9380 "Gx": "
161ff7528b899b2d0c28607ca52c5b86",
9381 "Gy": "cf5ac8395bafeb13c02da292dded7a83"
9384 "p": "fffffffffffffffffffffffffffffffeffffac73",
9387 "n": "
0100000000000000000001b8fa16dfab9aca16b6b3",
9389 "Gx": "
3b4c382ce37aa192a4019e763036f4f5dd4d7ebb",
9390 "Gy": "
938cf935318fdced6bc28286531733c3f03c4fee"
9393 "p": "ffffffffffffffffffffffffffffffff7fffffff",
9394 "a": "ffffffffffffffffffffffffffffffff7ffffffc",
9395 "b": "
1c97befc54bd7a8b65acf89f81d4d4adc565fa45",
9396 "n": "
0100000000000000000001f4c8f927aed3ca752257",
9398 "Gx": "
4a96b5688ef573284664698968c38bb913cbfc82",
9399 "Gy": "
23a628553168947d59dcc912042351377ac5fb32"
9402 "p": "fffffffffffffffffffffffffffffffffffffffeffffee37",
9405 "n": "fffffffffffffffffffffffe26f2fc170f69466a74defd8d",
9407 "Gx": "db4ff10ec057e9ae26b07d0280b7f4341da5d1b1eae06c7d",
9408 "Gy": "
9b2f2f6d9c5628a7844163d015be86344082aa88d95e2f9d"
9411 "p": "fffffffffffffffffffffffffffffffeffffffffffffffff",
9412 "a": "fffffffffffffffffffffffffffffffefffffffffffffffc",
9413 "b": "
64210519e59c80e70fa7e9ab72243049feb8deecc146b9b1",
9414 "n": "ffffffffffffffffffffffff99def836146bc9b1b4d22831",
9416 "Gx": "
188da80eb03090f67cbf20eb43a18800f4ff0afd82ff1012",
9417 "Gy": "
07192b95ffc8da78631011ed6b24cdd573f977a11e794811"
9420 "p": "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f",
9423 "n": "fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141",
9425 "Gx": "
79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
9426 "Gy": "
483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8"
9429 "p": "ffffffff00000001000000000000000000000000ffffffffffffffffffffffff",
9430 "a": "ffffffff00000001000000000000000000000000fffffffffffffffffffffffc",
9431 "b": "
5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b",
9432 "n": "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551",
9434 "Gx": "
6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
9435 "Gy": "
4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5"
9439 },{}],
49:[function(require,module,exports){
9440 var Point = require('./point')
9441 var Curve = require('./curve')
9443 var getCurveByName = require('./names')
9448 getCurveByName: getCurveByName
9451 },{"./curve":
47,"./names":
50,"./point":
51}],
50:[function(require,module,exports){
9452 var BigInteger = require('bigi')
9454 var curves = require('./curves')
9455 var Curve = require('./curve')
9457 function getCurveByName(name) {
9458 var curve = curves[name]
9459 if (!curve) return null
9461 var p = new BigInteger(curve.p,
16)
9462 var a = new BigInteger(curve.a,
16)
9463 var b = new BigInteger(curve.b,
16)
9464 var n = new BigInteger(curve.n,
16)
9465 var h = new BigInteger(curve.h,
16)
9466 var Gx = new BigInteger(curve.Gx,
16)
9467 var Gy = new BigInteger(curve.Gy,
16)
9469 return new Curve(p, a, b, Gx, Gy, n, h)
9472 module.exports = getCurveByName
9474 },{"./curve":
47,"./curves":
48,"bigi":
3}],
51:[function(require,module,exports){
9476 var assert = require('assert')
9477 var BigInteger = require('bigi')
9479 var THREE = BigInteger.valueOf(
3)
9481 function Point(curve, x, y, z) {
9482 assert.notStrictEqual(z, undefined, 'Missing Z coordinate')
9490 this.compressed = true
9493 Object.defineProperty(Point.prototype, 'zInv', {
9495 if (this._zInv === null) {
9496 this._zInv = this.z.modInverse(this.curve.p)
9503 Object.defineProperty(Point.prototype, 'affineX', {
9505 return this.x.multiply(this.zInv).mod(this.curve.p)
9509 Object.defineProperty(Point.prototype, 'affineY', {
9511 return this.y.multiply(this.zInv).mod(this.curve.p)
9515 Point.fromAffine = function(curve, x, y) {
9516 return new Point(curve, x, y, BigInteger.ONE)
9519 Point.prototype.equals = function(other) {
9520 if (other === this) return true
9521 if (this.curve.isInfinity(this)) return this.curve.isInfinity(other)
9522 if (this.curve.isInfinity(other)) return this.curve.isInfinity(this)
9524 // u = Y2 * Z1 - Y1 * Z2
9525 var u = other.y.multiply(this.z).subtract(this.y.multiply(other.z)).mod(this.curve.p)
9527 if (u.signum() !==
0) return false
9529 // v = X2 * Z1 - X1 * Z2
9530 var v = other.x.multiply(this.z).subtract(this.x.multiply(other.z)).mod(this.curve.p)
9532 return v.signum() ===
0
9535 Point.prototype.negate = function() {
9536 var y = this.curve.p.subtract(this.y)
9538 return new Point(this.curve, this.x, y, this.z)
9541 Point.prototype.add = function(b) {
9542 if (this.curve.isInfinity(this)) return b
9543 if (this.curve.isInfinity(b)) return this
9550 // u = Y2 * Z1 - Y1 * Z2
9551 var u = y2.multiply(this.z).subtract(y1.multiply(b.z)).mod(this.curve.p)
9552 // v = X2 * Z1 - X1 * Z2
9553 var v = x2.multiply(this.z).subtract(x1.multiply(b.z)).mod(this.curve.p)
9555 if (v.signum() ===
0) {
9556 if (u.signum() ===
0) {
9557 return this.twice() // this == b, so double
9560 return this.curve.infinity // this = -b, so infinity
9564 var v3 = v2.multiply(v)
9565 var x1v2 = x1.multiply(v2)
9566 var zu2 = u.square().multiply(this.z)
9568 // x3 = v * (z2 * (z1 * u^
2 -
2 * x1 * v^
2) - v^
3)
9569 var x3 = zu2.subtract(x1v2.shiftLeft(
1)).multiply(b.z).subtract(v3).multiply(v).mod(this.curve.p)
9570 // y3 = z2 * (
3 * x1 * u * v^
2 - y1 * v^
3 - z1 * u^
3) + u * v^
3
9571 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)
9572 // z3 = v^
3 * z1 * z2
9573 var z3 = v3.multiply(this.z).multiply(b.z).mod(this.curve.p)
9575 return new Point(this.curve, x3, y3, z3)
9578 Point.prototype.twice = function() {
9579 if (this.curve.isInfinity(this)) return this
9580 if (this.y.signum() ===
0) return this.curve.infinity
9585 var y1z1 = y1.multiply(this.z)
9586 var y1sqz1 = y1z1.multiply(y1).mod(this.curve.p)
9587 var a = this.curve.a
9589 // w =
3 * x1^
2 + a * z1^
2
9590 var w = x1.square().multiply(THREE)
9592 if (a.signum() !==
0) {
9593 w = w.add(this.z.square().multiply(a))
9596 w = w.mod(this.curve.p)
9597 // x3 =
2 * y1 * z1 * (w^
2 -
8 * x1 * y1^
2 * z1)
9598 var x3 = w.square().subtract(x1.shiftLeft(
3).multiply(y1sqz1)).shiftLeft(
1).multiply(y1z1).mod(this.curve.p)
9599 // y3 =
4 * y1^
2 * z1 * (
3 * w * x1 -
2 * y1^
2 * z1) - w^
3
9600 var y3 = w.multiply(THREE).multiply(x1).subtract(y1sqz1.shiftLeft(
1)).shiftLeft(
2).multiply(y1sqz1).subtract(w.pow(
3)).mod(this.curve.p)
9601 // z3 =
8 * (y1 * z1)^
3
9602 var z3 = y1z1.pow(
3).shiftLeft(
3).mod(this.curve.p)
9604 return new Point(this.curve, x3, y3, z3)
9607 // Simple NAF (Non-Adjacent Form) multiplication algorithm
9608 // TODO: modularize the multiplication algorithm
9609 Point.prototype.multiply = function(k) {
9610 if (this.curve.isInfinity(this)) return this
9611 if (k.signum() ===
0) return this.curve.infinity
9614 var h = e.multiply(THREE)
9616 var neg = this.negate()
9619 for (var i = h.bitLength() -
2; i
> 0; --i) {
9622 var hBit = h.testBit(i)
9623 var eBit = e.testBit(i)
9626 R = R.add(hBit ? this : neg)
9633 // Compute this*j + x*k (simultaneous multiplication)
9634 Point.prototype.multiplyTwo = function(j, x, k) {
9637 if (j.bitLength()
> k.bitLength())
9638 i = j.bitLength() -
1
9640 i = k.bitLength() -
1
9642 var R = this.curve.infinity
9643 var both = this.add(x)
9648 var jBit = j.testBit(i)
9649 var kBit = k.testBit(i)
9670 Point.prototype.getEncoded = function(compressed) {
9671 if (compressed == undefined) compressed = this.compressed
9672 if (this.curve.isInfinity(this)) return new Buffer('
00', 'hex') // Infinity point encoded is simply '
00'
9674 var x = this.affineX
9675 var y = this.affineY
9679 // Determine size of q in bytes
9680 var byteLength = Math.floor((this.curve.p.bitLength() +
7) /
8)
9684 buffer = new Buffer(
1 + byteLength)
9685 buffer.writeUInt8(y.isEven() ?
0x02 :
0x03,
0)
9689 buffer = new Buffer(
1 + byteLength + byteLength)
9690 buffer.writeUInt8(
0x04,
0)
9692 y.toBuffer(byteLength).copy(buffer,
1 + byteLength)
9695 x.toBuffer(byteLength).copy(buffer,
1)
9700 Point.decodeFrom = function(curve, buffer) {
9701 var type = buffer.readUInt8(
0)
9702 var compressed = (type !==
4)
9704 var byteLength = Math.floor((curve.p.bitLength() +
7) /
8)
9705 var x = BigInteger.fromBuffer(buffer.slice(
1,
1 + byteLength))
9709 assert.equal(buffer.length, byteLength +
1, 'Invalid sequence length')
9710 assert(type ===
0x02 || type ===
0x03, 'Invalid sequence tag')
9712 var isOdd = (type ===
0x03)
9713 Q = curve.pointFromX(isOdd, x)
9716 assert.equal(buffer.length,
1 + byteLength + byteLength, 'Invalid sequence length')
9718 var y = BigInteger.fromBuffer(buffer.slice(
1 + byteLength))
9719 Q = Point.fromAffine(curve, x, y)
9722 Q.compressed = compressed
9726 Point.prototype.toString = function () {
9727 if (this.curve.isInfinity(this)) return '(INFINITY)'
9729 return '(' + this.affineX.toString() + ',' + this.affineY.toString() + ')'
9732 module.exports = Point
9734 }).call(this,require("buffer").Buffer)
9735 },{"assert":
5,"bigi":
3,"buffer":
7}],
52:[function(require,module,exports){
9736 (function (process,global,Buffer){
9739 var crypto = global.crypto || global.msCrypto
9740 if(crypto && crypto.getRandomValues) {
9741 module.exports = randomBytes;
9743 module.exports = oldBrowser;
9745 function randomBytes(size, cb) {
9746 var bytes = new Buffer(size); //in browserify, this is an extended Uint8Array
9747 /* This will not work in older browsers.
9748 * See https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues
9751 crypto.getRandomValues(bytes);
9752 if (typeof cb === 'function') {
9753 return process.nextTick(function () {
9759 function oldBrowser() {
9761 'secure random number generation not supported by this browser\n'+
9762 'use chrome, FireFox or Internet Explorer
11'
9766 }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer)
9767 },{"_process":
14,"buffer":
7}],
53:[function(require,module,exports){
9771 function getFunctionName(fn) {
9772 return fn.name || fn.toString().match(/function (.*?)\s*\(/)[
1];
9775 function getTypeTypeName(type) {
9776 if (nativeTypes.Function(type)) {
9777 type = type.toJSON ? type.toJSON() : getFunctionName(type);
9779 if (nativeTypes.Object(type)) return JSON.stringify(type);
9784 function getValueTypeName(value) {
9785 if (nativeTypes.Null(value)) return '';
9787 return getFunctionName(value.constructor);
9790 function tfErrorString(type, value) {
9791 var typeTypeName = getTypeTypeName(type);
9792 var valueTypeName = getValueTypeName(value);
9794 return 'Expected ' + typeTypeName + ', got ' + (valueTypeName && valueTypeName + ' ') + JSON.stringify(value);
9797 function tfPropertyErrorString(type, name, value) {
9798 return tfErrorString('property \"' + name + '\" of type ' + getTypeTypeName(type), value);
9802 Array: (function (_Array) {
9803 function Array(_x) {
9804 return _Array.apply(this, arguments);
9807 Array.toString = function () {
9808 return _Array.toString();
9812 })(function (value) {
9813 return value !== null && value !== undefined && value.constructor === Array;
9815 Boolean: function Boolean(value) {
9816 return typeof value === 'boolean';
9818 Buffer: (function (_Buffer) {
9819 function Buffer(_x2) {
9820 return _Buffer.apply(this, arguments);
9823 Buffer.toString = function () {
9824 return _Buffer.toString();
9828 })(function (value) {
9829 return Buffer.isBuffer(value);
9831 Function: function Function(value) {
9832 return typeof value === 'function';
9834 Null: function Null(value) {
9835 return value === undefined || value === null;
9837 Number: function Number(value) {
9838 return typeof value === 'number';
9840 Object: function Object(value) {
9841 return typeof value === 'object';
9843 String: function String(value) {
9844 return typeof value === 'string';
9851 function tJSON(type) {
9852 return type && type.toJSON ? type.toJSON() : type;
9855 function sJSON(type) {
9856 var json = tJSON(type);
9857 return nativeTypes.Object(json) ? JSON.stringify(json) : json;
9861 arrayOf: function arrayOf(type) {
9862 function arrayOf(value, strict) {
9864 return nativeTypes.Array(value) && value.every(function (x) {
9865 return typeforce(type, x, strict);
9871 arrayOf.toJSON = function () {
9872 return [tJSON(type)];
9878 maybe: function maybe(type) {
9879 function maybe(value, strict) {
9880 return nativeTypes.Null(value) || typeforce(type, value, strict);
9882 maybe.toJSON = function () {
9883 return '?' + sJSON(type);
9889 object: function object(type) {
9890 function object(value, strict) {
9891 typeforce(nativeTypes.Object, value, strict);
9893 var propertyName, propertyType, propertyValue;
9896 for (propertyName in type) {
9897 propertyType = type[propertyName];
9898 propertyValue = value[propertyName];
9900 typeforce(propertyType, propertyValue, strict);
9903 throw new TypeError(tfPropertyErrorString(propertyType, propertyName, propertyValue));
9907 for (propertyName in value) {
9908 if (type[propertyName]) continue;
9910 throw new TypeError('Unexpected property "' + propertyName + '"');
9916 object.toJSON = function () {
9923 oneOf: function oneOf() {
9924 for (var _len = arguments.length, types = Array(_len), _key =
0; _key < _len; _key++) {
9925 types[_key] = arguments[_key];
9928 function oneOf(value, strict) {
9929 return types.some(function (type) {
9931 return typeforce(type, value, strict);
9937 oneOf.toJSON = function () {
9938 return types.map(sJSON).join('|');
9944 quacksLike: function quacksLike(type) {
9945 function quacksLike(value, strict) {
9946 return type === getValueTypeName(value);
9948 quacksLike.toJSON = function () {
9955 tuple: function tuple() {
9956 for (var _len2 = arguments.length, types = Array(_len2), _key2 =
0; _key2 < _len2; _key2++) {
9957 types[_key2] = arguments[_key2];
9960 function tuple(value, strict) {
9961 return types.every(function (type, i) {
9962 return typeforce(type, value[i], strict);
9965 tuple.toJSON = function () {
9966 return '(' + types.map(sJSON).join(', ') + ')';
9972 value: function value(expected) {
9973 function value(actual) {
9974 return actual === expected;
9976 value.toJSON = function () {
9984 function compile(type) {
9985 if (nativeTypes.String(type)) {
9986 if (type[
0] === '?') return otherTypes.maybe(compile(type.slice(
1)));
9988 return nativeTypes[type] || otherTypes.quacksLike(type);
9989 } else if (type && nativeTypes.Object(type)) {
9990 if (nativeTypes.Array(type)) return otherTypes.arrayOf(compile(type[
0]));
9994 for (var propertyName in type) {
9995 compiled[propertyName] = compile(type[propertyName]);
9998 return otherTypes.object(compiled);
9999 } else if (nativeTypes.Function(type)) {
10003 return otherTypes.value(type);
10006 function typeforce(_x3, _x4, _x5) {
10009 _function: while (_again) {
10015 if (nativeTypes.Function(type)) {
10016 if (type(value, strict)) return true;
10018 throw new TypeError(tfErrorString(type, value));
10022 _x3 = compile(type);
10026 continue _function;
10030 // assign all types to typeforce function
10032 Object.keys(nativeTypes).forEach(function (typeName) {
10033 var nativeType = nativeTypes[typeName];
10034 nativeType.toJSON = function () {
10038 typeforce[typeName] = nativeType;
10041 for (typeName in otherTypes) {
10042 typeforce[typeName] = otherTypes[typeName];
10045 module.exports = typeforce;
10046 module.exports.compile = compile;
10047 }).call(this,require("buffer").Buffer)
10048 },{"buffer":
7}],
54:[function(require,module,exports){
10049 (function (Buffer){
10050 var assert = require('assert')
10051 var base58check = require('bs58check')
10052 var typeForce = require('typeforce')
10053 var networks = require('./networks')
10054 var scripts = require('./scripts')
10056 function findScriptTypeByVersion (version) {
10057 for (var networkName in networks) {
10058 var network = networks[networkName]
10060 if (version === network.pubKeyHash) return 'pubkeyhash'
10061 if (version === network.scriptHash) return 'scripthash'
10065 function Address (hash, version) {
10066 typeForce('Buffer', hash)
10068 assert.strictEqual(hash.length,
20, 'Invalid hash length')
10069 assert.strictEqual(version &
0xff, version, 'Invalid version byte')
10072 this.version = version
10075 Address.fromBase58Check = function (string) {
10076 var payload = base58check.decode(string)
10077 var version = payload.readUInt8(
0)
10078 var hash = payload.slice(
1)
10080 return new Address(hash, version)
10083 Address.fromOutputScript = function (script, network) {
10084 network = network || networks.bitcoin
10086 if (scripts.isPubKeyHashOutput(script)) return new Address(script.chunks[
2], network.pubKeyHash)
10087 if (scripts.isScriptHashOutput(script)) return new Address(script.chunks[
1], network.scriptHash)
10089 assert(false, script.toASM() + ' has no matching Address')
10092 Address.prototype.toBase58Check = function () {
10093 var payload = new Buffer(
21)
10094 payload.writeUInt8(this.version,
0)
10095 this.hash.copy(payload,
1)
10097 return base58check.encode(payload)
10100 Address.prototype.toOutputScript = function () {
10101 var scriptType = findScriptTypeByVersion(this.version)
10103 if (scriptType === 'pubkeyhash') return scripts.pubKeyHashOutput(this.hash)
10104 if (scriptType === 'scripthash') return scripts.scriptHashOutput(this.hash)
10106 assert(false, this.toString() + ' has no matching Script')
10109 Address.prototype.toString = Address.prototype.toBase58Check
10111 module.exports = Address
10113 }).call(this,require("buffer").Buffer)
10114 },{"./networks":
66,"./scripts":
69,"assert":
5,"bs58check":
31,"buffer":
7,"typeforce":
53}],
55:[function(require,module,exports){
10115 var bs58check = require('bs58check')
10117 function decode () {
10118 console.warn('bs58check will be removed in
2.0.0. require("bs58check") instead.')
10120 return bs58check.decode.apply(undefined, arguments)
10123 function encode () {
10124 console.warn('bs58check will be removed in
2.0.0. require("bs58check") instead.')
10126 return bs58check.encode.apply(undefined, arguments)
10134 },{"bs58check":
31}],
56:[function(require,module,exports){
10135 (function (Buffer){
10136 var assert = require('assert')
10137 var bufferutils = require('./bufferutils')
10138 var crypto = require('./crypto')
10140 var Transaction = require('./transaction')
10142 function Block () {
10144 this.prevHash = null
10145 this.merkleRoot = null
10151 Block.fromBuffer = function (buffer) {
10152 assert(buffer.length
>=
80, 'Buffer too small (<
80 bytes)')
10155 function readSlice (n) {
10157 return buffer.slice(offset - n, offset)
10160 function readUInt32 () {
10161 var i = buffer.readUInt32LE(offset)
10166 var block = new Block()
10167 block.version = readUInt32()
10168 block.prevHash = readSlice(
32)
10169 block.merkleRoot = readSlice(
32)
10170 block.timestamp = readUInt32()
10171 block.bits = readUInt32()
10172 block.nonce = readUInt32()
10174 if (buffer.length ===
80) return block
10176 function readVarInt () {
10177 var vi = bufferutils.readVarInt(buffer, offset)
10182 // FIXME: poor performance
10183 function readTransaction () {
10184 var tx = Transaction.fromBuffer(buffer.slice(offset), true)
10186 offset += tx.toBuffer().length
10190 var nTransactions = readVarInt()
10191 block.transactions = []
10193 for (var i =
0; i < nTransactions; ++i) {
10194 var tx = readTransaction()
10195 block.transactions.push(tx)
10201 Block.fromHex = function (hex) {
10202 return Block.fromBuffer(new Buffer(hex, 'hex'))
10205 Block.prototype.getHash = function () {
10206 return crypto.hash256(this.toBuffer(true))
10209 Block.prototype.getId = function () {
10210 return bufferutils.reverse(this.getHash()).toString('hex')
10213 Block.prototype.getUTCDate = function () {
10214 var date = new Date(
0) // epoch
10215 date.setUTCSeconds(this.timestamp)
10220 Block.prototype.toBuffer = function (headersOnly) {
10221 var buffer = new Buffer(
80)
10224 function writeSlice (slice) {
10225 slice.copy(buffer, offset)
10226 offset += slice.length
10229 function writeUInt32 (i) {
10230 buffer.writeUInt32LE(i, offset)
10234 writeUInt32(this.version)
10235 writeSlice(this.prevHash)
10236 writeSlice(this.merkleRoot)
10237 writeUInt32(this.timestamp)
10238 writeUInt32(this.bits)
10239 writeUInt32(this.nonce)
10241 if (headersOnly || !this.transactions) return buffer
10243 var txLenBuffer = bufferutils.varIntBuffer(this.transactions.length)
10244 var txBuffers = this.transactions.map(function (tx) {
10245 return tx.toBuffer()
10248 return Buffer.concat([buffer, txLenBuffer].concat(txBuffers))
10251 Block.prototype.toHex = function (headersOnly) {
10252 return this.toBuffer(headersOnly).toString('hex')
10255 module.exports = Block
10257 }).call(this,require("buffer").Buffer)
10258 },{"./bufferutils":
57,"./crypto":
58,"./transaction":
70,"assert":
5,"buffer":
7}],
57:[function(require,module,exports){
10259 (function (Buffer){
10260 var assert = require('assert')
10261 var opcodes = require('./opcodes')
10263 // https://github.com/feross/buffer/blob/master/index.js#L1127
10264 function verifuint (value, max) {
10265 assert(typeof value === 'number', 'cannot write a non-number as a number')
10266 assert(value
>=
0, 'specified a negative value for writing an unsigned value')
10267 assert(value <= max, 'value is larger than maximum value for type')
10268 assert(Math.floor(value) === value, 'value has a fractional component')
10271 function pushDataSize (i) {
10272 return i < opcodes.OP_PUSHDATA1 ?
1
10278 function readPushDataInt (buffer, offset) {
10279 var opcode = buffer.readUInt8(offset)
10283 if (opcode < opcodes.OP_PUSHDATA1) {
10288 } else if (opcode === opcodes.OP_PUSHDATA1) {
10289 if (offset +
2 > buffer.length) return null
10290 number = buffer.readUInt8(offset +
1)
10294 } else if (opcode === opcodes.OP_PUSHDATA2) {
10295 if (offset +
3 > buffer.length) return null
10296 number = buffer.readUInt16LE(offset +
1)
10301 if (offset +
5 > buffer.length) return null
10302 assert.equal(opcode, opcodes.OP_PUSHDATA4, 'Unexpected opcode')
10304 number = buffer.readUInt32LE(offset +
1)
10315 function readUInt64LE (buffer, offset) {
10316 var a = buffer.readUInt32LE(offset)
10317 var b = buffer.readUInt32LE(offset +
4)
10320 verifuint(b + a,
0x001fffffffffffff)
10325 function readVarInt (buffer, offset) {
10326 var t = buffer.readUInt8(offset)
10335 } else if (t <
254) {
10336 number = buffer.readUInt16LE(offset +
1)
10340 } else if (t <
255) {
10341 number = buffer.readUInt32LE(offset +
1)
10346 number = readUInt64LE(buffer, offset +
1)
10356 function writePushDataInt (buffer, number, offset) {
10357 var size = pushDataSize(number)
10361 buffer.writeUInt8(number, offset)
10364 } else if (size ===
2) {
10365 buffer.writeUInt8(opcodes.OP_PUSHDATA1, offset)
10366 buffer.writeUInt8(number, offset +
1)
10369 } else if (size ===
3) {
10370 buffer.writeUInt8(opcodes.OP_PUSHDATA2, offset)
10371 buffer.writeUInt16LE(number, offset +
1)
10375 buffer.writeUInt8(opcodes.OP_PUSHDATA4, offset)
10376 buffer.writeUInt32LE(number, offset +
1)
10382 function writeUInt64LE (buffer, value, offset) {
10383 verifuint(value,
0x001fffffffffffff)
10385 buffer.writeInt32LE(value & -
1, offset)
10386 buffer.writeUInt32LE(Math.floor(value /
0x100000000), offset +
4)
10389 function varIntSize (i) {
10392 : i <
0x100000000 ?
5
10396 function writeVarInt (buffer, number, offset) {
10397 var size = varIntSize(number)
10401 buffer.writeUInt8(number, offset)
10404 } else if (size ===
3) {
10405 buffer.writeUInt8(
253, offset)
10406 buffer.writeUInt16LE(number, offset +
1)
10409 } else if (size ===
5) {
10410 buffer.writeUInt8(
254, offset)
10411 buffer.writeUInt32LE(number, offset +
1)
10415 buffer.writeUInt8(
255, offset)
10416 writeUInt64LE(buffer, number, offset +
1)
10422 function varIntBuffer (i) {
10423 var size = varIntSize(i)
10424 var buffer = new Buffer(size)
10425 writeVarInt(buffer, i,
0)
10430 function reverse (buffer) {
10431 var buffer2 = new Buffer(buffer)
10432 Array.prototype.reverse.call(buffer2)
10437 pushDataSize: pushDataSize,
10438 readPushDataInt: readPushDataInt,
10439 readUInt64LE: readUInt64LE,
10440 readVarInt: readVarInt,
10442 varIntBuffer: varIntBuffer,
10443 varIntSize: varIntSize,
10444 writePushDataInt: writePushDataInt,
10445 writeUInt64LE: writeUInt64LE,
10446 writeVarInt: writeVarInt
10449 }).call(this,require("buffer").Buffer)
10450 },{"./opcodes":
67,"assert":
5,"buffer":
7}],
58:[function(require,module,exports){
10451 var createHash = require('create-hash')
10453 function hash160 (buffer) {
10454 return ripemd160(sha256(buffer))
10457 function hash256 (buffer) {
10458 return sha256(sha256(buffer))
10461 function ripemd160 (buffer) {
10462 return createHash('rmd160').update(buffer).digest()
10465 function sha1 (buffer) {
10466 return createHash('sha1').update(buffer).digest()
10469 function sha256 (buffer) {
10470 return createHash('sha256').update(buffer).digest()
10473 // FIXME: Name not consistent with others
10474 var createHmac = require('create-hmac')
10476 function HmacSHA256 (buffer, secret) {
10477 console.warn('Hmac* functions are deprecated for removal in
2.0.0, use node crypto instead')
10478 return createHmac('sha256', secret).update(buffer).digest()
10481 function HmacSHA512 (buffer, secret) {
10482 console.warn('Hmac* functions are deprecated for removal in
2.0.0, use node crypto instead')
10483 return createHmac('sha512', secret).update(buffer).digest()
10487 ripemd160: ripemd160,
10492 HmacSHA256: HmacSHA256,
10493 HmacSHA512: HmacSHA512
10496 },{"create-hash":
32,"create-hmac":
45}],
59:[function(require,module,exports){
10497 (function (Buffer){
10498 var assert = require('assert')
10499 var createHmac = require('create-hmac')
10500 var typeForce = require('typeforce')
10502 var BigInteger = require('bigi')
10503 var ECSignature = require('./ecsignature')
10505 var ZERO = new Buffer([
0])
10506 var ONE = new Buffer([
1])
10508 // https://tools.ietf.org/html/rfc6979#section-
3.2
10509 function deterministicGenerateK (curve, hash, d, checkSig) {
10510 typeForce('Buffer', hash)
10511 typeForce('BigInteger', d)
10513 // FIXME: remove/uncomment for
2.0.0
10514 // typeForce('Function', checkSig)
10516 if (typeof checkSig !== 'function') {
10517 console.warn('deterministicGenerateK requires a checkSig callback in
2.0.0, see #
337 for more information')
10519 checkSig = function (k) {
10522 var e = BigInteger.fromBuffer(hash)
10524 var Q = G.multiply(k)
10526 if (curve.isInfinity(Q))
10529 var r = Q.affineX.mod(n)
10530 if (r.signum() ===
0)
10533 var s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n)
10534 if (s.signum() ===
0)
10542 assert.equal(hash.length,
32, 'Hash must be
256 bit')
10544 var x = d.toBuffer(
32)
10545 var k = new Buffer(
32)
10546 var v = new Buffer(
32)
10548 // Step A, ignored as hash already provided
10556 k = createHmac('sha256', k)
10564 v = createHmac('sha256', k).update(v).digest()
10567 k = createHmac('sha256', k)
10575 v = createHmac('sha256', k).update(v).digest()
10577 // Step H1/H2a, ignored as tlen === qlen (
256 bit)
10579 v = createHmac('sha256', k).update(v).digest()
10581 var T = BigInteger.fromBuffer(v)
10583 // Step H3, repeat until T is within the interval [
1, n -
1] and is suitable for ECDSA
10584 while ((T.signum() <=
0) || (T.compareTo(curve.n)
>=
0) || !checkSig(T)) {
10585 k = createHmac('sha256', k)
10590 v = createHmac('sha256', k).update(v).digest()
10592 // Step H1/H2a, again, ignored as tlen === qlen (
256 bit)
10594 v = createHmac('sha256', k).update(v).digest()
10595 T = BigInteger.fromBuffer(v)
10601 function sign (curve, hash, d) {
10604 var e = BigInteger.fromBuffer(hash)
10608 deterministicGenerateK(curve, hash, d, function (k) {
10609 var Q = G.multiply(k)
10611 if (curve.isInfinity(Q))
10614 r = Q.affineX.mod(n)
10615 if (r.signum() ===
0)
10618 s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n)
10619 if (s.signum() ===
0)
10625 var N_OVER_TWO = n.shiftRight(
1)
10627 // enforce low S values, see bip62: 'low s values in signatures'
10628 if (s.compareTo(N_OVER_TWO)
> 0) {
10632 return new ECSignature(r, s)
10635 function verifyRaw (curve, e, signature, Q) {
10639 var r = signature.r
10640 var s = signature.s
10642 //
1.4.1 Enforce r and s are both integers in the interval [
1, n −
1]
10643 if (r.signum() <=
0 || r.compareTo(n)
>=
0) return false
10644 if (s.signum() <=
0 || s.compareTo(n)
>=
0) return false
10647 var c = s.modInverse(n)
10649 //
1.4.4 Compute u1 = es^−
1 mod n
10650 // u2 = rs^−
1 mod n
10651 var u1 = e.multiply(c).mod(n)
10652 var u2 = r.multiply(c).mod(n)
10654 //
1.4.5 Compute R = (xR, yR) = u1G + u2Q
10655 var R = G.multiplyTwo(u1, Q, u2)
10656 var v = R.affineX.mod(n)
10658 //
1.4.5 (cont.) Enforce R is not at infinity
10659 if (curve.isInfinity(R)) return false
10661 //
1.4.8 If v = r, output "valid", and if v != r, output "invalid"
10665 function verify (curve, hash, signature, Q) {
10666 //
1.4.2 H = Hash(M), already done by the user
10668 var e = BigInteger.fromBuffer(hash)
10670 return verifyRaw(curve, e, signature, Q)
10674 * Recover a public key from a signature.
10676 * See SEC
1: Elliptic Curve Cryptography, section
4.1.6, "Public
10677 * Key Recovery Operation".
10679 * http://www.secg.org/download/aid-
780/sec1-v2.pdf
10681 function recoverPubKey (curve, e, signature, i) {
10682 assert.strictEqual(i &
3, i, 'Recovery param is more than two bits')
10687 var r = signature.r
10688 var s = signature.s
10690 assert(r.signum()
> 0 && r.compareTo(n) <
0, 'Invalid r value')
10691 assert(s.signum()
> 0 && s.compareTo(n) <
0, 'Invalid s value')
10693 // A set LSB signifies that the y-coordinate is odd
10696 // The more significant bit specifies whether we should use the
10697 // first or second candidate key.
10698 var isSecondKey = i
>> 1
10700 //
1.1 Let x = r + jn
10701 var x = isSecondKey ? r.add(n) : r
10702 var R = curve.pointFromX(isYOdd, x)
10704 //
1.4 Check that nR is at infinity
10705 var nR = R.multiply(n)
10706 assert(curve.isInfinity(nR), 'nR is not a valid curve point')
10708 // Compute -e from e
10709 var eNeg = e.negate().mod(n)
10711 //
1.6.1 Compute Q = r^-
1 (sR - eG)
10712 // Q = r^-
1 (sR + -eG)
10713 var rInv = r.modInverse(n)
10715 var Q = R.multiplyTwo(s, G, eNeg).multiply(rInv)
10722 * Calculate pubkey extraction parameter.
10724 * When extracting a pubkey from a signature, we have to
10725 * distinguish four different cases. Rather than putting this
10726 * burden on the verifier, Bitcoin includes a
2-bit value with the
10729 * This function simply tries all four cases and returns the value
10730 * that resulted in a successful pubkey recovery.
10732 function calcPubKeyRecoveryParam (curve, e, signature, Q) {
10733 for (var i =
0; i <
4; i++) {
10734 var Qprime = recoverPubKey(curve, e, signature, i)
10737 if (Qprime.equals(Q)) {
10742 throw new Error('Unable to find valid recovery factor')
10746 calcPubKeyRecoveryParam: calcPubKeyRecoveryParam,
10747 deterministicGenerateK: deterministicGenerateK,
10748 recoverPubKey: recoverPubKey,
10751 verifyRaw: verifyRaw
10754 }).call(this,require(
"buffer").Buffer)
10755 },{
"./ecsignature":
62,
"assert":
5,
"bigi":
3,
"buffer":
7,
"create-hmac":
45,
"typeforce":
53}],
60:[function(require,module,exports){
10756 (function (Buffer){
10757 var assert = require('assert')
10758 var base58check = require('bs58check')
10759 var ecdsa = require('./ecdsa')
10760 var networks = require('./networks')
10761 var randomBytes = require('randombytes')
10762 var typeForce = require('typeforce')
10764 var BigInteger = require('bigi')
10765 var ECPubKey = require('./ecpubkey')
10767 var ecurve = require('ecurve')
10768 var secp256k1 = ecurve.getCurveByName('secp256k1')
10770 function ECKey (d, compressed) {
10771 assert(d.signum()
> 0, 'Private key must be greater than
0')
10772 assert(d.compareTo(ECKey.curve.n) <
0, 'Private key must be less than the curve order')
10774 var Q = ECKey.curve.G.multiply(d)
10777 this.pub = new ECPubKey(Q, compressed)
10781 ECKey.curve = secp256k1
10783 // Static constructors
10784 ECKey.fromWIF = function (string) {
10785 var payload = base58check.decode(string)
10786 var compressed = false
10788 // Ignore the version byte
10789 payload = payload.slice(
1)
10791 if (payload.length ===
33) {
10792 assert.strictEqual(payload[
32],
0x01, 'Invalid compression flag')
10794 // Truncate the compression flag
10795 payload = payload.slice(
0, -
1)
10799 assert.equal(payload.length,
32, 'Invalid WIF payload length')
10801 var d = BigInteger.fromBuffer(payload)
10802 return new ECKey(d, compressed)
10805 ECKey.makeRandom = function (compressed, rng) {
10806 rng = rng || randomBytes
10808 var buffer = rng(
32)
10809 typeForce('Buffer', buffer)
10810 assert.equal(buffer.length,
32, 'Expected
256-bit Buffer from RNG')
10812 var d = BigInteger.fromBuffer(buffer)
10813 d = d.mod(ECKey.curve.n)
10815 return new ECKey(d, compressed)
10818 // Export functions
10819 ECKey.prototype.toWIF = function (network) {
10820 network = network || networks.bitcoin
10822 var bufferLen = this.pub.compressed ?
34 :
33
10823 var buffer = new Buffer(bufferLen)
10825 buffer.writeUInt8(network.wif,
0)
10826 this.d.toBuffer(
32).copy(buffer,
1)
10828 if (this.pub.compressed) {
10829 buffer.writeUInt8(
0x01,
33)
10832 return base58check.encode(buffer)
10836 ECKey.prototype.sign = function (hash) {
10837 return ecdsa.sign(ECKey.curve, hash, this.d)
10840 module.exports = ECKey
10842 }).call(this,require(
"buffer").Buffer)
10843 },{
"./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){
10844 (function (Buffer){
10845 var crypto = require('./crypto')
10846 var ecdsa = require('./ecdsa')
10847 var typeForce = require('typeforce')
10848 var networks = require('./networks')
10850 var Address = require('./address')
10852 var ecurve = require('ecurve')
10853 var secp256k1 = ecurve.getCurveByName('secp256k1')
10855 function ECPubKey (Q, compressed) {
10856 if (compressed === undefined) {
10860 typeForce('Point', Q)
10861 typeForce('Boolean', compressed)
10863 this.compressed = compressed
10868 ECPubKey.curve = secp256k1
10870 // Static constructors
10871 ECPubKey.fromBuffer = function (buffer) {
10872 var Q = ecurve.Point.decodeFrom(ECPubKey.curve, buffer)
10873 return new ECPubKey(Q, Q.compressed)
10876 ECPubKey.fromHex = function (hex) {
10877 return ECPubKey.fromBuffer(new Buffer(hex, 'hex'))
10881 ECPubKey.prototype.getAddress = function (network) {
10882 network = network || networks.bitcoin
10884 return new Address(crypto.hash160(this.toBuffer()), network.pubKeyHash)
10887 ECPubKey.prototype.verify = function (hash, signature) {
10888 return ecdsa.verify(ECPubKey.curve, hash, signature, this.Q)
10891 // Export functions
10892 ECPubKey.prototype.toBuffer = function () {
10893 return this.Q.getEncoded(this.compressed)
10896 ECPubKey.prototype.toHex = function () {
10897 return this.toBuffer().toString('hex')
10900 module.exports = ECPubKey
10902 }).call(this,require(
"buffer").Buffer)
10903 },{
"./address":
54,
"./crypto":
58,
"./ecdsa":
59,
"./networks":
66,
"buffer":
7,
"ecurve":
49,
"typeforce":
53}],
62:[function(require,module,exports){
10904 (function (Buffer){
10905 var assert = require('assert')
10906 var typeForce = require('typeforce')
10908 var BigInteger = require('bigi')
10910 function ECSignature (r, s) {
10911 typeForce('BigInteger', r)
10912 typeForce('BigInteger', s)
10918 ECSignature.parseCompact = function (buffer) {
10919 assert.equal(buffer.length,
65, 'Invalid signature length')
10920 var i = buffer.readUInt8(
0) -
27
10923 assert.equal(i, i &
7, 'Invalid signature parameter')
10924 var compressed = !!(i &
4)
10926 // Recovery param only
10929 var r = BigInteger.fromBuffer(buffer.slice(
1,
33))
10930 var s = BigInteger.fromBuffer(buffer.slice(
33))
10933 compressed: compressed,
10935 signature: new ECSignature(r, s)
10939 ECSignature.fromDER = function (buffer) {
10940 assert.equal(buffer.readUInt8(
0),
0x30, 'Not a DER sequence')
10941 assert.equal(buffer.readUInt8(
1), buffer.length -
2, 'Invalid sequence length')
10942 assert.equal(buffer.readUInt8(
2),
0x02, 'Expected a DER integer')
10944 var rLen = buffer.readUInt8(
3)
10945 assert(rLen
> 0, 'R length is zero')
10947 var offset =
4 + rLen
10948 assert.equal(buffer.readUInt8(offset),
0x02, 'Expected a DER integer (
2)')
10950 var sLen = buffer.readUInt8(offset +
1)
10951 assert(sLen
> 0, 'S length is zero')
10953 var rB = buffer.slice(
4, offset)
10954 var sB = buffer.slice(offset +
2)
10957 if (rLen
> 1 && rB.readUInt8(
0) ===
0x00) {
10958 assert(rB.readUInt8(
1) &
0x80, 'R value excessively padded')
10961 if (sLen
> 1 && sB.readUInt8(
0) ===
0x00) {
10962 assert(sB.readUInt8(
1) &
0x80, 'S value excessively padded')
10965 assert.equal(offset, buffer.length, 'Invalid DER encoding')
10966 var r = BigInteger.fromDERInteger(rB)
10967 var s = BigInteger.fromDERInteger(sB)
10969 assert(r.signum()
>=
0, 'R value is negative')
10970 assert(s.signum()
>=
0, 'S value is negative')
10972 return new ECSignature(r, s)
10975 // BIP62:
1 byte hashType flag (only
0x01,
0x02,
0x03,
0x81,
0x82 and
0x83 are allowed)
10976 ECSignature.parseScriptSignature = function (buffer) {
10977 var hashType = buffer.readUInt8(buffer.length -
1)
10978 var hashTypeMod = hashType & ~
0x80
10980 assert(hashTypeMod
> 0x00 && hashTypeMod <
0x04, 'Invalid hashType ' + hashType)
10983 signature: ECSignature.fromDER(buffer.slice(
0, -
1)),
10988 ECSignature.prototype.toCompact = function (i, compressed) {
10995 var buffer = new Buffer(
65)
10996 buffer.writeUInt8(i,
0)
10998 this.r.toBuffer(
32).copy(buffer,
1)
10999 this.s.toBuffer(
32).copy(buffer,
33)
11004 ECSignature.prototype.toDER = function () {
11005 var rBa = this.r.toDERInteger()
11006 var sBa = this.s.toDERInteger()
11011 sequence.push(
0x02, rBa.length)
11012 sequence = sequence.concat(rBa)
11015 sequence.push(
0x02, sBa.length)
11016 sequence = sequence.concat(sBa)
11019 sequence.unshift(
0x30, sequence.length)
11021 return new Buffer(sequence)
11024 ECSignature.prototype.toScriptSignature = function (hashType) {
11025 var hashTypeMod = hashType & ~
0x80
11026 assert(hashTypeMod
> 0x00 && hashTypeMod <
0x04, 'Invalid hashType ' + hashType)
11028 var hashTypeBuffer = new Buffer(
1)
11029 hashTypeBuffer.writeUInt8(hashType,
0)
11031 return Buffer.concat([this.toDER(), hashTypeBuffer])
11034 module.exports = ECSignature
11036 }).call(this,require(
"buffer").Buffer)
11037 },{
"assert":
5,
"bigi":
3,
"buffer":
7,
"typeforce":
53}],
63:[function(require,module,exports){
11038 (function (Buffer){
11039 var assert = require('assert')
11040 var base58check = require('bs58check')
11041 var bcrypto = require('./crypto')
11042 var createHmac = require('create-hmac')
11043 var typeForce = require('typeforce')
11044 var networks = require('./networks')
11046 var BigInteger = require('bigi')
11047 var ECKey = require('./eckey')
11048 var ECPubKey = require('./ecpubkey')
11050 var ecurve = require('ecurve')
11051 var curve = ecurve.getCurveByName('secp256k1')
11053 function findBIP32NetworkByVersion (version) {
11054 for (var name in networks) {
11055 var network = networks[name]
11057 if (version === network.bip32.private || version === network.bip32.public) {
11062 assert(false, 'Could not find network for ' + version.toString(
16))
11065 function HDNode (K, chainCode, network) {
11066 network = network || networks.bitcoin
11068 typeForce('Buffer', chainCode)
11070 assert.equal(chainCode.length,
32, 'Expected chainCode length of
32, got ' + chainCode.length)
11071 assert(network.bip32, 'Unknown BIP32 constants for network')
11073 this.chainCode = chainCode
11076 this.parentFingerprint =
0x00000000
11077 this.network = network
11079 if (K instanceof BigInteger) {
11080 this.privKey = new ECKey(K, true)
11081 this.pubKey = this.privKey.pub
11082 } else if (K instanceof ECKey) {
11083 assert(K.pub.compressed, 'ECKey must be compressed')
11085 this.pubKey = K.pub
11086 } else if (K instanceof ECPubKey) {
11087 assert(K.compressed, 'ECPubKey must be compressed')
11090 this.pubKey = new ECPubKey(K, true)
11094 HDNode.MASTER_SECRET = new Buffer('Bitcoin seed')
11095 HDNode.HIGHEST_BIT =
0x80000000
11098 HDNode.fromSeedBuffer = function (seed, network) {
11099 typeForce('Buffer', seed)
11101 assert(seed.length
>=
16, 'Seed should be at least
128 bits')
11102 assert(seed.length <=
64, 'Seed should be at most
512 bits')
11104 var I = createHmac('sha512', HDNode.MASTER_SECRET).update(seed).digest()
11105 var IL = I.slice(
0,
32)
11106 var IR = I.slice(
32)
11108 // In case IL is
0 or
>= n, the master key is invalid
11109 // This is handled by `new ECKey` in the HDNode constructor
11110 var pIL = BigInteger.fromBuffer(IL)
11112 return new HDNode(pIL, IR, network)
11115 HDNode.fromSeedHex = function (hex, network) {
11116 return HDNode.fromSeedBuffer(new Buffer(hex, 'hex'), network)
11119 HDNode.fromBase58 = function (string, network) {
11120 return HDNode.fromBuffer(base58check.decode(string), network, true)
11123 // FIXME: remove in
2.x.y
11124 HDNode.fromBuffer = function (buffer, network, __ignoreDeprecation) {
11125 if (!__ignoreDeprecation) {
11126 console.warn('HDNode.fromBuffer() is deprecated for removal in
2.x.y, use fromBase58 instead')
11129 assert.strictEqual(buffer.length, HDNode.LENGTH, 'Invalid buffer length')
11131 //
4 byte: version bytes
11132 var version = buffer.readUInt32BE(
0)
11135 assert(version === network.bip32.private || version === network.bip32.public, "Network doesn't match")
11139 network = findBIP32NetworkByVersion(version)
11142 //
1 byte: depth:
0x00 for master nodes,
0x01 for level-
1 descendants, ...
11143 var depth = buffer.readUInt8(
4)
11145 //
4 bytes: the fingerprint of the parent's key (
0x00000000 if master key)
11146 var parentFingerprint = buffer.readUInt32BE(
5)
11148 assert.strictEqual(parentFingerprint,
0x00000000, 'Invalid parent fingerprint')
11151 //
4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
11152 // This is encoded in MSB order. (
0x00000000 if master key)
11153 var index = buffer.readUInt32BE(
9)
11154 assert(depth
> 0 || index ===
0, 'Invalid index')
11156 //
32 bytes: the chain code
11157 var chainCode = buffer.slice(
13,
45)
11160 //
33 bytes: private key data (
0x00 + k)
11161 if (version === network.bip32.private) {
11162 assert.strictEqual(buffer.readUInt8(
45),
0x00, 'Invalid private key')
11163 data = buffer.slice(
46,
78)
11164 var d = BigInteger.fromBuffer(data)
11165 hd = new HDNode(d, chainCode, network)
11167 //
33 bytes: public key data (
0x02 + X or
0x03 + X)
11169 data = buffer.slice(
45,
78)
11170 var Q = ecurve.Point.decodeFrom(curve, data)
11171 assert.equal(Q.compressed, true, 'Invalid public key')
11173 // Verify that the X coordinate in the public point corresponds to a point on the curve.
11174 // If not, the extended public key is invalid.
11177 hd = new HDNode(Q, chainCode, network)
11182 hd.parentFingerprint = parentFingerprint
11187 // FIXME: remove in
2.x.y
11188 HDNode.fromHex = function (hex, network) {
11189 return HDNode.fromBuffer(new Buffer(hex, 'hex'), network)
11192 HDNode.prototype.getIdentifier = function () {
11193 return bcrypto.hash160(this.pubKey.toBuffer())
11196 HDNode.prototype.getFingerprint = function () {
11197 return this.getIdentifier().slice(
0,
4)
11200 HDNode.prototype.getAddress = function () {
11201 return this.pubKey.getAddress(this.network)
11204 HDNode.prototype.neutered = function () {
11205 var neutered = new HDNode(this.pubKey.Q, this.chainCode, this.network)
11206 neutered.depth = this.depth
11207 neutered.index = this.index
11208 neutered.parentFingerprint = this.parentFingerprint
11213 HDNode.prototype.toBase58 = function (isPrivate) {
11214 return base58check.encode(this.toBuffer(isPrivate, true))
11217 // FIXME: remove in
2.x.y
11218 HDNode.prototype.toBuffer = function (isPrivate, __ignoreDeprecation) {
11219 if (isPrivate === undefined) {
11220 isPrivate = !!this.privKey
11222 // FIXME: remove in
2.x.y
11224 console.warn('isPrivate flag is deprecated, please use the .neutered() method instead')
11227 if (!__ignoreDeprecation) {
11228 console.warn('HDNode.toBuffer() is deprecated for removal in
2.x.y, use toBase58 instead')
11232 var version = isPrivate ? this.network.bip32.private : this.network.bip32.public
11233 var buffer = new Buffer(HDNode.LENGTH)
11235 //
4 bytes: version bytes
11236 buffer.writeUInt32BE(version,
0)
11239 //
1 byte: depth:
0x00 for master nodes,
0x01 for level-
1 descendants, ....
11240 buffer.writeUInt8(this.depth,
4)
11242 //
4 bytes: the fingerprint of the parent's key (
0x00000000 if master key)
11243 buffer.writeUInt32BE(this.parentFingerprint,
5)
11245 //
4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
11246 // This is encoded in Big endian. (
0x00000000 if master key)
11247 buffer.writeUInt32BE(this.index,
9)
11249 //
32 bytes: the chain code
11250 this.chainCode.copy(buffer,
13)
11252 //
33 bytes: the public key or private key data
11254 // FIXME: remove in
2.x.y
11255 assert(this.privKey, 'Missing private key')
11257 //
0x00 + k for private keys
11258 buffer.writeUInt8(
0,
45)
11259 this.privKey.d.toBuffer(
32).copy(buffer,
46)
11261 // X9.62 encoding for public keys
11262 this.pubKey.toBuffer().copy(buffer,
45)
11268 // FIXME: remove in
2.x.y
11269 HDNode.prototype.toHex = function (isPrivate) {
11270 return this.toBuffer(isPrivate).toString('hex')
11273 // https://github.com/bitcoin/bips/blob/master/bip-
0032.mediawiki#child-key-derivation-ckd-functions
11274 HDNode.prototype.derive = function (index) {
11275 var isHardened = index
>= HDNode.HIGHEST_BIT
11276 var indexBuffer = new Buffer(
4)
11277 indexBuffer.writeUInt32BE(index,
0)
11283 assert(this.privKey, 'Could not derive hardened child key')
11285 // data =
0x00 || ser256(kpar) || ser32(index)
11286 data = Buffer.concat([
11287 this.privKey.d.toBuffer(
33),
11293 // data = serP(point(kpar)) || ser32(index)
11294 // = serP(Kpar) || ser32(index)
11295 data = Buffer.concat([
11296 this.pubKey.toBuffer(),
11301 var I = createHmac('sha512', this.chainCode).update(data).digest()
11302 var IL = I.slice(
0,
32)
11303 var IR = I.slice(
32)
11305 var pIL = BigInteger.fromBuffer(IL)
11307 // In case parse256(IL)
>= n, proceed with the next value for i
11308 if (pIL.compareTo(curve.n)
>=
0) {
11309 return this.derive(index +
1)
11312 // Private parent key -
> private child key
11314 if (this.privKey) {
11315 // ki = parse256(IL) + kpar (mod n)
11316 var ki = pIL.add(this.privKey.d).mod(curve.n)
11318 // In case ki ==
0, proceed with the next value for i
11319 if (ki.signum() ===
0) {
11320 return this.derive(index +
1)
11323 hd = new HDNode(ki, IR, this.network)
11325 // Public parent key -
> public child key
11327 // Ki = point(parse256(IL)) + Kpar
11329 var Ki = curve.G.multiply(pIL).add(this.pubKey.Q)
11331 // In case Ki is the point at infinity, proceed with the next value for i
11332 if (curve.isInfinity(Ki)) {
11333 return this.derive(index +
1)
11336 hd = new HDNode(Ki, IR, this.network)
11339 hd.depth = this.depth +
1
11341 hd.parentFingerprint = this.getFingerprint().readUInt32BE(
0)
11346 HDNode.prototype.deriveHardened = function (index) {
11347 // Only derives hardened private keys by default
11348 return this.derive(index + HDNode.HIGHEST_BIT)
11351 HDNode.prototype.toString = HDNode.prototype.toBase58
11353 module.exports = HDNode
11355 }).call(this,require("buffer").Buffer)
11356 },{"./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){
11358 Address: require('./address'),
11359 base58check: require('./base58check'),
11360 Block: require('./block'),
11361 bufferutils: require('./bufferutils'),
11362 crypto: require('./crypto'),
11363 ecdsa: require('./ecdsa'),
11364 ECKey: require('./eckey'),
11365 ECPubKey: require('./ecpubkey'),
11366 ECSignature: require('./ecsignature'),
11367 Message: require('./message'),
11368 opcodes: require('./opcodes'),
11369 HDNode: require('./hdnode'),
11370 Script: require('./script'),
11371 scripts: require('./scripts'),
11372 Transaction: require('./transaction'),
11373 TransactionBuilder: require('./transaction_builder'),
11374 networks: require('./networks'),
11375 Wallet: require('./wallet')
11378 },{"./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){
11379 (function (Buffer){
11380 var bufferutils = require('./bufferutils')
11381 var crypto = require('./crypto')
11382 var ecdsa = require('./ecdsa')
11383 var networks = require('./networks')
11385 var BigInteger = require('bigi')
11386 var ECPubKey = require('./ecpubkey')
11387 var ECSignature = require('./ecsignature')
11389 var ecurve = require('ecurve')
11390 var ecparams = ecurve.getCurveByName('secp256k1')
11392 function magicHash (message, network) {
11393 var magicPrefix = new Buffer(network.magicPrefix)
11394 var messageBuffer = new Buffer(message)
11395 var lengthBuffer = bufferutils.varIntBuffer(messageBuffer.length)
11397 var buffer = Buffer.concat([magicPrefix, lengthBuffer, messageBuffer])
11398 return crypto.hash256(buffer)
11401 function sign (privKey, message, network) {
11402 network = network || networks.bitcoin
11404 var hash = magicHash(message, network)
11405 var signature = privKey.sign(hash)
11406 var e = BigInteger.fromBuffer(hash)
11407 var i = ecdsa.calcPubKeyRecoveryParam(ecparams, e, signature, privKey.pub.Q)
11409 return signature.toCompact(i, privKey.pub.compressed)
11412 // TODO: network could be implied from address
11413 function verify (address, signature, message, network) {
11414 if (!Buffer.isBuffer(signature)) {
11415 signature = new Buffer(signature, 'base64')
11418 network = network || networks.bitcoin
11420 var hash = magicHash(message, network)
11421 var parsed = ECSignature.parseCompact(signature)
11422 var e = BigInteger.fromBuffer(hash)
11423 var Q = ecdsa.recoverPubKey(ecparams, e, parsed.signature, parsed.i)
11425 var pubKey = new ECPubKey(Q, parsed.compressed)
11426 return pubKey.getAddress(network).toString() === address.toString()
11430 magicHash: magicHash,
11435 }).call(this,require("buffer").Buffer)
11436 },{"./bufferutils":
57,"./crypto":
58,"./ecdsa":
59,"./ecpubkey":
61,"./ecsignature":
62,"./networks":
66,"bigi":
3,"buffer":
7,"ecurve":
49}],
66:[function(require,module,exports){
11437 // https://en.bitcoin.it/wiki/List_of_address_prefixes
11438 // Dogecoin BIP32 is a proposed standard: https://bitcointalk.org/index.php?topic=
409731
11442 magicPrefix: '\x18Bitcoin Signed Message:\n',
11444 public:
0x0488b21e,
11445 private:
0x0488ade4
11450 dustThreshold:
546, // https://github.com/bitcoin/bitcoin/blob/v0.9
.2/src/core.h#L151-L162
11451 feePerKb:
10000, // https://github.com/bitcoin/bitcoin/blob/v0.9
.2/src/main.cpp#L53
11452 estimateFee: estimateFee('bitcoin')
11455 magicPrefix: '\x18Bitcoin Signed Message:\n',
11457 public:
0x043587cf,
11458 private:
0x04358394
11463 dustThreshold:
546,
11465 estimateFee: estimateFee('testnet')
11468 magicPrefix: '\x19Litecoin Signed Message:\n',
11470 public:
0x019da462,
11471 private:
0x019d9cfe
11476 dustThreshold:
0, // https://github.com/litecoin-project/litecoin/blob/v0.8
.7.2/src/main.cpp#L360-L365
11477 dustSoftThreshold:
100000, // https://github.com/litecoin-project/litecoin/blob/v0.8
.7.2/src/main.h#L53
11478 feePerKb:
100000, // https://github.com/litecoin-project/litecoin/blob/v0.8
.7.2/src/main.cpp#L56
11479 estimateFee: estimateFee('litecoin')
11482 magicPrefix: '\x19Dogecoin Signed Message:\n',
11484 public:
0x02facafd,
11485 private:
0x02fac398
11490 dustThreshold:
0, // https://github.com/dogecoin/dogecoin/blob/v1.7
.1/src/core.h#L155-L160
11491 dustSoftThreshold:
100000000, // https://github.com/dogecoin/dogecoin/blob/v1.7
.1/src/main.h#L62
11492 feePerKb:
100000000, // https://github.com/dogecoin/dogecoin/blob/v1.7
.1/src/main.cpp#L58
11493 estimateFee: estimateFee('dogecoin')
11496 magicPrefix: '\x18Viacoin Signed Message:\n',
11498 public:
0x0488b21e,
11499 private:
0x0488ade4
11504 dustThreshold:
560,
11505 dustSoftThreshold:
100000,
11506 feePerKb:
100000, //
11507 estimateFee: estimateFee('viacoin')
11510 magicPrefix: '\x18Viacoin Signed Message:\n',
11512 public:
0x043587cf,
11513 private:
0x04358394
11518 dustThreshold:
560,
11519 dustSoftThreshold:
100000,
11521 estimateFee: estimateFee('viacointestnet')
11524 magicPrefix: '\x19Gamerscoin Signed Message:\n',
11526 public:
0x019da462,
11527 private:
0x019d9cfe
11532 dustThreshold:
0, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L358-L363
11533 dustSoftThreshold:
100000, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L51
11534 feePerKb:
100000, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L54
11535 estimateFee: estimateFee('gamerscoin')
11538 magicPrefix: '\x19Jumbucks Signed Message:\n',
11540 public:
0x037a689a,
11541 private:
0x037a6460
11547 dustSoftThreshold:
10000,
11549 estimateFee: estimateFee('jumbucks')
11552 magicPrefix: '\x18Zetacoin Signed Message:\n',
11554 public:
0x0488b21e,
11555 private:
0x0488ade4
11560 dustThreshold:
546, // https://github.com/zetacoin/zetacoin/blob/master/src/core.h#L159
11561 feePerKb:
10000, // https://github.com/zetacoin/zetacoin/blob/master/src/main.cpp#L54
11562 estimateFee: estimateFee('zetacoin')
11566 function estimateFee (type) {
11567 return function (tx) {
11568 var network = networks[type]
11569 var baseFee = network.feePerKb
11570 var byteSize = tx.toBuffer().length
11572 var fee = baseFee * Math.ceil(byteSize /
1000)
11573 if (network.dustSoftThreshold === undefined) return fee
11575 tx.outs.forEach(function (e) {
11576 if (e.value < network.dustSoftThreshold) {
11585 module.exports = networks
11587 },{}],
67:[function(require,module,exports){
11628 OP_TOALTSTACK:
107,
11629 OP_FROMALTSTACK:
108,
11661 OP_EQUALVERIFY:
136,
11686 OP_NUMEQUALVERIFY:
157,
11687 OP_NUMNOTEQUAL:
158,
11689 OP_GREATERTHAN:
160,
11690 OP_LESSTHANOREQUAL:
161,
11691 OP_GREATERTHANOREQUAL:
162,
11703 OP_CODESEPARATOR:
171,
11705 OP_CHECKSIGVERIFY:
173,
11706 OP_CHECKMULTISIG:
174,
11707 OP_CHECKMULTISIGVERIFY:
175,
11721 // template matching params
11722 OP_PUBKEYHASH:
253,
11724 OP_INVALIDOPCODE:
255
11727 },{}],
68:[function(require,module,exports){
11728 (function (Buffer){
11729 var assert = require('assert')
11730 var bufferutils = require('./bufferutils')
11731 var crypto = require('./crypto')
11732 var typeForce = require('typeforce')
11733 var opcodes = require('./opcodes')
11735 function Script (buffer, chunks) {
11736 typeForce('Buffer', buffer)
11737 typeForce('Array', chunks)
11739 this.buffer = buffer
11740 this.chunks = chunks
11743 Script.fromASM = function (asm) {
11744 var strChunks = asm.split(' ')
11745 var chunks = strChunks.map(function (strChunk) {
11747 if (strChunk in opcodes) {
11748 return opcodes[strChunk]
11752 return new Buffer(strChunk, 'hex')
11756 return Script.fromChunks(chunks)
11759 Script.fromBuffer = function (buffer) {
11763 while (i < buffer.length) {
11764 var opcode = buffer.readUInt8(i)
11767 if ((opcode
> opcodes.OP_0) && (opcode <= opcodes.OP_PUSHDATA4)) {
11768 var d = bufferutils.readPushDataInt(buffer, i)
11770 // did reading a pushDataInt fail? return non-chunked script
11771 if (d === null) return new Script(buffer, [])
11774 // attempt to read too much data?
11775 if (i + d.number
> buffer.length) return new Script(buffer, [])
11777 var data = buffer.slice(i, i + d.number)
11784 chunks.push(opcode)
11790 return new Script(buffer, chunks)
11793 Script.fromChunks = function (chunks) {
11794 typeForce('Array', chunks)
11796 var bufferSize = chunks.reduce(function (accum, chunk) {
11798 if (Buffer.isBuffer(chunk)) {
11799 return accum + bufferutils.pushDataSize(chunk.length) + chunk.length
11806 var buffer = new Buffer(bufferSize)
11809 chunks.forEach(function (chunk) {
11811 if (Buffer.isBuffer(chunk)) {
11812 offset += bufferutils.writePushDataInt(buffer, chunk.length, offset)
11814 chunk.copy(buffer, offset)
11815 offset += chunk.length
11819 buffer.writeUInt8(chunk, offset)
11824 assert.equal(offset, buffer.length, 'Could not decode chunks')
11825 return new Script(buffer, chunks)
11828 Script.fromHex = function (hex) {
11829 return Script.fromBuffer(new Buffer(hex, 'hex'))
11832 Script.EMPTY = Script.fromChunks([])
11834 Script.prototype.getHash = function () {
11835 return crypto.hash160(this.buffer)
11838 // FIXME: doesn't work for data chunks, maybe time to use buffertools.compare...
11839 Script.prototype.without = function (needle) {
11840 return Script.fromChunks(this.chunks.filter(function (op) {
11841 return op !== needle
11845 var reverseOps = []
11846 for (var op in opcodes) {
11847 var code = opcodes[op]
11848 reverseOps[code] = op
11851 Script.prototype.toASM = function () {
11852 return this.chunks.map(function (chunk) {
11854 if (Buffer.isBuffer(chunk)) {
11855 return chunk.toString('hex')
11859 return reverseOps[chunk]
11864 Script.prototype.toBuffer = function () {
11868 Script.prototype.toHex = function () {
11869 return this.toBuffer().toString('hex')
11872 module.exports = Script
11874 }).call(this,require("buffer").Buffer)
11875 },{"./bufferutils":
57,"./crypto":
58,"./opcodes":
67,"assert":
5,"buffer":
7,"typeforce":
53}],
69:[function(require,module,exports){
11876 (function (Buffer){
11877 var assert = require('assert')
11878 var ops = require('./opcodes')
11879 var typeForce = require('typeforce')
11881 var ecurve = require('ecurve')
11882 var curve = ecurve.getCurveByName('secp256k1')
11884 var ECSignature = require('./ecsignature')
11885 var Script = require('./script')
11887 function isCanonicalPubKey (buffer) {
11888 if (!Buffer.isBuffer(buffer)) return false
11891 ecurve.Point.decodeFrom(curve, buffer)
11893 if (!(e.message.match(/Invalid sequence (length|tag)/)))
11902 function isCanonicalSignature (buffer) {
11903 if (!Buffer.isBuffer(buffer)) return false
11906 ECSignature.parseScriptSignature(buffer)
11908 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/))) {
11918 function isPubKeyHashInput (script) {
11919 return script.chunks.length ===
2 &&
11920 isCanonicalSignature(script.chunks[
0]) &&
11921 isCanonicalPubKey(script.chunks[
1])
11924 function isPubKeyHashOutput (script) {
11925 return script.chunks.length ===
5 &&
11926 script.chunks[
0] === ops.OP_DUP &&
11927 script.chunks[
1] === ops.OP_HASH160 &&
11928 Buffer.isBuffer(script.chunks[
2]) &&
11929 script.chunks[
2].length ===
20 &&
11930 script.chunks[
3] === ops.OP_EQUALVERIFY &&
11931 script.chunks[
4] === ops.OP_CHECKSIG
11934 function isPubKeyInput (script) {
11935 return script.chunks.length ===
1 &&
11936 isCanonicalSignature(script.chunks[
0])
11939 function isPubKeyOutput (script) {
11940 return script.chunks.length ===
2 &&
11941 isCanonicalPubKey(script.chunks[
0]) &&
11942 script.chunks[
1] === ops.OP_CHECKSIG
11945 function isScriptHashInput (script, allowIncomplete) {
11946 if (script.chunks.length <
2) return false
11948 var lastChunk = script.chunks[script.chunks.length -
1]
11949 if (!Buffer.isBuffer(lastChunk)) return false
11951 var scriptSig = Script.fromChunks(script.chunks.slice(
0, -
1))
11952 var redeemScript = Script.fromBuffer(lastChunk)
11954 // is redeemScript a valid script?
11955 if (redeemScript.chunks.length ===
0) return false
11957 return classifyInput(scriptSig, allowIncomplete) === classifyOutput(redeemScript)
11960 function isScriptHashOutput (script) {
11961 return script.chunks.length ===
3 &&
11962 script.chunks[
0] === ops.OP_HASH160 &&
11963 Buffer.isBuffer(script.chunks[
1]) &&
11964 script.chunks[
1].length ===
20 &&
11965 script.chunks[
2] === ops.OP_EQUAL
11968 // allowIncomplete is to account for combining signatures
11969 // See https://github.com/bitcoin/bitcoin/blob/f425050546644a36b0b8e0eb2f6934a3e0f6f80f/src/script/sign.cpp#L195-L197
11970 function isMultisigInput (script, allowIncomplete) {
11971 if (script.chunks.length <
2) return false
11972 if (script.chunks[
0] !== ops.OP_0) return false
11974 if (allowIncomplete) {
11975 return script.chunks.slice(
1).every(function (chunk) {
11976 return chunk === ops.OP_0 || isCanonicalSignature(chunk)
11980 return script.chunks.slice(
1).every(isCanonicalSignature)
11983 function isMultisigOutput (script) {
11984 if (script.chunks.length <
4) return false
11985 if (script.chunks[script.chunks.length -
1] !== ops.OP_CHECKMULTISIG) return false
11987 var mOp = script.chunks[
0]
11988 if (mOp === ops.OP_0) return false
11989 if (mOp < ops.OP_1) return false
11990 if (mOp
> ops.OP_16) return false
11992 var nOp = script.chunks[script.chunks.length -
2]
11993 if (nOp === ops.OP_0) return false
11994 if (nOp < ops.OP_1) return false
11995 if (nOp
> ops.OP_16) return false
11997 var m = mOp - (ops.OP_1 -
1)
11998 var n = nOp - (ops.OP_1 -
1)
11999 if (n < m) return false
12001 var pubKeys = script.chunks.slice(
1, -
2)
12002 if (n < pubKeys.length) return false
12004 return pubKeys.every(isCanonicalPubKey)
12007 function isNullDataOutput (script) {
12008 return script.chunks[
0] === ops.OP_RETURN
12011 function classifyOutput (script) {
12012 typeForce('Script', script)
12014 if (isPubKeyHashOutput(script)) {
12015 return 'pubkeyhash'
12016 } else if (isScriptHashOutput(script)) {
12017 return 'scripthash'
12018 } else if (isMultisigOutput(script)) {
12020 } else if (isPubKeyOutput(script)) {
12022 } else if (isNullDataOutput(script)) {
12026 return 'nonstandard'
12029 function classifyInput (script, allowIncomplete) {
12030 typeForce('Script', script)
12032 if (isPubKeyHashInput(script)) {
12033 return 'pubkeyhash'
12034 } else if (isMultisigInput(script, allowIncomplete)) {
12036 } else if (isScriptHashInput(script, allowIncomplete)) {
12037 return 'scripthash'
12038 } else if (isPubKeyInput(script)) {
12042 return 'nonstandard'
12045 // Standard Script Templates
12046 // {pubKey} OP_CHECKSIG
12047 function pubKeyOutput (pubKey) {
12048 return Script.fromChunks([
12054 // OP_DUP OP_HASH160 {pubKeyHash} OP_EQUALVERIFY OP_CHECKSIG
12055 function pubKeyHashOutput (hash) {
12056 typeForce('Buffer', hash)
12058 return Script.fromChunks([
12062 ops.OP_EQUALVERIFY,
12067 // OP_HASH160 {scriptHash} OP_EQUAL
12068 function scriptHashOutput (hash) {
12069 typeForce('Buffer', hash)
12071 return Script.fromChunks([
12078 // m [pubKeys ...] n OP_CHECKMULTISIG
12079 function multisigOutput (m, pubKeys) {
12080 typeForce(['ECPubKey'], pubKeys)
12082 assert(pubKeys.length
>= m, 'Not enough pubKeys provided')
12084 var pubKeyBuffers = pubKeys.map(function (pubKey) {
12085 return pubKey.toBuffer()
12087 var n = pubKeys.length
12089 return Script.fromChunks([].concat(
12090 (ops.OP_1 -
1) + m,
12092 (ops.OP_1 -
1) + n,
12093 ops.OP_CHECKMULTISIG
12098 function pubKeyInput (signature) {
12099 typeForce('Buffer', signature)
12101 return Script.fromChunks([signature])
12104 // {signature} {pubKey}
12105 function pubKeyHashInput (signature, pubKey) {
12106 typeForce('Buffer', signature)
12108 return Script.fromChunks([signature, pubKey.toBuffer()])
12111 //
<scriptSig> {serialized scriptPubKey script}
12112 function scriptHashInput (scriptSig, scriptPubKey) {
12113 return Script.fromChunks([].concat(
12115 scriptPubKey.toBuffer()
12119 // OP_0 [signatures ...]
12120 function multisigInput (signatures, scriptPubKey) {
12121 if (scriptPubKey) {
12122 assert(isMultisigOutput(scriptPubKey))
12124 var mOp = scriptPubKey.chunks[
0]
12125 var nOp = scriptPubKey.chunks[scriptPubKey.chunks.length -
2]
12126 var m = mOp - (ops.OP_1 -
1)
12127 var n = nOp - (ops.OP_1 -
1)
12129 assert(signatures.length
>= m, 'Not enough signatures provided')
12130 assert(signatures.length <= n, 'Too many signatures provided')
12133 return Script.fromChunks([].concat(ops.OP_0, signatures))
12136 function nullDataOutput (data) {
12137 return Script.fromChunks([ops.OP_RETURN, data])
12141 isCanonicalPubKey: isCanonicalPubKey,
12142 isCanonicalSignature: isCanonicalSignature,
12143 isPubKeyHashInput: isPubKeyHashInput,
12144 isPubKeyHashOutput: isPubKeyHashOutput,
12145 isPubKeyInput: isPubKeyInput,
12146 isPubKeyOutput: isPubKeyOutput,
12147 isScriptHashInput: isScriptHashInput,
12148 isScriptHashOutput: isScriptHashOutput,
12149 isMultisigInput: isMultisigInput,
12150 isMultisigOutput: isMultisigOutput,
12151 isNullDataOutput: isNullDataOutput,
12152 classifyOutput: classifyOutput,
12153 classifyInput: classifyInput,
12154 pubKeyOutput: pubKeyOutput,
12155 pubKeyHashOutput: pubKeyHashOutput,
12156 scriptHashOutput: scriptHashOutput,
12157 multisigOutput: multisigOutput,
12158 pubKeyInput: pubKeyInput,
12159 pubKeyHashInput: pubKeyHashInput,
12160 scriptHashInput: scriptHashInput,
12161 multisigInput: multisigInput,
12162 dataOutput: function (data) {
12163 console.warn('dataOutput is deprecated, use nullDataOutput by
2.0.0')
12164 return nullDataOutput(data)
12166 nullDataOutput: nullDataOutput
12169 }).call(this,require("buffer").Buffer)
12170 },{"./ecsignature":
62,"./opcodes":
67,"./script":
68,"assert":
5,"buffer":
7,"ecurve":
49,"typeforce":
53}],
70:[function(require,module,exports){
12171 (function (Buffer){
12172 var assert = require('assert')
12173 var bufferutils = require('./bufferutils')
12174 var crypto = require('./crypto')
12175 var typeForce = require('typeforce')
12176 var opcodes = require('./opcodes')
12177 var scripts = require('./scripts')
12179 var Address = require('./address')
12180 var ECSignature = require('./ecsignature')
12181 var Script = require('./script')
12183 function Transaction () {
12190 Transaction.DEFAULT_SEQUENCE =
0xffffffff
12191 Transaction.SIGHASH_ALL =
0x01
12192 Transaction.SIGHASH_NONE =
0x02
12193 Transaction.SIGHASH_SINGLE =
0x03
12194 Transaction.SIGHASH_ANYONECANPAY =
0x80
12196 Transaction.fromBuffer = function (buffer, __disableAssert) {
12198 function readSlice (n) {
12200 return buffer.slice(offset - n, offset)
12203 function readUInt32 () {
12204 var i = buffer.readUInt32LE(offset)
12209 function readUInt64 () {
12210 var i = bufferutils.readUInt64LE(buffer, offset)
12215 function readVarInt () {
12216 var vi = bufferutils.readVarInt(buffer, offset)
12221 function readScript () {
12222 return Script.fromBuffer(readSlice(readVarInt()))
12225 function readGenerationScript () {
12226 return new Script(readSlice(readVarInt()), [])
12229 var tx = new Transaction()
12230 tx.version = readUInt32()
12232 var vinLen = readVarInt()
12233 for (var i =
0; i < vinLen; ++i) {
12234 var hash = readSlice(
32)
12236 if (Transaction.isCoinbaseHash(hash)) {
12239 index: readUInt32(),
12240 script: readGenerationScript(),
12241 sequence: readUInt32()
12246 index: readUInt32(),
12247 script: readScript(),
12248 sequence: readUInt32()
12253 var voutLen = readVarInt()
12254 for (i =
0; i < voutLen; ++i) {
12256 value: readUInt64(),
12257 script: readScript()
12261 tx.locktime = readUInt32()
12263 if (!__disableAssert) {
12264 assert.equal(offset, buffer.length, 'Transaction has unexpected data')
12270 Transaction.fromHex = function (hex) {
12271 return Transaction.fromBuffer(new Buffer(hex, 'hex'))
12274 Transaction.isCoinbaseHash = function (buffer) {
12275 return Array.prototype.every.call(buffer, function (x) {
12281 * Create a new txIn.
12283 * Can be called with any of:
12285 * - A transaction and an index
12286 * - A transaction hash and an index
12288 * Note that this method does not sign the created input.
12290 Transaction.prototype.addInput = function (hash, index, sequence, script) {
12291 if (sequence === undefined || sequence === null) {
12292 sequence = Transaction.DEFAULT_SEQUENCE
12295 script = script || Script.EMPTY
12297 if (typeof hash === 'string') {
12298 // TxId hex is big-endian, we need little-endian
12299 hash = bufferutils.reverse(new Buffer(hash, 'hex'))
12300 } else if (hash instanceof Transaction) {
12301 hash = hash.getHash()
12304 typeForce('Buffer', hash)
12305 typeForce('Number', index)
12306 typeForce('Number', sequence)
12307 typeForce('Script', script)
12309 assert.equal(hash.length,
32, 'Expected hash length of
32, got ' + hash.length)
12311 // Add the input and return the input's index
12312 return (this.ins.push({
12321 * Create a new txOut.
12323 * Can be called with:
12325 * - A base58 address string and a value
12326 * - An Address object and a value
12327 * - A scriptPubKey Script and a value
12329 Transaction.prototype.addOutput = function (scriptPubKey, value) {
12330 // Attempt to get a valid address if it's a base58 address string
12331 if (typeof scriptPubKey === 'string') {
12332 scriptPubKey = Address.fromBase58Check(scriptPubKey)
12335 // Attempt to get a valid script if it's an Address object
12336 if (scriptPubKey instanceof Address) {
12337 scriptPubKey = scriptPubKey.toOutputScript()
12340 typeForce('Script', scriptPubKey)
12341 typeForce('Number', value)
12343 // Add the output and return the output's index
12344 return (this.outs.push({
12345 script: scriptPubKey,
12350 Transaction.prototype.clone = function () {
12351 var newTx = new Transaction()
12352 newTx.version = this.version
12353 newTx.locktime = this.locktime
12355 newTx.ins = this.ins.map(function (txIn) {
12359 script: txIn.script,
12360 sequence: txIn.sequence
12364 newTx.outs = this.outs.map(function (txOut) {
12366 script: txOut.script,
12375 * Hash transaction for signing a specific input.
12377 * Bitcoin uses a different hash for each signed transaction input. This
12378 * method copies the transaction, makes the necessary changes based on the
12379 * hashType, serializes and finally hashes the result. This hash can then be
12380 * used to sign the transaction input in question.
12382 Transaction.prototype.hashForSignature = function (inIndex, prevOutScript, hashType) {
12383 // FIXME: remove in
2.x.y
12384 if (arguments[
0] instanceof Script) {
12385 console.warn('hashForSignature(prevOutScript, inIndex, ...) has been deprecated. Use hashForSignature(inIndex, prevOutScript, ...)')
12387 // swap the arguments (must be stored in tmp, arguments is special)
12388 var tmp = arguments[
0]
12389 inIndex = arguments[
1]
12390 prevOutScript = tmp
12393 typeForce('Number', inIndex)
12394 typeForce('Script', prevOutScript)
12395 typeForce('Number', hashType)
12397 assert(inIndex
>=
0, 'Invalid vin index')
12398 assert(inIndex < this.ins.length, 'Invalid vin index')
12400 var txTmp = this.clone()
12401 var hashScript = prevOutScript.without(opcodes.OP_CODESEPARATOR)
12403 // Blank out other inputs' signatures
12404 txTmp.ins.forEach(function (txIn) {
12405 txIn.script = Script.EMPTY
12407 txTmp.ins[inIndex].script = hashScript
12409 var hashTypeModifier = hashType &
0x1f
12411 if (hashTypeModifier === Transaction.SIGHASH_NONE) {
12412 assert(false, 'SIGHASH_NONE not yet supported')
12413 } else if (hashTypeModifier === Transaction.SIGHASH_SINGLE) {
12414 assert(false, 'SIGHASH_SINGLE not yet supported')
12417 if (hashType & Transaction.SIGHASH_ANYONECANPAY) {
12418 assert(false, 'SIGHASH_ANYONECANPAY not yet supported')
12421 var hashTypeBuffer = new Buffer(
4)
12422 hashTypeBuffer.writeInt32LE(hashType,
0)
12424 var buffer = Buffer.concat([txTmp.toBuffer(), hashTypeBuffer])
12425 return crypto.hash256(buffer)
12428 Transaction.prototype.getHash = function () {
12429 return crypto.hash256(this.toBuffer())
12432 Transaction.prototype.getId = function () {
12433 // TxHash is little-endian, we need big-endian
12434 return bufferutils.reverse(this.getHash()).toString('hex')
12437 Transaction.prototype.toBuffer = function () {
12438 function scriptSize (script) {
12439 var length = script.buffer.length
12441 return bufferutils.varIntSize(length) + length
12444 var buffer = new Buffer(
12446 bufferutils.varIntSize(this.ins.length) +
12447 bufferutils.varIntSize(this.outs.length) +
12448 this.ins.reduce(function (sum, input) { return sum +
40 + scriptSize(input.script) },
0) +
12449 this.outs.reduce(function (sum, output) { return sum +
8 + scriptSize(output.script) },
0)
12453 function writeSlice (slice) {
12454 slice.copy(buffer, offset)
12455 offset += slice.length
12458 function writeUInt32 (i) {
12459 buffer.writeUInt32LE(i, offset)
12463 function writeUInt64 (i) {
12464 bufferutils.writeUInt64LE(buffer, i, offset)
12468 function writeVarInt (i) {
12469 var n = bufferutils.writeVarInt(buffer, i, offset)
12473 writeUInt32(this.version)
12474 writeVarInt(this.ins.length)
12476 this.ins.forEach(function (txIn) {
12477 writeSlice(txIn.hash)
12478 writeUInt32(txIn.index)
12479 writeVarInt(txIn.script.buffer.length)
12480 writeSlice(txIn.script.buffer)
12481 writeUInt32(txIn.sequence)
12484 writeVarInt(this.outs.length)
12485 this.outs.forEach(function (txOut) {
12486 writeUInt64(txOut.value)
12487 writeVarInt(txOut.script.buffer.length)
12488 writeSlice(txOut.script.buffer)
12491 writeUInt32(this.locktime)
12496 Transaction.prototype.toHex = function () {
12497 return this.toBuffer().toString('hex')
12500 Transaction.prototype.setInputScript = function (index, script) {
12501 typeForce('Number', index)
12502 typeForce('Script', script)
12504 this.ins[index].script = script
12507 // FIXME: remove in
2.x.y
12508 Transaction.prototype.sign = function (index, privKey, hashType) {
12509 console.warn('Transaction.prototype.sign is deprecated. Use TransactionBuilder instead.')
12511 var prevOutScript = privKey.pub.getAddress().toOutputScript()
12512 var signature = this.signInput(index, prevOutScript, privKey, hashType)
12514 var scriptSig = scripts.pubKeyHashInput(signature, privKey.pub)
12515 this.setInputScript(index, scriptSig)
12518 // FIXME: remove in
2.x.y
12519 Transaction.prototype.signInput = function (index, prevOutScript, privKey, hashType) {
12520 console.warn('Transaction.prototype.signInput is deprecated. Use TransactionBuilder instead.')
12522 hashType = hashType || Transaction.SIGHASH_ALL
12524 var hash = this.hashForSignature(index, prevOutScript, hashType)
12525 var signature = privKey.sign(hash)
12527 return signature.toScriptSignature(hashType)
12530 // FIXME: remove in
2.x.y
12531 Transaction.prototype.validateInput = function (index, prevOutScript, pubKey, buffer) {
12532 console.warn('Transaction.prototype.validateInput is deprecated. Use TransactionBuilder instead.')
12534 var parsed = ECSignature.parseScriptSignature(buffer)
12535 var hash = this.hashForSignature(index, prevOutScript, parsed.hashType)
12537 return pubKey.verify(hash, parsed.signature)
12540 module.exports = Transaction
12542 }).call(this,require("buffer").Buffer)
12543 },{"./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){
12544 (function (Buffer){
12545 var assert = require('assert')
12546 var ops = require('./opcodes')
12547 var scripts = require('./scripts')
12549 var ECPubKey = require('./ecpubkey')
12550 var ECSignature = require('./ecsignature')
12551 var Script = require('./script')
12552 var Transaction = require('./transaction')
12554 function extractInput (txIn) {
12556 var scriptSig = txIn.script
12558 var prevOutType = scripts.classifyInput(scriptSig, true)
12561 // Re-classify if scriptHash
12562 if (prevOutType === 'scripthash') {
12563 redeemScript = Script.fromBuffer(scriptSig.chunks.slice(-
1)[
0])
12564 prevOutScript = scripts.scriptHashOutput(redeemScript.getHash())
12566 scriptSig = Script.fromChunks(scriptSig.chunks.slice(
0, -
1))
12567 scriptType = scripts.classifyInput(scriptSig, true)
12569 scriptType = prevOutType
12572 // Extract hashType, pubKeys and signatures
12573 var hashType, parsed, pubKeys, signatures
12575 switch (scriptType) {
12576 case 'pubkeyhash': {
12577 parsed = ECSignature.parseScriptSignature(scriptSig.chunks[
0])
12578 hashType = parsed.hashType
12579 pubKeys = [ECPubKey.fromBuffer(scriptSig.chunks[
1])]
12580 signatures = [parsed.signature]
12581 prevOutScript = pubKeys[
0].getAddress().toOutputScript()
12587 parsed = ECSignature.parseScriptSignature(scriptSig.chunks[
0])
12588 hashType = parsed.hashType
12589 signatures = [parsed.signature]
12591 if (redeemScript) {
12592 pubKeys = [ECPubKey.fromBuffer(redeemScript.chunks[
0])]
12599 signatures = scriptSig.chunks.slice(
1).map(function (chunk) {
12600 if (chunk === ops.OP_0) return chunk
12602 var parsed = ECSignature.parseScriptSignature(chunk)
12603 hashType = parsed.hashType
12605 return parsed.signature
12608 if (redeemScript) {
12609 pubKeys = redeemScript.chunks.slice(
1, -
2).map(ECPubKey.fromBuffer)
12617 hashType: hashType,
12618 prevOutScript: prevOutScript,
12619 prevOutType: prevOutType,
12621 redeemScript: redeemScript,
12622 scriptType: scriptType,
12623 signatures: signatures
12627 function TransactionBuilder () {
12628 this.prevTxMap = {}
12629 this.prevOutScripts = {}
12630 this.prevOutTypes = {}
12633 this.tx = new Transaction()
12636 TransactionBuilder.fromTransaction = function (transaction) {
12637 var txb = new TransactionBuilder()
12639 // Copy other transaction fields
12640 txb.tx.version = transaction.version
12641 txb.tx.locktime = transaction.locktime
12643 // Extract/add inputs
12644 transaction.ins.forEach(function (txIn) {
12645 txb.addInput(txIn.hash, txIn.index, txIn.sequence)
12648 // Extract/add outputs
12649 transaction.outs.forEach(function (txOut) {
12650 txb.addOutput(txOut.script, txOut.value)
12653 // Extract/add signatures
12654 txb.inputs = transaction.ins.map(function (txIn) {
12655 // TODO: remove me after testcase added
12656 assert(!Transaction.isCoinbaseHash(txIn.hash), 'coinbase inputs not supported')
12658 // Ignore empty scripts
12659 if (txIn.script.buffer.length ===
0) return {}
12661 return extractInput(txIn)
12667 TransactionBuilder.prototype.addInput = function (prevTx, index, sequence, prevOutScript) {
12671 if (typeof prevTx === 'string') {
12672 prevOutHash = new Buffer(prevTx, 'hex')
12674 // TxId hex is big-endian, we want little-endian hash
12675 Array.prototype.reverse.call(prevOutHash)
12678 } else if (prevTx instanceof Transaction) {
12679 prevOutHash = prevTx.getHash()
12680 prevOutScript = prevTx.outs[index].script
12684 prevOutHash = prevTx
12688 if (prevOutScript) {
12689 var prevOutType = scripts.classifyOutput(prevOutScript)
12691 // if we can, extract pubKey information
12692 switch (prevOutType) {
12694 input.pubKeys = prevOutScript.chunks.slice(
1, -
2).map(ECPubKey.fromBuffer)
12699 input.pubKeys = prevOutScript.chunks.slice(
0,
1).map(ECPubKey.fromBuffer)
12704 if (prevOutType !== 'scripthash') {
12705 input.scriptType = prevOutType
12708 input.prevOutScript = prevOutScript
12709 input.prevOutType = prevOutType
12712 assert(this.inputs.every(function (input2) {
12713 if (input2.hashType === undefined) return true
12715 return input2.hashType & Transaction.SIGHASH_ANYONECANPAY
12716 }), 'No, this would invalidate signatures')
12718 var prevOut = prevOutHash.toString('hex') + ':' + index
12719 assert(!(prevOut in this.prevTxMap), 'Transaction is already an input')
12721 var vin = this.tx.addInput(prevOutHash, index, sequence)
12722 this.inputs[vin] = input
12723 this.prevTxMap[prevOut] = vin
12728 TransactionBuilder.prototype.addOutput = function (scriptPubKey, value) {
12729 assert(this.inputs.every(function (input) {
12730 if (input.hashType === undefined) return true
12732 return (input.hashType &
0x1f) === Transaction.SIGHASH_SINGLE
12733 }), 'No, this would invalidate signatures')
12735 return this.tx.addOutput(scriptPubKey, value)
12738 TransactionBuilder.prototype.build = function () {
12739 return this.__build(false)
12741 TransactionBuilder.prototype.buildIncomplete = function () {
12742 return this.__build(true)
12745 var canSignTypes = {
12746 'pubkeyhash': true,
12751 TransactionBuilder.prototype.__build = function (allowIncomplete) {
12752 if (!allowIncomplete) {
12753 assert(this.tx.ins.length
> 0, 'Transaction has no inputs')
12754 assert(this.tx.outs.length
> 0, 'Transaction has no outputs')
12757 var tx = this.tx.clone()
12759 // Create script signatures from signature meta-data
12760 this.inputs.forEach(function (input, index) {
12761 var scriptType = input.scriptType
12764 if (!allowIncomplete) {
12765 assert(!!scriptType, 'Transaction is not complete')
12766 assert(scriptType in canSignTypes, scriptType + ' not supported')
12767 assert(input.signatures, 'Transaction is missing signatures')
12770 if (input.signatures) {
12771 switch (scriptType) {
12772 case 'pubkeyhash': {
12773 var pkhSignature = input.signatures[
0].toScriptSignature(input.hashType)
12774 scriptSig = scripts.pubKeyHashInput(pkhSignature, input.pubKeys[
0])
12779 // Array.prototype.map is sparse-compatible
12780 var msSignatures = input.signatures.map(function (signature) {
12781 return signature && signature.toScriptSignature(input.hashType)
12784 // fill in blanks with OP_0
12785 if (allowIncomplete) {
12786 for (var i =
0; i < msSignatures.length; ++i) {
12787 if (msSignatures[i]) continue
12789 msSignatures[i] = ops.OP_0
12792 // Array.prototype.filter returns non-sparse array
12793 msSignatures = msSignatures.filter(function (x) { return x })
12796 var redeemScript = allowIncomplete ? undefined : input.redeemScript
12797 scriptSig = scripts.multisigInput(msSignatures, redeemScript)
12802 var pkSignature = input.signatures[
0].toScriptSignature(input.hashType)
12803 scriptSig = scripts.pubKeyInput(pkSignature)
12809 // did we build a scriptSig?
12811 // wrap as scriptHash if necessary
12812 if (input.prevOutType === 'scripthash') {
12813 scriptSig = scripts.scriptHashInput(scriptSig, input.redeemScript)
12816 tx.setInputScript(index, scriptSig)
12823 TransactionBuilder.prototype.sign = function (index, privKey, redeemScript, hashType) {
12824 assert(index in this.inputs, 'No input at index: ' + index)
12825 hashType = hashType || Transaction.SIGHASH_ALL
12827 var input = this.inputs[index]
12828 var canSign = input.hashType &&
12829 input.prevOutScript &&
12830 input.prevOutType &&
12832 input.scriptType &&
12835 // are we almost ready to sign?
12837 // if redeemScript was provided, enforce consistency
12838 if (redeemScript) {
12839 assert.deepEqual(input.redeemScript, redeemScript, 'Inconsistent redeemScript')
12842 assert.equal(input.hashType, hashType, 'Inconsistent hashType')
12846 // must be pay-to-scriptHash?
12847 if (redeemScript) {
12848 // if we have a prevOutScript, enforce scriptHash equality to the redeemScript
12849 if (input.prevOutScript) {
12850 assert.equal(input.prevOutType, 'scripthash', 'PrevOutScript must be P2SH')
12852 var scriptHash = input.prevOutScript.chunks[
1]
12853 assert.deepEqual(scriptHash, redeemScript.getHash(), 'RedeemScript does not match ' + scriptHash.toString('hex'))
12856 var scriptType = scripts.classifyOutput(redeemScript)
12857 assert(scriptType in canSignTypes, 'RedeemScript not supported (' + scriptType + ')')
12860 switch (scriptType) {
12862 pubKeys = redeemScript.chunks.slice(
1, -
2).map(ECPubKey.fromBuffer)
12866 case 'pubkeyhash': {
12867 var pkh1 = redeemScript.chunks[
2]
12868 var pkh2 = privKey.pub.getAddress().hash
12870 assert.deepEqual(pkh1, pkh2, 'privateKey cannot sign for this input')
12871 pubKeys = [privKey.pub]
12876 pubKeys = redeemScript.chunks.slice(
0,
1).map(ECPubKey.fromBuffer)
12881 if (!input.prevOutScript) {
12882 input.prevOutScript = scripts.scriptHashOutput(redeemScript.getHash())
12883 input.prevOutType = 'scripthash'
12886 input.pubKeys = pubKeys
12887 input.redeemScript = redeemScript
12888 input.scriptType = scriptType
12890 // cannot be pay-to-scriptHash
12892 assert.notEqual(input.prevOutType, 'scripthash', 'PrevOutScript is P2SH, missing redeemScript')
12894 // can we otherwise sign this?
12895 if (input.scriptType) {
12896 assert(input.pubKeys, input.scriptType + ' not supported')
12898 // we know nothin' Jon Snow, assume pubKeyHash
12900 input.prevOutScript = privKey.pub.getAddress().toOutputScript()
12901 input.prevOutType = 'pubkeyhash'
12902 input.pubKeys = [privKey.pub]
12903 input.scriptType = input.prevOutType
12907 input.hashType = hashType
12908 input.signatures = input.signatures || []
12911 var signatureScript = input.redeemScript || input.prevOutScript
12912 var signatureHash = this.tx.hashForSignature(index, signatureScript, hashType)
12914 // enforce signature order matches public keys
12915 if (input.scriptType === 'multisig' && input.redeemScript && input.signatures.length !== input.pubKeys.length) {
12916 // maintain a local copy of unmatched signatures
12917 var unmatched = input.signatures.slice()
12919 input.signatures = input.pubKeys.map(function (pubKey) {
12922 // check for any matching signatures
12923 unmatched.some(function (signature, i) {
12924 if (!pubKey.verify(signatureHash, signature)) return false
12927 // remove matched signature from unmatched
12928 unmatched.splice(i,
1)
12933 return match || undefined
12937 // enforce in order signing of public keys
12938 assert(input.pubKeys.some(function (pubKey, i) {
12939 if (!privKey.pub.Q.equals(pubKey.Q)) return false
12941 assert(!input.signatures[i], 'Signature already exists')
12942 var signature = privKey.sign(signatureHash)
12943 input.signatures[i] = signature
12946 }, this), 'privateKey cannot sign for this input')
12949 module.exports = TransactionBuilder
12951 }).call(this,require(
"buffer").Buffer)
12952 },{
"./ecpubkey":
61,
"./ecsignature":
62,
"./opcodes":
67,
"./script":
68,
"./scripts":
69,
"./transaction":
70,
"assert":
5,
"buffer":
7}],
72:[function(require,module,exports){
12953 (function (Buffer){
12954 var assert = require('assert')
12955 var bufferutils = require('./bufferutils')
12956 var typeForce = require('typeforce')
12957 var networks = require('./networks')
12958 var randomBytes = require('randombytes')
12960 var Address = require('./address')
12961 var HDNode = require('./hdnode')
12962 var TransactionBuilder = require('./transaction_builder')
12963 var Script = require('./script')
12965 function Wallet (seed, network) {
12966 console.warn('Wallet is deprecated and will be removed in
2.0.0, see #
296')
12968 seed = seed || randomBytes(
32)
12969 network = network || networks.bitcoin
12971 // Stored in a closure to make accidental serialization less likely
12972 var masterKey = HDNode.fromSeedBuffer(seed, network)
12974 // HD first-level child derivation method should be hardened
12975 // See https://bitcointalk.org/index.php?topic=
405179.msg4415254#msg4415254
12976 var accountZero = masterKey.deriveHardened(
0)
12977 var externalAccount = accountZero.derive(
0)
12978 var internalAccount = accountZero.derive(
1)
12980 this.addresses = []
12981 this.changeAddresses = []
12982 this.network = network
12985 // FIXME: remove in
2.0.0
12986 this.unspentMap = {}
12988 // FIXME: remove in
2.0.0
12990 this.newMasterKey = function (seed) {
12991 console.warn('newMasterKey is deprecated, please make a new Wallet instance instead')
12993 seed = seed || randomBytes(
32)
12994 masterKey = HDNode.fromSeedBuffer(seed, network)
12996 accountZero = masterKey.deriveHardened(
0)
12997 externalAccount = accountZero.derive(
0)
12998 internalAccount = accountZero.derive(
1)
13001 me.changeAddresses = []
13007 this.getMasterKey = function () {
13010 this.getAccountZero = function () {
13013 this.getExternalAccount = function () {
13014 return externalAccount
13016 this.getInternalAccount = function () {
13017 return internalAccount
13021 Wallet.prototype.createTransaction = function (to, value, options) {
13022 // FIXME: remove in
2.0.0
13023 if (typeof options !== 'object') {
13024 if (options !== undefined) {
13025 console.warn('Non options object parameters are deprecated, use options object instead')
13028 fixedFee: arguments[
2],
13029 changeAddress: arguments[
3]
13034 options = options || {}
13036 assert(value
> this.network.dustThreshold, value + ' must be above dust threshold (' + this.network.dustThreshold + ' Satoshis)')
13038 var changeAddress = options.changeAddress
13039 var fixedFee = options.fixedFee
13040 var minConf = options.minConf === undefined ?
0 : options.minConf // FIXME: change minConf:
1 by default in
2.0.0
13042 // filter by minConf, then pending and sort by descending value
13043 var unspents = this.unspents.filter(function (unspent) {
13044 return unspent.confirmations
>= minConf
13045 }).filter(function (unspent) {
13046 return !unspent.pending
13047 }).sort(function (o1, o2) {
13048 return o2.value - o1.value
13053 var subTotal = value
13055 var txb = new TransactionBuilder()
13056 txb.addOutput(to, value)
13058 for (var i =
0; i < unspents.length; ++i) {
13059 var unspent = unspents[i]
13060 addresses.push(unspent.address)
13062 txb.addInput(unspent.txHash, unspent.index)
13064 var fee = fixedFee === undefined ? estimatePaddedFee(txb.buildIncomplete(), this.network) : fixedFee
13066 accum += unspent.value
13067 subTotal = value + fee
13069 if (accum
>= subTotal) {
13070 var change = accum - subTotal
13072 if (change
> this.network.dustThreshold) {
13073 txb.addOutput(changeAddress || this.getChangeAddress(), change)
13080 assert(accum
>= subTotal, 'Not enough funds (incl. fee): ' + accum + ' < ' + subTotal)
13082 return this.signWith(txb, addresses).build()
13085 // FIXME: remove in
2.0.0
13086 Wallet.prototype.processPendingTx = function (tx) {
13087 this.__processTx(tx, true)
13090 // FIXME: remove in
2.0.0
13091 Wallet.prototype.processConfirmedTx = function (tx) {
13092 this.__processTx(tx, false)
13095 // FIXME: remove in
2.0.0
13096 Wallet.prototype.__processTx = function (tx, isPending) {
13097 console.warn('processTransaction is considered harmful, see issue #
260 for more information')
13099 var txId = tx.getId()
13100 var txHash = tx.getHash()
13102 tx.outs.forEach(function (txOut, i) {
13106 address = Address.fromOutputScript(txOut.script, this.network).toString()
13108 if (!(e.message.match(/has no matching Address/)))
13112 var myAddresses = this.addresses.concat(this.changeAddresses)
13113 if (myAddresses.indexOf(address)
> -
1) {
13114 var lookup = txId + ':' + i
13115 if (lookup in this.unspentMap) return
13117 // its unique, add it
13120 confirmations:
0, // no way to determine this without more information
13124 value: txOut.value,
13128 this.unspentMap[lookup] = unspent
13129 this.unspents.push(unspent)
13133 tx.ins.forEach(function (txIn) {
13134 // copy and convert to big-endian hex
13135 var txInId = bufferutils.reverse(txIn.hash).toString('hex')
13137 var lookup = txInId + ':' + txIn.index
13138 if (!(lookup in this.unspentMap)) return
13140 var unspent = this.unspentMap[lookup]
13143 unspent.pending = true
13144 unspent.spent = true
13146 delete this.unspentMap[lookup]
13148 this.unspents = this.unspents.filter(function (unspent2) {
13149 return unspent !== unspent2
13155 Wallet.prototype.generateAddress = function () {
13156 var k = this.addresses.length
13157 var address = this.getExternalAccount().derive(k).getAddress()
13159 this.addresses.push(address.toString())
13161 return this.getReceiveAddress()
13164 Wallet.prototype.generateChangeAddress = function () {
13165 var k = this.changeAddresses.length
13166 var address = this.getInternalAccount().derive(k).getAddress()
13168 this.changeAddresses.push(address.toString())
13170 return this.getChangeAddress()
13173 Wallet.prototype.getAddress = function () {
13174 if (this.addresses.length ===
0) {
13175 this.generateAddress()
13178 return this.addresses[this.addresses.length -
1]
13181 Wallet.prototype.getBalance = function (minConf) {
13182 minConf = minConf ||
0
13184 return this.unspents.filter(function (unspent) {
13185 return unspent.confirmations
>= minConf
13187 // FIXME: remove spent filter in
2.0.0
13188 }).filter(function (unspent) {
13189 return !unspent.spent
13190 }).reduce(function (accum, unspent) {
13191 return accum + unspent.value
13195 Wallet.prototype.getChangeAddress = function () {
13196 if (this.changeAddresses.length ===
0) {
13197 this.generateChangeAddress()
13200 return this.changeAddresses[this.changeAddresses.length -
1]
13203 Wallet.prototype.getInternalPrivateKey = function (index) {
13204 return this.getInternalAccount().derive(index).privKey
13207 Wallet.prototype.getPrivateKey = function (index) {
13208 return this.getExternalAccount().derive(index).privKey
13211 Wallet.prototype.getPrivateKeyForAddress = function (address) {
13214 if ((index = this.addresses.indexOf(address))
> -
1) {
13215 return this.getPrivateKey(index)
13218 if ((index = this.changeAddresses.indexOf(address))
> -
1) {
13219 return this.getInternalPrivateKey(index)
13222 assert(false, 'Unknown address. Make sure the address is from the keychain and has been generated')
13225 Wallet.prototype.getUnspentOutputs = function (minConf) {
13226 minConf = minConf ||
0
13228 return this.unspents.filter(function (unspent) {
13229 return unspent.confirmations
>= minConf
13231 // FIXME: remove spent filter in
2.0.0
13232 }).filter(function (unspent) {
13233 return !unspent.spent
13234 }).map(function (unspent) {
13236 address: unspent.address,
13237 confirmations: unspent.confirmations,
13238 index: unspent.index,
13239 txId: unspent.txId,
13240 value: unspent.value,
13242 // FIXME: remove in
2.0.0
13243 hash: unspent.txId,
13244 pending: unspent.pending
13249 Wallet.prototype.setUnspentOutputs = function (unspents) {
13250 this.unspentMap = {}
13251 this.unspents = unspents.map(function (unspent) {
13252 // FIXME: remove unspent.hash in
2.0.0
13253 var txId = unspent.txId || unspent.hash
13254 var index = unspent.index
13256 // FIXME: remove in
2.0.0
13257 if (unspent.hash !== undefined) {
13258 console.warn('unspent.hash is deprecated, use unspent.txId instead')
13261 // FIXME: remove in
2.0.0
13262 if (index === undefined) {
13263 console.warn('unspent.outputIndex is deprecated, use unspent.index instead')
13264 index = unspent.outputIndex
13267 typeForce('String', txId)
13268 typeForce('Number', index)
13269 typeForce('Number', unspent.value)
13271 assert.equal(txId.length,
64, 'Expected valid txId, got ' + txId)
13272 assert.doesNotThrow(function () {
13273 Address.fromBase58Check(unspent.address)
13274 }, 'Expected Base58 Address, got ' + unspent.address)
13275 assert(isFinite(index), 'Expected finite index, got ' + index)
13277 // FIXME: remove branch in
2.0.0
13278 if (unspent.confirmations !== undefined) {
13279 typeForce('Number', unspent.confirmations)
13282 var txHash = bufferutils.reverse(new Buffer(txId, 'hex'))
13285 address: unspent.address,
13286 confirmations: unspent.confirmations ||
0,
13290 value: unspent.value,
13292 // FIXME: remove in
2.0.0
13293 pending: unspent.pending || false
13296 // FIXME: remove in
2.0.0
13297 this.unspentMap[txId + ':' + index] = unspent
13303 Wallet.prototype.signWith = function (tx, addresses) {
13304 addresses.forEach(function (address, i) {
13305 var privKey = this.getPrivateKeyForAddress(address)
13307 tx.sign(i, privKey)
13313 function estimatePaddedFee (tx, network) {
13314 var tmpTx = tx.clone()
13315 tmpTx.addOutput(Script.EMPTY, network.dustSoftThreshold ||
0)
13317 return network.estimateFee(tmpTx)
13320 // FIXME:
1.0.0 shims, remove in
2.0.0
13321 Wallet.prototype.getReceiveAddress = Wallet.prototype.getAddress
13322 Wallet.prototype.createTx = Wallet.prototype.createTransaction
13324 module.exports = Wallet
13326 }).call(this,require("buffer").Buffer)
13327 },{"./address":
54,"./bufferutils":
57,"./hdnode":
63,"./networks":
66,"./script":
68,"./transaction_builder":
71,"assert":
5,"buffer":
7,"randombytes":
52,"typeforce":
53}]},{},[
64])(
64)
13329 <script>bitcoin.networks.shadow = {
13330 magicPrefix: '\x19ShadowCash Signed Message:\n',
13332 public:
0xEE80286A,
13333 private:
0xEE8031E8
13340 estimateFee: function() { return "unused in this app" },
13343 bitcoin.networks.shadowtn = {
13344 magicPrefix: '\x19ShadowCash Signed Message:\n',
13346 public:
0x76C0FDFB,
13347 private:
0x76C1077A
13354 estimateFee: function() { return "unused in this app" },
13357 bitcoin.networks.clam = {
13359 public:
0xa8c26d64,
13360 private:
0xa8c17826
13366 bitcoin.networks.dash = {
13368 public:
0x0488b21e,
13369 private:
0x0488ade4
13376 bitcoin.networks.namecoin = {
13378 public:
0x0488b21e,
13379 private:
0x0488ade4
13382 //scriptHash:
0x10,
13386 bitcoin.networks.peercoin = {
13388 public:
0x0488b21e,
13389 private:
0x0488ade4
13392 //scriptHash:
0x10,
13397 <script>// Select components from sjcl to suit the crypto operations bip39 requires.
13401 /** @fileOverview Javascript cryptography implementation.
13403 * Crush to remove comments, shorten variable names and
13404 * generally reduce transmission size.
13406 * @author Emily Stark
13407 * @author Mike Hamburg
13408 * @author Dan Boneh
13412 /*jslint indent:
2, bitwise: false, nomen: false, plusplus: false, white: false, regexp: false */
13413 /*global document, window, escape, unescape, module, require, Uint32Array */
13415 /** @namespace The Stanford Javascript Crypto Library, top-level namespace. */
13417 /** @namespace Symmetric ciphers. */
13420 /** @namespace Hash functions. Right now only SHA256 is implemented. */
13423 /** @namespace Key exchange functions. Right now only SRP is implemented. */
13426 /** @namespace Block cipher modes of operation. */
13429 /** @namespace Miscellaneous. HMAC and PBKDF2. */
13433 * @namespace Bit array encoders and decoders.
13436 * The members of this namespace are functions which translate between
13437 * SJCL's bitArrays and other objects (usually strings). Because it
13438 * isn't always clear which direction is encoding and which is decoding,
13439 * the method names are "fromBits" and "toBits".
13443 /** @namespace Exceptions. */
13445 /** @constructor Ciphertext is corrupt. */
13446 corrupt: function(message) {
13447 this.toString = function() { return "CORRUPT: "+this.message; };
13448 this.message = message;
13451 /** @constructor Invalid parameter. */
13452 invalid: function(message) {
13453 this.toString = function() { return "INVALID: "+this.message; };
13454 this.message = message;
13457 /** @constructor Bug or missing feature in SJCL. @constructor */
13458 bug: function(message) {
13459 this.toString = function() { return "BUG: "+this.message; };
13460 this.message = message;
13463 /** @constructor Something isn't ready. */
13464 notReady: function(message) {
13465 this.toString = function() { return "NOT READY: "+this.message; };
13466 this.message = message;
13471 if(typeof module !== 'undefined' && module.exports){
13472 module.exports = sjcl;
13474 if (typeof define === "function") {
13475 define([], function () {
13483 /** @fileOverview Arrays of bits, encoded as arrays of Numbers.
13485 * @author Emily Stark
13486 * @author Mike Hamburg
13487 * @author Dan Boneh
13490 /** @namespace Arrays of bits, encoded as arrays of Numbers.
13494 * These objects are the currency accepted by SJCL's crypto functions.
13498 * Most of our crypto primitives operate on arrays of
4-byte words internally,
13499 * but many of them can take arguments that are not a multiple of
4 bytes.
13500 * This library encodes arrays of bits (whose size need not be a multiple of
8
13501 * bits) as arrays of
32-bit words. The bits are packed, big-endian, into an
13502 * array of words,
32 bits at a time. Since the words are double-precision
13503 * floating point numbers, they fit some extra data. We use this (in a private,
13504 * possibly-changing manner) to encode the number of bits actually present
13505 * in the last word of the array.
13509 * Because bitwise ops clear this out-of-band data, these arrays can be passed
13510 * to ciphers like AES which want arrays of words.
13515 * Array slices in units of bits.
13516 * @param {bitArray} a The array to slice.
13517 * @param {Number} bstart The offset to the start of the slice, in bits.
13518 * @param {Number} bend The offset to the end of the slice, in bits. If this is undefined,
13519 * slice until the end of the array.
13520 * @return {bitArray} The requested slice.
13522 bitSlice: function (a, bstart, bend) {
13523 a = sjcl.bitArray._shiftRight(a.slice(bstart/
32),
32 - (bstart &
31)).slice(
1);
13524 return (bend === undefined) ? a : sjcl.bitArray.clamp(a, bend-bstart);
13528 * Extract a number packed into a bit array.
13529 * @param {bitArray} a The array to slice.
13530 * @param {Number} bstart The offset to the start of the slice, in bits.
13531 * @param {Number} length The length of the number to extract.
13532 * @return {Number} The requested slice.
13534 extract: function(a, bstart, blength) {
13535 // FIXME: this Math.floor is not necessary at all, but for some reason
13536 // seems to suppress a bug in the Chromium JIT.
13537 var x, sh = Math.floor((-bstart-blength) &
31);
13538 if ((bstart + blength -
1 ^ bstart) & -
32) {
13539 // it crosses a boundary
13540 x = (a[bstart/
32|
0] << (
32 - sh)) ^ (a[bstart/
32+
1|
0]
>>> sh);
13542 // within a single word
13543 x = a[bstart/
32|
0]
>>> sh;
13545 return x & ((
1<
<blength) -
1);
13549 * Concatenate two bit arrays.
13550 * @param {bitArray} a1 The first array.
13551 * @param {bitArray} a2 The second array.
13552 * @return {bitArray} The concatenation of a1 and a2.
13554 concat: function (a1, a2) {
13555 if (a1.length ===
0 || a2.length ===
0) {
13556 return a1.concat(a2);
13559 var last = a1[a1.length-
1], shift = sjcl.bitArray.getPartial(last);
13560 if (shift ===
32) {
13561 return a1.concat(a2);
13563 return sjcl.bitArray._shiftRight(a2, shift, last|
0, a1.slice(
0,a1.length-
1));
13568 * Find the length of an array of bits.
13569 * @param {bitArray} a The array.
13570 * @return {Number} The length of a, in bits.
13572 bitLength: function (a) {
13573 var l = a.length, x;
13574 if (l ===
0) { return
0; }
13576 return (l-
1) *
32 + sjcl.bitArray.getPartial(x);
13580 * Truncate an array.
13581 * @param {bitArray} a The array.
13582 * @param {Number} len The length to truncate to, in bits.
13583 * @return {bitArray} A new array, truncated to len bits.
13585 clamp: function (a, len) {
13586 if (a.length *
32 < len) { return a; }
13587 a = a.slice(
0, Math.ceil(len /
32));
13590 if (l
> 0 && len) {
13591 a[l-
1] = sjcl.bitArray.partial(len, a[l-
1] &
0x80000000 >> (len-
1),
1);
13597 * Make a partial word for a bit array.
13598 * @param {Number} len The number of bits in the word.
13599 * @param {Number} x The bits.
13600 * @param {Number} [
0] _end Pass
1 if x has already been shifted to the high side.
13601 * @return {Number} The partial word.
13603 partial: function (len, x, _end) {
13604 if (len ===
32) { return x; }
13605 return (_end ? x|
0 : x << (
32-len)) + len *
0x10000000000;
13609 * Get the number of bits used by a partial word.
13610 * @param {Number} x The partial word.
13611 * @return {Number} The number of bits used by the partial word.
13613 getPartial: function (x) {
13614 return Math.round(x/
0x10000000000) ||
32;
13618 * Compare two arrays for equality in a predictable amount of time.
13619 * @param {bitArray} a The first array.
13620 * @param {bitArray} b The second array.
13621 * @return {boolean} true if a == b; false otherwise.
13623 equal: function (a, b) {
13624 if (sjcl.bitArray.bitLength(a) !== sjcl.bitArray.bitLength(b)) {
13628 for (i=
0; i
<a.length; i++) {
13634 /** Shift an array right.
13635 * @param {bitArray} a The array to shift.
13636 * @param {Number} shift The number of bits to shift.
13637 * @param {Number} [carry=
0] A byte to carry in
13638 * @param {bitArray} [out=[]] An array to prepend to the output.
13641 _shiftRight: function (a, shift, carry, out) {
13642 var i, last2=
0, shift2;
13643 if (out === undefined) { out = []; }
13645 for (; shift
>=
32; shift -=
32) {
13650 return out.concat(a);
13653 for (i=
0; i
<a.length; i++) {
13654 out.push(carry | a[i]
>>>shift);
13655 carry = a[i] << (
32-shift);
13657 last2 = a.length ? a[a.length-
1] :
0;
13658 shift2 = sjcl.bitArray.getPartial(last2);
13659 out.push(sjcl.bitArray.partial(shift+shift2 &
31, (shift + shift2
> 32) ? carry : out.pop(),
1));
13663 /** xor a block of
4 words together.
13666 _xor4: function(x,y) {
13667 return [x[
0]^y[
0],x[
1]^y[
1],x[
2]^y[
2],x[
3]^y[
3]];
13670 /** byteswap a word array inplace.
13671 * (does not handle partial words)
13672 * @param {sjcl.bitArray} a word array
13673 * @return {sjcl.bitArray} byteswapped array
13675 byteswapM: function(a) {
13676 var i, v, m =
0xff00;
13677 for (i =
0; i < a.length; ++i) {
13679 a[i] = (v
>>> 24) | ((v
>>> 8) & m) | ((v & m) <<
8) | (v <<
24);
13686 //// codecString.js
13688 /** @fileOverview Bit array codec implementations.
13690 * @author Emily Stark
13691 * @author Mike Hamburg
13692 * @author Dan Boneh
13695 /** @namespace UTF-
8 strings */
13696 sjcl.codec.utf8String = {
13697 /** Convert from a bitArray to a UTF-
8 string. */
13698 fromBits: function (arr) {
13699 var out =
"", bl = sjcl.bitArray.bitLength(arr), i, tmp;
13700 for (i=
0; i
<bl/
8; i++) {
13704 out += String.fromCharCode(tmp
>>> 24);
13707 return decodeURIComponent(escape(out));
13710 /** Convert from a UTF-
8 string to a bitArray. */
13711 toBits: function (str) {
13712 str = unescape(encodeURIComponent(str));
13713 var out = [], i, tmp=
0;
13714 for (i=
0; i
<str.length; i++) {
13715 tmp = tmp <<
8 | str.charCodeAt(i);
13722 out.push(sjcl.bitArray.partial(
8*(i&
3), tmp));
13731 /** @fileOverview Bit array codec implementations.
13733 * @author Emily Stark
13734 * @author Mike Hamburg
13735 * @author Dan Boneh
13738 /** @namespace Hexadecimal */
13740 /** Convert from a bitArray to a hex string. */
13741 fromBits: function (arr) {
13743 for (i=
0; i
<arr.length; i++) {
13744 out += ((arr[i]|
0)+
0xF00000000000).toString(
16).substr(
4);
13746 return out.substr(
0, sjcl.bitArray.bitLength(arr)/
4);//.replace(/(.{
8})/g,
"$1 ");
13748 /** Convert from a hex string to a bitArray. */
13749 toBits: function (str) {
13750 var i, out=[], len;
13751 str = str.replace(/\s|
0x/g,
"");
13753 str = str +
"00000000";
13754 for (i=
0; i
<str.length; i+=
8) {
13755 out.push(parseInt(str.substr(i,
8),
16)^
0);
13757 return sjcl.bitArray.clamp(out, len*
4);
13764 /** @fileOverview Javascript SHA-
512 implementation.
13766 * This implementation was written for CryptoJS by Jeff Mott and adapted for
13767 * SJCL by Stefan Thomas.
13769 * CryptoJS (c)
2009–
2012 by Jeff Mott. All rights reserved.
13770 * Released with New BSD License
13772 * @author Emily Stark
13773 * @author Mike Hamburg
13774 * @author Dan Boneh
13775 * @author Jeff Mott
13776 * @author Stefan Thomas
13780 * Context for a SHA-
512 operation in progress.
13782 * @class Secure Hash Algorithm,
512 bits.
13784 sjcl.hash.sha512 = function (hash) {
13785 if (!this._key[
0]) { this._precompute(); }
13787 this._h = hash._h.slice(
0);
13788 this._buffer = hash._buffer.slice(
0);
13789 this._length = hash._length;
13796 * Hash a string or an array of words.
13798 * @param {bitArray|String} data the data to hash.
13799 * @return {bitArray} The hash value, an array of
16 big-endian words.
13801 sjcl.hash.sha512.hash = function (data) {
13802 return (new sjcl.hash.sha512()).update(data).finalize();
13805 sjcl.hash.sha512.prototype = {
13807 * The hash's block size, in bits.
13813 * Reset the hash state.
13816 reset:function () {
13817 this._h = this._init.slice(
0);
13824 * Input several words to the hash.
13825 * @param {bitArray|String} data the data to hash.
13828 update: function (data) {
13829 if (typeof data ===
"string") {
13830 data = sjcl.codec.utf8String.toBits(data);
13832 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
13834 nl = this._length = ol + sjcl.bitArray.bitLength(data);
13835 for (i =
1024+ol & -
1024; i <= nl; i+=
1024) {
13836 this._block(b.splice(
0,
32));
13842 * Complete hashing and output the hash value.
13843 * @return {bitArray} The hash value, an array of
16 big-endian words.
13845 finalize:function () {
13846 var i, b = this._buffer, h = this._h;
13848 // Round out and push the buffer
13849 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(
1,
1)]);
13851 // Round out the buffer to a multiple of
32 words, less the
4 length words.
13852 for (i = b.length +
4; i &
31; i++) {
13856 // append the length
13859 b.push(Math.floor(this._length /
0x100000000));
13860 b.push(this._length |
0);
13863 this._block(b.splice(
0,
32));
13871 * The SHA-
512 initialization vector, to be precomputed.
13877 * Least significant
24 bits of SHA512 initialization values.
13879 * Javascript only has
53 bits of precision, so we compute the
40 most
13880 * significant bits and add the remaining
24 bits as constants.
13884 _initr: [
0xbcc908,
0xcaa73b,
0x94f82b,
0x1d36f1,
0xe682d1,
0x3e6c1f,
0x41bd6b,
0x7e2179 ],
13888 [
0x6a09e667,
0xf3bcc908,
0xbb67ae85,
0x84caa73b,
0x3c6ef372,
0xfe94f82b,
0xa54ff53a,
0x5f1d36f1,
13889 0x510e527f,
0xade682d1,
0x9b05688c,
0x2b3e6c1f,
0x1f83d9ab,
0xfb41bd6b,
0x5be0cd19,
0x137e2179],
13893 * The SHA-
512 hash key, to be precomputed.
13899 * Least significant
24 bits of SHA512 key values.
13903 [
0x28ae22,
0xef65cd,
0x4d3b2f,
0x89dbbc,
0x48b538,
0x05d019,
0x194f9b,
0x6d8118,
13904 0x030242,
0x706fbe,
0xe4b28c,
0xffb4e2,
0x7b896f,
0x1696b1,
0xc71235,
0x692694,
13905 0xf14ad2,
0x4f25e3,
0x8cd5b5,
0xac9c65,
0x2b0275,
0xa6e483,
0x41fbd4,
0x1153b5,
13906 0x66dfab,
0xb43210,
0xfb213f,
0xef0ee4,
0xa88fc2,
0x0aa725,
0x03826f,
0x0e6e70,
13907 0xd22ffc,
0x26c926,
0xc42aed,
0x95b3df,
0xaf63de,
0x77b2a8,
0xedaee6,
0x82353b,
13908 0xf10364,
0x423001,
0xf89791,
0x54be30,
0xef5218,
0x65a910,
0x71202a,
0xbbd1b8,
13909 0xd2d0c8,
0x41ab53,
0x8eeb99,
0x9b48a8,
0xc95a63,
0x418acb,
0x63e373,
0xb2b8a3,
13910 0xefb2fc,
0x172f60,
0xf0ab72,
0x6439ec,
0x631e28,
0x82bde9,
0xc67915,
0x72532b,
13911 0x26619c,
0xc0c207,
0xe0eb1e,
0x6ed178,
0x176fba,
0xc898a6,
0xf90dae,
0x1c471b,
13912 0x047d84,
0xc72493,
0xc9bebc,
0x100d4c,
0x3e42b6,
0x657e2a,
0xd6faec,
0x475817],
13916 [
0x428a2f98,
0xd728ae22,
0x71374491,
0x23ef65cd,
0xb5c0fbcf,
0xec4d3b2f,
0xe9b5dba5,
0x8189dbbc,
13917 0x3956c25b,
0xf348b538,
0x59f111f1,
0xb605d019,
0x923f82a4,
0xaf194f9b,
0xab1c5ed5,
0xda6d8118,
13918 0xd807aa98,
0xa3030242,
0x12835b01,
0x45706fbe,
0x243185be,
0x4ee4b28c,
0x550c7dc3,
0xd5ffb4e2,
13919 0x72be5d74,
0xf27b896f,
0x80deb1fe,
0x3b1696b1,
0x9bdc06a7,
0x25c71235,
0xc19bf174,
0xcf692694,
13920 0xe49b69c1,
0x9ef14ad2,
0xefbe4786,
0x384f25e3,
0x0fc19dc6,
0x8b8cd5b5,
0x240ca1cc,
0x77ac9c65,
13921 0x2de92c6f,
0x592b0275,
0x4a7484aa,
0x6ea6e483,
0x5cb0a9dc,
0xbd41fbd4,
0x76f988da,
0x831153b5,
13922 0x983e5152,
0xee66dfab,
0xa831c66d,
0x2db43210,
0xb00327c8,
0x98fb213f,
0xbf597fc7,
0xbeef0ee4,
13923 0xc6e00bf3,
0x3da88fc2,
0xd5a79147,
0x930aa725,
0x06ca6351,
0xe003826f,
0x14292967,
0x0a0e6e70,
13924 0x27b70a85,
0x46d22ffc,
0x2e1b2138,
0x5c26c926,
0x4d2c6dfc,
0x5ac42aed,
0x53380d13,
0x9d95b3df,
13925 0x650a7354,
0x8baf63de,
0x766a0abb,
0x3c77b2a8,
0x81c2c92e,
0x47edaee6,
0x92722c85,
0x1482353b,
13926 0xa2bfe8a1,
0x4cf10364,
0xa81a664b,
0xbc423001,
0xc24b8b70,
0xd0f89791,
0xc76c51a3,
0x0654be30,
13927 0xd192e819,
0xd6ef5218,
0xd6990624,
0x5565a910,
0xf40e3585,
0x5771202a,
0x106aa070,
0x32bbd1b8,
13928 0x19a4c116,
0xb8d2d0c8,
0x1e376c08,
0x5141ab53,
0x2748774c,
0xdf8eeb99,
0x34b0bcb5,
0xe19b48a8,
13929 0x391c0cb3,
0xc5c95a63,
0x4ed8aa4a,
0xe3418acb,
0x5b9cca4f,
0x7763e373,
0x682e6ff3,
0xd6b2b8a3,
13930 0x748f82ee,
0x5defb2fc,
0x78a5636f,
0x43172f60,
0x84c87814,
0xa1f0ab72,
0x8cc70208,
0x1a6439ec,
13931 0x90befffa,
0x23631e28,
0xa4506ceb,
0xde82bde9,
0xbef9a3f7,
0xb2c67915,
0xc67178f2,
0xe372532b,
13932 0xca273ece,
0xea26619c,
0xd186b8c7,
0x21c0c207,
0xeada7dd6,
0xcde0eb1e,
0xf57d4f7f,
0xee6ed178,
13933 0x06f067aa,
0x72176fba,
0x0a637dc5,
0xa2c898a6,
0x113f9804,
0xbef90dae,
0x1b710b35,
0x131c471b,
13934 0x28db77f5,
0x23047d84,
0x32caab7b,
0x40c72493,
0x3c9ebe0a,
0x15c9bebc,
0x431d67c4,
0x9c100d4c,
13935 0x4cc5d4be,
0xcb3e42b6,
0x597f299c,
0xfc657e2a,
0x5fcb6fab,
0x3ad6faec,
0x6c44198c,
0x4a475817],
13939 * Function to precompute _init and _key.
13942 _precompute: function () {
13943 // XXX: This code is for precomputing the SHA256 constants, change for
13944 // SHA512 and re-enable.
13945 var i =
0, prime =
2, factor;
13947 function frac(x) { return (x-Math.floor(x)) *
0x100000000 |
0; }
13948 function frac2(x) { return (x-Math.floor(x)) *
0x10000000000 &
0xff; }
13950 outer: for (; i
<80; prime++) {
13951 for (factor=
2; factor*factor <= prime; factor++) {
13952 if (prime % factor ===
0) {
13959 this._init[i*
2] = frac(Math.pow(prime,
1/
2));
13960 this._init[i*
2+
1] = (frac2(Math.pow(prime,
1/
2)) <<
24) | this._initr[i];
13962 this._key[i*
2] = frac(Math.pow(prime,
1/
3));
13963 this._key[i*
2+
1] = (frac2(Math.pow(prime,
1/
3)) <<
24) | this._keyr[i];
13969 * Perform one cycle of SHA-
512.
13970 * @param {bitArray} words one block of words.
13973 _block:function (words) {
13975 w = words.slice(
0),
13978 h0h = h[
0], h0l = h[
1], h1h = h[
2], h1l = h[
3],
13979 h2h = h[
4], h2l = h[
5], h3h = h[
6], h3l = h[
7],
13980 h4h = h[
8], h4l = h[
9], h5h = h[
10], h5l = h[
11],
13981 h6h = h[
12], h6l = h[
13], h7h = h[
14], h7l = h[
15];
13983 // Working variables
13984 var ah = h0h, al = h0l, bh = h1h, bl = h1l,
13985 ch = h2h, cl = h2l, dh = h3h, dl = h3l,
13986 eh = h4h, el = h4l, fh = h5h, fl = h5l,
13987 gh = h6h, gl = h6l, hh = h7h, hl = h7l;
13989 for (i=
0; i
<80; i++) {
13990 // load up the input word for this round
13993 wrl = w[i *
2 +
1];
13996 var gamma0xh = w[(i-
15) *
2];
13997 var gamma0xl = w[(i-
15) *
2 +
1];
13999 ((gamma0xl <<
31) | (gamma0xh
>>> 1)) ^
14000 ((gamma0xl <<
24) | (gamma0xh
>>> 8)) ^
14003 ((gamma0xh <<
31) | (gamma0xl
>>> 1)) ^
14004 ((gamma0xh <<
24) | (gamma0xl
>>> 8)) ^
14005 ((gamma0xh <<
25) | (gamma0xl
>>> 7));
14008 var gamma1xh = w[(i-
2) *
2];
14009 var gamma1xl = w[(i-
2) *
2 +
1];
14011 ((gamma1xl <<
13) | (gamma1xh
>>> 19)) ^
14012 ((gamma1xh <<
3) | (gamma1xl
>>> 29)) ^
14015 ((gamma1xh <<
13) | (gamma1xl
>>> 19)) ^
14016 ((gamma1xl <<
3) | (gamma1xh
>>> 29)) ^
14017 ((gamma1xh <<
26) | (gamma1xl
>>> 6));
14020 var wr7h = w[(i-
7) *
2];
14021 var wr7l = w[(i-
7) *
2 +
1];
14023 var wr16h = w[(i-
16) *
2];
14024 var wr16l = w[(i-
16) *
2 +
1];
14026 // W(round) = gamma0 + W(round -
7) + gamma1 + W(round -
16)
14027 wrl = gamma0l + wr7l;
14028 wrh = gamma0h + wr7h + ((wrl
>>> 0) < (gamma0l
>>> 0) ?
1 :
0);
14030 wrh += gamma1h + ((wrl
>>> 0) < (gamma1l
>>> 0) ?
1 :
0);
14032 wrh += wr16h + ((wrl
>>> 0) < (wr16l
>>> 0) ?
1 :
0);
14036 w[i*
2 +
1] = wrl |=
0;
14039 var chh = (eh & fh) ^ (~eh & gh);
14040 var chl = (el & fl) ^ (~el & gl);
14043 var majh = (ah & bh) ^ (ah & ch) ^ (bh & ch);
14044 var majl = (al & bl) ^ (al & cl) ^ (bl & cl);
14047 var sigma0h = ((al <<
4) | (ah
>>> 28)) ^ ((ah <<
30) | (al
>>> 2)) ^ ((ah <<
25) | (al
>>> 7));
14048 var sigma0l = ((ah <<
4) | (al
>>> 28)) ^ ((al <<
30) | (ah
>>> 2)) ^ ((al <<
25) | (ah
>>> 7));
14051 var sigma1h = ((el <<
18) | (eh
>>> 14)) ^ ((el <<
14) | (eh
>>> 18)) ^ ((eh <<
23) | (el
>>> 9));
14052 var sigma1l = ((eh <<
18) | (el
>>> 14)) ^ ((eh <<
14) | (el
>>> 18)) ^ ((el <<
23) | (eh
>>> 9));
14056 var krl = k[i*
2+
1];
14058 // t1 = h + sigma1 + ch + K(round) + W(round)
14059 var t1l = hl + sigma1l;
14060 var t1h = hh + sigma1h + ((t1l
>>> 0) < (hl
>>> 0) ?
1 :
0);
14062 t1h += chh + ((t1l
>>> 0) < (chl
>>> 0) ?
1 :
0);
14064 t1h += krh + ((t1l
>>> 0) < (krl
>>> 0) ?
1 :
0);
14065 t1l = t1l + wrl|
0; // FF32..FF34 perf issue https://bugzilla.mozilla.org/show_bug.cgi?id=
1054972
14066 t1h += wrh + ((t1l
>>> 0) < (wrl
>>> 0) ?
1 :
0);
14068 // t2 = sigma0 + maj
14069 var t2l = sigma0l + majl;
14070 var t2h = sigma0h + majh + ((t2l
>>> 0) < (sigma0l
>>> 0) ?
1 :
0);
14072 // Update working variables
14079 el = (dl + t1l) |
0;
14080 eh = (dh + t1h + ((el
>>> 0) < (dl
>>> 0) ?
1 :
0)) |
0;
14087 al = (t1l + t2l) |
0;
14088 ah = (t1h + t2h + ((al
>>> 0) < (t1l
>>> 0) ?
1 :
0)) |
0;
14091 // Intermediate hash
14092 h0l = h[
1] = (h0l + al) |
0;
14093 h[
0] = (h0h + ah + ((h0l
>>> 0) < (al
>>> 0) ?
1 :
0)) |
0;
14094 h1l = h[
3] = (h1l + bl) |
0;
14095 h[
2] = (h1h + bh + ((h1l
>>> 0) < (bl
>>> 0) ?
1 :
0)) |
0;
14096 h2l = h[
5] = (h2l + cl) |
0;
14097 h[
4] = (h2h + ch + ((h2l
>>> 0) < (cl
>>> 0) ?
1 :
0)) |
0;
14098 h3l = h[
7] = (h3l + dl) |
0;
14099 h[
6] = (h3h + dh + ((h3l
>>> 0) < (dl
>>> 0) ?
1 :
0)) |
0;
14100 h4l = h[
9] = (h4l + el) |
0;
14101 h[
8] = (h4h + eh + ((h4l
>>> 0) < (el
>>> 0) ?
1 :
0)) |
0;
14102 h5l = h[
11] = (h5l + fl) |
0;
14103 h[
10] = (h5h + fh + ((h5l
>>> 0) < (fl
>>> 0) ?
1 :
0)) |
0;
14104 h6l = h[
13] = (h6l + gl) |
0;
14105 h[
12] = (h6h + gh + ((h6l
>>> 0) < (gl
>>> 0) ?
1 :
0)) |
0;
14106 h7l = h[
15] = (h7l + hl) |
0;
14107 h[
14] = (h7h + hh + ((h7l
>>> 0) < (hl
>>> 0) ?
1 :
0)) |
0;
14114 /** @fileOverview HMAC implementation.
14116 * @author Emily Stark
14117 * @author Mike Hamburg
14118 * @author Dan Boneh
14121 /** HMAC with the specified hash function.
14123 * @param {bitArray} key the key for HMAC.
14124 * @param {Object} [hash=sjcl.hash.sha256] The hash function to use.
14126 sjcl.misc.hmac = function (key, Hash) {
14127 this._hash = Hash = Hash || sjcl.hash.sha256;
14128 var exKey = [[],[]], i,
14129 bs = Hash.prototype.blockSize /
32;
14130 this._baseHash = [new Hash(), new Hash()];
14132 if (key.length
> bs) {
14133 key = Hash.hash(key);
14136 for (i=
0; i
<bs; i++) {
14137 exKey[
0][i] = key[i]^
0x36363636;
14138 exKey[
1][i] = key[i]^
0x5C5C5C5C;
14141 this._baseHash[
0].update(exKey[
0]);
14142 this._baseHash[
1].update(exKey[
1]);
14143 this._resultHash = new Hash(this._baseHash[
0]);
14146 /** HMAC with the specified hash function. Also called encrypt since it's a prf.
14147 * @param {bitArray|String} data The data to mac.
14149 sjcl.misc.hmac.prototype.encrypt = sjcl.misc.hmac.prototype.mac = function (data) {
14150 if (!this._updated) {
14152 return this.digest(data);
14154 throw new sjcl.exception.invalid(
"encrypt on already updated hmac called!");
14158 sjcl.misc.hmac.prototype.reset = function () {
14159 this._resultHash = new this._hash(this._baseHash[
0]);
14160 this._updated = false;
14163 sjcl.misc.hmac.prototype.update = function (data) {
14164 this._updated = true;
14165 this._resultHash.update(data);
14168 sjcl.misc.hmac.prototype.digest = function () {
14169 var w = this._resultHash.finalize(), result = new (this._hash)(this._baseHash[
1]).update(w).finalize();
14180 /** @fileOverview Password-based key-derivation function, version
2.0.
14182 * @author Emily Stark
14183 * @author Mike Hamburg
14184 * @author Dan Boneh
14187 /** Password-Based Key-Derivation Function, version
2.0.
14189 * Generate keys from passwords using PBKDF2-HMAC-SHA256.
14191 * This is the method specified by RSA's PKCS #
5 standard.
14193 * @param {bitArray|String} password The password.
14194 * @param {bitArray|String} salt The salt. Should have lots of entropy.
14195 * @param {Number} [count=
1000] The number of iterations. Higher numbers make the function slower but more secure.
14196 * @param {Number} [length] The length of the derived key. Defaults to the
14197 output size of the hash function.
14198 * @param {Object} [Prff=sjcl.misc.hmac] The pseudorandom function family.
14199 * @return {bitArray} the derived key.
14201 sjcl.misc.pbkdf2 = function (password, salt, count, length, Prff) {
14202 count = count ||
1000;
14204 if (length <
0 || count <
0) {
14205 throw sjcl.exception.invalid(
"invalid params to pbkdf2");
14208 if (typeof password ===
"string") {
14209 password = sjcl.codec.utf8String.toBits(password);
14212 if (typeof salt ===
"string") {
14213 salt = sjcl.codec.utf8String.toBits(salt);
14216 Prff = Prff || sjcl.misc.hmac;
14218 var prf = new Prff(password),
14219 u, ui, i, j, k, out = [], b = sjcl.bitArray;
14221 for (k =
1;
32 * out.length < (length ||
1); k++) {
14222 u = ui = prf.encrypt(b.concat(salt,[k]));
14224 for (i=
1; i
<count; i++) {
14225 ui = prf.encrypt(ui);
14226 for (j=
0; j
<ui.length; j++) {
14231 out = out.concat(u);
14234 if (length) { out = b.clamp(out, length); }
14242 /** @fileOverview Javascript SHA-
256 implementation.
14244 * An older version of this implementation is available in the public
14245 * domain, but this one is (c) Emily Stark, Mike Hamburg, Dan Boneh,
14246 * Stanford University
2008-
2010 and BSD-licensed for liability
14249 * Special thanks to Aldo Cortesi for pointing out several bugs in
14252 * @author Emily Stark
14253 * @author Mike Hamburg
14254 * @author Dan Boneh
14258 * Context for a SHA-
256 operation in progress.
14260 * @class Secure Hash Algorithm,
256 bits.
14262 sjcl.hash.sha256 = function (hash) {
14263 if (!this._key[
0]) { this._precompute(); }
14265 this._h = hash._h.slice(
0);
14266 this._buffer = hash._buffer.slice(
0);
14267 this._length = hash._length;
14274 * Hash a string or an array of words.
14276 * @param {bitArray|String} data the data to hash.
14277 * @return {bitArray} The hash value, an array of
16 big-endian words.
14279 sjcl.hash.sha256.hash = function (data) {
14280 return (new sjcl.hash.sha256()).update(data).finalize();
14283 sjcl.hash.sha256.prototype = {
14285 * The hash's block size, in bits.
14291 * Reset the hash state.
14294 reset:function () {
14295 this._h = this._init.slice(
0);
14302 * Input several words to the hash.
14303 * @param {bitArray|String} data the data to hash.
14306 update: function (data) {
14307 if (typeof data ===
"string") {
14308 data = sjcl.codec.utf8String.toBits(data);
14310 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
14312 nl = this._length = ol + sjcl.bitArray.bitLength(data);
14313 for (i =
512+ol & -
512; i <= nl; i+=
512) {
14314 this._block(b.splice(
0,
16));
14320 * Complete hashing and output the hash value.
14321 * @return {bitArray} The hash value, an array of
8 big-endian words.
14323 finalize:function () {
14324 var i, b = this._buffer, h = this._h;
14326 // Round out and push the buffer
14327 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(
1,
1)]);
14329 // Round out the buffer to a multiple of
16 words, less the
2 length words.
14330 for (i = b.length +
2; i &
15; i++) {
14334 // append the length
14335 b.push(Math.floor(this._length /
0x100000000));
14336 b.push(this._length |
0);
14339 this._block(b.splice(
0,
16));
14347 * The SHA-
256 initialization vector, to be precomputed.
14352 _init:[
0x6a09e667,
0xbb67ae85,
0x3c6ef372,
0xa54ff53a,
0x510e527f,
0x9b05688c,
0x1f83d9ab,
0x5be0cd19],
14356 * The SHA-
256 hash key, to be precomputed.
14362 [
0x428a2f98,
0x71374491,
0xb5c0fbcf,
0xe9b5dba5,
0x3956c25b,
0x59f111f1,
0x923f82a4,
0xab1c5ed5,
14363 0xd807aa98,
0x12835b01,
0x243185be,
0x550c7dc3,
0x72be5d74,
0x80deb1fe,
0x9bdc06a7,
0xc19bf174,
14364 0xe49b69c1,
0xefbe4786,
0x0fc19dc6,
0x240ca1cc,
0x2de92c6f,
0x4a7484aa,
0x5cb0a9dc,
0x76f988da,
14365 0x983e5152,
0xa831c66d,
0xb00327c8,
0xbf597fc7,
0xc6e00bf3,
0xd5a79147,
0x06ca6351,
0x14292967,
14366 0x27b70a85,
0x2e1b2138,
0x4d2c6dfc,
0x53380d13,
0x650a7354,
0x766a0abb,
0x81c2c92e,
0x92722c85,
14367 0xa2bfe8a1,
0xa81a664b,
0xc24b8b70,
0xc76c51a3,
0xd192e819,
0xd6990624,
0xf40e3585,
0x106aa070,
14368 0x19a4c116,
0x1e376c08,
0x2748774c,
0x34b0bcb5,
0x391c0cb3,
0x4ed8aa4a,
0x5b9cca4f,
0x682e6ff3,
14369 0x748f82ee,
0x78a5636f,
0x84c87814,
0x8cc70208,
0x90befffa,
0xa4506ceb,
0xbef9a3f7,
0xc67178f2],
14374 * Function to precompute _init and _key.
14377 _precompute: function () {
14378 var i =
0, prime =
2, factor;
14380 function frac(x) { return (x-Math.floor(x)) *
0x100000000 |
0; }
14382 outer: for (; i
<64; prime++) {
14383 for (factor=
2; factor*factor <= prime; factor++) {
14384 if (prime % factor ===
0) {
14391 this._init[i] = frac(Math.pow(prime,
1/
2));
14393 this._key[i] = frac(Math.pow(prime,
1/
3));
14399 * Perform one cycle of SHA-
256.
14400 * @param {bitArray} words one block of words.
14403 _block:function (words) {
14405 w = words.slice(
0),
14408 h0 = h[
0], h1 = h[
1], h2 = h[
2], h3 = h[
3],
14409 h4 = h[
4], h5 = h[
5], h6 = h[
6], h7 = h[
7];
14411 /* Rationale for placement of |
0 :
14412 * If a value can overflow is original
32 bits by a factor of more than a few
14413 * million (
2^
23 ish), there is a possibility that it might overflow the
14414 *
53-bit mantissa and lose precision.
14416 * To avoid this, we clamp back to
32 bits by |'ing with
0 on any value that
14417 * propagates around the loop, and on the hash state h[]. I don't believe
14418 * that the clamps on h4 and on h0 are strictly necessary, but it's close
14419 * (for h4 anyway), and better safe than sorry.
14421 * The clamps on h[] are necessary for the output to be correct even in the
14422 * common case and for short inputs.
14424 for (i=
0; i
<64; i++) {
14425 // load up the input word for this round
14429 a = w[(i+
1 ) &
15];
14430 b = w[(i+
14) &
15];
14431 tmp = w[i&
15] = ((a
>>>7 ^ a
>>>18 ^ a
>>>3 ^ a<
<25 ^ a<
<14) +
14432 (b
>>>17 ^ b
>>>19 ^ b
>>>10 ^ b<
<15 ^ b<
<13) +
14433 w[i&
15] + w[(i+
9) &
15]) |
0;
14436 tmp = (tmp + h7 + (h4
>>>6 ^ h4
>>>11 ^ h4
>>>25 ^ h4<
<26 ^ h4<
<21 ^ h4<
<7) + (h6 ^ h4&(h5^h6)) + k[i]); // |
0;
14439 h7 = h6; h6 = h5; h5 = h4;
14441 h3 = h2; h2 = h1; h1 = h0;
14443 h0 = (tmp + ((h1&h2) ^ (h3&(h1^h2))) + (h1
>>>2 ^ h1
>>>13 ^ h1
>>>22 ^ h1<
<30 ^ h1<
<19 ^ h1<
<10)) |
0;
14446 h[
0] = h[
0]+h0 |
0;
14447 h[
1] = h[
1]+h1 |
0;
14448 h[
2] = h[
2]+h2 |
0;
14449 h[
3] = h[
3]+h3 |
0;
14450 h[
4] = h[
4]+h4 |
0;
14451 h[
5] = h[
5]+h5 |
0;
14452 h[
6] = h[
6]+h6 |
0;
14453 h[
7] = h[
7]+h7 |
0;
14457 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
14458 WORDLISTS["english"] = [
14459 "abandon","ability","able","about","above","absent","absorb","abstract","absurd","abuse",
14460 "access","accident","account","accuse","achieve","acid","acoustic","acquire","across","act",
14461 "action","actor","actress","actual","adapt","add","addict","address","adjust","admit",
14462 "adult","advance","advice","aerobic","affair","afford","afraid","again","age","agent",
14463 "agree","ahead","aim","air","airport","aisle","alarm","album","alcohol","alert",
14464 "alien","all","alley","allow","almost","alone","alpha","already","also","alter",
14465 "always","amateur","amazing","among","amount","amused","analyst","anchor","ancient","anger",
14466 "angle","angry","animal","ankle","announce","annual","another","answer","antenna","antique",
14467 "anxiety","any","apart","apology","appear","apple","approve","april","arch","arctic",
14468 "area","arena","argue","arm","armed","armor","army","around","arrange","arrest",
14469 "arrive","arrow","art","artefact","artist","artwork","ask","aspect","assault","asset",
14470 "assist","assume","asthma","athlete","atom","attack","attend","attitude","attract","auction",
14471 "audit","august","aunt","author","auto","autumn","average","avocado","avoid","awake",
14472 "aware","away","awesome","awful","awkward","axis","baby","bachelor","bacon","badge",
14473 "bag","balance","balcony","ball","bamboo","banana","banner","bar","barely","bargain",
14474 "barrel","base","basic","basket","battle","beach","bean","beauty","because","become",
14475 "beef","before","begin","behave","behind","believe","below","belt","bench","benefit",
14476 "best","betray","better","between","beyond","bicycle","bid","bike","bind","biology",
14477 "bird","birth","bitter","black","blade","blame","blanket","blast","bleak","bless",
14478 "blind","blood","blossom","blouse","blue","blur","blush","board","boat","body",
14479 "boil","bomb","bone","bonus","book","boost","border","boring","borrow","boss",
14480 "bottom","bounce","box","boy","bracket","brain","brand","brass","brave","bread",
14481 "breeze","brick","bridge","brief","bright","bring","brisk","broccoli","broken","bronze",
14482 "broom","brother","brown","brush","bubble","buddy","budget","buffalo","build","bulb",
14483 "bulk","bullet","bundle","bunker","burden","burger","burst","bus","business","busy",
14484 "butter","buyer","buzz","cabbage","cabin","cable","cactus","cage","cake","call",
14485 "calm","camera","camp","can","canal","cancel","candy","cannon","canoe","canvas",
14486 "canyon","capable","capital","captain","car","carbon","card","cargo","carpet","carry",
14487 "cart","case","cash","casino","castle","casual","cat","catalog","catch","category",
14488 "cattle","caught","cause","caution","cave","ceiling","celery","cement","census","century",
14489 "cereal","certain","chair","chalk","champion","change","chaos","chapter","charge","chase",
14490 "chat","cheap","check","cheese","chef","cherry","chest","chicken","chief","child",
14491 "chimney","choice","choose","chronic","chuckle","chunk","churn","cigar","cinnamon","circle",
14492 "citizen","city","civil","claim","clap","clarify","claw","clay","clean","clerk",
14493 "clever","click","client","cliff","climb","clinic","clip","clock","clog","close",
14494 "cloth","cloud","clown","club","clump","cluster","clutch","coach","coast","coconut",
14495 "code","coffee","coil","coin","collect","color","column","combine","come","comfort",
14496 "comic","common","company","concert","conduct","confirm","congress","connect","consider","control",
14497 "convince","cook","cool","copper","copy","coral","core","corn","correct","cost",
14498 "cotton","couch","country","couple","course","cousin","cover","coyote","crack","cradle",
14499 "craft","cram","crane","crash","crater","crawl","crazy","cream","credit","creek",
14500 "crew","cricket","crime","crisp","critic","crop","cross","crouch","crowd","crucial",
14501 "cruel","cruise","crumble","crunch","crush","cry","crystal","cube","culture","cup",
14502 "cupboard","curious","current","curtain","curve","cushion","custom","cute","cycle","dad",
14503 "damage","damp","dance","danger","daring","dash","daughter","dawn","day","deal",
14504 "debate","debris","decade","december","decide","decline","decorate","decrease","deer","defense",
14505 "define","defy","degree","delay","deliver","demand","demise","denial","dentist","deny",
14506 "depart","depend","deposit","depth","deputy","derive","describe","desert","design","desk",
14507 "despair","destroy","detail","detect","develop","device","devote","diagram","dial","diamond",
14508 "diary","dice","diesel","diet","differ","digital","dignity","dilemma","dinner","dinosaur",
14509 "direct","dirt","disagree","discover","disease","dish","dismiss","disorder","display","distance",
14510 "divert","divide","divorce","dizzy","doctor","document","dog","doll","dolphin","domain",
14511 "donate","donkey","donor","door","dose","double","dove","draft","dragon","drama",
14512 "drastic","draw","dream","dress","drift","drill","drink","drip","drive","drop",
14513 "drum","dry","duck","dumb","dune","during","dust","dutch","duty","dwarf",
14514 "dynamic","eager","eagle","early","earn","earth","easily","east","easy","echo",
14515 "ecology","economy","edge","edit","educate","effort","egg","eight","either","elbow",
14516 "elder","electric","elegant","element","elephant","elevator","elite","else","embark","embody",
14517 "embrace","emerge","emotion","employ","empower","empty","enable","enact","end","endless",
14518 "endorse","enemy","energy","enforce","engage","engine","enhance","enjoy","enlist","enough",
14519 "enrich","enroll","ensure","enter","entire","entry","envelope","episode","equal","equip",
14520 "era","erase","erode","erosion","error","erupt","escape","essay","essence","estate",
14521 "eternal","ethics","evidence","evil","evoke","evolve","exact","example","excess","exchange",
14522 "excite","exclude","excuse","execute","exercise","exhaust","exhibit","exile","exist","exit",
14523 "exotic","expand","expect","expire","explain","expose","express","extend","extra","eye",
14524 "eyebrow","fabric","face","faculty","fade","faint","faith","fall","false","fame",
14525 "family","famous","fan","fancy","fantasy","farm","fashion","fat","fatal","father",
14526 "fatigue","fault","favorite","feature","february","federal","fee","feed","feel","female",
14527 "fence","festival","fetch","fever","few","fiber","fiction","field","figure","file",
14528 "film","filter","final","find","fine","finger","finish","fire","firm","first",
14529 "fiscal","fish","fit","fitness","fix","flag","flame","flash","flat","flavor",
14530 "flee","flight","flip","float","flock","floor","flower","fluid","flush","fly",
14531 "foam","focus","fog","foil","fold","follow","food","foot","force","forest",
14532 "forget","fork","fortune","forum","forward","fossil","foster","found","fox","fragile",
14533 "frame","frequent","fresh","friend","fringe","frog","front","frost","frown","frozen",
14534 "fruit","fuel","fun","funny","furnace","fury","future","gadget","gain","galaxy",
14535 "gallery","game","gap","garage","garbage","garden","garlic","garment","gas","gasp",
14536 "gate","gather","gauge","gaze","general","genius","genre","gentle","genuine","gesture",
14537 "ghost","giant","gift","giggle","ginger","giraffe","girl","give","glad","glance",
14538 "glare","glass","glide","glimpse","globe","gloom","glory","glove","glow","glue",
14539 "goat","goddess","gold","good","goose","gorilla","gospel","gossip","govern","gown",
14540 "grab","grace","grain","grant","grape","grass","gravity","great","green","grid",
14541 "grief","grit","grocery","group","grow","grunt","guard","guess","guide","guilt",
14542 "guitar","gun","gym","habit","hair","half","hammer","hamster","hand","happy",
14543 "harbor","hard","harsh","harvest","hat","have","hawk","hazard","head","health",
14544 "heart","heavy","hedgehog","height","hello","helmet","help","hen","hero","hidden",
14545 "high","hill","hint","hip","hire","history","hobby","hockey","hold","hole",
14546 "holiday","hollow","home","honey","hood","hope","horn","horror","horse","hospital",
14547 "host","hotel","hour","hover","hub","huge","human","humble","humor","hundred",
14548 "hungry","hunt","hurdle","hurry","hurt","husband","hybrid","ice","icon","idea",
14549 "identify","idle","ignore","ill","illegal","illness","image","imitate","immense","immune",
14550 "impact","impose","improve","impulse","inch","include","income","increase","index","indicate",
14551 "indoor","industry","infant","inflict","inform","inhale","inherit","initial","inject","injury",
14552 "inmate","inner","innocent","input","inquiry","insane","insect","inside","inspire","install",
14553 "intact","interest","into","invest","invite","involve","iron","island","isolate","issue",
14554 "item","ivory","jacket","jaguar","jar","jazz","jealous","jeans","jelly","jewel",
14555 "job","join","joke","journey","joy","judge","juice","jump","jungle","junior",
14556 "junk","just","kangaroo","keen","keep","ketchup","key","kick","kid","kidney",
14557 "kind","kingdom","kiss","kit","kitchen","kite","kitten","kiwi","knee","knife",
14558 "knock","know","lab","label","labor","ladder","lady","lake","lamp","language",
14559 "laptop","large","later","latin","laugh","laundry","lava","law","lawn","lawsuit",
14560 "layer","lazy","leader","leaf","learn","leave","lecture","left","leg","legal",
14561 "legend","leisure","lemon","lend","length","lens","leopard","lesson","letter","level",
14562 "liar","liberty","library","license","life","lift","light","like","limb","limit",
14563 "link","lion","liquid","list","little","live","lizard","load","loan","lobster",
14564 "local","lock","logic","lonely","long","loop","lottery","loud","lounge","love",
14565 "loyal","lucky","luggage","lumber","lunar","lunch","luxury","lyrics","machine","mad",
14566 "magic","magnet","maid","mail","main","major","make","mammal","man","manage",
14567 "mandate","mango","mansion","manual","maple","marble","march","margin","marine","market",
14568 "marriage","mask","mass","master","match","material","math","matrix","matter","maximum",
14569 "maze","meadow","mean","measure","meat","mechanic","medal","media","melody","melt",
14570 "member","memory","mention","menu","mercy","merge","merit","merry","mesh","message",
14571 "metal","method","middle","midnight","milk","million","mimic","mind","minimum","minor",
14572 "minute","miracle","mirror","misery","miss","mistake","mix","mixed","mixture","mobile",
14573 "model","modify","mom","moment","monitor","monkey","monster","month","moon","moral",
14574 "more","morning","mosquito","mother","motion","motor","mountain","mouse","move","movie",
14575 "much","muffin","mule","multiply","muscle","museum","mushroom","music","must","mutual",
14576 "myself","mystery","myth","naive","name","napkin","narrow","nasty","nation","nature",
14577 "near","neck","need","negative","neglect","neither","nephew","nerve","nest","net",
14578 "network","neutral","never","news","next","nice","night","noble","noise","nominee",
14579 "noodle","normal","north","nose","notable","note","nothing","notice","novel","now",
14580 "nuclear","number","nurse","nut","oak","obey","object","oblige","obscure","observe",
14581 "obtain","obvious","occur","ocean","october","odor","off","offer","office","often",
14582 "oil","okay","old","olive","olympic","omit","once","one","onion","online",
14583 "only","open","opera","opinion","oppose","option","orange","orbit","orchard","order",
14584 "ordinary","organ","orient","original","orphan","ostrich","other","outdoor","outer","output",
14585 "outside","oval","oven","over","own","owner","oxygen","oyster","ozone","pact",
14586 "paddle","page","pair","palace","palm","panda","panel","panic","panther","paper",
14587 "parade","parent","park","parrot","party","pass","patch","path","patient","patrol",
14588 "pattern","pause","pave","payment","peace","peanut","pear","peasant","pelican","pen",
14589 "penalty","pencil","people","pepper","perfect","permit","person","pet","phone","photo",
14590 "phrase","physical","piano","picnic","picture","piece","pig","pigeon","pill","pilot",
14591 "pink","pioneer","pipe","pistol","pitch","pizza","place","planet","plastic","plate",
14592 "play","please","pledge","pluck","plug","plunge","poem","poet","point","polar",
14593 "pole","police","pond","pony","pool","popular","portion","position","possible","post",
14594 "potato","pottery","poverty","powder","power","practice","praise","predict","prefer","prepare",
14595 "present","pretty","prevent","price","pride","primary","print","priority","prison","private",
14596 "prize","problem","process","produce","profit","program","project","promote","proof","property",
14597 "prosper","protect","proud","provide","public","pudding","pull","pulp","pulse","pumpkin",
14598 "punch","pupil","puppy","purchase","purity","purpose","purse","push","put","puzzle",
14599 "pyramid","quality","quantum","quarter","question","quick","quit","quiz","quote","rabbit",
14600 "raccoon","race","rack","radar","radio","rail","rain","raise","rally","ramp",
14601 "ranch","random","range","rapid","rare","rate","rather","raven","raw","razor",
14602 "ready","real","reason","rebel","rebuild","recall","receive","recipe","record","recycle",
14603 "reduce","reflect","reform","refuse","region","regret","regular","reject","relax","release",
14604 "relief","rely","remain","remember","remind","remove","render","renew","rent","reopen",
14605 "repair","repeat","replace","report","require","rescue","resemble","resist","resource","response",
14606 "result","retire","retreat","return","reunion","reveal","review","reward","rhythm","rib",
14607 "ribbon","rice","rich","ride","ridge","rifle","right","rigid","ring","riot",
14608 "ripple","risk","ritual","rival","river","road","roast","robot","robust","rocket",
14609 "romance","roof","rookie","room","rose","rotate","rough","round","route","royal",
14610 "rubber","rude","rug","rule","run","runway","rural","sad","saddle","sadness",
14611 "safe","sail","salad","salmon","salon","salt","salute","same","sample","sand",
14612 "satisfy","satoshi","sauce","sausage","save","say","scale","scan","scare","scatter",
14613 "scene","scheme","school","science","scissors","scorpion","scout","scrap","screen","script",
14614 "scrub","sea","search","season","seat","second","secret","section","security","seed",
14615 "seek","segment","select","sell","seminar","senior","sense","sentence","series","service",
14616 "session","settle","setup","seven","shadow","shaft","shallow","share","shed","shell",
14617 "sheriff","shield","shift","shine","ship","shiver","shock","shoe","shoot","shop",
14618 "short","shoulder","shove","shrimp","shrug","shuffle","shy","sibling","sick","side",
14619 "siege","sight","sign","silent","silk","silly","silver","similar","simple","since",
14620 "sing","siren","sister","situate","six","size","skate","sketch","ski","skill",
14621 "skin","skirt","skull","slab","slam","sleep","slender","slice","slide","slight",
14622 "slim","slogan","slot","slow","slush","small","smart","smile","smoke","smooth",
14623 "snack","snake","snap","sniff","snow","soap","soccer","social","sock","soda",
14624 "soft","solar","soldier","solid","solution","solve","someone","song","soon","sorry",
14625 "sort","soul","sound","soup","source","south","space","spare","spatial","spawn",
14626 "speak","special","speed","spell","spend","sphere","spice","spider","spike","spin",
14627 "spirit","split","spoil","sponsor","spoon","sport","spot","spray","spread","spring",
14628 "spy","square","squeeze","squirrel","stable","stadium","staff","stage","stairs","stamp",
14629 "stand","start","state","stay","steak","steel","stem","step","stereo","stick",
14630 "still","sting","stock","stomach","stone","stool","story","stove","strategy","street",
14631 "strike","strong","struggle","student","stuff","stumble","style","subject","submit","subway",
14632 "success","such","sudden","suffer","sugar","suggest","suit","summer","sun","sunny",
14633 "sunset","super","supply","supreme","sure","surface","surge","surprise","surround","survey",
14634 "suspect","sustain","swallow","swamp","swap","swarm","swear","sweet","swift","swim",
14635 "swing","switch","sword","symbol","symptom","syrup","system","table","tackle","tag",
14636 "tail","talent","talk","tank","tape","target","task","taste","tattoo","taxi",
14637 "teach","team","tell","ten","tenant","tennis","tent","term","test","text",
14638 "thank","that","theme","then","theory","there","they","thing","this","thought",
14639 "three","thrive","throw","thumb","thunder","ticket","tide","tiger","tilt","timber",
14640 "time","tiny","tip","tired","tissue","title","toast","tobacco","today","toddler",
14641 "toe","together","toilet","token","tomato","tomorrow","tone","tongue","tonight","tool",
14642 "tooth","top","topic","topple","torch","tornado","tortoise","toss","total","tourist",
14643 "toward","tower","town","toy","track","trade","traffic","tragic","train","transfer",
14644 "trap","trash","travel","tray","treat","tree","trend","trial","tribe","trick",
14645 "trigger","trim","trip","trophy","trouble","truck","true","truly","trumpet","trust",
14646 "truth","try","tube","tuition","tumble","tuna","tunnel","turkey","turn","turtle",
14647 "twelve","twenty","twice","twin","twist","two","type","typical","ugly","umbrella",
14648 "unable","unaware","uncle","uncover","under","undo","unfair","unfold","unhappy","uniform",
14649 "unique","unit","universe","unknown","unlock","until","unusual","unveil","update","upgrade",
14650 "uphold","upon","upper","upset","urban","urge","usage","use","used","useful",
14651 "useless","usual","utility","vacant","vacuum","vague","valid","valley","valve","van",
14652 "vanish","vapor","various","vast","vault","vehicle","velvet","vendor","venture","venue",
14653 "verb","verify","version","very","vessel","veteran","viable","vibrant","vicious","victory",
14654 "video","view","village","vintage","violin","virtual","virus","visa","visit","visual",
14655 "vital","vivid","vocal","voice","void","volcano","volume","vote","voyage","wage",
14656 "wagon","wait","walk","wall","walnut","want","warfare","warm","warrior","wash",
14657 "wasp","waste","water","wave","way","wealth","weapon","wear","weasel","weather",
14658 "web","wedding","weekend","weird","welcome","west","wet","whale","what","wheat",
14659 "wheel","when","where","whip","whisper","wide","width","wife","wild","will",
14660 "win","window","wine","wing","wink","winner","winter","wire","wisdom","wise",
14661 "wish","witness","wolf","woman","wonder","wood","wool","word","work","world",
14662 "worry","worth","wrap","wreck","wrestle","wrist","write","wrong","yard","year",
14663 "yellow","you","young","youth","zebra","zero","zone","zoo"]
14666 * Copyright (c)
2013 Pavol Rusnak
14668 * Permission is hereby granted, free of charge, to any person obtaining a copy of
14669 * this software and associated documentation files (the "Software"), to deal in
14670 * the Software without restriction, including without limitation the rights to
14671 * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
14672 * of the Software, and to permit persons to whom the Software is furnished to do
14673 * so, subject to the following conditions:
14675 * The above copyright notice and this permission notice shall be included in all
14676 * copies or substantial portions of the Software.
14678 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14679 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
14680 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
14681 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
14682 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
14683 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
14687 * Javascript port from python by Ian Coleman
14689 * Requires code from sjcl
14690 * https://github.com/bitwiseshiftleft/sjcl
14693 var Mnemonic = function(language) {
14695 var PBKDF2_ROUNDS =
2048;
14701 var hmacSHA512 = function(key) {
14702 var hasher = new sjcl.misc.hmac(key, sjcl.hash.sha512);
14703 this.encrypt = function() {
14704 return hasher.encrypt.apply(hasher, arguments);
14709 wordlist = WORDLISTS[language];
14710 if (wordlist.length != RADIX) {
14711 err = 'Wordlist should contain ' + RADIX + ' words, but it contains ' + wordlist.length + ' words.';
14716 self.generate = function(strength) {
14717 strength = strength ||
128;
14718 var r = strength %
32;
14720 throw 'Strength should be divisible by
32, but it is not (' + r + ').';
14722 var hasStrongCrypto = 'crypto' in window && window['crypto'] !== null;
14723 if (!hasStrongCrypto) {
14724 throw 'Mnemonic should be generated with strong randomness, but crypto.getRandomValues is unavailable';
14726 var buffer = new Uint8Array(strength /
8);
14727 var data = crypto.getRandomValues(buffer);
14728 return self.toMnemonic(data);
14731 self.toMnemonic = function(byteArray) {
14732 if (byteArray.length %
4 > 0) {
14733 throw 'Data length in bits should be divisible by
32, but it is not (' + byteArray.length + ' bytes = ' + byteArray.length*
8 + ' bits).'
14736 //h = hashlib.sha256(data).hexdigest()
14737 var data = byteArrayToWordArray(byteArray);
14738 var hash = sjcl.hash.sha256.hash(data);
14739 var h = sjcl.codec.hex.fromBits(hash);
14741 // b is a binary string, eg '
00111010101100...'
14742 //b = bin(int(binascii.hexlify(data),
16))[
2:].zfill(len(data) *
8) + \
14743 // bin(int(h,
16))[
2:].zfill(
256)[:len(data) *
8 /
32]
14745 // a = bin(int(binascii.hexlify(data),
16))[
2:].zfill(len(data) *
8)
14746 // c = bin(int(h,
16))[
2:].zfill(
256)
14747 // d = c[:len(data) *
8 /
32]
14748 var a = byteArrayToBinaryString(byteArray);
14749 var c = zfill(hexStringToBinaryString(h),
256);
14750 var d = c.substring(
0, byteArray.length *
8 /
32);
14751 // b = line1 + line2
14755 var blen = b.length /
11;
14756 for (var i=
0; i
<blen; i++) {
14757 var idx = parseInt(b.substring(i *
11, (i +
1) *
11),
2);
14758 result.push(wordlist[idx]);
14760 return result.join(' ');
14763 self.check = function(mnemonic) {
14764 var mnemonic = mnemonic.split(' ')
14765 if (mnemonic.length %
3 > 0) {
14768 // idx = map(lambda x: bin(self.wordlist.index(x))[
2:].zfill(
11), mnemonic)
14770 for (var i=
0; i
<mnemonic.length; i++) {
14771 var word = mnemonic[i];
14772 var wordIndex = wordlist.indexOf(word);
14773 if (wordIndex == -
1) {
14776 var binaryIndex = zfill(wordIndex.toString(
2),
11);
14777 idx.push(binaryIndex);
14779 var b = idx.join('');
14781 //d = b[:l /
33 *
32]
14783 var d = b.substring(
0, l /
33 *
32);
14784 var h = b.substring(l - l /
33, l);
14785 //nd = binascii.unhexlify(hex(int(d,
2))[
2:].rstrip('L').zfill(l /
33 *
8))
14786 var nd = binaryStringToWordArray(d);
14787 //nh = bin(int(hashlib.sha256(nd).hexdigest(),
16))[
2:].zfill(
256)[:l /
33]
14788 var ndHash = sjcl.hash.sha256.hash(nd);
14789 var ndHex = sjcl.codec.hex.fromBits(ndHash);
14790 var ndBstr = zfill(hexStringToBinaryString(ndHex),
256);
14791 var nh = ndBstr.substring(
0,l/
33);
14795 self.toSeed = function(mnemonic, passphrase) {
14796 passphrase = passphrase || '';
14797 mnemonic = self.normalizeString(mnemonic).split(' ').filter(function(x) { return x.length; }).join(' ');
14798 passphrase = self.normalizeString(passphrase)
14799 passphrase =
"mnemonic" + passphrase;
14800 var mnemonicBits = sjcl.codec.utf8String.toBits(mnemonic);
14801 var passphraseBits = sjcl.codec.utf8String.toBits(passphrase);
14802 var result = sjcl.misc.pbkdf2(mnemonicBits, passphraseBits, PBKDF2_ROUNDS,
512, hmacSHA512);
14803 var hashHex = sjcl.codec.hex.fromBits(result);
14807 self.normalizeString = function(str) {
14808 if (typeof str.normalize ==
"function") {
14809 return str.normalize(
"NFKD");
14812 // TODO decide how to handle this in the future.
14813 // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize
14818 function byteArrayToWordArray(data) {
14820 for (var i=
0; i
<data.length/
4; i++) {
14822 v += data[i*
4 +
0] <<
8 *
3;
14823 v += data[i*
4 +
1] <<
8 *
2;
14824 v += data[i*
4 +
2] <<
8 *
1;
14825 v += data[i*
4 +
3] <<
8 *
0;
14831 function byteArrayToBinaryString(data) {
14833 for (var i=
0; i
<data.length; i++) {
14834 bin += zfill(data[i].toString(
2),
8);
14839 function hexStringToBinaryString(hexString) {
14841 for (var i=
0; i
<hexString.length; i++) {
14842 binaryString += zfill(parseInt(hexString[i],
16).toString(
2),
4);
14844 return binaryString;
14847 function binaryStringToWordArray(binary) {
14848 var aLen = binary.length /
32;
14850 for (var i=
0; i
<aLen; i++) {
14851 var valueStr = binary.substring(
0,
32);
14852 var value = parseInt(valueStr,
2);
14854 binary = binary.slice(
32);
14859 // Pad a numeric string on the left with zero digits until the given width
14861 // Note this differs to the python implementation because it does not
14862 // handle numbers starting with a sign.
14863 function zfill(source, length) {
14864 source = source.toString();
14865 while (source.length < length) {
14866 source = '
0' + source;
14875 <script>(function() {
14877 var mnemonic = new Mnemonic("english");
14879 var bip32RootKey = null;
14880 var bip32ExtendedKey = null;
14881 var network = bitcoin.networks.bitcoin;
14882 var addressRowTemplate = $("#address-row-template");
14884 var showIndex = true;
14885 var showAddress = true;
14886 var showPrivKey = true;
14888 var phraseChangeTimeoutEvent = null;
14889 var rootKeyChangedTimeoutEvent = null;
14892 DOM.network = $(".network");
14893 DOM.phraseNetwork = $("#network-phrase");
14894 DOM.phrase = $(".phrase");
14895 DOM.passphrase = $(".passphrase");
14896 DOM.generate = $(".generate");
14897 DOM.seed = $(".seed");
14898 DOM.rootKey = $(".root-key");
14899 DOM.extendedPrivKey = $(".extended-priv-key");
14900 DOM.extendedPubKey = $(".extended-pub-key");
14901 DOM.bip32tab = $("#bip32-tab");
14902 DOM.bip44tab = $("#bip44-tab");
14903 DOM.bip32panel = $("#bip32");
14904 DOM.bip44panel = $("#bip44");
14905 DOM.bip32path = $("#bip32-path");
14906 DOM.bip44path = $("#bip44-path");
14907 DOM.bip44purpose = $("#bip44 .purpose");
14908 DOM.bip44coin = $("#bip44 .coin");
14909 DOM.bip44account = $("#bip44 .account");
14910 DOM.bip44change = $("#bip44 .change");
14911 DOM.strength = $(".strength");
14912 DOM.hardenedAddresses = $(".hardened-addresses");
14913 DOM.addresses = $(".addresses");
14914 DOM.rowsToAdd = $(".rows-to-add");
14915 DOM.more = $(".more");
14916 DOM.feedback = $(".feedback");
14917 DOM.tab = $(".derivation-type a");
14918 DOM.indexToggle = $(".index-toggle");
14919 DOM.addressToggle = $(".address-toggle");
14920 DOM.privateKeyToggle = $(".private-key-toggle");
14924 DOM.network.on("change", networkChanged);
14925 DOM.phrase.on("input", delayedPhraseChanged);
14926 DOM.passphrase.on("input", delayedPhraseChanged);
14927 DOM.generate.on("click", generateClicked);
14928 DOM.more.on("click", showMore);
14929 DOM.rootKey.on("input", delayedRootKeyChanged);
14930 DOM.bip32path.on("input", calcForDerivationPath);
14931 DOM.bip44purpose.on("input", calcForDerivationPath);
14932 DOM.bip44coin.on("input", calcForDerivationPath);
14933 DOM.bip44account.on("input", calcForDerivationPath);
14934 DOM.bip44change.on("input", calcForDerivationPath);
14935 DOM.tab.on("shown.bs.tab", calcForDerivationPath);
14936 DOM.hardenedAddresses.on("change", calcForDerivationPath);
14937 DOM.indexToggle.on("click", toggleIndexes);
14938 DOM.addressToggle.on("click", toggleAddresses);
14939 DOM.privateKeyToggle.on("click", togglePrivateKeys);
14942 hideValidationError();
14943 populateNetworkSelect();
14948 function networkChanged(e) {
14949 var networkIndex = e.target.value;
14950 networks[networkIndex].onSelect();
14951 if (seed != null) {
14959 function delayedPhraseChanged() {
14960 hideValidationError();
14962 if (phraseChangeTimeoutEvent != null) {
14963 clearTimeout(phraseChangeTimeoutEvent);
14965 phraseChangeTimeoutEvent = setTimeout(phraseChanged,
400);
14968 function phraseChanged() {
14970 hideValidationError();
14971 // Get the mnemonic phrase
14972 var phrase = DOM.phrase.val();
14973 var errorText = findPhraseErrors(phrase);
14975 showValidationError(errorText);
14978 // Calculate and display
14979 var passphrase = DOM.passphrase.val();
14980 calcBip32RootKeyFromSeed(phrase, passphrase);
14981 calcForDerivationPath();
14985 function delayedRootKeyChanged() {
14986 // Warn if there is an existing mnemonic or passphrase.
14987 if (DOM.phrase.val().length
> 0 || DOM.passphrase.val().length
> 0) {
14988 if (!confirm(
"This will clear existing mnemonic and passphrase")) {
14989 DOM.rootKey.val(bip32RootKey);
14993 hideValidationError();
14995 // Clear existing mnemonic and passphrase
14996 DOM.phrase.val(
"");
14997 DOM.passphrase.val(
"");
14999 if (rootKeyChangedTimeoutEvent != null) {
15000 clearTimeout(rootKeyChangedTimeoutEvent);
15002 rootKeyChangedTimeoutEvent = setTimeout(rootKeyChanged,
400);
15005 function rootKeyChanged() {
15007 hideValidationError();
15008 // Validate the root key TODO
15009 var rootKeyBase58 = DOM.rootKey.val();
15010 var errorText = validateRootKey(rootKeyBase58);
15012 showValidationError(errorText);
15015 // Calculate and display
15016 calcBip32RootKeyFromBase58(rootKeyBase58);
15017 calcForDerivationPath();
15021 function calcForDerivationPath() {
15023 hideValidationError();
15024 // Get the derivation path
15025 var derivationPath = getDerivationPath();
15026 var errorText = findDerivationPathErrors(derivationPath);
15028 showValidationError(errorText);
15031 calcBip32ExtendedKey(derivationPath);
15032 displayBip32Info();
15036 function generateClicked() {
15039 setTimeout(function() {
15040 var phrase = generateRandomPhrase();
15048 function toggleIndexes() {
15049 showIndex = !showIndex;
15050 $(
"td.index span").toggleClass(
"invisible");
15053 function toggleAddresses() {
15054 showAddress = !showAddress;
15055 $(
"td.address span").toggleClass(
"invisible");
15058 function togglePrivateKeys() {
15059 showPrivKey = !showPrivKey;
15060 $(
"td.privkey span").toggleClass(
"invisible");
15065 function generateRandomPhrase() {
15066 if (!hasStrongRandom()) {
15067 var errorText =
"This browser does not support strong randomness";
15068 showValidationError(errorText);
15071 var numWords = parseInt(DOM.strength.val());
15072 var strength = numWords /
3 *
32;
15073 var words = mnemonic.generate(strength);
15074 DOM.phrase.val(words);
15078 function calcBip32RootKeyFromSeed(phrase, passphrase) {
15079 seed = mnemonic.toSeed(phrase, passphrase);
15080 bip32RootKey = bitcoin.HDNode.fromSeedHex(seed, network);
15083 function calcBip32RootKeyFromBase58(rootKeyBase58) {
15084 bip32RootKey = bitcoin.HDNode.fromBase58(rootKeyBase58, network);
15087 function calcBip32ExtendedKey(path) {
15088 bip32ExtendedKey = bip32RootKey;
15089 // Derive the key from the path
15090 var pathBits = path.split(
"/");
15091 for (var i=
0; i
<pathBits.length; i++) {
15092 var bit = pathBits[i];
15093 var index = parseInt(bit);
15094 if (isNaN(index)) {
15097 var hardened = bit[bit.length-
1] ==
"'";
15099 bip32ExtendedKey = bip32ExtendedKey.deriveHardened(index);
15102 bip32ExtendedKey = bip32ExtendedKey.derive(index);
15107 function showValidationError(errorText) {
15113 function hideValidationError() {
15119 function findPhraseErrors(phrase) {
15120 // TODO make this right
15121 // Preprocess the words
15122 phrase = mnemonic.normalizeString(phrase);
15123 var parts = phrase.split(
" ");
15125 for (var i=
0; i
<parts.length; i++) {
15126 var part = parts[i];
15127 if (part.length
> 0) {
15128 // TODO check that lowercasing is always valid to do
15129 proper.push(part.toLowerCase());
15132 var properPhrase = proper.join(' ');
15134 for (var i=
0; i
<proper.length; i++) {
15135 var word = proper[i];
15136 if (WORDLISTS[
"english"].indexOf(word) == -
1) {
15137 console.log(
"Finding closest match to " + word);
15138 var nearestWord = findNearestWord(word);
15139 return word +
" not in wordlist, did you mean " + nearestWord +
"?";
15142 // Check the words are valid
15143 var isValid = mnemonic.check(properPhrase);
15145 return
"Invalid mnemonic";
15150 function validateRootKey(rootKeyBase58) {
15152 bitcoin.HDNode.fromBase58(rootKeyBase58);
15155 return
"Invalid root key";
15160 function getDerivationPath() {
15161 if (DOM.bip44tab.hasClass(
"active")) {
15162 var purpose = parseIntNoNaN(DOM.bip44purpose.val(),
44);
15163 var coin = parseIntNoNaN(DOM.bip44coin.val(),
0);
15164 var account = parseIntNoNaN(DOM.bip44account.val(),
0);
15165 var change = parseIntNoNaN(DOM.bip44change.val(),
0);
15167 path += purpose +
"'/";
15168 path += coin +
"'/";
15169 path += account +
"'/";
15171 DOM.bip44path.val(path);
15172 var derivationPath = DOM.bip44path.val();
15173 console.log(
"Using derivation path from BIP44 tab: " + derivationPath);
15174 return derivationPath;
15176 else if (DOM.bip32tab.hasClass(
"active")) {
15177 var derivationPath = DOM.bip32path.val();
15178 console.log(
"Using derivation path from BIP32 tab: " + derivationPath);
15179 return derivationPath;
15182 console.log(
"Unknown derivation path");
15186 function findDerivationPathErrors(path) {
15187 // TODO is not perfect but is better than nothing
15189 // https://github.com/bitcoin/bips/blob/master/bip-
0032.mediawiki#test-vectors
15191 // https://github.com/bitcoin/bips/blob/master/bip-
0032.mediawiki#extended-keys
15192 var maxDepth =
255; // TODO verify this!!
15193 var maxIndexValue = Math.pow(
2,
31); // TODO verify this!!
15194 if (path[
0] !=
"m") {
15195 return
"First character must be 'm'";
15197 if (path.length
> 1) {
15198 if (path[
1] !=
"/") {
15199 return
"Separator must be '/'";
15201 var indexes = path.split(
"/");
15202 if (indexes.length
> maxDepth) {
15203 return "Derivation depth is " + indexes.length + ", must be less than " + maxDepth;
15205 for (var depth =
1; depth
<indexes.length; depth++) {
15206 var index = indexes[depth];
15207 var invalidChars = index.replace(/^[
0-
9]+'?$/g,
"")
15208 if (invalidChars.length
> 0) {
15209 return
"Invalid characters " + invalidChars +
" found at depth " + depth;
15211 var indexValue = parseInt(index.replace(
"'",
""));
15212 if (isNaN(depth)) {
15213 return
"Invalid number at depth " + depth;
15215 if (indexValue
> maxIndexValue) {
15216 return "Value of " + indexValue + " at depth " + depth + " must be less than " + maxIndexValue;
15223 function displayBip32Info() {
15225 DOM.seed.val(seed);
15226 var rootKey = bip32RootKey.toBase58();
15227 DOM.rootKey.val(rootKey);
15228 var extendedPrivKey = bip32ExtendedKey.toBase58();
15229 DOM.extendedPrivKey.val(extendedPrivKey);
15230 var extendedPubKey = bip32ExtendedKey.toBase58(false);
15231 DOM.extendedPubKey.val(extendedPubKey);
15232 // Display the addresses and privkeys
15233 clearAddressesList();
15234 displayAddresses(
0,
20);
15237 function displayAddresses(start, total) {
15238 for (var i=
0; i
<total; i++) {
15239 var index = i + start;
15240 new TableRow(index);
15244 function TableRow(index) {
15246 var useHardenedAddresses = DOM.hardenedAddresses.prop(
"checked");
15252 function calculateValues() {
15253 setTimeout(function() {
15255 if (useHardenedAddresses) {
15256 key = bip32ExtendedKey.deriveHardened(index);
15259 key = bip32ExtendedKey.derive(index);
15261 var address = key.getAddress().toString();
15262 var privkey = key.privKey.toWIF(network);
15263 var indexText = getDerivationPath() +
"/" + index;
15264 if (useHardenedAddresses) {
15265 indexText = indexText +
"'";
15267 addAddressToList(indexText, address, privkey);
15275 function showMore() {
15276 var start = DOM.addresses.children().length;
15277 var rowsToAdd = parseInt(DOM.rowsToAdd.val());
15278 if (isNaN(rowsToAdd)) {
15280 DOM.rowsToAdd.val(
"20");
15282 if (rowsToAdd
> 200) {
15283 var msg =
"Generating " + rowsToAdd +
" rows could take a while. ";
15284 msg +=
"Do you want to continue?";
15285 if (!confirm(msg)) {
15289 displayAddresses(start, rowsToAdd);
15292 function clearDisplay() {
15293 clearAddressesList();
15295 hideValidationError();
15298 function clearAddressesList() {
15299 DOM.addresses.empty();
15302 function clearKey() {
15303 DOM.rootKey.val(
"");
15304 DOM.extendedPrivKey.val(
"");
15305 DOM.extendedPubKey.val(
"");
15308 function addAddressToList(indexText, address, privkey) {
15309 var row = $(addressRowTemplate.html());
15311 var indexCell = row.find(
".index span");
15312 var addressCell = row.find(
".address span");
15313 var privkeyCell = row.find(
".privkey span");
15315 indexCell.text(indexText);
15316 addressCell.text(address);
15317 privkeyCell.text(privkey);
15320 indexCell.addClass(
"invisible");
15322 if (!showAddress) {
15323 addressCell.addClass(
"invisible");
15325 if (!showPrivKey) {
15326 privkeyCell.addClass(
"invisible");
15328 DOM.addresses.append(row);
15331 function hasStrongRandom() {
15332 return 'crypto' in window && window['crypto'] !== null;
15335 function disableForms() {
15336 $(
"form").on(
"submit", function(e) {
15337 e.preventDefault();
15341 function parseIntNoNaN(val, defaultVal) {
15342 var v = parseInt(val);
15349 function showPending() {
15351 .text(
"Calculating...")
15355 function findNearestWord(word) {
15356 var words = WORDLISTS[
"english"];
15357 var minDistance =
99;
15358 var closestWord = words[
0];
15359 for (var i=
0; i
<words.length; i++) {
15360 var comparedTo = words[i];
15361 var distance = Levenshtein.get(word, comparedTo);
15362 if (distance < minDistance) {
15363 closestWord = comparedTo;
15364 minDistance = distance;
15367 return closestWord;
15370 function hidePending() {
15376 function populateNetworkSelect() {
15377 for (var i=
0; i
<networks.length; i++) {
15378 var network = networks[i];
15379 var option = $(
"<option>");
15380 option.attr(
"value", i);
15381 option.text(network.name);
15382 DOM.phraseNetwork.append(option);
15389 onSelect: function() {
15390 network = bitcoin.networks.bitcoin;
15391 DOM.bip44coin.val(
0);
15395 name:
"Bitcoin Testnet",
15396 onSelect: function() {
15397 network = bitcoin.networks.testnet;
15398 DOM.bip44coin.val(
1);
15403 onSelect: function() {
15404 network = bitcoin.networks.litecoin;
15405 DOM.bip44coin.val(
2);
15410 onSelect: function() {
15411 network = bitcoin.networks.dogecoin;
15412 DOM.bip44coin.val(
3);
15416 name:
"ShadowCash",
15417 onSelect: function() {
15418 network = bitcoin.networks.shadow;
15419 DOM.bip44coin.val(
35);
15423 name:
"ShadowCash Testnet",
15424 onSelect: function() {
15425 network = bitcoin.networks.shadowtn;
15426 DOM.bip44coin.val(
1);
15431 onSelect: function() {
15432 network = bitcoin.networks.viacoin;
15433 DOM.bip44coin.val(
14);
15437 name:
"Viacoin Testnet",
15438 onSelect: function() {
15439 network = bitcoin.networks.viacointestnet;
15440 DOM.bip44coin.val(
1);
15445 onSelect: function() {
15446 network = bitcoin.networks.jumbucks;
15447 DOM.bip44coin.val(
26);
15452 onSelect: function() {
15453 network = bitcoin.networks.clam;
15454 DOM.bip44coin.val(
23);
15459 onSelect: function() {
15460 network = bitcoin.networks.dash;
15461 DOM.bip44coin.val(
5);
15466 onSelect: function() {
15467 network = bitcoin.networks.namecoin;
15468 DOM.bip44coin.val(
7);
15473 onSelect: function() {
15474 network = bitcoin.networks.peercoin;
15475 DOM.bip44coin.val(
6);