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;
45 <div class=
"container">
47 <h1 class=
"text-center">Mnemonic Code Converter
</h1>
50 <div class=
"col-md-12">
52 <form class=
"form-horizontal" role=
"form">
53 <div class=
"col-sm-2"></div>
54 <div class=
"col-sm-10">
55 <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>
56 <p>For more info see the
<a href=
"https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki" target=
"_blank">BIP39 spec
</a></p>
58 <div class=
"form-group">
59 <label for=
"phrase" class=
"col-sm-2 control-label">BIP39 Mnemonic
</label>
60 <div class=
"col-sm-10">
61 <textarea id=
"phrase" class=
"phrase form-control"></textarea>
64 <div class=
"form-group">
65 <label for=
"strength" class=
"col-sm-2 control-label">Number of words
</label>
66 <div class=
"col-sm-10">
67 <div class=
"input-group">
68 <input type=
"number" class=
"strength form-control" id=
"strength" value=
"12">
69 <span class=
"input-group-btn">
70 <button class=
"btn generate">Generate Random Mnemonic
</button>
75 <div class=
"form-group">
76 <label for=
"passphrase" class=
"col-sm-2 control-label">BIP39 Passphrase (optional)
</label>
77 <div class=
"col-sm-10">
78 <textarea id=
"passphrase" class=
"passphrase form-control"></textarea>
81 <div class=
"form-group">
82 <label for=
"network-phrase" class=
"col-sm-2 control-label">Coin
</label>
83 <div class=
"col-sm-10">
84 <select id=
"network-phrase" class=
"network form-control">
85 <!-- populated by javascript -->
89 <div class=
"form-group">
90 <label for=
"root-key" class=
"col-sm-2 control-label">BIP32 Root Key
</label>
91 <div class=
"col-sm-10">
92 <textarea id=
"root-key" class=
"root-key form-control" readonly=
"readonly"></textarea>
102 <div class=
"col-md-12">
103 <h2>Derivation Path
</h2>
104 <ul class=
"derivation-type nav nav-tabs" role=
"tablist">
105 <li id=
"hive-tab" class=
"active">
106 <a href=
"#hive" role=
"tab" data-toggle=
"tab">Hive Wallet
</a>
108 <li id=
"mycelium-tab">
109 <a href=
"#mycelium" role=
"tab" data-toggle=
"tab">Mycelium Wallet
</a>
112 <a href=
"#bip44" role=
"tab" data-toggle=
"tab">BIP44
</a>
115 <a href=
"#bip32" role=
"tab" data-toggle=
"tab">BIP32
</a>
118 <div class=
"derivation-type tab-content">
119 <div id=
"hive" class=
"tab-pane active">
120 <form class=
"form-horizontal" role=
"form">
122 <div class=
"col-sm-2"></div>
123 <div class=
"col-sm-10">
124 <p>For more info see the
<a href=
"https://www.hivewallet.com/" target=
"_blank">Hive Wallet homepage
</a></p>
126 <div class=
"form-group">
127 <label for=
"hive-path" class=
"col-sm-2 control-label">BIP32 Derivation Path
</label>
128 <div class=
"col-sm-10">
129 <input id=
"hive-path" type=
"text" class=
"path form-control" value=
"m/0'/0" readonly=
"readonly">
134 <div id=
"mycelium" class=
"tab-pane">
135 <form class=
"form-horizontal" role=
"form">
137 <div class=
"col-sm-2"></div>
138 <div class=
"col-sm-10">
139 <p>For more info see the
<a href=
"http://www.mycelium.com/" target=
"_blank">Mycelium Wallet homepage
</a></p>
141 <div class=
"form-group">
142 <label for=
"mycelium-path" class=
"col-sm-2 control-label">BIP32 Derivation Path
</label>
143 <div class=
"col-sm-10">
144 <input id=
"mycelium-path" type=
"text" class=
"path form-control" value=
"m/44'/0'/0'/0" readonly=
"readonly">
149 <div id=
"bip44" class=
"tab-pane">
150 <form class=
"form-horizontal" role=
"form">
152 <div class=
"col-sm-2"></div>
153 <div class=
"col-sm-10">
154 <p>For more info see the
<a href=
"https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target=
"_blank">BIP44 spec
</a></p>
156 <div class=
"form-group">
157 <label for=
"purpose" class=
"col-sm-2 control-label">
158 <a href=
"https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#purpose" target=
"_blank">Purpose
</a>
160 <div class=
"col-sm-10">
161 <input id=
"purpose" type=
"text" class=
"purpose form-control" value=
"44">
164 <div class=
"form-group">
165 <label for=
"coin" class=
"col-sm-2 control-label">
166 <a href=
"https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#registered-coin-types" target=
"_blank">Coin
</a>
168 <div class=
"col-sm-10">
169 <input id=
"coin" type=
"text" class=
"coin form-control" value=
"0">
172 <div class=
"form-group">
173 <label for=
"account" class=
"col-sm-2 control-label">
174 <a href=
"https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#account" target=
"_blank">Account
</a>
176 <div class=
"col-sm-10">
177 <input id=
"account" type=
"text" class=
"account form-control" value=
"0">
180 <div class=
"form-group">
181 <label for=
"change" class=
"col-sm-2 control-label">
182 <a href=
"https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#change" target=
"_blank">External / Internal
</a>
184 <div class=
"col-sm-10">
185 <input id=
"change" type=
"text" class=
"change form-control" value=
"0">
188 <div class=
"form-group">
189 <label for=
"bip44-path" class=
"col-sm-2 control-label">BIP32 Derivation Path
</label>
190 <div class=
"col-sm-10">
191 <input id=
"bip44-path" type=
"text" class=
"path form-control" value=
"m/44'/0'/0'/0" readonly=
"readonly">
196 <div id=
"bip32" class=
"tab-pane">
197 <form class=
"form-horizontal" role=
"form">
199 <div class=
"col-sm-2"></div>
200 <div class=
"col-sm-10">
201 <p>For more info see the
<a href=
"https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target=
"_blank">BIP32 spec
</a></p>
203 <div class=
"form-group">
204 <label for=
"bip32-path" class=
"col-sm-2 control-label">BIP32 Derivation Path
</label>
205 <div class=
"col-sm-10">
206 <input id=
"bip32-path" type=
"text" class=
"path form-control" value=
"m/0">
212 <form class=
"form-horizontal" role=
"form">
213 <div class=
"form-group">
214 <label for=
"extended-priv-key" class=
"col-sm-2 control-label">BIP32 Extended Key
</label>
215 <div class=
"col-sm-10">
216 <textarea id=
"extended-priv-key" class=
"extended-priv-key form-control" readonly=
"readonly"></textarea>
219 <div class=
"form-group">
220 <label for=
"extended-pub-key" class=
"col-sm-2 control-label">BIP32 Extended Key (addresses only)
</label>
221 <div class=
"col-sm-10">
222 <textarea id=
"extended-pub-key" class=
"extended-pub-key form-control" readonly=
"readonly"></textarea>
232 <div class=
"col-md-12">
233 <h2>Derived Addresses
</h2>
234 <p>Note these addreses are derived from the
<strong>BIP32 Extended Key
</strong></p>
235 <table class=
"table table-striped">
238 <div class=
"input-group">
240 <button class=
"index-toggle">Toggle
</button>
244 <div class=
"input-group">
246 <button class=
"address-toggle">Toggle
</button>
250 <div class=
"input-group">
251 Private Key
252 <button class=
"private-key-toggle">Toggle
</button>
256 <tbody class=
"addresses">
257 <tr><td> </td><td> </td><td> </td></tr>
258 <tr><td> </td><td> </td><td> </td></tr>
259 <tr><td> </td><td> </td><td> </td></tr>
260 <tr><td> </td><td> </td><td> </td></tr>
261 <tr><td> </td><td> </td><td> </td></tr>
266 <span>Show next
</button>
267 <input type=
"number" class=
"rows-to-add" value=
"20">
268 <button class=
"more">Show
</button>
273 <div class=
"col-md-12">
275 <h3>BIP39
<span class=
"small">Mnemonic code for generating deterministic keys
</span></h3>
278 <a href=
"https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki">official BIP39 spec
</a>
280 <h3>BIP32
<span class=
"small">Hierarchical Deterministic Wallets
</span></h3>
283 <a href=
"https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target=
"_blank">official BIP32 spec
</a>
285 <a href=
"http://bip32.org/" target=
"_blank">bip32.org
</a>
287 <h3>BIP44
<span class=
"small">Multi-Account Hierarchy for Deterministic Wallets
</span></h3>
290 <a href=
"https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target=
"_blank">official BIP44 spec
</a>
292 <h3>Private Keys
</h3>
295 <a href=
"https://web.archive.org/web/20150707020924/https://brainwallet.org/" target=
"_blank">brainwallet.org
</a>,
296 but be careful - it can be easy to make mistakes if you
297 don't know what you're doing
305 <div class=
"col-md-12">
307 <h2>Offline Usage
</h2>
310 You can use this tool without having to be online.
313 In your browser, select file save-as, and save this page
317 Double-click that file to open it in a browser
318 on any offline computer.
321 Alternatively, download it from
322 <a href=
"https://github.com/dcpos/bip39">
323 https://github.com/dcpos/bip39
332 <div class=
"col-md-12">
334 <h2>This project is
100% open-source code
</h2>
337 <span>Get the source code at -
</span>
338 <a href=
"https://github.com/dcpos/bip39" target=
"_blank">
339 https://github.com/dcpos/bip39
346 <span>BitcoinJS -
</span>
347 <a href=
"https://github.com/bitcoinjs/bitcoinjs-lib" target=
"_blank">
348 https://github.com/bitcoinjs/bitcoinjs-lib
353 <span>jsBIP39 -
</span>
354 <a href=
"https://github.com/iancoleman/jsbip39" target=
"_blank">
355 https://github.com/iancoleman/jsbip39
361 <a href=
"https://github.com/bitwiseshiftleft/sjcl" target=
"_blank">
362 https://github.com/bitwiseshiftleft/sjcl
367 <span>jQuery -
</span>
368 <a href=
"https://jquery.com/" target=
"_blank">
374 <span>Twitter Bootstrap -
</span>
375 <a href=
"http://getbootstrap.com/" target=
"_blank">
376 http://getbootstrap.com/
385 <div class=
"feedback-container">
386 <div class=
"feedback">Loading...
</div>
389 <script type=
"text/template" id=
"address-row-template">
391 <td class=
"index"><span></span></td>
392 <td class=
"address"><span></span></td>
393 <td class=
"privkey"><span></span></td>
396 <script>/*! jQuery v2.1
.1 | (c)
2005,
2014 jQuery Foundation, Inc. | jquery.org/license */
397 !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)
398 },_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))
399 },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});
402 * Bootstrap v3.2.0 (http://getbootstrap.com)
403 * Copyright 2011-2014 Twitter, Inc.
404 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
406 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>
407 <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){
408 // (public) Constructor
409 function BigInteger(a, b, c) {
410 if (!(this instanceof BigInteger))
411 return new BigInteger(a, b, c)
414 if (
"number" == typeof a) this.fromNumber(a, b, c)
415 else if (b == null &&
"string" != typeof a) this.fromString(a,
256)
416 else this.fromString(a, b)
420 var proto = BigInteger.prototype
422 // duck-typed isBigInteger
423 proto.__bigi = require('../package.json').version
424 BigInteger.isBigInteger = function (obj, check_ver) {
425 return obj && obj.__bigi && (!check_ver || obj.__bigi === proto.__bigi)
431 // am: Compute w_j += (x*this_i), propagate carries,
432 // c is initial carry, returns final carry.
433 // c <
3*dvalue, x <
2*dvalue, this_i < dvalue
434 // We need to select the fastest one that works in this environment.
436 // am1: use a single mult and divide to get the high bits,
437 // max digit bits should be
26 because
438 // max internal value =
2*dvalue^
2-
2*dvalue (<
2^
53)
439 function am1(i, x, w, j, c, n) {
441 var v = x * this[i++] + w[j] + c
442 c = Math.floor(v /
0x4000000)
443 w[j++] = v &
0x3ffffff
447 // am2 avoids a big mult-and-extract completely.
448 // Max digit bits should be <=
30 because we do bitwise ops
449 // on values up to
2*hdvalue^
2-hdvalue-
1 (<
2^
31)
450 function am2(i, x, w, j, c, n) {
454 var l = this[i] &
0x7fff
455 var h = this[i++]
>> 15
456 var m = xh * l + h * xl
457 l = xl * l + ((m &
0x7fff) <<
15) + w[j] + (c &
0x3fffffff)
458 c = (l
>>> 30) + (m
>>> 15) + xh * h + (c
>>> 30)
459 w[j++] = l &
0x3fffffff
463 // Alternately, set max digit bits to
28 since some
464 // browsers slow down when dealing with
32-bit numbers.
465 function am3(i, x, w, j, c, n) {
469 var l = this[i] &
0x3fff
470 var h = this[i++]
>> 14
471 var m = xh * l + h * xl
472 l = xl * l + ((m &
0x3fff) <<
14) + w[j] + c
473 c = (l
>> 28) + (m
>> 14) + xh * h
474 w[j++] = l &
0xfffffff
480 BigInteger.prototype.am = am1
483 BigInteger.prototype.DB = dbits
484 BigInteger.prototype.DM = ((
1 << dbits) -
1)
485 var DV = BigInteger.prototype.DV = (
1 << dbits)
488 BigInteger.prototype.FV = Math.pow(
2, BI_FP)
489 BigInteger.prototype.F1 = BI_FP - dbits
490 BigInteger.prototype.F2 =
2 * dbits - BI_FP
493 var BI_RM =
"0123456789abcdefghijklmnopqrstuvwxyz"
494 var BI_RC = new Array()
496 rr =
"0".charCodeAt(
0)
497 for (vv =
0; vv <=
9; ++vv) BI_RC[rr++] = vv
498 rr =
"a".charCodeAt(
0)
499 for (vv =
10; vv <
36; ++vv) BI_RC[rr++] = vv
500 rr =
"A".charCodeAt(
0)
501 for (vv =
10; vv <
36; ++vv) BI_RC[rr++] = vv
503 function int2char(n) {
504 return BI_RM.charAt(n)
507 function intAt(s, i) {
508 var c = BI_RC[s.charCodeAt(i)]
509 return (c == null) ? -
1 : c
512 // (protected) copy this to r
513 function bnpCopyTo(r) {
514 for (var i = this.t -
1; i
>=
0; --i) r[i] = this[i]
519 // (protected) set from integer value x, -DV <= x < DV
520 function bnpFromInt(x) {
522 this.s = (x <
0) ? -
1 :
0
523 if (x
> 0) this[
0] = x
524 else if (x < -
1) this[
0] = x + DV
528 // return bigint initialized to value
530 var r = new BigInteger()
535 // (protected) set from string and radix
536 function bnpFromString(s, b) {
541 else if (b ==
8) k =
3
542 else if (b ==
256) k =
8; // byte array
543 else if (b ==
2) k =
1
544 else if (b ==
32) k =
5
545 else if (b ==
4) k =
2
556 var x = (k ==
8) ? s[i] &
0xff : intAt(s, i)
558 if (s.charAt(i) == "-") mi = true
564 else if (sh + k
> self.DB) {
565 self[self.t -
1] |= (x & ((
1 << (self.DB - sh)) -
1)) << sh
566 self[self.t++] = (x
>> (self.DB - sh))
568 self[self.t -
1] |= x << sh
570 if (sh
>= self.DB) sh -= self.DB
572 if (k ==
8 && (s[
0] &
0x80) !=
0) {
574 if (sh
> 0) self[self.t -
1] |= ((
1 << (self.DB - sh)) -
1) << sh
577 if (mi) BigInteger.ZERO.subTo(self, self)
580 // (protected) clamp off excess high words
581 function bnpClamp() {
582 var c = this.s & this.DM
583 while (this.t
> 0 && this[this.t -
1] == c)--this.t
586 // (public) return string representation in given radix
587 function bnToString(b) {
589 if (self.s <
0) return
"-" + self.negate()
593 else if (b ==
8) k =
3
594 else if (b ==
2) k =
1
595 else if (b ==
32) k =
5
596 else if (b ==
4) k =
2
597 else return self.toRadix(b)
598 var km = (
1 << k) -
1,
602 var p = self.DB - (i * self.DB) % k
604 if (p < self.DB && (d = self[i]
>> p)
> 0) {
610 d = (self[i] & ((
1 << p) -
1)) << (k - p)
611 d |= self[--i]
>> (p += self.DB - k)
613 d = (self[i]
>> (p -= k)) & km
620 if (m) r += int2char(d)
627 function bnNegate() {
628 var r = new BigInteger()
629 BigInteger.ZERO.subTo(this, r)
635 return (this.s <
0) ? this.negate() : this
638 // (public) return + if this
> a, - if this < a,
0 if equal
639 function bnCompareTo(a) {
644 if (r !=
0) return (this.s <
0) ? -r : r
646 if ((r = this[i] - a[i]) !=
0) return r
650 // returns bit length of the integer x
654 if ((t = x
>>> 16) !=
0) {
658 if ((t = x
>> 8) !=
0) {
662 if ((t = x
>> 4) !=
0) {
666 if ((t = x
>> 2) !=
0) {
670 if ((t = x
>> 1) !=
0) {
677 // (public) return the number of bits in
"this"
678 function bnBitLength() {
679 if (this.t <=
0) return
0
680 return this.DB * (this.t -
1) + nbits(this[this.t -
1] ^ (this.s & this.DM))
683 // (public) return the number of bytes in
"this"
684 function bnByteLength() {
685 return this.bitLength()
>> 3
688 // (protected) r = this << n*DB
689 function bnpDLShiftTo(n, r) {
691 for (i = this.t -
1; i
>=
0; --i) r[i + n] = this[i]
692 for (i = n -
1; i
>=
0; --i) r[i] =
0
697 // (protected) r = this
>> n*DB
698 function bnpDRShiftTo(n, r) {
699 for (var i = n; i < this.t; ++i) r[i - n] = this[i]
700 r.t = Math.max(this.t - n,
0)
704 // (protected) r = this << n
705 function bnpLShiftTo(n, r) {
708 var cbs = self.DB - bs
709 var bm = (
1 << cbs) -
1
710 var ds = Math.floor(n / self.DB),
711 c = (self.s << bs) & self.DM,
713 for (i = self.t -
1; i
>=
0; --i) {
714 r[i + ds +
1] = (self[i]
>> cbs) | c
715 c = (self[i] & bm) << bs
717 for (i = ds -
1; i
>=
0; --i) r[i] =
0
719 r.t = self.t + ds +
1
724 // (protected) r = this
>> n
725 function bnpRShiftTo(n, r) {
728 var ds = Math.floor(n / self.DB)
734 var cbs = self.DB - bs
735 var bm = (
1 << bs) -
1
736 r[
0] = self[ds]
>> bs
737 for (var i = ds +
1; i < self.t; ++i) {
738 r[i - ds -
1] |= (self[i] & bm) << cbs
739 r[i - ds] = self[i]
>> bs
741 if (bs
> 0) r[self.t - ds -
1] |= (self.s & bm) << cbs
746 // (protected) r = this - a
747 function bnpSubTo(a, r) {
751 m = Math.min(a.t, self.t)
774 r.s = (c <
0) ? -
1 :
0
775 if (c < -
1) r[i++] = self.DV + c
776 else if (c
> 0) r[i++] = c
781 // (protected) r = this * a, r != this,a (HAC
14.12)
782 //
"this" should be the larger one if appropriate.
783 function bnpMultiplyTo(a, r) {
788 while (--i
>=
0) r[i] =
0
789 for (i =
0; i < y.t; ++i) r[i + x.t] = x.am(
0, y[i], r, i,
0, x.t)
792 if (this.s != a.s) BigInteger.ZERO.subTo(r, r)
795 // (protected) r = this^
2, r != this (HAC
14.16)
796 function bnpSquareTo(r) {
798 var i = r.t =
2 * x.t
799 while (--i
>=
0) r[i] =
0
800 for (i =
0; i < x.t -
1; ++i) {
801 var c = x.am(i, x[i], r,
2 * i,
0,
1)
802 if ((r[i + x.t] += x.am(i +
1,
2 * x[i], r,
2 * i +
1, c, x.t - i -
1))
>= x.DV) {
807 if (r.t
> 0) r[r.t -
1] += x.am(i, x[i], r,
2 * i,
0,
1)
812 // (protected) divide this by m, quotient and remainder to q, r (HAC
14.20)
813 // r != q, this != m. q or r may be null.
814 function bnpDivRemTo(m, q, r) {
817 if (pm.t <=
0) return
820 if (q != null) q.fromInt(
0)
821 if (r != null) self.copyTo(r)
824 if (r == null) r = new BigInteger()
825 var y = new BigInteger(),
828 var nsh = self.DB - nbits(pm[pm.t -
1]); // normalize modulus
839 var yt = y0 * (
1 << self.F1) + ((ys
> 1) ? y[ys -
2]
>> self.F2 :
0)
840 var d1 = self.FV / yt,
841 d2 = (
1 << self.F1) / yt,
845 t = (q == null) ? new BigInteger() : q
847 if (r.compareTo(t)
>=
0) {
851 BigInteger.ONE.dlShiftTo(ys, t)
852 t.subTo(y, y); // "negative" y so we can replace sub with am later
853 while (y.t < ys) y[y.t++] =
0
855 // Estimate quotient digit
856 var qd = (r[--i] == y0) ? self.DM : Math.floor(r[i] * d1 + (r[i -
1] + e) * d2)
857 if ((r[i] += y.am(
0, qd, r, j,
0, ys)) < qd) { // Try it out
860 while (r[i] < --qd) r.subTo(t, r)
865 if (ts != ms) BigInteger.ZERO.subTo(q, q)
869 if (nsh
> 0) r.rShiftTo(nsh, r); // Denormalize remainder
870 if (ts <
0) BigInteger.ZERO.subTo(r, r)
873 // (public) this mod a
875 var r = new BigInteger()
877 .divRemTo(a, null, r)
878 if (this.s <
0 && r.compareTo(BigInteger.ZERO)
> 0) a.subTo(r, r)
882 // Modular reduction using
"classic" algorithm
883 function Classic(m) {
887 function cConvert(x) {
888 if (x.s <
0 || x.compareTo(this.m)
>=
0) return x.mod(this.m)
892 function cRevert(x) {
896 function cReduce(x) {
897 x.divRemTo(this.m, null, x)
900 function cMulTo(x, y, r) {
905 function cSqrTo(x, r) {
910 Classic.prototype.convert = cConvert
911 Classic.prototype.revert = cRevert
912 Classic.prototype.reduce = cReduce
913 Classic.prototype.mulTo = cMulTo
914 Classic.prototype.sqrTo = cSqrTo
916 // (protected) return "-
1/this %
2^DB"; useful for Mont. reduction
920 // xy(
2-xy) = (
1+km)(
1-km)
921 // x[y(
2-xy)] =
1-k^
2m^
2
922 // x[y(
2-xy)] ==
1 (mod m^
2)
923 // if y is
1/x mod m, then y(
2-xy) is
1/x mod m^
2
924 // should reduce x and y(
2-xy) by m^
2 at each step to keep size bounded.
925 // JS multiply "overflows" differently from C/C++, so care is needed here.
926 function bnpInvDigit() {
927 if (this.t <
1) return
0
929 if ((x &
1) ==
0) return
0
930 var y = x &
3; // y ==
1/x mod
2^
2
931 y = (y * (
2 - (x &
0xf) * y)) &
0xf; // y ==
1/x mod
2^
4
932 y = (y * (
2 - (x &
0xff) * y)) &
0xff; // y ==
1/x mod
2^
8
933 y = (y * (
2 - (((x &
0xffff) * y) &
0xffff))) &
0xffff; // y ==
1/x mod
2^
16
934 // last step - calculate inverse mod DV directly
935 // assumes
16 < DB <=
32 and assumes ability to handle
48-bit ints
936 y = (y * (
2 - x * y % this.DV)) % this.DV; // y ==
1/x mod
2^dbits
937 // we really want the negative inverse, and -DV < y < DV
938 return (y
> 0) ? this.DV - y : -y
941 // Montgomery reduction
942 function Montgomery(m) {
944 this.mp = m.invDigit()
945 this.mpl = this.mp &
0x7fff
946 this.mph = this.mp
>> 15
947 this.um = (
1 << (m.DB -
15)) -
1
952 function montConvert(x) {
953 var r = new BigInteger()
955 .dlShiftTo(this.m.t, r)
956 r.divRemTo(this.m, null, r)
957 if (x.s <
0 && r.compareTo(BigInteger.ZERO)
> 0) this.m.subTo(r, r)
962 function montRevert(x) {
963 var r = new BigInteger()
969 // x = x/R mod m (HAC
14.32)
970 function montReduce(x) {
971 while (x.t <= this.mt2) // pad x so am has enough room later
973 for (var i =
0; i < this.m.t; ++i) {
974 // faster way of calculating u0 = x[i]*mp mod DV
975 var j = x[i] &
0x7fff
976 var u0 = (j * this.mpl + (((j * this.mph + (x[i]
>> 15) * this.mpl) & this.um) <<
15)) & x.DM
977 // use am to combine the multiply-shift-add into one call
979 x[j] += this.m.am(
0, u0, x, i,
0, this.m.t)
981 while (x[j]
>= x.DV) {
987 x.drShiftTo(this.m.t, x)
988 if (x.compareTo(this.m)
>=
0) x.subTo(this.m, x)
991 // r = "x^
2/R mod m"; x != r
992 function montSqrTo(x, r) {
997 // r = "xy/R mod m"; x,y != r
998 function montMulTo(x, y, r) {
1003 Montgomery.prototype.convert = montConvert
1004 Montgomery.prototype.revert = montRevert
1005 Montgomery.prototype.reduce = montReduce
1006 Montgomery.prototype.mulTo = montMulTo
1007 Montgomery.prototype.sqrTo = montSqrTo
1009 // (protected) true iff this is even
1010 function bnpIsEven() {
1011 return ((this.t
> 0) ? (this[
0] &
1) : this.s) ==
0
1014 // (protected) this^e, e <
2^
32, doing sqr and mul with
"r" (HAC
14.79)
1015 function bnpExp(e, z) {
1016 if (e
> 0xffffffff || e <
1) return BigInteger.ONE
1017 var r = new BigInteger(),
1018 r2 = new BigInteger(),
1019 g = z.convert(this),
1024 if ((e & (
1 << i))
> 0) z.mulTo(r2, g, r)
1034 // (public) this^e % m,
0 <= e <
2^
32
1035 function bnModPowInt(e, m) {
1037 if (e <
256 || m.isEven()) z = new Classic(m)
1038 else z = new Montgomery(m)
1039 return this.exp(e, z)
1043 proto.copyTo = bnpCopyTo
1044 proto.fromInt = bnpFromInt
1045 proto.fromString = bnpFromString
1046 proto.clamp = bnpClamp
1047 proto.dlShiftTo = bnpDLShiftTo
1048 proto.drShiftTo = bnpDRShiftTo
1049 proto.lShiftTo = bnpLShiftTo
1050 proto.rShiftTo = bnpRShiftTo
1051 proto.subTo = bnpSubTo
1052 proto.multiplyTo = bnpMultiplyTo
1053 proto.squareTo = bnpSquareTo
1054 proto.divRemTo = bnpDivRemTo
1055 proto.invDigit = bnpInvDigit
1056 proto.isEven = bnpIsEven
1060 proto.toString = bnToString
1061 proto.negate = bnNegate
1063 proto.compareTo = bnCompareTo
1064 proto.bitLength = bnBitLength
1065 proto.byteLength = bnByteLength
1067 proto.modPowInt = bnModPowInt
1070 function bnClone() {
1071 var r = new BigInteger()
1076 // (public) return value as integer
1077 function bnIntValue() {
1079 if (this.t ==
1) return this[
0] - this.DV
1080 else if (this.t ==
0) return -
1
1081 } else if (this.t ==
1) return this[
0]
1082 else if (this.t ==
0) return
0
1083 // assumes
16 < DB <
32
1084 return ((this[
1] & ((
1 << (
32 - this.DB)) -
1)) << this.DB) | this[
0]
1087 // (public) return value as byte
1088 function bnByteValue() {
1089 return (this.t ==
0) ? this.s : (this[
0] <<
24)
>> 24
1092 // (public) return value as short (assumes DB
>=
16)
1093 function bnShortValue() {
1094 return (this.t ==
0) ? this.s : (this[
0] <<
16)
>> 16
1097 // (protected) return x s.t. r^x < DV
1098 function bnpChunkSize(r) {
1099 return Math.floor(Math.LN2 * this.DB / Math.log(r))
1102 // (public)
0 if this ==
0,
1 if this
> 0
1103 function bnSigNum() {
1104 if (this.s <
0) return -
1
1105 else if (this.t <=
0 || (this.t ==
1 && this[
0] <=
0)) return
0
1109 // (protected) convert to radix string
1110 function bnpToRadix(b) {
1111 if (b == null) b =
10
1112 if (this.signum() ==
0 || b <
2 || b
> 36) return
"0"
1113 var cs = this.chunkSize(b)
1114 var a = Math.pow(b, cs)
1116 y = new BigInteger(),
1117 z = new BigInteger(),
1119 this.divRemTo(d, y, z)
1120 while (y.signum()
> 0) {
1121 r = (a + z.intValue())
1130 // (protected) convert from radix string
1131 function bnpFromRadix(s, b) {
1134 if (b == null) b =
10
1135 var cs = self.chunkSize(b)
1136 var d = Math.pow(b, cs),
1140 for (var i =
0; i < s.length; ++i) {
1143 if (s.charAt(i) ==
"-" && self.signum() ==
0) mi = true
1149 self.dAddOffset(w,
0)
1155 self.dMultiply(Math.pow(b, j))
1156 self.dAddOffset(w,
0)
1158 if (mi) BigInteger.ZERO.subTo(self, self)
1161 // (protected) alternate constructor
1162 function bnpFromNumber(a, b, c) {
1164 if (
"number" == typeof b) {
1165 // new BigInteger(int,int,RNG)
1166 if (a <
2) self.fromInt(
1)
1168 self.fromNumber(a, c)
1169 if (!self.testBit(a -
1)) // force MSB set
1170 self.bitwiseTo(BigInteger.ONE.shiftLeft(a -
1), op_or, self)
1171 if (self.isEven()) self.dAddOffset(
1,
0); // force odd
1172 while (!self.isProbablePrime(b)) {
1173 self.dAddOffset(
2,
0)
1174 if (self.bitLength()
> a) self.subTo(BigInteger.ONE.shiftLeft(a -
1), self)
1178 // new BigInteger(int,RNG)
1179 var x = new Array(),
1181 x.length = (a
>> 3) +
1
1183 if (t
> 0) x[
0] &= ((
1 << t) -
1)
1185 self.fromString(x,
256)
1189 // (public) convert to bigendian byte array
1190 function bnToByteArray() {
1195 var p = self.DB - (i * self.DB) %
8,
1198 if (p < self.DB && (d = self[i]
>> p) != (self.s & self.DM)
>> p)
1199 r[k++] = d | (self.s << (self.DB - p))
1202 d = (self[i] & ((
1 << p) -
1)) << (
8 - p)
1203 d |= self[--i]
>> (p += self.DB -
8)
1205 d = (self[i]
>> (p -=
8)) &
0xff
1211 if ((d &
0x80) !=
0) d |= -
256
1212 if (k ===
0 && (self.s &
0x80) != (d &
0x80))++k
1213 if (k
> 0 || d != self.s) r[k++] = d
1219 function bnEquals(a) {
1220 return (this.compareTo(a) ==
0)
1224 return (this.compareTo(a) <
0) ? this : a
1228 return (this.compareTo(a)
> 0) ? this : a
1231 // (protected) r = this op a (bitwise)
1232 function bnpBitwiseTo(a, op, r) {
1234 var i, f, m = Math.min(a.t, self.t)
1235 for (i =
0; i < m; ++i) r[i] = op(self[i], a[i])
1238 for (i = m; i < self.t; ++i) r[i] = op(self[i], f)
1241 f = self.s & self.DM
1242 for (i = m; i < a.t; ++i) r[i] = op(f, a[i])
1245 r.s = op(self.s, a.s)
1249 // (public) this & a
1250 function op_and(x, y) {
1255 var r = new BigInteger()
1256 this.bitwiseTo(a, op_and, r)
1260 // (public) this | a
1261 function op_or(x, y) {
1266 var r = new BigInteger()
1267 this.bitwiseTo(a, op_or, r)
1271 // (public) this ^ a
1272 function op_xor(x, y) {
1277 var r = new BigInteger()
1278 this.bitwiseTo(a, op_xor, r)
1282 // (public) this & ~a
1283 function op_andnot(x, y) {
1287 function bnAndNot(a) {
1288 var r = new BigInteger()
1289 this.bitwiseTo(a, op_andnot, r)
1295 var r = new BigInteger()
1296 for (var i =
0; i < this.t; ++i) r[i] = this.DM & ~this[i]
1302 // (public) this << n
1303 function bnShiftLeft(n) {
1304 var r = new BigInteger()
1305 if (n <
0) this.rShiftTo(-n, r)
1306 else this.lShiftTo(n, r)
1310 // (public) this
>> n
1311 function bnShiftRight(n) {
1312 var r = new BigInteger()
1313 if (n <
0) this.lShiftTo(-n, r)
1314 else this.rShiftTo(n, r)
1318 // return index of lowest
1-bit in x, x <
2^
31
1320 if (x ==
0) return -
1
1322 if ((x &
0xffff) ==
0) {
1326 if ((x &
0xff) ==
0) {
1330 if ((x &
0xf) ==
0) {
1338 if ((x &
1) ==
0)++r
1342 // (public) returns index of lowest
1-bit (or -
1 if none)
1343 function bnGetLowestSetBit() {
1344 for (var i =
0; i < this.t; ++i)
1345 if (this[i] !=
0) return i * this.DB + lbit(this[i])
1346 if (this.s <
0) return this.t * this.DB
1350 // return number of
1 bits in x
1360 // (public) return number of set bits
1361 function bnBitCount() {
1363 x = this.s & this.DM
1364 for (var i =
0; i < this.t; ++i) r += cbit(this[i] ^ x)
1368 // (public) true iff nth bit is set
1369 function bnTestBit(n) {
1370 var j = Math.floor(n / this.DB)
1371 if (j
>= this.t) return (this.s !=
0)
1372 return ((this[j] & (
1 << (n % this.DB))) !=
0)
1375 // (protected) this op (
1<
<n)
1376 function bnpChangeBit(n, op) {
1377 var r = BigInteger.ONE.shiftLeft(n)
1378 this.bitwiseTo(r, op, r)
1382 // (public) this | (
1<
<n)
1383 function bnSetBit(n) {
1384 return this.changeBit(n, op_or)
1387 // (public) this & ~(
1<
<n)
1388 function bnClearBit(n) {
1389 return this.changeBit(n, op_andnot)
1392 // (public) this ^ (
1<
<n)
1393 function bnFlipBit(n) {
1394 return this.changeBit(n, op_xor)
1397 // (protected) r = this + a
1398 function bnpAddTo(a, r) {
1403 m = Math.min(a.t, self.t)
1406 r[i++] = c & self.DM
1411 while (i < self.t) {
1413 r[i++] = c & self.DM
1421 r[i++] = c & self.DM
1426 r.s = (c <
0) ? -
1 :
0
1427 if (c
> 0) r[i++] = c
1428 else if (c < -
1) r[i++] = self.DV + c
1433 // (public) this + a
1435 var r = new BigInteger()
1440 // (public) this - a
1441 function bnSubtract(a) {
1442 var r = new BigInteger()
1447 // (public) this * a
1448 function bnMultiply(a) {
1449 var r = new BigInteger()
1450 this.multiplyTo(a, r)
1455 function bnSquare() {
1456 var r = new BigInteger()
1461 // (public) this / a
1462 function bnDivide(a) {
1463 var r = new BigInteger()
1464 this.divRemTo(a, r, null)
1468 // (public) this % a
1469 function bnRemainder(a) {
1470 var r = new BigInteger()
1471 this.divRemTo(a, null, r)
1475 // (public) [this/a,this%a]
1476 function bnDivideAndRemainder(a) {
1477 var q = new BigInteger(),
1478 r = new BigInteger()
1479 this.divRemTo(a, q, r)
1480 return new Array(q, r)
1483 // (protected) this *= n, this
>=
0,
1 < n < DV
1484 function bnpDMultiply(n) {
1485 this[this.t] = this.am(
0, n -
1, this,
0,
0, this.t)
1490 // (protected) this += n << w words, this
>=
0
1491 function bnpDAddOffset(n, w) {
1493 while (this.t <= w) this[this.t++] =
0
1495 while (this[w]
>= this.DV) {
1497 if (++w
>= this.t) this[this.t++] =
0
1503 function NullExp() {}
1509 function nMulTo(x, y, r) {
1513 function nSqrTo(x, r) {
1517 NullExp.prototype.convert = nNop
1518 NullExp.prototype.revert = nNop
1519 NullExp.prototype.mulTo = nMulTo
1520 NullExp.prototype.sqrTo = nSqrTo
1524 return this.exp(e, new NullExp())
1527 // (protected) r = lower n words of "this * a", a.t <= n
1528 // "this" should be the larger one if appropriate.
1529 function bnpMultiplyLowerTo(a, n, r) {
1530 var i = Math.min(this.t + a.t, n)
1531 r.s =
0; // assumes a,this
>=
0
1533 while (i
> 0) r[--i] =
0
1535 for (j = r.t - this.t; i < j; ++i) r[i + this.t] = this.am(
0, a[i], r, i,
0, this.t)
1536 for (j = Math.min(a.t, n); i < j; ++i) this.am(
0, a[i], r, i,
0, n - i)
1540 // (protected) r =
"this * a" without lower n words, n
> 0
1541 //
"this" should be the larger one if appropriate.
1542 function bnpMultiplyUpperTo(a, n, r) {
1544 var i = r.t = this.t + a.t - n
1545 r.s =
0; // assumes a,this
>=
0
1546 while (--i
>=
0) r[i] =
0
1547 for (i = Math.max(n - this.t,
0); i < a.t; ++i)
1548 r[this.t + i - n] = this.am(n - i, a[i], r,
0,
0, this.t + i - n)
1553 // Barrett modular reduction
1554 function Barrett(m) {
1556 this.r2 = new BigInteger()
1557 this.q3 = new BigInteger()
1558 BigInteger.ONE.dlShiftTo(
2 * m.t, this.r2)
1559 this.mu = this.r2.divide(m)
1563 function barrettConvert(x) {
1564 if (x.s <
0 || x.t
> 2 * this.m.t) return x.mod(this.m)
1565 else if (x.compareTo(this.m) <
0) return x
1567 var r = new BigInteger()
1574 function barrettRevert(x) {
1578 // x = x mod m (HAC
14.42)
1579 function barrettReduce(x) {
1581 x.drShiftTo(self.m.t -
1, self.r2)
1582 if (x.t
> self.m.t +
1) {
1586 self.mu.multiplyUpperTo(self.r2, self.m.t +
1, self.q3)
1587 self.m.multiplyLowerTo(self.q3, self.m.t +
1, self.r2)
1588 while (x.compareTo(self.r2) <
0) x.dAddOffset(
1, self.m.t +
1)
1590 while (x.compareTo(self.m)
>=
0) x.subTo(self.m, x)
1593 // r = x^
2 mod m; x != r
1594 function barrettSqrTo(x, r) {
1599 // r = x*y mod m; x,y != r
1600 function barrettMulTo(x, y, r) {
1605 Barrett.prototype.convert = barrettConvert
1606 Barrett.prototype.revert = barrettRevert
1607 Barrett.prototype.reduce = barrettReduce
1608 Barrett.prototype.mulTo = barrettMulTo
1609 Barrett.prototype.sqrTo = barrettSqrTo
1611 // (public) this^e % m (HAC
14.85)
1612 function bnModPow(e, m) {
1613 var i = e.bitLength(),
1616 if (i <=
0) return r
1617 else if (i <
18) k =
1
1618 else if (i <
48) k =
3
1619 else if (i <
144) k =
4
1620 else if (i <
768) k =
5
1624 else if (m.isEven())
1627 z = new Montgomery(m)
1630 var g = new Array(),
1634 g[
1] = z.convert(this)
1636 var g2 = new BigInteger()
1639 g[n] = new BigInteger()
1640 z.mulTo(g2, g[n -
2], g[n])
1647 r2 = new BigInteger(),
1651 if (i
>= k1) w = (e[j]
>> (i - k1)) & km
1653 w = (e[j] & ((
1 << (i +
1)) -
1)) << (k1 - i)
1654 if (j
> 0) w |= e[j -
1]
>> (this.DB + i - k1)
1658 while ((w &
1) ==
0) {
1666 if (is1) { // ret ==
1, don't bother squaring or multiplying it
1675 if (n
> 0) z.sqrTo(r, r2)
1681 z.mulTo(r2, g[w], r)
1684 while (j
>=
0 && (e[j] & (
1 << i)) ==
0) {
1698 // (public) gcd(this,a) (HAC
14.54)
1700 var x = (this.s <
0) ? this.negate() : this.clone()
1701 var y = (a.s <
0) ? a.negate() : a.clone()
1702 if (x.compareTo(y) <
0) {
1707 var i = x.getLowestSetBit(),
1708 g = y.getLowestSetBit()
1715 while (x.signum()
> 0) {
1716 if ((i = x.getLowestSetBit())
> 0) x.rShiftTo(i, x)
1717 if ((i = y.getLowestSetBit())
> 0) y.rShiftTo(i, y)
1718 if (x.compareTo(y)
>=
0) {
1726 if (g
> 0) y.lShiftTo(g, y)
1730 // (protected) this % n, n <
2^
26
1731 function bnpModInt(n) {
1732 if (n <=
0) return
0
1733 var d = this.DV % n,
1734 r = (this.s <
0) ? n -
1 :
0
1736 if (d ==
0) r = this[
0] % n
1738 for (var i = this.t -
1; i
>=
0; --i) r = (d * r + this[i]) % n
1742 // (public)
1/this % m (HAC
14.61)
1743 function bnModInverse(m) {
1745 if ((this.isEven() && ac) || m.signum() ==
0) return BigInteger.ZERO
1752 while (u.signum() !=
0) {
1753 while (u.isEven()) {
1756 if (!a.isEven() || !b.isEven()) {
1761 } else if (!b.isEven()) b.subTo(m, b)
1764 while (v.isEven()) {
1767 if (!c.isEven() || !d.isEven()) {
1772 } else if (!d.isEven()) d.subTo(m, d)
1775 if (u.compareTo(v)
>=
0) {
1777 if (ac) a.subTo(c, a)
1781 if (ac) c.subTo(a, c)
1785 if (v.compareTo(BigInteger.ONE) !=
0) return BigInteger.ZERO
1786 if (d.compareTo(m)
>=
0) return d.subtract(m)
1787 if (d.signum() <
0) d.addTo(m, d)
1789 if (d.signum() <
0) return d.add(m)
1794 2,
3,
5,
7,
11,
13,
17,
19,
23,
29,
31,
37,
41,
43,
47,
53,
59,
61,
67,
71,
1795 73,
79,
83,
89,
97,
101,
103,
107,
109,
113,
127,
131,
137,
139,
149,
151,
1796 157,
163,
167,
173,
179,
181,
191,
193,
197,
199,
211,
223,
227,
229,
233,
1797 239,
241,
251,
257,
263,
269,
271,
277,
281,
283,
293,
307,
311,
313,
317,
1798 331,
337,
347,
349,
353,
359,
367,
373,
379,
383,
389,
397,
401,
409,
419,
1799 421,
431,
433,
439,
443,
449,
457,
461,
463,
467,
479,
487,
491,
499,
503,
1800 509,
521,
523,
541,
547,
557,
563,
569,
571,
577,
587,
593,
599,
601,
607,
1801 613,
617,
619,
631,
641,
643,
647,
653,
659,
661,
673,
677,
683,
691,
701,
1802 709,
719,
727,
733,
739,
743,
751,
757,
761,
769,
773,
787,
797,
809,
811,
1803 821,
823,
827,
829,
839,
853,
857,
859,
863,
877,
881,
883,
887,
907,
911,
1804 919,
929,
937,
941,
947,
953,
967,
971,
977,
983,
991,
997
1807 var lplim = (
1 <<
26) / lowprimes[lowprimes.length -
1]
1809 // (public) test primality with certainty
>=
1-
.5^t
1810 function bnIsProbablePrime(t) {
1811 var i, x = this.abs()
1812 if (x.t ==
1 && x[
0] <= lowprimes[lowprimes.length -
1]) {
1813 for (i =
0; i < lowprimes.length; ++i)
1814 if (x[
0] == lowprimes[i]) return true
1817 if (x.isEven()) return false
1819 while (i < lowprimes.length) {
1820 var m = lowprimes[i],
1822 while (j < lowprimes.length && m < lplim) m *= lowprimes[j++]
1824 while (i < j) if (m % lowprimes[i++] ==
0) return false
1826 return x.millerRabin(t)
1829 // (protected) true if probably prime (HAC
4.24, Miller-Rabin)
1830 function bnpMillerRabin(t) {
1831 var n1 = this.subtract(BigInteger.ONE)
1832 var k = n1.getLowestSetBit()
1833 if (k <=
0) return false
1834 var r = n1.shiftRight(k)
1836 if (t
> lowprimes.length) t = lowprimes.length
1837 var a = new BigInteger(null)
1839 for (var i =
0; i < t; ++i) {
1841 j = lowprimes[Math.floor(Math.random() * lowprimes.length)]
1842 if (bases.indexOf(j) == -
1) break
1846 var y = a.modPow(r, this)
1847 if (y.compareTo(BigInteger.ONE) !=
0 && y.compareTo(n1) !=
0) {
1849 while (j++ < k && y.compareTo(n1) !=
0) {
1850 y = y.modPowInt(
2, this)
1851 if (y.compareTo(BigInteger.ONE) ==
0) return false
1853 if (y.compareTo(n1) !=
0) return false
1860 proto.chunkSize = bnpChunkSize
1861 proto.toRadix = bnpToRadix
1862 proto.fromRadix = bnpFromRadix
1863 proto.fromNumber = bnpFromNumber
1864 proto.bitwiseTo = bnpBitwiseTo
1865 proto.changeBit = bnpChangeBit
1866 proto.addTo = bnpAddTo
1867 proto.dMultiply = bnpDMultiply
1868 proto.dAddOffset = bnpDAddOffset
1869 proto.multiplyLowerTo = bnpMultiplyLowerTo
1870 proto.multiplyUpperTo = bnpMultiplyUpperTo
1871 proto.modInt = bnpModInt
1872 proto.millerRabin = bnpMillerRabin
1875 proto.clone = bnClone
1876 proto.intValue = bnIntValue
1877 proto.byteValue = bnByteValue
1878 proto.shortValue = bnShortValue
1879 proto.signum = bnSigNum
1880 proto.toByteArray = bnToByteArray
1881 proto.equals = bnEquals
1887 proto.andNot = bnAndNot
1889 proto.shiftLeft = bnShiftLeft
1890 proto.shiftRight = bnShiftRight
1891 proto.getLowestSetBit = bnGetLowestSetBit
1892 proto.bitCount = bnBitCount
1893 proto.testBit = bnTestBit
1894 proto.setBit = bnSetBit
1895 proto.clearBit = bnClearBit
1896 proto.flipBit = bnFlipBit
1898 proto.subtract = bnSubtract
1899 proto.multiply = bnMultiply
1900 proto.divide = bnDivide
1901 proto.remainder = bnRemainder
1902 proto.divideAndRemainder = bnDivideAndRemainder
1903 proto.modPow = bnModPow
1904 proto.modInverse = bnModInverse
1907 proto.isProbablePrime = bnIsProbablePrime
1909 // JSBN-specific extension
1910 proto.square = bnSquare
1913 BigInteger.ZERO = nbv(
0)
1914 BigInteger.ONE = nbv(
1)
1915 BigInteger.valueOf = nbv
1917 module.exports = BigInteger
1919 },{"../package.json":
4}],
2:[function(require,module,exports){
1921 // FIXME: Kind of a weird way to throw exceptions, consider removing
1922 var assert = require('assert')
1923 var BigInteger = require('./bigi')
1926 * Turns a byte array into a big integer.
1928 * This function will interpret a byte array as a big integer in big
1931 BigInteger.fromByteArrayUnsigned = function(byteArray) {
1932 // BigInteger expects a DER integer conformant byte array
1933 if (byteArray[
0] &
0x80) {
1934 return new BigInteger([
0].concat(byteArray))
1937 return new BigInteger(byteArray)
1941 * Returns a byte array representation of the big integer.
1943 * This returns the absolute of the contained value in big endian
1944 * form. A value of zero results in an empty array.
1946 BigInteger.prototype.toByteArrayUnsigned = function() {
1947 var byteArray = this.toByteArray()
1948 return byteArray[
0] ===
0 ? byteArray.slice(
1) : byteArray
1951 BigInteger.fromDERInteger = function(byteArray) {
1952 return new BigInteger(byteArray)
1956 * Converts BigInteger to a DER integer representation.
1958 * The format for this value uses the most significant bit as a sign
1959 * bit. If the most significant bit is already set and the integer is
1960 * positive, a
0x00 is prepended.
1976 * -
62300 =
> 0xff0ca4
1978 BigInteger.prototype.toDERInteger = BigInteger.prototype.toByteArray
1980 BigInteger.fromBuffer = function(buffer) {
1981 // BigInteger expects a DER integer conformant byte array
1982 if (buffer[
0] &
0x80) {
1983 var byteArray = Array.prototype.slice.call(buffer)
1985 return new BigInteger([
0].concat(byteArray))
1988 return new BigInteger(buffer)
1991 BigInteger.fromHex = function(hex) {
1992 if (hex === '') return BigInteger.ZERO
1994 assert.equal(hex, hex.match(/^[A-Fa-f0-
9]+/), 'Invalid hex string')
1995 assert.equal(hex.length %
2,
0, 'Incomplete hex')
1996 return new BigInteger(hex,
16)
1999 BigInteger.prototype.toBuffer = function(size) {
2000 var byteArray = this.toByteArrayUnsigned()
2003 var padding = size - byteArray.length
2004 while (zeros.length < padding) zeros.push(
0)
2006 return new Buffer(zeros.concat(byteArray))
2009 BigInteger.prototype.toHex = function(size) {
2010 return this.toBuffer(size).toString('hex')
2013 }).call(this,require(
"buffer").Buffer)
2014 },{
"./bigi":
1,
"assert":
5,
"buffer":
7}],
3:[function(require,module,exports){
2015 var BigInteger = require('./bigi')
2018 require('./convert')
2020 module.exports = BigInteger
2021 },{
"./bigi":
1,
"./convert":
2}],
4:[function(require,module,exports){
2025 "description":
"Big integers.",
2043 "devDependencies": {
2046 "coveralls":
"^2.10.0",
2047 "istanbul":
"^0.2.11"
2050 "url":
"https://github.com/cryptocoinjs/bigi",
2053 "main":
"./lib/index.js",
2055 "test":
"_mocha -- test/*.js",
2056 "jshint":
"jshint --config jshint.json lib/*.js ; true",
2058 "coverage":
"istanbul cover ./node_modules/.bin/_mocha -- --reporter list test/*.js",
2059 "coveralls":
"npm run-script coverage && node ./node_modules/.bin/coveralls < coverage/lcov.info"
2063 "files":
"test/*.js",
2069 "safari/6.0..latest",
2070 "iphone/6.0..latest",
2071 "android-browser/4.2..latest"
2075 "url":
"https://github.com/cryptocoinjs/bigi/issues"
2077 "homepage":
"https://github.com/cryptocoinjs/bigi",
2078 "_id":
"bigi@1.4.0",
2080 "shasum":
"90ac1aeac0a531216463bdb58f42c1e05c8407ac",
2081 "tarball":
"http://registry.npmjs.org/bigi/-/bigi-1.4.0.tgz"
2083 "_from":
"bigi@^1.4.0",
2084 "_npmVersion":
"1.4.3",
2087 "email":
"jprichardson@gmail.com"
2092 "email":
"jprichardson@gmail.com"
2095 "name":
"midnightlightning",
2096 "email":
"boydb@midnightdesign.ws"
2099 "name":
"sidazhang",
2100 "email":
"sidazhang89@gmail.com"
2104 "email":
"npm@shesek.info"
2108 "_shasum":
"90ac1aeac0a531216463bdb58f42c1e05c8407ac",
2109 "_resolved":
"https://registry.npmjs.org/bigi/-/bigi-1.4.0.tgz"
2112 },{}],
5:[function(require,module,exports){
2113 // http://wiki.commonjs.org/wiki/Unit_Testing/
1.0
2115 // THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!
2117 // Originally from narwhal.js (http://narwhaljs.org)
2118 // Copyright (c)
2009 Thomas Robinson
<280north.com
>
2120 // Permission is hereby granted, free of charge, to any person obtaining a copy
2121 // of this software and associated documentation files (the 'Software'), to
2122 // deal in the Software without restriction, including without limitation the
2123 // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
2124 // sell copies of the Software, and to permit persons to whom the Software is
2125 // furnished to do so, subject to the following conditions:
2127 // The above copyright notice and this permission notice shall be included in
2128 // all copies or substantial portions of the Software.
2130 // THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
2131 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
2132 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
2133 // AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
2134 // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
2135 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
2137 // when used in node, this will actually load the util module we depend on
2138 // versus loading the builtin util module as happens otherwise
2139 // this is a bug in node module loading as far as I am concerned
2140 var util = require('util/');
2142 var pSlice = Array.prototype.slice;
2143 var hasOwn = Object.prototype.hasOwnProperty;
2145 //
1. The assert module provides functions that throw
2146 // AssertionError's when particular conditions are not met. The
2147 // assert module must conform to the following interface.
2149 var assert = module.exports = ok;
2151 //
2. The AssertionError is defined in assert.
2152 // new assert.AssertionError({ message: message,
2154 // expected: expected })
2156 assert.AssertionError = function AssertionError(options) {
2157 this.name = 'AssertionError';
2158 this.actual = options.actual;
2159 this.expected = options.expected;
2160 this.operator = options.operator;
2161 if (options.message) {
2162 this.message = options.message;
2163 this.generatedMessage = false;
2165 this.message = getMessage(this);
2166 this.generatedMessage = true;
2168 var stackStartFunction = options.stackStartFunction || fail;
2170 if (Error.captureStackTrace) {
2171 Error.captureStackTrace(this, stackStartFunction);
2174 // non v8 browsers so we can have a stacktrace
2175 var err = new Error();
2177 var out = err.stack;
2179 // try to strip useless frames
2180 var fn_name = stackStartFunction.name;
2181 var idx = out.indexOf('\n' + fn_name);
2183 // once we have located the function frame
2184 // we need to strip out everything before it (and its line)
2185 var next_line = out.indexOf('\n', idx +
1);
2186 out = out.substring(next_line +
1);
2194 // assert.AssertionError instanceof Error
2195 util.inherits(assert.AssertionError, Error);
2197 function replacer(key, value) {
2198 if (util.isUndefined(value)) {
2201 if (util.isNumber(value) && !isFinite(value)) {
2202 return value.toString();
2204 if (util.isFunction(value) || util.isRegExp(value)) {
2205 return value.toString();
2210 function truncate(s, n) {
2211 if (util.isString(s)) {
2212 return s.length < n ? s : s.slice(
0, n);
2218 function getMessage(self) {
2219 return truncate(JSON.stringify(self.actual, replacer),
128) + ' ' +
2220 self.operator + ' ' +
2221 truncate(JSON.stringify(self.expected, replacer),
128);
2224 // At present only the three keys mentioned above are used and
2225 // understood by the spec. Implementations or sub modules can pass
2226 // other keys to the AssertionError's constructor - they will be
2229 //
3. All of the following functions must throw an AssertionError
2230 // when a corresponding condition is not met, with a message that
2231 // may be undefined if not provided. All assertion methods provide
2232 // both the actual and expected values to the assertion error for
2233 // display purposes.
2235 function fail(actual, expected, message, operator, stackStartFunction) {
2236 throw new assert.AssertionError({
2241 stackStartFunction: stackStartFunction
2245 // EXTENSION! allows for well behaved errors defined elsewhere.
2248 //
4. Pure assertion tests whether a value is truthy, as determined
2250 // assert.ok(guard, message_opt);
2251 // This statement is equivalent to assert.equal(true, !!guard,
2252 // message_opt);. To test strictly for the value true, use
2253 // assert.strictEqual(true, guard, message_opt);.
2255 function ok(value, message) {
2256 if (!value) fail(value, true, message, '==', assert.ok);
2260 //
5. The equality assertion tests shallow, coercive equality with
2262 // assert.equal(actual, expected, message_opt);
2264 assert.equal = function equal(actual, expected, message) {
2265 if (actual != expected) fail(actual, expected, message, '==', assert.equal);
2268 //
6. The non-equality assertion tests for whether two objects are not equal
2269 // with != assert.notEqual(actual, expected, message_opt);
2271 assert.notEqual = function notEqual(actual, expected, message) {
2272 if (actual == expected) {
2273 fail(actual, expected, message, '!=', assert.notEqual);
2277 //
7. The equivalence assertion tests a deep equality relation.
2278 // assert.deepEqual(actual, expected, message_opt);
2280 assert.deepEqual = function deepEqual(actual, expected, message) {
2281 if (!_deepEqual(actual, expected)) {
2282 fail(actual, expected, message, 'deepEqual', assert.deepEqual);
2286 function _deepEqual(actual, expected) {
2287 //
7.1. All identical values are equivalent, as determined by ===.
2288 if (actual === expected) {
2291 } else if (util.isBuffer(actual) && util.isBuffer(expected)) {
2292 if (actual.length != expected.length) return false;
2294 for (var i =
0; i < actual.length; i++) {
2295 if (actual[i] !== expected[i]) return false;
2300 //
7.2. If the expected value is a Date object, the actual value is
2301 // equivalent if it is also a Date object that refers to the same time.
2302 } else if (util.isDate(actual) && util.isDate(expected)) {
2303 return actual.getTime() === expected.getTime();
2305 //
7.3 If the expected value is a RegExp object, the actual value is
2306 // equivalent if it is also a RegExp object with the same source and
2307 // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).
2308 } else if (util.isRegExp(actual) && util.isRegExp(expected)) {
2309 return actual.source === expected.source &&
2310 actual.global === expected.global &&
2311 actual.multiline === expected.multiline &&
2312 actual.lastIndex === expected.lastIndex &&
2313 actual.ignoreCase === expected.ignoreCase;
2315 //
7.4. Other pairs that do not both pass typeof value == 'object',
2316 // equivalence is determined by ==.
2317 } else if (!util.isObject(actual) && !util.isObject(expected)) {
2318 return actual == expected;
2320 //
7.5 For all other Object pairs, including Array objects, equivalence is
2321 // determined by having the same number of owned properties (as verified
2322 // with Object.prototype.hasOwnProperty.call), the same set of keys
2323 // (although not necessarily the same order), equivalent values for every
2324 // corresponding key, and an identical 'prototype' property. Note: this
2325 // accounts for both named and indexed properties on Arrays.
2327 return objEquiv(actual, expected);
2331 function isArguments(object) {
2332 return Object.prototype.toString.call(object) == '[object Arguments]';
2335 function objEquiv(a, b) {
2336 if (util.isNullOrUndefined(a) || util.isNullOrUndefined(b))
2338 // an identical 'prototype' property.
2339 if (a.prototype !== b.prototype) return false;
2340 // if one is a primitive, the other must be same
2341 if (util.isPrimitive(a) || util.isPrimitive(b)) {
2344 var aIsArgs = isArguments(a),
2345 bIsArgs = isArguments(b);
2346 if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))
2351 return _deepEqual(a, b);
2353 var ka = objectKeys(a),
2356 // having the same number of owned properties (keys incorporates
2358 if (ka.length != kb.length)
2360 //the same set of keys (although not necessarily the same order),
2364 for (i = ka.length -
1; i
>=
0; i--) {
2368 //equivalent values for every corresponding key, and
2369 //~~~possibly expensive deep test
2370 for (i = ka.length -
1; i
>=
0; i--) {
2372 if (!_deepEqual(a[key], b[key])) return false;
2377 //
8. The non-equivalence assertion tests for any deep inequality.
2378 // assert.notDeepEqual(actual, expected, message_opt);
2380 assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
2381 if (_deepEqual(actual, expected)) {
2382 fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
2386 //
9. The strict equality assertion tests strict equality, as determined by ===.
2387 // assert.strictEqual(actual, expected, message_opt);
2389 assert.strictEqual = function strictEqual(actual, expected, message) {
2390 if (actual !== expected) {
2391 fail(actual, expected, message, '===', assert.strictEqual);
2395 //
10. The strict non-equality assertion tests for strict inequality, as
2396 // determined by !==. assert.notStrictEqual(actual, expected, message_opt);
2398 assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
2399 if (actual === expected) {
2400 fail(actual, expected, message, '!==', assert.notStrictEqual);
2404 function expectedException(actual, expected) {
2405 if (!actual || !expected) {
2409 if (Object.prototype.toString.call(expected) == '[object RegExp]') {
2410 return expected.test(actual);
2411 } else if (actual instanceof expected) {
2413 } else if (expected.call({}, actual) === true) {
2420 function _throws(shouldThrow, block, expected, message) {
2423 if (util.isString(expected)) {
2434 message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
2435 (message ? ' ' + message : '.');
2437 if (shouldThrow && !actual) {
2438 fail(actual, expected, 'Missing expected exception' + message);
2441 if (!shouldThrow && expectedException(actual, expected)) {
2442 fail(actual, expected, 'Got unwanted exception' + message);
2445 if ((shouldThrow && actual && expected &&
2446 !expectedException(actual, expected)) || (!shouldThrow && actual)) {
2451 //
11. Expected to throw an error:
2452 // assert.throws(block, Error_opt, message_opt);
2454 assert.throws = function(block, /*optional*/error, /*optional*/message) {
2455 _throws.apply(this, [true].concat(pSlice.call(arguments)));
2458 // EXTENSION! This is annoying to write outside this module.
2459 assert.doesNotThrow = function(block, /*optional*/message) {
2460 _throws.apply(this, [false].concat(pSlice.call(arguments)));
2463 assert.ifError = function(err) { if (err) {throw err;}};
2465 var objectKeys = Object.keys || function (obj) {
2467 for (var key in obj) {
2468 if (hasOwn.call(obj, key)) keys.push(key);
2473 },{"util/":
29}],
6:[function(require,module,exports){
2475 },{}],
7:[function(require,module,exports){
2477 * The buffer module from node.js, for the browser.
2479 * @author Feross Aboukhadijeh
<feross@feross.org
> <http://feross.org
>
2483 var base64 = require('base64-js')
2484 var ieee754 = require('ieee754')
2485 var isArray = require('is-array')
2487 exports.Buffer = Buffer
2488 exports.SlowBuffer = SlowBuffer
2489 exports.INSPECT_MAX_BYTES =
50
2490 Buffer.poolSize =
8192 // not used by this implementation
2495 * If `Buffer.TYPED_ARRAY_SUPPORT`:
2496 * === true Use Uint8Array implementation (fastest)
2497 * === false Use Object implementation (most compatible, even IE6)
2499 * Browsers that support typed arrays are IE
10+, Firefox
4+, Chrome
7+, Safari
5.1+,
2500 * Opera
11.6+, iOS
4.2+.
2502 * Due to various browser bugs, sometimes the Object implementation will be used even
2503 * when the browser supports typed arrays.
2507 * - Firefox
4-
29 lacks support for adding new properties to `Uint8Array` instances,
2508 * See: https://bugzilla.mozilla.org/show_bug.cgi?id=
695438.
2510 * - Safari
5-
7 lacks support for changing the `Object.prototype.constructor` property
2513 * - Chrome
9-
10 is missing the `TypedArray.prototype.subarray` function.
2515 * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of
2516 * incorrect length in some situations.
2518 * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they
2519 * get the Object implementation, which is slower but behaves correctly.
2521 Buffer.TYPED_ARRAY_SUPPORT = (function () {
2524 var arr = new Uint8Array(
1)
2525 arr.foo = function () { return
42 }
2526 arr.constructor = Bar
2527 return arr.foo() ===
42 && // typed array instances can be augmented
2528 arr.constructor === Bar && // constructor can be set
2529 typeof arr.subarray === 'function' && // chrome
9-
10 lack `subarray`
2530 arr.subarray(
1,
1).byteLength ===
0 // ie10 has broken `subarray`
2536 function kMaxLength () {
2537 return Buffer.TYPED_ARRAY_SUPPORT
2546 * The Buffer constructor returns instances of `Uint8Array` that are augmented
2547 * with function properties for all the node `Buffer` API functions. We use
2548 * `Uint8Array` so that square bracket notation works as expected -- it returns
2551 * By augmenting the instances, we can avoid modifying the `Uint8Array`
2554 function Buffer (arg) {
2555 if (!(this instanceof Buffer)) {
2556 // Avoid going through an ArgumentsAdaptorTrampoline in the common case.
2557 if (arguments.length
> 1) return new Buffer(arg, arguments[
1])
2558 return new Buffer(arg)
2562 this.parent = undefined
2565 if (typeof arg === 'number') {
2566 return fromNumber(this, arg)
2569 // Slightly less common case.
2570 if (typeof arg === 'string') {
2571 return fromString(this, arg, arguments.length
> 1 ? arguments[
1] : 'utf8')
2575 return fromObject(this, arg)
2578 function fromNumber (that, length) {
2579 that = allocate(that, length <
0 ?
0 : checked(length) |
0)
2580 if (!Buffer.TYPED_ARRAY_SUPPORT) {
2581 for (var i =
0; i < length; i++) {
2588 function fromString (that, string, encoding) {
2589 if (typeof encoding !== 'string' || encoding === '') encoding = 'utf8'
2591 // Assumption: byteLength() return value is always < kMaxLength.
2592 var length = byteLength(string, encoding) |
0
2593 that = allocate(that, length)
2595 that.write(string, encoding)
2599 function fromObject (that, object) {
2600 if (Buffer.isBuffer(object)) return fromBuffer(that, object)
2602 if (isArray(object)) return fromArray(that, object)
2604 if (object == null) {
2605 throw new TypeError('must start with number, buffer, array or string')
2608 if (typeof ArrayBuffer !== 'undefined') {
2609 if (object.buffer instanceof ArrayBuffer) {
2610 return fromTypedArray(that, object)
2612 if (object instanceof ArrayBuffer) {
2613 return fromArrayBuffer(that, object)
2617 if (object.length) return fromArrayLike(that, object)
2619 return fromJsonObject(that, object)
2622 function fromBuffer (that, buffer) {
2623 var length = checked(buffer.length) |
0
2624 that = allocate(that, length)
2625 buffer.copy(that,
0,
0, length)
2629 function fromArray (that, array) {
2630 var length = checked(array.length) |
0
2631 that = allocate(that, length)
2632 for (var i =
0; i < length; i +=
1) {
2633 that[i] = array[i] &
255
2638 // Duplicate of fromArray() to keep fromArray() monomorphic.
2639 function fromTypedArray (that, array) {
2640 var length = checked(array.length) |
0
2641 that = allocate(that, length)
2642 // Truncating the elements is probably not what people expect from typed
2643 // arrays with BYTES_PER_ELEMENT
> 1 but it's compatible with the behavior
2644 // of the old Buffer constructor.
2645 for (var i =
0; i < length; i +=
1) {
2646 that[i] = array[i] &
255
2651 function fromArrayBuffer (that, array) {
2652 if (Buffer.TYPED_ARRAY_SUPPORT) {
2653 // Return an augmented `Uint8Array` instance, for best performance
2655 that = Buffer._augment(new Uint8Array(array))
2657 // Fallback: Return an object instance of the Buffer class
2658 that = fromTypedArray(that, new Uint8Array(array))
2663 function fromArrayLike (that, array) {
2664 var length = checked(array.length) |
0
2665 that = allocate(that, length)
2666 for (var i =
0; i < length; i +=
1) {
2667 that[i] = array[i] &
255
2672 // Deserialize { type: 'Buffer', data: [
1,
2,
3,...] } into a Buffer object.
2673 // Returns a zero-length buffer for inputs that don't conform to the spec.
2674 function fromJsonObject (that, object) {
2678 if (object.type === 'Buffer' && isArray(object.data)) {
2680 length = checked(array.length) |
0
2682 that = allocate(that, length)
2684 for (var i =
0; i < length; i +=
1) {
2685 that[i] = array[i] &
255
2690 function allocate (that, length) {
2691 if (Buffer.TYPED_ARRAY_SUPPORT) {
2692 // Return an augmented `Uint8Array` instance, for best performance
2693 that = Buffer._augment(new Uint8Array(length))
2695 // Fallback: Return an object instance of the Buffer class
2696 that.length = length
2697 that._isBuffer = true
2700 var fromPool = length !==
0 && length <= Buffer.poolSize
>>> 1
2701 if (fromPool) that.parent = rootParent
2706 function checked (length) {
2707 // Note: cannot use `length < kMaxLength` here because that fails when
2708 // length is NaN (which is otherwise coerced to zero.)
2709 if (length
>= kMaxLength()) {
2710 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
2711 'size:
0x' + kMaxLength().toString(
16) + ' bytes')
2716 function SlowBuffer (subject, encoding) {
2717 if (!(this instanceof SlowBuffer)) return new SlowBuffer(subject, encoding)
2719 var buf = new Buffer(subject, encoding)
2724 Buffer.isBuffer = function isBuffer (b) {
2725 return !!(b != null && b._isBuffer)
2728 Buffer.compare = function compare (a, b) {
2729 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
2730 throw new TypeError('Arguments must be Buffers')
2733 if (a === b) return
0
2739 var len = Math.min(x, y)
2741 if (a[i] !== b[i]) break
2751 if (x < y) return -
1
2756 Buffer.isEncoding = function isEncoding (encoding) {
2757 switch (String(encoding).toLowerCase()) {
2775 Buffer.concat = function concat (list, length) {
2776 if (!isArray(list)) throw new TypeError('list argument must be an Array of Buffers.')
2778 if (list.length ===
0) {
2779 return new Buffer(
0)
2783 if (length === undefined) {
2785 for (i =
0; i < list.length; i++) {
2786 length += list[i].length
2790 var buf = new Buffer(length)
2792 for (i =
0; i < list.length; i++) {
2800 function byteLength (string, encoding) {
2801 if (typeof string !== 'string') string = '' + string
2803 var len = string.length
2804 if (len ===
0) return
0
2806 // Use a for loop to avoid recursion
2807 var loweredCase = false
2818 return utf8ToBytes(string).length
2827 return base64ToBytes(string).length
2829 if (loweredCase) return utf8ToBytes(string).length // assume utf8
2830 encoding = ('' + encoding).toLowerCase()
2835 Buffer.byteLength = byteLength
2837 // pre-set for values that may exist in the future
2838 Buffer.prototype.length = undefined
2839 Buffer.prototype.parent = undefined
2841 function slowToString (encoding, start, end) {
2842 var loweredCase = false
2845 end = end === undefined || end === Infinity ? this.length : end |
0
2847 if (!encoding) encoding = 'utf8'
2848 if (start <
0) start =
0
2849 if (end
> this.length) end = this.length
2850 if (end <= start) return ''
2855 return hexSlice(this, start, end)
2859 return utf8Slice(this, start, end)
2862 return asciiSlice(this, start, end)
2865 return binarySlice(this, start, end)
2868 return base64Slice(this, start, end)
2874 return utf16leSlice(this, start, end)
2877 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
2878 encoding = (encoding + '').toLowerCase()
2884 Buffer.prototype.toString = function toString () {
2885 var length = this.length |
0
2886 if (length ===
0) return ''
2887 if (arguments.length ===
0) return utf8Slice(this,
0, length)
2888 return slowToString.apply(this, arguments)
2891 Buffer.prototype.equals = function equals (b) {
2892 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
2893 if (this === b) return true
2894 return Buffer.compare(this, b) ===
0
2897 Buffer.prototype.inspect = function inspect () {
2899 var max = exports.INSPECT_MAX_BYTES
2900 if (this.length
> 0) {
2901 str = this.toString('hex',
0, max).match(/.{
2}/g).join(' ')
2902 if (this.length
> max) str += ' ... '
2904 return '
<Buffer ' + str + '
>'
2907 Buffer.prototype.compare = function compare (b) {
2908 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
2909 if (this === b) return
0
2910 return Buffer.compare(this, b)
2913 Buffer.prototype.indexOf = function indexOf (val, byteOffset) {
2914 if (byteOffset
> 0x7fffffff) byteOffset =
0x7fffffff
2915 else if (byteOffset < -
0x80000000) byteOffset = -
0x80000000
2918 if (this.length ===
0) return -
1
2919 if (byteOffset
>= this.length) return -
1
2921 // Negative offsets start from the end of the buffer
2922 if (byteOffset <
0) byteOffset = Math.max(this.length + byteOffset,
0)
2924 if (typeof val === 'string') {
2925 if (val.length ===
0) return -
1 // special case: looking for empty string always fails
2926 return String.prototype.indexOf.call(this, val, byteOffset)
2928 if (Buffer.isBuffer(val)) {
2929 return arrayIndexOf(this, val, byteOffset)
2931 if (typeof val === 'number') {
2932 if (Buffer.TYPED_ARRAY_SUPPORT && Uint8Array.prototype.indexOf === 'function') {
2933 return Uint8Array.prototype.indexOf.call(this, val, byteOffset)
2935 return arrayIndexOf(this, [ val ], byteOffset)
2938 function arrayIndexOf (arr, val, byteOffset) {
2940 for (var i =
0; byteOffset + i < arr.length; i++) {
2941 if (arr[byteOffset + i] === val[foundIndex === -
1 ?
0 : i - foundIndex]) {
2942 if (foundIndex === -
1) foundIndex = i
2943 if (i - foundIndex +
1 === val.length) return byteOffset + foundIndex
2951 throw new TypeError('val must be string, number or Buffer')
2954 // `get` is deprecated
2955 Buffer.prototype.get = function get (offset) {
2956 console.log('.get() is deprecated. Access using array indexes instead.')
2957 return this.readUInt8(offset)
2960 // `set` is deprecated
2961 Buffer.prototype.set = function set (v, offset) {
2962 console.log('.set() is deprecated. Access using array indexes instead.')
2963 return this.writeUInt8(v, offset)
2966 function hexWrite (buf, string, offset, length) {
2967 offset = Number(offset) ||
0
2968 var remaining = buf.length - offset
2972 length = Number(length)
2973 if (length
> remaining) {
2978 // must be an even number of digits
2979 var strLen = string.length
2980 if (strLen %
2 !==
0) throw new Error('Invalid hex string')
2982 if (length
> strLen /
2) {
2985 for (var i =
0; i < length; i++) {
2986 var parsed = parseInt(string.substr(i *
2,
2),
16)
2987 if (isNaN(parsed)) throw new Error('Invalid hex string')
2988 buf[offset + i] = parsed
2993 function utf8Write (buf, string, offset, length) {
2994 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
2997 function asciiWrite (buf, string, offset, length) {
2998 return blitBuffer(asciiToBytes(string), buf, offset, length)
3001 function binaryWrite (buf, string, offset, length) {
3002 return asciiWrite(buf, string, offset, length)
3005 function base64Write (buf, string, offset, length) {
3006 return blitBuffer(base64ToBytes(string), buf, offset, length)
3009 function ucs2Write (buf, string, offset, length) {
3010 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
3013 Buffer.prototype.write = function write (string, offset, length, encoding) {
3014 // Buffer#write(string)
3015 if (offset === undefined) {
3017 length = this.length
3019 // Buffer#write(string, encoding)
3020 } else if (length === undefined && typeof offset === 'string') {
3022 length = this.length
3024 // Buffer#write(string, offset[, length][, encoding])
3025 } else if (isFinite(offset)) {
3027 if (isFinite(length)) {
3029 if (encoding === undefined) encoding = 'utf8'
3034 // legacy write(string, encoding, offset, length) - remove in v0.13
3042 var remaining = this.length - offset
3043 if (length === undefined || length
> remaining) length = remaining
3045 if ((string.length
> 0 && (length <
0 || offset <
0)) || offset
> this.length) {
3046 throw new RangeError('attempt to write outside buffer bounds')
3049 if (!encoding) encoding = 'utf8'
3051 var loweredCase = false
3055 return hexWrite(this, string, offset, length)
3059 return utf8Write(this, string, offset, length)
3062 return asciiWrite(this, string, offset, length)
3065 return binaryWrite(this, string, offset, length)
3068 // Warning: maxLength not taken into account in base64Write
3069 return base64Write(this, string, offset, length)
3075 return ucs2Write(this, string, offset, length)
3078 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
3079 encoding = ('' + encoding).toLowerCase()
3085 Buffer.prototype.toJSON = function toJSON () {
3088 data: Array.prototype.slice.call(this._arr || this,
0)
3092 function base64Slice (buf, start, end) {
3093 if (start ===
0 && end === buf.length) {
3094 return base64.fromByteArray(buf)
3096 return base64.fromByteArray(buf.slice(start, end))
3100 function utf8Slice (buf, start, end) {
3101 end = Math.min(buf.length, end)
3106 var bytesPerSequence
3112 for (; i < end; i += bytesPerSequence) {
3116 if (firstByte
> 0xEF) {
3117 bytesPerSequence =
4
3118 } else if (firstByte
> 0xDF) {
3119 bytesPerSequence =
3
3120 } else if (firstByte
> 0xBF) {
3121 bytesPerSequence =
2
3123 bytesPerSequence =
1
3126 if (i + bytesPerSequence <= end) {
3127 switch (bytesPerSequence) {
3129 if (firstByte <
0x80) {
3130 codePoint = firstByte
3134 secondByte = buf[i +
1]
3135 if ((secondByte &
0xC0) ===
0x80) {
3136 tempCodePoint = (firstByte &
0x1F) <<
0x6 | (secondByte &
0x3F)
3137 if (tempCodePoint
> 0x7F) {
3138 codePoint = tempCodePoint
3143 secondByte = buf[i +
1]
3144 thirdByte = buf[i +
2]
3145 if ((secondByte &
0xC0) ===
0x80 && (thirdByte &
0xC0) ===
0x80) {
3146 tempCodePoint = (firstByte &
0xF) <<
0xC | (secondByte &
0x3F) <<
0x6 | (thirdByte &
0x3F)
3147 if (tempCodePoint
> 0x7FF && (tempCodePoint <
0xD800 || tempCodePoint
> 0xDFFF)) {
3148 codePoint = tempCodePoint
3153 secondByte = buf[i +
1]
3154 thirdByte = buf[i +
2]
3155 fourthByte = buf[i +
3]
3156 if ((secondByte &
0xC0) ===
0x80 && (thirdByte &
0xC0) ===
0x80 && (fourthByte &
0xC0) ===
0x80) {
3157 tempCodePoint = (firstByte &
0xF) <<
0x12 | (secondByte &
0x3F) <<
0xC | (thirdByte &
0x3F) <<
0x6 | (fourthByte &
0x3F)
3158 if (tempCodePoint
> 0xFFFF && tempCodePoint <
0x110000) {
3159 codePoint = tempCodePoint
3165 if (codePoint ===
0xFFFD) {
3166 // we generated an invalid codePoint so make sure to only advance by
1 byte
3167 bytesPerSequence =
1
3168 } else if (codePoint
> 0xFFFF) {
3169 // encode to utf16 (surrogate pair dance)
3170 codePoint -=
0x10000
3171 res.push(codePoint
>>> 10 &
0x3FF |
0xD800)
3172 codePoint =
0xDC00 | codePoint &
0x3FF
3178 return String.fromCharCode.apply(String, res)
3181 function asciiSlice (buf, start, end) {
3183 end = Math.min(buf.length, end)
3185 for (var i = start; i < end; i++) {
3186 ret += String.fromCharCode(buf[i] &
0x7F)
3191 function binarySlice (buf, start, end) {
3193 end = Math.min(buf.length, end)
3195 for (var i = start; i < end; i++) {
3196 ret += String.fromCharCode(buf[i])
3201 function hexSlice (buf, start, end) {
3202 var len = buf.length
3204 if (!start || start <
0) start =
0
3205 if (!end || end <
0 || end
> len) end = len
3208 for (var i = start; i < end; i++) {
3209 out += toHex(buf[i])
3214 function utf16leSlice (buf, start, end) {
3215 var bytes = buf.slice(start, end)
3217 for (var i =
0; i < bytes.length; i +=
2) {
3218 res += String.fromCharCode(bytes[i] + bytes[i +
1] *
256)
3223 Buffer.prototype.slice = function slice (start, end) {
3224 var len = this.length
3226 end = end === undefined ? len : ~~end
3230 if (start <
0) start =
0
3231 } else if (start
> len) {
3237 if (end <
0) end =
0
3238 } else if (end
> len) {
3242 if (end < start) end = start
3245 if (Buffer.TYPED_ARRAY_SUPPORT) {
3246 newBuf = Buffer._augment(this.subarray(start, end))
3248 var sliceLen = end - start
3249 newBuf = new Buffer(sliceLen, undefined)
3250 for (var i =
0; i < sliceLen; i++) {
3251 newBuf[i] = this[i + start]
3255 if (newBuf.length) newBuf.parent = this.parent || this
3261 * Need to make sure that buffer isn't trying to write out of bounds.
3263 function checkOffset (offset, ext, length) {
3264 if ((offset %
1) !==
0 || offset <
0) throw new RangeError('offset is not uint')
3265 if (offset + ext
> length) throw new RangeError('Trying to access beyond buffer length')
3268 Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
3270 byteLength = byteLength |
0
3271 if (!noAssert) checkOffset(offset, byteLength, this.length)
3273 var val = this[offset]
3276 while (++i < byteLength && (mul *=
0x100)) {
3277 val += this[offset + i] * mul
3283 Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
3285 byteLength = byteLength |
0
3287 checkOffset(offset, byteLength, this.length)
3290 var val = this[offset + --byteLength]
3292 while (byteLength
> 0 && (mul *=
0x100)) {
3293 val += this[offset + --byteLength] * mul
3299 Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
3300 if (!noAssert) checkOffset(offset,
1, this.length)
3304 Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
3305 if (!noAssert) checkOffset(offset,
2, this.length)
3306 return this[offset] | (this[offset +
1] <<
8)
3309 Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
3310 if (!noAssert) checkOffset(offset,
2, this.length)
3311 return (this[offset] <<
8) | this[offset +
1]
3314 Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
3315 if (!noAssert) checkOffset(offset,
4, this.length)
3317 return ((this[offset]) |
3318 (this[offset +
1] <<
8) |
3319 (this[offset +
2] <<
16)) +
3320 (this[offset +
3] *
0x1000000)
3323 Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
3324 if (!noAssert) checkOffset(offset,
4, this.length)
3326 return (this[offset] *
0x1000000) +
3327 ((this[offset +
1] <<
16) |
3328 (this[offset +
2] <<
8) |
3332 Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
3334 byteLength = byteLength |
0
3335 if (!noAssert) checkOffset(offset, byteLength, this.length)
3337 var val = this[offset]
3340 while (++i < byteLength && (mul *=
0x100)) {
3341 val += this[offset + i] * mul
3345 if (val
>= mul) val -= Math.pow(
2,
8 * byteLength)
3350 Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
3352 byteLength = byteLength |
0
3353 if (!noAssert) checkOffset(offset, byteLength, this.length)
3357 var val = this[offset + --i]
3358 while (i
> 0 && (mul *=
0x100)) {
3359 val += this[offset + --i] * mul
3363 if (val
>= mul) val -= Math.pow(
2,
8 * byteLength)
3368 Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
3369 if (!noAssert) checkOffset(offset,
1, this.length)
3370 if (!(this[offset] &
0x80)) return (this[offset])
3371 return ((
0xff - this[offset] +
1) * -
1)
3374 Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
3375 if (!noAssert) checkOffset(offset,
2, this.length)
3376 var val = this[offset] | (this[offset +
1] <<
8)
3377 return (val &
0x8000) ? val |
0xFFFF0000 : val
3380 Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
3381 if (!noAssert) checkOffset(offset,
2, this.length)
3382 var val = this[offset +
1] | (this[offset] <<
8)
3383 return (val &
0x8000) ? val |
0xFFFF0000 : val
3386 Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
3387 if (!noAssert) checkOffset(offset,
4, this.length)
3389 return (this[offset]) |
3390 (this[offset +
1] <<
8) |
3391 (this[offset +
2] <<
16) |
3392 (this[offset +
3] <<
24)
3395 Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
3396 if (!noAssert) checkOffset(offset,
4, this.length)
3398 return (this[offset] <<
24) |
3399 (this[offset +
1] <<
16) |
3400 (this[offset +
2] <<
8) |
3404 Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
3405 if (!noAssert) checkOffset(offset,
4, this.length)
3406 return ieee754.read(this, offset, true,
23,
4)
3409 Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
3410 if (!noAssert) checkOffset(offset,
4, this.length)
3411 return ieee754.read(this, offset, false,
23,
4)
3414 Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
3415 if (!noAssert) checkOffset(offset,
8, this.length)
3416 return ieee754.read(this, offset, true,
52,
8)
3419 Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
3420 if (!noAssert) checkOffset(offset,
8, this.length)
3421 return ieee754.read(this, offset, false,
52,
8)
3424 function checkInt (buf, value, offset, ext, max, min) {
3425 if (!Buffer.isBuffer(buf)) throw new TypeError('buffer must be a Buffer instance')
3426 if (value
> max || value < min) throw new RangeError('value is out of bounds')
3427 if (offset + ext
> buf.length) throw new RangeError('index out of range')
3430 Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
3433 byteLength = byteLength |
0
3434 if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(
2,
8 * byteLength),
0)
3438 this[offset] = value &
0xFF
3439 while (++i < byteLength && (mul *=
0x100)) {
3440 this[offset + i] = (value / mul) &
0xFF
3443 return offset + byteLength
3446 Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
3449 byteLength = byteLength |
0
3450 if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(
2,
8 * byteLength),
0)
3452 var i = byteLength -
1
3454 this[offset + i] = value &
0xFF
3455 while (--i
>=
0 && (mul *=
0x100)) {
3456 this[offset + i] = (value / mul) &
0xFF
3459 return offset + byteLength
3462 Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
3465 if (!noAssert) checkInt(this, value, offset,
1,
0xff,
0)
3466 if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
3467 this[offset] = value
3471 function objectWriteUInt16 (buf, value, offset, littleEndian) {
3472 if (value <
0) value =
0xffff + value +
1
3473 for (var i =
0, j = Math.min(buf.length - offset,
2); i < j; i++) {
3474 buf[offset + i] = (value & (
0xff << (
8 * (littleEndian ? i :
1 - i))))
>>>
3475 (littleEndian ? i :
1 - i) *
8
3479 Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
3482 if (!noAssert) checkInt(this, value, offset,
2,
0xffff,
0)
3483 if (Buffer.TYPED_ARRAY_SUPPORT) {
3484 this[offset] = value
3485 this[offset +
1] = (value
>>> 8)
3487 objectWriteUInt16(this, value, offset, true)
3492 Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
3495 if (!noAssert) checkInt(this, value, offset,
2,
0xffff,
0)
3496 if (Buffer.TYPED_ARRAY_SUPPORT) {
3497 this[offset] = (value
>>> 8)
3498 this[offset +
1] = value
3500 objectWriteUInt16(this, value, offset, false)
3505 function objectWriteUInt32 (buf, value, offset, littleEndian) {
3506 if (value <
0) value =
0xffffffff + value +
1
3507 for (var i =
0, j = Math.min(buf.length - offset,
4); i < j; i++) {
3508 buf[offset + i] = (value
>>> (littleEndian ? i :
3 - i) *
8) &
0xff
3512 Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
3515 if (!noAssert) checkInt(this, value, offset,
4,
0xffffffff,
0)
3516 if (Buffer.TYPED_ARRAY_SUPPORT) {
3517 this[offset +
3] = (value
>>> 24)
3518 this[offset +
2] = (value
>>> 16)
3519 this[offset +
1] = (value
>>> 8)
3520 this[offset] = value
3522 objectWriteUInt32(this, value, offset, true)
3527 Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
3530 if (!noAssert) checkInt(this, value, offset,
4,
0xffffffff,
0)
3531 if (Buffer.TYPED_ARRAY_SUPPORT) {
3532 this[offset] = (value
>>> 24)
3533 this[offset +
1] = (value
>>> 16)
3534 this[offset +
2] = (value
>>> 8)
3535 this[offset +
3] = value
3537 objectWriteUInt32(this, value, offset, false)
3542 Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
3546 var limit = Math.pow(
2,
8 * byteLength -
1)
3548 checkInt(this, value, offset, byteLength, limit -
1, -limit)
3553 var sub = value <
0 ?
1 :
0
3554 this[offset] = value &
0xFF
3555 while (++i < byteLength && (mul *=
0x100)) {
3556 this[offset + i] = ((value / mul)
>> 0) - sub &
0xFF
3559 return offset + byteLength
3562 Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
3566 var limit = Math.pow(
2,
8 * byteLength -
1)
3568 checkInt(this, value, offset, byteLength, limit -
1, -limit)
3571 var i = byteLength -
1
3573 var sub = value <
0 ?
1 :
0
3574 this[offset + i] = value &
0xFF
3575 while (--i
>=
0 && (mul *=
0x100)) {
3576 this[offset + i] = ((value / mul)
>> 0) - sub &
0xFF
3579 return offset + byteLength
3582 Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
3585 if (!noAssert) checkInt(this, value, offset,
1,
0x7f, -
0x80)
3586 if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
3587 if (value <
0) value =
0xff + value +
1
3588 this[offset] = value
3592 Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
3595 if (!noAssert) checkInt(this, value, offset,
2,
0x7fff, -
0x8000)
3596 if (Buffer.TYPED_ARRAY_SUPPORT) {
3597 this[offset] = value
3598 this[offset +
1] = (value
>>> 8)
3600 objectWriteUInt16(this, value, offset, true)
3605 Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
3608 if (!noAssert) checkInt(this, value, offset,
2,
0x7fff, -
0x8000)
3609 if (Buffer.TYPED_ARRAY_SUPPORT) {
3610 this[offset] = (value
>>> 8)
3611 this[offset +
1] = value
3613 objectWriteUInt16(this, value, offset, false)
3618 Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
3621 if (!noAssert) checkInt(this, value, offset,
4,
0x7fffffff, -
0x80000000)
3622 if (Buffer.TYPED_ARRAY_SUPPORT) {
3623 this[offset] = value
3624 this[offset +
1] = (value
>>> 8)
3625 this[offset +
2] = (value
>>> 16)
3626 this[offset +
3] = (value
>>> 24)
3628 objectWriteUInt32(this, value, offset, true)
3633 Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
3636 if (!noAssert) checkInt(this, value, offset,
4,
0x7fffffff, -
0x80000000)
3637 if (value <
0) value =
0xffffffff + value +
1
3638 if (Buffer.TYPED_ARRAY_SUPPORT) {
3639 this[offset] = (value
>>> 24)
3640 this[offset +
1] = (value
>>> 16)
3641 this[offset +
2] = (value
>>> 8)
3642 this[offset +
3] = value
3644 objectWriteUInt32(this, value, offset, false)
3649 function checkIEEE754 (buf, value, offset, ext, max, min) {
3650 if (value
> max || value < min) throw new RangeError('value is out of bounds')
3651 if (offset + ext
> buf.length) throw new RangeError('index out of range')
3652 if (offset <
0) throw new RangeError('index out of range')
3655 function writeFloat (buf, value, offset, littleEndian, noAssert) {
3657 checkIEEE754(buf, value, offset,
4,
3.4028234663852886e+38, -
3.4028234663852886e+38)
3659 ieee754.write(buf, value, offset, littleEndian,
23,
4)
3663 Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
3664 return writeFloat(this, value, offset, true, noAssert)
3667 Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
3668 return writeFloat(this, value, offset, false, noAssert)
3671 function writeDouble (buf, value, offset, littleEndian, noAssert) {
3673 checkIEEE754(buf, value, offset,
8,
1.7976931348623157E+308, -
1.7976931348623157E+308)
3675 ieee754.write(buf, value, offset, littleEndian,
52,
8)
3679 Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
3680 return writeDouble(this, value, offset, true, noAssert)
3683 Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
3684 return writeDouble(this, value, offset, false, noAssert)
3687 // copy(targetBuffer, targetStart=
0, sourceStart=
0, sourceEnd=buffer.length)
3688 Buffer.prototype.copy = function copy (target, targetStart, start, end) {
3689 if (!start) start =
0
3690 if (!end && end !==
0) end = this.length
3691 if (targetStart
>= target.length) targetStart = target.length
3692 if (!targetStart) targetStart =
0
3693 if (end
> 0 && end < start) end = start
3695 // Copy
0 bytes; we're done
3696 if (end === start) return
0
3697 if (target.length ===
0 || this.length ===
0) return
0
3699 // Fatal error conditions
3700 if (targetStart <
0) {
3701 throw new RangeError('targetStart out of bounds')
3703 if (start <
0 || start
>= this.length) throw new RangeError('sourceStart out of bounds')
3704 if (end <
0) throw new RangeError('sourceEnd out of bounds')
3707 if (end
> this.length) end = this.length
3708 if (target.length - targetStart < end - start) {
3709 end = target.length - targetStart + start
3712 var len = end - start
3715 if (this === target && start < targetStart && targetStart < end) {
3716 // descending copy from end
3717 for (i = len -
1; i
>=
0; i--) {
3718 target[i + targetStart] = this[i + start]
3720 } else if (len <
1000 || !Buffer.TYPED_ARRAY_SUPPORT) {
3721 // ascending copy from start
3722 for (i =
0; i < len; i++) {
3723 target[i + targetStart] = this[i + start]
3726 target._set(this.subarray(start, start + len), targetStart)
3732 // fill(value, start=
0, end=buffer.length)
3733 Buffer.prototype.fill = function fill (value, start, end) {
3734 if (!value) value =
0
3735 if (!start) start =
0
3736 if (!end) end = this.length
3738 if (end < start) throw new RangeError('end < start')
3740 // Fill
0 bytes; we're done
3741 if (end === start) return
3742 if (this.length ===
0) return
3744 if (start <
0 || start
>= this.length) throw new RangeError('start out of bounds')
3745 if (end <
0 || end
> this.length) throw new RangeError('end out of bounds')
3748 if (typeof value === 'number') {
3749 for (i = start; i < end; i++) {
3753 var bytes = utf8ToBytes(value.toString())
3754 var len = bytes.length
3755 for (i = start; i < end; i++) {
3756 this[i] = bytes[i % len]
3764 * Creates a new `ArrayBuffer` with the *copied* memory of the buffer instance.
3765 * Added in Node
0.12. Only available in browsers that support ArrayBuffer.
3767 Buffer.prototype.toArrayBuffer = function toArrayBuffer () {
3768 if (typeof Uint8Array !== 'undefined') {
3769 if (Buffer.TYPED_ARRAY_SUPPORT) {
3770 return (new Buffer(this)).buffer
3772 var buf = new Uint8Array(this.length)
3773 for (var i =
0, len = buf.length; i < len; i +=
1) {
3779 throw new TypeError('Buffer.toArrayBuffer not supported in this browser')
3786 var BP = Buffer.prototype
3789 * Augment a Uint8Array *instance* (not the Uint8Array class!) with Buffer methods
3791 Buffer._augment = function _augment (arr) {
3792 arr.constructor = Buffer
3793 arr._isBuffer = true
3795 // save reference to original Uint8Array set method before overwriting
3802 arr.write = BP.write
3803 arr.toString = BP.toString
3804 arr.toLocaleString = BP.toString
3805 arr.toJSON = BP.toJSON
3806 arr.equals = BP.equals
3807 arr.compare = BP.compare
3808 arr.indexOf = BP.indexOf
3810 arr.slice = BP.slice
3811 arr.readUIntLE = BP.readUIntLE
3812 arr.readUIntBE = BP.readUIntBE
3813 arr.readUInt8 = BP.readUInt8
3814 arr.readUInt16LE = BP.readUInt16LE
3815 arr.readUInt16BE = BP.readUInt16BE
3816 arr.readUInt32LE = BP.readUInt32LE
3817 arr.readUInt32BE = BP.readUInt32BE
3818 arr.readIntLE = BP.readIntLE
3819 arr.readIntBE = BP.readIntBE
3820 arr.readInt8 = BP.readInt8
3821 arr.readInt16LE = BP.readInt16LE
3822 arr.readInt16BE = BP.readInt16BE
3823 arr.readInt32LE = BP.readInt32LE
3824 arr.readInt32BE = BP.readInt32BE
3825 arr.readFloatLE = BP.readFloatLE
3826 arr.readFloatBE = BP.readFloatBE
3827 arr.readDoubleLE = BP.readDoubleLE
3828 arr.readDoubleBE = BP.readDoubleBE
3829 arr.writeUInt8 = BP.writeUInt8
3830 arr.writeUIntLE = BP.writeUIntLE
3831 arr.writeUIntBE = BP.writeUIntBE
3832 arr.writeUInt16LE = BP.writeUInt16LE
3833 arr.writeUInt16BE = BP.writeUInt16BE
3834 arr.writeUInt32LE = BP.writeUInt32LE
3835 arr.writeUInt32BE = BP.writeUInt32BE
3836 arr.writeIntLE = BP.writeIntLE
3837 arr.writeIntBE = BP.writeIntBE
3838 arr.writeInt8 = BP.writeInt8
3839 arr.writeInt16LE = BP.writeInt16LE
3840 arr.writeInt16BE = BP.writeInt16BE
3841 arr.writeInt32LE = BP.writeInt32LE
3842 arr.writeInt32BE = BP.writeInt32BE
3843 arr.writeFloatLE = BP.writeFloatLE
3844 arr.writeFloatBE = BP.writeFloatBE
3845 arr.writeDoubleLE = BP.writeDoubleLE
3846 arr.writeDoubleBE = BP.writeDoubleBE
3848 arr.inspect = BP.inspect
3849 arr.toArrayBuffer = BP.toArrayBuffer
3854 var INVALID_BASE64_RE = /[^+\/
0-
9A-Za-z-_]/g
3856 function base64clean (str) {
3857 // Node strips out invalid characters like \n and \t from the string, base64-js does not
3858 str = stringtrim(str).replace(INVALID_BASE64_RE, '')
3859 // Node converts strings with length <
2 to ''
3860 if (str.length <
2) return ''
3861 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
3862 while (str.length %
4 !==
0) {
3868 function stringtrim (str) {
3869 if (str.trim) return str.trim()
3870 return str.replace(/^\s+|\s+$/g, '')
3873 function toHex (n) {
3874 if (n <
16) return '
0' + n.toString(
16)
3875 return n.toString(
16)
3878 function utf8ToBytes (string, units) {
3879 units = units || Infinity
3881 var length = string.length
3882 var leadSurrogate = null
3885 for (var i =
0; i < length; i++) {
3886 codePoint = string.charCodeAt(i)
3888 // is surrogate component
3889 if (codePoint
> 0xD7FF && codePoint <
0xE000) {
3890 // last char was a lead
3891 if (!leadSurrogate) {
3893 if (codePoint
> 0xDBFF) {
3895 if ((units -=
3)
> -
1) bytes.push(
0xEF,
0xBF,
0xBD)
3898 } else if (i +
1 === length) {
3900 if ((units -=
3)
> -
1) bytes.push(
0xEF,
0xBF,
0xBD)
3905 leadSurrogate = codePoint
3911 if (codePoint <
0xDC00) {
3912 if ((units -=
3)
> -
1) bytes.push(
0xEF,
0xBF,
0xBD)
3913 leadSurrogate = codePoint
3917 // valid surrogate pair
3918 codePoint = leadSurrogate -
0xD800 <<
10 | codePoint -
0xDC00 |
0x10000
3920 } else if (leadSurrogate) {
3921 // valid bmp char, but last char was a lead
3922 if ((units -=
3)
> -
1) bytes.push(
0xEF,
0xBF,
0xBD)
3925 leadSurrogate = null
3928 if (codePoint <
0x80) {
3929 if ((units -=
1) <
0) break
3930 bytes.push(codePoint)
3931 } else if (codePoint <
0x800) {
3932 if ((units -=
2) <
0) break
3934 codePoint
>> 0x6 |
0xC0,
3935 codePoint &
0x3F |
0x80
3937 } else if (codePoint <
0x10000) {
3938 if ((units -=
3) <
0) break
3940 codePoint
>> 0xC |
0xE0,
3941 codePoint
>> 0x6 &
0x3F |
0x80,
3942 codePoint &
0x3F |
0x80
3944 } else if (codePoint <
0x110000) {
3945 if ((units -=
4) <
0) break
3947 codePoint
>> 0x12 |
0xF0,
3948 codePoint
>> 0xC &
0x3F |
0x80,
3949 codePoint
>> 0x6 &
0x3F |
0x80,
3950 codePoint &
0x3F |
0x80
3953 throw new Error('Invalid code point')
3960 function asciiToBytes (str) {
3962 for (var i =
0; i < str.length; i++) {
3963 // Node's code seems to be doing this and not &
0x7F..
3964 byteArray.push(str.charCodeAt(i) &
0xFF)
3969 function utf16leToBytes (str, units) {
3972 for (var i =
0; i < str.length; i++) {
3973 if ((units -=
2) <
0) break
3975 c = str.charCodeAt(i)
3985 function base64ToBytes (str) {
3986 return base64.toByteArray(base64clean(str))
3989 function blitBuffer (src, dst, offset, length) {
3990 for (var i =
0; i < length; i++) {
3991 if ((i + offset
>= dst.length) || (i
>= src.length)) break
3992 dst[i + offset] = src[i]
3997 },{"base64-js":
8,"ieee754":
9,"is-array":
10}],
8:[function(require,module,exports){
3998 var lookup = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
4000 ;(function (exports) {
4003 var Arr = (typeof Uint8Array !== 'undefined')
4007 var PLUS = '+'.charCodeAt(
0)
4008 var SLASH = '/'.charCodeAt(
0)
4009 var NUMBER = '
0'.charCodeAt(
0)
4010 var LOWER = 'a'.charCodeAt(
0)
4011 var UPPER = 'A'.charCodeAt(
0)
4012 var PLUS_URL_SAFE = '-'.charCodeAt(
0)
4013 var SLASH_URL_SAFE = '_'.charCodeAt(
0)
4015 function decode (elt) {
4016 var code = elt.charCodeAt(
0)
4017 if (code === PLUS ||
4018 code === PLUS_URL_SAFE)
4020 if (code === SLASH ||
4021 code === SLASH_URL_SAFE)
4024 return -
1 //no match
4025 if (code < NUMBER +
10)
4026 return code - NUMBER +
26 +
26
4027 if (code < UPPER +
26)
4029 if (code < LOWER +
26)
4030 return code - LOWER +
26
4033 function b64ToByteArray (b64) {
4034 var i, j, l, tmp, placeHolders, arr
4036 if (b64.length %
4 > 0) {
4037 throw new Error('Invalid string. Length must be a multiple of
4')
4040 // the number of equal signs (place holders)
4041 // if there are two placeholders, than the two characters before it
4042 // represent one byte
4043 // if there is only one, then the three characters before it represent
2 bytes
4044 // this is just a cheap hack to not do indexOf twice
4045 var len = b64.length
4046 placeHolders = '=' === b64.charAt(len -
2) ?
2 : '=' === b64.charAt(len -
1) ?
1 :
0
4048 // base64 is
4/
3 + up to two characters of the original data
4049 arr = new Arr(b64.length *
3 /
4 - placeHolders)
4051 // if there are placeholders, only get up to the last complete
4 chars
4052 l = placeHolders
> 0 ? b64.length -
4 : b64.length
4060 for (i =
0, j =
0; i < l; i +=
4, j +=
3) {
4061 tmp = (decode(b64.charAt(i)) <<
18) | (decode(b64.charAt(i +
1)) <<
12) | (decode(b64.charAt(i +
2)) <<
6) | decode(b64.charAt(i +
3))
4062 push((tmp &
0xFF0000)
>> 16)
4063 push((tmp &
0xFF00)
>> 8)
4067 if (placeHolders ===
2) {
4068 tmp = (decode(b64.charAt(i)) <<
2) | (decode(b64.charAt(i +
1))
>> 4)
4070 } else if (placeHolders ===
1) {
4071 tmp = (decode(b64.charAt(i)) <<
10) | (decode(b64.charAt(i +
1)) <<
4) | (decode(b64.charAt(i +
2))
>> 2)
4072 push((tmp
>> 8) &
0xFF)
4079 function uint8ToBase64 (uint8) {
4081 extraBytes = uint8.length %
3, // if we have
1 byte left, pad
2 bytes
4085 function encode (num) {
4086 return lookup.charAt(num)
4089 function tripletToBase64 (num) {
4090 return encode(num
>> 18 &
0x3F) + encode(num
>> 12 &
0x3F) + encode(num
>> 6 &
0x3F) + encode(num &
0x3F)
4093 // go through the array every three bytes, we'll deal with trailing stuff later
4094 for (i =
0, length = uint8.length - extraBytes; i < length; i +=
3) {
4095 temp = (uint8[i] <<
16) + (uint8[i +
1] <<
8) + (uint8[i +
2])
4096 output += tripletToBase64(temp)
4099 // pad the end with zeros, but make sure to not forget the extra bytes
4100 switch (extraBytes) {
4102 temp = uint8[uint8.length -
1]
4103 output += encode(temp
>> 2)
4104 output += encode((temp <<
4) &
0x3F)
4108 temp = (uint8[uint8.length -
2] <<
8) + (uint8[uint8.length -
1])
4109 output += encode(temp
>> 10)
4110 output += encode((temp
>> 4) &
0x3F)
4111 output += encode((temp <<
2) &
0x3F)
4119 exports.toByteArray = b64ToByteArray
4120 exports.fromByteArray = uint8ToBase64
4121 }(typeof exports === 'undefined' ? (this.base64js = {}) : exports))
4123 },{}],
9:[function(require,module,exports){
4124 exports.read = function (buffer, offset, isLE, mLen, nBytes) {
4126 var eLen = nBytes *
8 - mLen -
1
4127 var eMax = (
1 << eLen) -
1
4128 var eBias = eMax
>> 1
4130 var i = isLE ? (nBytes -
1) :
0
4131 var d = isLE ? -
1 :
1
4132 var s = buffer[offset + i]
4136 e = s & ((
1 << (-nBits)) -
1)
4139 for (; nBits
> 0; e = e *
256 + buffer[offset + i], i += d, nBits -=
8) {}
4141 m = e & ((
1 << (-nBits)) -
1)
4144 for (; nBits
> 0; m = m *
256 + buffer[offset + i], i += d, nBits -=
8) {}
4148 } else if (e === eMax) {
4149 return m ? NaN : ((s ? -
1 :
1) * Infinity)
4151 m = m + Math.pow(
2, mLen)
4154 return (s ? -
1 :
1) * m * Math.pow(
2, e - mLen)
4157 exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
4159 var eLen = nBytes *
8 - mLen -
1
4160 var eMax = (
1 << eLen) -
1
4161 var eBias = eMax
>> 1
4162 var rt = (mLen ===
23 ? Math.pow(
2, -
24) - Math.pow(
2, -
77) :
0)
4163 var i = isLE ?
0 : (nBytes -
1)
4164 var d = isLE ?
1 : -
1
4165 var s = value <
0 || (value ===
0 &&
1 / value <
0) ?
1 :
0
4167 value = Math.abs(value)
4169 if (isNaN(value) || value === Infinity) {
4170 m = isNaN(value) ?
1 :
0
4173 e = Math.floor(Math.log(value) / Math.LN2)
4174 if (value * (c = Math.pow(
2, -e)) <
1) {
4178 if (e + eBias
>=
1) {
4181 value += rt * Math.pow(
2,
1 - eBias)
4183 if (value * c
>=
2) {
4188 if (e + eBias
>= eMax) {
4191 } else if (e + eBias
>=
1) {
4192 m = (value * c -
1) * Math.pow(
2, mLen)
4195 m = value * Math.pow(
2, eBias -
1) * Math.pow(
2, mLen)
4200 for (; mLen
>=
8; buffer[offset + i] = m &
0xff, i += d, m /=
256, mLen -=
8) {}
4204 for (; eLen
> 0; buffer[offset + i] = e &
0xff, i += d, e /=
256, eLen -=
8) {}
4206 buffer[offset + i - d] |= s *
128
4209 },{}],
10:[function(require,module,exports){
4215 var isArray = Array.isArray;
4221 var str = Object.prototype.toString;
4224 * Whether or not the given `val`
4231 * isArray(arguments);
4236 * @param {mixed} val
4240 module.exports = isArray || function (val) {
4241 return !! val && '[object Array]' == str.call(val);
4244 },{}],
11:[function(require,module,exports){
4245 // Copyright Joyent, Inc. and other Node contributors.
4247 // Permission is hereby granted, free of charge, to any person obtaining a
4248 // copy of this software and associated documentation files (the
4249 // "Software"), to deal in the Software without restriction, including
4250 // without limitation the rights to use, copy, modify, merge, publish,
4251 // distribute, sublicense, and/or sell copies of the Software, and to permit
4252 // persons to whom the Software is furnished to do so, subject to the
4253 // following conditions:
4255 // The above copyright notice and this permission notice shall be included
4256 // in all copies or substantial portions of the Software.
4258 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
4259 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
4260 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
4261 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
4262 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
4263 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
4264 // USE OR OTHER DEALINGS IN THE SOFTWARE.
4266 function EventEmitter() {
4267 this._events = this._events || {};
4268 this._maxListeners = this._maxListeners || undefined;
4270 module.exports = EventEmitter;
4272 // Backwards-compat with node
0.10.x
4273 EventEmitter.EventEmitter = EventEmitter;
4275 EventEmitter.prototype._events = undefined;
4276 EventEmitter.prototype._maxListeners = undefined;
4278 // By default EventEmitters will print a warning if more than
10 listeners are
4279 // added to it. This is a useful default which helps finding memory leaks.
4280 EventEmitter.defaultMaxListeners =
10;
4282 // Obviously not all Emitters should be limited to
10. This function allows
4283 // that to be increased. Set to zero for unlimited.
4284 EventEmitter.prototype.setMaxListeners = function(n) {
4285 if (!isNumber(n) || n <
0 || isNaN(n))
4286 throw TypeError('n must be a positive number');
4287 this._maxListeners = n;
4291 EventEmitter.prototype.emit = function(type) {
4292 var er, handler, len, args, i, listeners;
4297 // If there is no 'error' event listener then throw.
4298 if (type === 'error') {
4299 if (!this._events.error ||
4300 (isObject(this._events.error) && !this._events.error.length)) {
4302 if (er instanceof Error) {
4303 throw er; // Unhandled 'error' event
4305 throw TypeError('Uncaught, unspecified "error" event.');
4309 handler = this._events[type];
4311 if (isUndefined(handler))
4314 if (isFunction(handler)) {
4315 switch (arguments.length) {
4321 handler.call(this, arguments[
1]);
4324 handler.call(this, arguments[
1], arguments[
2]);
4328 len = arguments.length;
4329 args = new Array(len -
1);
4330 for (i =
1; i < len; i++)
4331 args[i -
1] = arguments[i];
4332 handler.apply(this, args);
4334 } else if (isObject(handler)) {
4335 len = arguments.length;
4336 args = new Array(len -
1);
4337 for (i =
1; i < len; i++)
4338 args[i -
1] = arguments[i];
4340 listeners = handler.slice();
4341 len = listeners.length;
4342 for (i =
0; i < len; i++)
4343 listeners[i].apply(this, args);
4349 EventEmitter.prototype.addListener = function(type, listener) {
4352 if (!isFunction(listener))
4353 throw TypeError('listener must be a function');
4358 // To avoid recursion in the case that type === "newListener"! Before
4359 // adding it to the listeners, first emit "newListener".
4360 if (this._events.newListener)
4361 this.emit('newListener', type,
4362 isFunction(listener.listener) ?
4363 listener.listener : listener);
4365 if (!this._events[type])
4366 // Optimize the case of one listener. Don't need the extra array object.
4367 this._events[type] = listener;
4368 else if (isObject(this._events[type]))
4369 // If we've already got an array, just append.
4370 this._events[type].push(listener);
4372 // Adding the second element, need to change to array.
4373 this._events[type] = [this._events[type], listener];
4375 // Check for listener leak
4376 if (isObject(this._events[type]) && !this._events[type].warned) {
4378 if (!isUndefined(this._maxListeners)) {
4379 m = this._maxListeners;
4381 m = EventEmitter.defaultMaxListeners;
4384 if (m && m
> 0 && this._events[type].length
> m) {
4385 this._events[type].warned = true;
4386 console.error('(node) warning: possible EventEmitter memory ' +
4387 'leak detected. %d listeners added. ' +
4388 'Use emitter.setMaxListeners() to increase limit.',
4389 this._events[type].length);
4390 if (typeof console.trace === 'function') {
4391 // not supported in IE
10
4400 EventEmitter.prototype.on = EventEmitter.prototype.addListener;
4402 EventEmitter.prototype.once = function(type, listener) {
4403 if (!isFunction(listener))
4404 throw TypeError('listener must be a function');
4409 this.removeListener(type, g);
4413 listener.apply(this, arguments);
4417 g.listener = listener;
4423 // emits a 'removeListener' event iff the listener was removed
4424 EventEmitter.prototype.removeListener = function(type, listener) {
4425 var list, position, length, i;
4427 if (!isFunction(listener))
4428 throw TypeError('listener must be a function');
4430 if (!this._events || !this._events[type])
4433 list = this._events[type];
4434 length = list.length;
4437 if (list === listener ||
4438 (isFunction(list.listener) && list.listener === listener)) {
4439 delete this._events[type];
4440 if (this._events.removeListener)
4441 this.emit('removeListener', type, listener);
4443 } else if (isObject(list)) {
4444 for (i = length; i--
> 0;) {
4445 if (list[i] === listener ||
4446 (list[i].listener && list[i].listener === listener)) {
4455 if (list.length ===
1) {
4457 delete this._events[type];
4459 list.splice(position,
1);
4462 if (this._events.removeListener)
4463 this.emit('removeListener', type, listener);
4469 EventEmitter.prototype.removeAllListeners = function(type) {
4475 // not listening for removeListener, no need to emit
4476 if (!this._events.removeListener) {
4477 if (arguments.length ===
0)
4479 else if (this._events[type])
4480 delete this._events[type];
4484 // emit removeListener for all listeners on all events
4485 if (arguments.length ===
0) {
4486 for (key in this._events) {
4487 if (key === 'removeListener') continue;
4488 this.removeAllListeners(key);
4490 this.removeAllListeners('removeListener');
4495 listeners = this._events[type];
4497 if (isFunction(listeners)) {
4498 this.removeListener(type, listeners);
4501 while (listeners.length)
4502 this.removeListener(type, listeners[listeners.length -
1]);
4504 delete this._events[type];
4509 EventEmitter.prototype.listeners = function(type) {
4511 if (!this._events || !this._events[type])
4513 else if (isFunction(this._events[type]))
4514 ret = [this._events[type]];
4516 ret = this._events[type].slice();
4520 EventEmitter.listenerCount = function(emitter, type) {
4522 if (!emitter._events || !emitter._events[type])
4524 else if (isFunction(emitter._events[type]))
4527 ret = emitter._events[type].length;
4531 function isFunction(arg) {
4532 return typeof arg === 'function';
4535 function isNumber(arg) {
4536 return typeof arg === 'number';
4539 function isObject(arg) {
4540 return typeof arg === 'object' && arg !== null;
4543 function isUndefined(arg) {
4544 return arg === void
0;
4547 },{}],
12:[function(require,module,exports){
4548 if (typeof Object.create === 'function') {
4549 // implementation from standard node.js 'util' module
4550 module.exports = function inherits(ctor, superCtor) {
4551 ctor.super_ = superCtor
4552 ctor.prototype = Object.create(superCtor.prototype, {
4562 // old school shim for old browsers
4563 module.exports = function inherits(ctor, superCtor) {
4564 ctor.super_ = superCtor
4565 var TempCtor = function () {}
4566 TempCtor.prototype = superCtor.prototype
4567 ctor.prototype = new TempCtor()
4568 ctor.prototype.constructor = ctor
4572 },{}],
13:[function(require,module,exports){
4573 module.exports = Array.isArray || function (arr) {
4574 return Object.prototype.toString.call(arr) == '[object Array]';
4577 },{}],
14:[function(require,module,exports){
4578 // shim for using process in browser
4580 var process = module.exports = {};
4582 var draining = false;
4584 var queueIndex = -
1;
4586 function cleanUpNextTick() {
4588 if (currentQueue.length) {
4589 queue = currentQueue.concat(queue);
4598 function drainQueue() {
4602 var timeout = setTimeout(cleanUpNextTick);
4605 var len = queue.length;
4607 currentQueue = queue;
4609 while (++queueIndex < len) {
4610 currentQueue[queueIndex].run();
4615 currentQueue = null;
4617 clearTimeout(timeout);
4620 process.nextTick = function (fun) {
4621 var args = new Array(arguments.length -
1);
4622 if (arguments.length
> 1) {
4623 for (var i =
1; i < arguments.length; i++) {
4624 args[i -
1] = arguments[i];
4627 queue.push(new Item(fun, args));
4628 if (queue.length ===
1 && !draining) {
4629 setTimeout(drainQueue,
0);
4633 // v8 likes predictible objects
4634 function Item(fun, array) {
4638 Item.prototype.run = function () {
4639 this.fun.apply(null, this.array);
4641 process.title = 'browser';
4642 process.browser = true;
4645 process.version = ''; // empty string to avoid regexp issues
4646 process.versions = {};
4651 process.addListener = noop;
4652 process.once = noop;
4654 process.removeListener = noop;
4655 process.removeAllListeners = noop;
4656 process.emit = noop;
4658 process.binding = function (name) {
4659 throw new Error('process.binding is not supported');
4663 process.cwd = function () { return '/' };
4664 process.chdir = function (dir) {
4665 throw new Error('process.chdir is not supported');
4667 process.umask = function() { return
0; };
4669 },{}],
15:[function(require,module,exports){
4670 module.exports = require(
"./lib/_stream_duplex.js")
4672 },{
"./lib/_stream_duplex.js":
16}],
16:[function(require,module,exports){
4673 (function (process){
4674 // Copyright Joyent, Inc. and other Node contributors.
4676 // Permission is hereby granted, free of charge, to any person obtaining a
4677 // copy of this software and associated documentation files (the
4678 //
"Software"), to deal in the Software without restriction, including
4679 // without limitation the rights to use, copy, modify, merge, publish,
4680 // distribute, sublicense, and/or sell copies of the Software, and to permit
4681 // persons to whom the Software is furnished to do so, subject to the
4682 // following conditions:
4684 // The above copyright notice and this permission notice shall be included
4685 // in all copies or substantial portions of the Software.
4687 // THE SOFTWARE IS PROVIDED
"AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
4688 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
4689 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
4690 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
4691 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
4692 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
4693 // USE OR OTHER DEALINGS IN THE SOFTWARE.
4695 // a duplex stream is just a stream that is both readable and writable.
4696 // Since JS doesn't have multiple prototypal inheritance, this class
4697 // prototypally inherits from Readable, and then parasitically from
4700 module.exports = Duplex;
4703 var objectKeys = Object.keys || function (obj) {
4705 for (var key in obj) keys.push(key);
4712 var util = require('core-util-is');
4713 util.inherits = require('inherits');
4716 var Readable = require('./_stream_readable');
4717 var Writable = require('./_stream_writable');
4719 util.inherits(Duplex, Readable);
4721 forEach(objectKeys(Writable.prototype), function(method) {
4722 if (!Duplex.prototype[method])
4723 Duplex.prototype[method] = Writable.prototype[method];
4726 function Duplex(options) {
4727 if (!(this instanceof Duplex))
4728 return new Duplex(options);
4730 Readable.call(this, options);
4731 Writable.call(this, options);
4733 if (options && options.readable === false)
4734 this.readable = false;
4736 if (options && options.writable === false)
4737 this.writable = false;
4739 this.allowHalfOpen = true;
4740 if (options && options.allowHalfOpen === false)
4741 this.allowHalfOpen = false;
4743 this.once('end', onend);
4746 // the no-half-open enforcer
4748 // if we allow half-open state, or if the writable side ended,
4750 if (this.allowHalfOpen || this._writableState.ended)
4753 // no more data can be written.
4754 // But allow more writes to happen in this tick.
4755 process.nextTick(this.end.bind(this));
4758 function forEach (xs, f) {
4759 for (var i =
0, l = xs.length; i < l; i++) {
4764 }).call(this,require('_process'))
4765 },{"./_stream_readable":
18,"./_stream_writable":
20,"_process":
14,"core-util-is":
21,"inherits":
12}],
17:[function(require,module,exports){
4766 // Copyright Joyent, Inc. and other Node contributors.
4768 // Permission is hereby granted, free of charge, to any person obtaining a
4769 // copy of this software and associated documentation files (the
4770 // "Software"), to deal in the Software without restriction, including
4771 // without limitation the rights to use, copy, modify, merge, publish,
4772 // distribute, sublicense, and/or sell copies of the Software, and to permit
4773 // persons to whom the Software is furnished to do so, subject to the
4774 // following conditions:
4776 // The above copyright notice and this permission notice shall be included
4777 // in all copies or substantial portions of the Software.
4779 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
4780 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
4781 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
4782 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
4783 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
4784 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
4785 // USE OR OTHER DEALINGS IN THE SOFTWARE.
4787 // a passthrough stream.
4788 // basically just the most minimal sort of Transform stream.
4789 // Every written chunk gets output as-is.
4791 module.exports = PassThrough;
4793 var Transform = require('./_stream_transform');
4796 var util = require('core-util-is');
4797 util.inherits = require('inherits');
4800 util.inherits(PassThrough, Transform);
4802 function PassThrough(options) {
4803 if (!(this instanceof PassThrough))
4804 return new PassThrough(options);
4806 Transform.call(this, options);
4809 PassThrough.prototype._transform = function(chunk, encoding, cb) {
4813 },{"./_stream_transform":
19,"core-util-is":
21,"inherits":
12}],
18:[function(require,module,exports){
4814 (function (process){
4815 // Copyright Joyent, Inc. and other Node contributors.
4817 // Permission is hereby granted, free of charge, to any person obtaining a
4818 // copy of this software and associated documentation files (the
4819 // "Software"), to deal in the Software without restriction, including
4820 // without limitation the rights to use, copy, modify, merge, publish,
4821 // distribute, sublicense, and/or sell copies of the Software, and to permit
4822 // persons to whom the Software is furnished to do so, subject to the
4823 // following conditions:
4825 // The above copyright notice and this permission notice shall be included
4826 // in all copies or substantial portions of the Software.
4828 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
4829 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
4830 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
4831 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
4832 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
4833 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
4834 // USE OR OTHER DEALINGS IN THE SOFTWARE.
4836 module.exports = Readable;
4839 var isArray = require('isarray');
4844 var Buffer = require('buffer').Buffer;
4847 Readable.ReadableState = ReadableState;
4849 var EE = require('events').EventEmitter;
4852 if (!EE.listenerCount) EE.listenerCount = function(emitter, type) {
4853 return emitter.listeners(type).length;
4857 var Stream = require('stream');
4860 var util = require('core-util-is');
4861 util.inherits = require('inherits');
4868 var debug = require('util');
4869 if (debug && debug.debuglog) {
4870 debug = debug.debuglog('stream');
4872 debug = function () {};
4877 util.inherits(Readable, Stream);
4879 function ReadableState(options, stream) {
4880 var Duplex = require('./_stream_duplex');
4882 options = options || {};
4884 // the point at which it stops calling _read() to fill the buffer
4885 // Note:
0 is a valid value, means "don't call _read preemptively ever"
4886 var hwm = options.highWaterMark;
4887 var defaultHwm = options.objectMode ?
16 :
16 *
1024;
4888 this.highWaterMark = (hwm || hwm ===
0) ? hwm : defaultHwm;
4891 this.highWaterMark = ~~this.highWaterMark;
4896 this.pipesCount =
0;
4897 this.flowing = null;
4899 this.endEmitted = false;
4900 this.reading = false;
4902 // a flag to be able to tell if the onwrite cb is called immediately,
4903 // or on a later tick. We set this to true at first, because any
4904 // actions that shouldn't happen until "later" should generally also
4905 // not happen before the first write call.
4908 // whenever we return null, then we set a flag to say
4909 // that we're awaiting a 'readable' event emission.
4910 this.needReadable = false;
4911 this.emittedReadable = false;
4912 this.readableListening = false;
4915 // object stream flag. Used to make read(n) ignore n and to
4916 // make all the buffer merging and length checks go away
4917 this.objectMode = !!options.objectMode;
4919 if (stream instanceof Duplex)
4920 this.objectMode = this.objectMode || !!options.readableObjectMode;
4922 // Crypto is kind of old and crusty. Historically, its default string
4923 // encoding is 'binary' so we have to make this configurable.
4924 // Everything else in the universe uses 'utf8', though.
4925 this.defaultEncoding = options.defaultEncoding || 'utf8';
4927 // when piping, we only care about 'readable' events that happen
4928 // after read()ing all the bytes and not getting any pushback.
4929 this.ranOut = false;
4931 // the number of writers that are awaiting a drain event in .pipe()s
4932 this.awaitDrain =
0;
4934 // if true, a maybeReadMore has been scheduled
4935 this.readingMore = false;
4937 this.decoder = null;
4938 this.encoding = null;
4939 if (options.encoding) {
4941 StringDecoder = require('string_decoder/').StringDecoder;
4942 this.decoder = new StringDecoder(options.encoding);
4943 this.encoding = options.encoding;
4947 function Readable(options) {
4948 var Duplex = require('./_stream_duplex');
4950 if (!(this instanceof Readable))
4951 return new Readable(options);
4953 this._readableState = new ReadableState(options, this);
4956 this.readable = true;
4961 // Manually shove something into the read() buffer.
4962 // This returns true if the highWaterMark has not been hit yet,
4963 // similar to how Writable.write() returns true if you should
4964 // write() some more.
4965 Readable.prototype.push = function(chunk, encoding) {
4966 var state = this._readableState;
4968 if (util.isString(chunk) && !state.objectMode) {
4969 encoding = encoding || state.defaultEncoding;
4970 if (encoding !== state.encoding) {
4971 chunk = new Buffer(chunk, encoding);
4976 return readableAddChunk(this, state, chunk, encoding, false);
4979 // Unshift should *always* be something directly out of read()
4980 Readable.prototype.unshift = function(chunk) {
4981 var state = this._readableState;
4982 return readableAddChunk(this, state, chunk, '', true);
4985 function readableAddChunk(stream, state, chunk, encoding, addToFront) {
4986 var er = chunkInvalid(state, chunk);
4988 stream.emit('error', er);
4989 } else if (util.isNullOrUndefined(chunk)) {
4990 state.reading = false;
4992 onEofChunk(stream, state);
4993 } else if (state.objectMode || chunk && chunk.length
> 0) {
4994 if (state.ended && !addToFront) {
4995 var e = new Error('stream.push() after EOF');
4996 stream.emit('error', e);
4997 } else if (state.endEmitted && addToFront) {
4998 var e = new Error('stream.unshift() after end event');
4999 stream.emit('error', e);
5001 if (state.decoder && !addToFront && !encoding)
5002 chunk = state.decoder.write(chunk);
5005 state.reading = false;
5007 // if we want the data now, just emit it.
5008 if (state.flowing && state.length ===
0 && !state.sync) {
5009 stream.emit('data', chunk);
5012 // update the buffer info.
5013 state.length += state.objectMode ?
1 : chunk.length;
5015 state.buffer.unshift(chunk);
5017 state.buffer.push(chunk);
5019 if (state.needReadable)
5020 emitReadable(stream);
5023 maybeReadMore(stream, state);
5025 } else if (!addToFront) {
5026 state.reading = false;
5029 return needMoreData(state);
5034 // if it's past the high water mark, we can push in some more.
5035 // Also, if we have no data yet, we can stand some
5036 // more bytes. This is to work around cases where hwm=
0,
5037 // such as the repl. Also, if the push() triggered a
5038 // readable event, and the user called read(largeNumber) such that
5039 // needReadable was set, then we ought to push more, so that another
5040 // 'readable' event will be triggered.
5041 function needMoreData(state) {
5042 return !state.ended &&
5043 (state.needReadable ||
5044 state.length < state.highWaterMark ||
5045 state.length ===
0);
5048 // backwards compatibility.
5049 Readable.prototype.setEncoding = function(enc) {
5051 StringDecoder = require('string_decoder/').StringDecoder;
5052 this._readableState.decoder = new StringDecoder(enc);
5053 this._readableState.encoding = enc;
5057 // Don't raise the hwm
> 128MB
5058 var MAX_HWM =
0x800000;
5059 function roundUpToNextPowerOf2(n) {
5063 // Get the next highest power of
2
5065 for (var p =
1; p <
32; p <<=
1) n |= n
>> p;
5071 function howMuchToRead(n, state) {
5072 if (state.length ===
0 && state.ended)
5075 if (state.objectMode)
5076 return n ===
0 ?
0 :
1;
5078 if (isNaN(n) || util.isNull(n)) {
5079 // only flow one buffer at a time
5080 if (state.flowing && state.buffer.length)
5081 return state.buffer[
0].length;
5083 return state.length;
5089 // If we're asking for more than the target buffer level,
5090 // then raise the water mark. Bump up to the next highest
5091 // power of
2, to prevent increasing it excessively in tiny
5093 if (n
> state.highWaterMark)
5094 state.highWaterMark = roundUpToNextPowerOf2(n);
5096 // don't have that much. return null, unless we've ended.
5097 if (n
> state.length) {
5099 state.needReadable = true;
5102 return state.length;
5108 // you can override either this method, or the async _read(n) below.
5109 Readable.prototype.read = function(n) {
5111 var state = this._readableState;
5114 if (!util.isNumber(n) || n
> 0)
5115 state.emittedReadable = false;
5117 // if we're doing read(
0) to trigger a readable event, but we
5118 // already have a bunch of data in the buffer, then just trigger
5119 // the 'readable' event and move on.
5121 state.needReadable &&
5122 (state.length
>= state.highWaterMark || state.ended)) {
5123 debug('read: emitReadable', state.length, state.ended);
5124 if (state.length ===
0 && state.ended)
5131 n = howMuchToRead(n, state);
5133 // if we've ended, and we're now clear, then finish it up.
5134 if (n ===
0 && state.ended) {
5135 if (state.length ===
0)
5140 // All the actual chunk generation logic needs to be
5141 // *below* the call to _read. The reason is that in certain
5142 // synthetic stream cases, such as passthrough streams, _read
5143 // may be a completely synchronous operation which may change
5144 // the state of the read buffer, providing enough data when
5145 // before there was *not* enough.
5147 // So, the steps are:
5148 //
1. Figure out what the state of things will be after we do
5149 // a read from the buffer.
5151 //
2. If that resulting state will trigger a _read, then call _read.
5152 // Note that this may be asynchronous, or synchronous. Yes, it is
5153 // deeply ugly to write APIs this way, but that still doesn't mean
5154 // that the Readable class should behave improperly, as streams are
5155 // designed to be sync/async agnostic.
5156 // Take note if the _read call is sync or async (ie, if the read call
5157 // has returned yet), so that we know whether or not it's safe to emit
5160 //
3. Actually pull the requested chunks out of the buffer and return.
5162 // if we need a readable event, then we need to do some reading.
5163 var doRead = state.needReadable;
5164 debug('need readable', doRead);
5166 // if we currently have less than the highWaterMark, then also read some
5167 if (state.length ===
0 || state.length - n < state.highWaterMark) {
5169 debug('length less than watermark', doRead);
5172 // however, if we've ended, then there's no point, and if we're already
5173 // reading, then it's unnecessary.
5174 if (state.ended || state.reading) {
5176 debug('reading or ended', doRead);
5181 state.reading = true;
5183 // if the length is currently zero, then we *need* a readable event.
5184 if (state.length ===
0)
5185 state.needReadable = true;
5186 // call internal read method
5187 this._read(state.highWaterMark);
5191 // If _read pushed data synchronously, then `reading` will be false,
5192 // and we need to re-evaluate how much data we can return to the user.
5193 if (doRead && !state.reading)
5194 n = howMuchToRead(nOrig, state);
5198 ret = fromList(n, state);
5202 if (util.isNull(ret)) {
5203 state.needReadable = true;
5209 // If we have nothing in the buffer, then we want to know
5210 // as soon as we *do* get something into the buffer.
5211 if (state.length ===
0 && !state.ended)
5212 state.needReadable = true;
5214 // If we tried to read() past the EOF, then emit end on the next tick.
5215 if (nOrig !== n && state.ended && state.length ===
0)
5218 if (!util.isNull(ret))
5219 this.emit('data', ret);
5224 function chunkInvalid(state, chunk) {
5226 if (!util.isBuffer(chunk) &&
5227 !util.isString(chunk) &&
5228 !util.isNullOrUndefined(chunk) &&
5229 !state.objectMode) {
5230 er = new TypeError('Invalid non-string/buffer chunk');
5236 function onEofChunk(stream, state) {
5237 if (state.decoder && !state.ended) {
5238 var chunk = state.decoder.end();
5239 if (chunk && chunk.length) {
5240 state.buffer.push(chunk);
5241 state.length += state.objectMode ?
1 : chunk.length;
5246 // emit 'readable' now to make sure it gets picked up.
5247 emitReadable(stream);
5250 // Don't emit readable right away in sync mode, because this can trigger
5251 // another read() call =
> stack overflow. This way, it might trigger
5252 // a nextTick recursion warning, but that's not so bad.
5253 function emitReadable(stream) {
5254 var state = stream._readableState;
5255 state.needReadable = false;
5256 if (!state.emittedReadable) {
5257 debug('emitReadable', state.flowing);
5258 state.emittedReadable = true;
5260 process.nextTick(function() {
5261 emitReadable_(stream);
5264 emitReadable_(stream);
5268 function emitReadable_(stream) {
5269 debug('emit readable');
5270 stream.emit('readable');
5275 // at this point, the user has presumably seen the 'readable' event,
5276 // and called read() to consume some data. that may have triggered
5277 // in turn another _read(n) call, in which case reading = true if
5278 // it's in progress.
5279 // However, if we're not ended, or reading, and the length < hwm,
5280 // then go ahead and try to read some more preemptively.
5281 function maybeReadMore(stream, state) {
5282 if (!state.readingMore) {
5283 state.readingMore = true;
5284 process.nextTick(function() {
5285 maybeReadMore_(stream, state);
5290 function maybeReadMore_(stream, state) {
5291 var len = state.length;
5292 while (!state.reading && !state.flowing && !state.ended &&
5293 state.length < state.highWaterMark) {
5294 debug('maybeReadMore read
0');
5296 if (len === state.length)
5297 // didn't get any data, stop spinning.
5302 state.readingMore = false;
5305 // abstract method. to be overridden in specific implementation classes.
5306 // call cb(er, data) where data is <= n in length.
5307 // for virtual (non-string, non-buffer) streams, "length" is somewhat
5308 // arbitrary, and perhaps not very meaningful.
5309 Readable.prototype._read = function(n) {
5310 this.emit('error', new Error('not implemented'));
5313 Readable.prototype.pipe = function(dest, pipeOpts) {
5315 var state = this._readableState;
5317 switch (state.pipesCount) {
5322 state.pipes = [state.pipes, dest];
5325 state.pipes.push(dest);
5328 state.pipesCount +=
1;
5329 debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
5331 var doEnd = (!pipeOpts || pipeOpts.end !== false) &&
5332 dest !== process.stdout &&
5333 dest !== process.stderr;
5335 var endFn = doEnd ? onend : cleanup;
5336 if (state.endEmitted)
5337 process.nextTick(endFn);
5339 src.once('end', endFn);
5341 dest.on('unpipe', onunpipe);
5342 function onunpipe(readable) {
5344 if (readable === src) {
5354 // when the dest drains, it reduces the awaitDrain counter
5355 // on the source. This would be more elegant with a .once()
5356 // handler in flow(), but adding and removing repeatedly is
5358 var ondrain = pipeOnDrain(src);
5359 dest.on('drain', ondrain);
5361 function cleanup() {
5363 // cleanup event handlers once the pipe is broken
5364 dest.removeListener('close', onclose);
5365 dest.removeListener('finish', onfinish);
5366 dest.removeListener('drain', ondrain);
5367 dest.removeListener('error', onerror);
5368 dest.removeListener('unpipe', onunpipe);
5369 src.removeListener('end', onend);
5370 src.removeListener('end', cleanup);
5371 src.removeListener('data', ondata);
5373 // if the reader is waiting for a drain event from this
5374 // specific writer, then it would cause it to never start
5376 // So, if this is awaiting a drain, then we just call it now.
5377 // If we don't know, then assume that we are waiting for one.
5378 if (state.awaitDrain &&
5379 (!dest._writableState || dest._writableState.needDrain))
5383 src.on('data', ondata);
5384 function ondata(chunk) {
5386 var ret = dest.write(chunk);
5387 if (false === ret) {
5388 debug('false write response, pause',
5389 src._readableState.awaitDrain);
5390 src._readableState.awaitDrain++;
5395 // if the dest has an error, then stop piping into it.
5396 // however, don't suppress the throwing behavior for this.
5397 function onerror(er) {
5398 debug('onerror', er);
5400 dest.removeListener('error', onerror);
5401 if (EE.listenerCount(dest, 'error') ===
0)
5402 dest.emit('error', er);
5404 // This is a brutally ugly hack to make sure that our error handler
5405 // is attached before any userland ones. NEVER DO THIS.
5406 if (!dest._events || !dest._events.error)
5407 dest.on('error', onerror);
5408 else if (isArray(dest._events.error))
5409 dest._events.error.unshift(onerror);
5411 dest._events.error = [onerror, dest._events.error];
5415 // Both close and finish should trigger unpipe, but only once.
5416 function onclose() {
5417 dest.removeListener('finish', onfinish);
5420 dest.once('close', onclose);
5421 function onfinish() {
5423 dest.removeListener('close', onclose);
5426 dest.once('finish', onfinish);
5433 // tell the dest that it's being piped to
5434 dest.emit('pipe', src);
5436 // start the flow if it hasn't been started already.
5437 if (!state.flowing) {
5438 debug('pipe resume');
5445 function pipeOnDrain(src) {
5447 var state = src._readableState;
5448 debug('pipeOnDrain', state.awaitDrain);
5449 if (state.awaitDrain)
5451 if (state.awaitDrain ===
0 && EE.listenerCount(src, 'data')) {
5452 state.flowing = true;
5459 Readable.prototype.unpipe = function(dest) {
5460 var state = this._readableState;
5462 // if we're not piping anywhere, then do nothing.
5463 if (state.pipesCount ===
0)
5466 // just one destination. most common case.
5467 if (state.pipesCount ===
1) {
5468 // passed in one, but it's not the right one.
5469 if (dest && dest !== state.pipes)
5477 state.pipesCount =
0;
5478 state.flowing = false;
5480 dest.emit('unpipe', this);
5484 // slow case. multiple pipe destinations.
5488 var dests = state.pipes;
5489 var len = state.pipesCount;
5491 state.pipesCount =
0;
5492 state.flowing = false;
5494 for (var i =
0; i < len; i++)
5495 dests[i].emit('unpipe', this);
5499 // try to find the right one.
5500 var i = indexOf(state.pipes, dest);
5504 state.pipes.splice(i,
1);
5505 state.pipesCount -=
1;
5506 if (state.pipesCount ===
1)
5507 state.pipes = state.pipes[
0];
5509 dest.emit('unpipe', this);
5514 // set up data events if they are asked for
5515 // Ensure readable listeners eventually get something
5516 Readable.prototype.on = function(ev, fn) {
5517 var res = Stream.prototype.on.call(this, ev, fn);
5519 // If listening to data, and it has not explicitly been paused,
5520 // then call resume to start the flow of data on the next tick.
5521 if (ev === 'data' && false !== this._readableState.flowing) {
5525 if (ev === 'readable' && this.readable) {
5526 var state = this._readableState;
5527 if (!state.readableListening) {
5528 state.readableListening = true;
5529 state.emittedReadable = false;
5530 state.needReadable = true;
5531 if (!state.reading) {
5533 process.nextTick(function() {
5534 debug('readable nexttick read
0');
5537 } else if (state.length) {
5538 emitReadable(this, state);
5545 Readable.prototype.addListener = Readable.prototype.on;
5547 // pause() and resume() are remnants of the legacy readable stream API
5548 // If the user uses them, then switch into old mode.
5549 Readable.prototype.resume = function() {
5550 var state = this._readableState;
5551 if (!state.flowing) {
5553 state.flowing = true;
5554 if (!state.reading) {
5555 debug('resume read
0');
5558 resume(this, state);
5563 function resume(stream, state) {
5564 if (!state.resumeScheduled) {
5565 state.resumeScheduled = true;
5566 process.nextTick(function() {
5567 resume_(stream, state);
5572 function resume_(stream, state) {
5573 state.resumeScheduled = false;
5574 stream.emit('resume');
5576 if (state.flowing && !state.reading)
5580 Readable.prototype.pause = function() {
5581 debug('call pause flowing=%j', this._readableState.flowing);
5582 if (false !== this._readableState.flowing) {
5584 this._readableState.flowing = false;
5590 function flow(stream) {
5591 var state = stream._readableState;
5592 debug('flow', state.flowing);
5593 if (state.flowing) {
5595 var chunk = stream.read();
5596 } while (null !== chunk && state.flowing);
5600 // wrap an old-style stream as the async data source.
5601 // This is *not* part of the readable stream interface.
5602 // It is an ugly unfortunate mess of history.
5603 Readable.prototype.wrap = function(stream) {
5604 var state = this._readableState;
5608 stream.on('end', function() {
5609 debug('wrapped end');
5610 if (state.decoder && !state.ended) {
5611 var chunk = state.decoder.end();
5612 if (chunk && chunk.length)
5619 stream.on('data', function(chunk) {
5620 debug('wrapped data');
5622 chunk = state.decoder.write(chunk);
5623 if (!chunk || !state.objectMode && !chunk.length)
5626 var ret = self.push(chunk);
5633 // proxy all the other methods.
5634 // important when wrapping filters and duplexes.
5635 for (var i in stream) {
5636 if (util.isFunction(stream[i]) && util.isUndefined(this[i])) {
5637 this[i] = function(method) { return function() {
5638 return stream[method].apply(stream, arguments);
5643 // proxy certain important events.
5644 var events = ['error', 'close', 'destroy', 'pause', 'resume'];
5645 forEach(events, function(ev) {
5646 stream.on(ev, self.emit.bind(self, ev));
5649 // when we try to consume some more bytes, simply unpause the
5650 // underlying stream.
5651 self._read = function(n) {
5652 debug('wrapped _read', n);
5664 // exposed for testing purposes only.
5665 Readable._fromList = fromList;
5667 // Pluck off n bytes from an array of buffers.
5668 // Length is the combined lengths of all the buffers in the list.
5669 function fromList(n, state) {
5670 var list = state.buffer;
5671 var length = state.length;
5672 var stringMode = !!state.decoder;
5673 var objectMode = !!state.objectMode;
5676 // nothing in the list, definitely empty.
5677 if (list.length ===
0)
5682 else if (objectMode)
5684 else if (!n || n
>= length) {
5685 // read it all, truncate the array.
5687 ret = list.join('');
5689 ret = Buffer.concat(list, length);
5692 // read just some of it.
5693 if (n < list[
0].length) {
5694 // just take a part of the first list item.
5695 // slice is the same for buffers and strings.
5697 ret = buf.slice(
0, n);
5698 list[
0] = buf.slice(n);
5699 } else if (n === list[
0].length) {
5700 // first list is a perfect match
5704 // we have enough to cover it, but it spans past the first buffer.
5708 ret = new Buffer(n);
5711 for (var i =
0, l = list.length; i < l && c < n; i++) {
5713 var cpy = Math.min(n - c, buf.length);
5716 ret += buf.slice(
0, cpy);
5718 buf.copy(ret, c,
0, cpy);
5720 if (cpy < buf.length)
5721 list[
0] = buf.slice(cpy);
5733 function endReadable(stream) {
5734 var state = stream._readableState;
5736 // If we get here before consuming all the bytes, then that is a
5737 // bug in node. Should never happen.
5738 if (state.length
> 0)
5739 throw new Error('endReadable called on non-empty stream');
5741 if (!state.endEmitted) {
5743 process.nextTick(function() {
5744 // Check that we didn't get one last unshift.
5745 if (!state.endEmitted && state.length ===
0) {
5746 state.endEmitted = true;
5747 stream.readable = false;
5754 function forEach (xs, f) {
5755 for (var i =
0, l = xs.length; i < l; i++) {
5760 function indexOf (xs, x) {
5761 for (var i =
0, l = xs.length; i < l; i++) {
5762 if (xs[i] === x) return i;
5767 }).call(this,require('_process'))
5768 },{
"./_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){
5769 // Copyright Joyent, Inc. and other Node contributors.
5771 // Permission is hereby granted, free of charge, to any person obtaining a
5772 // copy of this software and associated documentation files (the
5773 //
"Software"), to deal in the Software without restriction, including
5774 // without limitation the rights to use, copy, modify, merge, publish,
5775 // distribute, sublicense, and/or sell copies of the Software, and to permit
5776 // persons to whom the Software is furnished to do so, subject to the
5777 // following conditions:
5779 // The above copyright notice and this permission notice shall be included
5780 // in all copies or substantial portions of the Software.
5782 // THE SOFTWARE IS PROVIDED
"AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
5783 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
5784 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
5785 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
5786 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
5787 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
5788 // USE OR OTHER DEALINGS IN THE SOFTWARE.
5791 // a transform stream is a readable/writable stream where you do
5792 // something with the data. Sometimes it's called a
"filter",
5793 // but that's not a great name for it, since that implies a thing where
5794 // some bits pass through, and others are simply ignored. (That would
5795 // be a valid example of a transform, of course.)
5797 // While the output is causally related to the input, it's not a
5798 // necessarily symmetric or synchronous transformation. For example,
5799 // a zlib stream might take multiple plain-text writes(), and then
5800 // emit a single compressed chunk some time in the future.
5802 // Here's how this works:
5804 // The Transform stream has all the aspects of the readable and writable
5805 // stream classes. When you write(chunk), that calls _write(chunk,cb)
5806 // internally, and returns false if there's a lot of pending writes
5807 // buffered up. When you call read(), that calls _read(n) until
5808 // there's enough pending readable data buffered up.
5810 // In a transform stream, the written data is placed in a buffer. When
5811 // _read(n) is called, it transforms the queued up data, calling the
5812 // buffered _write cb's as it consumes chunks. If consuming a single
5813 // written chunk would result in multiple output chunks, then the first
5814 // outputted bit calls the readcb, and subsequent chunks just go into
5815 // the read buffer, and will cause it to emit 'readable' if necessary.
5817 // This way, back-pressure is actually determined by the reading side,
5818 // since _read has to be called to start processing a new chunk. However,
5819 // a pathological inflate type of transform can cause excessive buffering
5820 // here. For example, imagine a stream where every byte of input is
5821 // interpreted as an integer from
0-
255, and then results in that many
5822 // bytes of output. Writing the
4 bytes {ff,ff,ff,ff} would result in
5823 //
1kb of data being output. In this case, you could write a very small
5824 // amount of input, and end up with a very large amount of output. In
5825 // such a pathological inflating mechanism, there'd be no way to tell
5826 // the system to stop doing the transform. A single
4MB write could
5827 // cause the system to run out of memory.
5829 // However, even in such a pathological case, only a single written chunk
5830 // would be consumed, and then the rest would wait (un-transformed) until
5831 // the results of the previous transformed chunk were consumed.
5833 module.exports = Transform;
5835 var Duplex = require('./_stream_duplex');
5838 var util = require('core-util-is');
5839 util.inherits = require('inherits');
5842 util.inherits(Transform, Duplex);
5845 function TransformState(options, stream) {
5846 this.afterTransform = function(er, data) {
5847 return afterTransform(stream, er, data);
5850 this.needTransform = false;
5851 this.transforming = false;
5852 this.writecb = null;
5853 this.writechunk = null;
5856 function afterTransform(stream, er, data) {
5857 var ts = stream._transformState;
5858 ts.transforming = false;
5860 var cb = ts.writecb;
5863 return stream.emit('error', new Error('no writecb in Transform class'));
5865 ts.writechunk = null;
5868 if (!util.isNullOrUndefined(data))
5874 var rs = stream._readableState;
5876 if (rs.needReadable || rs.length < rs.highWaterMark) {
5877 stream._read(rs.highWaterMark);
5882 function Transform(options) {
5883 if (!(this instanceof Transform))
5884 return new Transform(options);
5886 Duplex.call(this, options);
5888 this._transformState = new TransformState(options, this);
5890 // when the writable side finishes, then flush out anything remaining.
5893 // start out asking for a readable event once data is transformed.
5894 this._readableState.needReadable = true;
5896 // we have implemented the _read method, and done the other things
5897 // that Readable wants before the first _read call, so unset the
5899 this._readableState.sync = false;
5901 this.once('prefinish', function() {
5902 if (util.isFunction(this._flush))
5903 this._flush(function(er) {
5911 Transform.prototype.push = function(chunk, encoding) {
5912 this._transformState.needTransform = false;
5913 return Duplex.prototype.push.call(this, chunk, encoding);
5916 // This is the part where you do stuff!
5917 // override this function in implementation classes.
5918 // 'chunk' is an input chunk.
5920 // Call `push(newChunk)` to pass along transformed output
5921 // to the readable side. You may call 'push' zero or more times.
5923 // Call `cb(err)` when you are done with this chunk. If you pass
5924 // an error, then that'll put the hurt on the whole operation. If you
5925 // never call cb(), then you'll never get another chunk.
5926 Transform.prototype._transform = function(chunk, encoding, cb) {
5927 throw new Error('not implemented');
5930 Transform.prototype._write = function(chunk, encoding, cb) {
5931 var ts = this._transformState;
5933 ts.writechunk = chunk;
5934 ts.writeencoding = encoding;
5935 if (!ts.transforming) {
5936 var rs = this._readableState;
5937 if (ts.needTransform ||
5939 rs.length < rs.highWaterMark)
5940 this._read(rs.highWaterMark);
5944 // Doesn't matter what the args are here.
5945 // _transform does all the work.
5946 // That we got here means that the readable side wants more data.
5947 Transform.prototype._read = function(n) {
5948 var ts = this._transformState;
5950 if (!util.isNull(ts.writechunk) && ts.writecb && !ts.transforming) {
5951 ts.transforming = true;
5952 this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
5954 // mark that we need a transform, so that any data that comes in
5955 // will get processed, now that we've asked for it.
5956 ts.needTransform = true;
5961 function done(stream, er) {
5963 return stream.emit('error', er);
5965 // if there's nothing in the write buffer, then that means
5966 // that nothing more will ever be provided
5967 var ws = stream._writableState;
5968 var ts = stream._transformState;
5971 throw new Error('calling transform done when ws.length !=
0');
5973 if (ts.transforming)
5974 throw new Error('calling transform done when still transforming');
5976 return stream.push(null);
5979 },{"./_stream_duplex":
16,"core-util-is":
21,"inherits":
12}],
20:[function(require,module,exports){
5980 (function (process){
5981 // Copyright Joyent, Inc. and other Node contributors.
5983 // Permission is hereby granted, free of charge, to any person obtaining a
5984 // copy of this software and associated documentation files (the
5985 // "Software"), to deal in the Software without restriction, including
5986 // without limitation the rights to use, copy, modify, merge, publish,
5987 // distribute, sublicense, and/or sell copies of the Software, and to permit
5988 // persons to whom the Software is furnished to do so, subject to the
5989 // following conditions:
5991 // The above copyright notice and this permission notice shall be included
5992 // in all copies or substantial portions of the Software.
5994 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
5995 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
5996 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
5997 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
5998 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
5999 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6000 // USE OR OTHER DEALINGS IN THE SOFTWARE.
6002 // A bit simpler than readable streams.
6003 // Implement an async ._write(chunk, cb), and it'll handle all
6004 // the drain event emission and buffering.
6006 module.exports = Writable;
6009 var Buffer = require('buffer').Buffer;
6012 Writable.WritableState = WritableState;
6016 var util = require('core-util-is');
6017 util.inherits = require('inherits');
6020 var Stream = require('stream');
6022 util.inherits(Writable, Stream);
6024 function WriteReq(chunk, encoding, cb) {
6026 this.encoding = encoding;
6030 function WritableState(options, stream) {
6031 var Duplex = require('./_stream_duplex');
6033 options = options || {};
6035 // the point at which write() starts returning false
6036 // Note:
0 is a valid value, means that we always return false if
6037 // the entire buffer is not flushed immediately on write()
6038 var hwm = options.highWaterMark;
6039 var defaultHwm = options.objectMode ?
16 :
16 *
1024;
6040 this.highWaterMark = (hwm || hwm ===
0) ? hwm : defaultHwm;
6042 // object stream flag to indicate whether or not this stream
6043 // contains buffers or objects.
6044 this.objectMode = !!options.objectMode;
6046 if (stream instanceof Duplex)
6047 this.objectMode = this.objectMode || !!options.writableObjectMode;
6050 this.highWaterMark = ~~this.highWaterMark;
6052 this.needDrain = false;
6053 // at the start of calling end()
6054 this.ending = false;
6055 // when end() has been called, and returned
6057 // when 'finish' is emitted
6058 this.finished = false;
6060 // should we decode strings into buffers before passing to _write?
6061 // this is here so that some node-core streams can optimize string
6062 // handling at a lower level.
6063 var noDecode = options.decodeStrings === false;
6064 this.decodeStrings = !noDecode;
6066 // Crypto is kind of old and crusty. Historically, its default string
6067 // encoding is 'binary' so we have to make this configurable.
6068 // Everything else in the universe uses 'utf8', though.
6069 this.defaultEncoding = options.defaultEncoding || 'utf8';
6071 // not an actual buffer we keep track of, but a measurement
6072 // of how much we're waiting to get pushed to some underlying
6076 // a flag to see when we're in the middle of a write.
6077 this.writing = false;
6079 // when true all writes will be buffered until .uncork() call
6082 // a flag to be able to tell if the onwrite cb is called immediately,
6083 // or on a later tick. We set this to true at first, because any
6084 // actions that shouldn't happen until "later" should generally also
6085 // not happen before the first write call.
6088 // a flag to know if we're processing previously buffered items, which
6089 // may call the _write() callback in the same tick, so that we don't
6090 // end up in an overlapped onwrite situation.
6091 this.bufferProcessing = false;
6093 // the callback that's passed to _write(chunk,cb)
6094 this.onwrite = function(er) {
6095 onwrite(stream, er);
6098 // the callback that the user supplies to write(chunk,encoding,cb)
6099 this.writecb = null;
6101 // the amount that is being written when _write is called.
6106 // number of pending user-supplied write callbacks
6107 // this must be
0 before 'finish' can be emitted
6110 // emit prefinish if the only thing we're waiting for is _write cbs
6111 // This is relevant for synchronous Transform streams
6112 this.prefinished = false;
6114 // True if the error was already emitted and should not be thrown again
6115 this.errorEmitted = false;
6118 function Writable(options) {
6119 var Duplex = require('./_stream_duplex');
6121 // Writable ctor is applied to Duplexes, though they're not
6122 // instanceof Writable, they're instanceof Readable.
6123 if (!(this instanceof Writable) && !(this instanceof Duplex))
6124 return new Writable(options);
6126 this._writableState = new WritableState(options, this);
6129 this.writable = true;
6134 // Otherwise people can pipe Writable streams, which is just wrong.
6135 Writable.prototype.pipe = function() {
6136 this.emit('error', new Error('Cannot pipe. Not readable.'));
6140 function writeAfterEnd(stream, state, cb) {
6141 var er = new Error('write after end');
6142 // TODO: defer error events consistently everywhere, not just the cb
6143 stream.emit('error', er);
6144 process.nextTick(function() {
6149 // If we get something that is not a buffer, string, null, or undefined,
6150 // and we're not in objectMode, then that's an error.
6151 // Otherwise stream chunks are all considered to be of length=
1, and the
6152 // watermarks determine how many objects to keep in the buffer, rather than
6153 // how many bytes or characters.
6154 function validChunk(stream, state, chunk, cb) {
6156 if (!util.isBuffer(chunk) &&
6157 !util.isString(chunk) &&
6158 !util.isNullOrUndefined(chunk) &&
6159 !state.objectMode) {
6160 var er = new TypeError('Invalid non-string/buffer chunk');
6161 stream.emit('error', er);
6162 process.nextTick(function() {
6170 Writable.prototype.write = function(chunk, encoding, cb) {
6171 var state = this._writableState;
6174 if (util.isFunction(encoding)) {
6179 if (util.isBuffer(chunk))
6180 encoding = 'buffer';
6182 encoding = state.defaultEncoding;
6184 if (!util.isFunction(cb))
6188 writeAfterEnd(this, state, cb);
6189 else if (validChunk(this, state, chunk, cb)) {
6191 ret = writeOrBuffer(this, state, chunk, encoding, cb);
6197 Writable.prototype.cork = function() {
6198 var state = this._writableState;
6203 Writable.prototype.uncork = function() {
6204 var state = this._writableState;
6209 if (!state.writing &&
6212 !state.bufferProcessing &&
6213 state.buffer.length)
6214 clearBuffer(this, state);
6218 function decodeChunk(state, chunk, encoding) {
6219 if (!state.objectMode &&
6220 state.decodeStrings !== false &&
6221 util.isString(chunk)) {
6222 chunk = new Buffer(chunk, encoding);
6227 // if we're already writing something, then just put this
6228 // in the queue, and wait our turn. Otherwise, call _write
6229 // If we return false, then we need a drain event, so set that flag.
6230 function writeOrBuffer(stream, state, chunk, encoding, cb) {
6231 chunk = decodeChunk(state, chunk, encoding);
6232 if (util.isBuffer(chunk))
6233 encoding = 'buffer';
6234 var len = state.objectMode ?
1 : chunk.length;
6236 state.length += len;
6238 var ret = state.length < state.highWaterMark;
6239 // we must ensure that previous needDrain will not be reset to false.
6241 state.needDrain = true;
6243 if (state.writing || state.corked)
6244 state.buffer.push(new WriteReq(chunk, encoding, cb));
6246 doWrite(stream, state, false, len, chunk, encoding, cb);
6251 function doWrite(stream, state, writev, len, chunk, encoding, cb) {
6252 state.writelen = len;
6254 state.writing = true;
6257 stream._writev(chunk, state.onwrite);
6259 stream._write(chunk, encoding, state.onwrite);
6263 function onwriteError(stream, state, sync, er, cb) {
6265 process.nextTick(function() {
6274 stream._writableState.errorEmitted = true;
6275 stream.emit('error', er);
6278 function onwriteStateUpdate(state) {
6279 state.writing = false;
6280 state.writecb = null;
6281 state.length -= state.writelen;
6285 function onwrite(stream, er) {
6286 var state = stream._writableState;
6287 var sync = state.sync;
6288 var cb = state.writecb;
6290 onwriteStateUpdate(state);
6293 onwriteError(stream, state, sync, er, cb);
6295 // Check if we're actually ready to finish, but don't emit yet
6296 var finished = needFinish(stream, state);
6300 !state.bufferProcessing &&
6301 state.buffer.length) {
6302 clearBuffer(stream, state);
6306 process.nextTick(function() {
6307 afterWrite(stream, state, finished, cb);
6310 afterWrite(stream, state, finished, cb);
6315 function afterWrite(stream, state, finished, cb) {
6317 onwriteDrain(stream, state);
6320 finishMaybe(stream, state);
6323 // Must force callback to be called on nextTick, so that we don't
6324 // emit 'drain' before the write() consumer gets the 'false' return
6325 // value, and has a chance to attach a 'drain' listener.
6326 function onwriteDrain(stream, state) {
6327 if (state.length ===
0 && state.needDrain) {
6328 state.needDrain = false;
6329 stream.emit('drain');
6334 // if there's something in the buffer waiting, then process it
6335 function clearBuffer(stream, state) {
6336 state.bufferProcessing = true;
6338 if (stream._writev && state.buffer.length
> 1) {
6339 // Fast case, write everything using _writev()
6341 for (var c =
0; c < state.buffer.length; c++)
6342 cbs.push(state.buffer[c].callback);
6344 // count the one we are adding, as well.
6345 // TODO(isaacs) clean this up
6347 doWrite(stream, state, true, state.length, state.buffer, '', function(err) {
6348 for (var i =
0; i < cbs.length; i++) {
6357 // Slow case, write chunks one-by-one
6358 for (var c =
0; c < state.buffer.length; c++) {
6359 var entry = state.buffer[c];
6360 var chunk = entry.chunk;
6361 var encoding = entry.encoding;
6362 var cb = entry.callback;
6363 var len = state.objectMode ?
1 : chunk.length;
6365 doWrite(stream, state, false, len, chunk, encoding, cb);
6367 // if we didn't call the onwrite immediately, then
6368 // it means that we need to wait until it does.
6369 // also, that means that the chunk and cb are currently
6370 // being processed, so move the buffer counter past them.
6371 if (state.writing) {
6377 if (c < state.buffer.length)
6378 state.buffer = state.buffer.slice(c);
6380 state.buffer.length =
0;
6383 state.bufferProcessing = false;
6386 Writable.prototype._write = function(chunk, encoding, cb) {
6387 cb(new Error('not implemented'));
6391 Writable.prototype._writev = null;
6393 Writable.prototype.end = function(chunk, encoding, cb) {
6394 var state = this._writableState;
6396 if (util.isFunction(chunk)) {
6400 } else if (util.isFunction(encoding)) {
6405 if (!util.isNullOrUndefined(chunk))
6406 this.write(chunk, encoding);
6408 // .end() fully uncorks
6414 // ignore unnecessary end() calls.
6415 if (!state.ending && !state.finished)
6416 endWritable(this, state, cb);
6420 function needFinish(stream, state) {
6421 return (state.ending &&
6422 state.length ===
0 &&
6427 function prefinish(stream, state) {
6428 if (!state.prefinished) {
6429 state.prefinished = true;
6430 stream.emit('prefinish');
6434 function finishMaybe(stream, state) {
6435 var need = needFinish(stream, state);
6437 if (state.pendingcb ===
0) {
6438 prefinish(stream, state);
6439 state.finished = true;
6440 stream.emit('finish');
6442 prefinish(stream, state);
6447 function endWritable(stream, state, cb) {
6448 state.ending = true;
6449 finishMaybe(stream, state);
6452 process.nextTick(cb);
6454 stream.once('finish', cb);
6459 }).call(this,require('_process'))
6460 },{
"./_stream_duplex":
16,
"_process":
14,
"buffer":
7,
"core-util-is":
21,
"inherits":
12,
"stream":
26}],
21:[function(require,module,exports){
6462 // Copyright Joyent, Inc. and other Node contributors.
6464 // Permission is hereby granted, free of charge, to any person obtaining a
6465 // copy of this software and associated documentation files (the
6466 //
"Software"), to deal in the Software without restriction, including
6467 // without limitation the rights to use, copy, modify, merge, publish,
6468 // distribute, sublicense, and/or sell copies of the Software, and to permit
6469 // persons to whom the Software is furnished to do so, subject to the
6470 // following conditions:
6472 // The above copyright notice and this permission notice shall be included
6473 // in all copies or substantial portions of the Software.
6475 // THE SOFTWARE IS PROVIDED
"AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6476 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6477 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6478 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6479 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6480 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6481 // USE OR OTHER DEALINGS IN THE SOFTWARE.
6483 // NOTE: These type checking functions intentionally don't use `instanceof`
6484 // because it is fragile and can be easily faked with `Object.create()`.
6485 function isArray(ar) {
6486 return Array.isArray(ar);
6488 exports.isArray = isArray;
6490 function isBoolean(arg) {
6491 return typeof arg === 'boolean';
6493 exports.isBoolean = isBoolean;
6495 function isNull(arg) {
6496 return arg === null;
6498 exports.isNull = isNull;
6500 function isNullOrUndefined(arg) {
6503 exports.isNullOrUndefined = isNullOrUndefined;
6505 function isNumber(arg) {
6506 return typeof arg === 'number';
6508 exports.isNumber = isNumber;
6510 function isString(arg) {
6511 return typeof arg === 'string';
6513 exports.isString = isString;
6515 function isSymbol(arg) {
6516 return typeof arg === 'symbol';
6518 exports.isSymbol = isSymbol;
6520 function isUndefined(arg) {
6521 return arg === void
0;
6523 exports.isUndefined = isUndefined;
6525 function isRegExp(re) {
6526 return isObject(re) && objectToString(re) === '[object RegExp]';
6528 exports.isRegExp = isRegExp;
6530 function isObject(arg) {
6531 return typeof arg === 'object' && arg !== null;
6533 exports.isObject = isObject;
6535 function isDate(d) {
6536 return isObject(d) && objectToString(d) === '[object Date]';
6538 exports.isDate = isDate;
6540 function isError(e) {
6541 return isObject(e) &&
6542 (objectToString(e) === '[object Error]' || e instanceof Error);
6544 exports.isError = isError;
6546 function isFunction(arg) {
6547 return typeof arg === 'function';
6549 exports.isFunction = isFunction;
6551 function isPrimitive(arg) {
6552 return arg === null ||
6553 typeof arg === 'boolean' ||
6554 typeof arg === 'number' ||
6555 typeof arg === 'string' ||
6556 typeof arg === 'symbol' || // ES6 symbol
6557 typeof arg === 'undefined';
6559 exports.isPrimitive = isPrimitive;
6561 function isBuffer(arg) {
6562 return Buffer.isBuffer(arg);
6564 exports.isBuffer = isBuffer;
6566 function objectToString(o) {
6567 return Object.prototype.toString.call(o);
6569 }).call(this,require(
"buffer").Buffer)
6570 },{
"buffer":
7}],
22:[function(require,module,exports){
6571 module.exports = require(
"./lib/_stream_passthrough.js")
6573 },{
"./lib/_stream_passthrough.js":
17}],
23:[function(require,module,exports){
6574 exports = module.exports = require('./lib/_stream_readable.js');
6575 exports.Stream = require('stream');
6576 exports.Readable = exports;
6577 exports.Writable = require('./lib/_stream_writable.js');
6578 exports.Duplex = require('./lib/_stream_duplex.js');
6579 exports.Transform = require('./lib/_stream_transform.js');
6580 exports.PassThrough = require('./lib/_stream_passthrough.js');
6582 },{
"./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){
6583 module.exports = require(
"./lib/_stream_transform.js")
6585 },{
"./lib/_stream_transform.js":
19}],
25:[function(require,module,exports){
6586 module.exports = require(
"./lib/_stream_writable.js")
6588 },{
"./lib/_stream_writable.js":
20}],
26:[function(require,module,exports){
6589 // Copyright Joyent, Inc. and other Node contributors.
6591 // Permission is hereby granted, free of charge, to any person obtaining a
6592 // copy of this software and associated documentation files (the
6593 //
"Software"), to deal in the Software without restriction, including
6594 // without limitation the rights to use, copy, modify, merge, publish,
6595 // distribute, sublicense, and/or sell copies of the Software, and to permit
6596 // persons to whom the Software is furnished to do so, subject to the
6597 // following conditions:
6599 // The above copyright notice and this permission notice shall be included
6600 // in all copies or substantial portions of the Software.
6602 // THE SOFTWARE IS PROVIDED
"AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6603 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6604 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6605 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6606 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6607 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6608 // USE OR OTHER DEALINGS IN THE SOFTWARE.
6610 module.exports = Stream;
6612 var EE = require('events').EventEmitter;
6613 var inherits = require('inherits');
6615 inherits(Stream, EE);
6616 Stream.Readable = require('readable-stream/readable.js');
6617 Stream.Writable = require('readable-stream/writable.js');
6618 Stream.Duplex = require('readable-stream/duplex.js');
6619 Stream.Transform = require('readable-stream/transform.js');
6620 Stream.PassThrough = require('readable-stream/passthrough.js');
6622 // Backwards-compat with node
0.4.x
6623 Stream.Stream = Stream;
6627 // old-style streams. Note that the pipe method (the only relevant
6628 // part of this class) is overridden in the Readable class.
6634 Stream.prototype.pipe = function(dest, options) {
6637 function ondata(chunk) {
6638 if (dest.writable) {
6639 if (false === dest.write(chunk) && source.pause) {
6645 source.on('data', ondata);
6647 function ondrain() {
6648 if (source.readable && source.resume) {
6653 dest.on('drain', ondrain);
6655 // If the 'end' option is not supplied, dest.end() will be called when
6656 // source gets the 'end' or 'close' events. Only dest.end() once.
6657 if (!dest._isStdio && (!options || options.end !== false)) {
6658 source.on('end', onend);
6659 source.on('close', onclose);
6662 var didOnEnd = false;
6664 if (didOnEnd) return;
6671 function onclose() {
6672 if (didOnEnd) return;
6675 if (typeof dest.destroy === 'function') dest.destroy();
6678 // don't leave dangling pipes when there are errors.
6679 function onerror(er) {
6681 if (EE.listenerCount(this, 'error') ===
0) {
6682 throw er; // Unhandled stream error in pipe.
6686 source.on('error', onerror);
6687 dest.on('error', onerror);
6689 // remove all the event listeners that were added.
6690 function cleanup() {
6691 source.removeListener('data', ondata);
6692 dest.removeListener('drain', ondrain);
6694 source.removeListener('end', onend);
6695 source.removeListener('close', onclose);
6697 source.removeListener('error', onerror);
6698 dest.removeListener('error', onerror);
6700 source.removeListener('end', cleanup);
6701 source.removeListener('close', cleanup);
6703 dest.removeListener('close', cleanup);
6706 source.on('end', cleanup);
6707 source.on('close', cleanup);
6709 dest.on('close', cleanup);
6711 dest.emit('pipe', source);
6713 // Allow for unix-like usage: A.pipe(B).pipe(C)
6717 },{
"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){
6718 // Copyright Joyent, Inc. and other Node contributors.
6720 // Permission is hereby granted, free of charge, to any person obtaining a
6721 // copy of this software and associated documentation files (the
6722 //
"Software"), to deal in the Software without restriction, including
6723 // without limitation the rights to use, copy, modify, merge, publish,
6724 // distribute, sublicense, and/or sell copies of the Software, and to permit
6725 // persons to whom the Software is furnished to do so, subject to the
6726 // following conditions:
6728 // The above copyright notice and this permission notice shall be included
6729 // in all copies or substantial portions of the Software.
6731 // THE SOFTWARE IS PROVIDED
"AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6732 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6733 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6734 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6735 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6736 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6737 // USE OR OTHER DEALINGS IN THE SOFTWARE.
6739 var Buffer = require('buffer').Buffer;
6741 var isBufferEncoding = Buffer.isEncoding
6742 || function(encoding) {
6743 switch (encoding && encoding.toLowerCase()) {
6744 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;
6745 default: return false;
6750 function assertEncoding(encoding) {
6751 if (encoding && !isBufferEncoding(encoding)) {
6752 throw new Error('Unknown encoding: ' + encoding);
6756 // StringDecoder provides an interface for efficiently splitting a series of
6757 // buffers into a series of JS strings without breaking apart multi-byte
6758 // characters. CESU-
8 is handled as part of the UTF-
8 encoding.
6760 // @TODO Handling all encodings inside a single object makes it very difficult
6761 // to reason about this code, so it should be split up in the future.
6762 // @TODO There should be a utf8-strict encoding that rejects invalid UTF-
8 code
6763 // points as used by CESU-
8.
6764 var StringDecoder = exports.StringDecoder = function(encoding) {
6765 this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, '');
6766 assertEncoding(encoding);
6767 switch (this.encoding) {
6769 // CESU-
8 represents each of Surrogate Pair by
3-bytes
6770 this.surrogateSize =
3;
6774 // UTF-
16 represents each of Surrogate Pair by
2-bytes
6775 this.surrogateSize =
2;
6776 this.detectIncompleteChar = utf16DetectIncompleteChar;
6779 // Base-
64 stores
3 bytes in
4 chars, and pads the remainder.
6780 this.surrogateSize =
3;
6781 this.detectIncompleteChar = base64DetectIncompleteChar;
6784 this.write = passThroughWrite;
6788 // Enough space to store all bytes of a single character. UTF-
8 needs
4
6789 // bytes, but CESU-
8 may require up to
6 (
3 bytes per surrogate).
6790 this.charBuffer = new Buffer(
6);
6791 // Number of bytes received for the current incomplete multi-byte character.
6792 this.charReceived =
0;
6793 // Number of bytes expected for the current incomplete multi-byte character.
6794 this.charLength =
0;
6798 // write decodes the given buffer and returns it as JS string that is
6799 // guaranteed to not contain any partial multi-byte characters. Any partial
6800 // character found at the end of the buffer is buffered up, and will be
6801 // returned when calling write again with the remaining bytes.
6803 // Note: Converting a Buffer containing an orphan surrogate to a String
6804 // currently works, but converting a String to a Buffer (via `new Buffer`, or
6805 // Buffer#write) will replace incomplete surrogates with the unicode
6806 // replacement character. See https://codereview.chromium.org/
121173009/ .
6807 StringDecoder.prototype.write = function(buffer) {
6809 // if our last write ended with an incomplete multibyte character
6810 while (this.charLength) {
6811 // determine how many remaining bytes this buffer has to offer for this char
6812 var available = (buffer.length
>= this.charLength - this.charReceived) ?
6813 this.charLength - this.charReceived :
6816 // add the new bytes to the char buffer
6817 buffer.copy(this.charBuffer, this.charReceived,
0, available);
6818 this.charReceived += available;
6820 if (this.charReceived < this.charLength) {
6821 // still not enough chars in this buffer? wait for more ...
6825 // remove bytes belonging to the current character from the buffer
6826 buffer = buffer.slice(available, buffer.length);
6828 // get the character that was split
6829 charStr = this.charBuffer.slice(
0, this.charLength).toString(this.encoding);
6831 // CESU-
8: lead surrogate (D800-DBFF) is also the incomplete character
6832 var charCode = charStr.charCodeAt(charStr.length -
1);
6833 if (charCode
>=
0xD800 && charCode <=
0xDBFF) {
6834 this.charLength += this.surrogateSize;
6838 this.charReceived = this.charLength =
0;
6840 // if there are no more bytes in this buffer, just emit our char
6841 if (buffer.length ===
0) {
6847 // determine and set charLength / charReceived
6848 this.detectIncompleteChar(buffer);
6850 var end = buffer.length;
6851 if (this.charLength) {
6852 // buffer the incomplete character bytes we got
6853 buffer.copy(this.charBuffer,
0, buffer.length - this.charReceived, end);
6854 end -= this.charReceived;
6857 charStr += buffer.toString(this.encoding,
0, end);
6859 var end = charStr.length -
1;
6860 var charCode = charStr.charCodeAt(end);
6861 // CESU-
8: lead surrogate (D800-DBFF) is also the incomplete character
6862 if (charCode
>=
0xD800 && charCode <=
0xDBFF) {
6863 var size = this.surrogateSize;
6864 this.charLength += size;
6865 this.charReceived += size;
6866 this.charBuffer.copy(this.charBuffer, size,
0, size);
6867 buffer.copy(this.charBuffer,
0,
0, size);
6868 return charStr.substring(
0, end);
6871 // or just emit the charStr
6875 // detectIncompleteChar determines if there is an incomplete UTF-
8 character at
6876 // the end of the given buffer. If so, it sets this.charLength to the byte
6877 // length that character, and sets this.charReceived to the number of bytes
6878 // that are available for this character.
6879 StringDecoder.prototype.detectIncompleteChar = function(buffer) {
6880 // determine how many bytes we have to check at the end of this buffer
6881 var i = (buffer.length
>=
3) ?
3 : buffer.length;
6883 // Figure out if one of the last i bytes of our buffer announces an
6885 for (; i
> 0; i--) {
6886 var c = buffer[buffer.length - i];
6888 // See http://en.wikipedia.org/wiki/UTF-
8#Description
6891 if (i ==
1 && c
>> 5 ==
0x06) {
6892 this.charLength =
2;
6897 if (i <=
2 && c
>> 4 ==
0x0E) {
6898 this.charLength =
3;
6903 if (i <=
3 && c
>> 3 ==
0x1E) {
6904 this.charLength =
4;
6908 this.charReceived = i;
6911 StringDecoder.prototype.end = function(buffer) {
6913 if (buffer && buffer.length)
6914 res = this.write(buffer);
6916 if (this.charReceived) {
6917 var cr = this.charReceived;
6918 var buf = this.charBuffer;
6919 var enc = this.encoding;
6920 res += buf.slice(
0, cr).toString(enc);
6926 function passThroughWrite(buffer) {
6927 return buffer.toString(this.encoding);
6930 function utf16DetectIncompleteChar(buffer) {
6931 this.charReceived = buffer.length %
2;
6932 this.charLength = this.charReceived ?
2 :
0;
6935 function base64DetectIncompleteChar(buffer) {
6936 this.charReceived = buffer.length %
3;
6937 this.charLength = this.charReceived ?
3 :
0;
6940 },{
"buffer":
7}],
28:[function(require,module,exports){
6941 module.exports = function isBuffer(arg) {
6942 return arg && typeof arg === 'object'
6943 && typeof arg.copy === 'function'
6944 && typeof arg.fill === 'function'
6945 && typeof arg.readUInt8 === 'function';
6947 },{}],
29:[function(require,module,exports){
6948 (function (process,global){
6949 // Copyright Joyent, Inc. and other Node contributors.
6951 // Permission is hereby granted, free of charge, to any person obtaining a
6952 // copy of this software and associated documentation files (the
6953 //
"Software"), to deal in the Software without restriction, including
6954 // without limitation the rights to use, copy, modify, merge, publish,
6955 // distribute, sublicense, and/or sell copies of the Software, and to permit
6956 // persons to whom the Software is furnished to do so, subject to the
6957 // following conditions:
6959 // The above copyright notice and this permission notice shall be included
6960 // in all copies or substantial portions of the Software.
6962 // THE SOFTWARE IS PROVIDED
"AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6963 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6964 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6965 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6966 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6967 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6968 // USE OR OTHER DEALINGS IN THE SOFTWARE.
6970 var formatRegExp = /%[sdj%]/g;
6971 exports.format = function(f) {
6974 for (var i =
0; i < arguments.length; i++) {
6975 objects.push(inspect(arguments[i]));
6977 return objects.join(' ');
6981 var args = arguments;
6982 var len = args.length;
6983 var str = String(f).replace(formatRegExp, function(x) {
6984 if (x === '%%') return '%';
6985 if (i
>= len) return x;
6987 case '%s': return String(args[i++]);
6988 case '%d': return Number(args[i++]);
6991 return JSON.stringify(args[i++]);
6993 return '[Circular]';
6999 for (var x = args[i]; i < len; x = args[++i]) {
7000 if (isNull(x) || !isObject(x)) {
7003 str += ' ' + inspect(x);
7010 // Mark that a method should not be used.
7011 // Returns a modified function which warns once by default.
7012 // If --no-deprecation is set, then it is a no-op.
7013 exports.deprecate = function(fn, msg) {
7014 // Allow for deprecating things in the process of starting up.
7015 if (isUndefined(global.process)) {
7017 return exports.deprecate(fn, msg).apply(this, arguments);
7021 if (process.noDeprecation === true) {
7026 function deprecated() {
7028 if (process.throwDeprecation) {
7029 throw new Error(msg);
7030 } else if (process.traceDeprecation) {
7037 return fn.apply(this, arguments);
7046 exports.debuglog = function(set) {
7047 if (isUndefined(debugEnviron))
7048 debugEnviron = process.env.NODE_DEBUG || '';
7049 set = set.toUpperCase();
7051 if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
7052 var pid = process.pid;
7053 debugs[set] = function() {
7054 var msg = exports.format.apply(exports, arguments);
7055 console.error('%s %d: %s', set, pid, msg);
7058 debugs[set] = function() {};
7066 * Echos the value of a value. Trys to print the value out
7067 * in the best way possible given the different types.
7069 * @param {Object} obj The object to print out.
7070 * @param {Object} opts Optional options object that alters the output.
7072 /* legacy: obj, showHidden, depth, colors*/
7073 function inspect(obj, opts) {
7077 stylize: stylizeNoColor
7080 if (arguments.length
>=
3) ctx.depth = arguments[
2];
7081 if (arguments.length
>=
4) ctx.colors = arguments[
3];
7082 if (isBoolean(opts)) {
7084 ctx.showHidden = opts;
7086 // got an "options" object
7087 exports._extend(ctx, opts);
7089 // set default options
7090 if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
7091 if (isUndefined(ctx.depth)) ctx.depth =
2;
7092 if (isUndefined(ctx.colors)) ctx.colors = false;
7093 if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
7094 if (ctx.colors) ctx.stylize = stylizeWithColor;
7095 return formatValue(ctx, obj, ctx.depth);
7097 exports.inspect = inspect;
7100 // http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
7104 'underline' : [
4,
24],
7105 'inverse' : [
7,
27],
7112 'magenta' : [
35,
39],
7117 // Don't use 'blue' not visible on cmd.exe
7121 'boolean': 'yellow',
7122 'undefined': 'grey',
7126 // "name": intentionally not styling
7131 function stylizeWithColor(str, styleType) {
7132 var style = inspect.styles[styleType];
7135 return '\u001b[' + inspect.colors[style][
0] + 'm' + str +
7136 '\u001b[' + inspect.colors[style][
1] + 'm';
7143 function stylizeNoColor(str, styleType) {
7148 function arrayToHash(array) {
7151 array.forEach(function(val, idx) {
7159 function formatValue(ctx, value, recurseTimes) {
7160 // Provide a hook for user-specified inspect functions.
7161 // Check that value is an object with an inspect function on it
7162 if (ctx.customInspect &&
7164 isFunction(value.inspect) &&
7165 // Filter out the util module, it's inspect function is special
7166 value.inspect !== exports.inspect &&
7167 // Also filter out any prototype objects using the circular check.
7168 !(value.constructor && value.constructor.prototype === value)) {
7169 var ret = value.inspect(recurseTimes, ctx);
7170 if (!isString(ret)) {
7171 ret = formatValue(ctx, ret, recurseTimes);
7176 // Primitive types cannot have properties
7177 var primitive = formatPrimitive(ctx, value);
7182 // Look up the keys of the object.
7183 var keys = Object.keys(value);
7184 var visibleKeys = arrayToHash(keys);
7186 if (ctx.showHidden) {
7187 keys = Object.getOwnPropertyNames(value);
7190 // IE doesn't make error fields non-enumerable
7191 // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs
.94).aspx
7193 && (keys.indexOf('message')
>=
0 || keys.indexOf('description')
>=
0)) {
7194 return formatError(value);
7197 // Some type of object without properties can be shortcutted.
7198 if (keys.length ===
0) {
7199 if (isFunction(value)) {
7200 var name = value.name ? ': ' + value.name : '';
7201 return ctx.stylize('[Function' + name + ']', 'special');
7203 if (isRegExp(value)) {
7204 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
7206 if (isDate(value)) {
7207 return ctx.stylize(Date.prototype.toString.call(value), 'date');
7209 if (isError(value)) {
7210 return formatError(value);
7214 var base = '', array = false, braces = ['{', '}'];
7216 // Make Array say that they are Array
7217 if (isArray(value)) {
7219 braces = ['[', ']'];
7222 // Make functions say that they are functions
7223 if (isFunction(value)) {
7224 var n = value.name ? ': ' + value.name : '';
7225 base = ' [Function' + n + ']';
7228 // Make RegExps say that they are RegExps
7229 if (isRegExp(value)) {
7230 base = ' ' + RegExp.prototype.toString.call(value);
7233 // Make dates with properties first say the date
7234 if (isDate(value)) {
7235 base = ' ' + Date.prototype.toUTCString.call(value);
7238 // Make error with message first say the error
7239 if (isError(value)) {
7240 base = ' ' + formatError(value);
7243 if (keys.length ===
0 && (!array || value.length ==
0)) {
7244 return braces[
0] + base + braces[
1];
7247 if (recurseTimes <
0) {
7248 if (isRegExp(value)) {
7249 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
7251 return ctx.stylize('[Object]', 'special');
7255 ctx.seen.push(value);
7259 output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
7261 output = keys.map(function(key) {
7262 return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
7268 return reduceToSingleString(output, base, braces);
7272 function formatPrimitive(ctx, value) {
7273 if (isUndefined(value))
7274 return ctx.stylize('undefined', 'undefined');
7275 if (isString(value)) {
7276 var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
7277 .replace(/'/g, "\\'")
7278 .replace(/\\"/g, '"') + '\'';
7279 return ctx.stylize(simple, 'string');
7281 if (isNumber(value))
7282 return ctx.stylize('' + value, 'number');
7283 if (isBoolean(value))
7284 return ctx.stylize('' + value, 'boolean');
7285 // For some reason typeof null is "object", so special case here.
7287 return ctx.stylize('null', 'null');
7291 function formatError(value) {
7292 return '[' + Error.prototype.toString.call(value) + ']';
7296 function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
7298 for (var i =
0, l = value.length; i < l; ++i) {
7299 if (hasOwnProperty(value, String(i))) {
7300 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
7306 keys.forEach(function(key) {
7307 if (!key.match(/^\d+$/)) {
7308 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
7316 function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
7317 var name, str, desc;
7318 desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
7321 str = ctx.stylize('[Getter/Setter]', 'special');
7323 str = ctx.stylize('[Getter]', 'special');
7327 str = ctx.stylize('[Setter]', 'special');
7330 if (!hasOwnProperty(visibleKeys, key)) {
7331 name = '[' + key + ']';
7334 if (ctx.seen.indexOf(desc.value) <
0) {
7335 if (isNull(recurseTimes)) {
7336 str = formatValue(ctx, desc.value, null);
7338 str = formatValue(ctx, desc.value, recurseTimes -
1);
7340 if (str.indexOf('\n')
> -
1) {
7342 str = str.split('\n').map(function(line) {
7344 }).join('\n').substr(
2);
7346 str = '\n' + str.split('\n').map(function(line) {
7352 str = ctx.stylize('[Circular]', 'special');
7355 if (isUndefined(name)) {
7356 if (array && key.match(/^\d+$/)) {
7359 name = JSON.stringify('' + key);
7360 if (name.match(/^"([a-zA-Z_][a-zA-Z_0-
9]*)"$/)) {
7361 name = name.substr(
1, name.length -
2);
7362 name = ctx.stylize(name, 'name');
7364 name = name.replace(/'/g, "\\'")
7365 .replace(/\\"/g, '"')
7366 .replace(/(^"|"$)/g, "'");
7367 name = ctx.stylize(name, 'string');
7371 return name + ': ' + str;
7375 function reduceToSingleString(output, base, braces) {
7376 var numLinesEst =
0;
7377 var length = output.reduce(function(prev, cur) {
7379 if (cur.indexOf('\n')
>=
0) numLinesEst++;
7380 return prev + cur.replace(/\u001b\[\d\d?m/g, '').length +
1;
7385 (base === '' ? '' : base + '\n ') +
7387 output.join(',\n ') +
7392 return braces[
0] + base + ' ' + output.join(', ') + ' ' + braces[
1];
7396 // NOTE: These type checking functions intentionally don't use `instanceof`
7397 // because it is fragile and can be easily faked with `Object.create()`.
7398 function isArray(ar) {
7399 return Array.isArray(ar);
7401 exports.isArray = isArray;
7403 function isBoolean(arg) {
7404 return typeof arg === 'boolean';
7406 exports.isBoolean = isBoolean;
7408 function isNull(arg) {
7409 return arg === null;
7411 exports.isNull = isNull;
7413 function isNullOrUndefined(arg) {
7416 exports.isNullOrUndefined = isNullOrUndefined;
7418 function isNumber(arg) {
7419 return typeof arg === 'number';
7421 exports.isNumber = isNumber;
7423 function isString(arg) {
7424 return typeof arg === 'string';
7426 exports.isString = isString;
7428 function isSymbol(arg) {
7429 return typeof arg === 'symbol';
7431 exports.isSymbol = isSymbol;
7433 function isUndefined(arg) {
7434 return arg === void
0;
7436 exports.isUndefined = isUndefined;
7438 function isRegExp(re) {
7439 return isObject(re) && objectToString(re) === '[object RegExp]';
7441 exports.isRegExp = isRegExp;
7443 function isObject(arg) {
7444 return typeof arg === 'object' && arg !== null;
7446 exports.isObject = isObject;
7448 function isDate(d) {
7449 return isObject(d) && objectToString(d) === '[object Date]';
7451 exports.isDate = isDate;
7453 function isError(e) {
7454 return isObject(e) &&
7455 (objectToString(e) === '[object Error]' || e instanceof Error);
7457 exports.isError = isError;
7459 function isFunction(arg) {
7460 return typeof arg === 'function';
7462 exports.isFunction = isFunction;
7464 function isPrimitive(arg) {
7465 return arg === null ||
7466 typeof arg === 'boolean' ||
7467 typeof arg === 'number' ||
7468 typeof arg === 'string' ||
7469 typeof arg === 'symbol' || // ES6 symbol
7470 typeof arg === 'undefined';
7472 exports.isPrimitive = isPrimitive;
7474 exports.isBuffer = require('./support/isBuffer');
7476 function objectToString(o) {
7477 return Object.prototype.toString.call(o);
7482 return n <
10 ? '
0' + n.toString(
10) : n.toString(
10);
7486 var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
7487 'Oct', 'Nov', 'Dec'];
7490 function timestamp() {
7492 var time = [pad(d.getHours()),
7493 pad(d.getMinutes()),
7494 pad(d.getSeconds())].join(':');
7495 return [d.getDate(), months[d.getMonth()], time].join(' ');
7499 // log is just a thin wrapper to console.log that prepends a timestamp
7500 exports.log = function() {
7501 console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
7506 * Inherit the prototype methods from one constructor into another.
7508 * The Function.prototype.inherits from lang.js rewritten as a standalone
7509 * function (not on Function.prototype). NOTE: If this file is to be loaded
7510 * during bootstrapping this function needs to be rewritten using some native
7511 * functions as prototype setup using normal JavaScript does not work as
7512 * expected during bootstrapping (see mirror.js in r114903).
7514 * @param {function} ctor Constructor function which needs to inherit the
7516 * @param {function} superCtor Constructor function to inherit prototype from.
7518 exports.inherits = require('inherits');
7520 exports._extend = function(origin, add) {
7521 // Don't do anything if add isn't an object
7522 if (!add || !isObject(add)) return origin;
7524 var keys = Object.keys(add);
7525 var i = keys.length;
7527 origin[keys[i]] = add[keys[i]];
7532 function hasOwnProperty(obj, prop) {
7533 return Object.prototype.hasOwnProperty.call(obj, prop);
7536 }).call(this,require('_process'),typeof global !==
"undefined" ? global : typeof self !==
"undefined" ? self : typeof window !==
"undefined" ? window : {})
7537 },{
"./support/isBuffer":
28,
"_process":
14,
"inherits":
12}],
30:[function(require,module,exports){
7538 // Base58 encoding/decoding
7539 // Originally written by Mike Hearn for BitcoinJ
7540 // Copyright (c)
2011 Google Inc
7541 // Ported to JavaScript by Stefan Thomas
7542 // Merged Buffer refactorings from base58-native by Stephen Pair
7543 // Copyright (c)
2013 BitPay Inc
7545 var ALPHABET = '
123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
7546 var ALPHABET_MAP = {}
7547 for(var i =
0; i < ALPHABET.length; i++) {
7548 ALPHABET_MAP[ALPHABET.charAt(i)] = i
7552 function encode(buffer) {
7553 if (buffer.length ===
0) return ''
7555 var i, j, digits = [
0]
7556 for (i =
0; i < buffer.length; i++) {
7557 for (j =
0; j < digits.length; j++) digits[j] <<=
8
7559 digits[
0] += buffer[i]
7562 for (j =
0; j < digits.length; ++j) {
7565 carry = (digits[j] / BASE) |
0
7570 digits.push(carry % BASE)
7572 carry = (carry / BASE) |
0
7576 // deal with leading zeros
7577 for (i =
0; buffer[i] ===
0 && i < buffer.length -
1; i++) digits.push(
0)
7579 // convert digits to a string
7580 var stringOutput =
""
7581 for (var i = digits.length -
1; i
>=
0; i--) {
7582 stringOutput = stringOutput + ALPHABET[digits[i]]
7587 function decode(string) {
7588 if (string.length ===
0) return []
7590 var i, j, bytes = [
0]
7591 for (i =
0; i < string.length; i++) {
7593 if (!(c in ALPHABET_MAP)) throw new Error('Non-base58 character')
7595 for (j =
0; j < bytes.length; j++) bytes[j] *= BASE
7596 bytes[
0] += ALPHABET_MAP[c]
7599 for (j =
0; j < bytes.length; ++j) {
7602 carry = bytes[j]
>> 8
7607 bytes.push(carry &
0xff)
7613 // deal with leading zeros
7614 for (i =
0; string[i] === '
1' && i < string.length -
1; i++) bytes.push(
0)
7616 return bytes.reverse()
7624 },{}],
31:[function(require,module,exports){
7628 var base58 = require('bs58')
7629 var createHash = require('create-hash')
7631 // SHA256(SHA256(buffer))
7632 function sha256x2 (buffer) {
7633 buffer = createHash('sha256').update(buffer).digest()
7634 return createHash('sha256').update(buffer).digest()
7637 // Encode a buffer as a base58-check encoded string
7638 function encode (payload) {
7639 var checksum = sha256x2(payload).slice(
0,
4)
7641 return base58.encode(Buffer.concat([
7647 // Decode a base58-check encoded string to a buffer
7648 function decode (string) {
7649 var buffer = new Buffer(base58.decode(string))
7651 var payload = buffer.slice(
0, -
4)
7652 var checksum = buffer.slice(-
4)
7653 var newChecksum = sha256x2(payload).slice(
0,
4)
7655 for (var i =
0; i < newChecksum.length; ++i) {
7656 if (newChecksum[i] === checksum[i]) continue
7658 throw new Error('Invalid checksum')
7669 }).call(this,require("buffer").Buffer)
7670 },{"bs58":
30,"buffer":
7,"create-hash":
32}],
32:[function(require,module,exports){
7673 var inherits = require('inherits')
7674 var md5 = require('./md5')
7675 var rmd160 = require('ripemd160')
7676 var sha = require('sha.js')
7678 var Transform = require('stream').Transform
7680 function HashNoConstructor(hash) {
7681 Transform.call(this)
7687 inherits(HashNoConstructor, Transform)
7689 HashNoConstructor.prototype._transform = function (data, _, next) {
7690 this.buffers.push(data)
7695 HashNoConstructor.prototype._flush = function (next) {
7696 this.push(this.digest())
7700 HashNoConstructor.prototype.update = function (data, enc) {
7701 if (typeof data === 'string') {
7702 data = new Buffer(data, enc)
7705 this.buffers.push(data)
7709 HashNoConstructor.prototype.digest = function (enc) {
7710 var buf = Buffer.concat(this.buffers)
7711 var r = this._hash(buf)
7714 return enc ? r.toString(enc) : r
7717 function Hash(hash) {
7718 Transform.call(this)
7723 inherits(Hash, Transform)
7725 Hash.prototype._transform = function (data, enc, next) {
7726 if (enc) data = new Buffer(data, enc)
7728 this._hash.update(data)
7733 Hash.prototype._flush = function (next) {
7734 this.push(this._hash.digest())
7740 Hash.prototype.update = function (data, enc) {
7741 if (typeof data === 'string') {
7742 data = new Buffer(data, enc)
7745 this._hash.update(data)
7749 Hash.prototype.digest = function (enc) {
7750 var outData = this._hash.digest()
7752 return enc ? outData.toString(enc) : outData
7755 module.exports = function createHash (alg) {
7756 if ('md5' === alg) return new HashNoConstructor(md5)
7757 if ('rmd160' === alg) return new HashNoConstructor(rmd160)
7759 return new Hash(sha(alg))
7762 }).call(this,require("buffer").Buffer)
7763 },{"./md5":
34,"buffer":
7,"inherits":
35,"ripemd160":
36,"sha.js":
38,"stream":
26}],
33:[function(require,module,exports){
7767 var zeroBuffer = new Buffer(intSize); zeroBuffer.fill(
0);
7770 function toArray(buf, bigEndian) {
7771 if ((buf.length % intSize) !==
0) {
7772 var len = buf.length + (intSize - (buf.length % intSize));
7773 buf = Buffer.concat([buf, zeroBuffer], len);
7777 var fn = bigEndian ? buf.readInt32BE : buf.readInt32LE;
7778 for (var i =
0; i < buf.length; i += intSize) {
7779 arr.push(fn.call(buf, i));
7784 function toBuffer(arr, size, bigEndian) {
7785 var buf = new Buffer(size);
7786 var fn = bigEndian ? buf.writeInt32BE : buf.writeInt32LE;
7787 for (var i =
0; i < arr.length; i++) {
7788 fn.call(buf, arr[i], i *
4, true);
7793 function hash(buf, fn, hashSize, bigEndian) {
7794 if (!Buffer.isBuffer(buf)) buf = new Buffer(buf);
7795 var arr = fn(toArray(buf, bigEndian), buf.length * chrsz);
7796 return toBuffer(arr, hashSize, bigEndian);
7798 exports.hash = hash;
7799 }).call(this,require("buffer").Buffer)
7800 },{"buffer":
7}],
34:[function(require,module,exports){
7803 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
7804 * Digest Algorithm, as defined in RFC
1321.
7805 * Version
2.1 Copyright (C) Paul Johnston
1999 -
2002.
7806 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
7807 * Distributed under the BSD License
7808 * See http://pajhome.org.uk/crypt/md5 for more info.
7811 var helpers = require('./helpers');
7814 * Calculate the MD5 of an array of little-endian words, and a bit length
7816 function core_md5(x, len)
7818 /* append padding */
7819 x[len
>> 5] |=
0x80 << ((len) %
32);
7820 x[(((len +
64)
>>> 9) <<
4) +
14] = len;
7824 var c = -
1732584194;
7827 for(var i =
0; i < x.length; i +=
16)
7834 a = md5_ff(a, b, c, d, x[i+
0],
7 , -
680876936);
7835 d = md5_ff(d, a, b, c, x[i+
1],
12, -
389564586);
7836 c = md5_ff(c, d, a, b, x[i+
2],
17,
606105819);
7837 b = md5_ff(b, c, d, a, x[i+
3],
22, -
1044525330);
7838 a = md5_ff(a, b, c, d, x[i+
4],
7 , -
176418897);
7839 d = md5_ff(d, a, b, c, x[i+
5],
12,
1200080426);
7840 c = md5_ff(c, d, a, b, x[i+
6],
17, -
1473231341);
7841 b = md5_ff(b, c, d, a, x[i+
7],
22, -
45705983);
7842 a = md5_ff(a, b, c, d, x[i+
8],
7 ,
1770035416);
7843 d = md5_ff(d, a, b, c, x[i+
9],
12, -
1958414417);
7844 c = md5_ff(c, d, a, b, x[i+
10],
17, -
42063);
7845 b = md5_ff(b, c, d, a, x[i+
11],
22, -
1990404162);
7846 a = md5_ff(a, b, c, d, x[i+
12],
7 ,
1804603682);
7847 d = md5_ff(d, a, b, c, x[i+
13],
12, -
40341101);
7848 c = md5_ff(c, d, a, b, x[i+
14],
17, -
1502002290);
7849 b = md5_ff(b, c, d, a, x[i+
15],
22,
1236535329);
7851 a = md5_gg(a, b, c, d, x[i+
1],
5 , -
165796510);
7852 d = md5_gg(d, a, b, c, x[i+
6],
9 , -
1069501632);
7853 c = md5_gg(c, d, a, b, x[i+
11],
14,
643717713);
7854 b = md5_gg(b, c, d, a, x[i+
0],
20, -
373897302);
7855 a = md5_gg(a, b, c, d, x[i+
5],
5 , -
701558691);
7856 d = md5_gg(d, a, b, c, x[i+
10],
9 ,
38016083);
7857 c = md5_gg(c, d, a, b, x[i+
15],
14, -
660478335);
7858 b = md5_gg(b, c, d, a, x[i+
4],
20, -
405537848);
7859 a = md5_gg(a, b, c, d, x[i+
9],
5 ,
568446438);
7860 d = md5_gg(d, a, b, c, x[i+
14],
9 , -
1019803690);
7861 c = md5_gg(c, d, a, b, x[i+
3],
14, -
187363961);
7862 b = md5_gg(b, c, d, a, x[i+
8],
20,
1163531501);
7863 a = md5_gg(a, b, c, d, x[i+
13],
5 , -
1444681467);
7864 d = md5_gg(d, a, b, c, x[i+
2],
9 , -
51403784);
7865 c = md5_gg(c, d, a, b, x[i+
7],
14,
1735328473);
7866 b = md5_gg(b, c, d, a, x[i+
12],
20, -
1926607734);
7868 a = md5_hh(a, b, c, d, x[i+
5],
4 , -
378558);
7869 d = md5_hh(d, a, b, c, x[i+
8],
11, -
2022574463);
7870 c = md5_hh(c, d, a, b, x[i+
11],
16,
1839030562);
7871 b = md5_hh(b, c, d, a, x[i+
14],
23, -
35309556);
7872 a = md5_hh(a, b, c, d, x[i+
1],
4 , -
1530992060);
7873 d = md5_hh(d, a, b, c, x[i+
4],
11,
1272893353);
7874 c = md5_hh(c, d, a, b, x[i+
7],
16, -
155497632);
7875 b = md5_hh(b, c, d, a, x[i+
10],
23, -
1094730640);
7876 a = md5_hh(a, b, c, d, x[i+
13],
4 ,
681279174);
7877 d = md5_hh(d, a, b, c, x[i+
0],
11, -
358537222);
7878 c = md5_hh(c, d, a, b, x[i+
3],
16, -
722521979);
7879 b = md5_hh(b, c, d, a, x[i+
6],
23,
76029189);
7880 a = md5_hh(a, b, c, d, x[i+
9],
4 , -
640364487);
7881 d = md5_hh(d, a, b, c, x[i+
12],
11, -
421815835);
7882 c = md5_hh(c, d, a, b, x[i+
15],
16,
530742520);
7883 b = md5_hh(b, c, d, a, x[i+
2],
23, -
995338651);
7885 a = md5_ii(a, b, c, d, x[i+
0],
6 , -
198630844);
7886 d = md5_ii(d, a, b, c, x[i+
7],
10,
1126891415);
7887 c = md5_ii(c, d, a, b, x[i+
14],
15, -
1416354905);
7888 b = md5_ii(b, c, d, a, x[i+
5],
21, -
57434055);
7889 a = md5_ii(a, b, c, d, x[i+
12],
6 ,
1700485571);
7890 d = md5_ii(d, a, b, c, x[i+
3],
10, -
1894986606);
7891 c = md5_ii(c, d, a, b, x[i+
10],
15, -
1051523);
7892 b = md5_ii(b, c, d, a, x[i+
1],
21, -
2054922799);
7893 a = md5_ii(a, b, c, d, x[i+
8],
6 ,
1873313359);
7894 d = md5_ii(d, a, b, c, x[i+
15],
10, -
30611744);
7895 c = md5_ii(c, d, a, b, x[i+
6],
15, -
1560198380);
7896 b = md5_ii(b, c, d, a, x[i+
13],
21,
1309151649);
7897 a = md5_ii(a, b, c, d, x[i+
4],
6 , -
145523070);
7898 d = md5_ii(d, a, b, c, x[i+
11],
10, -
1120210379);
7899 c = md5_ii(c, d, a, b, x[i+
2],
15,
718787259);
7900 b = md5_ii(b, c, d, a, x[i+
9],
21, -
343485551);
7902 a = safe_add(a, olda);
7903 b = safe_add(b, oldb);
7904 c = safe_add(c, oldc);
7905 d = safe_add(d, oldd);
7907 return Array(a, b, c, d);
7912 * These functions implement the four basic operations the algorithm uses.
7914 function md5_cmn(q, a, b, x, s, t)
7916 return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b);
7918 function md5_ff(a, b, c, d, x, s, t)
7920 return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
7922 function md5_gg(a, b, c, d, x, s, t)
7924 return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
7926 function md5_hh(a, b, c, d, x, s, t)
7928 return md5_cmn(b ^ c ^ d, a, b, x, s, t);
7930 function md5_ii(a, b, c, d, x, s, t)
7932 return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
7936 * Add integers, wrapping at
2^
32. This uses
16-bit operations internally
7937 * to work around bugs in some JS interpreters.
7939 function safe_add(x, y)
7941 var lsw = (x &
0xFFFF) + (y &
0xFFFF);
7942 var msw = (x
>> 16) + (y
>> 16) + (lsw
>> 16);
7943 return (msw <<
16) | (lsw &
0xFFFF);
7947 * Bitwise rotate a
32-bit number to the left.
7949 function bit_rol(num, cnt)
7951 return (num << cnt) | (num
>>> (
32 - cnt));
7954 module.exports = function md5(buf) {
7955 return helpers.hash(buf, core_md5,
16);
7957 },{"./helpers":
33}],
35:[function(require,module,exports){
7958 arguments[
4][
12][
0].apply(exports,arguments)
7959 },{"dup":
12}],
36:[function(require,module,exports){
7963 code.google.com/p/crypto-js
7964 (c)
2009-
2013 by Jeff Mott. All rights reserved.
7965 code.google.com/p/crypto-js/wiki/License
7968 (c)
2012 by Cédric Mesnil. All rights reserved.
7970 Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
7972 - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
7973 - 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.
7975 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.
7980 0,
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11,
12,
13,
14,
15,
7981 7,
4,
13,
1,
10,
6,
15,
3,
12,
0,
9,
5,
2,
14,
11,
8,
7982 3,
10,
14,
4,
9,
15,
8,
1,
2,
7,
0,
6,
13,
11,
5,
12,
7983 1,
9,
11,
10,
0,
8,
12,
4,
13,
3,
7,
15,
14,
5,
6,
2,
7984 4,
0,
5,
9,
7,
12,
2,
10,
14,
1,
3,
8,
11,
6,
15,
13
7988 5,
14,
7,
0,
9,
2,
11,
4,
13,
6,
15,
8,
1,
10,
3,
12,
7989 6,
11,
3,
7,
0,
13,
5,
10,
14,
15,
8,
12,
4,
9,
1,
2,
7990 15,
5,
1,
3,
7,
14,
6,
9,
11,
8,
12,
2,
10,
0,
4,
13,
7991 8,
6,
4,
1,
3,
11,
15,
0,
5,
12,
2,
13,
9,
7,
10,
14,
7992 12,
15,
10,
4,
1,
5,
8,
7,
6,
2,
13,
14,
0,
3,
9,
11
7996 11,
14,
15,
12,
5,
8,
7,
9,
11,
13,
14,
15,
6,
7,
9,
8,
7997 7,
6,
8,
13,
11,
9,
7,
15,
7,
12,
15,
9,
11,
7,
13,
12,
7998 11,
13,
6,
7,
14,
9,
13,
15,
14,
8,
13,
6,
5,
12,
7,
5,
7999 11,
12,
14,
15,
14,
15,
9,
8,
9,
14,
5,
6,
8,
6,
5,
12,
8000 9,
15,
5,
11,
6,
8,
13,
12,
5,
12,
13,
14,
11,
8,
5,
6
8004 8,
9,
9,
11,
13,
15,
15,
5,
7,
7,
8,
11,
14,
14,
12,
6,
8005 9,
13,
15,
7,
12,
8,
9,
11,
7,
7,
12,
7,
6,
15,
13,
11,
8006 9,
7,
15,
11,
8,
6,
6,
14,
12,
13,
5,
14,
13,
13,
7,
5,
8007 15,
5,
8,
11,
14,
14,
6,
14,
6,
9,
12,
9,
12,
5,
15,
8,
8008 8,
5,
12,
9,
12,
5,
14,
6,
8,
13,
6,
5,
15,
13,
11,
11
8011 var hl = [
0x00000000,
0x5A827999,
0x6ED9EBA1,
0x8F1BBCDC,
0xA953FD4E]
8012 var hr = [
0x50A28BE6,
0x5C4DD124,
0x6D703EF3,
0x7A6D76E9,
0x00000000]
8014 function bytesToWords (bytes) {
8016 for (var i =
0, b =
0; i < bytes.length; i++, b +=
8) {
8017 words[b
>>> 5] |= bytes[i] << (
24 - b %
32)
8022 function wordsToBytes (words) {
8024 for (var b =
0; b < words.length *
32; b +=
8) {
8025 bytes.push((words[b
>>> 5]
>>> (
24 - b %
32)) &
0xFF)
8030 function processBlock (H, M, offset) {
8032 for (var i =
0; i <
16; i++) {
8033 var offset_i = offset + i
8034 var M_offset_i = M[offset_i]
8038 (((M_offset_i <<
8) | (M_offset_i
>>> 24)) &
0x00ff00ff) |
8039 (((M_offset_i <<
24) | (M_offset_i
>>> 8)) &
0xff00ff00)
8043 // Working variables
8044 var al, bl, cl, dl, el
8045 var ar, br, cr, dr, er
8055 for (i =
0; i <
80; i +=
1) {
8056 t = (al + M[offset + zl[i]]) |
0
8058 t += f1(bl, cl, dl) + hl[
0]
8059 } else if (i <
32) {
8060 t += f2(bl, cl, dl) + hl[
1]
8061 } else if (i <
48) {
8062 t += f3(bl, cl, dl) + hl[
2]
8063 } else if (i <
64) {
8064 t += f4(bl, cl, dl) + hl[
3]
8065 } else {// if (i
<80) {
8066 t += f5(bl, cl, dl) + hl[
4]
8077 t = (ar + M[offset + zr[i]]) |
0
8079 t += f5(br, cr, dr) + hr[
0]
8080 } else if (i <
32) {
8081 t += f4(br, cr, dr) + hr[
1]
8082 } else if (i <
48) {
8083 t += f3(br, cr, dr) + hr[
2]
8084 } else if (i <
64) {
8085 t += f2(br, cr, dr) + hr[
3]
8086 } else {// if (i
<80) {
8087 t += f1(br, cr, dr) + hr[
4]
8100 // intermediate hash value
8101 t = (H[
1] + cl + dr) |
0
8102 H[
1] = (H[
2] + dl + er) |
0
8103 H[
2] = (H[
3] + el + ar) |
0
8104 H[
3] = (H[
4] + al + br) |
0
8105 H[
4] = (H[
0] + bl + cr) |
0
8109 function f1 (x, y, z) {
8110 return ((x) ^ (y) ^ (z))
8113 function f2 (x, y, z) {
8114 return (((x) & (y)) | ((~x) & (z)))
8117 function f3 (x, y, z) {
8118 return (((x) | (~(y))) ^ (z))
8121 function f4 (x, y, z) {
8122 return (((x) & (z)) | ((y) & (~(z))))
8125 function f5 (x, y, z) {
8126 return ((x) ^ ((y) | (~(z))))
8129 function rotl (x, n) {
8130 return (x << n) | (x
>>> (
32 - n))
8133 function ripemd160 (message) {
8134 var H = [
0x67452301,
0xEFCDAB89,
0x98BADCFE,
0x10325476,
0xC3D2E1F0]
8136 if (typeof message === 'string') {
8137 message = new Buffer(message, 'utf8')
8140 var m = bytesToWords(message)
8142 var nBitsLeft = message.length *
8
8143 var nBitsTotal = message.length *
8
8146 m[nBitsLeft
>>> 5] |=
0x80 << (
24 - nBitsLeft %
32)
8147 m[(((nBitsLeft +
64)
>>> 9) <<
4) +
14] = (
8148 (((nBitsTotal <<
8) | (nBitsTotal
>>> 24)) &
0x00ff00ff) |
8149 (((nBitsTotal <<
24) | (nBitsTotal
>>> 8)) &
0xff00ff00)
8152 for (var i =
0; i < m.length; i +=
16) {
8153 processBlock(H, m, i)
8157 for (i =
0; i <
5; i++) {
8162 H[i] = (((H_i <<
8) | (H_i
>>> 24)) &
0x00ff00ff) |
8163 (((H_i <<
24) | (H_i
>>> 8)) &
0xff00ff00)
8166 var digestbytes = wordsToBytes(H)
8167 return new Buffer(digestbytes)
8170 module.exports = ripemd160
8172 }).call(this,require(
"buffer").Buffer)
8173 },{
"buffer":
7}],
37:[function(require,module,exports){
8175 // prototype class for hash functions
8176 function Hash (blockSize, finalSize) {
8177 this._block = new Buffer(blockSize)
8178 this._finalSize = finalSize
8179 this._blockSize = blockSize
8184 Hash.prototype.update = function (data, enc) {
8185 if (typeof data === 'string') {
8187 data = new Buffer(data, enc)
8190 var l = this._len += data.length
8191 var s = this._s ||
0
8193 var buffer = this._block
8196 var t = Math.min(data.length, f + this._blockSize - (s % this._blockSize))
8199 for (var i =
0; i < ch; i++) {
8200 buffer[(s % this._blockSize) + i] = data[i + f]
8206 if ((s % this._blockSize) ===
0) {
8207 this._update(buffer)
8215 Hash.prototype.digest = function (enc) {
8216 // Suppose the length of the message M, in bits, is l
8217 var l = this._len *
8
8219 // Append the bit
1 to the end of the message
8220 this._block[this._len % this._blockSize] =
0x80
8222 // and then k zero bits, where k is the smallest non-negative solution to the equation (l +
1 + k) === finalSize mod blockSize
8223 this._block.fill(
0, this._len % this._blockSize +
1)
8225 if (l % (this._blockSize *
8)
>= this._finalSize *
8) {
8226 this._update(this._block)
8230 // to this append the block which is equal to the number l written in binary
8231 // TODO: handle case where l is
> Math.pow(
2,
29)
8232 this._block.writeInt32BE(l, this._blockSize -
4)
8234 var hash = this._update(this._block) || this._hash()
8236 return enc ? hash.toString(enc) : hash
8239 Hash.prototype._update = function () {
8240 throw new Error('_update must be implemented by subclass')
8243 module.exports = Hash
8245 }).call(this,require("buffer").Buffer)
8246 },{"buffer":
7}],
38:[function(require,module,exports){
8247 var exports = module.exports = function SHA (algorithm) {
8248 algorithm = algorithm.toLowerCase()
8250 var Algorithm = exports[algorithm]
8251 if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')
8253 return new Algorithm()
8256 exports.sha = require('./sha')
8257 exports.sha1 = require('./sha1')
8258 exports.sha224 = require('./sha224')
8259 exports.sha256 = require('./sha256')
8260 exports.sha384 = require('./sha384')
8261 exports.sha512 = require('./sha512')
8263 },{"./sha":
39,"./sha1":
40,"./sha224":
41,"./sha256":
42,"./sha384":
43,"./sha512":
44}],
39:[function(require,module,exports){
8266 * A JavaScript implementation of the Secure Hash Algorithm, SHA-
0, as defined
8268 * This source code is derived from sha1.js of the same repository.
8269 * The difference between SHA-
0 and SHA-
1 is just a bitwise rotate left
8270 * operation was added.
8273 var inherits = require('inherits')
8274 var Hash = require('./hash')
8276 var W = new Array(
80)
8282 Hash.call(this,
64,
56)
8287 Sha.prototype.init = function () {
8288 this._a =
0x67452301 |
0
8289 this._b =
0xefcdab89 |
0
8290 this._c =
0x98badcfe |
0
8291 this._d =
0x10325476 |
0
8292 this._e =
0xc3d2e1f0 |
0
8298 * Bitwise rotate a
32-bit number to the left.
8300 function rol (num, cnt) {
8301 return (num << cnt) | (num
>>> (
32 - cnt))
8304 Sha.prototype._update = function (M) {
8316 * SHA-
1 has a bitwise rotate left operation. But, SHA is not
8317 * function calcW() { return rol(W[j -
3] ^ W[j -
8] ^ W[j -
14] ^ W[j -
16],
1) }
8319 function calcW () { return W[j -
3] ^ W[j -
8] ^ W[j -
14] ^ W[j -
16] }
8320 function loop (w, f) {
8323 var t = rol(a,
5) + f + e + w + k
8334 while (j <
16) loop(M.readInt32BE(j *
4), (b & c) | ((~b) & d))
8335 while (j <
20) loop(calcW(), (b & c) | ((~b) & d))
8337 while (j <
40) loop(calcW(), b ^ c ^ d)
8339 while (j <
60) loop(calcW(), (b & c) | (b & d) | (c & d))
8341 while (j <
80) loop(calcW(), b ^ c ^ d)
8343 this._a = (a + this._a) |
0
8344 this._b = (b + this._b) |
0
8345 this._c = (c + this._c) |
0
8346 this._d = (d + this._d) |
0
8347 this._e = (e + this._e) |
0
8350 Sha.prototype._hash = function () {
8351 var H = new Buffer(
20)
8353 H.writeInt32BE(this._a |
0,
0)
8354 H.writeInt32BE(this._b |
0,
4)
8355 H.writeInt32BE(this._c |
0,
8)
8356 H.writeInt32BE(this._d |
0,
12)
8357 H.writeInt32BE(this._e |
0,
16)
8362 module.exports = Sha
8365 }).call(this,require("buffer").Buffer)
8366 },{"./hash":
37,"buffer":
7,"inherits":
35}],
40:[function(require,module,exports){
8369 * A JavaScript implementation of the Secure Hash Algorithm, SHA-
1, as defined
8371 * Version
2.1a Copyright Paul Johnston
2000 -
2002.
8372 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8373 * Distributed under the BSD License
8374 * See http://pajhome.org.uk/crypt/md5 for details.
8377 var inherits = require('inherits')
8378 var Hash = require('./hash')
8380 var W = new Array(
80)
8386 Hash.call(this,
64,
56)
8389 inherits(Sha1, Hash)
8391 Sha1.prototype.init = function () {
8392 this._a =
0x67452301 |
0
8393 this._b =
0xefcdab89 |
0
8394 this._c =
0x98badcfe |
0
8395 this._d =
0x10325476 |
0
8396 this._e =
0xc3d2e1f0 |
0
8402 * Bitwise rotate a
32-bit number to the left.
8404 function rol (num, cnt) {
8405 return (num << cnt) | (num
>>> (
32 - cnt))
8408 Sha1.prototype._update = function (M) {
8419 function calcW () { return rol(W[j -
3] ^ W[j -
8] ^ W[j -
14] ^ W[j -
16],
1) }
8420 function loop (w, f) {
8423 var t = rol(a,
5) + f + e + w + k
8434 while (j <
16) loop(M.readInt32BE(j *
4), (b & c) | ((~b) & d))
8435 while (j <
20) loop(calcW(), (b & c) | ((~b) & d))
8437 while (j <
40) loop(calcW(), b ^ c ^ d)
8439 while (j <
60) loop(calcW(), (b & c) | (b & d) | (c & d))
8441 while (j <
80) loop(calcW(), b ^ c ^ d)
8443 this._a = (a + this._a) |
0
8444 this._b = (b + this._b) |
0
8445 this._c = (c + this._c) |
0
8446 this._d = (d + this._d) |
0
8447 this._e = (e + this._e) |
0
8450 Sha1.prototype._hash = function () {
8451 var H = new Buffer(
20)
8453 H.writeInt32BE(this._a |
0,
0)
8454 H.writeInt32BE(this._b |
0,
4)
8455 H.writeInt32BE(this._c |
0,
8)
8456 H.writeInt32BE(this._d |
0,
12)
8457 H.writeInt32BE(this._e |
0,
16)
8462 module.exports = Sha1
8464 }).call(this,require("buffer").Buffer)
8465 },{"./hash":
37,"buffer":
7,"inherits":
35}],
41:[function(require,module,exports){
8468 * A JavaScript implementation of the Secure Hash Algorithm, SHA-
256, as defined
8470 * Version
2.2-beta Copyright Angel Marin, Paul Johnston
2000 -
2009.
8471 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8475 var inherits = require('inherits')
8476 var Sha256 = require('./sha256')
8477 var Hash = require('./hash')
8479 var W = new Array(
64)
8481 function Sha224 () {
8484 this._w = W // new Array(
64)
8486 Hash.call(this,
64,
56)
8489 inherits(Sha224, Sha256)
8491 Sha224.prototype.init = function () {
8492 this._a =
0xc1059ed8 |
0
8493 this._b =
0x367cd507 |
0
8494 this._c =
0x3070dd17 |
0
8495 this._d =
0xf70e5939 |
0
8496 this._e =
0xffc00b31 |
0
8497 this._f =
0x68581511 |
0
8498 this._g =
0x64f98fa7 |
0
8499 this._h =
0xbefa4fa4 |
0
8504 Sha224.prototype._hash = function () {
8505 var H = new Buffer(
28)
8507 H.writeInt32BE(this._a,
0)
8508 H.writeInt32BE(this._b,
4)
8509 H.writeInt32BE(this._c,
8)
8510 H.writeInt32BE(this._d,
12)
8511 H.writeInt32BE(this._e,
16)
8512 H.writeInt32BE(this._f,
20)
8513 H.writeInt32BE(this._g,
24)
8518 module.exports = Sha224
8520 }).call(this,require("buffer").Buffer)
8521 },{"./hash":
37,"./sha256":
42,"buffer":
7,"inherits":
35}],
42:[function(require,module,exports){
8524 * A JavaScript implementation of the Secure Hash Algorithm, SHA-
256, as defined
8526 * Version
2.2-beta Copyright Angel Marin, Paul Johnston
2000 -
2009.
8527 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8531 var inherits = require('inherits')
8532 var Hash = require('./hash')
8535 0x428A2F98,
0x71374491,
0xB5C0FBCF,
0xE9B5DBA5,
8536 0x3956C25B,
0x59F111F1,
0x923F82A4,
0xAB1C5ED5,
8537 0xD807AA98,
0x12835B01,
0x243185BE,
0x550C7DC3,
8538 0x72BE5D74,
0x80DEB1FE,
0x9BDC06A7,
0xC19BF174,
8539 0xE49B69C1,
0xEFBE4786,
0x0FC19DC6,
0x240CA1CC,
8540 0x2DE92C6F,
0x4A7484AA,
0x5CB0A9DC,
0x76F988DA,
8541 0x983E5152,
0xA831C66D,
0xB00327C8,
0xBF597FC7,
8542 0xC6E00BF3,
0xD5A79147,
0x06CA6351,
0x14292967,
8543 0x27B70A85,
0x2E1B2138,
0x4D2C6DFC,
0x53380D13,
8544 0x650A7354,
0x766A0ABB,
0x81C2C92E,
0x92722C85,
8545 0xA2BFE8A1,
0xA81A664B,
0xC24B8B70,
0xC76C51A3,
8546 0xD192E819,
0xD6990624,
0xF40E3585,
0x106AA070,
8547 0x19A4C116,
0x1E376C08,
0x2748774C,
0x34B0BCB5,
8548 0x391C0CB3,
0x4ED8AA4A,
0x5B9CCA4F,
0x682E6FF3,
8549 0x748F82EE,
0x78A5636F,
0x84C87814,
0x8CC70208,
8550 0x90BEFFFA,
0xA4506CEB,
0xBEF9A3F7,
0xC67178F2
8553 var W = new Array(
64)
8555 function Sha256 () {
8558 this._w = W // new Array(
64)
8560 Hash.call(this,
64,
56)
8563 inherits(Sha256, Hash)
8565 Sha256.prototype.init = function () {
8566 this._a =
0x6a09e667 |
0
8567 this._b =
0xbb67ae85 |
0
8568 this._c =
0x3c6ef372 |
0
8569 this._d =
0xa54ff53a |
0
8570 this._e =
0x510e527f |
0
8571 this._f =
0x9b05688c |
0
8572 this._g =
0x1f83d9ab |
0
8573 this._h =
0x5be0cd19 |
0
8579 return (X
>>> n) | (X << (
32 - n))
8586 function Ch (x, y, z) {
8587 return ((x & y) ^ ((~x) & z))
8590 function Maj (x, y, z) {
8591 return ((x & y) ^ (x & z) ^ (y & z))
8594 function Sigma0256 (x) {
8595 return (S(x,
2) ^ S(x,
13) ^ S(x,
22))
8598 function Sigma1256 (x) {
8599 return (S(x,
6) ^ S(x,
11) ^ S(x,
25))
8602 function Gamma0256 (x) {
8603 return (S(x,
7) ^ S(x,
18) ^ R(x,
3))
8606 function Gamma1256 (x) {
8607 return (S(x,
17) ^ S(x,
19) ^ R(x,
10))
8610 Sha256.prototype._update = function (M) {
8624 function calcW () { return Gamma1256(W[j -
2]) + W[j -
7] + Gamma0256(W[j -
15]) + W[j -
16] }
8628 var T1 = h + Sigma1256(e) + Ch(e, f, g) + K[j] + w
8629 var T2 = Sigma0256(a) + Maj(a, b, c)
8643 while (j <
16) loop(M.readInt32BE(j *
4))
8644 while (j <
64) loop(calcW())
8646 this._a = (a + this._a) |
0
8647 this._b = (b + this._b) |
0
8648 this._c = (c + this._c) |
0
8649 this._d = (d + this._d) |
0
8650 this._e = (e + this._e) |
0
8651 this._f = (f + this._f) |
0
8652 this._g = (g + this._g) |
0
8653 this._h = (h + this._h) |
0
8656 Sha256.prototype._hash = function () {
8657 var H = new Buffer(
32)
8659 H.writeInt32BE(this._a,
0)
8660 H.writeInt32BE(this._b,
4)
8661 H.writeInt32BE(this._c,
8)
8662 H.writeInt32BE(this._d,
12)
8663 H.writeInt32BE(this._e,
16)
8664 H.writeInt32BE(this._f,
20)
8665 H.writeInt32BE(this._g,
24)
8666 H.writeInt32BE(this._h,
28)
8671 module.exports = Sha256
8673 }).call(this,require("buffer").Buffer)
8674 },{"./hash":
37,"buffer":
7,"inherits":
35}],
43:[function(require,module,exports){
8676 var inherits = require('inherits')
8677 var SHA512 = require('./sha512')
8678 var Hash = require('./hash')
8680 var W = new Array(
160)
8682 function Sha384 () {
8686 Hash.call(this,
128,
112)
8689 inherits(Sha384, SHA512)
8691 Sha384.prototype.init = function () {
8692 this._a =
0xcbbb9d5d |
0
8693 this._b =
0x629a292a |
0
8694 this._c =
0x9159015a |
0
8695 this._d =
0x152fecd8 |
0
8696 this._e =
0x67332667 |
0
8697 this._f =
0x8eb44a87 |
0
8698 this._g =
0xdb0c2e0d |
0
8699 this._h =
0x47b5481d |
0
8701 this._al =
0xc1059ed8 |
0
8702 this._bl =
0x367cd507 |
0
8703 this._cl =
0x3070dd17 |
0
8704 this._dl =
0xf70e5939 |
0
8705 this._el =
0xffc00b31 |
0
8706 this._fl =
0x68581511 |
0
8707 this._gl =
0x64f98fa7 |
0
8708 this._hl =
0xbefa4fa4 |
0
8713 Sha384.prototype._hash = function () {
8714 var H = new Buffer(
48)
8716 function writeInt64BE (h, l, offset) {
8717 H.writeInt32BE(h, offset)
8718 H.writeInt32BE(l, offset +
4)
8721 writeInt64BE(this._a, this._al,
0)
8722 writeInt64BE(this._b, this._bl,
8)
8723 writeInt64BE(this._c, this._cl,
16)
8724 writeInt64BE(this._d, this._dl,
24)
8725 writeInt64BE(this._e, this._el,
32)
8726 writeInt64BE(this._f, this._fl,
40)
8731 module.exports = Sha384
8733 }).call(this,require("buffer").Buffer)
8734 },{"./hash":
37,"./sha512":
44,"buffer":
7,"inherits":
35}],
44:[function(require,module,exports){
8736 var inherits = require('inherits')
8737 var Hash = require('./hash')
8740 0x428a2f98,
0xd728ae22,
0x71374491,
0x23ef65cd,
8741 0xb5c0fbcf,
0xec4d3b2f,
0xe9b5dba5,
0x8189dbbc,
8742 0x3956c25b,
0xf348b538,
0x59f111f1,
0xb605d019,
8743 0x923f82a4,
0xaf194f9b,
0xab1c5ed5,
0xda6d8118,
8744 0xd807aa98,
0xa3030242,
0x12835b01,
0x45706fbe,
8745 0x243185be,
0x4ee4b28c,
0x550c7dc3,
0xd5ffb4e2,
8746 0x72be5d74,
0xf27b896f,
0x80deb1fe,
0x3b1696b1,
8747 0x9bdc06a7,
0x25c71235,
0xc19bf174,
0xcf692694,
8748 0xe49b69c1,
0x9ef14ad2,
0xefbe4786,
0x384f25e3,
8749 0x0fc19dc6,
0x8b8cd5b5,
0x240ca1cc,
0x77ac9c65,
8750 0x2de92c6f,
0x592b0275,
0x4a7484aa,
0x6ea6e483,
8751 0x5cb0a9dc,
0xbd41fbd4,
0x76f988da,
0x831153b5,
8752 0x983e5152,
0xee66dfab,
0xa831c66d,
0x2db43210,
8753 0xb00327c8,
0x98fb213f,
0xbf597fc7,
0xbeef0ee4,
8754 0xc6e00bf3,
0x3da88fc2,
0xd5a79147,
0x930aa725,
8755 0x06ca6351,
0xe003826f,
0x14292967,
0x0a0e6e70,
8756 0x27b70a85,
0x46d22ffc,
0x2e1b2138,
0x5c26c926,
8757 0x4d2c6dfc,
0x5ac42aed,
0x53380d13,
0x9d95b3df,
8758 0x650a7354,
0x8baf63de,
0x766a0abb,
0x3c77b2a8,
8759 0x81c2c92e,
0x47edaee6,
0x92722c85,
0x1482353b,
8760 0xa2bfe8a1,
0x4cf10364,
0xa81a664b,
0xbc423001,
8761 0xc24b8b70,
0xd0f89791,
0xc76c51a3,
0x0654be30,
8762 0xd192e819,
0xd6ef5218,
0xd6990624,
0x5565a910,
8763 0xf40e3585,
0x5771202a,
0x106aa070,
0x32bbd1b8,
8764 0x19a4c116,
0xb8d2d0c8,
0x1e376c08,
0x5141ab53,
8765 0x2748774c,
0xdf8eeb99,
0x34b0bcb5,
0xe19b48a8,
8766 0x391c0cb3,
0xc5c95a63,
0x4ed8aa4a,
0xe3418acb,
8767 0x5b9cca4f,
0x7763e373,
0x682e6ff3,
0xd6b2b8a3,
8768 0x748f82ee,
0x5defb2fc,
0x78a5636f,
0x43172f60,
8769 0x84c87814,
0xa1f0ab72,
0x8cc70208,
0x1a6439ec,
8770 0x90befffa,
0x23631e28,
0xa4506ceb,
0xde82bde9,
8771 0xbef9a3f7,
0xb2c67915,
0xc67178f2,
0xe372532b,
8772 0xca273ece,
0xea26619c,
0xd186b8c7,
0x21c0c207,
8773 0xeada7dd6,
0xcde0eb1e,
0xf57d4f7f,
0xee6ed178,
8774 0x06f067aa,
0x72176fba,
0x0a637dc5,
0xa2c898a6,
8775 0x113f9804,
0xbef90dae,
0x1b710b35,
0x131c471b,
8776 0x28db77f5,
0x23047d84,
0x32caab7b,
0x40c72493,
8777 0x3c9ebe0a,
0x15c9bebc,
0x431d67c4,
0x9c100d4c,
8778 0x4cc5d4be,
0xcb3e42b6,
0x597f299c,
0xfc657e2a,
8779 0x5fcb6fab,
0x3ad6faec,
0x6c44198c,
0x4a475817
8782 var W = new Array(
160)
8784 function Sha512 () {
8788 Hash.call(this,
128,
112)
8791 inherits(Sha512, Hash)
8793 Sha512.prototype.init = function () {
8794 this._a =
0x6a09e667 |
0
8795 this._b =
0xbb67ae85 |
0
8796 this._c =
0x3c6ef372 |
0
8797 this._d =
0xa54ff53a |
0
8798 this._e =
0x510e527f |
0
8799 this._f =
0x9b05688c |
0
8800 this._g =
0x1f83d9ab |
0
8801 this._h =
0x5be0cd19 |
0
8803 this._al =
0xf3bcc908 |
0
8804 this._bl =
0x84caa73b |
0
8805 this._cl =
0xfe94f82b |
0
8806 this._dl =
0x5f1d36f1 |
0
8807 this._el =
0xade682d1 |
0
8808 this._fl =
0x2b3e6c1f |
0
8809 this._gl =
0xfb41bd6b |
0
8810 this._hl =
0x137e2179 |
0
8815 function S (X, Xl, n) {
8816 return (X
>>> n) | (Xl << (
32 - n))
8819 function Ch (x, y, z) {
8820 return ((x & y) ^ ((~x) & z))
8823 function Maj (x, y, z) {
8824 return ((x & y) ^ (x & z) ^ (y & z))
8827 Sha512.prototype._update = function (M) {
8839 var al = this._al |
0
8840 var bl = this._bl |
0
8841 var cl = this._cl |
0
8842 var dl = this._dl |
0
8843 var el = this._el |
0
8844 var fl = this._fl |
0
8845 var gl = this._gl |
0
8846 var hl = this._hl |
0
8851 var x = W[j -
15 *
2]
8852 var xl = W[j -
15 *
2 +
1]
8853 var gamma0 = S(x, xl,
1) ^ S(x, xl,
8) ^ (x
>>> 7)
8854 var gamma0l = S(xl, x,
1) ^ S(xl, x,
8) ^ S(xl, x,
7)
8857 xl = W[j -
2 *
2 +
1]
8858 var gamma1 = S(x, xl,
19) ^ S(xl, x,
29) ^ (x
>>> 6)
8859 var gamma1l = S(xl, x,
19) ^ S(x, xl,
29) ^ S(xl, x,
6)
8861 // W[i] = gamma0 + W[i -
7] + gamma1 + W[i -
16]
8862 var Wi7 = W[j -
7 *
2]
8863 var Wi7l = W[j -
7 *
2 +
1]
8865 var Wi16 = W[j -
16 *
2]
8866 var Wi16l = W[j -
16 *
2 +
1]
8868 Wil = gamma0l + Wi7l
8869 Wi = gamma0 + Wi7 + ((Wil
>>> 0) < (gamma0l
>>> 0) ?
1 :
0)
8871 Wi = Wi + gamma1 + ((Wil
>>> 0) < (gamma1l
>>> 0) ?
1 :
0)
8873 Wi = Wi + Wi16 + ((Wil
>>> 0) < (Wi16l
>>> 0) ?
1 :
0)
8880 var maj = Maj(a, b, c)
8881 var majl = Maj(al, bl, cl)
8883 var sigma0h = S(a, al,
28) ^ S(al, a,
2) ^ S(al, a,
7)
8884 var sigma0l = S(al, a,
28) ^ S(a, al,
2) ^ S(a, al,
7)
8885 var sigma1h = S(e, el,
14) ^ S(e, el,
18) ^ S(el, e,
9)
8886 var sigma1l = S(el, e,
14) ^ S(el, e,
18) ^ S(e, el,
9)
8888 // t1 = h + sigma1 + ch + K[i] + W[i]
8892 var ch = Ch(e, f, g)
8893 var chl = Ch(el, fl, gl)
8895 var t1l = hl + sigma1l
8896 var t1 = h + sigma1h + ((t1l
>>> 0) < (hl
>>> 0) ?
1 :
0)
8898 t1 = t1 + ch + ((t1l
>>> 0) < (chl
>>> 0) ?
1 :
0)
8900 t1 = t1 + Ki + ((t1l
>>> 0) < (Kil
>>> 0) ?
1 :
0)
8902 t1 = t1 + Wi + ((t1l
>>> 0) < (Wil
>>> 0) ?
1 :
0)
8904 // t2 = sigma0 + maj
8905 var t2l = sigma0l + majl
8906 var t2 = sigma0h + maj + ((t2l
>>> 0) < (sigma0l
>>> 0) ?
1 :
0)
8915 e = (d + t1 + ((el
>>> 0) < (dl
>>> 0) ?
1 :
0)) |
0
8922 al = (t1l + t2l) |
0
8923 a = (t1 + t2 + ((al
>>> 0) < (t1l
>>> 0) ?
1 :
0)) |
0
8930 Wi = M.readInt32BE(j *
4)
8931 Wil = M.readInt32BE(j *
4 +
4)
8941 this._al = (this._al + al) |
0
8942 this._bl = (this._bl + bl) |
0
8943 this._cl = (this._cl + cl) |
0
8944 this._dl = (this._dl + dl) |
0
8945 this._el = (this._el + el) |
0
8946 this._fl = (this._fl + fl) |
0
8947 this._gl = (this._gl + gl) |
0
8948 this._hl = (this._hl + hl) |
0
8950 this._a = (this._a + a + ((this._al
>>> 0) < (al
>>> 0) ?
1 :
0)) |
0
8951 this._b = (this._b + b + ((this._bl
>>> 0) < (bl
>>> 0) ?
1 :
0)) |
0
8952 this._c = (this._c + c + ((this._cl
>>> 0) < (cl
>>> 0) ?
1 :
0)) |
0
8953 this._d = (this._d + d + ((this._dl
>>> 0) < (dl
>>> 0) ?
1 :
0)) |
0
8954 this._e = (this._e + e + ((this._el
>>> 0) < (el
>>> 0) ?
1 :
0)) |
0
8955 this._f = (this._f + f + ((this._fl
>>> 0) < (fl
>>> 0) ?
1 :
0)) |
0
8956 this._g = (this._g + g + ((this._gl
>>> 0) < (gl
>>> 0) ?
1 :
0)) |
0
8957 this._h = (this._h + h + ((this._hl
>>> 0) < (hl
>>> 0) ?
1 :
0)) |
0
8960 Sha512.prototype._hash = function () {
8961 var H = new Buffer(
64)
8963 function writeInt64BE (h, l, offset) {
8964 H.writeInt32BE(h, offset)
8965 H.writeInt32BE(l, offset +
4)
8968 writeInt64BE(this._a, this._al,
0)
8969 writeInt64BE(this._b, this._bl,
8)
8970 writeInt64BE(this._c, this._cl,
16)
8971 writeInt64BE(this._d, this._dl,
24)
8972 writeInt64BE(this._e, this._el,
32)
8973 writeInt64BE(this._f, this._fl,
40)
8974 writeInt64BE(this._g, this._gl,
48)
8975 writeInt64BE(this._h, this._hl,
56)
8980 module.exports = Sha512
8982 }).call(this,require(
"buffer").Buffer)
8983 },{
"./hash":
37,
"buffer":
7,
"inherits":
35}],
45:[function(require,module,exports){
8986 var createHash = require('create-hash/browser');
8987 var inherits = require('inherits')
8989 var Transform = require('stream').Transform
8991 var ZEROS = new Buffer(
128)
8994 function Hmac(alg, key) {
8995 Transform.call(this)
8997 if (typeof key === 'string') {
8998 key = new Buffer(key)
9001 var blocksize = (alg === 'sha512' || alg === 'sha384') ?
128 :
64
9006 if (key.length
> blocksize) {
9007 key = createHash(alg).update(key).digest()
9009 } else if (key.length < blocksize) {
9010 key = Buffer.concat([key, ZEROS], blocksize)
9013 var ipad = this._ipad = new Buffer(blocksize)
9014 var opad = this._opad = new Buffer(blocksize)
9016 for (var i =
0; i < blocksize; i++) {
9017 ipad[i] = key[i] ^
0x36
9018 opad[i] = key[i] ^
0x5C
9021 this._hash = createHash(alg).update(ipad)
9024 inherits(Hmac, Transform)
9026 Hmac.prototype.update = function (data, enc) {
9027 this._hash.update(data, enc)
9032 Hmac.prototype._transform = function (data, _, next) {
9033 this._hash.update(data)
9038 Hmac.prototype._flush = function (next) {
9039 this.push(this.digest())
9044 Hmac.prototype.digest = function (enc) {
9045 var h = this._hash.digest()
9047 return createHash(this._alg).update(this._opad).update(h).digest(enc)
9050 module.exports = function createHmac(alg, key) {
9051 return new Hmac(alg, key)
9054 }).call(this,require("buffer").Buffer)
9055 },{"buffer":
7,"create-hash/browser":
32,"inherits":
46,"stream":
26}],
46:[function(require,module,exports){
9056 arguments[
4][
12][
0].apply(exports,arguments)
9057 },{"dup":
12}],
47:[function(require,module,exports){
9058 var assert = require('assert')
9059 var BigInteger = require('bigi')
9061 var Point = require('./point')
9063 function Curve(p, a, b, Gx, Gy, n, h) {
9067 this.G = Point.fromAffine(this, Gx, Gy)
9071 this.infinity = new Point(this, null, null, BigInteger.ZERO)
9074 this.pOverFour = p.add(BigInteger.ONE).shiftRight(
2)
9077 Curve.prototype.pointFromX = function(isOdd, x) {
9078 var alpha = x.pow(
3).add(this.a.multiply(x)).add(this.b).mod(this.p)
9079 var beta = alpha.modPow(this.pOverFour, this.p) // XXX: not compatible with all curves
9082 if (beta.isEven() ^ !isOdd) {
9083 y = this.p.subtract(y) // -y % p
9086 return Point.fromAffine(this, x, y)
9089 Curve.prototype.isInfinity = function(Q) {
9090 if (Q === this.infinity) return true
9092 return Q.z.signum() ===
0 && Q.y.signum() !==
0
9095 Curve.prototype.isOnCurve = function(Q) {
9096 if (this.isInfinity(Q)) return true
9104 // Check that xQ and yQ are integers in the interval [
0, p -
1]
9105 if (x.signum() <
0 || x.compareTo(p)
>=
0) return false
9106 if (y.signum() <
0 || y.compareTo(p)
>=
0) return false
9108 // and check that y^
2 = x^
3 + ax + b (mod p)
9109 var lhs = y.square().mod(p)
9110 var rhs = x.pow(
3).add(a.multiply(x)).add(b).mod(p)
9111 return lhs.equals(rhs)
9115 * Validate an elliptic curve point.
9117 * See SEC
1, section
3.2.2.1: Elliptic Curve Public Key Validation Primitive
9119 Curve.prototype.validate = function(Q) {
9121 assert(!this.isInfinity(Q), 'Point is at infinity')
9122 assert(this.isOnCurve(Q), 'Point is not on the curve')
9124 // Check nQ = O (where Q is a scalar multiple of G)
9125 var nQ = Q.multiply(this.n)
9126 assert(this.isInfinity(nQ), 'Point is not a scalar multiple of G')
9131 module.exports = Curve
9133 },{"./point":
51,"assert":
5,"bigi":
3}],
48:[function(require,module,exports){
9136 "p": "fffffffdffffffffffffffffffffffff",
9137 "a": "fffffffdfffffffffffffffffffffffc",
9138 "b": "e87579c11079f43dd824993c2cee5ed3",
9139 "n": "fffffffe0000000075a30d1b9038a115",
9141 "Gx": "
161ff7528b899b2d0c28607ca52c5b86",
9142 "Gy": "cf5ac8395bafeb13c02da292dded7a83"
9145 "p": "fffffffffffffffffffffffffffffffeffffac73",
9148 "n": "
0100000000000000000001b8fa16dfab9aca16b6b3",
9150 "Gx": "
3b4c382ce37aa192a4019e763036f4f5dd4d7ebb",
9151 "Gy": "
938cf935318fdced6bc28286531733c3f03c4fee"
9154 "p": "ffffffffffffffffffffffffffffffff7fffffff",
9155 "a": "ffffffffffffffffffffffffffffffff7ffffffc",
9156 "b": "
1c97befc54bd7a8b65acf89f81d4d4adc565fa45",
9157 "n": "
0100000000000000000001f4c8f927aed3ca752257",
9159 "Gx": "
4a96b5688ef573284664698968c38bb913cbfc82",
9160 "Gy": "
23a628553168947d59dcc912042351377ac5fb32"
9163 "p": "fffffffffffffffffffffffffffffffffffffffeffffee37",
9166 "n": "fffffffffffffffffffffffe26f2fc170f69466a74defd8d",
9168 "Gx": "db4ff10ec057e9ae26b07d0280b7f4341da5d1b1eae06c7d",
9169 "Gy": "
9b2f2f6d9c5628a7844163d015be86344082aa88d95e2f9d"
9172 "p": "fffffffffffffffffffffffffffffffeffffffffffffffff",
9173 "a": "fffffffffffffffffffffffffffffffefffffffffffffffc",
9174 "b": "
64210519e59c80e70fa7e9ab72243049feb8deecc146b9b1",
9175 "n": "ffffffffffffffffffffffff99def836146bc9b1b4d22831",
9177 "Gx": "
188da80eb03090f67cbf20eb43a18800f4ff0afd82ff1012",
9178 "Gy": "
07192b95ffc8da78631011ed6b24cdd573f977a11e794811"
9181 "p": "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f",
9184 "n": "fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141",
9186 "Gx": "
79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
9187 "Gy": "
483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8"
9190 "p": "ffffffff00000001000000000000000000000000ffffffffffffffffffffffff",
9191 "a": "ffffffff00000001000000000000000000000000fffffffffffffffffffffffc",
9192 "b": "
5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b",
9193 "n": "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551",
9195 "Gx": "
6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
9196 "Gy": "
4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5"
9200 },{}],
49:[function(require,module,exports){
9201 var Point = require('./point')
9202 var Curve = require('./curve')
9204 var getCurveByName = require('./names')
9209 getCurveByName: getCurveByName
9212 },{"./curve":
47,"./names":
50,"./point":
51}],
50:[function(require,module,exports){
9213 var BigInteger = require('bigi')
9215 var curves = require('./curves')
9216 var Curve = require('./curve')
9218 function getCurveByName(name) {
9219 var curve = curves[name]
9220 if (!curve) return null
9222 var p = new BigInteger(curve.p,
16)
9223 var a = new BigInteger(curve.a,
16)
9224 var b = new BigInteger(curve.b,
16)
9225 var n = new BigInteger(curve.n,
16)
9226 var h = new BigInteger(curve.h,
16)
9227 var Gx = new BigInteger(curve.Gx,
16)
9228 var Gy = new BigInteger(curve.Gy,
16)
9230 return new Curve(p, a, b, Gx, Gy, n, h)
9233 module.exports = getCurveByName
9235 },{"./curve":
47,"./curves":
48,"bigi":
3}],
51:[function(require,module,exports){
9237 var assert = require('assert')
9238 var BigInteger = require('bigi')
9240 var THREE = BigInteger.valueOf(
3)
9242 function Point(curve, x, y, z) {
9243 assert.notStrictEqual(z, undefined, 'Missing Z coordinate')
9251 this.compressed = true
9254 Object.defineProperty(Point.prototype, 'zInv', {
9256 if (this._zInv === null) {
9257 this._zInv = this.z.modInverse(this.curve.p)
9264 Object.defineProperty(Point.prototype, 'affineX', {
9266 return this.x.multiply(this.zInv).mod(this.curve.p)
9270 Object.defineProperty(Point.prototype, 'affineY', {
9272 return this.y.multiply(this.zInv).mod(this.curve.p)
9276 Point.fromAffine = function(curve, x, y) {
9277 return new Point(curve, x, y, BigInteger.ONE)
9280 Point.prototype.equals = function(other) {
9281 if (other === this) return true
9282 if (this.curve.isInfinity(this)) return this.curve.isInfinity(other)
9283 if (this.curve.isInfinity(other)) return this.curve.isInfinity(this)
9285 // u = Y2 * Z1 - Y1 * Z2
9286 var u = other.y.multiply(this.z).subtract(this.y.multiply(other.z)).mod(this.curve.p)
9288 if (u.signum() !==
0) return false
9290 // v = X2 * Z1 - X1 * Z2
9291 var v = other.x.multiply(this.z).subtract(this.x.multiply(other.z)).mod(this.curve.p)
9293 return v.signum() ===
0
9296 Point.prototype.negate = function() {
9297 var y = this.curve.p.subtract(this.y)
9299 return new Point(this.curve, this.x, y, this.z)
9302 Point.prototype.add = function(b) {
9303 if (this.curve.isInfinity(this)) return b
9304 if (this.curve.isInfinity(b)) return this
9311 // u = Y2 * Z1 - Y1 * Z2
9312 var u = y2.multiply(this.z).subtract(y1.multiply(b.z)).mod(this.curve.p)
9313 // v = X2 * Z1 - X1 * Z2
9314 var v = x2.multiply(this.z).subtract(x1.multiply(b.z)).mod(this.curve.p)
9316 if (v.signum() ===
0) {
9317 if (u.signum() ===
0) {
9318 return this.twice() // this == b, so double
9321 return this.curve.infinity // this = -b, so infinity
9325 var v3 = v2.multiply(v)
9326 var x1v2 = x1.multiply(v2)
9327 var zu2 = u.square().multiply(this.z)
9329 // x3 = v * (z2 * (z1 * u^
2 -
2 * x1 * v^
2) - v^
3)
9330 var x3 = zu2.subtract(x1v2.shiftLeft(
1)).multiply(b.z).subtract(v3).multiply(v).mod(this.curve.p)
9331 // y3 = z2 * (
3 * x1 * u * v^
2 - y1 * v^
3 - z1 * u^
3) + u * v^
3
9332 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)
9333 // z3 = v^
3 * z1 * z2
9334 var z3 = v3.multiply(this.z).multiply(b.z).mod(this.curve.p)
9336 return new Point(this.curve, x3, y3, z3)
9339 Point.prototype.twice = function() {
9340 if (this.curve.isInfinity(this)) return this
9341 if (this.y.signum() ===
0) return this.curve.infinity
9346 var y1z1 = y1.multiply(this.z)
9347 var y1sqz1 = y1z1.multiply(y1).mod(this.curve.p)
9348 var a = this.curve.a
9350 // w =
3 * x1^
2 + a * z1^
2
9351 var w = x1.square().multiply(THREE)
9353 if (a.signum() !==
0) {
9354 w = w.add(this.z.square().multiply(a))
9357 w = w.mod(this.curve.p)
9358 // x3 =
2 * y1 * z1 * (w^
2 -
8 * x1 * y1^
2 * z1)
9359 var x3 = w.square().subtract(x1.shiftLeft(
3).multiply(y1sqz1)).shiftLeft(
1).multiply(y1z1).mod(this.curve.p)
9360 // y3 =
4 * y1^
2 * z1 * (
3 * w * x1 -
2 * y1^
2 * z1) - w^
3
9361 var y3 = w.multiply(THREE).multiply(x1).subtract(y1sqz1.shiftLeft(
1)).shiftLeft(
2).multiply(y1sqz1).subtract(w.pow(
3)).mod(this.curve.p)
9362 // z3 =
8 * (y1 * z1)^
3
9363 var z3 = y1z1.pow(
3).shiftLeft(
3).mod(this.curve.p)
9365 return new Point(this.curve, x3, y3, z3)
9368 // Simple NAF (Non-Adjacent Form) multiplication algorithm
9369 // TODO: modularize the multiplication algorithm
9370 Point.prototype.multiply = function(k) {
9371 if (this.curve.isInfinity(this)) return this
9372 if (k.signum() ===
0) return this.curve.infinity
9375 var h = e.multiply(THREE)
9377 var neg = this.negate()
9380 for (var i = h.bitLength() -
2; i
> 0; --i) {
9383 var hBit = h.testBit(i)
9384 var eBit = e.testBit(i)
9387 R = R.add(hBit ? this : neg)
9394 // Compute this*j + x*k (simultaneous multiplication)
9395 Point.prototype.multiplyTwo = function(j, x, k) {
9398 if (j.bitLength()
> k.bitLength())
9399 i = j.bitLength() -
1
9401 i = k.bitLength() -
1
9403 var R = this.curve.infinity
9404 var both = this.add(x)
9409 var jBit = j.testBit(i)
9410 var kBit = k.testBit(i)
9431 Point.prototype.getEncoded = function(compressed) {
9432 if (compressed == undefined) compressed = this.compressed
9433 if (this.curve.isInfinity(this)) return new Buffer('
00', 'hex') // Infinity point encoded is simply '
00'
9435 var x = this.affineX
9436 var y = this.affineY
9440 // Determine size of q in bytes
9441 var byteLength = Math.floor((this.curve.p.bitLength() +
7) /
8)
9445 buffer = new Buffer(
1 + byteLength)
9446 buffer.writeUInt8(y.isEven() ?
0x02 :
0x03,
0)
9450 buffer = new Buffer(
1 + byteLength + byteLength)
9451 buffer.writeUInt8(
0x04,
0)
9453 y.toBuffer(byteLength).copy(buffer,
1 + byteLength)
9456 x.toBuffer(byteLength).copy(buffer,
1)
9461 Point.decodeFrom = function(curve, buffer) {
9462 var type = buffer.readUInt8(
0)
9463 var compressed = (type !==
4)
9465 var byteLength = Math.floor((curve.p.bitLength() +
7) /
8)
9466 var x = BigInteger.fromBuffer(buffer.slice(
1,
1 + byteLength))
9470 assert.equal(buffer.length, byteLength +
1, 'Invalid sequence length')
9471 assert(type ===
0x02 || type ===
0x03, 'Invalid sequence tag')
9473 var isOdd = (type ===
0x03)
9474 Q = curve.pointFromX(isOdd, x)
9477 assert.equal(buffer.length,
1 + byteLength + byteLength, 'Invalid sequence length')
9479 var y = BigInteger.fromBuffer(buffer.slice(
1 + byteLength))
9480 Q = Point.fromAffine(curve, x, y)
9483 Q.compressed = compressed
9487 Point.prototype.toString = function () {
9488 if (this.curve.isInfinity(this)) return '(INFINITY)'
9490 return '(' + this.affineX.toString() + ',' + this.affineY.toString() + ')'
9493 module.exports = Point
9495 }).call(this,require("buffer").Buffer)
9496 },{"assert":
5,"bigi":
3,"buffer":
7}],
52:[function(require,module,exports){
9497 (function (process,global,Buffer){
9500 var crypto = global.crypto || global.msCrypto
9501 if(crypto && crypto.getRandomValues) {
9502 module.exports = randomBytes;
9504 module.exports = oldBrowser;
9506 function randomBytes(size, cb) {
9507 var bytes = new Buffer(size); //in browserify, this is an extended Uint8Array
9508 /* This will not work in older browsers.
9509 * See https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues
9512 crypto.getRandomValues(bytes);
9513 if (typeof cb === 'function') {
9514 return process.nextTick(function () {
9520 function oldBrowser() {
9522 'secure random number generation not supported by this browser\n'+
9523 'use chrome, FireFox or Internet Explorer
11'
9527 }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer)
9528 },{"_process":
14,"buffer":
7}],
53:[function(require,module,exports){
9532 function getFunctionName(fn) {
9533 return fn.name || fn.toString().match(/function (.*?)\s*\(/)[
1];
9536 function getTypeTypeName(type) {
9537 if (nativeTypes.Function(type)) {
9538 type = type.toJSON ? type.toJSON() : getFunctionName(type);
9540 if (nativeTypes.Object(type)) return JSON.stringify(type);
9545 function getValueTypeName(value) {
9546 if (nativeTypes.Null(value)) return '';
9548 return getFunctionName(value.constructor);
9551 function tfErrorString(type, value) {
9552 var typeTypeName = getTypeTypeName(type);
9553 var valueTypeName = getValueTypeName(value);
9555 return 'Expected ' + typeTypeName + ', got ' + (valueTypeName && valueTypeName + ' ') + JSON.stringify(value);
9558 function tfPropertyErrorString(type, name, value) {
9559 return tfErrorString('property \"' + name + '\" of type ' + getTypeTypeName(type), value);
9563 Array: (function (_Array) {
9564 function Array(_x) {
9565 return _Array.apply(this, arguments);
9568 Array.toString = function () {
9569 return _Array.toString();
9573 })(function (value) {
9574 return value !== null && value !== undefined && value.constructor === Array;
9576 Boolean: function Boolean(value) {
9577 return typeof value === 'boolean';
9579 Buffer: (function (_Buffer) {
9580 function Buffer(_x2) {
9581 return _Buffer.apply(this, arguments);
9584 Buffer.toString = function () {
9585 return _Buffer.toString();
9589 })(function (value) {
9590 return Buffer.isBuffer(value);
9592 Function: function Function(value) {
9593 return typeof value === 'function';
9595 Null: function Null(value) {
9596 return value === undefined || value === null;
9598 Number: function Number(value) {
9599 return typeof value === 'number';
9601 Object: function Object(value) {
9602 return typeof value === 'object';
9604 String: function String(value) {
9605 return typeof value === 'string';
9612 function tJSON(type) {
9613 return type && type.toJSON ? type.toJSON() : type;
9616 function sJSON(type) {
9617 var json = tJSON(type);
9618 return nativeTypes.Object(json) ? JSON.stringify(json) : json;
9622 arrayOf: function arrayOf(type) {
9623 function arrayOf(value, strict) {
9625 return nativeTypes.Array(value) && value.every(function (x) {
9626 return typeforce(type, x, strict);
9632 arrayOf.toJSON = function () {
9633 return [tJSON(type)];
9639 maybe: function maybe(type) {
9640 function maybe(value, strict) {
9641 return nativeTypes.Null(value) || typeforce(type, value, strict);
9643 maybe.toJSON = function () {
9644 return '?' + sJSON(type);
9650 object: function object(type) {
9651 function object(value, strict) {
9652 typeforce(nativeTypes.Object, value, strict);
9654 var propertyName, propertyType, propertyValue;
9657 for (propertyName in type) {
9658 propertyType = type[propertyName];
9659 propertyValue = value[propertyName];
9661 typeforce(propertyType, propertyValue, strict);
9664 throw new TypeError(tfPropertyErrorString(propertyType, propertyName, propertyValue));
9668 for (propertyName in value) {
9669 if (type[propertyName]) continue;
9671 throw new TypeError('Unexpected property "' + propertyName + '"');
9677 object.toJSON = function () {
9684 oneOf: function oneOf() {
9685 for (var _len = arguments.length, types = Array(_len), _key =
0; _key < _len; _key++) {
9686 types[_key] = arguments[_key];
9689 function oneOf(value, strict) {
9690 return types.some(function (type) {
9692 return typeforce(type, value, strict);
9698 oneOf.toJSON = function () {
9699 return types.map(sJSON).join('|');
9705 quacksLike: function quacksLike(type) {
9706 function quacksLike(value, strict) {
9707 return type === getValueTypeName(value);
9709 quacksLike.toJSON = function () {
9716 tuple: function tuple() {
9717 for (var _len2 = arguments.length, types = Array(_len2), _key2 =
0; _key2 < _len2; _key2++) {
9718 types[_key2] = arguments[_key2];
9721 function tuple(value, strict) {
9722 return types.every(function (type, i) {
9723 return typeforce(type, value[i], strict);
9726 tuple.toJSON = function () {
9727 return '(' + types.map(sJSON).join(', ') + ')';
9733 value: function value(expected) {
9734 function value(actual) {
9735 return actual === expected;
9737 value.toJSON = function () {
9745 function compile(type) {
9746 if (nativeTypes.String(type)) {
9747 if (type[
0] === '?') return otherTypes.maybe(compile(type.slice(
1)));
9749 return nativeTypes[type] || otherTypes.quacksLike(type);
9750 } else if (type && nativeTypes.Object(type)) {
9751 if (nativeTypes.Array(type)) return otherTypes.arrayOf(compile(type[
0]));
9755 for (var propertyName in type) {
9756 compiled[propertyName] = compile(type[propertyName]);
9759 return otherTypes.object(compiled);
9760 } else if (nativeTypes.Function(type)) {
9764 return otherTypes.value(type);
9767 function typeforce(_x3, _x4, _x5) {
9770 _function: while (_again) {
9776 if (nativeTypes.Function(type)) {
9777 if (type(value, strict)) return true;
9779 throw new TypeError(tfErrorString(type, value));
9783 _x3 = compile(type);
9791 // assign all types to typeforce function
9793 Object.keys(nativeTypes).forEach(function (typeName) {
9794 var nativeType = nativeTypes[typeName];
9795 nativeType.toJSON = function () {
9799 typeforce[typeName] = nativeType;
9802 for (typeName in otherTypes) {
9803 typeforce[typeName] = otherTypes[typeName];
9806 module.exports = typeforce;
9807 module.exports.compile = compile;
9808 }).call(this,require("buffer").Buffer)
9809 },{"buffer":
7}],
54:[function(require,module,exports){
9811 var assert = require('assert')
9812 var base58check = require('bs58check')
9813 var typeForce = require('typeforce')
9814 var networks = require('./networks')
9815 var scripts = require('./scripts')
9817 function findScriptTypeByVersion (version) {
9818 for (var networkName in networks) {
9819 var network = networks[networkName]
9821 if (version === network.pubKeyHash) return 'pubkeyhash'
9822 if (version === network.scriptHash) return 'scripthash'
9826 function Address (hash, version) {
9827 typeForce('Buffer', hash)
9829 assert.strictEqual(hash.length,
20, 'Invalid hash length')
9830 assert.strictEqual(version &
0xff, version, 'Invalid version byte')
9833 this.version = version
9836 Address.fromBase58Check = function (string) {
9837 var payload = base58check.decode(string)
9838 var version = payload.readUInt8(
0)
9839 var hash = payload.slice(
1)
9841 return new Address(hash, version)
9844 Address.fromOutputScript = function (script, network) {
9845 network = network || networks.bitcoin
9847 if (scripts.isPubKeyHashOutput(script)) return new Address(script.chunks[
2], network.pubKeyHash)
9848 if (scripts.isScriptHashOutput(script)) return new Address(script.chunks[
1], network.scriptHash)
9850 assert(false, script.toASM() + ' has no matching Address')
9853 Address.prototype.toBase58Check = function () {
9854 var payload = new Buffer(
21)
9855 payload.writeUInt8(this.version,
0)
9856 this.hash.copy(payload,
1)
9858 return base58check.encode(payload)
9861 Address.prototype.toOutputScript = function () {
9862 var scriptType = findScriptTypeByVersion(this.version)
9864 if (scriptType === 'pubkeyhash') return scripts.pubKeyHashOutput(this.hash)
9865 if (scriptType === 'scripthash') return scripts.scriptHashOutput(this.hash)
9867 assert(false, this.toString() + ' has no matching Script')
9870 Address.prototype.toString = Address.prototype.toBase58Check
9872 module.exports = Address
9874 }).call(this,require("buffer").Buffer)
9875 },{"./networks":
66,"./scripts":
69,"assert":
5,"bs58check":
31,"buffer":
7,"typeforce":
53}],
55:[function(require,module,exports){
9876 var bs58check = require('bs58check')
9878 function decode () {
9879 console.warn('bs58check will be removed in
2.0.0. require("bs58check") instead.')
9881 return bs58check.decode.apply(undefined, arguments)
9884 function encode () {
9885 console.warn('bs58check will be removed in
2.0.0. require("bs58check") instead.')
9887 return bs58check.encode.apply(undefined, arguments)
9895 },{"bs58check":
31}],
56:[function(require,module,exports){
9897 var assert = require('assert')
9898 var bufferutils = require('./bufferutils')
9899 var crypto = require('./crypto')
9901 var Transaction = require('./transaction')
9905 this.prevHash = null
9906 this.merkleRoot = null
9912 Block.fromBuffer = function (buffer) {
9913 assert(buffer.length
>=
80, 'Buffer too small (<
80 bytes)')
9916 function readSlice (n) {
9918 return buffer.slice(offset - n, offset)
9921 function readUInt32 () {
9922 var i = buffer.readUInt32LE(offset)
9927 var block = new Block()
9928 block.version = readUInt32()
9929 block.prevHash = readSlice(
32)
9930 block.merkleRoot = readSlice(
32)
9931 block.timestamp = readUInt32()
9932 block.bits = readUInt32()
9933 block.nonce = readUInt32()
9935 if (buffer.length ===
80) return block
9937 function readVarInt () {
9938 var vi = bufferutils.readVarInt(buffer, offset)
9943 // FIXME: poor performance
9944 function readTransaction () {
9945 var tx = Transaction.fromBuffer(buffer.slice(offset), true)
9947 offset += tx.toBuffer().length
9951 var nTransactions = readVarInt()
9952 block.transactions = []
9954 for (var i =
0; i < nTransactions; ++i) {
9955 var tx = readTransaction()
9956 block.transactions.push(tx)
9962 Block.fromHex = function (hex) {
9963 return Block.fromBuffer(new Buffer(hex, 'hex'))
9966 Block.prototype.getHash = function () {
9967 return crypto.hash256(this.toBuffer(true))
9970 Block.prototype.getId = function () {
9971 return bufferutils.reverse(this.getHash()).toString('hex')
9974 Block.prototype.getUTCDate = function () {
9975 var date = new Date(
0) // epoch
9976 date.setUTCSeconds(this.timestamp)
9981 Block.prototype.toBuffer = function (headersOnly) {
9982 var buffer = new Buffer(
80)
9985 function writeSlice (slice) {
9986 slice.copy(buffer, offset)
9987 offset += slice.length
9990 function writeUInt32 (i) {
9991 buffer.writeUInt32LE(i, offset)
9995 writeUInt32(this.version)
9996 writeSlice(this.prevHash)
9997 writeSlice(this.merkleRoot)
9998 writeUInt32(this.timestamp)
9999 writeUInt32(this.bits)
10000 writeUInt32(this.nonce)
10002 if (headersOnly || !this.transactions) return buffer
10004 var txLenBuffer = bufferutils.varIntBuffer(this.transactions.length)
10005 var txBuffers = this.transactions.map(function (tx) {
10006 return tx.toBuffer()
10009 return Buffer.concat([buffer, txLenBuffer].concat(txBuffers))
10012 Block.prototype.toHex = function (headersOnly) {
10013 return this.toBuffer(headersOnly).toString('hex')
10016 module.exports = Block
10018 }).call(this,require("buffer").Buffer)
10019 },{"./bufferutils":
57,"./crypto":
58,"./transaction":
70,"assert":
5,"buffer":
7}],
57:[function(require,module,exports){
10020 (function (Buffer){
10021 var assert = require('assert')
10022 var opcodes = require('./opcodes')
10024 // https://github.com/feross/buffer/blob/master/index.js#L1127
10025 function verifuint (value, max) {
10026 assert(typeof value === 'number', 'cannot write a non-number as a number')
10027 assert(value
>=
0, 'specified a negative value for writing an unsigned value')
10028 assert(value <= max, 'value is larger than maximum value for type')
10029 assert(Math.floor(value) === value, 'value has a fractional component')
10032 function pushDataSize (i) {
10033 return i < opcodes.OP_PUSHDATA1 ?
1
10039 function readPushDataInt (buffer, offset) {
10040 var opcode = buffer.readUInt8(offset)
10044 if (opcode < opcodes.OP_PUSHDATA1) {
10049 } else if (opcode === opcodes.OP_PUSHDATA1) {
10050 if (offset +
2 > buffer.length) return null
10051 number = buffer.readUInt8(offset +
1)
10055 } else if (opcode === opcodes.OP_PUSHDATA2) {
10056 if (offset +
3 > buffer.length) return null
10057 number = buffer.readUInt16LE(offset +
1)
10062 if (offset +
5 > buffer.length) return null
10063 assert.equal(opcode, opcodes.OP_PUSHDATA4, 'Unexpected opcode')
10065 number = buffer.readUInt32LE(offset +
1)
10076 function readUInt64LE (buffer, offset) {
10077 var a = buffer.readUInt32LE(offset)
10078 var b = buffer.readUInt32LE(offset +
4)
10081 verifuint(b + a,
0x001fffffffffffff)
10086 function readVarInt (buffer, offset) {
10087 var t = buffer.readUInt8(offset)
10096 } else if (t <
254) {
10097 number = buffer.readUInt16LE(offset +
1)
10101 } else if (t <
255) {
10102 number = buffer.readUInt32LE(offset +
1)
10107 number = readUInt64LE(buffer, offset +
1)
10117 function writePushDataInt (buffer, number, offset) {
10118 var size = pushDataSize(number)
10122 buffer.writeUInt8(number, offset)
10125 } else if (size ===
2) {
10126 buffer.writeUInt8(opcodes.OP_PUSHDATA1, offset)
10127 buffer.writeUInt8(number, offset +
1)
10130 } else if (size ===
3) {
10131 buffer.writeUInt8(opcodes.OP_PUSHDATA2, offset)
10132 buffer.writeUInt16LE(number, offset +
1)
10136 buffer.writeUInt8(opcodes.OP_PUSHDATA4, offset)
10137 buffer.writeUInt32LE(number, offset +
1)
10143 function writeUInt64LE (buffer, value, offset) {
10144 verifuint(value,
0x001fffffffffffff)
10146 buffer.writeInt32LE(value & -
1, offset)
10147 buffer.writeUInt32LE(Math.floor(value /
0x100000000), offset +
4)
10150 function varIntSize (i) {
10153 : i <
0x100000000 ?
5
10157 function writeVarInt (buffer, number, offset) {
10158 var size = varIntSize(number)
10162 buffer.writeUInt8(number, offset)
10165 } else if (size ===
3) {
10166 buffer.writeUInt8(
253, offset)
10167 buffer.writeUInt16LE(number, offset +
1)
10170 } else if (size ===
5) {
10171 buffer.writeUInt8(
254, offset)
10172 buffer.writeUInt32LE(number, offset +
1)
10176 buffer.writeUInt8(
255, offset)
10177 writeUInt64LE(buffer, number, offset +
1)
10183 function varIntBuffer (i) {
10184 var size = varIntSize(i)
10185 var buffer = new Buffer(size)
10186 writeVarInt(buffer, i,
0)
10191 function reverse (buffer) {
10192 var buffer2 = new Buffer(buffer)
10193 Array.prototype.reverse.call(buffer2)
10198 pushDataSize: pushDataSize,
10199 readPushDataInt: readPushDataInt,
10200 readUInt64LE: readUInt64LE,
10201 readVarInt: readVarInt,
10203 varIntBuffer: varIntBuffer,
10204 varIntSize: varIntSize,
10205 writePushDataInt: writePushDataInt,
10206 writeUInt64LE: writeUInt64LE,
10207 writeVarInt: writeVarInt
10210 }).call(this,require("buffer").Buffer)
10211 },{"./opcodes":
67,"assert":
5,"buffer":
7}],
58:[function(require,module,exports){
10212 var createHash = require('create-hash')
10214 function hash160 (buffer) {
10215 return ripemd160(sha256(buffer))
10218 function hash256 (buffer) {
10219 return sha256(sha256(buffer))
10222 function ripemd160 (buffer) {
10223 return createHash('rmd160').update(buffer).digest()
10226 function sha1 (buffer) {
10227 return createHash('sha1').update(buffer).digest()
10230 function sha256 (buffer) {
10231 return createHash('sha256').update(buffer).digest()
10234 // FIXME: Name not consistent with others
10235 var createHmac = require('create-hmac')
10237 function HmacSHA256 (buffer, secret) {
10238 console.warn('Hmac* functions are deprecated for removal in
2.0.0, use node crypto instead')
10239 return createHmac('sha256', secret).update(buffer).digest()
10242 function HmacSHA512 (buffer, secret) {
10243 console.warn('Hmac* functions are deprecated for removal in
2.0.0, use node crypto instead')
10244 return createHmac('sha512', secret).update(buffer).digest()
10248 ripemd160: ripemd160,
10253 HmacSHA256: HmacSHA256,
10254 HmacSHA512: HmacSHA512
10257 },{"create-hash":
32,"create-hmac":
45}],
59:[function(require,module,exports){
10258 (function (Buffer){
10259 var assert = require('assert')
10260 var createHmac = require('create-hmac')
10261 var typeForce = require('typeforce')
10263 var BigInteger = require('bigi')
10264 var ECSignature = require('./ecsignature')
10266 var ZERO = new Buffer([
0])
10267 var ONE = new Buffer([
1])
10269 // https://tools.ietf.org/html/rfc6979#section-
3.2
10270 function deterministicGenerateK (curve, hash, d, checkSig) {
10271 typeForce('Buffer', hash)
10272 typeForce('BigInteger', d)
10274 // FIXME: remove/uncomment for
2.0.0
10275 // typeForce('Function', checkSig)
10277 if (typeof checkSig !== 'function') {
10278 console.warn('deterministicGenerateK requires a checkSig callback in
2.0.0, see #
337 for more information')
10280 checkSig = function (k) {
10283 var e = BigInteger.fromBuffer(hash)
10285 var Q = G.multiply(k)
10287 if (curve.isInfinity(Q))
10290 var r = Q.affineX.mod(n)
10291 if (r.signum() ===
0)
10294 var s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n)
10295 if (s.signum() ===
0)
10303 assert.equal(hash.length,
32, 'Hash must be
256 bit')
10305 var x = d.toBuffer(
32)
10306 var k = new Buffer(
32)
10307 var v = new Buffer(
32)
10309 // Step A, ignored as hash already provided
10317 k = createHmac('sha256', k)
10325 v = createHmac('sha256', k).update(v).digest()
10328 k = createHmac('sha256', k)
10336 v = createHmac('sha256', k).update(v).digest()
10338 // Step H1/H2a, ignored as tlen === qlen (
256 bit)
10340 v = createHmac('sha256', k).update(v).digest()
10342 var T = BigInteger.fromBuffer(v)
10344 // Step H3, repeat until T is within the interval [
1, n -
1] and is suitable for ECDSA
10345 while ((T.signum() <=
0) || (T.compareTo(curve.n)
>=
0) || !checkSig(T)) {
10346 k = createHmac('sha256', k)
10351 v = createHmac('sha256', k).update(v).digest()
10353 // Step H1/H2a, again, ignored as tlen === qlen (
256 bit)
10355 v = createHmac('sha256', k).update(v).digest()
10356 T = BigInteger.fromBuffer(v)
10362 function sign (curve, hash, d) {
10365 var e = BigInteger.fromBuffer(hash)
10369 deterministicGenerateK(curve, hash, d, function (k) {
10370 var Q = G.multiply(k)
10372 if (curve.isInfinity(Q))
10375 r = Q.affineX.mod(n)
10376 if (r.signum() ===
0)
10379 s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n)
10380 if (s.signum() ===
0)
10386 var N_OVER_TWO = n.shiftRight(
1)
10388 // enforce low S values, see bip62: 'low s values in signatures'
10389 if (s.compareTo(N_OVER_TWO)
> 0) {
10393 return new ECSignature(r, s)
10396 function verifyRaw (curve, e, signature, Q) {
10400 var r = signature.r
10401 var s = signature.s
10403 //
1.4.1 Enforce r and s are both integers in the interval [
1, n −
1]
10404 if (r.signum() <=
0 || r.compareTo(n)
>=
0) return false
10405 if (s.signum() <=
0 || s.compareTo(n)
>=
0) return false
10408 var c = s.modInverse(n)
10410 //
1.4.4 Compute u1 = es^−
1 mod n
10411 // u2 = rs^−
1 mod n
10412 var u1 = e.multiply(c).mod(n)
10413 var u2 = r.multiply(c).mod(n)
10415 //
1.4.5 Compute R = (xR, yR) = u1G + u2Q
10416 var R = G.multiplyTwo(u1, Q, u2)
10417 var v = R.affineX.mod(n)
10419 //
1.4.5 (cont.) Enforce R is not at infinity
10420 if (curve.isInfinity(R)) return false
10422 //
1.4.8 If v = r, output "valid", and if v != r, output "invalid"
10426 function verify (curve, hash, signature, Q) {
10427 //
1.4.2 H = Hash(M), already done by the user
10429 var e = BigInteger.fromBuffer(hash)
10431 return verifyRaw(curve, e, signature, Q)
10435 * Recover a public key from a signature.
10437 * See SEC
1: Elliptic Curve Cryptography, section
4.1.6, "Public
10438 * Key Recovery Operation".
10440 * http://www.secg.org/download/aid-
780/sec1-v2.pdf
10442 function recoverPubKey (curve, e, signature, i) {
10443 assert.strictEqual(i &
3, i, 'Recovery param is more than two bits')
10448 var r = signature.r
10449 var s = signature.s
10451 assert(r.signum()
> 0 && r.compareTo(n) <
0, 'Invalid r value')
10452 assert(s.signum()
> 0 && s.compareTo(n) <
0, 'Invalid s value')
10454 // A set LSB signifies that the y-coordinate is odd
10457 // The more significant bit specifies whether we should use the
10458 // first or second candidate key.
10459 var isSecondKey = i
>> 1
10461 //
1.1 Let x = r + jn
10462 var x = isSecondKey ? r.add(n) : r
10463 var R = curve.pointFromX(isYOdd, x)
10465 //
1.4 Check that nR is at infinity
10466 var nR = R.multiply(n)
10467 assert(curve.isInfinity(nR), 'nR is not a valid curve point')
10469 // Compute -e from e
10470 var eNeg = e.negate().mod(n)
10472 //
1.6.1 Compute Q = r^-
1 (sR - eG)
10473 // Q = r^-
1 (sR + -eG)
10474 var rInv = r.modInverse(n)
10476 var Q = R.multiplyTwo(s, G, eNeg).multiply(rInv)
10483 * Calculate pubkey extraction parameter.
10485 * When extracting a pubkey from a signature, we have to
10486 * distinguish four different cases. Rather than putting this
10487 * burden on the verifier, Bitcoin includes a
2-bit value with the
10490 * This function simply tries all four cases and returns the value
10491 * that resulted in a successful pubkey recovery.
10493 function calcPubKeyRecoveryParam (curve, e, signature, Q) {
10494 for (var i =
0; i <
4; i++) {
10495 var Qprime = recoverPubKey(curve, e, signature, i)
10498 if (Qprime.equals(Q)) {
10503 throw new Error('Unable to find valid recovery factor')
10507 calcPubKeyRecoveryParam: calcPubKeyRecoveryParam,
10508 deterministicGenerateK: deterministicGenerateK,
10509 recoverPubKey: recoverPubKey,
10512 verifyRaw: verifyRaw
10515 }).call(this,require(
"buffer").Buffer)
10516 },{
"./ecsignature":
62,
"assert":
5,
"bigi":
3,
"buffer":
7,
"create-hmac":
45,
"typeforce":
53}],
60:[function(require,module,exports){
10517 (function (Buffer){
10518 var assert = require('assert')
10519 var base58check = require('bs58check')
10520 var ecdsa = require('./ecdsa')
10521 var networks = require('./networks')
10522 var randomBytes = require('randombytes')
10523 var typeForce = require('typeforce')
10525 var BigInteger = require('bigi')
10526 var ECPubKey = require('./ecpubkey')
10528 var ecurve = require('ecurve')
10529 var secp256k1 = ecurve.getCurveByName('secp256k1')
10531 function ECKey (d, compressed) {
10532 assert(d.signum()
> 0, 'Private key must be greater than
0')
10533 assert(d.compareTo(ECKey.curve.n) <
0, 'Private key must be less than the curve order')
10535 var Q = ECKey.curve.G.multiply(d)
10538 this.pub = new ECPubKey(Q, compressed)
10542 ECKey.curve = secp256k1
10544 // Static constructors
10545 ECKey.fromWIF = function (string) {
10546 var payload = base58check.decode(string)
10547 var compressed = false
10549 // Ignore the version byte
10550 payload = payload.slice(
1)
10552 if (payload.length ===
33) {
10553 assert.strictEqual(payload[
32],
0x01, 'Invalid compression flag')
10555 // Truncate the compression flag
10556 payload = payload.slice(
0, -
1)
10560 assert.equal(payload.length,
32, 'Invalid WIF payload length')
10562 var d = BigInteger.fromBuffer(payload)
10563 return new ECKey(d, compressed)
10566 ECKey.makeRandom = function (compressed, rng) {
10567 rng = rng || randomBytes
10569 var buffer = rng(
32)
10570 typeForce('Buffer', buffer)
10571 assert.equal(buffer.length,
32, 'Expected
256-bit Buffer from RNG')
10573 var d = BigInteger.fromBuffer(buffer)
10574 d = d.mod(ECKey.curve.n)
10576 return new ECKey(d, compressed)
10579 // Export functions
10580 ECKey.prototype.toWIF = function (network) {
10581 network = network || networks.bitcoin
10583 var bufferLen = this.pub.compressed ?
34 :
33
10584 var buffer = new Buffer(bufferLen)
10586 buffer.writeUInt8(network.wif,
0)
10587 this.d.toBuffer(
32).copy(buffer,
1)
10589 if (this.pub.compressed) {
10590 buffer.writeUInt8(
0x01,
33)
10593 return base58check.encode(buffer)
10597 ECKey.prototype.sign = function (hash) {
10598 return ecdsa.sign(ECKey.curve, hash, this.d)
10601 module.exports = ECKey
10603 }).call(this,require(
"buffer").Buffer)
10604 },{
"./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){
10605 (function (Buffer){
10606 var crypto = require('./crypto')
10607 var ecdsa = require('./ecdsa')
10608 var typeForce = require('typeforce')
10609 var networks = require('./networks')
10611 var Address = require('./address')
10613 var ecurve = require('ecurve')
10614 var secp256k1 = ecurve.getCurveByName('secp256k1')
10616 function ECPubKey (Q, compressed) {
10617 if (compressed === undefined) {
10621 typeForce('Point', Q)
10622 typeForce('Boolean', compressed)
10624 this.compressed = compressed
10629 ECPubKey.curve = secp256k1
10631 // Static constructors
10632 ECPubKey.fromBuffer = function (buffer) {
10633 var Q = ecurve.Point.decodeFrom(ECPubKey.curve, buffer)
10634 return new ECPubKey(Q, Q.compressed)
10637 ECPubKey.fromHex = function (hex) {
10638 return ECPubKey.fromBuffer(new Buffer(hex, 'hex'))
10642 ECPubKey.prototype.getAddress = function (network) {
10643 network = network || networks.bitcoin
10645 return new Address(crypto.hash160(this.toBuffer()), network.pubKeyHash)
10648 ECPubKey.prototype.verify = function (hash, signature) {
10649 return ecdsa.verify(ECPubKey.curve, hash, signature, this.Q)
10652 // Export functions
10653 ECPubKey.prototype.toBuffer = function () {
10654 return this.Q.getEncoded(this.compressed)
10657 ECPubKey.prototype.toHex = function () {
10658 return this.toBuffer().toString('hex')
10661 module.exports = ECPubKey
10663 }).call(this,require(
"buffer").Buffer)
10664 },{
"./address":
54,
"./crypto":
58,
"./ecdsa":
59,
"./networks":
66,
"buffer":
7,
"ecurve":
49,
"typeforce":
53}],
62:[function(require,module,exports){
10665 (function (Buffer){
10666 var assert = require('assert')
10667 var typeForce = require('typeforce')
10669 var BigInteger = require('bigi')
10671 function ECSignature (r, s) {
10672 typeForce('BigInteger', r)
10673 typeForce('BigInteger', s)
10679 ECSignature.parseCompact = function (buffer) {
10680 assert.equal(buffer.length,
65, 'Invalid signature length')
10681 var i = buffer.readUInt8(
0) -
27
10684 assert.equal(i, i &
7, 'Invalid signature parameter')
10685 var compressed = !!(i &
4)
10687 // Recovery param only
10690 var r = BigInteger.fromBuffer(buffer.slice(
1,
33))
10691 var s = BigInteger.fromBuffer(buffer.slice(
33))
10694 compressed: compressed,
10696 signature: new ECSignature(r, s)
10700 ECSignature.fromDER = function (buffer) {
10701 assert.equal(buffer.readUInt8(
0),
0x30, 'Not a DER sequence')
10702 assert.equal(buffer.readUInt8(
1), buffer.length -
2, 'Invalid sequence length')
10703 assert.equal(buffer.readUInt8(
2),
0x02, 'Expected a DER integer')
10705 var rLen = buffer.readUInt8(
3)
10706 assert(rLen
> 0, 'R length is zero')
10708 var offset =
4 + rLen
10709 assert.equal(buffer.readUInt8(offset),
0x02, 'Expected a DER integer (
2)')
10711 var sLen = buffer.readUInt8(offset +
1)
10712 assert(sLen
> 0, 'S length is zero')
10714 var rB = buffer.slice(
4, offset)
10715 var sB = buffer.slice(offset +
2)
10718 if (rLen
> 1 && rB.readUInt8(
0) ===
0x00) {
10719 assert(rB.readUInt8(
1) &
0x80, 'R value excessively padded')
10722 if (sLen
> 1 && sB.readUInt8(
0) ===
0x00) {
10723 assert(sB.readUInt8(
1) &
0x80, 'S value excessively padded')
10726 assert.equal(offset, buffer.length, 'Invalid DER encoding')
10727 var r = BigInteger.fromDERInteger(rB)
10728 var s = BigInteger.fromDERInteger(sB)
10730 assert(r.signum()
>=
0, 'R value is negative')
10731 assert(s.signum()
>=
0, 'S value is negative')
10733 return new ECSignature(r, s)
10736 // BIP62:
1 byte hashType flag (only
0x01,
0x02,
0x03,
0x81,
0x82 and
0x83 are allowed)
10737 ECSignature.parseScriptSignature = function (buffer) {
10738 var hashType = buffer.readUInt8(buffer.length -
1)
10739 var hashTypeMod = hashType & ~
0x80
10741 assert(hashTypeMod
> 0x00 && hashTypeMod <
0x04, 'Invalid hashType ' + hashType)
10744 signature: ECSignature.fromDER(buffer.slice(
0, -
1)),
10749 ECSignature.prototype.toCompact = function (i, compressed) {
10756 var buffer = new Buffer(
65)
10757 buffer.writeUInt8(i,
0)
10759 this.r.toBuffer(
32).copy(buffer,
1)
10760 this.s.toBuffer(
32).copy(buffer,
33)
10765 ECSignature.prototype.toDER = function () {
10766 var rBa = this.r.toDERInteger()
10767 var sBa = this.s.toDERInteger()
10772 sequence.push(
0x02, rBa.length)
10773 sequence = sequence.concat(rBa)
10776 sequence.push(
0x02, sBa.length)
10777 sequence = sequence.concat(sBa)
10780 sequence.unshift(
0x30, sequence.length)
10782 return new Buffer(sequence)
10785 ECSignature.prototype.toScriptSignature = function (hashType) {
10786 var hashTypeMod = hashType & ~
0x80
10787 assert(hashTypeMod
> 0x00 && hashTypeMod <
0x04, 'Invalid hashType ' + hashType)
10789 var hashTypeBuffer = new Buffer(
1)
10790 hashTypeBuffer.writeUInt8(hashType,
0)
10792 return Buffer.concat([this.toDER(), hashTypeBuffer])
10795 module.exports = ECSignature
10797 }).call(this,require(
"buffer").Buffer)
10798 },{
"assert":
5,
"bigi":
3,
"buffer":
7,
"typeforce":
53}],
63:[function(require,module,exports){
10799 (function (Buffer){
10800 var assert = require('assert')
10801 var base58check = require('bs58check')
10802 var bcrypto = require('./crypto')
10803 var createHmac = require('create-hmac')
10804 var typeForce = require('typeforce')
10805 var networks = require('./networks')
10807 var BigInteger = require('bigi')
10808 var ECKey = require('./eckey')
10809 var ECPubKey = require('./ecpubkey')
10811 var ecurve = require('ecurve')
10812 var curve = ecurve.getCurveByName('secp256k1')
10814 function findBIP32NetworkByVersion (version) {
10815 for (var name in networks) {
10816 var network = networks[name]
10818 if (version === network.bip32.private || version === network.bip32.public) {
10823 assert(false, 'Could not find network for ' + version.toString(
16))
10826 function HDNode (K, chainCode, network) {
10827 network = network || networks.bitcoin
10829 typeForce('Buffer', chainCode)
10831 assert.equal(chainCode.length,
32, 'Expected chainCode length of
32, got ' + chainCode.length)
10832 assert(network.bip32, 'Unknown BIP32 constants for network')
10834 this.chainCode = chainCode
10837 this.parentFingerprint =
0x00000000
10838 this.network = network
10840 if (K instanceof BigInteger) {
10841 this.privKey = new ECKey(K, true)
10842 this.pubKey = this.privKey.pub
10843 } else if (K instanceof ECKey) {
10844 assert(K.pub.compressed, 'ECKey must be compressed')
10846 this.pubKey = K.pub
10847 } else if (K instanceof ECPubKey) {
10848 assert(K.compressed, 'ECPubKey must be compressed')
10851 this.pubKey = new ECPubKey(K, true)
10855 HDNode.MASTER_SECRET = new Buffer('Bitcoin seed')
10856 HDNode.HIGHEST_BIT =
0x80000000
10859 HDNode.fromSeedBuffer = function (seed, network) {
10860 typeForce('Buffer', seed)
10862 assert(seed.length
>=
16, 'Seed should be at least
128 bits')
10863 assert(seed.length <=
64, 'Seed should be at most
512 bits')
10865 var I = createHmac('sha512', HDNode.MASTER_SECRET).update(seed).digest()
10866 var IL = I.slice(
0,
32)
10867 var IR = I.slice(
32)
10869 // In case IL is
0 or
>= n, the master key is invalid
10870 // This is handled by `new ECKey` in the HDNode constructor
10871 var pIL = BigInteger.fromBuffer(IL)
10873 return new HDNode(pIL, IR, network)
10876 HDNode.fromSeedHex = function (hex, network) {
10877 return HDNode.fromSeedBuffer(new Buffer(hex, 'hex'), network)
10880 HDNode.fromBase58 = function (string, network) {
10881 return HDNode.fromBuffer(base58check.decode(string), network, true)
10884 // FIXME: remove in
2.x.y
10885 HDNode.fromBuffer = function (buffer, network, __ignoreDeprecation) {
10886 if (!__ignoreDeprecation) {
10887 console.warn('HDNode.fromBuffer() is deprecated for removal in
2.x.y, use fromBase58 instead')
10890 assert.strictEqual(buffer.length, HDNode.LENGTH, 'Invalid buffer length')
10892 //
4 byte: version bytes
10893 var version = buffer.readUInt32BE(
0)
10896 assert(version === network.bip32.private || version === network.bip32.public, "Network doesn't match")
10900 network = findBIP32NetworkByVersion(version)
10903 //
1 byte: depth:
0x00 for master nodes,
0x01 for level-
1 descendants, ...
10904 var depth = buffer.readUInt8(
4)
10906 //
4 bytes: the fingerprint of the parent's key (
0x00000000 if master key)
10907 var parentFingerprint = buffer.readUInt32BE(
5)
10909 assert.strictEqual(parentFingerprint,
0x00000000, 'Invalid parent fingerprint')
10912 //
4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
10913 // This is encoded in MSB order. (
0x00000000 if master key)
10914 var index = buffer.readUInt32BE(
9)
10915 assert(depth
> 0 || index ===
0, 'Invalid index')
10917 //
32 bytes: the chain code
10918 var chainCode = buffer.slice(
13,
45)
10921 //
33 bytes: private key data (
0x00 + k)
10922 if (version === network.bip32.private) {
10923 assert.strictEqual(buffer.readUInt8(
45),
0x00, 'Invalid private key')
10924 data = buffer.slice(
46,
78)
10925 var d = BigInteger.fromBuffer(data)
10926 hd = new HDNode(d, chainCode, network)
10928 //
33 bytes: public key data (
0x02 + X or
0x03 + X)
10930 data = buffer.slice(
45,
78)
10931 var Q = ecurve.Point.decodeFrom(curve, data)
10932 assert.equal(Q.compressed, true, 'Invalid public key')
10934 // Verify that the X coordinate in the public point corresponds to a point on the curve.
10935 // If not, the extended public key is invalid.
10938 hd = new HDNode(Q, chainCode, network)
10943 hd.parentFingerprint = parentFingerprint
10948 // FIXME: remove in
2.x.y
10949 HDNode.fromHex = function (hex, network) {
10950 return HDNode.fromBuffer(new Buffer(hex, 'hex'), network)
10953 HDNode.prototype.getIdentifier = function () {
10954 return bcrypto.hash160(this.pubKey.toBuffer())
10957 HDNode.prototype.getFingerprint = function () {
10958 return this.getIdentifier().slice(
0,
4)
10961 HDNode.prototype.getAddress = function () {
10962 return this.pubKey.getAddress(this.network)
10965 HDNode.prototype.neutered = function () {
10966 var neutered = new HDNode(this.pubKey.Q, this.chainCode, this.network)
10967 neutered.depth = this.depth
10968 neutered.index = this.index
10969 neutered.parentFingerprint = this.parentFingerprint
10974 HDNode.prototype.toBase58 = function (isPrivate) {
10975 return base58check.encode(this.toBuffer(isPrivate, true))
10978 // FIXME: remove in
2.x.y
10979 HDNode.prototype.toBuffer = function (isPrivate, __ignoreDeprecation) {
10980 if (isPrivate === undefined) {
10981 isPrivate = !!this.privKey
10983 // FIXME: remove in
2.x.y
10985 console.warn('isPrivate flag is deprecated, please use the .neutered() method instead')
10988 if (!__ignoreDeprecation) {
10989 console.warn('HDNode.toBuffer() is deprecated for removal in
2.x.y, use toBase58 instead')
10993 var version = isPrivate ? this.network.bip32.private : this.network.bip32.public
10994 var buffer = new Buffer(HDNode.LENGTH)
10996 //
4 bytes: version bytes
10997 buffer.writeUInt32BE(version,
0)
11000 //
1 byte: depth:
0x00 for master nodes,
0x01 for level-
1 descendants, ....
11001 buffer.writeUInt8(this.depth,
4)
11003 //
4 bytes: the fingerprint of the parent's key (
0x00000000 if master key)
11004 buffer.writeUInt32BE(this.parentFingerprint,
5)
11006 //
4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
11007 // This is encoded in Big endian. (
0x00000000 if master key)
11008 buffer.writeUInt32BE(this.index,
9)
11010 //
32 bytes: the chain code
11011 this.chainCode.copy(buffer,
13)
11013 //
33 bytes: the public key or private key data
11015 // FIXME: remove in
2.x.y
11016 assert(this.privKey, 'Missing private key')
11018 //
0x00 + k for private keys
11019 buffer.writeUInt8(
0,
45)
11020 this.privKey.d.toBuffer(
32).copy(buffer,
46)
11022 // X9.62 encoding for public keys
11023 this.pubKey.toBuffer().copy(buffer,
45)
11029 // FIXME: remove in
2.x.y
11030 HDNode.prototype.toHex = function (isPrivate) {
11031 return this.toBuffer(isPrivate).toString('hex')
11034 // https://github.com/bitcoin/bips/blob/master/bip-
0032.mediawiki#child-key-derivation-ckd-functions
11035 HDNode.prototype.derive = function (index) {
11036 var isHardened = index
>= HDNode.HIGHEST_BIT
11037 var indexBuffer = new Buffer(
4)
11038 indexBuffer.writeUInt32BE(index,
0)
11044 assert(this.privKey, 'Could not derive hardened child key')
11046 // data =
0x00 || ser256(kpar) || ser32(index)
11047 data = Buffer.concat([
11048 this.privKey.d.toBuffer(
33),
11054 // data = serP(point(kpar)) || ser32(index)
11055 // = serP(Kpar) || ser32(index)
11056 data = Buffer.concat([
11057 this.pubKey.toBuffer(),
11062 var I = createHmac('sha512', this.chainCode).update(data).digest()
11063 var IL = I.slice(
0,
32)
11064 var IR = I.slice(
32)
11066 var pIL = BigInteger.fromBuffer(IL)
11068 // In case parse256(IL)
>= n, proceed with the next value for i
11069 if (pIL.compareTo(curve.n)
>=
0) {
11070 return this.derive(index +
1)
11073 // Private parent key -
> private child key
11075 if (this.privKey) {
11076 // ki = parse256(IL) + kpar (mod n)
11077 var ki = pIL.add(this.privKey.d).mod(curve.n)
11079 // In case ki ==
0, proceed with the next value for i
11080 if (ki.signum() ===
0) {
11081 return this.derive(index +
1)
11084 hd = new HDNode(ki, IR, this.network)
11086 // Public parent key -
> public child key
11088 // Ki = point(parse256(IL)) + Kpar
11090 var Ki = curve.G.multiply(pIL).add(this.pubKey.Q)
11092 // In case Ki is the point at infinity, proceed with the next value for i
11093 if (curve.isInfinity(Ki)) {
11094 return this.derive(index +
1)
11097 hd = new HDNode(Ki, IR, this.network)
11100 hd.depth = this.depth +
1
11102 hd.parentFingerprint = this.getFingerprint().readUInt32BE(
0)
11107 HDNode.prototype.deriveHardened = function (index) {
11108 // Only derives hardened private keys by default
11109 return this.derive(index + HDNode.HIGHEST_BIT)
11112 HDNode.prototype.toString = HDNode.prototype.toBase58
11114 module.exports = HDNode
11116 }).call(this,require("buffer").Buffer)
11117 },{"./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){
11119 Address: require('./address'),
11120 base58check: require('./base58check'),
11121 Block: require('./block'),
11122 bufferutils: require('./bufferutils'),
11123 crypto: require('./crypto'),
11124 ecdsa: require('./ecdsa'),
11125 ECKey: require('./eckey'),
11126 ECPubKey: require('./ecpubkey'),
11127 ECSignature: require('./ecsignature'),
11128 Message: require('./message'),
11129 opcodes: require('./opcodes'),
11130 HDNode: require('./hdnode'),
11131 Script: require('./script'),
11132 scripts: require('./scripts'),
11133 Transaction: require('./transaction'),
11134 TransactionBuilder: require('./transaction_builder'),
11135 networks: require('./networks'),
11136 Wallet: require('./wallet')
11139 },{"./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){
11140 (function (Buffer){
11141 var bufferutils = require('./bufferutils')
11142 var crypto = require('./crypto')
11143 var ecdsa = require('./ecdsa')
11144 var networks = require('./networks')
11146 var BigInteger = require('bigi')
11147 var ECPubKey = require('./ecpubkey')
11148 var ECSignature = require('./ecsignature')
11150 var ecurve = require('ecurve')
11151 var ecparams = ecurve.getCurveByName('secp256k1')
11153 function magicHash (message, network) {
11154 var magicPrefix = new Buffer(network.magicPrefix)
11155 var messageBuffer = new Buffer(message)
11156 var lengthBuffer = bufferutils.varIntBuffer(messageBuffer.length)
11158 var buffer = Buffer.concat([magicPrefix, lengthBuffer, messageBuffer])
11159 return crypto.hash256(buffer)
11162 function sign (privKey, message, network) {
11163 network = network || networks.bitcoin
11165 var hash = magicHash(message, network)
11166 var signature = privKey.sign(hash)
11167 var e = BigInteger.fromBuffer(hash)
11168 var i = ecdsa.calcPubKeyRecoveryParam(ecparams, e, signature, privKey.pub.Q)
11170 return signature.toCompact(i, privKey.pub.compressed)
11173 // TODO: network could be implied from address
11174 function verify (address, signature, message, network) {
11175 if (!Buffer.isBuffer(signature)) {
11176 signature = new Buffer(signature, 'base64')
11179 network = network || networks.bitcoin
11181 var hash = magicHash(message, network)
11182 var parsed = ECSignature.parseCompact(signature)
11183 var e = BigInteger.fromBuffer(hash)
11184 var Q = ecdsa.recoverPubKey(ecparams, e, parsed.signature, parsed.i)
11186 var pubKey = new ECPubKey(Q, parsed.compressed)
11187 return pubKey.getAddress(network).toString() === address.toString()
11191 magicHash: magicHash,
11196 }).call(this,require("buffer").Buffer)
11197 },{"./bufferutils":
57,"./crypto":
58,"./ecdsa":
59,"./ecpubkey":
61,"./ecsignature":
62,"./networks":
66,"bigi":
3,"buffer":
7,"ecurve":
49}],
66:[function(require,module,exports){
11198 // https://en.bitcoin.it/wiki/List_of_address_prefixes
11199 // Dogecoin BIP32 is a proposed standard: https://bitcointalk.org/index.php?topic=
409731
11203 magicPrefix: '\x18Bitcoin Signed Message:\n',
11205 public:
0x0488b21e,
11206 private:
0x0488ade4
11211 dustThreshold:
546, // https://github.com/bitcoin/bitcoin/blob/v0.9
.2/src/core.h#L151-L162
11212 feePerKb:
10000, // https://github.com/bitcoin/bitcoin/blob/v0.9
.2/src/main.cpp#L53
11213 estimateFee: estimateFee('bitcoin')
11216 magicPrefix: '\x18Bitcoin Signed Message:\n',
11218 public:
0x043587cf,
11219 private:
0x04358394
11224 dustThreshold:
546,
11226 estimateFee: estimateFee('testnet')
11229 magicPrefix: '\x19Litecoin Signed Message:\n',
11231 public:
0x019da462,
11232 private:
0x019d9cfe
11237 dustThreshold:
0, // https://github.com/litecoin-project/litecoin/blob/v0.8
.7.2/src/main.cpp#L360-L365
11238 dustSoftThreshold:
100000, // https://github.com/litecoin-project/litecoin/blob/v0.8
.7.2/src/main.h#L53
11239 feePerKb:
100000, // https://github.com/litecoin-project/litecoin/blob/v0.8
.7.2/src/main.cpp#L56
11240 estimateFee: estimateFee('litecoin')
11243 magicPrefix: '\x19Dogecoin Signed Message:\n',
11245 public:
0x02facafd,
11246 private:
0x02fac398
11251 dustThreshold:
0, // https://github.com/dogecoin/dogecoin/blob/v1.7
.1/src/core.h#L155-L160
11252 dustSoftThreshold:
100000000, // https://github.com/dogecoin/dogecoin/blob/v1.7
.1/src/main.h#L62
11253 feePerKb:
100000000, // https://github.com/dogecoin/dogecoin/blob/v1.7
.1/src/main.cpp#L58
11254 estimateFee: estimateFee('dogecoin')
11257 magicPrefix: '\x18Viacoin Signed Message:\n',
11259 public:
0x0488b21e,
11260 private:
0x0488ade4
11265 dustThreshold:
560,
11266 dustSoftThreshold:
100000,
11267 feePerKb:
100000, //
11268 estimateFee: estimateFee('viacoin')
11271 magicPrefix: '\x18Viacoin Signed Message:\n',
11273 public:
0x043587cf,
11274 private:
0x04358394
11279 dustThreshold:
560,
11280 dustSoftThreshold:
100000,
11282 estimateFee: estimateFee('viacointestnet')
11285 magicPrefix: '\x19Gamerscoin Signed Message:\n',
11287 public:
0x019da462,
11288 private:
0x019d9cfe
11293 dustThreshold:
0, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L358-L363
11294 dustSoftThreshold:
100000, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L51
11295 feePerKb:
100000, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L54
11296 estimateFee: estimateFee('gamerscoin')
11299 magicPrefix: '\x19Jumbucks Signed Message:\n',
11301 public:
0x037a689a,
11302 private:
0x037a6460
11308 dustSoftThreshold:
10000,
11310 estimateFee: estimateFee('jumbucks')
11313 magicPrefix: '\x18Zetacoin Signed Message:\n',
11315 public:
0x0488b21e,
11316 private:
0x0488ade4
11321 dustThreshold:
546, // https://github.com/zetacoin/zetacoin/blob/master/src/core.h#L159
11322 feePerKb:
10000, // https://github.com/zetacoin/zetacoin/blob/master/src/main.cpp#L54
11323 estimateFee: estimateFee('zetacoin')
11327 function estimateFee (type) {
11328 return function (tx) {
11329 var network = networks[type]
11330 var baseFee = network.feePerKb
11331 var byteSize = tx.toBuffer().length
11333 var fee = baseFee * Math.ceil(byteSize /
1000)
11334 if (network.dustSoftThreshold === undefined) return fee
11336 tx.outs.forEach(function (e) {
11337 if (e.value < network.dustSoftThreshold) {
11346 module.exports = networks
11348 },{}],
67:[function(require,module,exports){
11389 OP_TOALTSTACK:
107,
11390 OP_FROMALTSTACK:
108,
11422 OP_EQUALVERIFY:
136,
11447 OP_NUMEQUALVERIFY:
157,
11448 OP_NUMNOTEQUAL:
158,
11450 OP_GREATERTHAN:
160,
11451 OP_LESSTHANOREQUAL:
161,
11452 OP_GREATERTHANOREQUAL:
162,
11464 OP_CODESEPARATOR:
171,
11466 OP_CHECKSIGVERIFY:
173,
11467 OP_CHECKMULTISIG:
174,
11468 OP_CHECKMULTISIGVERIFY:
175,
11482 // template matching params
11483 OP_PUBKEYHASH:
253,
11485 OP_INVALIDOPCODE:
255
11488 },{}],
68:[function(require,module,exports){
11489 (function (Buffer){
11490 var assert = require('assert')
11491 var bufferutils = require('./bufferutils')
11492 var crypto = require('./crypto')
11493 var typeForce = require('typeforce')
11494 var opcodes = require('./opcodes')
11496 function Script (buffer, chunks) {
11497 typeForce('Buffer', buffer)
11498 typeForce('Array', chunks)
11500 this.buffer = buffer
11501 this.chunks = chunks
11504 Script.fromASM = function (asm) {
11505 var strChunks = asm.split(' ')
11506 var chunks = strChunks.map(function (strChunk) {
11508 if (strChunk in opcodes) {
11509 return opcodes[strChunk]
11513 return new Buffer(strChunk, 'hex')
11517 return Script.fromChunks(chunks)
11520 Script.fromBuffer = function (buffer) {
11524 while (i < buffer.length) {
11525 var opcode = buffer.readUInt8(i)
11528 if ((opcode
> opcodes.OP_0) && (opcode <= opcodes.OP_PUSHDATA4)) {
11529 var d = bufferutils.readPushDataInt(buffer, i)
11531 // did reading a pushDataInt fail? return non-chunked script
11532 if (d === null) return new Script(buffer, [])
11535 // attempt to read too much data?
11536 if (i + d.number
> buffer.length) return new Script(buffer, [])
11538 var data = buffer.slice(i, i + d.number)
11545 chunks.push(opcode)
11551 return new Script(buffer, chunks)
11554 Script.fromChunks = function (chunks) {
11555 typeForce('Array', chunks)
11557 var bufferSize = chunks.reduce(function (accum, chunk) {
11559 if (Buffer.isBuffer(chunk)) {
11560 return accum + bufferutils.pushDataSize(chunk.length) + chunk.length
11567 var buffer = new Buffer(bufferSize)
11570 chunks.forEach(function (chunk) {
11572 if (Buffer.isBuffer(chunk)) {
11573 offset += bufferutils.writePushDataInt(buffer, chunk.length, offset)
11575 chunk.copy(buffer, offset)
11576 offset += chunk.length
11580 buffer.writeUInt8(chunk, offset)
11585 assert.equal(offset, buffer.length, 'Could not decode chunks')
11586 return new Script(buffer, chunks)
11589 Script.fromHex = function (hex) {
11590 return Script.fromBuffer(new Buffer(hex, 'hex'))
11593 Script.EMPTY = Script.fromChunks([])
11595 Script.prototype.getHash = function () {
11596 return crypto.hash160(this.buffer)
11599 // FIXME: doesn't work for data chunks, maybe time to use buffertools.compare...
11600 Script.prototype.without = function (needle) {
11601 return Script.fromChunks(this.chunks.filter(function (op) {
11602 return op !== needle
11606 var reverseOps = []
11607 for (var op in opcodes) {
11608 var code = opcodes[op]
11609 reverseOps[code] = op
11612 Script.prototype.toASM = function () {
11613 return this.chunks.map(function (chunk) {
11615 if (Buffer.isBuffer(chunk)) {
11616 return chunk.toString('hex')
11620 return reverseOps[chunk]
11625 Script.prototype.toBuffer = function () {
11629 Script.prototype.toHex = function () {
11630 return this.toBuffer().toString('hex')
11633 module.exports = Script
11635 }).call(this,require("buffer").Buffer)
11636 },{"./bufferutils":
57,"./crypto":
58,"./opcodes":
67,"assert":
5,"buffer":
7,"typeforce":
53}],
69:[function(require,module,exports){
11637 (function (Buffer){
11638 var assert = require('assert')
11639 var ops = require('./opcodes')
11640 var typeForce = require('typeforce')
11642 var ecurve = require('ecurve')
11643 var curve = ecurve.getCurveByName('secp256k1')
11645 var ECSignature = require('./ecsignature')
11646 var Script = require('./script')
11648 function isCanonicalPubKey (buffer) {
11649 if (!Buffer.isBuffer(buffer)) return false
11652 ecurve.Point.decodeFrom(curve, buffer)
11654 if (!(e.message.match(/Invalid sequence (length|tag)/)))
11663 function isCanonicalSignature (buffer) {
11664 if (!Buffer.isBuffer(buffer)) return false
11667 ECSignature.parseScriptSignature(buffer)
11669 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/))) {
11679 function isPubKeyHashInput (script) {
11680 return script.chunks.length ===
2 &&
11681 isCanonicalSignature(script.chunks[
0]) &&
11682 isCanonicalPubKey(script.chunks[
1])
11685 function isPubKeyHashOutput (script) {
11686 return script.chunks.length ===
5 &&
11687 script.chunks[
0] === ops.OP_DUP &&
11688 script.chunks[
1] === ops.OP_HASH160 &&
11689 Buffer.isBuffer(script.chunks[
2]) &&
11690 script.chunks[
2].length ===
20 &&
11691 script.chunks[
3] === ops.OP_EQUALVERIFY &&
11692 script.chunks[
4] === ops.OP_CHECKSIG
11695 function isPubKeyInput (script) {
11696 return script.chunks.length ===
1 &&
11697 isCanonicalSignature(script.chunks[
0])
11700 function isPubKeyOutput (script) {
11701 return script.chunks.length ===
2 &&
11702 isCanonicalPubKey(script.chunks[
0]) &&
11703 script.chunks[
1] === ops.OP_CHECKSIG
11706 function isScriptHashInput (script, allowIncomplete) {
11707 if (script.chunks.length <
2) return false
11709 var lastChunk = script.chunks[script.chunks.length -
1]
11710 if (!Buffer.isBuffer(lastChunk)) return false
11712 var scriptSig = Script.fromChunks(script.chunks.slice(
0, -
1))
11713 var redeemScript = Script.fromBuffer(lastChunk)
11715 // is redeemScript a valid script?
11716 if (redeemScript.chunks.length ===
0) return false
11718 return classifyInput(scriptSig, allowIncomplete) === classifyOutput(redeemScript)
11721 function isScriptHashOutput (script) {
11722 return script.chunks.length ===
3 &&
11723 script.chunks[
0] === ops.OP_HASH160 &&
11724 Buffer.isBuffer(script.chunks[
1]) &&
11725 script.chunks[
1].length ===
20 &&
11726 script.chunks[
2] === ops.OP_EQUAL
11729 // allowIncomplete is to account for combining signatures
11730 // See https://github.com/bitcoin/bitcoin/blob/f425050546644a36b0b8e0eb2f6934a3e0f6f80f/src/script/sign.cpp#L195-L197
11731 function isMultisigInput (script, allowIncomplete) {
11732 if (script.chunks.length <
2) return false
11733 if (script.chunks[
0] !== ops.OP_0) return false
11735 if (allowIncomplete) {
11736 return script.chunks.slice(
1).every(function (chunk) {
11737 return chunk === ops.OP_0 || isCanonicalSignature(chunk)
11741 return script.chunks.slice(
1).every(isCanonicalSignature)
11744 function isMultisigOutput (script) {
11745 if (script.chunks.length <
4) return false
11746 if (script.chunks[script.chunks.length -
1] !== ops.OP_CHECKMULTISIG) return false
11748 var mOp = script.chunks[
0]
11749 if (mOp === ops.OP_0) return false
11750 if (mOp < ops.OP_1) return false
11751 if (mOp
> ops.OP_16) return false
11753 var nOp = script.chunks[script.chunks.length -
2]
11754 if (nOp === ops.OP_0) return false
11755 if (nOp < ops.OP_1) return false
11756 if (nOp
> ops.OP_16) return false
11758 var m = mOp - (ops.OP_1 -
1)
11759 var n = nOp - (ops.OP_1 -
1)
11760 if (n < m) return false
11762 var pubKeys = script.chunks.slice(
1, -
2)
11763 if (n < pubKeys.length) return false
11765 return pubKeys.every(isCanonicalPubKey)
11768 function isNullDataOutput (script) {
11769 return script.chunks[
0] === ops.OP_RETURN
11772 function classifyOutput (script) {
11773 typeForce('Script', script)
11775 if (isPubKeyHashOutput(script)) {
11776 return 'pubkeyhash'
11777 } else if (isScriptHashOutput(script)) {
11778 return 'scripthash'
11779 } else if (isMultisigOutput(script)) {
11781 } else if (isPubKeyOutput(script)) {
11783 } else if (isNullDataOutput(script)) {
11787 return 'nonstandard'
11790 function classifyInput (script, allowIncomplete) {
11791 typeForce('Script', script)
11793 if (isPubKeyHashInput(script)) {
11794 return 'pubkeyhash'
11795 } else if (isMultisigInput(script, allowIncomplete)) {
11797 } else if (isScriptHashInput(script, allowIncomplete)) {
11798 return 'scripthash'
11799 } else if (isPubKeyInput(script)) {
11803 return 'nonstandard'
11806 // Standard Script Templates
11807 // {pubKey} OP_CHECKSIG
11808 function pubKeyOutput (pubKey) {
11809 return Script.fromChunks([
11815 // OP_DUP OP_HASH160 {pubKeyHash} OP_EQUALVERIFY OP_CHECKSIG
11816 function pubKeyHashOutput (hash) {
11817 typeForce('Buffer', hash)
11819 return Script.fromChunks([
11823 ops.OP_EQUALVERIFY,
11828 // OP_HASH160 {scriptHash} OP_EQUAL
11829 function scriptHashOutput (hash) {
11830 typeForce('Buffer', hash)
11832 return Script.fromChunks([
11839 // m [pubKeys ...] n OP_CHECKMULTISIG
11840 function multisigOutput (m, pubKeys) {
11841 typeForce(['ECPubKey'], pubKeys)
11843 assert(pubKeys.length
>= m, 'Not enough pubKeys provided')
11845 var pubKeyBuffers = pubKeys.map(function (pubKey) {
11846 return pubKey.toBuffer()
11848 var n = pubKeys.length
11850 return Script.fromChunks([].concat(
11851 (ops.OP_1 -
1) + m,
11853 (ops.OP_1 -
1) + n,
11854 ops.OP_CHECKMULTISIG
11859 function pubKeyInput (signature) {
11860 typeForce('Buffer', signature)
11862 return Script.fromChunks([signature])
11865 // {signature} {pubKey}
11866 function pubKeyHashInput (signature, pubKey) {
11867 typeForce('Buffer', signature)
11869 return Script.fromChunks([signature, pubKey.toBuffer()])
11872 //
<scriptSig> {serialized scriptPubKey script}
11873 function scriptHashInput (scriptSig, scriptPubKey) {
11874 return Script.fromChunks([].concat(
11876 scriptPubKey.toBuffer()
11880 // OP_0 [signatures ...]
11881 function multisigInput (signatures, scriptPubKey) {
11882 if (scriptPubKey) {
11883 assert(isMultisigOutput(scriptPubKey))
11885 var mOp = scriptPubKey.chunks[
0]
11886 var nOp = scriptPubKey.chunks[scriptPubKey.chunks.length -
2]
11887 var m = mOp - (ops.OP_1 -
1)
11888 var n = nOp - (ops.OP_1 -
1)
11890 assert(signatures.length
>= m, 'Not enough signatures provided')
11891 assert(signatures.length <= n, 'Too many signatures provided')
11894 return Script.fromChunks([].concat(ops.OP_0, signatures))
11897 function nullDataOutput (data) {
11898 return Script.fromChunks([ops.OP_RETURN, data])
11902 isCanonicalPubKey: isCanonicalPubKey,
11903 isCanonicalSignature: isCanonicalSignature,
11904 isPubKeyHashInput: isPubKeyHashInput,
11905 isPubKeyHashOutput: isPubKeyHashOutput,
11906 isPubKeyInput: isPubKeyInput,
11907 isPubKeyOutput: isPubKeyOutput,
11908 isScriptHashInput: isScriptHashInput,
11909 isScriptHashOutput: isScriptHashOutput,
11910 isMultisigInput: isMultisigInput,
11911 isMultisigOutput: isMultisigOutput,
11912 isNullDataOutput: isNullDataOutput,
11913 classifyOutput: classifyOutput,
11914 classifyInput: classifyInput,
11915 pubKeyOutput: pubKeyOutput,
11916 pubKeyHashOutput: pubKeyHashOutput,
11917 scriptHashOutput: scriptHashOutput,
11918 multisigOutput: multisigOutput,
11919 pubKeyInput: pubKeyInput,
11920 pubKeyHashInput: pubKeyHashInput,
11921 scriptHashInput: scriptHashInput,
11922 multisigInput: multisigInput,
11923 dataOutput: function (data) {
11924 console.warn('dataOutput is deprecated, use nullDataOutput by
2.0.0')
11925 return nullDataOutput(data)
11927 nullDataOutput: nullDataOutput
11930 }).call(this,require("buffer").Buffer)
11931 },{"./ecsignature":
62,"./opcodes":
67,"./script":
68,"assert":
5,"buffer":
7,"ecurve":
49,"typeforce":
53}],
70:[function(require,module,exports){
11932 (function (Buffer){
11933 var assert = require('assert')
11934 var bufferutils = require('./bufferutils')
11935 var crypto = require('./crypto')
11936 var typeForce = require('typeforce')
11937 var opcodes = require('./opcodes')
11938 var scripts = require('./scripts')
11940 var Address = require('./address')
11941 var ECSignature = require('./ecsignature')
11942 var Script = require('./script')
11944 function Transaction () {
11951 Transaction.DEFAULT_SEQUENCE =
0xffffffff
11952 Transaction.SIGHASH_ALL =
0x01
11953 Transaction.SIGHASH_NONE =
0x02
11954 Transaction.SIGHASH_SINGLE =
0x03
11955 Transaction.SIGHASH_ANYONECANPAY =
0x80
11957 Transaction.fromBuffer = function (buffer, __disableAssert) {
11959 function readSlice (n) {
11961 return buffer.slice(offset - n, offset)
11964 function readUInt32 () {
11965 var i = buffer.readUInt32LE(offset)
11970 function readUInt64 () {
11971 var i = bufferutils.readUInt64LE(buffer, offset)
11976 function readVarInt () {
11977 var vi = bufferutils.readVarInt(buffer, offset)
11982 function readScript () {
11983 return Script.fromBuffer(readSlice(readVarInt()))
11986 function readGenerationScript () {
11987 return new Script(readSlice(readVarInt()), [])
11990 var tx = new Transaction()
11991 tx.version = readUInt32()
11993 var vinLen = readVarInt()
11994 for (var i =
0; i < vinLen; ++i) {
11995 var hash = readSlice(
32)
11997 if (Transaction.isCoinbaseHash(hash)) {
12000 index: readUInt32(),
12001 script: readGenerationScript(),
12002 sequence: readUInt32()
12007 index: readUInt32(),
12008 script: readScript(),
12009 sequence: readUInt32()
12014 var voutLen = readVarInt()
12015 for (i =
0; i < voutLen; ++i) {
12017 value: readUInt64(),
12018 script: readScript()
12022 tx.locktime = readUInt32()
12024 if (!__disableAssert) {
12025 assert.equal(offset, buffer.length, 'Transaction has unexpected data')
12031 Transaction.fromHex = function (hex) {
12032 return Transaction.fromBuffer(new Buffer(hex, 'hex'))
12035 Transaction.isCoinbaseHash = function (buffer) {
12036 return Array.prototype.every.call(buffer, function (x) {
12042 * Create a new txIn.
12044 * Can be called with any of:
12046 * - A transaction and an index
12047 * - A transaction hash and an index
12049 * Note that this method does not sign the created input.
12051 Transaction.prototype.addInput = function (hash, index, sequence, script) {
12052 if (sequence === undefined || sequence === null) {
12053 sequence = Transaction.DEFAULT_SEQUENCE
12056 script = script || Script.EMPTY
12058 if (typeof hash === 'string') {
12059 // TxId hex is big-endian, we need little-endian
12060 hash = bufferutils.reverse(new Buffer(hash, 'hex'))
12061 } else if (hash instanceof Transaction) {
12062 hash = hash.getHash()
12065 typeForce('Buffer', hash)
12066 typeForce('Number', index)
12067 typeForce('Number', sequence)
12068 typeForce('Script', script)
12070 assert.equal(hash.length,
32, 'Expected hash length of
32, got ' + hash.length)
12072 // Add the input and return the input's index
12073 return (this.ins.push({
12082 * Create a new txOut.
12084 * Can be called with:
12086 * - A base58 address string and a value
12087 * - An Address object and a value
12088 * - A scriptPubKey Script and a value
12090 Transaction.prototype.addOutput = function (scriptPubKey, value) {
12091 // Attempt to get a valid address if it's a base58 address string
12092 if (typeof scriptPubKey === 'string') {
12093 scriptPubKey = Address.fromBase58Check(scriptPubKey)
12096 // Attempt to get a valid script if it's an Address object
12097 if (scriptPubKey instanceof Address) {
12098 scriptPubKey = scriptPubKey.toOutputScript()
12101 typeForce('Script', scriptPubKey)
12102 typeForce('Number', value)
12104 // Add the output and return the output's index
12105 return (this.outs.push({
12106 script: scriptPubKey,
12111 Transaction.prototype.clone = function () {
12112 var newTx = new Transaction()
12113 newTx.version = this.version
12114 newTx.locktime = this.locktime
12116 newTx.ins = this.ins.map(function (txIn) {
12120 script: txIn.script,
12121 sequence: txIn.sequence
12125 newTx.outs = this.outs.map(function (txOut) {
12127 script: txOut.script,
12136 * Hash transaction for signing a specific input.
12138 * Bitcoin uses a different hash for each signed transaction input. This
12139 * method copies the transaction, makes the necessary changes based on the
12140 * hashType, serializes and finally hashes the result. This hash can then be
12141 * used to sign the transaction input in question.
12143 Transaction.prototype.hashForSignature = function (inIndex, prevOutScript, hashType) {
12144 // FIXME: remove in
2.x.y
12145 if (arguments[
0] instanceof Script) {
12146 console.warn('hashForSignature(prevOutScript, inIndex, ...) has been deprecated. Use hashForSignature(inIndex, prevOutScript, ...)')
12148 // swap the arguments (must be stored in tmp, arguments is special)
12149 var tmp = arguments[
0]
12150 inIndex = arguments[
1]
12151 prevOutScript = tmp
12154 typeForce('Number', inIndex)
12155 typeForce('Script', prevOutScript)
12156 typeForce('Number', hashType)
12158 assert(inIndex
>=
0, 'Invalid vin index')
12159 assert(inIndex < this.ins.length, 'Invalid vin index')
12161 var txTmp = this.clone()
12162 var hashScript = prevOutScript.without(opcodes.OP_CODESEPARATOR)
12164 // Blank out other inputs' signatures
12165 txTmp.ins.forEach(function (txIn) {
12166 txIn.script = Script.EMPTY
12168 txTmp.ins[inIndex].script = hashScript
12170 var hashTypeModifier = hashType &
0x1f
12172 if (hashTypeModifier === Transaction.SIGHASH_NONE) {
12173 assert(false, 'SIGHASH_NONE not yet supported')
12174 } else if (hashTypeModifier === Transaction.SIGHASH_SINGLE) {
12175 assert(false, 'SIGHASH_SINGLE not yet supported')
12178 if (hashType & Transaction.SIGHASH_ANYONECANPAY) {
12179 assert(false, 'SIGHASH_ANYONECANPAY not yet supported')
12182 var hashTypeBuffer = new Buffer(
4)
12183 hashTypeBuffer.writeInt32LE(hashType,
0)
12185 var buffer = Buffer.concat([txTmp.toBuffer(), hashTypeBuffer])
12186 return crypto.hash256(buffer)
12189 Transaction.prototype.getHash = function () {
12190 return crypto.hash256(this.toBuffer())
12193 Transaction.prototype.getId = function () {
12194 // TxHash is little-endian, we need big-endian
12195 return bufferutils.reverse(this.getHash()).toString('hex')
12198 Transaction.prototype.toBuffer = function () {
12199 function scriptSize (script) {
12200 var length = script.buffer.length
12202 return bufferutils.varIntSize(length) + length
12205 var buffer = new Buffer(
12207 bufferutils.varIntSize(this.ins.length) +
12208 bufferutils.varIntSize(this.outs.length) +
12209 this.ins.reduce(function (sum, input) { return sum +
40 + scriptSize(input.script) },
0) +
12210 this.outs.reduce(function (sum, output) { return sum +
8 + scriptSize(output.script) },
0)
12214 function writeSlice (slice) {
12215 slice.copy(buffer, offset)
12216 offset += slice.length
12219 function writeUInt32 (i) {
12220 buffer.writeUInt32LE(i, offset)
12224 function writeUInt64 (i) {
12225 bufferutils.writeUInt64LE(buffer, i, offset)
12229 function writeVarInt (i) {
12230 var n = bufferutils.writeVarInt(buffer, i, offset)
12234 writeUInt32(this.version)
12235 writeVarInt(this.ins.length)
12237 this.ins.forEach(function (txIn) {
12238 writeSlice(txIn.hash)
12239 writeUInt32(txIn.index)
12240 writeVarInt(txIn.script.buffer.length)
12241 writeSlice(txIn.script.buffer)
12242 writeUInt32(txIn.sequence)
12245 writeVarInt(this.outs.length)
12246 this.outs.forEach(function (txOut) {
12247 writeUInt64(txOut.value)
12248 writeVarInt(txOut.script.buffer.length)
12249 writeSlice(txOut.script.buffer)
12252 writeUInt32(this.locktime)
12257 Transaction.prototype.toHex = function () {
12258 return this.toBuffer().toString('hex')
12261 Transaction.prototype.setInputScript = function (index, script) {
12262 typeForce('Number', index)
12263 typeForce('Script', script)
12265 this.ins[index].script = script
12268 // FIXME: remove in
2.x.y
12269 Transaction.prototype.sign = function (index, privKey, hashType) {
12270 console.warn('Transaction.prototype.sign is deprecated. Use TransactionBuilder instead.')
12272 var prevOutScript = privKey.pub.getAddress().toOutputScript()
12273 var signature = this.signInput(index, prevOutScript, privKey, hashType)
12275 var scriptSig = scripts.pubKeyHashInput(signature, privKey.pub)
12276 this.setInputScript(index, scriptSig)
12279 // FIXME: remove in
2.x.y
12280 Transaction.prototype.signInput = function (index, prevOutScript, privKey, hashType) {
12281 console.warn('Transaction.prototype.signInput is deprecated. Use TransactionBuilder instead.')
12283 hashType = hashType || Transaction.SIGHASH_ALL
12285 var hash = this.hashForSignature(index, prevOutScript, hashType)
12286 var signature = privKey.sign(hash)
12288 return signature.toScriptSignature(hashType)
12291 // FIXME: remove in
2.x.y
12292 Transaction.prototype.validateInput = function (index, prevOutScript, pubKey, buffer) {
12293 console.warn('Transaction.prototype.validateInput is deprecated. Use TransactionBuilder instead.')
12295 var parsed = ECSignature.parseScriptSignature(buffer)
12296 var hash = this.hashForSignature(index, prevOutScript, parsed.hashType)
12298 return pubKey.verify(hash, parsed.signature)
12301 module.exports = Transaction
12303 }).call(this,require("buffer").Buffer)
12304 },{"./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){
12305 (function (Buffer){
12306 var assert = require('assert')
12307 var ops = require('./opcodes')
12308 var scripts = require('./scripts')
12310 var ECPubKey = require('./ecpubkey')
12311 var ECSignature = require('./ecsignature')
12312 var Script = require('./script')
12313 var Transaction = require('./transaction')
12315 function extractInput (txIn) {
12317 var scriptSig = txIn.script
12319 var prevOutType = scripts.classifyInput(scriptSig, true)
12322 // Re-classify if scriptHash
12323 if (prevOutType === 'scripthash') {
12324 redeemScript = Script.fromBuffer(scriptSig.chunks.slice(-
1)[
0])
12325 prevOutScript = scripts.scriptHashOutput(redeemScript.getHash())
12327 scriptSig = Script.fromChunks(scriptSig.chunks.slice(
0, -
1))
12328 scriptType = scripts.classifyInput(scriptSig, true)
12330 scriptType = prevOutType
12333 // Extract hashType, pubKeys and signatures
12334 var hashType, parsed, pubKeys, signatures
12336 switch (scriptType) {
12337 case 'pubkeyhash': {
12338 parsed = ECSignature.parseScriptSignature(scriptSig.chunks[
0])
12339 hashType = parsed.hashType
12340 pubKeys = [ECPubKey.fromBuffer(scriptSig.chunks[
1])]
12341 signatures = [parsed.signature]
12342 prevOutScript = pubKeys[
0].getAddress().toOutputScript()
12348 parsed = ECSignature.parseScriptSignature(scriptSig.chunks[
0])
12349 hashType = parsed.hashType
12350 signatures = [parsed.signature]
12352 if (redeemScript) {
12353 pubKeys = [ECPubKey.fromBuffer(redeemScript.chunks[
0])]
12360 signatures = scriptSig.chunks.slice(
1).map(function (chunk) {
12361 if (chunk === ops.OP_0) return chunk
12363 var parsed = ECSignature.parseScriptSignature(chunk)
12364 hashType = parsed.hashType
12366 return parsed.signature
12369 if (redeemScript) {
12370 pubKeys = redeemScript.chunks.slice(
1, -
2).map(ECPubKey.fromBuffer)
12378 hashType: hashType,
12379 prevOutScript: prevOutScript,
12380 prevOutType: prevOutType,
12382 redeemScript: redeemScript,
12383 scriptType: scriptType,
12384 signatures: signatures
12388 function TransactionBuilder () {
12389 this.prevTxMap = {}
12390 this.prevOutScripts = {}
12391 this.prevOutTypes = {}
12394 this.tx = new Transaction()
12397 TransactionBuilder.fromTransaction = function (transaction) {
12398 var txb = new TransactionBuilder()
12400 // Copy other transaction fields
12401 txb.tx.version = transaction.version
12402 txb.tx.locktime = transaction.locktime
12404 // Extract/add inputs
12405 transaction.ins.forEach(function (txIn) {
12406 txb.addInput(txIn.hash, txIn.index, txIn.sequence)
12409 // Extract/add outputs
12410 transaction.outs.forEach(function (txOut) {
12411 txb.addOutput(txOut.script, txOut.value)
12414 // Extract/add signatures
12415 txb.inputs = transaction.ins.map(function (txIn) {
12416 // TODO: remove me after testcase added
12417 assert(!Transaction.isCoinbaseHash(txIn.hash), 'coinbase inputs not supported')
12419 // Ignore empty scripts
12420 if (txIn.script.buffer.length ===
0) return {}
12422 return extractInput(txIn)
12428 TransactionBuilder.prototype.addInput = function (prevTx, index, sequence, prevOutScript) {
12432 if (typeof prevTx === 'string') {
12433 prevOutHash = new Buffer(prevTx, 'hex')
12435 // TxId hex is big-endian, we want little-endian hash
12436 Array.prototype.reverse.call(prevOutHash)
12439 } else if (prevTx instanceof Transaction) {
12440 prevOutHash = prevTx.getHash()
12441 prevOutScript = prevTx.outs[index].script
12445 prevOutHash = prevTx
12449 if (prevOutScript) {
12450 var prevOutType = scripts.classifyOutput(prevOutScript)
12452 // if we can, extract pubKey information
12453 switch (prevOutType) {
12455 input.pubKeys = prevOutScript.chunks.slice(
1, -
2).map(ECPubKey.fromBuffer)
12460 input.pubKeys = prevOutScript.chunks.slice(
0,
1).map(ECPubKey.fromBuffer)
12465 if (prevOutType !== 'scripthash') {
12466 input.scriptType = prevOutType
12469 input.prevOutScript = prevOutScript
12470 input.prevOutType = prevOutType
12473 assert(this.inputs.every(function (input2) {
12474 if (input2.hashType === undefined) return true
12476 return input2.hashType & Transaction.SIGHASH_ANYONECANPAY
12477 }), 'No, this would invalidate signatures')
12479 var prevOut = prevOutHash.toString('hex') + ':' + index
12480 assert(!(prevOut in this.prevTxMap), 'Transaction is already an input')
12482 var vin = this.tx.addInput(prevOutHash, index, sequence)
12483 this.inputs[vin] = input
12484 this.prevTxMap[prevOut] = vin
12489 TransactionBuilder.prototype.addOutput = function (scriptPubKey, value) {
12490 assert(this.inputs.every(function (input) {
12491 if (input.hashType === undefined) return true
12493 return (input.hashType &
0x1f) === Transaction.SIGHASH_SINGLE
12494 }), 'No, this would invalidate signatures')
12496 return this.tx.addOutput(scriptPubKey, value)
12499 TransactionBuilder.prototype.build = function () {
12500 return this.__build(false)
12502 TransactionBuilder.prototype.buildIncomplete = function () {
12503 return this.__build(true)
12506 var canSignTypes = {
12507 'pubkeyhash': true,
12512 TransactionBuilder.prototype.__build = function (allowIncomplete) {
12513 if (!allowIncomplete) {
12514 assert(this.tx.ins.length
> 0, 'Transaction has no inputs')
12515 assert(this.tx.outs.length
> 0, 'Transaction has no outputs')
12518 var tx = this.tx.clone()
12520 // Create script signatures from signature meta-data
12521 this.inputs.forEach(function (input, index) {
12522 var scriptType = input.scriptType
12525 if (!allowIncomplete) {
12526 assert(!!scriptType, 'Transaction is not complete')
12527 assert(scriptType in canSignTypes, scriptType + ' not supported')
12528 assert(input.signatures, 'Transaction is missing signatures')
12531 if (input.signatures) {
12532 switch (scriptType) {
12533 case 'pubkeyhash': {
12534 var pkhSignature = input.signatures[
0].toScriptSignature(input.hashType)
12535 scriptSig = scripts.pubKeyHashInput(pkhSignature, input.pubKeys[
0])
12540 // Array.prototype.map is sparse-compatible
12541 var msSignatures = input.signatures.map(function (signature) {
12542 return signature && signature.toScriptSignature(input.hashType)
12545 // fill in blanks with OP_0
12546 if (allowIncomplete) {
12547 for (var i =
0; i < msSignatures.length; ++i) {
12548 if (msSignatures[i]) continue
12550 msSignatures[i] = ops.OP_0
12553 // Array.prototype.filter returns non-sparse array
12554 msSignatures = msSignatures.filter(function (x) { return x })
12557 var redeemScript = allowIncomplete ? undefined : input.redeemScript
12558 scriptSig = scripts.multisigInput(msSignatures, redeemScript)
12563 var pkSignature = input.signatures[
0].toScriptSignature(input.hashType)
12564 scriptSig = scripts.pubKeyInput(pkSignature)
12570 // did we build a scriptSig?
12572 // wrap as scriptHash if necessary
12573 if (input.prevOutType === 'scripthash') {
12574 scriptSig = scripts.scriptHashInput(scriptSig, input.redeemScript)
12577 tx.setInputScript(index, scriptSig)
12584 TransactionBuilder.prototype.sign = function (index, privKey, redeemScript, hashType) {
12585 assert(index in this.inputs, 'No input at index: ' + index)
12586 hashType = hashType || Transaction.SIGHASH_ALL
12588 var input = this.inputs[index]
12589 var canSign = input.hashType &&
12590 input.prevOutScript &&
12591 input.prevOutType &&
12593 input.scriptType &&
12596 // are we almost ready to sign?
12598 // if redeemScript was provided, enforce consistency
12599 if (redeemScript) {
12600 assert.deepEqual(input.redeemScript, redeemScript, 'Inconsistent redeemScript')
12603 assert.equal(input.hashType, hashType, 'Inconsistent hashType')
12607 // must be pay-to-scriptHash?
12608 if (redeemScript) {
12609 // if we have a prevOutScript, enforce scriptHash equality to the redeemScript
12610 if (input.prevOutScript) {
12611 assert.equal(input.prevOutType, 'scripthash', 'PrevOutScript must be P2SH')
12613 var scriptHash = input.prevOutScript.chunks[
1]
12614 assert.deepEqual(scriptHash, redeemScript.getHash(), 'RedeemScript does not match ' + scriptHash.toString('hex'))
12617 var scriptType = scripts.classifyOutput(redeemScript)
12618 assert(scriptType in canSignTypes, 'RedeemScript not supported (' + scriptType + ')')
12621 switch (scriptType) {
12623 pubKeys = redeemScript.chunks.slice(
1, -
2).map(ECPubKey.fromBuffer)
12627 case 'pubkeyhash': {
12628 var pkh1 = redeemScript.chunks[
2]
12629 var pkh2 = privKey.pub.getAddress().hash
12631 assert.deepEqual(pkh1, pkh2, 'privateKey cannot sign for this input')
12632 pubKeys = [privKey.pub]
12637 pubKeys = redeemScript.chunks.slice(
0,
1).map(ECPubKey.fromBuffer)
12642 if (!input.prevOutScript) {
12643 input.prevOutScript = scripts.scriptHashOutput(redeemScript.getHash())
12644 input.prevOutType = 'scripthash'
12647 input.pubKeys = pubKeys
12648 input.redeemScript = redeemScript
12649 input.scriptType = scriptType
12651 // cannot be pay-to-scriptHash
12653 assert.notEqual(input.prevOutType, 'scripthash', 'PrevOutScript is P2SH, missing redeemScript')
12655 // can we otherwise sign this?
12656 if (input.scriptType) {
12657 assert(input.pubKeys, input.scriptType + ' not supported')
12659 // we know nothin' Jon Snow, assume pubKeyHash
12661 input.prevOutScript = privKey.pub.getAddress().toOutputScript()
12662 input.prevOutType = 'pubkeyhash'
12663 input.pubKeys = [privKey.pub]
12664 input.scriptType = input.prevOutType
12668 input.hashType = hashType
12669 input.signatures = input.signatures || []
12672 var signatureScript = input.redeemScript || input.prevOutScript
12673 var signatureHash = this.tx.hashForSignature(index, signatureScript, hashType)
12675 // enforce signature order matches public keys
12676 if (input.scriptType === 'multisig' && input.redeemScript && input.signatures.length !== input.pubKeys.length) {
12677 // maintain a local copy of unmatched signatures
12678 var unmatched = input.signatures.slice()
12680 input.signatures = input.pubKeys.map(function (pubKey) {
12683 // check for any matching signatures
12684 unmatched.some(function (signature, i) {
12685 if (!pubKey.verify(signatureHash, signature)) return false
12688 // remove matched signature from unmatched
12689 unmatched.splice(i,
1)
12694 return match || undefined
12698 // enforce in order signing of public keys
12699 assert(input.pubKeys.some(function (pubKey, i) {
12700 if (!privKey.pub.Q.equals(pubKey.Q)) return false
12702 assert(!input.signatures[i], 'Signature already exists')
12703 var signature = privKey.sign(signatureHash)
12704 input.signatures[i] = signature
12707 }, this), 'privateKey cannot sign for this input')
12710 module.exports = TransactionBuilder
12712 }).call(this,require(
"buffer").Buffer)
12713 },{
"./ecpubkey":
61,
"./ecsignature":
62,
"./opcodes":
67,
"./script":
68,
"./scripts":
69,
"./transaction":
70,
"assert":
5,
"buffer":
7}],
72:[function(require,module,exports){
12714 (function (Buffer){
12715 var assert = require('assert')
12716 var bufferutils = require('./bufferutils')
12717 var typeForce = require('typeforce')
12718 var networks = require('./networks')
12719 var randomBytes = require('randombytes')
12721 var Address = require('./address')
12722 var HDNode = require('./hdnode')
12723 var TransactionBuilder = require('./transaction_builder')
12724 var Script = require('./script')
12726 function Wallet (seed, network) {
12727 console.warn('Wallet is deprecated and will be removed in
2.0.0, see #
296')
12729 seed = seed || randomBytes(
32)
12730 network = network || networks.bitcoin
12732 // Stored in a closure to make accidental serialization less likely
12733 var masterKey = HDNode.fromSeedBuffer(seed, network)
12735 // HD first-level child derivation method should be hardened
12736 // See https://bitcointalk.org/index.php?topic=
405179.msg4415254#msg4415254
12737 var accountZero = masterKey.deriveHardened(
0)
12738 var externalAccount = accountZero.derive(
0)
12739 var internalAccount = accountZero.derive(
1)
12741 this.addresses = []
12742 this.changeAddresses = []
12743 this.network = network
12746 // FIXME: remove in
2.0.0
12747 this.unspentMap = {}
12749 // FIXME: remove in
2.0.0
12751 this.newMasterKey = function (seed) {
12752 console.warn('newMasterKey is deprecated, please make a new Wallet instance instead')
12754 seed = seed || randomBytes(
32)
12755 masterKey = HDNode.fromSeedBuffer(seed, network)
12757 accountZero = masterKey.deriveHardened(
0)
12758 externalAccount = accountZero.derive(
0)
12759 internalAccount = accountZero.derive(
1)
12762 me.changeAddresses = []
12768 this.getMasterKey = function () {
12771 this.getAccountZero = function () {
12774 this.getExternalAccount = function () {
12775 return externalAccount
12777 this.getInternalAccount = function () {
12778 return internalAccount
12782 Wallet.prototype.createTransaction = function (to, value, options) {
12783 // FIXME: remove in
2.0.0
12784 if (typeof options !== 'object') {
12785 if (options !== undefined) {
12786 console.warn('Non options object parameters are deprecated, use options object instead')
12789 fixedFee: arguments[
2],
12790 changeAddress: arguments[
3]
12795 options = options || {}
12797 assert(value
> this.network.dustThreshold, value + ' must be above dust threshold (' + this.network.dustThreshold + ' Satoshis)')
12799 var changeAddress = options.changeAddress
12800 var fixedFee = options.fixedFee
12801 var minConf = options.minConf === undefined ?
0 : options.minConf // FIXME: change minConf:
1 by default in
2.0.0
12803 // filter by minConf, then pending and sort by descending value
12804 var unspents = this.unspents.filter(function (unspent) {
12805 return unspent.confirmations
>= minConf
12806 }).filter(function (unspent) {
12807 return !unspent.pending
12808 }).sort(function (o1, o2) {
12809 return o2.value - o1.value
12814 var subTotal = value
12816 var txb = new TransactionBuilder()
12817 txb.addOutput(to, value)
12819 for (var i =
0; i < unspents.length; ++i) {
12820 var unspent = unspents[i]
12821 addresses.push(unspent.address)
12823 txb.addInput(unspent.txHash, unspent.index)
12825 var fee = fixedFee === undefined ? estimatePaddedFee(txb.buildIncomplete(), this.network) : fixedFee
12827 accum += unspent.value
12828 subTotal = value + fee
12830 if (accum
>= subTotal) {
12831 var change = accum - subTotal
12833 if (change
> this.network.dustThreshold) {
12834 txb.addOutput(changeAddress || this.getChangeAddress(), change)
12841 assert(accum
>= subTotal, 'Not enough funds (incl. fee): ' + accum + ' < ' + subTotal)
12843 return this.signWith(txb, addresses).build()
12846 // FIXME: remove in
2.0.0
12847 Wallet.prototype.processPendingTx = function (tx) {
12848 this.__processTx(tx, true)
12851 // FIXME: remove in
2.0.0
12852 Wallet.prototype.processConfirmedTx = function (tx) {
12853 this.__processTx(tx, false)
12856 // FIXME: remove in
2.0.0
12857 Wallet.prototype.__processTx = function (tx, isPending) {
12858 console.warn('processTransaction is considered harmful, see issue #
260 for more information')
12860 var txId = tx.getId()
12861 var txHash = tx.getHash()
12863 tx.outs.forEach(function (txOut, i) {
12867 address = Address.fromOutputScript(txOut.script, this.network).toString()
12869 if (!(e.message.match(/has no matching Address/)))
12873 var myAddresses = this.addresses.concat(this.changeAddresses)
12874 if (myAddresses.indexOf(address)
> -
1) {
12875 var lookup = txId + ':' + i
12876 if (lookup in this.unspentMap) return
12878 // its unique, add it
12881 confirmations:
0, // no way to determine this without more information
12885 value: txOut.value,
12889 this.unspentMap[lookup] = unspent
12890 this.unspents.push(unspent)
12894 tx.ins.forEach(function (txIn) {
12895 // copy and convert to big-endian hex
12896 var txInId = bufferutils.reverse(txIn.hash).toString('hex')
12898 var lookup = txInId + ':' + txIn.index
12899 if (!(lookup in this.unspentMap)) return
12901 var unspent = this.unspentMap[lookup]
12904 unspent.pending = true
12905 unspent.spent = true
12907 delete this.unspentMap[lookup]
12909 this.unspents = this.unspents.filter(function (unspent2) {
12910 return unspent !== unspent2
12916 Wallet.prototype.generateAddress = function () {
12917 var k = this.addresses.length
12918 var address = this.getExternalAccount().derive(k).getAddress()
12920 this.addresses.push(address.toString())
12922 return this.getReceiveAddress()
12925 Wallet.prototype.generateChangeAddress = function () {
12926 var k = this.changeAddresses.length
12927 var address = this.getInternalAccount().derive(k).getAddress()
12929 this.changeAddresses.push(address.toString())
12931 return this.getChangeAddress()
12934 Wallet.prototype.getAddress = function () {
12935 if (this.addresses.length ===
0) {
12936 this.generateAddress()
12939 return this.addresses[this.addresses.length -
1]
12942 Wallet.prototype.getBalance = function (minConf) {
12943 minConf = minConf ||
0
12945 return this.unspents.filter(function (unspent) {
12946 return unspent.confirmations
>= minConf
12948 // FIXME: remove spent filter in
2.0.0
12949 }).filter(function (unspent) {
12950 return !unspent.spent
12951 }).reduce(function (accum, unspent) {
12952 return accum + unspent.value
12956 Wallet.prototype.getChangeAddress = function () {
12957 if (this.changeAddresses.length ===
0) {
12958 this.generateChangeAddress()
12961 return this.changeAddresses[this.changeAddresses.length -
1]
12964 Wallet.prototype.getInternalPrivateKey = function (index) {
12965 return this.getInternalAccount().derive(index).privKey
12968 Wallet.prototype.getPrivateKey = function (index) {
12969 return this.getExternalAccount().derive(index).privKey
12972 Wallet.prototype.getPrivateKeyForAddress = function (address) {
12975 if ((index = this.addresses.indexOf(address))
> -
1) {
12976 return this.getPrivateKey(index)
12979 if ((index = this.changeAddresses.indexOf(address))
> -
1) {
12980 return this.getInternalPrivateKey(index)
12983 assert(false, 'Unknown address. Make sure the address is from the keychain and has been generated')
12986 Wallet.prototype.getUnspentOutputs = function (minConf) {
12987 minConf = minConf ||
0
12989 return this.unspents.filter(function (unspent) {
12990 return unspent.confirmations
>= minConf
12992 // FIXME: remove spent filter in
2.0.0
12993 }).filter(function (unspent) {
12994 return !unspent.spent
12995 }).map(function (unspent) {
12997 address: unspent.address,
12998 confirmations: unspent.confirmations,
12999 index: unspent.index,
13000 txId: unspent.txId,
13001 value: unspent.value,
13003 // FIXME: remove in
2.0.0
13004 hash: unspent.txId,
13005 pending: unspent.pending
13010 Wallet.prototype.setUnspentOutputs = function (unspents) {
13011 this.unspentMap = {}
13012 this.unspents = unspents.map(function (unspent) {
13013 // FIXME: remove unspent.hash in
2.0.0
13014 var txId = unspent.txId || unspent.hash
13015 var index = unspent.index
13017 // FIXME: remove in
2.0.0
13018 if (unspent.hash !== undefined) {
13019 console.warn('unspent.hash is deprecated, use unspent.txId instead')
13022 // FIXME: remove in
2.0.0
13023 if (index === undefined) {
13024 console.warn('unspent.outputIndex is deprecated, use unspent.index instead')
13025 index = unspent.outputIndex
13028 typeForce('String', txId)
13029 typeForce('Number', index)
13030 typeForce('Number', unspent.value)
13032 assert.equal(txId.length,
64, 'Expected valid txId, got ' + txId)
13033 assert.doesNotThrow(function () {
13034 Address.fromBase58Check(unspent.address)
13035 }, 'Expected Base58 Address, got ' + unspent.address)
13036 assert(isFinite(index), 'Expected finite index, got ' + index)
13038 // FIXME: remove branch in
2.0.0
13039 if (unspent.confirmations !== undefined) {
13040 typeForce('Number', unspent.confirmations)
13043 var txHash = bufferutils.reverse(new Buffer(txId, 'hex'))
13046 address: unspent.address,
13047 confirmations: unspent.confirmations ||
0,
13051 value: unspent.value,
13053 // FIXME: remove in
2.0.0
13054 pending: unspent.pending || false
13057 // FIXME: remove in
2.0.0
13058 this.unspentMap[txId + ':' + index] = unspent
13064 Wallet.prototype.signWith = function (tx, addresses) {
13065 addresses.forEach(function (address, i) {
13066 var privKey = this.getPrivateKeyForAddress(address)
13068 tx.sign(i, privKey)
13074 function estimatePaddedFee (tx, network) {
13075 var tmpTx = tx.clone()
13076 tmpTx.addOutput(Script.EMPTY, network.dustSoftThreshold ||
0)
13078 return network.estimateFee(tmpTx)
13081 // FIXME:
1.0.0 shims, remove in
2.0.0
13082 Wallet.prototype.getReceiveAddress = Wallet.prototype.getAddress
13083 Wallet.prototype.createTx = Wallet.prototype.createTransaction
13085 module.exports = Wallet
13087 }).call(this,require("buffer").Buffer)
13088 },{"./address":
54,"./bufferutils":
57,"./hdnode":
63,"./networks":
66,"./script":
68,"./transaction_builder":
71,"assert":
5,"buffer":
7,"randombytes":
52,"typeforce":
53}]},{},[
64])(
64)
13090 <script>// Select components from sjcl to suit the crypto operations bip39 requires.
13094 /** @fileOverview Javascript cryptography implementation.
13096 * Crush to remove comments, shorten variable names and
13097 * generally reduce transmission size.
13099 * @author Emily Stark
13100 * @author Mike Hamburg
13101 * @author Dan Boneh
13105 /*jslint indent:
2, bitwise: false, nomen: false, plusplus: false, white: false, regexp: false */
13106 /*global document, window, escape, unescape, module, require, Uint32Array */
13108 /** @namespace The Stanford Javascript Crypto Library, top-level namespace. */
13110 /** @namespace Symmetric ciphers. */
13113 /** @namespace Hash functions. Right now only SHA256 is implemented. */
13116 /** @namespace Key exchange functions. Right now only SRP is implemented. */
13119 /** @namespace Block cipher modes of operation. */
13122 /** @namespace Miscellaneous. HMAC and PBKDF2. */
13126 * @namespace Bit array encoders and decoders.
13129 * The members of this namespace are functions which translate between
13130 * SJCL's bitArrays and other objects (usually strings). Because it
13131 * isn't always clear which direction is encoding and which is decoding,
13132 * the method names are "fromBits" and "toBits".
13136 /** @namespace Exceptions. */
13138 /** @constructor Ciphertext is corrupt. */
13139 corrupt: function(message) {
13140 this.toString = function() { return "CORRUPT: "+this.message; };
13141 this.message = message;
13144 /** @constructor Invalid parameter. */
13145 invalid: function(message) {
13146 this.toString = function() { return "INVALID: "+this.message; };
13147 this.message = message;
13150 /** @constructor Bug or missing feature in SJCL. @constructor */
13151 bug: function(message) {
13152 this.toString = function() { return "BUG: "+this.message; };
13153 this.message = message;
13156 /** @constructor Something isn't ready. */
13157 notReady: function(message) {
13158 this.toString = function() { return "NOT READY: "+this.message; };
13159 this.message = message;
13164 if(typeof module !== 'undefined' && module.exports){
13165 module.exports = sjcl;
13167 if (typeof define === "function") {
13168 define([], function () {
13176 /** @fileOverview Arrays of bits, encoded as arrays of Numbers.
13178 * @author Emily Stark
13179 * @author Mike Hamburg
13180 * @author Dan Boneh
13183 /** @namespace Arrays of bits, encoded as arrays of Numbers.
13187 * These objects are the currency accepted by SJCL's crypto functions.
13191 * Most of our crypto primitives operate on arrays of
4-byte words internally,
13192 * but many of them can take arguments that are not a multiple of
4 bytes.
13193 * This library encodes arrays of bits (whose size need not be a multiple of
8
13194 * bits) as arrays of
32-bit words. The bits are packed, big-endian, into an
13195 * array of words,
32 bits at a time. Since the words are double-precision
13196 * floating point numbers, they fit some extra data. We use this (in a private,
13197 * possibly-changing manner) to encode the number of bits actually present
13198 * in the last word of the array.
13202 * Because bitwise ops clear this out-of-band data, these arrays can be passed
13203 * to ciphers like AES which want arrays of words.
13208 * Array slices in units of bits.
13209 * @param {bitArray} a The array to slice.
13210 * @param {Number} bstart The offset to the start of the slice, in bits.
13211 * @param {Number} bend The offset to the end of the slice, in bits. If this is undefined,
13212 * slice until the end of the array.
13213 * @return {bitArray} The requested slice.
13215 bitSlice: function (a, bstart, bend) {
13216 a = sjcl.bitArray._shiftRight(a.slice(bstart/
32),
32 - (bstart &
31)).slice(
1);
13217 return (bend === undefined) ? a : sjcl.bitArray.clamp(a, bend-bstart);
13221 * Extract a number packed into a bit array.
13222 * @param {bitArray} a The array to slice.
13223 * @param {Number} bstart The offset to the start of the slice, in bits.
13224 * @param {Number} length The length of the number to extract.
13225 * @return {Number} The requested slice.
13227 extract: function(a, bstart, blength) {
13228 // FIXME: this Math.floor is not necessary at all, but for some reason
13229 // seems to suppress a bug in the Chromium JIT.
13230 var x, sh = Math.floor((-bstart-blength) &
31);
13231 if ((bstart + blength -
1 ^ bstart) & -
32) {
13232 // it crosses a boundary
13233 x = (a[bstart/
32|
0] << (
32 - sh)) ^ (a[bstart/
32+
1|
0]
>>> sh);
13235 // within a single word
13236 x = a[bstart/
32|
0]
>>> sh;
13238 return x & ((
1<
<blength) -
1);
13242 * Concatenate two bit arrays.
13243 * @param {bitArray} a1 The first array.
13244 * @param {bitArray} a2 The second array.
13245 * @return {bitArray} The concatenation of a1 and a2.
13247 concat: function (a1, a2) {
13248 if (a1.length ===
0 || a2.length ===
0) {
13249 return a1.concat(a2);
13252 var last = a1[a1.length-
1], shift = sjcl.bitArray.getPartial(last);
13253 if (shift ===
32) {
13254 return a1.concat(a2);
13256 return sjcl.bitArray._shiftRight(a2, shift, last|
0, a1.slice(
0,a1.length-
1));
13261 * Find the length of an array of bits.
13262 * @param {bitArray} a The array.
13263 * @return {Number} The length of a, in bits.
13265 bitLength: function (a) {
13266 var l = a.length, x;
13267 if (l ===
0) { return
0; }
13269 return (l-
1) *
32 + sjcl.bitArray.getPartial(x);
13273 * Truncate an array.
13274 * @param {bitArray} a The array.
13275 * @param {Number} len The length to truncate to, in bits.
13276 * @return {bitArray} A new array, truncated to len bits.
13278 clamp: function (a, len) {
13279 if (a.length *
32 < len) { return a; }
13280 a = a.slice(
0, Math.ceil(len /
32));
13283 if (l
> 0 && len) {
13284 a[l-
1] = sjcl.bitArray.partial(len, a[l-
1] &
0x80000000 >> (len-
1),
1);
13290 * Make a partial word for a bit array.
13291 * @param {Number} len The number of bits in the word.
13292 * @param {Number} x The bits.
13293 * @param {Number} [
0] _end Pass
1 if x has already been shifted to the high side.
13294 * @return {Number} The partial word.
13296 partial: function (len, x, _end) {
13297 if (len ===
32) { return x; }
13298 return (_end ? x|
0 : x << (
32-len)) + len *
0x10000000000;
13302 * Get the number of bits used by a partial word.
13303 * @param {Number} x The partial word.
13304 * @return {Number} The number of bits used by the partial word.
13306 getPartial: function (x) {
13307 return Math.round(x/
0x10000000000) ||
32;
13311 * Compare two arrays for equality in a predictable amount of time.
13312 * @param {bitArray} a The first array.
13313 * @param {bitArray} b The second array.
13314 * @return {boolean} true if a == b; false otherwise.
13316 equal: function (a, b) {
13317 if (sjcl.bitArray.bitLength(a) !== sjcl.bitArray.bitLength(b)) {
13321 for (i=
0; i
<a.length; i++) {
13327 /** Shift an array right.
13328 * @param {bitArray} a The array to shift.
13329 * @param {Number} shift The number of bits to shift.
13330 * @param {Number} [carry=
0] A byte to carry in
13331 * @param {bitArray} [out=[]] An array to prepend to the output.
13334 _shiftRight: function (a, shift, carry, out) {
13335 var i, last2=
0, shift2;
13336 if (out === undefined) { out = []; }
13338 for (; shift
>=
32; shift -=
32) {
13343 return out.concat(a);
13346 for (i=
0; i
<a.length; i++) {
13347 out.push(carry | a[i]
>>>shift);
13348 carry = a[i] << (
32-shift);
13350 last2 = a.length ? a[a.length-
1] :
0;
13351 shift2 = sjcl.bitArray.getPartial(last2);
13352 out.push(sjcl.bitArray.partial(shift+shift2 &
31, (shift + shift2
> 32) ? carry : out.pop(),
1));
13356 /** xor a block of
4 words together.
13359 _xor4: function(x,y) {
13360 return [x[
0]^y[
0],x[
1]^y[
1],x[
2]^y[
2],x[
3]^y[
3]];
13363 /** byteswap a word array inplace.
13364 * (does not handle partial words)
13365 * @param {sjcl.bitArray} a word array
13366 * @return {sjcl.bitArray} byteswapped array
13368 byteswapM: function(a) {
13369 var i, v, m =
0xff00;
13370 for (i =
0; i < a.length; ++i) {
13372 a[i] = (v
>>> 24) | ((v
>>> 8) & m) | ((v & m) <<
8) | (v <<
24);
13379 //// codecString.js
13381 /** @fileOverview Bit array codec implementations.
13383 * @author Emily Stark
13384 * @author Mike Hamburg
13385 * @author Dan Boneh
13388 /** @namespace UTF-
8 strings */
13389 sjcl.codec.utf8String = {
13390 /** Convert from a bitArray to a UTF-
8 string. */
13391 fromBits: function (arr) {
13392 var out =
"", bl = sjcl.bitArray.bitLength(arr), i, tmp;
13393 for (i=
0; i
<bl/
8; i++) {
13397 out += String.fromCharCode(tmp
>>> 24);
13400 return decodeURIComponent(escape(out));
13403 /** Convert from a UTF-
8 string to a bitArray. */
13404 toBits: function (str) {
13405 str = unescape(encodeURIComponent(str));
13406 var out = [], i, tmp=
0;
13407 for (i=
0; i
<str.length; i++) {
13408 tmp = tmp <<
8 | str.charCodeAt(i);
13415 out.push(sjcl.bitArray.partial(
8*(i&
3), tmp));
13424 /** @fileOverview Bit array codec implementations.
13426 * @author Emily Stark
13427 * @author Mike Hamburg
13428 * @author Dan Boneh
13431 /** @namespace Hexadecimal */
13433 /** Convert from a bitArray to a hex string. */
13434 fromBits: function (arr) {
13436 for (i=
0; i
<arr.length; i++) {
13437 out += ((arr[i]|
0)+
0xF00000000000).toString(
16).substr(
4);
13439 return out.substr(
0, sjcl.bitArray.bitLength(arr)/
4);//.replace(/(.{
8})/g,
"$1 ");
13441 /** Convert from a hex string to a bitArray. */
13442 toBits: function (str) {
13443 var i, out=[], len;
13444 str = str.replace(/\s|
0x/g,
"");
13446 str = str +
"00000000";
13447 for (i=
0; i
<str.length; i+=
8) {
13448 out.push(parseInt(str.substr(i,
8),
16)^
0);
13450 return sjcl.bitArray.clamp(out, len*
4);
13457 /** @fileOverview Javascript SHA-
512 implementation.
13459 * This implementation was written for CryptoJS by Jeff Mott and adapted for
13460 * SJCL by Stefan Thomas.
13462 * CryptoJS (c)
2009–
2012 by Jeff Mott. All rights reserved.
13463 * Released with New BSD License
13465 * @author Emily Stark
13466 * @author Mike Hamburg
13467 * @author Dan Boneh
13468 * @author Jeff Mott
13469 * @author Stefan Thomas
13473 * Context for a SHA-
512 operation in progress.
13475 * @class Secure Hash Algorithm,
512 bits.
13477 sjcl.hash.sha512 = function (hash) {
13478 if (!this._key[
0]) { this._precompute(); }
13480 this._h = hash._h.slice(
0);
13481 this._buffer = hash._buffer.slice(
0);
13482 this._length = hash._length;
13489 * Hash a string or an array of words.
13491 * @param {bitArray|String} data the data to hash.
13492 * @return {bitArray} The hash value, an array of
16 big-endian words.
13494 sjcl.hash.sha512.hash = function (data) {
13495 return (new sjcl.hash.sha512()).update(data).finalize();
13498 sjcl.hash.sha512.prototype = {
13500 * The hash's block size, in bits.
13506 * Reset the hash state.
13509 reset:function () {
13510 this._h = this._init.slice(
0);
13517 * Input several words to the hash.
13518 * @param {bitArray|String} data the data to hash.
13521 update: function (data) {
13522 if (typeof data ===
"string") {
13523 data = sjcl.codec.utf8String.toBits(data);
13525 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
13527 nl = this._length = ol + sjcl.bitArray.bitLength(data);
13528 for (i =
1024+ol & -
1024; i <= nl; i+=
1024) {
13529 this._block(b.splice(
0,
32));
13535 * Complete hashing and output the hash value.
13536 * @return {bitArray} The hash value, an array of
16 big-endian words.
13538 finalize:function () {
13539 var i, b = this._buffer, h = this._h;
13541 // Round out and push the buffer
13542 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(
1,
1)]);
13544 // Round out the buffer to a multiple of
32 words, less the
4 length words.
13545 for (i = b.length +
4; i &
31; i++) {
13549 // append the length
13552 b.push(Math.floor(this._length /
0x100000000));
13553 b.push(this._length |
0);
13556 this._block(b.splice(
0,
32));
13564 * The SHA-
512 initialization vector, to be precomputed.
13570 * Least significant
24 bits of SHA512 initialization values.
13572 * Javascript only has
53 bits of precision, so we compute the
40 most
13573 * significant bits and add the remaining
24 bits as constants.
13577 _initr: [
0xbcc908,
0xcaa73b,
0x94f82b,
0x1d36f1,
0xe682d1,
0x3e6c1f,
0x41bd6b,
0x7e2179 ],
13581 [
0x6a09e667,
0xf3bcc908,
0xbb67ae85,
0x84caa73b,
0x3c6ef372,
0xfe94f82b,
0xa54ff53a,
0x5f1d36f1,
13582 0x510e527f,
0xade682d1,
0x9b05688c,
0x2b3e6c1f,
0x1f83d9ab,
0xfb41bd6b,
0x5be0cd19,
0x137e2179],
13586 * The SHA-
512 hash key, to be precomputed.
13592 * Least significant
24 bits of SHA512 key values.
13596 [
0x28ae22,
0xef65cd,
0x4d3b2f,
0x89dbbc,
0x48b538,
0x05d019,
0x194f9b,
0x6d8118,
13597 0x030242,
0x706fbe,
0xe4b28c,
0xffb4e2,
0x7b896f,
0x1696b1,
0xc71235,
0x692694,
13598 0xf14ad2,
0x4f25e3,
0x8cd5b5,
0xac9c65,
0x2b0275,
0xa6e483,
0x41fbd4,
0x1153b5,
13599 0x66dfab,
0xb43210,
0xfb213f,
0xef0ee4,
0xa88fc2,
0x0aa725,
0x03826f,
0x0e6e70,
13600 0xd22ffc,
0x26c926,
0xc42aed,
0x95b3df,
0xaf63de,
0x77b2a8,
0xedaee6,
0x82353b,
13601 0xf10364,
0x423001,
0xf89791,
0x54be30,
0xef5218,
0x65a910,
0x71202a,
0xbbd1b8,
13602 0xd2d0c8,
0x41ab53,
0x8eeb99,
0x9b48a8,
0xc95a63,
0x418acb,
0x63e373,
0xb2b8a3,
13603 0xefb2fc,
0x172f60,
0xf0ab72,
0x6439ec,
0x631e28,
0x82bde9,
0xc67915,
0x72532b,
13604 0x26619c,
0xc0c207,
0xe0eb1e,
0x6ed178,
0x176fba,
0xc898a6,
0xf90dae,
0x1c471b,
13605 0x047d84,
0xc72493,
0xc9bebc,
0x100d4c,
0x3e42b6,
0x657e2a,
0xd6faec,
0x475817],
13609 [
0x428a2f98,
0xd728ae22,
0x71374491,
0x23ef65cd,
0xb5c0fbcf,
0xec4d3b2f,
0xe9b5dba5,
0x8189dbbc,
13610 0x3956c25b,
0xf348b538,
0x59f111f1,
0xb605d019,
0x923f82a4,
0xaf194f9b,
0xab1c5ed5,
0xda6d8118,
13611 0xd807aa98,
0xa3030242,
0x12835b01,
0x45706fbe,
0x243185be,
0x4ee4b28c,
0x550c7dc3,
0xd5ffb4e2,
13612 0x72be5d74,
0xf27b896f,
0x80deb1fe,
0x3b1696b1,
0x9bdc06a7,
0x25c71235,
0xc19bf174,
0xcf692694,
13613 0xe49b69c1,
0x9ef14ad2,
0xefbe4786,
0x384f25e3,
0x0fc19dc6,
0x8b8cd5b5,
0x240ca1cc,
0x77ac9c65,
13614 0x2de92c6f,
0x592b0275,
0x4a7484aa,
0x6ea6e483,
0x5cb0a9dc,
0xbd41fbd4,
0x76f988da,
0x831153b5,
13615 0x983e5152,
0xee66dfab,
0xa831c66d,
0x2db43210,
0xb00327c8,
0x98fb213f,
0xbf597fc7,
0xbeef0ee4,
13616 0xc6e00bf3,
0x3da88fc2,
0xd5a79147,
0x930aa725,
0x06ca6351,
0xe003826f,
0x14292967,
0x0a0e6e70,
13617 0x27b70a85,
0x46d22ffc,
0x2e1b2138,
0x5c26c926,
0x4d2c6dfc,
0x5ac42aed,
0x53380d13,
0x9d95b3df,
13618 0x650a7354,
0x8baf63de,
0x766a0abb,
0x3c77b2a8,
0x81c2c92e,
0x47edaee6,
0x92722c85,
0x1482353b,
13619 0xa2bfe8a1,
0x4cf10364,
0xa81a664b,
0xbc423001,
0xc24b8b70,
0xd0f89791,
0xc76c51a3,
0x0654be30,
13620 0xd192e819,
0xd6ef5218,
0xd6990624,
0x5565a910,
0xf40e3585,
0x5771202a,
0x106aa070,
0x32bbd1b8,
13621 0x19a4c116,
0xb8d2d0c8,
0x1e376c08,
0x5141ab53,
0x2748774c,
0xdf8eeb99,
0x34b0bcb5,
0xe19b48a8,
13622 0x391c0cb3,
0xc5c95a63,
0x4ed8aa4a,
0xe3418acb,
0x5b9cca4f,
0x7763e373,
0x682e6ff3,
0xd6b2b8a3,
13623 0x748f82ee,
0x5defb2fc,
0x78a5636f,
0x43172f60,
0x84c87814,
0xa1f0ab72,
0x8cc70208,
0x1a6439ec,
13624 0x90befffa,
0x23631e28,
0xa4506ceb,
0xde82bde9,
0xbef9a3f7,
0xb2c67915,
0xc67178f2,
0xe372532b,
13625 0xca273ece,
0xea26619c,
0xd186b8c7,
0x21c0c207,
0xeada7dd6,
0xcde0eb1e,
0xf57d4f7f,
0xee6ed178,
13626 0x06f067aa,
0x72176fba,
0x0a637dc5,
0xa2c898a6,
0x113f9804,
0xbef90dae,
0x1b710b35,
0x131c471b,
13627 0x28db77f5,
0x23047d84,
0x32caab7b,
0x40c72493,
0x3c9ebe0a,
0x15c9bebc,
0x431d67c4,
0x9c100d4c,
13628 0x4cc5d4be,
0xcb3e42b6,
0x597f299c,
0xfc657e2a,
0x5fcb6fab,
0x3ad6faec,
0x6c44198c,
0x4a475817],
13632 * Function to precompute _init and _key.
13635 _precompute: function () {
13636 // XXX: This code is for precomputing the SHA256 constants, change for
13637 // SHA512 and re-enable.
13638 var i =
0, prime =
2, factor;
13640 function frac(x) { return (x-Math.floor(x)) *
0x100000000 |
0; }
13641 function frac2(x) { return (x-Math.floor(x)) *
0x10000000000 &
0xff; }
13643 outer: for (; i
<80; prime++) {
13644 for (factor=
2; factor*factor <= prime; factor++) {
13645 if (prime % factor ===
0) {
13652 this._init[i*
2] = frac(Math.pow(prime,
1/
2));
13653 this._init[i*
2+
1] = (frac2(Math.pow(prime,
1/
2)) <<
24) | this._initr[i];
13655 this._key[i*
2] = frac(Math.pow(prime,
1/
3));
13656 this._key[i*
2+
1] = (frac2(Math.pow(prime,
1/
3)) <<
24) | this._keyr[i];
13662 * Perform one cycle of SHA-
512.
13663 * @param {bitArray} words one block of words.
13666 _block:function (words) {
13668 w = words.slice(
0),
13671 h0h = h[
0], h0l = h[
1], h1h = h[
2], h1l = h[
3],
13672 h2h = h[
4], h2l = h[
5], h3h = h[
6], h3l = h[
7],
13673 h4h = h[
8], h4l = h[
9], h5h = h[
10], h5l = h[
11],
13674 h6h = h[
12], h6l = h[
13], h7h = h[
14], h7l = h[
15];
13676 // Working variables
13677 var ah = h0h, al = h0l, bh = h1h, bl = h1l,
13678 ch = h2h, cl = h2l, dh = h3h, dl = h3l,
13679 eh = h4h, el = h4l, fh = h5h, fl = h5l,
13680 gh = h6h, gl = h6l, hh = h7h, hl = h7l;
13682 for (i=
0; i
<80; i++) {
13683 // load up the input word for this round
13686 wrl = w[i *
2 +
1];
13689 var gamma0xh = w[(i-
15) *
2];
13690 var gamma0xl = w[(i-
15) *
2 +
1];
13692 ((gamma0xl <<
31) | (gamma0xh
>>> 1)) ^
13693 ((gamma0xl <<
24) | (gamma0xh
>>> 8)) ^
13696 ((gamma0xh <<
31) | (gamma0xl
>>> 1)) ^
13697 ((gamma0xh <<
24) | (gamma0xl
>>> 8)) ^
13698 ((gamma0xh <<
25) | (gamma0xl
>>> 7));
13701 var gamma1xh = w[(i-
2) *
2];
13702 var gamma1xl = w[(i-
2) *
2 +
1];
13704 ((gamma1xl <<
13) | (gamma1xh
>>> 19)) ^
13705 ((gamma1xh <<
3) | (gamma1xl
>>> 29)) ^
13708 ((gamma1xh <<
13) | (gamma1xl
>>> 19)) ^
13709 ((gamma1xl <<
3) | (gamma1xh
>>> 29)) ^
13710 ((gamma1xh <<
26) | (gamma1xl
>>> 6));
13713 var wr7h = w[(i-
7) *
2];
13714 var wr7l = w[(i-
7) *
2 +
1];
13716 var wr16h = w[(i-
16) *
2];
13717 var wr16l = w[(i-
16) *
2 +
1];
13719 // W(round) = gamma0 + W(round -
7) + gamma1 + W(round -
16)
13720 wrl = gamma0l + wr7l;
13721 wrh = gamma0h + wr7h + ((wrl
>>> 0) < (gamma0l
>>> 0) ?
1 :
0);
13723 wrh += gamma1h + ((wrl
>>> 0) < (gamma1l
>>> 0) ?
1 :
0);
13725 wrh += wr16h + ((wrl
>>> 0) < (wr16l
>>> 0) ?
1 :
0);
13729 w[i*
2 +
1] = wrl |=
0;
13732 var chh = (eh & fh) ^ (~eh & gh);
13733 var chl = (el & fl) ^ (~el & gl);
13736 var majh = (ah & bh) ^ (ah & ch) ^ (bh & ch);
13737 var majl = (al & bl) ^ (al & cl) ^ (bl & cl);
13740 var sigma0h = ((al <<
4) | (ah
>>> 28)) ^ ((ah <<
30) | (al
>>> 2)) ^ ((ah <<
25) | (al
>>> 7));
13741 var sigma0l = ((ah <<
4) | (al
>>> 28)) ^ ((al <<
30) | (ah
>>> 2)) ^ ((al <<
25) | (ah
>>> 7));
13744 var sigma1h = ((el <<
18) | (eh
>>> 14)) ^ ((el <<
14) | (eh
>>> 18)) ^ ((eh <<
23) | (el
>>> 9));
13745 var sigma1l = ((eh <<
18) | (el
>>> 14)) ^ ((eh <<
14) | (el
>>> 18)) ^ ((el <<
23) | (eh
>>> 9));
13749 var krl = k[i*
2+
1];
13751 // t1 = h + sigma1 + ch + K(round) + W(round)
13752 var t1l = hl + sigma1l;
13753 var t1h = hh + sigma1h + ((t1l
>>> 0) < (hl
>>> 0) ?
1 :
0);
13755 t1h += chh + ((t1l
>>> 0) < (chl
>>> 0) ?
1 :
0);
13757 t1h += krh + ((t1l
>>> 0) < (krl
>>> 0) ?
1 :
0);
13758 t1l = t1l + wrl|
0; // FF32..FF34 perf issue https://bugzilla.mozilla.org/show_bug.cgi?id=
1054972
13759 t1h += wrh + ((t1l
>>> 0) < (wrl
>>> 0) ?
1 :
0);
13761 // t2 = sigma0 + maj
13762 var t2l = sigma0l + majl;
13763 var t2h = sigma0h + majh + ((t2l
>>> 0) < (sigma0l
>>> 0) ?
1 :
0);
13765 // Update working variables
13772 el = (dl + t1l) |
0;
13773 eh = (dh + t1h + ((el
>>> 0) < (dl
>>> 0) ?
1 :
0)) |
0;
13780 al = (t1l + t2l) |
0;
13781 ah = (t1h + t2h + ((al
>>> 0) < (t1l
>>> 0) ?
1 :
0)) |
0;
13784 // Intermediate hash
13785 h0l = h[
1] = (h0l + al) |
0;
13786 h[
0] = (h0h + ah + ((h0l
>>> 0) < (al
>>> 0) ?
1 :
0)) |
0;
13787 h1l = h[
3] = (h1l + bl) |
0;
13788 h[
2] = (h1h + bh + ((h1l
>>> 0) < (bl
>>> 0) ?
1 :
0)) |
0;
13789 h2l = h[
5] = (h2l + cl) |
0;
13790 h[
4] = (h2h + ch + ((h2l
>>> 0) < (cl
>>> 0) ?
1 :
0)) |
0;
13791 h3l = h[
7] = (h3l + dl) |
0;
13792 h[
6] = (h3h + dh + ((h3l
>>> 0) < (dl
>>> 0) ?
1 :
0)) |
0;
13793 h4l = h[
9] = (h4l + el) |
0;
13794 h[
8] = (h4h + eh + ((h4l
>>> 0) < (el
>>> 0) ?
1 :
0)) |
0;
13795 h5l = h[
11] = (h5l + fl) |
0;
13796 h[
10] = (h5h + fh + ((h5l
>>> 0) < (fl
>>> 0) ?
1 :
0)) |
0;
13797 h6l = h[
13] = (h6l + gl) |
0;
13798 h[
12] = (h6h + gh + ((h6l
>>> 0) < (gl
>>> 0) ?
1 :
0)) |
0;
13799 h7l = h[
15] = (h7l + hl) |
0;
13800 h[
14] = (h7h + hh + ((h7l
>>> 0) < (hl
>>> 0) ?
1 :
0)) |
0;
13807 /** @fileOverview HMAC implementation.
13809 * @author Emily Stark
13810 * @author Mike Hamburg
13811 * @author Dan Boneh
13814 /** HMAC with the specified hash function.
13816 * @param {bitArray} key the key for HMAC.
13817 * @param {Object} [hash=sjcl.hash.sha256] The hash function to use.
13819 sjcl.misc.hmac = function (key, Hash) {
13820 this._hash = Hash = Hash || sjcl.hash.sha256;
13821 var exKey = [[],[]], i,
13822 bs = Hash.prototype.blockSize /
32;
13823 this._baseHash = [new Hash(), new Hash()];
13825 if (key.length
> bs) {
13826 key = Hash.hash(key);
13829 for (i=
0; i
<bs; i++) {
13830 exKey[
0][i] = key[i]^
0x36363636;
13831 exKey[
1][i] = key[i]^
0x5C5C5C5C;
13834 this._baseHash[
0].update(exKey[
0]);
13835 this._baseHash[
1].update(exKey[
1]);
13836 this._resultHash = new Hash(this._baseHash[
0]);
13839 /** HMAC with the specified hash function. Also called encrypt since it's a prf.
13840 * @param {bitArray|String} data The data to mac.
13842 sjcl.misc.hmac.prototype.encrypt = sjcl.misc.hmac.prototype.mac = function (data) {
13843 if (!this._updated) {
13845 return this.digest(data);
13847 throw new sjcl.exception.invalid(
"encrypt on already updated hmac called!");
13851 sjcl.misc.hmac.prototype.reset = function () {
13852 this._resultHash = new this._hash(this._baseHash[
0]);
13853 this._updated = false;
13856 sjcl.misc.hmac.prototype.update = function (data) {
13857 this._updated = true;
13858 this._resultHash.update(data);
13861 sjcl.misc.hmac.prototype.digest = function () {
13862 var w = this._resultHash.finalize(), result = new (this._hash)(this._baseHash[
1]).update(w).finalize();
13873 /** @fileOverview Password-based key-derivation function, version
2.0.
13875 * @author Emily Stark
13876 * @author Mike Hamburg
13877 * @author Dan Boneh
13880 /** Password-Based Key-Derivation Function, version
2.0.
13882 * Generate keys from passwords using PBKDF2-HMAC-SHA256.
13884 * This is the method specified by RSA's PKCS #
5 standard.
13886 * @param {bitArray|String} password The password.
13887 * @param {bitArray|String} salt The salt. Should have lots of entropy.
13888 * @param {Number} [count=
1000] The number of iterations. Higher numbers make the function slower but more secure.
13889 * @param {Number} [length] The length of the derived key. Defaults to the
13890 output size of the hash function.
13891 * @param {Object} [Prff=sjcl.misc.hmac] The pseudorandom function family.
13892 * @return {bitArray} the derived key.
13894 sjcl.misc.pbkdf2 = function (password, salt, count, length, Prff) {
13895 count = count ||
1000;
13897 if (length <
0 || count <
0) {
13898 throw sjcl.exception.invalid(
"invalid params to pbkdf2");
13901 if (typeof password ===
"string") {
13902 password = sjcl.codec.utf8String.toBits(password);
13905 if (typeof salt ===
"string") {
13906 salt = sjcl.codec.utf8String.toBits(salt);
13909 Prff = Prff || sjcl.misc.hmac;
13911 var prf = new Prff(password),
13912 u, ui, i, j, k, out = [], b = sjcl.bitArray;
13914 for (k =
1;
32 * out.length < (length ||
1); k++) {
13915 u = ui = prf.encrypt(b.concat(salt,[k]));
13917 for (i=
1; i
<count; i++) {
13918 ui = prf.encrypt(ui);
13919 for (j=
0; j
<ui.length; j++) {
13924 out = out.concat(u);
13927 if (length) { out = b.clamp(out, length); }
13935 /** @fileOverview Javascript SHA-
256 implementation.
13937 * An older version of this implementation is available in the public
13938 * domain, but this one is (c) Emily Stark, Mike Hamburg, Dan Boneh,
13939 * Stanford University
2008-
2010 and BSD-licensed for liability
13942 * Special thanks to Aldo Cortesi for pointing out several bugs in
13945 * @author Emily Stark
13946 * @author Mike Hamburg
13947 * @author Dan Boneh
13951 * Context for a SHA-
256 operation in progress.
13953 * @class Secure Hash Algorithm,
256 bits.
13955 sjcl.hash.sha256 = function (hash) {
13956 if (!this._key[
0]) { this._precompute(); }
13958 this._h = hash._h.slice(
0);
13959 this._buffer = hash._buffer.slice(
0);
13960 this._length = hash._length;
13967 * Hash a string or an array of words.
13969 * @param {bitArray|String} data the data to hash.
13970 * @return {bitArray} The hash value, an array of
16 big-endian words.
13972 sjcl.hash.sha256.hash = function (data) {
13973 return (new sjcl.hash.sha256()).update(data).finalize();
13976 sjcl.hash.sha256.prototype = {
13978 * The hash's block size, in bits.
13984 * Reset the hash state.
13987 reset:function () {
13988 this._h = this._init.slice(
0);
13995 * Input several words to the hash.
13996 * @param {bitArray|String} data the data to hash.
13999 update: function (data) {
14000 if (typeof data ===
"string") {
14001 data = sjcl.codec.utf8String.toBits(data);
14003 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
14005 nl = this._length = ol + sjcl.bitArray.bitLength(data);
14006 for (i =
512+ol & -
512; i <= nl; i+=
512) {
14007 this._block(b.splice(
0,
16));
14013 * Complete hashing and output the hash value.
14014 * @return {bitArray} The hash value, an array of
8 big-endian words.
14016 finalize:function () {
14017 var i, b = this._buffer, h = this._h;
14019 // Round out and push the buffer
14020 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(
1,
1)]);
14022 // Round out the buffer to a multiple of
16 words, less the
2 length words.
14023 for (i = b.length +
2; i &
15; i++) {
14027 // append the length
14028 b.push(Math.floor(this._length /
0x100000000));
14029 b.push(this._length |
0);
14032 this._block(b.splice(
0,
16));
14040 * The SHA-
256 initialization vector, to be precomputed.
14045 _init:[
0x6a09e667,
0xbb67ae85,
0x3c6ef372,
0xa54ff53a,
0x510e527f,
0x9b05688c,
0x1f83d9ab,
0x5be0cd19],
14049 * The SHA-
256 hash key, to be precomputed.
14055 [
0x428a2f98,
0x71374491,
0xb5c0fbcf,
0xe9b5dba5,
0x3956c25b,
0x59f111f1,
0x923f82a4,
0xab1c5ed5,
14056 0xd807aa98,
0x12835b01,
0x243185be,
0x550c7dc3,
0x72be5d74,
0x80deb1fe,
0x9bdc06a7,
0xc19bf174,
14057 0xe49b69c1,
0xefbe4786,
0x0fc19dc6,
0x240ca1cc,
0x2de92c6f,
0x4a7484aa,
0x5cb0a9dc,
0x76f988da,
14058 0x983e5152,
0xa831c66d,
0xb00327c8,
0xbf597fc7,
0xc6e00bf3,
0xd5a79147,
0x06ca6351,
0x14292967,
14059 0x27b70a85,
0x2e1b2138,
0x4d2c6dfc,
0x53380d13,
0x650a7354,
0x766a0abb,
0x81c2c92e,
0x92722c85,
14060 0xa2bfe8a1,
0xa81a664b,
0xc24b8b70,
0xc76c51a3,
0xd192e819,
0xd6990624,
0xf40e3585,
0x106aa070,
14061 0x19a4c116,
0x1e376c08,
0x2748774c,
0x34b0bcb5,
0x391c0cb3,
0x4ed8aa4a,
0x5b9cca4f,
0x682e6ff3,
14062 0x748f82ee,
0x78a5636f,
0x84c87814,
0x8cc70208,
0x90befffa,
0xa4506ceb,
0xbef9a3f7,
0xc67178f2],
14067 * Function to precompute _init and _key.
14070 _precompute: function () {
14071 var i =
0, prime =
2, factor;
14073 function frac(x) { return (x-Math.floor(x)) *
0x100000000 |
0; }
14075 outer: for (; i
<64; prime++) {
14076 for (factor=
2; factor*factor <= prime; factor++) {
14077 if (prime % factor ===
0) {
14084 this._init[i] = frac(Math.pow(prime,
1/
2));
14086 this._key[i] = frac(Math.pow(prime,
1/
3));
14092 * Perform one cycle of SHA-
256.
14093 * @param {bitArray} words one block of words.
14096 _block:function (words) {
14098 w = words.slice(
0),
14101 h0 = h[
0], h1 = h[
1], h2 = h[
2], h3 = h[
3],
14102 h4 = h[
4], h5 = h[
5], h6 = h[
6], h7 = h[
7];
14104 /* Rationale for placement of |
0 :
14105 * If a value can overflow is original
32 bits by a factor of more than a few
14106 * million (
2^
23 ish), there is a possibility that it might overflow the
14107 *
53-bit mantissa and lose precision.
14109 * To avoid this, we clamp back to
32 bits by |'ing with
0 on any value that
14110 * propagates around the loop, and on the hash state h[]. I don't believe
14111 * that the clamps on h4 and on h0 are strictly necessary, but it's close
14112 * (for h4 anyway), and better safe than sorry.
14114 * The clamps on h[] are necessary for the output to be correct even in the
14115 * common case and for short inputs.
14117 for (i=
0; i
<64; i++) {
14118 // load up the input word for this round
14122 a = w[(i+
1 ) &
15];
14123 b = w[(i+
14) &
15];
14124 tmp = w[i&
15] = ((a
>>>7 ^ a
>>>18 ^ a
>>>3 ^ a<
<25 ^ a<
<14) +
14125 (b
>>>17 ^ b
>>>19 ^ b
>>>10 ^ b<
<15 ^ b<
<13) +
14126 w[i&
15] + w[(i+
9) &
15]) |
0;
14129 tmp = (tmp + h7 + (h4
>>>6 ^ h4
>>>11 ^ h4
>>>25 ^ h4<
<26 ^ h4<
<21 ^ h4<
<7) + (h6 ^ h4&(h5^h6)) + k[i]); // |
0;
14132 h7 = h6; h6 = h5; h5 = h4;
14134 h3 = h2; h2 = h1; h1 = h0;
14136 h0 = (tmp + ((h1&h2) ^ (h3&(h1^h2))) + (h1
>>>2 ^ h1
>>>13 ^ h1
>>>22 ^ h1<
<30 ^ h1<
<19 ^ h1<
<10)) |
0;
14139 h[
0] = h[
0]+h0 |
0;
14140 h[
1] = h[
1]+h1 |
0;
14141 h[
2] = h[
2]+h2 |
0;
14142 h[
3] = h[
3]+h3 |
0;
14143 h[
4] = h[
4]+h4 |
0;
14144 h[
5] = h[
5]+h5 |
0;
14145 h[
6] = h[
6]+h6 |
0;
14146 h[
7] = h[
7]+h7 |
0;
14150 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
14151 WORDLISTS["english"] = [
14152 "abandon","ability","able","about","above","absent","absorb","abstract","absurd","abuse",
14153 "access","accident","account","accuse","achieve","acid","acoustic","acquire","across","act",
14154 "action","actor","actress","actual","adapt","add","addict","address","adjust","admit",
14155 "adult","advance","advice","aerobic","affair","afford","afraid","again","age","agent",
14156 "agree","ahead","aim","air","airport","aisle","alarm","album","alcohol","alert",
14157 "alien","all","alley","allow","almost","alone","alpha","already","also","alter",
14158 "always","amateur","amazing","among","amount","amused","analyst","anchor","ancient","anger",
14159 "angle","angry","animal","ankle","announce","annual","another","answer","antenna","antique",
14160 "anxiety","any","apart","apology","appear","apple","approve","april","arch","arctic",
14161 "area","arena","argue","arm","armed","armor","army","around","arrange","arrest",
14162 "arrive","arrow","art","artefact","artist","artwork","ask","aspect","assault","asset",
14163 "assist","assume","asthma","athlete","atom","attack","attend","attitude","attract","auction",
14164 "audit","august","aunt","author","auto","autumn","average","avocado","avoid","awake",
14165 "aware","away","awesome","awful","awkward","axis","baby","bachelor","bacon","badge",
14166 "bag","balance","balcony","ball","bamboo","banana","banner","bar","barely","bargain",
14167 "barrel","base","basic","basket","battle","beach","bean","beauty","because","become",
14168 "beef","before","begin","behave","behind","believe","below","belt","bench","benefit",
14169 "best","betray","better","between","beyond","bicycle","bid","bike","bind","biology",
14170 "bird","birth","bitter","black","blade","blame","blanket","blast","bleak","bless",
14171 "blind","blood","blossom","blouse","blue","blur","blush","board","boat","body",
14172 "boil","bomb","bone","bonus","book","boost","border","boring","borrow","boss",
14173 "bottom","bounce","box","boy","bracket","brain","brand","brass","brave","bread",
14174 "breeze","brick","bridge","brief","bright","bring","brisk","broccoli","broken","bronze",
14175 "broom","brother","brown","brush","bubble","buddy","budget","buffalo","build","bulb",
14176 "bulk","bullet","bundle","bunker","burden","burger","burst","bus","business","busy",
14177 "butter","buyer","buzz","cabbage","cabin","cable","cactus","cage","cake","call",
14178 "calm","camera","camp","can","canal","cancel","candy","cannon","canoe","canvas",
14179 "canyon","capable","capital","captain","car","carbon","card","cargo","carpet","carry",
14180 "cart","case","cash","casino","castle","casual","cat","catalog","catch","category",
14181 "cattle","caught","cause","caution","cave","ceiling","celery","cement","census","century",
14182 "cereal","certain","chair","chalk","champion","change","chaos","chapter","charge","chase",
14183 "chat","cheap","check","cheese","chef","cherry","chest","chicken","chief","child",
14184 "chimney","choice","choose","chronic","chuckle","chunk","churn","cigar","cinnamon","circle",
14185 "citizen","city","civil","claim","clap","clarify","claw","clay","clean","clerk",
14186 "clever","click","client","cliff","climb","clinic","clip","clock","clog","close",
14187 "cloth","cloud","clown","club","clump","cluster","clutch","coach","coast","coconut",
14188 "code","coffee","coil","coin","collect","color","column","combine","come","comfort",
14189 "comic","common","company","concert","conduct","confirm","congress","connect","consider","control",
14190 "convince","cook","cool","copper","copy","coral","core","corn","correct","cost",
14191 "cotton","couch","country","couple","course","cousin","cover","coyote","crack","cradle",
14192 "craft","cram","crane","crash","crater","crawl","crazy","cream","credit","creek",
14193 "crew","cricket","crime","crisp","critic","crop","cross","crouch","crowd","crucial",
14194 "cruel","cruise","crumble","crunch","crush","cry","crystal","cube","culture","cup",
14195 "cupboard","curious","current","curtain","curve","cushion","custom","cute","cycle","dad",
14196 "damage","damp","dance","danger","daring","dash","daughter","dawn","day","deal",
14197 "debate","debris","decade","december","decide","decline","decorate","decrease","deer","defense",
14198 "define","defy","degree","delay","deliver","demand","demise","denial","dentist","deny",
14199 "depart","depend","deposit","depth","deputy","derive","describe","desert","design","desk",
14200 "despair","destroy","detail","detect","develop","device","devote","diagram","dial","diamond",
14201 "diary","dice","diesel","diet","differ","digital","dignity","dilemma","dinner","dinosaur",
14202 "direct","dirt","disagree","discover","disease","dish","dismiss","disorder","display","distance",
14203 "divert","divide","divorce","dizzy","doctor","document","dog","doll","dolphin","domain",
14204 "donate","donkey","donor","door","dose","double","dove","draft","dragon","drama",
14205 "drastic","draw","dream","dress","drift","drill","drink","drip","drive","drop",
14206 "drum","dry","duck","dumb","dune","during","dust","dutch","duty","dwarf",
14207 "dynamic","eager","eagle","early","earn","earth","easily","east","easy","echo",
14208 "ecology","economy","edge","edit","educate","effort","egg","eight","either","elbow",
14209 "elder","electric","elegant","element","elephant","elevator","elite","else","embark","embody",
14210 "embrace","emerge","emotion","employ","empower","empty","enable","enact","end","endless",
14211 "endorse","enemy","energy","enforce","engage","engine","enhance","enjoy","enlist","enough",
14212 "enrich","enroll","ensure","enter","entire","entry","envelope","episode","equal","equip",
14213 "era","erase","erode","erosion","error","erupt","escape","essay","essence","estate",
14214 "eternal","ethics","evidence","evil","evoke","evolve","exact","example","excess","exchange",
14215 "excite","exclude","excuse","execute","exercise","exhaust","exhibit","exile","exist","exit",
14216 "exotic","expand","expect","expire","explain","expose","express","extend","extra","eye",
14217 "eyebrow","fabric","face","faculty","fade","faint","faith","fall","false","fame",
14218 "family","famous","fan","fancy","fantasy","farm","fashion","fat","fatal","father",
14219 "fatigue","fault","favorite","feature","february","federal","fee","feed","feel","female",
14220 "fence","festival","fetch","fever","few","fiber","fiction","field","figure","file",
14221 "film","filter","final","find","fine","finger","finish","fire","firm","first",
14222 "fiscal","fish","fit","fitness","fix","flag","flame","flash","flat","flavor",
14223 "flee","flight","flip","float","flock","floor","flower","fluid","flush","fly",
14224 "foam","focus","fog","foil","fold","follow","food","foot","force","forest",
14225 "forget","fork","fortune","forum","forward","fossil","foster","found","fox","fragile",
14226 "frame","frequent","fresh","friend","fringe","frog","front","frost","frown","frozen",
14227 "fruit","fuel","fun","funny","furnace","fury","future","gadget","gain","galaxy",
14228 "gallery","game","gap","garage","garbage","garden","garlic","garment","gas","gasp",
14229 "gate","gather","gauge","gaze","general","genius","genre","gentle","genuine","gesture",
14230 "ghost","giant","gift","giggle","ginger","giraffe","girl","give","glad","glance",
14231 "glare","glass","glide","glimpse","globe","gloom","glory","glove","glow","glue",
14232 "goat","goddess","gold","good","goose","gorilla","gospel","gossip","govern","gown",
14233 "grab","grace","grain","grant","grape","grass","gravity","great","green","grid",
14234 "grief","grit","grocery","group","grow","grunt","guard","guess","guide","guilt",
14235 "guitar","gun","gym","habit","hair","half","hammer","hamster","hand","happy",
14236 "harbor","hard","harsh","harvest","hat","have","hawk","hazard","head","health",
14237 "heart","heavy","hedgehog","height","hello","helmet","help","hen","hero","hidden",
14238 "high","hill","hint","hip","hire","history","hobby","hockey","hold","hole",
14239 "holiday","hollow","home","honey","hood","hope","horn","horror","horse","hospital",
14240 "host","hotel","hour","hover","hub","huge","human","humble","humor","hundred",
14241 "hungry","hunt","hurdle","hurry","hurt","husband","hybrid","ice","icon","idea",
14242 "identify","idle","ignore","ill","illegal","illness","image","imitate","immense","immune",
14243 "impact","impose","improve","impulse","inch","include","income","increase","index","indicate",
14244 "indoor","industry","infant","inflict","inform","inhale","inherit","initial","inject","injury",
14245 "inmate","inner","innocent","input","inquiry","insane","insect","inside","inspire","install",
14246 "intact","interest","into","invest","invite","involve","iron","island","isolate","issue",
14247 "item","ivory","jacket","jaguar","jar","jazz","jealous","jeans","jelly","jewel",
14248 "job","join","joke","journey","joy","judge","juice","jump","jungle","junior",
14249 "junk","just","kangaroo","keen","keep","ketchup","key","kick","kid","kidney",
14250 "kind","kingdom","kiss","kit","kitchen","kite","kitten","kiwi","knee","knife",
14251 "knock","know","lab","label","labor","ladder","lady","lake","lamp","language",
14252 "laptop","large","later","latin","laugh","laundry","lava","law","lawn","lawsuit",
14253 "layer","lazy","leader","leaf","learn","leave","lecture","left","leg","legal",
14254 "legend","leisure","lemon","lend","length","lens","leopard","lesson","letter","level",
14255 "liar","liberty","library","license","life","lift","light","like","limb","limit",
14256 "link","lion","liquid","list","little","live","lizard","load","loan","lobster",
14257 "local","lock","logic","lonely","long","loop","lottery","loud","lounge","love",
14258 "loyal","lucky","luggage","lumber","lunar","lunch","luxury","lyrics","machine","mad",
14259 "magic","magnet","maid","mail","main","major","make","mammal","man","manage",
14260 "mandate","mango","mansion","manual","maple","marble","march","margin","marine","market",
14261 "marriage","mask","mass","master","match","material","math","matrix","matter","maximum",
14262 "maze","meadow","mean","measure","meat","mechanic","medal","media","melody","melt",
14263 "member","memory","mention","menu","mercy","merge","merit","merry","mesh","message",
14264 "metal","method","middle","midnight","milk","million","mimic","mind","minimum","minor",
14265 "minute","miracle","mirror","misery","miss","mistake","mix","mixed","mixture","mobile",
14266 "model","modify","mom","moment","monitor","monkey","monster","month","moon","moral",
14267 "more","morning","mosquito","mother","motion","motor","mountain","mouse","move","movie",
14268 "much","muffin","mule","multiply","muscle","museum","mushroom","music","must","mutual",
14269 "myself","mystery","myth","naive","name","napkin","narrow","nasty","nation","nature",
14270 "near","neck","need","negative","neglect","neither","nephew","nerve","nest","net",
14271 "network","neutral","never","news","next","nice","night","noble","noise","nominee",
14272 "noodle","normal","north","nose","notable","note","nothing","notice","novel","now",
14273 "nuclear","number","nurse","nut","oak","obey","object","oblige","obscure","observe",
14274 "obtain","obvious","occur","ocean","october","odor","off","offer","office","often",
14275 "oil","okay","old","olive","olympic","omit","once","one","onion","online",
14276 "only","open","opera","opinion","oppose","option","orange","orbit","orchard","order",
14277 "ordinary","organ","orient","original","orphan","ostrich","other","outdoor","outer","output",
14278 "outside","oval","oven","over","own","owner","oxygen","oyster","ozone","pact",
14279 "paddle","page","pair","palace","palm","panda","panel","panic","panther","paper",
14280 "parade","parent","park","parrot","party","pass","patch","path","patient","patrol",
14281 "pattern","pause","pave","payment","peace","peanut","pear","peasant","pelican","pen",
14282 "penalty","pencil","people","pepper","perfect","permit","person","pet","phone","photo",
14283 "phrase","physical","piano","picnic","picture","piece","pig","pigeon","pill","pilot",
14284 "pink","pioneer","pipe","pistol","pitch","pizza","place","planet","plastic","plate",
14285 "play","please","pledge","pluck","plug","plunge","poem","poet","point","polar",
14286 "pole","police","pond","pony","pool","popular","portion","position","possible","post",
14287 "potato","pottery","poverty","powder","power","practice","praise","predict","prefer","prepare",
14288 "present","pretty","prevent","price","pride","primary","print","priority","prison","private",
14289 "prize","problem","process","produce","profit","program","project","promote","proof","property",
14290 "prosper","protect","proud","provide","public","pudding","pull","pulp","pulse","pumpkin",
14291 "punch","pupil","puppy","purchase","purity","purpose","purse","push","put","puzzle",
14292 "pyramid","quality","quantum","quarter","question","quick","quit","quiz","quote","rabbit",
14293 "raccoon","race","rack","radar","radio","rail","rain","raise","rally","ramp",
14294 "ranch","random","range","rapid","rare","rate","rather","raven","raw","razor",
14295 "ready","real","reason","rebel","rebuild","recall","receive","recipe","record","recycle",
14296 "reduce","reflect","reform","refuse","region","regret","regular","reject","relax","release",
14297 "relief","rely","remain","remember","remind","remove","render","renew","rent","reopen",
14298 "repair","repeat","replace","report","require","rescue","resemble","resist","resource","response",
14299 "result","retire","retreat","return","reunion","reveal","review","reward","rhythm","rib",
14300 "ribbon","rice","rich","ride","ridge","rifle","right","rigid","ring","riot",
14301 "ripple","risk","ritual","rival","river","road","roast","robot","robust","rocket",
14302 "romance","roof","rookie","room","rose","rotate","rough","round","route","royal",
14303 "rubber","rude","rug","rule","run","runway","rural","sad","saddle","sadness",
14304 "safe","sail","salad","salmon","salon","salt","salute","same","sample","sand",
14305 "satisfy","satoshi","sauce","sausage","save","say","scale","scan","scare","scatter",
14306 "scene","scheme","school","science","scissors","scorpion","scout","scrap","screen","script",
14307 "scrub","sea","search","season","seat","second","secret","section","security","seed",
14308 "seek","segment","select","sell","seminar","senior","sense","sentence","series","service",
14309 "session","settle","setup","seven","shadow","shaft","shallow","share","shed","shell",
14310 "sheriff","shield","shift","shine","ship","shiver","shock","shoe","shoot","shop",
14311 "short","shoulder","shove","shrimp","shrug","shuffle","shy","sibling","sick","side",
14312 "siege","sight","sign","silent","silk","silly","silver","similar","simple","since",
14313 "sing","siren","sister","situate","six","size","skate","sketch","ski","skill",
14314 "skin","skirt","skull","slab","slam","sleep","slender","slice","slide","slight",
14315 "slim","slogan","slot","slow","slush","small","smart","smile","smoke","smooth",
14316 "snack","snake","snap","sniff","snow","soap","soccer","social","sock","soda",
14317 "soft","solar","soldier","solid","solution","solve","someone","song","soon","sorry",
14318 "sort","soul","sound","soup","source","south","space","spare","spatial","spawn",
14319 "speak","special","speed","spell","spend","sphere","spice","spider","spike","spin",
14320 "spirit","split","spoil","sponsor","spoon","sport","spot","spray","spread","spring",
14321 "spy","square","squeeze","squirrel","stable","stadium","staff","stage","stairs","stamp",
14322 "stand","start","state","stay","steak","steel","stem","step","stereo","stick",
14323 "still","sting","stock","stomach","stone","stool","story","stove","strategy","street",
14324 "strike","strong","struggle","student","stuff","stumble","style","subject","submit","subway",
14325 "success","such","sudden","suffer","sugar","suggest","suit","summer","sun","sunny",
14326 "sunset","super","supply","supreme","sure","surface","surge","surprise","surround","survey",
14327 "suspect","sustain","swallow","swamp","swap","swarm","swear","sweet","swift","swim",
14328 "swing","switch","sword","symbol","symptom","syrup","system","table","tackle","tag",
14329 "tail","talent","talk","tank","tape","target","task","taste","tattoo","taxi",
14330 "teach","team","tell","ten","tenant","tennis","tent","term","test","text",
14331 "thank","that","theme","then","theory","there","they","thing","this","thought",
14332 "three","thrive","throw","thumb","thunder","ticket","tide","tiger","tilt","timber",
14333 "time","tiny","tip","tired","tissue","title","toast","tobacco","today","toddler",
14334 "toe","together","toilet","token","tomato","tomorrow","tone","tongue","tonight","tool",
14335 "tooth","top","topic","topple","torch","tornado","tortoise","toss","total","tourist",
14336 "toward","tower","town","toy","track","trade","traffic","tragic","train","transfer",
14337 "trap","trash","travel","tray","treat","tree","trend","trial","tribe","trick",
14338 "trigger","trim","trip","trophy","trouble","truck","true","truly","trumpet","trust",
14339 "truth","try","tube","tuition","tumble","tuna","tunnel","turkey","turn","turtle",
14340 "twelve","twenty","twice","twin","twist","two","type","typical","ugly","umbrella",
14341 "unable","unaware","uncle","uncover","under","undo","unfair","unfold","unhappy","uniform",
14342 "unique","unit","universe","unknown","unlock","until","unusual","unveil","update","upgrade",
14343 "uphold","upon","upper","upset","urban","urge","usage","use","used","useful",
14344 "useless","usual","utility","vacant","vacuum","vague","valid","valley","valve","van",
14345 "vanish","vapor","various","vast","vault","vehicle","velvet","vendor","venture","venue",
14346 "verb","verify","version","very","vessel","veteran","viable","vibrant","vicious","victory",
14347 "video","view","village","vintage","violin","virtual","virus","visa","visit","visual",
14348 "vital","vivid","vocal","voice","void","volcano","volume","vote","voyage","wage",
14349 "wagon","wait","walk","wall","walnut","want","warfare","warm","warrior","wash",
14350 "wasp","waste","water","wave","way","wealth","weapon","wear","weasel","weather",
14351 "web","wedding","weekend","weird","welcome","west","wet","whale","what","wheat",
14352 "wheel","when","where","whip","whisper","wide","width","wife","wild","will",
14353 "win","window","wine","wing","wink","winner","winter","wire","wisdom","wise",
14354 "wish","witness","wolf","woman","wonder","wood","wool","word","work","world",
14355 "worry","worth","wrap","wreck","wrestle","wrist","write","wrong","yard","year",
14356 "yellow","you","young","youth","zebra","zero","zone","zoo"]
14359 * Copyright (c)
2013 Pavol Rusnak
14361 * Permission is hereby granted, free of charge, to any person obtaining a copy of
14362 * this software and associated documentation files (the "Software"), to deal in
14363 * the Software without restriction, including without limitation the rights to
14364 * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
14365 * of the Software, and to permit persons to whom the Software is furnished to do
14366 * so, subject to the following conditions:
14368 * The above copyright notice and this permission notice shall be included in all
14369 * copies or substantial portions of the Software.
14371 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14372 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
14373 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
14374 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
14375 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
14376 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
14380 * Javascript port from python by Ian Coleman
14382 * Requires code from sjcl
14383 * https://github.com/bitwiseshiftleft/sjcl
14386 var Mnemonic = function(language) {
14388 var PBKDF2_ROUNDS =
2048;
14394 var hmacSHA512 = function(key) {
14395 var hasher = new sjcl.misc.hmac(key, sjcl.hash.sha512);
14396 this.encrypt = function() {
14397 return hasher.encrypt.apply(hasher, arguments);
14402 wordlist = WORDLISTS[language];
14403 if (wordlist.length != RADIX) {
14404 err = 'Wordlist should contain ' + RADIX + ' words, but it contains ' + wordlist.length + ' words.';
14409 self.generate = function(strength) {
14410 strength = strength ||
128;
14411 var r = strength %
32;
14413 throw 'Strength should be divisible by
32, but it is not (' + r + ').';
14415 var hasStrongCrypto = 'crypto' in window && window['crypto'] !== null;
14416 if (!hasStrongCrypto) {
14417 throw 'Mnemonic should be generated with strong randomness, but crypto.getRandomValues is unavailable';
14419 var buffer = new Uint8Array(strength /
8);
14420 var data = crypto.getRandomValues(buffer);
14421 return self.toMnemonic(data);
14424 self.toMnemonic = function(byteArray) {
14425 if (byteArray.length %
4 > 0) {
14426 throw 'Data length in bits should be divisible by
32, but it is not (' + byteArray.length + ' bytes = ' + byteArray.length*
8 + ' bits).'
14429 //h = hashlib.sha256(data).hexdigest()
14430 var data = byteArrayToWordArray(byteArray);
14431 var hash = sjcl.hash.sha256.hash(data);
14432 var h = sjcl.codec.hex.fromBits(hash);
14434 // b is a binary string, eg '
00111010101100...'
14435 //b = bin(int(binascii.hexlify(data),
16))[
2:].zfill(len(data) *
8) + \
14436 // bin(int(h,
16))[
2:].zfill(
256)[:len(data) *
8 /
32]
14438 // a = bin(int(binascii.hexlify(data),
16))[
2:].zfill(len(data) *
8)
14439 // c = bin(int(h,
16))[
2:].zfill(
256)
14440 // d = c[:len(data) *
8 /
32]
14441 var a = byteArrayToBinaryString(byteArray);
14442 var c = zfill(hexStringToBinaryString(h),
256);
14443 var d = c.substring(
0, byteArray.length *
8 /
32);
14444 // b = line1 + line2
14448 var blen = b.length /
11;
14449 for (var i=
0; i
<blen; i++) {
14450 var idx = parseInt(b.substring(i *
11, (i +
1) *
11),
2);
14451 result.push(wordlist[idx]);
14453 return result.join(' ');
14456 self.check = function(mnemonic) {
14457 var mnemonic = mnemonic.split(' ')
14458 if (mnemonic.length %
3 > 0) {
14461 // idx = map(lambda x: bin(self.wordlist.index(x))[
2:].zfill(
11), mnemonic)
14463 for (var i=
0; i
<mnemonic.length; i++) {
14464 var word = mnemonic[i];
14465 var wordIndex = wordlist.indexOf(word);
14466 if (wordIndex == -
1) {
14469 var binaryIndex = zfill(wordIndex.toString(
2),
11);
14470 idx.push(binaryIndex);
14472 var b = idx.join('');
14474 //d = b[:l /
33 *
32]
14476 var d = b.substring(
0, l /
33 *
32);
14477 var h = b.substring(l - l /
33, l);
14478 //nd = binascii.unhexlify(hex(int(d,
2))[
2:].rstrip('L').zfill(l /
33 *
8))
14479 var nd = binaryStringToWordArray(d);
14480 //nh = bin(int(hashlib.sha256(nd).hexdigest(),
16))[
2:].zfill(
256)[:l /
33]
14481 var ndHash = sjcl.hash.sha256.hash(nd);
14482 var ndHex = sjcl.codec.hex.fromBits(ndHash);
14483 var ndBstr = zfill(hexStringToBinaryString(ndHex),
256);
14484 var nh = ndBstr.substring(
0,l/
33);
14488 self.toSeed = function(mnemonic, passphrase) {
14489 passphrase = passphrase || '';
14490 mnemonic = self.normalizeString(mnemonic)
14491 passphrase = self.normalizeString(passphrase)
14492 passphrase =
"mnemonic" + passphrase;
14493 var mnemonicBits = sjcl.codec.utf8String.toBits(mnemonic);
14494 var passphraseBits = sjcl.codec.utf8String.toBits(passphrase);
14495 var result = sjcl.misc.pbkdf2(mnemonicBits, passphraseBits, PBKDF2_ROUNDS,
512, hmacSHA512);
14496 var hashHex = sjcl.codec.hex.fromBits(result);
14500 self.normalizeString = function(str) {
14501 if (typeof str.normalize ==
"function") {
14502 return str.normalize(
"NFKD");
14505 // TODO decide how to handle this in the future.
14506 // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize
14511 function byteArrayToWordArray(data) {
14513 for (var i=
0; i
<data.length/
4; i++) {
14515 v += data[i*
4 +
0] <<
8 *
3;
14516 v += data[i*
4 +
1] <<
8 *
2;
14517 v += data[i*
4 +
2] <<
8 *
1;
14518 v += data[i*
4 +
3] <<
8 *
0;
14524 function byteArrayToBinaryString(data) {
14526 for (var i=
0; i
<data.length; i++) {
14527 bin += zfill(data[i].toString(
2),
8);
14532 function hexStringToBinaryString(hexString) {
14534 for (var i=
0; i
<hexString.length; i++) {
14535 binaryString += zfill(parseInt(hexString[i],
16).toString(
2),
4);
14537 return binaryString;
14540 function binaryStringToWordArray(binary) {
14541 var aLen = binary.length /
32;
14543 for (var i=
0; i
<aLen; i++) {
14544 var valueStr = binary.substring(
0,
32);
14545 var value = parseInt(valueStr,
2);
14547 binary = binary.slice(
32);
14552 // Pad a numeric string on the left with zero digits until the given width
14554 // Note this differs to the python implementation because it does not
14555 // handle numbers starting with a sign.
14556 function zfill(source, length) {
14557 source = source.toString();
14558 while (source.length < length) {
14559 source = '
0' + source;
14568 <script>(function() {
14570 var mnemonic = new Mnemonic("english");
14571 var bip32RootKey = null;
14572 var bip32ExtendedKey = null;
14573 var network = bitcoin.networks.bitcoin;
14574 var addressRowTemplate = $("#address-row-template");
14576 var showIndex = true;
14577 var showAddress = true;
14578 var showPrivKey = true;
14580 var phraseChangeTimeoutEvent = null;
14583 DOM.network = $(".network");
14584 DOM.phraseNetwork = $("#network-phrase");
14585 DOM.phrase = $(".phrase");
14586 DOM.passphrase = $(".passphrase");
14587 DOM.generate = $(".generate");
14588 DOM.rootKey = $(".root-key");
14589 DOM.extendedPrivKey = $(".extended-priv-key");
14590 DOM.extendedPubKey = $(".extended-pub-key");
14591 DOM.bip32tab = $("#bip32-tab");
14592 DOM.bip44tab = $("#bip44-tab");
14593 DOM.bip32panel = $("#bip32");
14594 DOM.bip44panel = $("#bip44");
14595 DOM.bip32path = $("#bip32-path");
14596 DOM.bip44path = $("#bip44-path");
14597 DOM.bip44purpose = $("#bip44 .purpose");
14598 DOM.bip44coin = $("#bip44 .coin");
14599 DOM.bip44account = $("#bip44 .account");
14600 DOM.bip44change = $("#bip44 .change");
14601 DOM.strength = $(".strength");
14602 DOM.addresses = $(".addresses");
14603 DOM.rowsToAdd = $(".rows-to-add");
14604 DOM.more = $(".more");
14605 DOM.feedback = $(".feedback");
14606 DOM.tab = $(".derivation-type a");
14607 DOM.indexToggle = $(".index-toggle");
14608 DOM.addressToggle = $(".address-toggle");
14609 DOM.privateKeyToggle = $(".private-key-toggle");
14610 DOM.myceliumPath = $("#mycelium-path");
14612 var derivationPath = $(".tab-pane.active .path").val();
14616 DOM.network.on("change", networkChanged);
14617 DOM.phrase.on("input", delayedPhraseChanged);
14618 DOM.passphrase.on("input", delayedPhraseChanged);
14619 DOM.generate.on("click", generateClicked);
14620 DOM.more.on("click", showMore);
14621 DOM.bip32path.on("input", bip32Changed);
14622 DOM.bip44purpose.on("input", bip44Changed);
14623 DOM.bip44coin.on("input", bip44Changed);
14624 DOM.bip44account.on("input", bip44Changed);
14625 DOM.bip44change.on("input", bip44Changed);
14626 DOM.tab.on("click", tabClicked);
14627 DOM.indexToggle.on("click", toggleIndexes);
14628 DOM.addressToggle.on("click", toggleAddresses);
14629 DOM.privateKeyToggle.on("click", togglePrivateKeys);
14632 hideValidationError();
14633 populateNetworkSelect();
14638 function networkChanged(e) {
14639 var network = e.target.value;
14640 networks[network].onSelect();
14641 setBip44DerivationPath();
14642 delayedPhraseChanged();
14645 function delayedPhraseChanged() {
14646 hideValidationError();
14648 if (phraseChangeTimeoutEvent != null) {
14649 clearTimeout(phraseChangeTimeoutEvent);
14651 phraseChangeTimeoutEvent = setTimeout(phraseChanged,
400);
14654 function phraseChanged() {
14656 hideValidationError();
14657 // Get the mnemonic phrase
14658 var phrase = DOM.phrase.val();
14659 var passphrase = DOM.passphrase.val();
14660 var errorText = findPhraseErrors(phrase);
14662 showValidationError(errorText);
14665 // Get the derivation path
14666 var errorText = findDerivationPathErrors();
14668 showValidationError(errorText);
14671 // Calculate and display
14672 calcBip32Seed(phrase, passphrase, derivationPath);
14673 displayBip32Info();
14677 function generateClicked() {
14680 setTimeout(function() {
14681 var phrase = generateRandomPhrase();
14689 function tabClicked(e) {
14690 var activePath = $(e.target.getAttribute("href") + " .path");
14691 derivationPath = activePath.val();
14692 derivationChanged();
14695 function derivationChanged() {
14696 delayedPhraseChanged();
14699 function bip32Changed() {
14700 derivationPath = DOM.bip32path.val();
14701 derivationChanged();
14704 function bip44Changed() {
14705 setBip44DerivationPath();
14706 derivationPath = DOM.bip44path.val();
14707 derivationChanged();
14710 function toggleIndexes() {
14711 showIndex = !showIndex;
14712 $("td.index span").toggleClass("invisible");
14715 function toggleAddresses() {
14716 showAddress = !showAddress;
14717 $("td.address span").toggleClass("invisible");
14720 function togglePrivateKeys() {
14721 showPrivKey = !showPrivKey;
14722 $("td.privkey span").toggleClass("invisible");
14727 function generateRandomPhrase() {
14728 if (!hasStrongRandom()) {
14729 var errorText = "This browser does not support strong randomness";
14730 showValidationError(errorText);
14733 var numWords = parseInt(DOM.strength.val());
14734 // Check strength is an integer
14735 if (isNaN(numWords)) {
14736 DOM.strength.val("
12");
14739 // Check strength is a multiple of
32, if not round it down
14740 if (numWords %
3 !=
0) {
14741 numWords = Math.floor(numWords /
3) *
3;
14742 DOM.strength.val(numWords);
14744 // Check strength is at least
32
14745 if (numWords ==
0) {
14747 DOM.strength.val(numWords);
14749 var strength = numWords /
3 *
32;
14750 var words = mnemonic.generate(strength);
14751 DOM.phrase.val(words);
14755 function calcBip32Seed(phrase, passphrase, path) {
14756 var seed = mnemonic.toSeed(phrase, passphrase);
14757 bip32RootKey = bitcoin.HDNode.fromSeedHex(seed, network);
14758 bip32ExtendedKey = bip32RootKey;
14759 // Derive the key from the path
14760 var pathBits = path.split("/");
14761 for (var i=
0; i
<pathBits.length; i++) {
14762 var bit = pathBits[i];
14763 var index = parseInt(bit);
14764 if (isNaN(index)) {
14767 var hardened = bit[bit.length-
1] ==
"'";
14769 bip32ExtendedKey = bip32ExtendedKey.deriveHardened(index);
14772 bip32ExtendedKey = bip32ExtendedKey.derive(index);
14777 function showValidationError(errorText) {
14783 function hideValidationError() {
14789 function findPhraseErrors(phrase) {
14790 // TODO make this right
14791 // Preprocess the words
14792 phrase = mnemonic.normalizeString(phrase);
14793 var parts = phrase.split(
" ");
14795 for (var i=
0; i
<parts.length; i++) {
14796 var part = parts[i];
14797 if (part.length
> 0) {
14798 // TODO check that lowercasing is always valid to do
14799 proper.push(part.toLowerCase());
14802 // TODO some levenstein on the words
14803 var properPhrase = proper.join(' ');
14804 // Check the words are valid
14805 var isValid = mnemonic.check(properPhrase);
14807 return
"Invalid mnemonic";
14812 function findDerivationPathErrors(path) {
14817 function displayBip32Info() {
14819 var rootKey = bip32RootKey.toBase58();
14820 DOM.rootKey.val(rootKey);
14821 var extendedPrivKey = bip32ExtendedKey.toBase58();
14822 DOM.extendedPrivKey.val(extendedPrivKey);
14823 var extendedPubKey = bip32ExtendedKey.toBase58(false);
14824 DOM.extendedPubKey.val(extendedPubKey);
14825 // Display the addresses and privkeys
14826 clearAddressesList();
14827 displayAddresses(
0,
20);
14830 function displayAddresses(start, total) {
14831 for (var i=
0; i
<total; i++) {
14832 var index = i + start;
14833 new TableRow(index);
14837 function TableRow(index) {
14843 function calculateValues() {
14844 setTimeout(function() {
14845 var key = bip32ExtendedKey.derive(index);
14846 var address = key.getAddress().toString();
14847 var privkey = key.privKey.toWIF(network);
14848 addAddressToList(index, address, privkey);
14856 function showMore() {
14857 var start = DOM.addresses.children().length;
14858 var rowsToAdd = parseInt(DOM.rowsToAdd.val());
14859 if (isNaN(rowsToAdd)) {
14861 DOM.rowsToAdd.val(
"20");
14863 if (rowsToAdd
> 200) {
14864 var msg =
"Generating " + rowsToAdd +
" rows could take a while. ";
14865 msg +=
"Do you want to continue?";
14866 if (!confirm(msg)) {
14870 displayAddresses(start, rowsToAdd);
14873 function clearDisplay() {
14874 clearAddressesList();
14876 hideValidationError();
14879 function clearAddressesList() {
14880 DOM.addresses.empty();
14883 function clearKey() {
14884 DOM.rootKey.val(
"");
14885 DOM.extendedPrivKey.val(
"");
14886 DOM.extendedPubKey.val(
"");
14889 function addAddressToList(index, address, privkey) {
14890 var row = $(addressRowTemplate.html());
14892 var indexCell = row.find(
".index span");
14893 var addressCell = row.find(
".address span");
14894 var privkeyCell = row.find(
".privkey span");
14896 indexCell.text(index);
14897 addressCell.text(address);
14898 privkeyCell.text(privkey);
14901 indexCell.addClass(
"invisible");
14903 if (!showAddress) {
14904 addressCell.addClass(
"invisible");
14906 if (!showPrivKey) {
14907 privkeCell.addClass(
"invisible");
14909 DOM.addresses.append(row);
14912 function hasStrongRandom() {
14913 return 'crypto' in window && window['crypto'] !== null;
14916 function disableForms() {
14917 $(
"form").on(
"submit", function(e) {
14918 e.preventDefault();
14922 function setBip44DerivationPath() {
14923 var purpose = parseIntNoNaN(DOM.bip44purpose.val(),
44);
14924 var coin = parseIntNoNaN(DOM.bip44coin.val(),
0);
14925 var account = parseIntNoNaN(DOM.bip44account.val(),
0);
14926 var change = parseIntNoNaN(DOM.bip44change.val(),
0);
14928 path += purpose +
"'/";
14929 path += coin +
"'/";
14930 path += account +
"'/";
14932 DOM.bip44path.val(path);
14935 function parseIntNoNaN(val, defaultVal) {
14936 var v = parseInt(val);
14943 function showPending() {
14945 .text(
"Calculating...")
14949 function hidePending() {
14955 function populateNetworkSelect() {
14956 for (var i=
0; i
<networks.length; i++) {
14957 var network = networks[i];
14958 var option = $(
"<option>");
14959 option.attr(
"value", i);
14960 option.text(network.name);
14961 DOM.phraseNetwork.append(option);
14968 onSelect: function() {
14969 network = bitcoin.networks.bitcoin;
14970 DOM.bip44coin.val(
0);
14971 DOM.myceliumPath.val(
"m/44'/0'/0'/0");
14975 name:
"Bitcoin Testnet",
14976 onSelect: function() {
14977 network = bitcoin.networks.testnet;
14978 DOM.bip44coin.val(
1);
14979 DOM.myceliumPath.val(
"m/44'/1'/0'/0");
14984 onSelect: function() {
14985 network = bitcoin.networks.litecoin;
14986 DOM.bip44coin.val(
2);
14991 onSelect: function() {
14992 network = bitcoin.networks.dogecoin;
14993 DOM.bip44coin.val(
3);